{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/mongodb/main/json-schema/mongodb-live-migration-request20240530-schema.json",
  "title": "LiveMigrationRequest20240530",
  "x-generated": "2026-10-03",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/mongodb-cloud-migration-service-api-openapi.yml#/components/schemas/LiveMigrationRequest20240530",
  "properties": {
    "_id": {
      "description": "Unique 24-hexadecimal digit string that identifies the migration request.",
      "pattern": "^([a-f0-9]{24})$",
      "readOnly": true,
      "type": "string"
    },
    "destination": {
      "$ref": "#/$defs/Destination"
    },
    "dropDestinationData": {
      "default": false,
      "description": "Flag that indicates whether the migration process drops all collections from the destination cluster before the migration starts.",
      "type": "boolean",
      "writeOnly": true
    },
    "links": {
      "description": "List of one or more Uniform Resource Locators (URLs) that point to API sub-resources, related API resources, or both. RFC 5988 outlines these relationships.",
      "items": {
        "$ref": "#/$defs/Link"
      },
      "readOnly": true,
      "type": "array"
    },
    "migrationHosts": {
      "description": "List of migration hosts used for this migration.",
      "items": {
        "minLength": 1,
        "type": "string"
      },
      "maxItems": 1,
      "minItems": 1,
      "type": "array"
    },
    "sharding": {
      "$ref": "#/$defs/ShardingRequest"
    },
    "source": {
      "$ref": "#/$defs/Source"
    }
  },
  "required": [
    "destination",
    "migrationHosts",
    "source"
  ],
  "type": "object",
  "$defs": {
    "Destination": {
      "description": "Document that describes the destination of the migration.",
      "properties": {
        "clusterName": {
          "description": "Label that identifies the destination cluster.",
          "minLength": 1,
          "type": "string"
        },
        "groupId": {
          "description": "Unique 24-hexadecimal digit string that identifies the destination project.",
          "pattern": "^([a-f0-9]{24})$",
          "type": "string"
        },
        "hostnameSchemaType": {
          "description": "The network type to use between the migration host and the destination cluster.",
          "enum": [
            "PUBLIC",
            "PRIVATE_LINK",
            "VPC_PEERING"
          ],
          "minLength": 1,
          "type": "string"
        },
        "privateLinkId": {
          "description": "Represents the endpoint to use when the host schema type is `PRIVATE_LINK`.",
          "type": "string"
        }
      },
      "required": [
        "clusterName",
        "groupId",
        "hostnameSchemaType"
      ],
      "type": "object"
    },
    "Link": {
      "properties": {
        "href": {
          "description": "Uniform Resource Locator (URL) that points another API resource to which this response has some relationship. This URL often begins with `https://cloud.mongodb.com/api/atlas`.",
          "type": "string"
        },
        "rel": {
          "description": "Uniform Resource Locator (URL) that defines the semantic relationship between this resource and another API resource. This URL often begins with `https://cloud.mongodb.com/api/atlas`.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ShardEntry": {
      "description": "Sharding configuration for a collection to be sharded on the destination cluster.",
      "properties": {
        "collection": {
          "description": "Human-readable label that identifies the collection to be sharded on the destination cluster.",
          "type": "string",
          "writeOnly": true
        },
        "database": {
          "description": "Human-readable label that identifies the database that contains the collection to be sharded on the destination cluster.",
          "type": "string",
          "writeOnly": true
        },
        "shardCollection": {
          "$ref": "#/$defs/ShardKeys"
        }
      },
      "required": [
        "collection",
        "database",
        "shardCollection"
      ],
      "type": "object"
    },
    "ShardKeys": {
      "description": "Document that configures the shard key on the destination cluster.",
      "properties": {
        "key": {
          "description": "List of fields to use for the shard key.",
          "items": {
            "additionalProperties": {
              "type": "object"
            },
            "type": "object"
          },
          "type": "array",
          "uniqueItems": true,
          "writeOnly": true
        }
      },
      "required": [
        "key"
      ],
      "type": "object",
      "writeOnly": true
    },
    "ShardingRequest": {
      "description": "Document that configures sharding on the destination cluster when migrating from a replica set source to a sharded cluster destination on MongoDB 6.0 or higher. If you don't wish to shard any collections on the destination cluster, leave this empty.",
      "properties": {
        "createSupportingIndexes": {
          "description": "Flag that lets the migration create supporting indexes for the shard keys, if none exists, as the destination cluster also needs compatible indexes for the specified shard keys.",
          "type": "boolean",
          "writeOnly": true
        },
        "shardingEntries": {
          "description": "List of shard configurations to shard destination collections. Atlas shards only those collections that you include in the sharding entries array.",
          "items": {
            "$ref": "#/$defs/ShardEntry"
          },
          "type": "array",
          "uniqueItems": true,
          "writeOnly": true
        }
      },
      "required": [
        "createSupportingIndexes",
        "shardingEntries"
      ],
      "type": "object",
      "writeOnly": true
    },
    "Source": {
      "description": "Document that describes the source of the migration.",
      "properties": {
        "caCertificatePath": {
          "description": "Path to the CA certificate that signed SSL certificates use to authenticate to the source cluster.",
          "type": "string"
        },
        "clusterName": {
          "description": "Label that identifies the source cluster name.",
          "minLength": 1,
          "type": "string"
        },
        "groupId": {
          "description": "Unique 24-hexadecimal digit string that identifies the source project.",
          "pattern": "^([a-f0-9]{24})$",
          "type": "string"
        },
        "managedAuthentication": {
          "description": "Flag that indicates whether MongoDB Automation manages authentication to the source cluster. If true, do not provide values for username and password.",
          "type": "boolean"
        },
        "password": {
          "description": "Password that authenticates the username to the source cluster.",
          "type": "string",
          "writeOnly": true
        },
        "ssl": {
          "description": "Flag that indicates whether you have SSL enabled.",
          "type": "boolean"
        },
        "username": {
          "description": "Label that identifies the SCRAM-SHA user that connects to the source cluster.",
          "type": "string",
          "writeOnly": true
        }
      },
      "required": [
        "clusterName",
        "groupId",
        "managedAuthentication",
        "ssl"
      ],
      "type": "object"
    }
  }
}