{
  "version":"2.0",
  "metadata":{
    "uid":"sms-2016-10-24",
    "apiVersion":"2016-10-24",
    "endpointPrefix":"sms",
    "jsonVersion":"1.1",
    "protocol":"json",
    "serviceAbbreviation":"SMS",
    "serviceFullName":"AWS Server Migration Service",
    "signatureVersion":"v4",
    "targetPrefix":"AWSServerMigrationService_V2016_10_24"
  },
  "operations":{
    "CreateReplicationJob":{
      "name":"CreateReplicationJob",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"CreateReplicationJobRequest"},
      "output":{"shape":"CreateReplicationJobResponse"},
      "errors":[
        {"shape":"InvalidParameterException"},
        {"shape":"MissingRequiredParameterException"},
        {"shape":"UnauthorizedOperationException"},
        {"shape":"OperationNotPermittedException"},
        {"shape":"ServerCannotBeReplicatedException"},
        {"shape":"ReplicationJobAlreadyExistsException"},
        {"shape":"NoConnectorsAvailableException"},
        {"shape":"InternalError"}
      ],
      "documentation":"The CreateReplicationJob API is used to create a ReplicationJob to replicate a server on AWS. Call this API to first create a ReplicationJob, which will then schedule periodic ReplicationRuns to replicate your server to AWS. Each ReplicationRun will result in the creation of an AWS AMI."
    },
    "DeleteReplicationJob":{
      "name":"DeleteReplicationJob",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"DeleteReplicationJobRequest"},
      "output":{"shape":"DeleteReplicationJobResponse"},
      "errors":[
        {"shape":"InvalidParameterException"},
        {"shape":"MissingRequiredParameterException"},
        {"shape":"UnauthorizedOperationException"},
        {"shape":"OperationNotPermittedException"},
        {"shape":"ReplicationJobNotFoundException"}
      ],
      "documentation":"The DeleteReplicationJob API is used to delete a ReplicationJob, resulting in no further ReplicationRuns. This will delete the contents of the S3 bucket used to store SMS artifacts, but will not delete any AMIs created by the SMS service."
    },
    "DeleteServerCatalog":{
      "name":"DeleteServerCatalog",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"DeleteServerCatalogRequest"},
      "output":{"shape":"DeleteServerCatalogResponse"},
      "errors":[
        {"shape":"UnauthorizedOperationException"},
        {"shape":"OperationNotPermittedException"},
        {"shape":"InvalidParameterException"},
        {"shape":"MissingRequiredParameterException"}
      ],
      "documentation":"The DeleteServerCatalog API clears all servers from your server catalog. This means that these servers will no longer be accessible to the Server Migration Service."
    },
    "DisassociateConnector":{
      "name":"DisassociateConnector",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"DisassociateConnectorRequest"},
      "output":{"shape":"DisassociateConnectorResponse"},
      "errors":[
        {"shape":"MissingRequiredParameterException"},
        {"shape":"UnauthorizedOperationException"},
        {"shape":"OperationNotPermittedException"},
        {"shape":"InvalidParameterException"}
      ],
      "documentation":"The DisassociateConnector API will disassociate a connector from the Server Migration Service, rendering it unavailable to support replication jobs."
    },
    "GetConnectors":{
      "name":"GetConnectors",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"GetConnectorsRequest"},
      "output":{"shape":"GetConnectorsResponse"},
      "errors":[
        {"shape":"UnauthorizedOperationException"}
      ],
      "documentation":"The GetConnectors API returns a list of connectors that are registered with the Server Migration Service."
    },
    "GetReplicationJobs":{
      "name":"GetReplicationJobs",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"GetReplicationJobsRequest"},
      "output":{"shape":"GetReplicationJobsResponse"},
      "errors":[
        {"shape":"InvalidParameterException"},
        {"shape":"MissingRequiredParameterException"},
        {"shape":"UnauthorizedOperationException"}
      ],
      "documentation":"The GetReplicationJobs API will return all of your ReplicationJobs and their details. This API returns a paginated list, that may be consecutively called with nextToken to retrieve all ReplicationJobs."
    },
    "GetReplicationRuns":{
      "name":"GetReplicationRuns",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"GetReplicationRunsRequest"},
      "output":{"shape":"GetReplicationRunsResponse"},
      "errors":[
        {"shape":"InvalidParameterException"},
        {"shape":"MissingRequiredParameterException"},
        {"shape":"UnauthorizedOperationException"}
      ],
      "documentation":"The GetReplicationRuns API will return all ReplicationRuns for a given ReplicationJob. This API returns a paginated list, that may be consecutively called with nextToken to retrieve all ReplicationRuns for a ReplicationJob."
    },
    "GetServers":{
      "name":"GetServers",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"GetServersRequest"},
      "output":{"shape":"GetServersResponse"},
      "errors":[
        {"shape":"UnauthorizedOperationException"}
      ],
      "documentation":"The GetServers API returns a list of all servers in your server catalog. For this call to succeed, you must previously have called ImportServerCatalog."
    },
    "ImportServerCatalog":{
      "name":"ImportServerCatalog",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"ImportServerCatalogRequest"},
      "output":{"shape":"ImportServerCatalogResponse"},
      "errors":[
        {"shape":"UnauthorizedOperationException"},
        {"shape":"OperationNotPermittedException"},
        {"shape":"InvalidParameterException"},
        {"shape":"MissingRequiredParameterException"},
        {"shape":"NoConnectorsAvailableException"}
      ],
      "documentation":"The ImportServerCatalog API is used to gather the complete list of on-premises servers on your premises. This API call requires connectors to be installed and monitoring all servers you would like imported. This API call returns immediately, but may take some time to retrieve all of the servers."
    },
    "StartOnDemandReplicationRun":{
      "name":"StartOnDemandReplicationRun",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"StartOnDemandReplicationRunRequest"},
      "output":{"shape":"StartOnDemandReplicationRunResponse"},
      "errors":[
        {"shape":"InvalidParameterException"},
        {"shape":"MissingRequiredParameterException"},
        {"shape":"UnauthorizedOperationException"},
        {"shape":"OperationNotPermittedException"},
        {"shape":"ReplicationRunLimitExceededException"}
      ],
      "documentation":"The StartOnDemandReplicationRun API is used to start a ReplicationRun on demand (in addition to those that are scheduled based on your frequency). This ReplicationRun will start immediately. StartOnDemandReplicationRun is subject to limits on how many on demand ReplicationRuns you may call per 24-hour period."
    },
    "UpdateReplicationJob":{
      "name":"UpdateReplicationJob",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"UpdateReplicationJobRequest"},
      "output":{"shape":"UpdateReplicationJobResponse"},
      "errors":[
        {"shape":"InvalidParameterException"},
        {"shape":"MissingRequiredParameterException"},
        {"shape":"OperationNotPermittedException"},
        {"shape":"UnauthorizedOperationException"},
        {"shape":"ServerCannotBeReplicatedException"},
        {"shape":"ReplicationJobNotFoundException"},
        {"shape":"InternalError"}
      ],
      "documentation":"The UpdateReplicationJob API is used to change the settings of your existing ReplicationJob created using CreateReplicationJob. Calling this API will affect the next scheduled ReplicationRun."
    }
  },
  "shapes":{
    "AmiId":{
      "type":"string",
      "documentation":"The AMI id for the image resulting from a Replication Run."
    },
    "Connector":{
      "type":"structure",
      "members":{
        "connectorId":{"shape":"ConnectorId"},
        "version":{"shape":"ConnectorVersion"},
        "status":{"shape":"ConnectorStatus"},
        "capabilityList":{"shape":"ConnectorCapabilityList"},
        "vmManagerName":{"shape":"VmManagerName"},
        "vmManagerType":{"shape":"VmManagerType"},
        "vmManagerId":{"shape":"VmManagerId"},
        "ipAddress":{"shape":"IpAddress"},
        "macAddress":{"shape":"MacAddress"},
        "associatedOn":{"shape":"Timestamp"}
      },
      "documentation":"Object representing a Connector"
    },
    "ConnectorCapability":{
      "type":"string",
      "documentation":"Capabilities for a Connector",
      "enum":["VSPHERE"]
    },
    "ConnectorCapabilityList":{
      "type":"list",
      "member":{
        "shape":"ConnectorCapability",
        "locationName":"item"
      },
      "documentation":"List of Connector Capabilities"
    },
    "ConnectorId":{
      "type":"string",
      "documentation":"Unique Identifier for Connector"
    },
    "ConnectorList":{
      "type":"list",
      "member":{
        "shape":"Connector",
        "locationName":"item"
      },
      "documentation":"List of connectors"
    },
    "ConnectorStatus":{
      "type":"string",
      "documentation":"Status of on-premise Connector",
      "enum":[
        "HEALTHY",
        "UNHEALTHY"
      ]
    },
    "ConnectorVersion":{
      "type":"string",
      "documentation":"Connector version string"
    },
    "CreateReplicationJobRequest":{
      "type":"structure",
      "required":[
        "serverId",
        "seedReplicationTime",
        "frequency"
      ],
      "members":{
        "serverId":{"shape":"ServerId"},
        "seedReplicationTime":{"shape":"Timestamp"},
        "frequency":{"shape":"Frequency"},
        "licenseType":{"shape":"LicenseType"},
        "roleName":{"shape":"RoleName"},
        "description":{"shape":"Description"}
      }
    },
    "CreateReplicationJobResponse":{
      "type":"structure",
      "members":{
        "replicationJobId":{"shape":"ReplicationJobId"}
      }
    },
    "DeleteReplicationJobRequest":{
      "type":"structure",
      "required":["replicationJobId"],
      "members":{
        "replicationJobId":{"shape":"ReplicationJobId"}
      }
    },
    "DeleteReplicationJobResponse":{
      "type":"structure",
      "members":{
      }
    },
    "DeleteServerCatalogRequest":{
      "type":"structure",
      "members":{
      }
    },
    "DeleteServerCatalogResponse":{
      "type":"structure",
      "members":{
      }
    },
    "Description":{
      "type":"string",
      "documentation":"The description for a Replication Job/Run."
    },
    "DisassociateConnectorRequest":{
      "type":"structure",
      "required":["connectorId"],
      "members":{
        "connectorId":{"shape":"ConnectorId"}
      }
    },
    "DisassociateConnectorResponse":{
      "type":"structure",
      "members":{
      }
    },
    "ErrorMessage":{
      "type":"string",
      "documentation":"Error Message string"
    },
    "Frequency":{
      "type":"integer",
      "documentation":"Interval between Replication Runs. This value is specified in hours, and represents the time between consecutive Replication Runs."
    },
    "GetConnectorsRequest":{
      "type":"structure",
      "members":{
        "nextToken":{"shape":"NextToken"},
        "maxResults":{"shape":"MaxResults"}
      }
    },
    "GetConnectorsResponse":{
      "type":"structure",
      "members":{
        "connectorList":{"shape":"ConnectorList"},
        "nextToken":{"shape":"NextToken"}
      }
    },
    "GetReplicationJobsRequest":{
      "type":"structure",
      "members":{
        "replicationJobId":{"shape":"ReplicationJobId"},
        "nextToken":{"shape":"NextToken"},
        "maxResults":{"shape":"MaxResults"}
      }
    },
    "GetReplicationJobsResponse":{
      "type":"structure",
      "members":{
        "replicationJobList":{"shape":"ReplicationJobList"},
        "nextToken":{"shape":"NextToken"}
      }
    },
    "GetReplicationRunsRequest":{
      "type":"structure",
      "required":["replicationJobId"],
      "members":{
        "replicationJobId":{"shape":"ReplicationJobId"},
        "nextToken":{"shape":"NextToken"},
        "maxResults":{"shape":"MaxResults"}
      }
    },
    "GetReplicationRunsResponse":{
      "type":"structure",
      "members":{
        "replicationJob":{"shape":"ReplicationJob"},
        "replicationRunList":{"shape":"ReplicationRunList"},
        "nextToken":{"shape":"NextToken"}
      }
    },
    "GetServersRequest":{
      "type":"structure",
      "members":{
        "nextToken":{"shape":"NextToken"},
        "maxResults":{"shape":"MaxResults"}
      }
    },
    "GetServersResponse":{
      "type":"structure",
      "members":{
        "lastModifiedOn":{"shape":"Timestamp"},
        "serverCatalogStatus":{"shape":"ServerCatalogStatus"},
        "serverList":{"shape":"ServerList"},
        "nextToken":{"shape":"NextToken"}
      }
    },
    "ImportServerCatalogRequest":{
      "type":"structure",
      "members":{
      }
    },
    "ImportServerCatalogResponse":{
      "type":"structure",
      "members":{
      }
    },
    "InternalError":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"An internal error has occured.",
      "exception":true,
      "fault":true
    },
    "InvalidParameterException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"A parameter specified in the request is not valid, is unsupported, or cannot be used.",
      "exception":true
    },
    "IpAddress":{
      "type":"string",
      "documentation":"Internet Protocol (IP) Address"
    },
    "LicenseType":{
      "type":"string",
      "documentation":"The license type to be used for the Amazon Machine Image (AMI) created after a successful ReplicationRun.",
      "enum":[
        "AWS",
        "BYOL"
      ]
    },
    "MacAddress":{
      "type":"string",
      "documentation":"Hardware (MAC) address"
    },
    "MaxResults":{
      "type":"integer",
      "documentation":"The maximum number of results to return in one API call. If left empty, this will default to 50."
    },
    "MissingRequiredParameterException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"The request is missing a required parameter. Ensure that you have supplied all the required parameters for the request.",
      "exception":true
    },
    "NextToken":{
      "type":"string",
      "documentation":"Pagination token to pass as input to API call"
    },
    "NoConnectorsAvailableException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"No connectors are available to handle this request. Please associate connector(s) and verify any existing connectors are healthy and can respond to requests.",
      "exception":true
    },
    "OperationNotPermittedException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"The specified operation is not allowed. This error can occur for a number of reasons; for example, you might be trying to start a Replication Run before seed Replication Run.",
      "exception":true
    },
    "ReplicationJob":{
      "type":"structure",
      "members":{
        "replicationJobId":{"shape":"ReplicationJobId"},
        "serverId":{"shape":"ServerId"},
        "serverType":{"shape":"ServerType"},
        "vmServer":{"shape":"VmServer"},
        "seedReplicationTime":{"shape":"Timestamp"},
        "frequency":{"shape":"Frequency"},
        "nextReplicationRunStartTime":{"shape":"Timestamp"},
        "licenseType":{"shape":"LicenseType"},
        "roleName":{"shape":"RoleName"},
        "latestAmiId":{"shape":"AmiId"},
        "state":{"shape":"ReplicationJobState"},
        "statusMessage":{"shape":"ReplicationJobStatusMessage"},
        "description":{"shape":"Description"},
        "replicationRunList":{"shape":"ReplicationRunList"}
      },
      "documentation":"Object representing a Replication Job"
    },
    "ReplicationJobAlreadyExistsException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"An active Replication Job already exists for the specified server.",
      "exception":true
    },
    "ReplicationJobId":{
      "type":"string",
      "documentation":"The unique identifier for a Replication Job."
    },
    "ReplicationJobList":{
      "type":"list",
      "member":{
        "shape":"ReplicationJob",
        "locationName":"item"
      },
      "documentation":"List of Replication Jobs"
    },
    "ReplicationJobNotFoundException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"The specified Replication Job cannot be found.",
      "exception":true
    },
    "ReplicationJobState":{
      "type":"string",
      "documentation":"Current state of Replication Job",
      "enum":[
        "PENDING",
        "ACTIVE",
        "FAILED",
        "DELETING",
        "DELETED"
      ]
    },
    "ReplicationJobStatusMessage":{
      "type":"string",
      "documentation":"String describing current status of Replication Job"
    },
    "ReplicationJobTerminated":{
      "type":"boolean",
      "documentation":"An indicator of the Replication Job being deleted or failed."
    },
    "ReplicationRun":{
      "type":"structure",
      "members":{
        "replicationRunId":{"shape":"ReplicationRunId"},
        "state":{"shape":"ReplicationRunState"},
        "type":{"shape":"ReplicationRunType"},
        "statusMessage":{"shape":"ReplicationRunStatusMessage"},
        "amiId":{"shape":"AmiId"},
        "scheduledStartTime":{"shape":"Timestamp"},
        "completedTime":{"shape":"Timestamp"},
        "description":{"shape":"Description"}
      },
      "documentation":"Object representing a Replication Run"
    },
    "ReplicationRunId":{
      "type":"string",
      "documentation":"The unique identifier for a Replication Run."
    },
    "ReplicationRunLimitExceededException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"This user has exceeded the maximum allowed Replication Run limit.",
      "exception":true
    },
    "ReplicationRunList":{
      "type":"list",
      "member":{
        "shape":"ReplicationRun",
        "locationName":"item"
      },
      "documentation":"List of Replication Runs"
    },
    "ReplicationRunState":{
      "type":"string",
      "documentation":"Current state of Replication Run",
      "enum":[
        "PENDING",
        "MISSED",
        "ACTIVE",
        "FAILED",
        "COMPLETED",
        "DELETING",
        "DELETED"
      ]
    },
    "ReplicationRunStatusMessage":{
      "type":"string",
      "documentation":"String describing current status of Replication Run"
    },
    "ReplicationRunType":{
      "type":"string",
      "documentation":"Type of Replication Run",
      "enum":[
        "ON_DEMAND",
        "AUTOMATIC"
      ]
    },
    "RoleName":{
      "type":"string",
      "documentation":"Name of service role in customer's account to be used by SMS service."
    },
    "Server":{
      "type":"structure",
      "members":{
        "serverId":{"shape":"ServerId"},
        "serverType":{"shape":"ServerType"},
        "vmServer":{"shape":"VmServer"},
        "replicationJobId":{"shape":"ReplicationJobId"},
        "replicationJobTerminated":{"shape":"ReplicationJobTerminated"}
      },
      "documentation":"Object representing a server"
    },
    "ServerCannotBeReplicatedException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"The provided server cannot be replicated.",
      "exception":true
    },
    "ServerCatalogStatus":{
      "type":"string",
      "documentation":"Status of Server catalog",
      "enum":[
        "NOT_IMPORTED",
        "IMPORTING",
        "AVAILABLE",
        "DELETED",
        "EXPIRED"
      ]
    },
    "ServerId":{
      "type":"string",
      "documentation":"Unique Identifier for a server"
    },
    "ServerList":{
      "type":"list",
      "member":{
        "shape":"Server",
        "locationName":"item"
      },
      "documentation":"List of servers from catalog"
    },
    "ServerType":{
      "type":"string",
      "documentation":"Type of server.",
      "enum":["VIRTUAL_MACHINE"]
    },
    "StartOnDemandReplicationRunRequest":{
      "type":"structure",
      "required":["replicationJobId"],
      "members":{
        "replicationJobId":{"shape":"ReplicationJobId"},
        "description":{"shape":"Description"}
      }
    },
    "StartOnDemandReplicationRunResponse":{
      "type":"structure",
      "members":{
        "replicationRunId":{"shape":"ReplicationRunId"}
      }
    },
    "Timestamp":{
      "type":"timestamp",
      "documentation":"Timestamp of an operation"
    },
    "UnauthorizedOperationException":{
      "type":"structure",
      "members":{
        "message":{"shape":"ErrorMessage"}
      },
      "documentation":"This user does not have permissions to perform this operation.",
      "exception":true
    },
    "UpdateReplicationJobRequest":{
      "type":"structure",
      "required":["replicationJobId"],
      "members":{
        "replicationJobId":{"shape":"ReplicationJobId"},
        "frequency":{"shape":"Frequency"},
        "nextReplicationRunStartTime":{"shape":"Timestamp"},
        "licenseType":{"shape":"LicenseType"},
        "roleName":{"shape":"RoleName"},
        "description":{"shape":"Description"}
      }
    },
    "UpdateReplicationJobResponse":{
      "type":"structure",
      "members":{
      }
    },
    "VmId":{
      "type":"string",
      "documentation":"Unique Identifier for a VM"
    },
    "VmManagerId":{
      "type":"string",
      "documentation":"Unique Identifier for VM Manager"
    },
    "VmManagerName":{
      "type":"string",
      "documentation":"VM Manager Name"
    },
    "VmManagerType":{
      "type":"string",
      "documentation":"VM Management Product",
      "enum":["VSPHERE"]
    },
    "VmName":{
      "type":"string",
      "documentation":"Name of Virtual Machine"
    },
    "VmPath":{
      "type":"string",
      "documentation":"Path to VM"
    },
    "VmServer":{
      "type":"structure",
      "members":{
        "vmServerAddress":{"shape":"VmServerAddress"},
        "vmName":{"shape":"VmName"},
        "vmManagerName":{"shape":"VmManagerName"},
        "vmManagerType":{"shape":"VmManagerType"},
        "vmPath":{"shape":"VmPath"}
      },
      "documentation":"Object representing a VM server"
    },
    "VmServerAddress":{
      "type":"structure",
      "members":{
        "vmManagerId":{"shape":"VmManagerId"},
        "vmId":{"shape":"VmId"}
      },
      "documentation":"Object representing a server's location"
    }
  },
  "documentation":"Amazon Server Migration Service automates the process of migrating servers to EC2."
}
