{
  "openapi": "3.0.2",
  "info": {
    "contact": {
      "email": "support@mongodb.com",
      "name": "MongoDB Support",
      "url": "https://support.mongodb.com/help"
    },
    "description": "OpenAPI specification for MongoDB Relational Migrator tool",
    "license": {
      "name": "MongoDB, Inc. Technology Evaluation Agreement",
      "url": "https://www.mongodb.com/legal"
    },
    "title": "MongoDB Relational Migrator REST API",
    "version": "1.18.1"
  },
  "servers": [
    {
      "url": "http://127.0.0.1:8278/api/v1"
    }
  ],
  "paths": {
    "/analysis/{projectId}/task": {
      "get": {
        "operationId": "getAnalysisTask",
        "description": "Get pre-migration analysis task by `projectId`.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/analysis-task"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Analysis"
        ]
      },
      "post": {
        "operationId": "createAnalysisTask",
        "description": "Create a task for pre-migration analysis.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/analysis-task-create-request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/analysis-task"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Analysis"
        ]
      }
    },
    "/analysis/{projectId}/task/cancel": {
      "post": {
        "operationId": "cancelAnalysisTask",
        "description": "Cancel a running pre-migration analysis task.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/analysis-task"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Analysis"
        ]
      }
    },
    "/analysis/{projectId}/report": {
      "get": {
        "operationId": "getReport",
        "description": "Get a pre-migration analysis report.",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/analysis-report"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Analysis"
        ]
      }
    },
    "/jobs": {
      "get": {
        "operationId": "getJobs",
        "description": "Get all migration jobs",
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Order in which to retrieve the results",
            "required": false,
            "schema": {
              "type": "string",
              "default": "submittedAt,DESC",
              "pattern": "^\\w+,(DESC|ASC)$"
            },
            "example": "submittedAt,DESC"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Limit the results",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "example": 20
          },
          {
            "name": "type",
            "in": "query",
            "description": "Filter jobs to only of a specific job type",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/migration-jobs-get-type"
            },
            "example": "IN_PROGRESS"
          },
          {
            "name": "projectId",
            "in": "query",
            "description": "Filter jobs by projectId",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/migration-job-status"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Job"
        ]
      },
      "post": {
        "operationId": "createJob",
        "description": "Post a new migration job",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/post-migration-job-request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/migration-job-status"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Job"
        ]
      }
    },
    "/jobs/{jobId}": {
      "get": {
        "operationId": "getJob",
        "description": "Get the status of a migration job by ID",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/migration-job-status"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Job"
        ]
      }
    },
    "/jobs/{jobId}/pause": {
      "post": {
        "operationId": "pauseJob",
        "description": "Pause a running migration job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/migration-job-status"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Job"
        ]
      }
    },
    "/jobs/{jobId}/resume": {
      "post": {
        "operationId": "resumeJob",
        "description": "Resume a paused migration job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/migration-job-status"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Job"
        ]
      }
    },
    "/jobs/{jobId}/stop": {
      "post": {
        "operationId": "stopJob",
        "description": "Stop a running migration job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/migration-job-status"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Job"
        ]
      }
    },
    "/jobs/{jobId}/logs": {
      "get": {
        "operationId": "getJobLogs",
        "description": "Get the events of a migration job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Limit the number of events",
            "schema": {
              "type": "integer",
              "default": 1000,
              "minimum": 0
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "the number of events since the most recent event",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          },
          {
            "name": "eventType",
            "in": "query",
            "description": "filter by a specific job event type",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/job-event-type"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/job-update"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Job"
        ]
      }
    },
    "/jobs/{jobId}/logs/download": {
      "get": {
        "operationId": "downloadJobLogs",
        "description": "Downloads the events of a job",
        "parameters": [
          {
            "name": "jobId",
            "in": "path",
            "description": "Job ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/zip": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Job"
        ]
      }
    },
    "/project": {
      "get": {
        "operationId": "getProjects",
        "description": "Get all projects",
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Order in which to retrieve the results",
            "required": false,
            "schema": {
              "type": "string",
              "default": "lastModified,DESC",
              "pattern": "^\\w+,(DESC|ASC)$"
            },
            "example": "lastModified,DESC"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/project-descriptor-summary"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Project"
        ]
      }
    },
    "/project/import": {
      "post": {
        "operationId": "importProject",
        "description": "Imports a project from an export file",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectDescriptor"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Project"
        ]
      }
    },
    "/project/{projectId}/collections": {
      "get": {
        "operationId": "getCollections",
        "description": "Get all collections belonging to a project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/project-collections"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Project"
        ]
      }
    },
    "/project/{projectId}/export": {
      "get": {
        "operationId": "exportProject",
        "description": "Export an existing project",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/export-file"
                }
              }
            }
          },
          "404": {
            "description": "Not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          }
        },
        "tags": [
          "Project"
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "id": {
        "type": "string",
        "pattern": "^[A-Za-z0-9\\-]+$"
      },
      "analysis-task": {
        "type": "object",
        "properties": {
          "projectId": {
            "$ref": "#/components/schemas/id"
          },
          "status": {
            "type": "string",
            "enum": [
              "RUNNING",
              "FAILED",
              "CANCELLED",
              "COMPLETED"
            ]
          },
          "submittedAt": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "projectId",
          "status",
          "submittedAt"
        ]
      },
      "error-response": {
        "type": "object",
        "properties": {
          "errorType": {
            "description": "An error category identifying what kind of error occurred.",
            "type": "string",
            "example": "VALIDATION_ERROR"
          },
          "message": {
            "description": "A human-readable explanation of what went wrong.",
            "type": "string"
          },
          "timestamp": {
            "description": "The date and time the error occurred.",
            "type": "string",
            "format": "date-time"
          },
          "issues": {
            "description": "The individual problems that make up this error.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/error-response-issue"
            },
            "minItems": 1
          }
        },
        "additionalProperties": false,
        "required": [
          "errorType",
          "message",
          "timestamp"
        ]
      },
      "analysis-task-create-request": {
        "type": "object",
        "properties": {
          "jdbcConnectionDetails": {
            "$ref": "#/components/schemas/jdbc-connection-details"
          }
        },
        "additionalProperties": false,
        "required": [
          "jdbcConnectionDetails"
        ]
      },
      "analysis-report": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/id"
          },
          "projectId": {
            "$ref": "#/components/schemas/id"
          },
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "preflightChecks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/analysis-report-preflight-checks"
            }
          },
          "rules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/analysis-report-rules"
            }
          },
          "dbMetrics": {
            "$ref": "#/components/schemas/analysis-report-db-metrics"
          },
          "databaseMetadata": {
            "$ref": "#/components/schemas/analysis-report-database-metadata"
          },
          "healthScore": {
            "type": "number"
          },
          "resolvedRules": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "takeaways": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/analysis-report-confidence-takeaway"
            }
          },
          "uniqueDboAlerts": {
            "$ref": "#/components/schemas/analysis-report-rule-type-count-by-severity"
          },
          "detectionCountsByDboType": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/detection-category-counts"
            }
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "databaseMetadata",
          "dbMetrics",
          "detectionCountsByDboType",
          "generatedAt",
          "healthScore",
          "id",
          "projectId",
          "resolvedRules",
          "rules",
          "takeaways",
          "uniqueDboAlerts"
        ]
      },
      "jdbc-connection-details": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/database-type"
          },
          "url": {
            "type": "string"
          },
          "user": {
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "savePassword": {
            "type": "boolean",
            "default": false
          },
          "existingConnectionId": {
            "type": "string"
          },
          "oraclePdbName": {
            "type": "string"
          },
          "isManualUri": {
            "type": "boolean",
            "default": false
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "url"
        ]
      },
      "mongodb-connection-details": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "connectionString": {
            "type": "string"
          },
          "savePassword": {
            "type": "boolean",
            "default": false
          },
          "existingConnectionId": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "connectionString"
        ]
      },
      "migration-job-status": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/id"
          },
          "projectId": {
            "$ref": "#/components/schemas/id"
          },
          "status": {
            "type": "string",
            "enum": [
              "NOT_STARTED",
              "RUNNING",
              "FAILED",
              "CANCELLING",
              "CANCELLED",
              "COMPLETED",
              "CLEANING_UP",
              "PAUSED"
            ]
          },
          "cdcStatus": {
            "type": "string",
            "default": "NOT_STARTED",
            "enum": [
              "NOT_STARTED",
              "RUNNING",
              "COMPLETING",
              "COMPLETED",
              "FAILED",
              "CANCELLED",
              "PAUSED"
            ]
          },
          "verificationJobId": {
            "type": "string"
          },
          "options": {
            "$ref": "#/components/schemas/migration-job-descriptor-options"
          },
          "jdbcConnectionString": {
            "type": "string"
          },
          "mongoDbConnectionString": {
            "type": "string"
          },
          "submittedAt": {
            "type": "string",
            "format": "date-time"
          },
          "statistics": {
            "$ref": "#/components/schemas/migration-job-statistics"
          },
          "cdcStatistics": {
            "$ref": "#/components/schemas/cdc-job-statistics"
          },
          "jmxConnectivity": {
            "$ref": "#/components/schemas/jmx-connectivity"
          },
          "connectorStatus": {
            "$ref": "#/components/schemas/connector-status"
          },
          "failureError": {
            "$ref": "#/components/schemas/failureError"
          },
          "metadata": {
            "$ref": "#/components/schemas/migration_job_status_metadata"
          },
          "relationalTableFilters": {
            "$ref": "#/components/schemas/relational-table-filters"
          },
          "collectionFilters": {
            "$ref": "#/components/schemas/collection-filters"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "options",
          "projectId",
          "status",
          "submittedAt"
        ]
      },
      "migration-jobs-get-type": {
        "type": "string",
        "enum": [
          "IN_PROGRESS"
        ]
      },
      "post-migration-job-request": {
        "type": "object",
        "properties": {
          "projectId": {
            "type": "string"
          },
          "jdbcConnectionDetails": {
            "$ref": "#/components/schemas/jdbc-connection-details"
          },
          "mongodbConnectionDetails": {
            "$ref": "#/components/schemas/mongodb-connection-details"
          },
          "options": {
            "$ref": "#/components/schemas/migration-job-descriptor-options"
          },
          "verification": {
            "$ref": "#/components/schemas/migration-verification"
          },
          "relationalTableFilters": {
            "$ref": "#/components/schemas/relational-table-filters"
          },
          "collectionFilters": {
            "$ref": "#/components/schemas/collection-filters"
          }
        },
        "additionalProperties": false,
        "required": [
          "jdbcConnectionDetails",
          "mongodbConnectionDetails",
          "options",
          "projectId",
          "verification"
        ]
      },
      "job-event-type": {
        "type": "string",
        "enum": [
          "ERROR",
          "WARNING",
          "INFO"
        ]
      },
      "job-update": {
        "type": "object",
        "properties": {
          "eventType": {
            "$ref": "#/components/schemas/job-event-type"
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "stackTrace": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "locationType": {
            "type": "string",
            "enum": [
              "TABLE",
              "COLLECTION"
            ]
          },
          "locationName": {
            "type": "string"
          },
          "fieldName": {
            "type": "string"
          },
          "key": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "errorType": {
            "type": "string",
            "example": "DuplicateKeyError"
          }
        },
        "required": [
          "eventType",
          "message",
          "timestamp"
        ]
      },
      "project-descriptor-summary": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/id"
          },
          "jdbcId": {
            "$ref": "#/components/schemas/id"
          },
          "mongodbId": {
            "$ref": "#/components/schemas/id"
          },
          "name": {
            "type": "string",
            "maxLength": 50,
            "minLength": 1
          },
          "type": {
            "$ref": "#/components/schemas/database-type"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "type"
        ]
      },
      "ProjectDescriptor": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/ProjectDescriptorBase"
          },
          {
            "properties": {
              "id": {
                "$ref": "#/components/schemas/id"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          }
        ]
      },
      "ProjectDescriptorBase": {
        "type": "object",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/ProjectName"
          },
          "type": {
            "$ref": "#/components/schemas/database-type"
          },
          "lastModified": {
            "type": "string",
            "format": "date-time"
          },
          "schemasId": {
            "$ref": "#/components/schemas/id"
          },
          "jdbcId": {
            "$ref": "#/components/schemas/id"
          },
          "mongodbId": {
            "$ref": "#/components/schemas/id"
          },
          "content": {
            "$ref": "#/components/schemas/ProjectDescriptorContent"
          },
          "connectionDetails": {
            "$ref": "#/components/schemas/ProjectDescriptorBase_connectionDetails"
          },
          "isSampleProject": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "content",
          "name",
          "schemasId",
          "type"
        ]
      },
      "ProjectName": {
        "type": "string",
        "maxLength": 50,
        "minLength": 1
      },
      "ProjectDescriptorContent": {
        "type": "object",
        "properties": {
          "settings": {
            "$ref": "#/components/schemas/migration-settings"
          },
          "collections": {
            "$ref": "#/components/schemas/migration-collections"
          },
          "mappings": {
            "$ref": "#/components/schemas/migration-mappings"
          },
          "relationships": {
            "$ref": "#/components/schemas/migration-relationships"
          },
          "diagrams": {
            "$ref": "#/components/schemas/project-diagrams"
          },
          "tables": {
            "$ref": "#/components/schemas/project-tables"
          }
        },
        "additionalProperties": false,
        "required": [
          "collections",
          "diagrams",
          "mappings",
          "relationships",
          "settings",
          "tables"
        ]
      },
      "project-collections": {
        "description": "List of collections in a project",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "export-file": {
        "type": "object",
        "properties": {
          "version": {
            "description": "The descriptor schema version, as a three-part semantic version (major.minor.patch).",
            "type": "string",
            "pattern": "^\\d+\\.\\d+\\.\\d+$"
          },
          "project": {
            "$ref": "#/components/schemas/ProjectDescriptor"
          },
          "schema": {
            "$ref": "#/components/schemas/project-descriptor-schemas"
          }
        },
        "additionalProperties": false,
        "required": [
          "project",
          "schema",
          "version"
        ]
      },
      "migration-job-statistics-preview": {
        "type": "object",
        "properties": {
          "totalTableCount": {
            "type": "integer"
          },
          "totalEvents": {
            "type": "integer",
            "format": "int64"
          },
          "totalEventSize": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "project-descriptor-schemas": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "full": {
            "$ref": "#/components/schemas/schema-descriptor"
          },
          "imported": {
            "$ref": "#/components/schemas/schema-imported"
          },
          "all": {
            "$ref": "#/components/schemas/schema-imported"
          }
        },
        "additionalProperties": false,
        "required": [
          "full",
          "imported"
        ]
      },
      "schema-descriptor": {
        "type": "object",
        "properties": {
          "databases": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/database"
            }
          },
          "metadata": {
            "$ref": "#/components/schemas/schema_descriptor_metadata"
          }
        },
        "additionalProperties": false,
        "required": [
          "databases",
          "metadata"
        ]
      },
      "error-response-issue": {
        "type": "object",
        "properties": {
          "type": {
            "description": "An error category identifying what kind of issue occurred (SNAKE_CASE).",
            "type": "string",
            "example": "RELMIG_MAPPING_TABLE_MISSING"
          },
          "message": {
            "description": "A human-readable explanation of what went wrong.",
            "type": "string"
          },
          "pointer": {
            "description": "JSON Pointer (RFC 6901) to the offending node.",
            "type": "string",
            "example": "/project/content/mappings/0123456789abcdef0123456789abcdef/fields/Name/target/name"
          }
        },
        "additionalProperties": false,
        "required": [
          "message",
          "type"
        ]
      },
      "analysis-report-preflight-checks": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "migrationMode": {
            "$ref": "#/components/schemas/migration-mode"
          },
          "passed": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "migrationMode",
          "name",
          "passed"
        ]
      },
      "analysis-report-rules": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "dboType": {
            "$ref": "#/components/schemas/rule_dbo_type"
          },
          "ruleType": {
            "$ref": "#/components/schemas/rule_type"
          },
          "entityName": {
            "type": "string"
          },
          "detectionText": {
            "type": "string"
          },
          "difficulty": {
            "$ref": "#/components/schemas/rule_difficulty"
          },
          "mitigationText": {
            "type": "string"
          },
          "category": {
            "$ref": "#/components/schemas/rule_category"
          },
          "incompatibleFeatureType": {
            "$ref": "#/components/schemas/incompatible-feature-type"
          }
        },
        "additionalProperties": false,
        "required": [
          "category",
          "dboType",
          "detectionText",
          "difficulty",
          "entityName",
          "id",
          "mitigationText",
          "ruleType"
        ]
      },
      "analysis-report-db-metrics": {
        "type": "object",
        "properties": {
          "totalDbSize": {
            "type": "integer",
            "format": "int64"
          },
          "readHeavyTables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/database-object-path"
            }
          },
          "writeHeavyTables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/database-object-path"
            }
          },
          "allTables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/table-analysis-description"
            }
          },
          "allStoredProcedures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/stored-procedure-analysis-description"
            }
          },
          "allTriggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/trigger-analysis-description"
            }
          },
          "allViews": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/view-analysis-description"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "allStoredProcedures",
          "allTables",
          "allTriggers",
          "allViews",
          "readHeavyTables",
          "totalDbSize",
          "writeHeavyTables"
        ]
      },
      "analysis-report-database-metadata": {
        "type": "object",
        "properties": {
          "databaseVersion": {
            "type": "string"
          },
          "connectionId": {
            "type": "string"
          },
          "connectionName": {
            "type": "string"
          },
          "connectionUrl": {
            "type": "string"
          },
          "databaseType": {
            "type": "string"
          },
          "connectionType": {
            "$ref": "#/components/schemas/connection-type"
          }
        },
        "required": [
          "connectionId",
          "databaseType"
        ]
      },
      "analysis-report-confidence-takeaway": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/rule_category"
          },
          "value": {
            "type": "number"
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "value"
        ]
      },
      "analysis-report-rule-type-count-by-severity": {
        "type": "object",
        "properties": {
          "task": {
            "type": "integer"
          },
          "risk": {
            "type": "integer"
          },
          "notice": {
            "type": "integer"
          },
          "none": {
            "type": "integer"
          }
        },
        "additionalProperties": false,
        "required": [
          "none",
          "notice",
          "risk",
          "task"
        ]
      },
      "detection-category-counts": {
        "type": "object",
        "properties": {
          "severityCountsByDetectionCategory": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/analysis-report-rule-type-count-by-severity"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "countsByDetectionCategory"
        ]
      },
      "connection-type": {
        "type": "string",
        "enum": [
          "DEMO",
          "QA",
          "STAGING",
          "DEVELOPMENT",
          "PRODUCTION",
          "NONE"
        ]
      },
      "database-type": {
        "description": "Database type or a custom database type. For example, `MYSQL`, `ORACLE`, `POSTGRESQL`, `SQL_SERVER`, `COCKROACHDB`, `DB2`, `SQLANYWHERE`, `SYBASE`, `SYBASEIQ`, or `YUGABYTE`.",
        "type": "string",
        "example": "ORACLE"
      },
      "migration-job-descriptor-options": {
        "type": "object",
        "properties": {
          "dropCollections": {
            "type": "boolean",
            "default": false
          },
          "mode": {
            "$ref": "#/components/schemas/migration-mode"
          },
          "truncationReportMode": {
            "default": "WARN",
            "allOf": [
              {
                "$ref": "#/components/schemas/error-handling-mode"
              }
            ]
          },
          "errorHandling": {
            "description": "defines whether Debezium errors will throw an exception or just be logged. https://debezium.io/documentation/reference/stable/connectors/mysql.html#mysql-property-event-processing-failure-handling-mode",
            "default": "FAIL",
            "allOf": [
              {
                "$ref": "#/components/schemas/error-handling-mode"
              }
            ]
          },
          "errorTolerance": {
            "description": "The number of failures (on the record level) that should be tolerated before terminating the migration.\nThe value is strictly greater than or equal to.\n",
            "type": "integer",
            "minimum": 0
          },
          "incrementalSnapshotOptions": {
            "$ref": "#/components/schemas/incremental-snapshot-options"
          }
        },
        "additionalProperties": false,
        "required": [
          "mode"
        ]
      },
      "migration-verification": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "default": false
          },
          "type": {
            "description": "COUNT_ONLY runs a standalone count comparison only (no field compare) and requires enabled: false and options.mode: VERIFICATION.",
            "default": "FULL",
            "allOf": [
              {
                "$ref": "#/components/schemas/verification-type-enum"
              }
            ]
          },
          "countMethod": {
            "description": "COUNT_ONLY only. How both the source and target are counted. ESTIMATE uses database metadata estimates on both sides; EXACT counts both sides exactly.",
            "default": "EXACT",
            "allOf": [
              {
                "$ref": "#/components/schemas/count-method-enum"
              }
            ]
          },
          "includedCollections": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "samplePercentage": {
            "type": "integer",
            "default": 100,
            "maximum": 100,
            "minimum": 1
          }
        },
        "additionalProperties": false,
        "required": [
          "enabled"
        ]
      },
      "relational-table-filters": {
        "description": "An object where each key represents a schema name. Each schema contains tables you can apply table filters on.",
        "type": "object",
        "example": {
          "schema_1_name": {
            "table_1_name": {
              "whereClause": "id > 1000 AND id <= 2000"
            },
            "table_2_name": {
              "whereClause": "TRUE",
              "rowCount": 10
            }
          }
        },
        "additionalProperties": {
          "additionalProperties": {
            "$ref": "#/components/schemas/table-filter"
          },
          "description": "An object where each key represents a table name within a schema.",
          "type": "object"
        }
      },
      "collection-filters": {
        "description": "Include or exclude collections for this migration.\n- include only: Only collections matching the specified include filter will be migrated.\n- exclude only: All collections will be migrated, except those matching the exclude filter.\n- include and exclude: Migrate collections that match the include filter, excluding those that also match the exclude filter. \n- No filters: All collections will be migrated.\n",
        "type": "object",
        "properties": {
          "include": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "exclude": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "migration-job-statistics": {
        "allOf": [
          {
            "$ref": "#/components/schemas/migration-job-statistics-details"
          },
          {
            "$ref": "#/components/schemas/migration-job-statistics-preview"
          }
        ]
      },
      "cdc-job-statistics": {
        "type": "object",
        "properties": {
          "startedAt": {
            "type": "string",
            "format": "date-time"
          },
          "lastEventTime": {
            "type": "string",
            "format": "date-time"
          },
          "lastEventSourceDatabaseTime": {
            "type": "string",
            "format": "date-time"
          },
          "eventsInLastHour": {
            "type": "integer",
            "format": "int64",
            "default": 0
          },
          "eventsInLastMinute": {
            "type": "integer",
            "format": "int64",
            "default": 0
          },
          "totalEventsSeen": {
            "type": "integer",
            "format": "int64",
            "default": 0
          },
          "latestBatchMaxSourceDbLagMs": {
            "description": "For each completed batch of writes to MongoDB, the maximum time delay from when a change was made in\nthe source database (as reported by the database) until the batch write was completed.\nThis may be affected by clock skew between the source database clock and the machine where the migration is running.\n",
            "type": "integer",
            "format": "int64",
            "default": -1
          }
        },
        "additionalProperties": false
      },
      "jmx-connectivity": {
        "description": "Connectivity of the JMX statistics scrape (kafka-connect deployment profile only). Indicates\nwhether the migrator is successfully scraping statistics over JMX and when it last did so, so a\nmisconfigured/unreachable JMX endpoint or a crashed connect task is visible in the UI. Absent for\ndeployments that do not read statistics over JMX.\n",
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "AVAILABLE",
              "UNAVAILABLE"
            ]
          },
          "lastSuccessfulScrapeAt": {
            "description": "Time of the most recent successful JMX statistics scrape.",
            "type": "string",
            "format": "date-time"
          },
          "errorMessage": {
            "description": "The most recent JMX connection error, when statistics are unavailable.",
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "status"
        ]
      },
      "connector-status": {
        "description": "Runtime status of the Kafka Connect connectors backing this migration job (kafka-connect /\nconfluent deployment profiles only), reflecting the actual state reported by Kafka Connect rather\nthan assuming success at submission time. Lets the UI show which specific connector/task has an\nissue instead of a job that looks healthy while a connector is FAILED. Absent for deployments not\nbacked by Kafka Connect.\n",
        "type": "object",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/connector-role-status"
          },
          "sink": {
            "$ref": "#/components/schemas/connector-role-status"
          }
        },
        "additionalProperties": false
      },
      "failureError": {
        "type": "object",
        "properties": {
          "errorType": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "failureAt": {
            "type": "string",
            "format": "date-time"
          },
          "setupError": {
            "type": "boolean",
            "default": false
          },
          "failedLocation": {
            "description": "Location of the last error before the job failed. See the job logs for the full error breakdown.",
            "type": "string",
            "nullable": true
          },
          "failedLocationType": {
            "description": "TABLE = source table, COLLECTION = destination collection.",
            "type": "string",
            "enum": [
              "TABLE",
              "COLLECTION"
            ],
            "nullable": true
          }
        },
        "additionalProperties": false,
        "required": [
          "errorType",
          "failureAt",
          "message",
          "setupError"
        ]
      },
      "verification-status-enum": {
        "type": "string",
        "enum": [
          "VERIFYING",
          "FAILED",
          "CANCELLING",
          "CANCELLED",
          "VERIFIED",
          "ABORTED"
        ]
      },
      "verification-type-enum": {
        "type": "string",
        "enum": [
          "FULL",
          "COUNT_ONLY"
        ]
      },
      "count-method-enum": {
        "type": "string",
        "enum": [
          "EXACT",
          "ESTIMATE"
        ]
      },
      "ddl-connection-details": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/database-type"
          }
        },
        "additionalProperties": false,
        "required": [
          "type"
        ]
      },
      "migration-settings": {
        "type": "object",
        "properties": {
          "viewMode": {
            "type": "string",
            "enum": [
              "HORIZONTAL",
              "VERTICAL",
              "RELATIONAL",
              "MONGODB"
            ]
          },
          "shouldRecommendSchema": {
            "type": "boolean"
          },
          "casing": {
            "type": "string",
            "enum": [
              "CAMEL_CASE",
              "TITLE_CASE",
              "KEBAB_CASE",
              "SNAKE_CASE",
              "UPPER_SNAKE_CASE"
            ]
          },
          "excludedJsonExportCollections": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "keyHandling": {
            "$ref": "#/components/schemas/migration-settings-key-handling-enum"
          }
        },
        "additionalProperties": false,
        "required": [
          "keyHandling"
        ]
      },
      "migration-collections": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/collection"
        }
      },
      "migration-mappings": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/mapping"
        }
      },
      "migration-relationships": {
        "type": "object",
        "properties": {
          "tables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/mapping-object"
            }
          },
          "collections": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/mapping-object"
            }
          },
          "mappings": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/mapping-relationship"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "collections",
          "mappings",
          "tables"
        ]
      },
      "project-diagrams": {
        "type": "object",
        "properties": {
          "activeTab": {
            "type": "string"
          },
          "tabs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/project-diagram"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "activeTab",
          "tabs"
        ]
      },
      "project-tables": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/project-table"
        }
      },
      "migration-settings-key-handling-enum": {
        "type": "string",
        "enum": [
          "WRAPPED",
          "SINGLE",
          "GENERATED"
        ]
      },
      "migration-field-type": {
        "type": "string",
        "enum": [
          "AUTO",
          "STRING",
          "INTEGER",
          "BOOL",
          "DOUBLE",
          "LONG",
          "DECIMAL",
          "ARRAY",
          "DATE",
          "TIMESTAMP",
          "OBJECT",
          "OBJECT_ID",
          "BIN_DATA",
          "MIN_KEY",
          "MAX_KEY",
          "JAVASCRIPT",
          "REGEX",
          "NULL"
        ]
      },
      "migration-field-conversion-strategy": {
        "type": "string",
        "default": "DEFAULT",
        "enum": [
          "DEFAULT",
          "LONG_MS",
          "LONG_US",
          "LONG_NS",
          "DATE_UTC",
          "DATE_STRIP",
          "DATE_STRING_SEPARATE"
        ]
      },
      "relational-path": {
        "type": "object",
        "properties": {
          "database": {
            "type": "string"
          },
          "schema": {
            "type": "string"
          },
          "table": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "database",
          "schema",
          "table"
        ]
      },
      "schema-imported": {
        "type": "object",
        "additionalProperties": {
          "additionalProperties": {
            "additionalProperties": {
              "type": "object"
            },
            "type": "object"
          },
          "type": "object"
        }
      },
      "database": {
        "type": "object",
        "properties": {
          "schemas": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/schema"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "schemas"
        ]
      },
      "migration-mode": {
        "type": "string",
        "enum": [
          "SNAPSHOT",
          "CDC",
          "INCREMENTAL",
          "VERIFICATION"
        ]
      },
      "rule_dbo_type": {
        "type": "string",
        "enum": [
          "TABLE",
          "VIEW",
          "ROUTINE",
          "INDEX",
          "TRIGGER",
          "DATABASE",
          "COLUMN"
        ]
      },
      "rule_type": {
        "type": "string",
        "enum": [
          "TASK",
          "RISK",
          "NOTICE"
        ]
      },
      "rule_difficulty": {
        "type": "string",
        "enum": [
          "HIGH",
          "MEDIUM",
          "LOW"
        ]
      },
      "rule_category": {
        "type": "string",
        "enum": [
          "DATA_TYPE",
          "UNSUPPORTED_FEATURE",
          "PERFORMANCE",
          "SCHEMA"
        ]
      },
      "incompatible-feature-type": {
        "type": "string",
        "enum": [
          "ORACLE-PACKAGE",
          "ROUTINE",
          "TRIGGERS",
          "MATERIALIZED-VIEWS"
        ]
      },
      "database-object-path": {
        "type": "object",
        "properties": {
          "database": {
            "type": "string"
          },
          "schema": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "database",
          "name",
          "schema"
        ]
      },
      "table-analysis-description": {
        "type": "object",
        "properties": {
          "path": {
            "$ref": "#/components/schemas/database-object-path"
          },
          "dataSize": {
            "type": "integer",
            "format": "int64"
          },
          "rowCount": {
            "type": "integer",
            "format": "int64"
          },
          "readCount": {
            "type": "integer",
            "format": "int64"
          },
          "writeCount": {
            "type": "integer",
            "format": "int64"
          },
          "readWriteClassification": {
            "$ref": "#/components/schemas/read-write-classification"
          },
          "columns": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/column"
            }
          },
          "foreignKeys": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/foreign-key-descriptor"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "columns",
          "dataSize",
          "path",
          "readCount",
          "readWriteClassification",
          "rowCount",
          "writeCount"
        ]
      },
      "stored-procedure-analysis-description": {
        "type": "object",
        "properties": {
          "path": {
            "$ref": "#/components/schemas/database-object-path"
          },
          "definition": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "definition",
          "path"
        ]
      },
      "trigger-analysis-description": {
        "type": "object",
        "properties": {
          "path": {
            "$ref": "#/components/schemas/database-object-path"
          },
          "definition": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "definition",
          "path"
        ]
      },
      "view-analysis-description": {
        "type": "object",
        "properties": {
          "path": {
            "$ref": "#/components/schemas/database-object-path"
          },
          "definition": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "definition",
          "path"
        ]
      },
      "error-handling-mode": {
        "type": "string",
        "enum": [
          "FAIL",
          "WARN",
          "SKIP"
        ]
      },
      "incremental-snapshot-options": {
        "description": "Options for INCREMENTAL migration mode only.",
        "type": "object",
        "properties": {
          "signalingTable": {
            "description": "Signaling table on the source database used to coordinate the incremental snapshot.\nAccepts schema.table (MySQL: database.table) with the database segment taken from the\nsource connection, or a full database.schema.table name.\n",
            "type": "string",
            "example": "database.schema.table"
          },
          "chunkSize": {
            "description": "Rows per incremental-snapshot chunk (Debezium incremental.snapshot.chunk.size).\nWhen omitted, Debezium's default of 1024 applies.\nLarger chunks copy faster but hold more rows in memory per open chunk window.\n",
            "type": "integer",
            "maximum": 100000,
            "minimum": 1
          }
        },
        "additionalProperties": false
      },
      "table-filter": {
        "type": "object",
        "properties": {
          "whereClause": {
            "description": "Contents of the SQL WHERE clause to filter rows for the specified source table.",
            "type": "string"
          },
          "rowCount": {
            "description": "Optional limit to the number of rows returned from the source table.",
            "type": "integer",
            "format": "int64",
            "minimum": 1
          }
        },
        "additionalProperties": false
      },
      "migration-job-statistics-details": {
        "type": "object",
        "properties": {
          "startedAt": {
            "type": "string",
            "format": "date-time"
          },
          "elapsedSeconds": {
            "type": "integer",
            "format": "int64"
          },
          "remainingTableCount": {
            "type": "integer"
          },
          "processingTables": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "migratedTables": {
            "description": "Source tables whose snapshot copy has completed. Completion means the source snapshot finished reading, not that every row migrated successfully; on failure a table listed here may also appear in failureError.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "totalEventsSeen": {
            "type": "integer",
            "format": "int64",
            "default": 0
          },
          "snapshotCompleted": {
            "type": "boolean",
            "default": false
          }
        },
        "additionalProperties": false
      },
      "connector-role-status": {
        "description": "Runtime status of one Kafka Connect connector (source or sink) and its tasks.",
        "type": "object",
        "properties": {
          "name": {
            "description": "Connector name as registered in Kafka Connect.",
            "type": "string"
          },
          "state": {
            "$ref": "#/components/schemas/connector-state-enum"
          },
          "tasks": {
            "description": "Per-task runtime status for this connector.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/connector-task-status"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "state"
        ]
      },
      "collection": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Target collection name. Rejects whitespace-only values, a leading or trailing dot, the dollar sign, a \"system.\" prefix, and any \".system.\" substring. Interior dots are permitted.",
            "type": "string",
            "pattern": "^(?!\\s*$)(?!\\.)(?!.*\\.$)(?!.*\\$)(?!system\\.)(?!.*\\.system\\.).*$"
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ]
      },
      "mapping": {
        "type": "object",
        "properties": {
          "settings": {
            "$ref": "#/components/schemas/mapping-settings"
          },
          "fields": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/field-mapping"
            }
          },
          "calculatedFields": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/calculated-field-mapping"
            }
          },
          "collectionId": {
            "type": "string"
          },
          "table": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "calculatedFields",
          "collectionId",
          "fields",
          "settings",
          "table"
        ]
      },
      "mapping-object": {
        "type": "object",
        "properties": {
          "mappings": {
            "$ref": "#/components/schemas/mapping-array"
          }
        },
        "additionalProperties": false,
        "required": [
          "mappings"
        ]
      },
      "mapping-relationship": {
        "type": "object",
        "properties": {
          "children": {
            "$ref": "#/components/schemas/mapping-array"
          }
        },
        "additionalProperties": false,
        "required": [
          "children"
        ]
      },
      "project-diagram": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "notes": {
            "type": "string"
          },
          "relational": {
            "$ref": "#/components/schemas/project-diagram-view"
          },
          "collection": {
            "$ref": "#/components/schemas/project-diagram-view"
          }
        },
        "additionalProperties": false,
        "required": [
          "collection",
          "id",
          "name",
          "relational"
        ]
      },
      "project-table": {
        "type": "object",
        "properties": {
          "path": {
            "$ref": "#/components/schemas/relational-path"
          }
        },
        "additionalProperties": false,
        "required": [
          "path"
        ]
      },
      "schema": {
        "type": "object",
        "properties": {
          "tables": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/table"
            }
          },
          "views": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/schema-object"
            }
          },
          "routines": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/schema-object"
            }
          },
          "triggers": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/schema-object"
            }
          },
          "packages": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/schema-object"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "tables"
        ]
      },
      "read-write-classification": {
        "type": "string",
        "enum": [
          "READ_HEAVY",
          "WRITE_HEAVY",
          "READ_AND_WRITE_HEAVY",
          "NONE"
        ]
      },
      "column": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/column-type"
          },
          "ordinalPosition": {
            "type": "integer",
            "minimum": 1
          },
          "primaryKey": {
            "$ref": "#/components/schemas/primary-key"
          },
          "nullable": {
            "type": "boolean"
          },
          "autoIncremented": {
            "type": "boolean"
          },
          "generated": {
            "type": "boolean"
          },
          "hidden": {
            "type": "boolean"
          },
          "indexed": {
            "type": "boolean"
          },
          "uniqueIndexed": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "autoIncremented",
          "generated",
          "hidden",
          "indexed",
          "nullable",
          "ordinalPosition",
          "type",
          "uniqueIndexed"
        ]
      },
      "foreign-key-descriptor": {
        "description": "Describes a foreign key relationship defined on a child table, pointing to a parent table.",
        "type": "object",
        "properties": {
          "targetTable": {
            "$ref": "#/components/schemas/relational-path"
          },
          "cardinality": {
            "type": "string",
            "enum": [
              "UNKNOWN",
              "ZERO_TO_ONE",
              "ONE_TO_ONE",
              "ZERO_TO_MANY"
            ]
          },
          "synthetic": {
            "type": "boolean"
          },
          "columnMappings": {
            "description": "The column-level mappings within this foreign key. Each entry maps a source column on the child table to a target column on the parent table. Multiple entries form a composite foreign key.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/foreign-key-column-reference"
            },
            "minItems": 1
          }
        },
        "additionalProperties": false,
        "required": [
          "columnMappings",
          "targetTable"
        ]
      },
      "connector-state-enum": {
        "description": "Runtime state reported by Kafka Connect for a connector or one of its tasks (see https://kafka.apache.org/documentation/#connect_administration). UNKNOWN is Relational Migrator's own value for a status that could not be retrieved, e.g. when the Kafka Connect worker is unreachable.",
        "type": "string",
        "enum": [
          "RUNNING",
          "PAUSED",
          "FAILED",
          "UNASSIGNED",
          "RESTARTING",
          "STOPPED",
          "UNKNOWN"
        ]
      },
      "connector-task-status": {
        "description": "Runtime status of a single Kafka Connect task, as reported by Kafka Connect.",
        "type": "object",
        "properties": {
          "id": {
            "description": "Task id within the connector.",
            "type": "integer"
          },
          "state": {
            "$ref": "#/components/schemas/connector-state-enum"
          },
          "workerId": {
            "description": "Kafka Connect worker the task is assigned to, when known.",
            "type": "string"
          },
          "trace": {
            "description": "Failure stack trace, present when the task state is FAILED.",
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "state"
        ]
      },
      "mapping-settings": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/mapping-type"
          },
          "notes": {
            "type": "string"
          },
          "embeddedPath": {
            "description": "A single path segment for the embedded mapping. Rejects dots and whitespace-only values.",
            "type": "string",
            "pattern": "^(?!\\s+$)[^.]*$"
          },
          "primitive": {
            "type": "boolean"
          },
          "arrayConditions": {
            "$ref": "#/components/schemas/mapping-array-conditions"
          },
          "foreignKeyName": {
            "type": "string"
          },
          "ruleFilter": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "type"
        ]
      },
      "field-mapping": {
        "type": "object",
        "properties": {
          "target": {
            "$ref": "#/components/schemas/target-field-mapping"
          },
          "source": {
            "$ref": "#/components/schemas/source-field-mapping"
          }
        },
        "additionalProperties": false,
        "required": [
          "source",
          "target"
        ]
      },
      "calculated-field-mapping": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Calculated field name. Rejects whitespace-only values, a leading or trailing dot, and consecutive dots. Interior dots are permitted (they express dot-notation paths).",
            "type": "string",
            "pattern": "^(?!\\s*$)(?!\\.)(?!.*\\.$)(?!.*\\.\\.).*$"
          },
          "isNullExcluded": {
            "type": "boolean",
            "default": false
          },
          "type": {
            "$ref": "#/components/schemas/migration-field-type"
          },
          "conversionStrategy": {
            "$ref": "#/components/schemas/migration-field-conversion-strategy"
          },
          "expression": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "expression",
          "name"
        ]
      },
      "mapping-array": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/id"
        }
      },
      "project-diagram-view": {
        "type": "object",
        "properties": {
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/project-diagrams-node"
            }
          },
          "edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/project-diagrams-edge"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "edges",
          "nodes"
        ]
      },
      "table": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "TABLE",
              "VIEW"
            ]
          },
          "size": {
            "type": "integer",
            "format": "int64"
          },
          "columns": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/column"
            }
          },
          "uniqueIndexes": {
            "type": "object",
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "nonUniqueIndexes": {
            "type": "object",
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          "filter": {
            "$ref": "#/components/schemas/table-filter"
          },
          "foreignKeys": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/foreign-key-descriptor"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "columns",
          "type"
        ]
      },
      "schema-object": {
        "type": "object",
        "properties": {
          "included": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "definition": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "definition",
          "included",
          "name"
        ]
      },
      "column-type": {
        "type": "object",
        "properties": {
          "defaultMongoFieldType": {
            "$ref": "#/components/schemas/migration-field-type"
          },
          "databaseSpecificType": {
            "type": "string"
          },
          "precision": {
            "type": "integer"
          },
          "scale": {
            "type": "integer"
          }
        },
        "additionalProperties": false,
        "required": [
          "databaseSpecificType"
        ]
      },
      "primary-key": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ]
      },
      "foreign-key-column-reference": {
        "description": "A single column reference within a foreign key, from the child table to the parent table.",
        "type": "object",
        "properties": {
          "source": {
            "description": "The source column name on the child table.",
            "type": "string"
          },
          "target": {
            "description": "The referenced column name on the parent (target) table.",
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "source",
          "target"
        ]
      },
      "mapping-type": {
        "type": "string",
        "enum": [
          "NEW_DOCUMENT",
          "EMBEDDED_DOCUMENT",
          "EMBEDDED_DOCUMENT_ARRAY"
        ]
      },
      "mapping-array-conditions": {
        "type": "object",
        "properties": {
          "sortBy": {
            "type": "string"
          },
          "order": {
            "$ref": "#/components/schemas/sorting-order-type"
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "minimum": 1
          }
        },
        "additionalProperties": false,
        "required": [
          "order",
          "sortBy"
        ]
      },
      "target-field-mapping": {
        "type": "object",
        "properties": {
          "name": {
            "description": "Target field name. Rejects whitespace-only values, a leading or trailing dot, and consecutive dots. Interior dots are permitted (they express dot-notation paths).",
            "type": "string",
            "pattern": "^(?!\\s*$)(?!\\.)(?!.*\\.$)(?!.*\\.\\.).*$"
          },
          "included": {
            "type": "boolean"
          },
          "isNullExcluded": {
            "type": "boolean",
            "default": false
          },
          "type": {
            "$ref": "#/components/schemas/migration-field-type"
          },
          "conversionStrategy": {
            "$ref": "#/components/schemas/migration-field-conversion-strategy"
          }
        },
        "additionalProperties": false,
        "required": [
          "included",
          "name",
          "type"
        ]
      },
      "source-field-mapping": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "databaseSpecificType": {
            "type": "string"
          },
          "isPrimaryKey": {
            "type": "boolean",
            "default": false
          }
        },
        "additionalProperties": false,
        "required": [
          "databaseSpecificType",
          "name"
        ]
      },
      "project-diagrams-node": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "position": {
            "$ref": "#/components/schemas/project_diagrams_node_position"
          },
          "width": {
            "type": "number"
          },
          "height": {
            "type": "number"
          },
          "hidden": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "hidden",
          "id",
          "position",
          "type"
        ]
      },
      "project-diagrams-edge": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "target": {
            "type": "string"
          },
          "markerStart": {
            "type": "string",
            "enum": [
              "START_ONE",
              "START_ONE_OR_MANY"
            ]
          },
          "markerEnd": {
            "type": "string",
            "enum": [
              "END_ONE",
              "END_MANY",
              "END_ONE_OR_MANY"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "source",
          "target"
        ]
      },
      "sorting-order-type": {
        "type": "string",
        "enum": [
          "ASC",
          "DESC"
        ]
      },
      "migration_job_status_metadata_verification": {
        "type": "object",
        "properties": {
          "samplePercentage": {
            "type": "integer",
            "default": 100
          },
          "isEmbeddedMode": {
            "type": "boolean",
            "default": false
          },
          "status": {
            "$ref": "#/components/schemas/verification-status-enum"
          }
        }
      },
      "migration_job_status_metadata": {
        "type": "object",
        "properties": {
          "telemetryUserId": {
            "type": "string"
          },
          "verification": {
            "$ref": "#/components/schemas/migration_job_status_metadata_verification"
          }
        },
        "additionalProperties": false
      },
      "ProjectDescriptorBase_connectionDetails": {
        "type": "object",
        "properties": {
          "ddl": {
            "$ref": "#/components/schemas/ddl-connection-details"
          }
        },
        "additionalProperties": false
      },
      "schema_descriptor_metadata": {
        "type": "object",
        "properties": {
          "databaseType": {
            "$ref": "#/components/schemas/database-type"
          },
          "databaseVersion": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "databaseType"
        ]
      },
      "project_diagrams_node_position": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          }
        },
        "additionalProperties": false,
        "required": [
          "x",
          "y"
        ]
      }
    }
  },
  "tags": [
    {
      "description": "Generates an analysis report for an application before migration",
      "name": "Analysis"
    },
    {
      "description": "Data migration",
      "name": "Job"
    },
    {
      "description": "Captures relational schemas and mappings",
      "name": "Project"
    }
  ]
}
