{
  "openapi": "3.0.2",
  "info": {
    "contact": {
      "url": "https://support.mongodb.com/help"
    },
    "description": "OpenAPI specification for MongoDB Relational Migrator tool",
    "title": "MongoDB Relational Migrator REST API",
    "version": "1.15.3"
  },
  "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"
                }
              }
            }
          }
        },
        "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"
                }
              }
            }
          },
          "433": {
            "description": "Trouble connecting to SQL database with provided information",
            "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"
                }
              }
            }
          },
          "498": {
            "description": "Analysis task could not be cancelled",
            "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"
                }
              }
            }
          }
        },
        "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"
                }
              }
            }
          },
          "440": {
            "description": "Invalid as connection string did not contain a database name",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "470": {
            "description": "Migration job already running",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "471": {
            "description": "Migration Job could not be started for error building the job context example - Mode not recognised or No mappings exist.",
            "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"
                }
              }
            }
          }
        },
        "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"
                }
              }
            }
          }
        },
        "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"
                }
              }
            }
          }
        },
        "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"
                }
              }
            }
          }
        },
        "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"
                }
              }
            }
          }
        },
        "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"
                  }
                }
              }
            }
          }
        },
        "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"
                }
              }
            }
          },
          "485": {
            "description": "Unknown issue occurred during project import",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "486": {
            "description": "Field not found during project import",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error-response"
                }
              }
            }
          },
          "487": {
            "description": "Project version invalid during import",
            "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"
                }
              }
            }
          }
        },
        "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"
                }
              }
            }
          }
        },
        "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": {
          "jobId": {
            "$ref": "#/components/schemas/id"
          },
          "message": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "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-jobs-get-type": {
        "type": "string",
        "enum": [
          "IN_PROGRESS"
        ]
      },
      "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"
          },
          "failureError": {
            "$ref": "#/components/schemas/failureError"
          },
          "metadata": {
            "$ref": "#/components/schemas/migration_job_status_metadata"
          },
          "relationalTableFilters": {
            "$ref": "#/components/schemas/relational-table-filters"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "options",
          "projectId",
          "status",
          "submittedAt"
        ]
      },
      "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"
          }
        },
        "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"
          }
        },
        "required": [
          "collections",
          "diagrams",
          "mappings",
          "relationships",
          "schemas",
          "settings",
          "tables"
        ]
      },
      "project-collections": {
        "description": "List of collections in a project",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "export-file": {
        "type": "object",
        "properties": {
          "version": {
            "type": "string"
          },
          "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"
        ]
      },
      "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"
          },
          "errorHandling": {
            "type": "string",
            "default": "FAIL",
            "enum": [
              "FAIL",
              "WARN",
              "SKIP"
            ]
          },
          "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
          }
        },
        "additionalProperties": false,
        "required": [
          "mode"
        ]
      },
      "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
      },
      "failureError": {
        "type": "object",
        "properties": {
          "errorType": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "failureAt": {
            "type": "string",
            "format": "date-time"
          },
          "setupError": {
            "type": "boolean",
            "default": false
          }
        },
        "additionalProperties": false,
        "required": [
          "errorType",
          "failureAt",
          "message",
          "setupError"
        ]
      },
      "verification-status-enum": {
        "type": "string",
        "enum": [
          "VERIFYING",
          "FAILED",
          "CANCELLING",
          "CANCELLED",
          "VERIFIED",
          "ABORTED"
        ]
      },
      "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-verification": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "default": false
          },
          "includedCollections": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "enabled"
        ]
      },
      "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"
        ]
      },
      "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"
            }
          }
        },
        "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"
        ]
      },
      "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"
            }
          },
          "totalEventsSeen": {
            "type": "integer",
            "format": "int64",
            "default": 0
          },
          "snapshotCompleted": {
            "type": "boolean",
            "default": false
          }
        },
        "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"
          }
        },
        "additionalProperties": false
      },
      "collection": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "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"
          }
        },
        "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"
          },
          "foreignKey": {
            "$ref": "#/components/schemas/foreign-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"
        ]
      },
      "mapping-settings": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/mapping-type"
          },
          "notes": {
            "type": "string"
          },
          "embeddedPath": {
            "type": "string"
          },
          "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"
          }
        },
        "required": [
          "source",
          "target"
        ]
      },
      "calculated-field-mapping": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "isNullExcluded": {
            "type": "boolean",
            "default": false
          },
          "type": {
            "$ref": "#/components/schemas/migration-field-type"
          },
          "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"
            }
          }
        },
        "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"
          }
        },
        "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": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "schema": {
            "type": "string"
          },
          "table": {
            "type": "string"
          },
          "column": {
            "type": "string"
          },
          "cardinality": {
            "type": "string",
            "enum": [
              "UNKNOWN",
              "ZERO_TO_ONE",
              "ONE_TO_ONE",
              "ZERO_TO_MANY"
            ]
          },
          "synthetic": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ]
      },
      "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"
          }
        },
        "additionalProperties": false,
        "required": [
          "order",
          "sortBy"
        ]
      },
      "target-field-mapping": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "included": {
            "type": "boolean"
          },
          "isNullExcluded": {
            "type": "boolean",
            "default": false
          },
          "type": {
            "$ref": "#/components/schemas/migration-field-type"
          }
        },
        "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": {
        "type": "object",
        "properties": {
          "telemetryUserId": {
            "type": "string"
          },
          "verificationRequested": {
            "type": "boolean",
            "default": false
          },
          "verificationStatus": {
            "$ref": "#/components/schemas/verification-status-enum"
          }
        },
        "additionalProperties": false
      },
      "ProjectDescriptorBase_connectionDetails": {
        "type": "object",
        "properties": {
          "ddl": {
            "$ref": "#/components/schemas/ddl-connection-details"
          }
        }
      },
      "schema_descriptor_metadata": {
        "type": "object",
        "properties": {
          "databaseType": {
            "$ref": "#/components/schemas/database-type"
          },
          "databaseVersion": {
            "type": "string"
          }
        }
      },
      "project_diagrams_node_position": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          }
        },
        "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"
    }
  ]
}
