---
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.
            The value is strictly greater than or equal to.
          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
            the source database (as reported by the database) until the batch write was completed.
            This may be affected by clock skew between the source database clock and the machine where the migration is running.
          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
