diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,27 +8,82 @@
 
 ## Version
 
-`1.3.4`
+`1.3.5`
 
 
 ## Description
 
-Amazon EC2 Simple Systems Manager (SSM) enables you to configure and
-manage your EC2 instances. You can create a configuration document and
-then associate it with one or more running instances.
+Simple Systems Manager (SSM) is a set of capabilities that can help you
+manage your Amazon EC2 instances running on Windows. SSM enables you to
+run scripts or other common administrative tasks on your instances using
+either SSM Run Command or SSM Config.
 
-You can use a configuration document to automate the following tasks for
-your Windows instances:
+Run Command extends the server administration capabilities of SSM by
+offering an on-demand experience for executing commands. You can use
+pre-defined Amazon SSM documents (formerly called configuration
+documents) to perform the actions listed later in this section, or you
+can create your own documents. With these document, you can then
+remotely configure your instances by sending commands using the AWS
+command line interface (CLI), AWS Tools for Windows PowerShell, or the
+__Commands__ page in the Amazon EC2 console. Additionally, because Run
+Command enables you to execute PowerShell commands or scripts, you can
+administer your instances remotely using PowerShell as though you were
+logged on locally to the instance. Run Command reports the status of the
+command execution for each instance targeted by a command. You can also
+audit the command execution to understand who executed commands, when,
+and what changes were made. By switching between different SSM
+documents, you can quickly configure your instances with different types
+of commands.
 
--   Join an AWS Directory
+SSM Config is a lightweight instance configuration solution. With SSM
+Config, you can specify a setup configuration for your instances. SSM
+Config is similar to EC2 User Data, which is another way of running
+one-time scripts or applying settings during instance launch. SSM Config
+is an extension of this capability. Using SSM documents, you can specify
+which actions the system should perform on your instances, including
+which applications to install, which AWS Directory Service directory to
+join, which Microsoft PowerShell modules to install, etc. If an instance
+is missing one or more of these configurations, the system makes those
+changes. By default, the system checks every five minutes to see if
+there is a new configuration to apply as defined in a new SSM document.
+If so, the system updates the instances accordingly. In this way, you
+can remotely maintain a consistent configuration baseline on your
+instances. SSM Config is available using the AWS CLI or the AWS Tools
+for Windows PowerShell.
 
--   Install, repair, or uninstall software using an MSI package
+SSM is currently not supported on Linux instances.
 
--   Run PowerShell scripts
+You can use Run Command and SSM Config to do the following:
 
--   Configure CloudWatch Logs to monitor applications and systems
+-   Join an AWS Directory Service directory (SSM Config and Run Command)
 
-Note that configuration documents are not supported on Linux instances.
+-   Install, repair, or uninstall software using an MSI package (SSM
+    Config and Run Command)
+
+-   Install PowerShell modules (SSM Config and Run Command)
+
+-   Configure CloudWatch Logs to monitor applications and systems (SSM
+    Config and Run Command)
+
+-   Run PowerShell commands or scripts (Run Command only)
+
+-   Update the EC2Config service (Run Command only)
+
+-   Configure Windows Update settings (Run Command only)
+
+SSM documents run with administrative privilege on Windows instances
+because the EC2Config service runs in the Local System account. If a
+user has permission to execute any of the pre-defined SSM documents (any
+document that begins with AWS-*) then that user also has administrator
+access to the instance. Delegate access to SSM Config and Run Command
+judiciously. This becomes extremely important if you create your own SSM
+documents. Amazon Web Services does not provide guidance about how to
+create secure SSM documents. You create SSM documents and delegate
+access to Run Command actions at your own risk. As a security best
+practice, we recommend that you assign access to \"AWS-*\" documents,
+especially the AWS-RunPowerShellScript document, to trusted
+administrators only. You can create low-level SSM documents for low
+security tasks and delegate access to non-administrators.
 
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-ssm)
 and the [AWS API Reference](http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html).
diff --git a/amazonka-ssm.cabal b/amazonka-ssm.cabal
--- a/amazonka-ssm.cabal
+++ b/amazonka-ssm.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-ssm
-version:               1.3.4
+version:               1.3.5
 synopsis:              Amazon Simple Systems Management Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -13,22 +13,77 @@
 cabal-version:         >= 1.10
 extra-source-files:    README.md fixture/*.yaml fixture/*.proto
 description:
-    Amazon EC2 Simple Systems Manager (SSM) enables you to configure and
-    manage your EC2 instances. You can create a configuration document and
-    then associate it with one or more running instances.
+    Simple Systems Manager (SSM) is a set of capabilities that can help you
+    manage your Amazon EC2 instances running on Windows. SSM enables you to
+    run scripts or other common administrative tasks on your instances using
+    either SSM Run Command or SSM Config.
 
-    You can use a configuration document to automate the following tasks for
-    your Windows instances:
+    Run Command extends the server administration capabilities of SSM by
+    offering an on-demand experience for executing commands. You can use
+    pre-defined Amazon SSM documents (formerly called configuration
+    documents) to perform the actions listed later in this section, or you
+    can create your own documents. With these document, you can then
+    remotely configure your instances by sending commands using the AWS
+    command line interface (CLI), AWS Tools for Windows PowerShell, or the
+    __Commands__ page in the Amazon EC2 console. Additionally, because Run
+    Command enables you to execute PowerShell commands or scripts, you can
+    administer your instances remotely using PowerShell as though you were
+    logged on locally to the instance. Run Command reports the status of the
+    command execution for each instance targeted by a command. You can also
+    audit the command execution to understand who executed commands, when,
+    and what changes were made. By switching between different SSM
+    documents, you can quickly configure your instances with different types
+    of commands.
 
-    -   Join an AWS Directory
+    SSM Config is a lightweight instance configuration solution. With SSM
+    Config, you can specify a setup configuration for your instances. SSM
+    Config is similar to EC2 User Data, which is another way of running
+    one-time scripts or applying settings during instance launch. SSM Config
+    is an extension of this capability. Using SSM documents, you can specify
+    which actions the system should perform on your instances, including
+    which applications to install, which AWS Directory Service directory to
+    join, which Microsoft PowerShell modules to install, etc. If an instance
+    is missing one or more of these configurations, the system makes those
+    changes. By default, the system checks every five minutes to see if
+    there is a new configuration to apply as defined in a new SSM document.
+    If so, the system updates the instances accordingly. In this way, you
+    can remotely maintain a consistent configuration baseline on your
+    instances. SSM Config is available using the AWS CLI or the AWS Tools
+    for Windows PowerShell.
 
-    -   Install, repair, or uninstall software using an MSI package
+    SSM is currently not supported on Linux instances.
 
-    -   Run PowerShell scripts
+    You can use Run Command and SSM Config to do the following:
 
-    -   Configure CloudWatch Logs to monitor applications and systems
+    -   Join an AWS Directory Service directory (SSM Config and Run Command)
 
-    Note that configuration documents are not supported on Linux instances.
+    -   Install, repair, or uninstall software using an MSI package (SSM
+        Config and Run Command)
+
+    -   Install PowerShell modules (SSM Config and Run Command)
+
+    -   Configure CloudWatch Logs to monitor applications and systems (SSM
+        Config and Run Command)
+
+    -   Run PowerShell commands or scripts (Run Command only)
+
+    -   Update the EC2Config service (Run Command only)
+
+    -   Configure Windows Update settings (Run Command only)
+
+    SSM documents run with administrative privilege on Windows instances
+    because the EC2Config service runs in the Local System account. If a
+    user has permission to execute any of the pre-defined SSM documents (any
+    document that begins with AWS-*) then that user also has administrator
+    access to the instance. Delegate access to SSM Config and Run Command
+    judiciously. This becomes extremely important if you create your own SSM
+    documents. Amazon Web Services does not provide guidance about how to
+    create secure SSM documents. You create SSM documents and delegate
+    access to Run Command actions at your own risk. As a security best
+    practice, we recommend that you assign access to \"AWS-*\" documents,
+    especially the AWS-RunPowerShellScript document, to trusted
+    administrators only. You can create low-level SSM documents for low
+    security tasks and delegate access to non-administrators.
     .
     The types from this library are intended to be used with
     <http://hackage.haskell.org/package/amazonka amazonka>, which provides
@@ -56,6 +111,7 @@
 
     exposed-modules:
           Network.AWS.SSM
+        , Network.AWS.SSM.CancelCommand
         , Network.AWS.SSM.CreateAssociation
         , Network.AWS.SSM.CreateAssociationBatch
         , Network.AWS.SSM.CreateDocument
@@ -63,9 +119,13 @@
         , Network.AWS.SSM.DeleteDocument
         , Network.AWS.SSM.DescribeAssociation
         , Network.AWS.SSM.DescribeDocument
+        , Network.AWS.SSM.DescribeInstanceInformation
         , Network.AWS.SSM.GetDocument
         , Network.AWS.SSM.ListAssociations
+        , Network.AWS.SSM.ListCommandInvocations
+        , Network.AWS.SSM.ListCommands
         , Network.AWS.SSM.ListDocuments
+        , Network.AWS.SSM.SendCommand
         , Network.AWS.SSM.Types
         , Network.AWS.SSM.UpdateAssociationStatus
         , Network.AWS.SSM.Waiters
@@ -75,7 +135,7 @@
         , Network.AWS.SSM.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.4.*
+          amazonka-core == 1.3.5.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-ssm-test
@@ -95,9 +155,9 @@
         , Test.AWS.SSM.Internal
 
     build-depends:
-          amazonka-core == 1.3.4.*
-        , amazonka-test == 1.3.4.*
-        , amazonka-ssm == 1.3.4.*
+          amazonka-core == 1.3.5.*
+        , amazonka-test == 1.3.5.*
+        , amazonka-ssm == 1.3.5.*
         , base
         , bytestring
         , lens
diff --git a/fixture/CancelCommand.yaml b/fixture/CancelCommand.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelCommand.yaml
diff --git a/fixture/CancelCommandResponse.proto b/fixture/CancelCommandResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelCommandResponse.proto
diff --git a/fixture/DescribeInstanceInformation.yaml b/fixture/DescribeInstanceInformation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceInformation.yaml
diff --git a/fixture/DescribeInstanceInformationResponse.proto b/fixture/DescribeInstanceInformationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceInformationResponse.proto
diff --git a/fixture/ListCommandInvocations.yaml b/fixture/ListCommandInvocations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCommandInvocations.yaml
diff --git a/fixture/ListCommandInvocationsResponse.proto b/fixture/ListCommandInvocationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCommandInvocationsResponse.proto
diff --git a/fixture/ListCommands.yaml b/fixture/ListCommands.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCommands.yaml
diff --git a/fixture/ListCommandsResponse.proto b/fixture/ListCommandsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCommandsResponse.proto
diff --git a/fixture/SendCommand.yaml b/fixture/SendCommand.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendCommand.yaml
diff --git a/fixture/SendCommandResponse.proto b/fixture/SendCommandResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendCommandResponse.proto
diff --git a/gen/Network/AWS/SSM.hs b/gen/Network/AWS/SSM.hs
--- a/gen/Network/AWS/SSM.hs
+++ b/gen/Network/AWS/SSM.hs
@@ -11,23 +11,78 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Amazon EC2 Simple Systems Manager (SSM) enables you to configure and
--- manage your EC2 instances. You can create a configuration document and
--- then associate it with one or more running instances.
+-- Simple Systems Manager (SSM) is a set of capabilities that can help you
+-- manage your Amazon EC2 instances running on Windows. SSM enables you to
+-- run scripts or other common administrative tasks on your instances using
+-- either SSM Run Command or SSM Config.
 --
--- You can use a configuration document to automate the following tasks for
--- your Windows instances:
+-- Run Command extends the server administration capabilities of SSM by
+-- offering an on-demand experience for executing commands. You can use
+-- pre-defined Amazon SSM documents (formerly called configuration
+-- documents) to perform the actions listed later in this section, or you
+-- can create your own documents. With these document, you can then
+-- remotely configure your instances by sending commands using the AWS
+-- command line interface (CLI), AWS Tools for Windows PowerShell, or the
+-- __Commands__ page in the Amazon EC2 console. Additionally, because Run
+-- Command enables you to execute PowerShell commands or scripts, you can
+-- administer your instances remotely using PowerShell as though you were
+-- logged on locally to the instance. Run Command reports the status of the
+-- command execution for each instance targeted by a command. You can also
+-- audit the command execution to understand who executed commands, when,
+-- and what changes were made. By switching between different SSM
+-- documents, you can quickly configure your instances with different types
+-- of commands.
 --
--- -   Join an AWS Directory
+-- SSM Config is a lightweight instance configuration solution. With SSM
+-- Config, you can specify a setup configuration for your instances. SSM
+-- Config is similar to EC2 User Data, which is another way of running
+-- one-time scripts or applying settings during instance launch. SSM Config
+-- is an extension of this capability. Using SSM documents, you can specify
+-- which actions the system should perform on your instances, including
+-- which applications to install, which AWS Directory Service directory to
+-- join, which Microsoft PowerShell modules to install, etc. If an instance
+-- is missing one or more of these configurations, the system makes those
+-- changes. By default, the system checks every five minutes to see if
+-- there is a new configuration to apply as defined in a new SSM document.
+-- If so, the system updates the instances accordingly. In this way, you
+-- can remotely maintain a consistent configuration baseline on your
+-- instances. SSM Config is available using the AWS CLI or the AWS Tools
+-- for Windows PowerShell.
 --
--- -   Install, repair, or uninstall software using an MSI package
+-- SSM is currently not supported on Linux instances.
 --
--- -   Run PowerShell scripts
+-- You can use Run Command and SSM Config to do the following:
 --
--- -   Configure CloudWatch Logs to monitor applications and systems
+-- -   Join an AWS Directory Service directory (SSM Config and Run Command)
 --
--- Note that configuration documents are not supported on Linux instances.
+-- -   Install, repair, or uninstall software using an MSI package (SSM
+--     Config and Run Command)
 --
+-- -   Install PowerShell modules (SSM Config and Run Command)
+--
+-- -   Configure CloudWatch Logs to monitor applications and systems (SSM
+--     Config and Run Command)
+--
+-- -   Run PowerShell commands or scripts (Run Command only)
+--
+-- -   Update the EC2Config service (Run Command only)
+--
+-- -   Configure Windows Update settings (Run Command only)
+--
+-- SSM documents run with administrative privilege on Windows instances
+-- because the EC2Config service runs in the Local System account. If a
+-- user has permission to execute any of the pre-defined SSM documents (any
+-- document that begins with AWS-*) then that user also has administrator
+-- access to the instance. Delegate access to SSM Config and Run Command
+-- judiciously. This becomes extremely important if you create your own SSM
+-- documents. Amazon Web Services does not provide guidance about how to
+-- create secure SSM documents. You create SSM documents and delegate
+-- access to Run Command actions at your own risk. As a security best
+-- practice, we recommend that you assign access to \"AWS-*\" documents,
+-- especially the AWS-RunPowerShellScript document, to trusted
+-- administrators only. You can create low-level SSM documents for low
+-- security tasks and delegate access to non-administrators.
+--
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.SSM
     (
@@ -37,6 +92,9 @@
     -- * Errors
     -- $errors
 
+    -- ** UnsupportedPlatformType
+    , _UnsupportedPlatformType
+
     -- ** AssociatedInstances
     , _AssociatedInstances
 
@@ -49,12 +107,24 @@
     -- ** InvalidNextToken
     , _InvalidNextToken
 
+    -- ** InvalidOutputFolder
+    , _InvalidOutputFolder
+
+    -- ** InvalidCommandId
+    , _InvalidCommandId
+
     -- ** DuplicateInstanceId
     , _DuplicateInstanceId
 
     -- ** InvalidDocument
     , _InvalidDocument
 
+    -- ** InvalidFilterKey
+    , _InvalidFilterKey
+
+    -- ** InvalidInstanceInformationFilterValue
+    , _InvalidInstanceInformationFilterValue
+
     -- ** AssociationAlreadyExists
     , _AssociationAlreadyExists
 
@@ -76,6 +146,9 @@
     -- ** MaxDocumentSizeExceeded
     , _MaxDocumentSizeExceeded
 
+    -- ** InvalidParameters
+    , _InvalidParameters
+
     -- ** DocumentAlreadyExists
     , _DocumentAlreadyExists
 
@@ -97,24 +170,39 @@
     -- ** CreateDocument
     , module Network.AWS.SSM.CreateDocument
 
+    -- ** ListCommandInvocations
+    , module Network.AWS.SSM.ListCommandInvocations
+
     -- ** ListDocuments
     , module Network.AWS.SSM.ListDocuments
 
     -- ** GetDocument
     , module Network.AWS.SSM.GetDocument
 
+    -- ** CancelCommand
+    , module Network.AWS.SSM.CancelCommand
+
     -- ** DescribeAssociation
     , module Network.AWS.SSM.DescribeAssociation
 
     -- ** UpdateAssociationStatus
     , module Network.AWS.SSM.UpdateAssociationStatus
 
+    -- ** DescribeInstanceInformation
+    , module Network.AWS.SSM.DescribeInstanceInformation
+
     -- ** ListAssociations
     , module Network.AWS.SSM.ListAssociations
 
     -- ** DeleteAssociation
     , module Network.AWS.SSM.DeleteAssociation
 
+    -- ** SendCommand
+    , module Network.AWS.SSM.SendCommand
+
+    -- ** ListCommands
+    , module Network.AWS.SSM.ListCommands
+
     -- ** DeleteDocument
     , module Network.AWS.SSM.DeleteDocument
 
@@ -129,15 +217,39 @@
     -- ** AssociationStatusName
     , AssociationStatusName (..)
 
+    -- ** CommandFilterKey
+    , CommandFilterKey (..)
+
+    -- ** CommandInvocationStatus
+    , CommandInvocationStatus (..)
+
+    -- ** CommandPluginStatus
+    , CommandPluginStatus (..)
+
+    -- ** CommandStatus
+    , CommandStatus (..)
+
     -- ** DocumentFilterKey
     , DocumentFilterKey (..)
 
+    -- ** DocumentParameterType
+    , DocumentParameterType (..)
+
     -- ** DocumentStatus
     , DocumentStatus (..)
 
     -- ** Fault
     , Fault (..)
 
+    -- ** InstanceInformationFilterKey
+    , InstanceInformationFilterKey (..)
+
+    -- ** PingStatus
+    , PingStatus (..)
+
+    -- ** PlatformType
+    , PlatformType (..)
+
     -- ** Association
     , Association
     , association
@@ -151,6 +263,7 @@
     , adStatus
     , adDate
     , adName
+    , adParameters
 
     -- ** AssociationFilter
     , AssociationFilter
@@ -166,19 +279,67 @@
     , asName
     , asMessage
 
+    -- ** Command
+    , Command
+    , command
+    , cStatus
+    , cExpiresAfter
+    , cOutputS3KeyPrefix
+    , cDocumentName
+    , cInstanceIds
+    , cCommandId
+    , cParameters
+    , cComment
+    , cOutputS3BucketName
+    , cRequestedDateTime
+
+    -- ** CommandFilter
+    , CommandFilter
+    , commandFilter
+    , cfKey
+    , cfValue
+
+    -- ** CommandInvocation
+    , CommandInvocation
+    , commandInvocation
+    , ciInstanceId
+    , ciStatus
+    , ciCommandPlugins
+    , ciDocumentName
+    , ciCommandId
+    , ciComment
+    , ciTraceOutput
+    , ciRequestedDateTime
+
+    -- ** CommandPlugin
+    , CommandPlugin
+    , commandPlugin
+    , cpStatus
+    , cpResponseStartDateTime
+    , cpOutputS3KeyPrefix
+    , cpResponseCode
+    , cpOutput
+    , cpName
+    , cpOutputS3BucketName
+    , cpResponseFinishDateTime
+
     -- ** CreateAssociationBatchRequestEntry
     , CreateAssociationBatchRequestEntry
     , createAssociationBatchRequestEntry
     , cabreInstanceId
     , cabreName
+    , cabreParameters
 
     -- ** DocumentDescription
     , DocumentDescription
     , documentDescription
     , dStatus
     , dSha1
+    , dPlatformTypes
     , dCreatedDate
     , dName
+    , dParameters
+    , dDescription
 
     -- ** DocumentFilter
     , DocumentFilter
@@ -189,16 +350,44 @@
     -- ** DocumentIdentifier
     , DocumentIdentifier
     , documentIdentifier
+    , diPlatformTypes
     , diName
 
+    -- ** DocumentParameter
+    , DocumentParameter
+    , documentParameter
+    , dpName
+    , dpDefaultValue
+    , dpType
+    , dpDescription
+
     -- ** FailedCreateAssociation
     , FailedCreateAssociation
     , failedCreateAssociation
     , fcaEntry
     , fcaFault
     , fcaMessage
+
+    -- ** InstanceInformation
+    , InstanceInformation
+    , instanceInformation
+    , iiInstanceId
+    , iiPingStatus
+    , iiPlatformVersion
+    , iiIsLatestVersion
+    , iiAgentVersion
+    , iiLastPingDateTime
+    , iiPlatformType
+    , iiPlatformName
+
+    -- ** InstanceInformationFilter
+    , InstanceInformationFilter
+    , instanceInformationFilter
+    , iifKey
+    , iifValueSet
     ) where
 
+import           Network.AWS.SSM.CancelCommand
 import           Network.AWS.SSM.CreateAssociation
 import           Network.AWS.SSM.CreateAssociationBatch
 import           Network.AWS.SSM.CreateDocument
@@ -206,9 +395,13 @@
 import           Network.AWS.SSM.DeleteDocument
 import           Network.AWS.SSM.DescribeAssociation
 import           Network.AWS.SSM.DescribeDocument
+import           Network.AWS.SSM.DescribeInstanceInformation
 import           Network.AWS.SSM.GetDocument
 import           Network.AWS.SSM.ListAssociations
+import           Network.AWS.SSM.ListCommandInvocations
+import           Network.AWS.SSM.ListCommands
 import           Network.AWS.SSM.ListDocuments
+import           Network.AWS.SSM.SendCommand
 import           Network.AWS.SSM.Types
 import           Network.AWS.SSM.UpdateAssociationStatus
 import           Network.AWS.SSM.Waiters
diff --git a/gen/Network/AWS/SSM/CancelCommand.hs b/gen/Network/AWS/SSM/CancelCommand.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SSM/CancelCommand.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SSM.CancelCommand
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Attempts to cancel the command specified by the Command ID. There is no
+-- guarantee that the command will be terminated and the underlying process
+-- stopped.
+--
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CancelCommand.html AWS API Reference> for CancelCommand.
+module Network.AWS.SSM.CancelCommand
+    (
+    -- * Creating a Request
+      cancelCommand
+    , CancelCommand
+    -- * Request Lenses
+    , ccInstanceIds
+    , ccCommandId
+
+    -- * Destructuring the Response
+    , cancelCommandResponse
+    , CancelCommandResponse
+    -- * Response Lenses
+    , ccrsResponseStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
+
+-- | /See:/ 'cancelCommand' smart constructor.
+data CancelCommand = CancelCommand'
+    { _ccInstanceIds :: !(Maybe (List1 Text))
+    , _ccCommandId   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelCommand' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccInstanceIds'
+--
+-- * 'ccCommandId'
+cancelCommand
+    :: Text -- ^ 'ccCommandId'
+    -> CancelCommand
+cancelCommand pCommandId_ =
+    CancelCommand'
+    { _ccInstanceIds = Nothing
+    , _ccCommandId = pCommandId_
+    }
+
+-- | (Optional) A list of instance IDs on which you want to cancel the
+-- command. If not provided, the command is canceled on every instance on
+-- which it was requested.
+ccInstanceIds :: Lens' CancelCommand (Maybe (NonEmpty Text))
+ccInstanceIds = lens _ccInstanceIds (\ s a -> s{_ccInstanceIds = a}) . mapping _List1;
+
+-- | The ID of the command you want to cancel.
+ccCommandId :: Lens' CancelCommand Text
+ccCommandId = lens _ccCommandId (\ s a -> s{_ccCommandId = a});
+
+instance AWSRequest CancelCommand where
+        type Rs CancelCommand = CancelCommandResponse
+        request = postJSON sSM
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CancelCommandResponse' <$> (pure (fromEnum s)))
+
+instance ToHeaders CancelCommand where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.CancelCommand" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CancelCommand where
+        toJSON CancelCommand'{..}
+          = object
+              (catMaybes
+                 [("InstanceIds" .=) <$> _ccInstanceIds,
+                  Just ("CommandId" .= _ccCommandId)])
+
+instance ToPath CancelCommand where
+        toPath = const "/"
+
+instance ToQuery CancelCommand where
+        toQuery = const mempty
+
+-- | Whether or not the command was successfully canceled. There is no
+-- guarantee that a request can be canceled.
+--
+-- /See:/ 'cancelCommandResponse' smart constructor.
+newtype CancelCommandResponse = CancelCommandResponse'
+    { _ccrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelCommandResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccrsResponseStatus'
+cancelCommandResponse
+    :: Int -- ^ 'ccrsResponseStatus'
+    -> CancelCommandResponse
+cancelCommandResponse pResponseStatus_ =
+    CancelCommandResponse'
+    { _ccrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+ccrsResponseStatus :: Lens' CancelCommandResponse Int
+ccrsResponseStatus = lens _ccrsResponseStatus (\ s a -> s{_ccrsResponseStatus = a});
diff --git a/gen/Network/AWS/SSM/CreateAssociation.hs b/gen/Network/AWS/SSM/CreateAssociation.hs
--- a/gen/Network/AWS/SSM/CreateAssociation.hs
+++ b/gen/Network/AWS/SSM/CreateAssociation.hs
@@ -18,16 +18,15 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Associates the specified configuration document with the specified
--- instance.
+-- Associates the specified SSM document with the specified instance.
 --
--- When you associate a configuration document with an instance, the
--- configuration agent on the instance processes the configuration document
--- and configures the instance as specified.
+-- When you associate an SSM document with an instance, the configuration
+-- agent on the instance processes the document and configures the instance
+-- as specified.
 --
--- If you associate a configuration document with an instance that already
--- has an associated configuration document, we replace the current
--- configuration document with the new configuration document.
+-- If you associate a document with an instance that already has an
+-- associated document, the system throws the AssociationAlreadyExists
+-- exception.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateAssociation.html AWS API Reference> for CreateAssociation.
 module Network.AWS.SSM.CreateAssociation
@@ -36,6 +35,7 @@
       createAssociation
     , CreateAssociation
     -- * Request Lenses
+    , caParameters
     , caName
     , caInstanceId
 
@@ -55,7 +55,8 @@
 
 -- | /See:/ 'createAssociation' smart constructor.
 data CreateAssociation = CreateAssociation'
-    { _caName       :: !Text
+    { _caParameters :: !(Maybe (Map Text [Text]))
+    , _caName       :: !Text
     , _caInstanceId :: !Text
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
@@ -63,6 +64,8 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'caParameters'
+--
 -- * 'caName'
 --
 -- * 'caInstanceId'
@@ -72,15 +75,20 @@
     -> CreateAssociation
 createAssociation pName_ pInstanceId_ =
     CreateAssociation'
-    { _caName = pName_
+    { _caParameters = Nothing
+    , _caName = pName_
     , _caInstanceId = pInstanceId_
     }
 
--- | The name of the configuration document.
+-- | The parameters for the document’s runtime configuration.
+caParameters :: Lens' CreateAssociation (HashMap Text [Text])
+caParameters = lens _caParameters (\ s a -> s{_caParameters = a}) . _Default . _Map;
+
+-- | The name of the SSM document.
 caName :: Lens' CreateAssociation Text
 caName = lens _caName (\ s a -> s{_caName = a});
 
--- | The ID of the instance.
+-- | The instance ID.
 caInstanceId :: Lens' CreateAssociation Text
 caInstanceId = lens _caInstanceId (\ s a -> s{_caInstanceId = a});
 
@@ -107,7 +115,8 @@
         toJSON CreateAssociation'{..}
           = object
               (catMaybes
-                 [Just ("Name" .= _caName),
+                 [("Parameters" .=) <$> _caParameters,
+                  Just ("Name" .= _caName),
                   Just ("InstanceId" .= _caInstanceId)])
 
 instance ToPath CreateAssociation where
diff --git a/gen/Network/AWS/SSM/CreateAssociationBatch.hs b/gen/Network/AWS/SSM/CreateAssociationBatch.hs
--- a/gen/Network/AWS/SSM/CreateAssociationBatch.hs
+++ b/gen/Network/AWS/SSM/CreateAssociationBatch.hs
@@ -18,16 +18,15 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Associates the specified configuration documents with the specified
--- instances.
+-- Associates the specified SSM document with the specified instances.
 --
--- When you associate a configuration document with an instance, the
--- configuration agent on the instance processes the configuration document
--- and configures the instance as specified.
+-- When you associate an SSM document with an instance, the configuration
+-- agent on the instance processes the document and configures the instance
+-- as specified.
 --
--- If you associate a configuration document with an instance that already
--- has an associated configuration document, we replace the current
--- configuration document with the new configuration document.
+-- If you associate a document with an instance that already has an
+-- associated document, the system throws the AssociationAlreadyExists
+-- exception.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateAssociationBatch.html AWS API Reference> for CreateAssociationBatch.
 module Network.AWS.SSM.CreateAssociationBatch
diff --git a/gen/Network/AWS/SSM/CreateDocument.hs b/gen/Network/AWS/SSM/CreateDocument.hs
--- a/gen/Network/AWS/SSM/CreateDocument.hs
+++ b/gen/Network/AWS/SSM/CreateDocument.hs
@@ -18,10 +18,10 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates a configuration document.
+-- Creates an SSM document.
 --
--- After you create a configuration document, you can use CreateAssociation
--- to associate it with one or more running instances.
+-- After you create an SSM document, you can use CreateAssociation to
+-- associate it with one or more running instances.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_CreateDocument.html AWS API Reference> for CreateDocument.
 module Network.AWS.SSM.CreateDocument
@@ -70,13 +70,13 @@
     , _cdName = pName_
     }
 
--- | A valid JSON file. For more information about the contents of this file,
--- see
--- <http://docs.aws.amazon.com/ssm/latest/APIReference/aws-ssm-document.html Configuration Document>.
+-- | A valid JSON string. For more information about the contents of this
+-- string, see
+-- <http://docs.aws.amazon.com/ssm/latest/APIReference/aws-ssm-document.html SSM Document>.
 cdContent :: Lens' CreateDocument Text
 cdContent = lens _cdContent (\ s a -> s{_cdContent = a});
 
--- | A name for the configuration document.
+-- | A name for the SSM document.
 cdName :: Lens' CreateDocument Text
 cdName = lens _cdName (\ s a -> s{_cdName = a});
 
@@ -134,7 +134,7 @@
     , _cdrsResponseStatus = pResponseStatus_
     }
 
--- | Information about the configuration document.
+-- | Information about the SSM document.
 cdrsDocumentDescription :: Lens' CreateDocumentResponse (Maybe DocumentDescription)
 cdrsDocumentDescription = lens _cdrsDocumentDescription (\ s a -> s{_cdrsDocumentDescription = a});
 
diff --git a/gen/Network/AWS/SSM/DeleteAssociation.hs b/gen/Network/AWS/SSM/DeleteAssociation.hs
--- a/gen/Network/AWS/SSM/DeleteAssociation.hs
+++ b/gen/Network/AWS/SSM/DeleteAssociation.hs
@@ -18,14 +18,13 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Disassociates the specified configuration document from the specified
--- instance.
+-- Disassociates the specified SSM document from the specified instance.
 --
--- When you disassociate a configuration document from an instance, it does
--- not change the configuration of the instance. To change the
--- configuration state of an instance after you disassociate a
--- configuration document, you must create a new configuration document
--- with the desired configuration and associate it with the instance.
+-- When you disassociate an SSM document from an instance, it does not
+-- change the configuration of the instance. To change the configuration
+-- state of an instance after you disassociate a document, you must create
+-- a new document with the desired configuration and associate it with the
+-- instance.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DeleteAssociation.html AWS API Reference> for DeleteAssociation.
 module Network.AWS.SSM.DeleteAssociation
@@ -73,7 +72,7 @@
     , _delInstanceId = pInstanceId_
     }
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 delName :: Lens' DeleteAssociation Text
 delName = lens _delName (\ s a -> s{_delName = a});
 
diff --git a/gen/Network/AWS/SSM/DeleteDocument.hs b/gen/Network/AWS/SSM/DeleteDocument.hs
--- a/gen/Network/AWS/SSM/DeleteDocument.hs
+++ b/gen/Network/AWS/SSM/DeleteDocument.hs
@@ -18,10 +18,11 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Deletes the specified configuration document.
+-- Deletes the SSM document and all instance associations to the document.
 --
--- You must use DeleteAssociation to disassociate all instances that are
--- associated with the configuration document before you can delete it.
+-- Before you delete the SSM document, we recommend that you use
+-- DeleteAssociation to disassociate all instances that are associated with
+-- the document.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DeleteDocument.html AWS API Reference> for DeleteDocument.
 module Network.AWS.SSM.DeleteDocument
@@ -63,7 +64,7 @@
     { _dddName = pName_
     }
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 dddName :: Lens' DeleteDocument Text
 dddName = lens _dddName (\ s a -> s{_dddName = a});
 
diff --git a/gen/Network/AWS/SSM/DescribeAssociation.hs b/gen/Network/AWS/SSM/DescribeAssociation.hs
--- a/gen/Network/AWS/SSM/DescribeAssociation.hs
+++ b/gen/Network/AWS/SSM/DescribeAssociation.hs
@@ -18,8 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the associations for the specified configuration document or
--- instance.
+-- Describes the associations for the specified SSM document or instance.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DescribeAssociation.html AWS API Reference> for DescribeAssociation.
 module Network.AWS.SSM.DescribeAssociation
@@ -68,7 +67,7 @@
     , _daInstanceId = pInstanceId_
     }
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 daName :: Lens' DescribeAssociation Text
 daName = lens _daName (\ s a -> s{_daName = a});
 
diff --git a/gen/Network/AWS/SSM/DescribeDocument.hs b/gen/Network/AWS/SSM/DescribeDocument.hs
--- a/gen/Network/AWS/SSM/DescribeDocument.hs
+++ b/gen/Network/AWS/SSM/DescribeDocument.hs
@@ -18,7 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the specified configuration document.
+-- Describes the specified SSM document.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DescribeDocument.html AWS API Reference> for DescribeDocument.
 module Network.AWS.SSM.DescribeDocument
@@ -61,7 +61,7 @@
     { _ddName = pName_
     }
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 ddName :: Lens' DescribeDocument Text
 ddName = lens _ddName (\ s a -> s{_ddName = a});
 
@@ -115,7 +115,7 @@
     , _drsResponseStatus = pResponseStatus_
     }
 
--- | Information about the configuration document.
+-- | Information about the SSM document.
 drsDocument :: Lens' DescribeDocumentResponse (Maybe DocumentDescription)
 drsDocument = lens _drsDocument (\ s a -> s{_drsDocument = a});
 
diff --git a/gen/Network/AWS/SSM/DescribeInstanceInformation.hs b/gen/Network/AWS/SSM/DescribeInstanceInformation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SSM/DescribeInstanceInformation.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SSM.DescribeInstanceInformation
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your instances. You can use this to get
+-- information about instances like the operating system platform, the SSM
+-- agent version, status etc. If you specify one or more instance IDs, it
+-- returns information for those instances. If you do not specify instance
+-- IDs, it returns information for all your instances. If you specify an
+-- instance ID that is not valid or an instance that you do not own, you
+-- receive an error.
+--
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_DescribeInstanceInformation.html AWS API Reference> for DescribeInstanceInformation.
+module Network.AWS.SSM.DescribeInstanceInformation
+    (
+    -- * Creating a Request
+      describeInstanceInformation
+    , DescribeInstanceInformation
+    -- * Request Lenses
+    , diiInstanceInformationFilterList
+    , diiNextToken
+    , diiMaxResults
+
+    -- * Destructuring the Response
+    , describeInstanceInformationResponse
+    , DescribeInstanceInformationResponse
+    -- * Response Lenses
+    , diirsNextToken
+    , diirsInstanceInformationList
+    , diirsResponseStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
+
+-- | /See:/ 'describeInstanceInformation' smart constructor.
+data DescribeInstanceInformation = DescribeInstanceInformation'
+    { _diiInstanceInformationFilterList :: !(Maybe (List1 InstanceInformationFilter))
+    , _diiNextToken                     :: !(Maybe Text)
+    , _diiMaxResults                    :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeInstanceInformation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diiInstanceInformationFilterList'
+--
+-- * 'diiNextToken'
+--
+-- * 'diiMaxResults'
+describeInstanceInformation
+    :: DescribeInstanceInformation
+describeInstanceInformation =
+    DescribeInstanceInformation'
+    { _diiInstanceInformationFilterList = Nothing
+    , _diiNextToken = Nothing
+    , _diiMaxResults = Nothing
+    }
+
+-- | One or more filters. Use a filter to return a more specific list of
+-- instances.
+diiInstanceInformationFilterList :: Lens' DescribeInstanceInformation (Maybe (NonEmpty InstanceInformationFilter))
+diiInstanceInformationFilterList = lens _diiInstanceInformationFilterList (\ s a -> s{_diiInstanceInformationFilterList = a}) . mapping _List1;
+
+-- | The token for the next set of items to return. (You received this token
+-- from a previous call.)
+diiNextToken :: Lens' DescribeInstanceInformation (Maybe Text)
+diiNextToken = lens _diiNextToken (\ s a -> s{_diiNextToken = a});
+
+-- | The maximum number of items to return for this call. The call also
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+diiMaxResults :: Lens' DescribeInstanceInformation (Maybe Natural)
+diiMaxResults = lens _diiMaxResults (\ s a -> s{_diiMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest DescribeInstanceInformation where
+        type Rs DescribeInstanceInformation =
+             DescribeInstanceInformationResponse
+        request = postJSON sSM
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeInstanceInformationResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "InstanceInformationList" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders DescribeInstanceInformation where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.DescribeInstanceInformation" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeInstanceInformation where
+        toJSON DescribeInstanceInformation'{..}
+          = object
+              (catMaybes
+                 [("InstanceInformationFilterList" .=) <$>
+                    _diiInstanceInformationFilterList,
+                  ("NextToken" .=) <$> _diiNextToken,
+                  ("MaxResults" .=) <$> _diiMaxResults])
+
+instance ToPath DescribeInstanceInformation where
+        toPath = const "/"
+
+instance ToQuery DescribeInstanceInformation where
+        toQuery = const mempty
+
+-- | /See:/ 'describeInstanceInformationResponse' smart constructor.
+data DescribeInstanceInformationResponse = DescribeInstanceInformationResponse'
+    { _diirsNextToken               :: !(Maybe Text)
+    , _diirsInstanceInformationList :: !(Maybe [InstanceInformation])
+    , _diirsResponseStatus          :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeInstanceInformationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diirsNextToken'
+--
+-- * 'diirsInstanceInformationList'
+--
+-- * 'diirsResponseStatus'
+describeInstanceInformationResponse
+    :: Int -- ^ 'diirsResponseStatus'
+    -> DescribeInstanceInformationResponse
+describeInstanceInformationResponse pResponseStatus_ =
+    DescribeInstanceInformationResponse'
+    { _diirsNextToken = Nothing
+    , _diirsInstanceInformationList = Nothing
+    , _diirsResponseStatus = pResponseStatus_
+    }
+
+-- | The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+diirsNextToken :: Lens' DescribeInstanceInformationResponse (Maybe Text)
+diirsNextToken = lens _diirsNextToken (\ s a -> s{_diirsNextToken = a});
+
+-- | The instance information list.
+diirsInstanceInformationList :: Lens' DescribeInstanceInformationResponse [InstanceInformation]
+diirsInstanceInformationList = lens _diirsInstanceInformationList (\ s a -> s{_diirsInstanceInformationList = a}) . _Default . _Coerce;
+
+-- | The response status code.
+diirsResponseStatus :: Lens' DescribeInstanceInformationResponse Int
+diirsResponseStatus = lens _diirsResponseStatus (\ s a -> s{_diirsResponseStatus = a});
diff --git a/gen/Network/AWS/SSM/GetDocument.hs b/gen/Network/AWS/SSM/GetDocument.hs
--- a/gen/Network/AWS/SSM/GetDocument.hs
+++ b/gen/Network/AWS/SSM/GetDocument.hs
@@ -18,7 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Gets the contents of the specified configuration document.
+-- Gets the contents of the specified SSM document.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_GetDocument.html AWS API Reference> for GetDocument.
 module Network.AWS.SSM.GetDocument
@@ -62,7 +62,7 @@
     { _gdName = pName_
     }
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 gdName :: Lens' GetDocument Text
 gdName = lens _gdName (\ s a -> s{_gdName = a});
 
@@ -121,11 +121,11 @@
     , _gdrsResponseStatus = pResponseStatus_
     }
 
--- | The contents of the configuration document.
+-- | The contents of the SSM document.
 gdrsContent :: Lens' GetDocumentResponse (Maybe Text)
 gdrsContent = lens _gdrsContent (\ s a -> s{_gdrsContent = a});
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 gdrsName :: Lens' GetDocumentResponse (Maybe Text)
 gdrsName = lens _gdrsName (\ s a -> s{_gdrsName = a});
 
diff --git a/gen/Network/AWS/SSM/ListAssociations.hs b/gen/Network/AWS/SSM/ListAssociations.hs
--- a/gen/Network/AWS/SSM/ListAssociations.hs
+++ b/gen/Network/AWS/SSM/ListAssociations.hs
@@ -18,8 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Lists the associations for the specified configuration document or
--- instance.
+-- Lists the associations for the specified SSM document or instance.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_ListAssociations.html AWS API Reference> for ListAssociations.
 module Network.AWS.SSM.ListAssociations
diff --git a/gen/Network/AWS/SSM/ListCommandInvocations.hs b/gen/Network/AWS/SSM/ListCommandInvocations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SSM/ListCommandInvocations.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SSM.ListCommandInvocations
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- An invocation is copy of a command sent to a specific instance. A
+-- command can apply to one or more instances. A command invocation applies
+-- to one instance. For example, if a user executes SendCommand against
+-- three instances, then a command invocation is created for each requested
+-- instance ID. ListCommandInvocations provide status about command
+-- execution.
+--
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_ListCommandInvocations.html AWS API Reference> for ListCommandInvocations.
+module Network.AWS.SSM.ListCommandInvocations
+    (
+    -- * Creating a Request
+      listCommandInvocations
+    , ListCommandInvocations
+    -- * Request Lenses
+    , lciInstanceId
+    , lciFilters
+    , lciNextToken
+    , lciCommandId
+    , lciDetails
+    , lciMaxResults
+
+    -- * Destructuring the Response
+    , listCommandInvocationsResponse
+    , ListCommandInvocationsResponse
+    -- * Response Lenses
+    , lcirsNextToken
+    , lcirsCommandInvocations
+    , lcirsResponseStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
+
+-- | /See:/ 'listCommandInvocations' smart constructor.
+data ListCommandInvocations = ListCommandInvocations'
+    { _lciInstanceId :: !(Maybe Text)
+    , _lciFilters    :: !(Maybe (List1 CommandFilter))
+    , _lciNextToken  :: !(Maybe Text)
+    , _lciCommandId  :: !(Maybe Text)
+    , _lciDetails    :: !(Maybe Bool)
+    , _lciMaxResults :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCommandInvocations' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lciInstanceId'
+--
+-- * 'lciFilters'
+--
+-- * 'lciNextToken'
+--
+-- * 'lciCommandId'
+--
+-- * 'lciDetails'
+--
+-- * 'lciMaxResults'
+listCommandInvocations
+    :: ListCommandInvocations
+listCommandInvocations =
+    ListCommandInvocations'
+    { _lciInstanceId = Nothing
+    , _lciFilters = Nothing
+    , _lciNextToken = Nothing
+    , _lciCommandId = Nothing
+    , _lciDetails = Nothing
+    , _lciMaxResults = Nothing
+    }
+
+-- | (Optional) The command execution details for a specific instance ID.
+lciInstanceId :: Lens' ListCommandInvocations (Maybe Text)
+lciInstanceId = lens _lciInstanceId (\ s a -> s{_lciInstanceId = a});
+
+-- | (Optional) One or more filters. Use a filter to return a more specific
+-- list of results.
+lciFilters :: Lens' ListCommandInvocations (Maybe (NonEmpty CommandFilter))
+lciFilters = lens _lciFilters (\ s a -> s{_lciFilters = a}) . mapping _List1;
+
+-- | (Optional) The token for the next set of items to return. (You received
+-- this token from a previous call.)
+lciNextToken :: Lens' ListCommandInvocations (Maybe Text)
+lciNextToken = lens _lciNextToken (\ s a -> s{_lciNextToken = a});
+
+-- | (Optional) The invocations for a specific command ID.
+lciCommandId :: Lens' ListCommandInvocations (Maybe Text)
+lciCommandId = lens _lciCommandId (\ s a -> s{_lciCommandId = a});
+
+-- | (Optional) If set this returns the response of the command executions.
+-- By default this is set to False.
+lciDetails :: Lens' ListCommandInvocations (Maybe Bool)
+lciDetails = lens _lciDetails (\ s a -> s{_lciDetails = a});
+
+-- | (Optional) The maximum number of items to return for this call. The call
+-- also returns a token that you can specify in a subsequent call to get
+-- the next set of results.
+lciMaxResults :: Lens' ListCommandInvocations (Maybe Natural)
+lciMaxResults = lens _lciMaxResults (\ s a -> s{_lciMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest ListCommandInvocations where
+        type Rs ListCommandInvocations =
+             ListCommandInvocationsResponse
+        request = postJSON sSM
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListCommandInvocationsResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "CommandInvocations" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListCommandInvocations where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.ListCommandInvocations" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListCommandInvocations where
+        toJSON ListCommandInvocations'{..}
+          = object
+              (catMaybes
+                 [("InstanceId" .=) <$> _lciInstanceId,
+                  ("Filters" .=) <$> _lciFilters,
+                  ("NextToken" .=) <$> _lciNextToken,
+                  ("CommandId" .=) <$> _lciCommandId,
+                  ("Details" .=) <$> _lciDetails,
+                  ("MaxResults" .=) <$> _lciMaxResults])
+
+instance ToPath ListCommandInvocations where
+        toPath = const "/"
+
+instance ToQuery ListCommandInvocations where
+        toQuery = const mempty
+
+-- | /See:/ 'listCommandInvocationsResponse' smart constructor.
+data ListCommandInvocationsResponse = ListCommandInvocationsResponse'
+    { _lcirsNextToken          :: !(Maybe Text)
+    , _lcirsCommandInvocations :: !(Maybe [CommandInvocation])
+    , _lcirsResponseStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCommandInvocationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcirsNextToken'
+--
+-- * 'lcirsCommandInvocations'
+--
+-- * 'lcirsResponseStatus'
+listCommandInvocationsResponse
+    :: Int -- ^ 'lcirsResponseStatus'
+    -> ListCommandInvocationsResponse
+listCommandInvocationsResponse pResponseStatus_ =
+    ListCommandInvocationsResponse'
+    { _lcirsNextToken = Nothing
+    , _lcirsCommandInvocations = Nothing
+    , _lcirsResponseStatus = pResponseStatus_
+    }
+
+-- | (Optional) The token for the next set of items to return. (You received
+-- this token from a previous call.)
+lcirsNextToken :: Lens' ListCommandInvocationsResponse (Maybe Text)
+lcirsNextToken = lens _lcirsNextToken (\ s a -> s{_lcirsNextToken = a});
+
+-- | (Optional) A list of all invocations.
+lcirsCommandInvocations :: Lens' ListCommandInvocationsResponse [CommandInvocation]
+lcirsCommandInvocations = lens _lcirsCommandInvocations (\ s a -> s{_lcirsCommandInvocations = a}) . _Default . _Coerce;
+
+-- | The response status code.
+lcirsResponseStatus :: Lens' ListCommandInvocationsResponse Int
+lcirsResponseStatus = lens _lcirsResponseStatus (\ s a -> s{_lcirsResponseStatus = a});
diff --git a/gen/Network/AWS/SSM/ListCommands.hs b/gen/Network/AWS/SSM/ListCommands.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SSM/ListCommands.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SSM.ListCommands
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the commands requested by users of the AWS account.
+--
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_ListCommands.html AWS API Reference> for ListCommands.
+module Network.AWS.SSM.ListCommands
+    (
+    -- * Creating a Request
+      listCommands
+    , ListCommands
+    -- * Request Lenses
+    , lcInstanceId
+    , lcFilters
+    , lcNextToken
+    , lcCommandId
+    , lcMaxResults
+
+    -- * Destructuring the Response
+    , listCommandsResponse
+    , ListCommandsResponse
+    -- * Response Lenses
+    , lcrsCommands
+    , lcrsNextToken
+    , lcrsResponseStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
+
+-- | /See:/ 'listCommands' smart constructor.
+data ListCommands = ListCommands'
+    { _lcInstanceId :: !(Maybe Text)
+    , _lcFilters    :: !(Maybe (List1 CommandFilter))
+    , _lcNextToken  :: !(Maybe Text)
+    , _lcCommandId  :: !(Maybe Text)
+    , _lcMaxResults :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCommands' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcInstanceId'
+--
+-- * 'lcFilters'
+--
+-- * 'lcNextToken'
+--
+-- * 'lcCommandId'
+--
+-- * 'lcMaxResults'
+listCommands
+    :: ListCommands
+listCommands =
+    ListCommands'
+    { _lcInstanceId = Nothing
+    , _lcFilters = Nothing
+    , _lcNextToken = Nothing
+    , _lcCommandId = Nothing
+    , _lcMaxResults = Nothing
+    }
+
+-- | (Optional) Lists commands issued against this instance ID.
+lcInstanceId :: Lens' ListCommands (Maybe Text)
+lcInstanceId = lens _lcInstanceId (\ s a -> s{_lcInstanceId = a});
+
+-- | (Optional) One or more filters. Use a filter to return a more specific
+-- list of results.
+lcFilters :: Lens' ListCommands (Maybe (NonEmpty CommandFilter))
+lcFilters = lens _lcFilters (\ s a -> s{_lcFilters = a}) . mapping _List1;
+
+-- | (Optional) The token for the next set of items to return. (You received
+-- this token from a previous call.)
+lcNextToken :: Lens' ListCommands (Maybe Text)
+lcNextToken = lens _lcNextToken (\ s a -> s{_lcNextToken = a});
+
+-- | (Optional) If provided, lists only the specified command.
+lcCommandId :: Lens' ListCommands (Maybe Text)
+lcCommandId = lens _lcCommandId (\ s a -> s{_lcCommandId = a});
+
+-- | (Optional) The maximum number of items to return for this call. The call
+-- also returns a token that you can specify in a subsequent call to get
+-- the next set of results.
+lcMaxResults :: Lens' ListCommands (Maybe Natural)
+lcMaxResults = lens _lcMaxResults (\ s a -> s{_lcMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest ListCommands where
+        type Rs ListCommands = ListCommandsResponse
+        request = postJSON sSM
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListCommandsResponse' <$>
+                   (x .?> "Commands" .!@ mempty) <*> (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListCommands where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.ListCommands" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListCommands where
+        toJSON ListCommands'{..}
+          = object
+              (catMaybes
+                 [("InstanceId" .=) <$> _lcInstanceId,
+                  ("Filters" .=) <$> _lcFilters,
+                  ("NextToken" .=) <$> _lcNextToken,
+                  ("CommandId" .=) <$> _lcCommandId,
+                  ("MaxResults" .=) <$> _lcMaxResults])
+
+instance ToPath ListCommands where
+        toPath = const "/"
+
+instance ToQuery ListCommands where
+        toQuery = const mempty
+
+-- | /See:/ 'listCommandsResponse' smart constructor.
+data ListCommandsResponse = ListCommandsResponse'
+    { _lcrsCommands       :: !(Maybe [Command])
+    , _lcrsNextToken      :: !(Maybe Text)
+    , _lcrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListCommandsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcrsCommands'
+--
+-- * 'lcrsNextToken'
+--
+-- * 'lcrsResponseStatus'
+listCommandsResponse
+    :: Int -- ^ 'lcrsResponseStatus'
+    -> ListCommandsResponse
+listCommandsResponse pResponseStatus_ =
+    ListCommandsResponse'
+    { _lcrsCommands = Nothing
+    , _lcrsNextToken = Nothing
+    , _lcrsResponseStatus = pResponseStatus_
+    }
+
+-- | (Optional) The list of commands requested by the user.
+lcrsCommands :: Lens' ListCommandsResponse [Command]
+lcrsCommands = lens _lcrsCommands (\ s a -> s{_lcrsCommands = a}) . _Default . _Coerce;
+
+-- | (Optional) The token for the next set of items to return. (You received
+-- this token from a previous call.)
+lcrsNextToken :: Lens' ListCommandsResponse (Maybe Text)
+lcrsNextToken = lens _lcrsNextToken (\ s a -> s{_lcrsNextToken = a});
+
+-- | The response status code.
+lcrsResponseStatus :: Lens' ListCommandsResponse Int
+lcrsResponseStatus = lens _lcrsResponseStatus (\ s a -> s{_lcrsResponseStatus = a});
diff --git a/gen/Network/AWS/SSM/ListDocuments.hs b/gen/Network/AWS/SSM/ListDocuments.hs
--- a/gen/Network/AWS/SSM/ListDocuments.hs
+++ b/gen/Network/AWS/SSM/ListDocuments.hs
@@ -18,7 +18,7 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes one or more of your configuration documents.
+-- Describes one or more of your SSM documents.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_ListDocuments.html AWS API Reference> for ListDocuments.
 module Network.AWS.SSM.ListDocuments
@@ -147,7 +147,7 @@
     , _ldrsResponseStatus = pResponseStatus_
     }
 
--- | The names of the configuration documents.
+-- | The names of the SSM documents.
 ldrsDocumentIdentifiers :: Lens' ListDocumentsResponse [DocumentIdentifier]
 ldrsDocumentIdentifiers = lens _ldrsDocumentIdentifiers (\ s a -> s{_ldrsDocumentIdentifiers = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/SSM/SendCommand.hs b/gen/Network/AWS/SSM/SendCommand.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SSM/SendCommand.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SSM.SendCommand
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Executes commands on one or more remote instances.
+--
+-- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_SendCommand.html AWS API Reference> for SendCommand.
+module Network.AWS.SSM.SendCommand
+    (
+    -- * Creating a Request
+      sendCommand
+    , SendCommand
+    -- * Request Lenses
+    , scOutputS3KeyPrefix
+    , scParameters
+    , scTimeoutSeconds
+    , scComment
+    , scOutputS3BucketName
+    , scInstanceIds
+    , scDocumentName
+
+    -- * Destructuring the Response
+    , sendCommandResponse
+    , SendCommandResponse
+    -- * Response Lenses
+    , scrsCommand
+    , scrsResponseStatus
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SSM.Types
+import           Network.AWS.SSM.Types.Product
+
+-- | /See:/ 'sendCommand' smart constructor.
+data SendCommand = SendCommand'
+    { _scOutputS3KeyPrefix  :: !(Maybe Text)
+    , _scParameters         :: !(Maybe (Map Text [Text]))
+    , _scTimeoutSeconds     :: !(Maybe Nat)
+    , _scComment            :: !(Maybe Text)
+    , _scOutputS3BucketName :: !(Maybe Text)
+    , _scInstanceIds        :: !(List1 Text)
+    , _scDocumentName       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendCommand' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scOutputS3KeyPrefix'
+--
+-- * 'scParameters'
+--
+-- * 'scTimeoutSeconds'
+--
+-- * 'scComment'
+--
+-- * 'scOutputS3BucketName'
+--
+-- * 'scInstanceIds'
+--
+-- * 'scDocumentName'
+sendCommand
+    :: NonEmpty Text -- ^ 'scInstanceIds'
+    -> Text -- ^ 'scDocumentName'
+    -> SendCommand
+sendCommand pInstanceIds_ pDocumentName_ =
+    SendCommand'
+    { _scOutputS3KeyPrefix = Nothing
+    , _scParameters = Nothing
+    , _scTimeoutSeconds = Nothing
+    , _scComment = Nothing
+    , _scOutputS3BucketName = Nothing
+    , _scInstanceIds = _List1 # pInstanceIds_
+    , _scDocumentName = pDocumentName_
+    }
+
+-- | The directory structure within the S3 bucket where the responses should
+-- be stored.
+scOutputS3KeyPrefix :: Lens' SendCommand (Maybe Text)
+scOutputS3KeyPrefix = lens _scOutputS3KeyPrefix (\ s a -> s{_scOutputS3KeyPrefix = a});
+
+-- | The required and optional parameters specified in the SSM document being
+-- executed.
+scParameters :: Lens' SendCommand (HashMap Text [Text])
+scParameters = lens _scParameters (\ s a -> s{_scParameters = a}) . _Default . _Map;
+
+-- | If this time is reached and the command has not already started
+-- executing, it will not execute.
+scTimeoutSeconds :: Lens' SendCommand (Maybe Natural)
+scTimeoutSeconds = lens _scTimeoutSeconds (\ s a -> s{_scTimeoutSeconds = a}) . mapping _Nat;
+
+-- | User-specified information about the command, such as a brief
+-- description of what the command should do.
+scComment :: Lens' SendCommand (Maybe Text)
+scComment = lens _scComment (\ s a -> s{_scComment = a});
+
+-- | The name of the S3 bucket where command execution responses should be
+-- stored.
+scOutputS3BucketName :: Lens' SendCommand (Maybe Text)
+scOutputS3BucketName = lens _scOutputS3BucketName (\ s a -> s{_scOutputS3BucketName = a});
+
+-- | Required. The instance IDs where the command should execute.
+scInstanceIds :: Lens' SendCommand (NonEmpty Text)
+scInstanceIds = lens _scInstanceIds (\ s a -> s{_scInstanceIds = a}) . _List1;
+
+-- | Required. The name of the SSM document to execute. This can be an SSM
+-- public document or a custom document.
+scDocumentName :: Lens' SendCommand Text
+scDocumentName = lens _scDocumentName (\ s a -> s{_scDocumentName = a});
+
+instance AWSRequest SendCommand where
+        type Rs SendCommand = SendCommandResponse
+        request = postJSON sSM
+        response
+          = receiveJSON
+              (\ s h x ->
+                 SendCommandResponse' <$>
+                   (x .?> "Command") <*> (pure (fromEnum s)))
+
+instance ToHeaders SendCommand where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonSSM.SendCommand" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON SendCommand where
+        toJSON SendCommand'{..}
+          = object
+              (catMaybes
+                 [("OutputS3KeyPrefix" .=) <$> _scOutputS3KeyPrefix,
+                  ("Parameters" .=) <$> _scParameters,
+                  ("TimeoutSeconds" .=) <$> _scTimeoutSeconds,
+                  ("Comment" .=) <$> _scComment,
+                  ("OutputS3BucketName" .=) <$> _scOutputS3BucketName,
+                  Just ("InstanceIds" .= _scInstanceIds),
+                  Just ("DocumentName" .= _scDocumentName)])
+
+instance ToPath SendCommand where
+        toPath = const "/"
+
+instance ToQuery SendCommand where
+        toQuery = const mempty
+
+-- | /See:/ 'sendCommandResponse' smart constructor.
+data SendCommandResponse = SendCommandResponse'
+    { _scrsCommand        :: !(Maybe Command)
+    , _scrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendCommandResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scrsCommand'
+--
+-- * 'scrsResponseStatus'
+sendCommandResponse
+    :: Int -- ^ 'scrsResponseStatus'
+    -> SendCommandResponse
+sendCommandResponse pResponseStatus_ =
+    SendCommandResponse'
+    { _scrsCommand = Nothing
+    , _scrsResponseStatus = pResponseStatus_
+    }
+
+-- | The request as it was received by SSM. Also provides the command ID
+-- which can be used future references to this request.
+scrsCommand :: Lens' SendCommandResponse (Maybe Command)
+scrsCommand = lens _scrsCommand (\ s a -> s{_scrsCommand = a});
+
+-- | The response status code.
+scrsResponseStatus :: Lens' SendCommandResponse Int
+scrsResponseStatus = lens _scrsResponseStatus (\ s a -> s{_scrsResponseStatus = a});
diff --git a/gen/Network/AWS/SSM/Types.hs b/gen/Network/AWS/SSM/Types.hs
--- a/gen/Network/AWS/SSM/Types.hs
+++ b/gen/Network/AWS/SSM/Types.hs
@@ -16,12 +16,17 @@
       sSM
 
     -- * Errors
+    , _UnsupportedPlatformType
     , _AssociatedInstances
     , _InvalidInstanceId
     , _StatusUnchanged
     , _InvalidNextToken
+    , _InvalidOutputFolder
+    , _InvalidCommandId
     , _DuplicateInstanceId
     , _InvalidDocument
+    , _InvalidFilterKey
+    , _InvalidInstanceInformationFilterValue
     , _AssociationAlreadyExists
     , _InvalidDocumentContent
     , _AssociationLimitExceeded
@@ -29,6 +34,7 @@
     , _InternalServerError
     , _TooManyUpdates
     , _MaxDocumentSizeExceeded
+    , _InvalidParameters
     , _DocumentAlreadyExists
     , _DocumentLimitExceeded
 
@@ -38,15 +44,39 @@
     -- * AssociationStatusName
     , AssociationStatusName (..)
 
+    -- * CommandFilterKey
+    , CommandFilterKey (..)
+
+    -- * CommandInvocationStatus
+    , CommandInvocationStatus (..)
+
+    -- * CommandPluginStatus
+    , CommandPluginStatus (..)
+
+    -- * CommandStatus
+    , CommandStatus (..)
+
     -- * DocumentFilterKey
     , DocumentFilterKey (..)
 
+    -- * DocumentParameterType
+    , DocumentParameterType (..)
+
     -- * DocumentStatus
     , DocumentStatus (..)
 
     -- * Fault
     , Fault (..)
 
+    -- * InstanceInformationFilterKey
+    , InstanceInformationFilterKey (..)
+
+    -- * PingStatus
+    , PingStatus (..)
+
+    -- * PlatformType
+    , PlatformType (..)
+
     -- * Association
     , Association
     , association
@@ -60,6 +90,7 @@
     , adStatus
     , adDate
     , adName
+    , adParameters
 
     -- * AssociationFilter
     , AssociationFilter
@@ -75,19 +106,67 @@
     , asName
     , asMessage
 
+    -- * Command
+    , Command
+    , command
+    , cStatus
+    , cExpiresAfter
+    , cOutputS3KeyPrefix
+    , cDocumentName
+    , cInstanceIds
+    , cCommandId
+    , cParameters
+    , cComment
+    , cOutputS3BucketName
+    , cRequestedDateTime
+
+    -- * CommandFilter
+    , CommandFilter
+    , commandFilter
+    , cfKey
+    , cfValue
+
+    -- * CommandInvocation
+    , CommandInvocation
+    , commandInvocation
+    , ciInstanceId
+    , ciStatus
+    , ciCommandPlugins
+    , ciDocumentName
+    , ciCommandId
+    , ciComment
+    , ciTraceOutput
+    , ciRequestedDateTime
+
+    -- * CommandPlugin
+    , CommandPlugin
+    , commandPlugin
+    , cpStatus
+    , cpResponseStartDateTime
+    , cpOutputS3KeyPrefix
+    , cpResponseCode
+    , cpOutput
+    , cpName
+    , cpOutputS3BucketName
+    , cpResponseFinishDateTime
+
     -- * CreateAssociationBatchRequestEntry
     , CreateAssociationBatchRequestEntry
     , createAssociationBatchRequestEntry
     , cabreInstanceId
     , cabreName
+    , cabreParameters
 
     -- * DocumentDescription
     , DocumentDescription
     , documentDescription
     , dStatus
     , dSha1
+    , dPlatformTypes
     , dCreatedDate
     , dName
+    , dParameters
+    , dDescription
 
     -- * DocumentFilter
     , DocumentFilter
@@ -98,14 +177,41 @@
     -- * DocumentIdentifier
     , DocumentIdentifier
     , documentIdentifier
+    , diPlatformTypes
     , diName
 
+    -- * DocumentParameter
+    , DocumentParameter
+    , documentParameter
+    , dpName
+    , dpDefaultValue
+    , dpType
+    , dpDescription
+
     -- * FailedCreateAssociation
     , FailedCreateAssociation
     , failedCreateAssociation
     , fcaEntry
     , fcaFault
     , fcaMessage
+
+    -- * InstanceInformation
+    , InstanceInformation
+    , instanceInformation
+    , iiInstanceId
+    , iiPingStatus
+    , iiPlatformVersion
+    , iiIsLatestVersion
+    , iiAgentVersion
+    , iiLastPingDateTime
+    , iiPlatformType
+    , iiPlatformName
+
+    -- * InstanceInformationFilter
+    , InstanceInformationFilter
+    , instanceInformationFilter
+    , iifKey
+    , iifValueSet
     ) where
 
 import           Network.AWS.Prelude
@@ -144,13 +250,20 @@
       | has (hasStatus 509) e = Just "limit_exceeded"
       | otherwise = Nothing
 
--- | You must disassociate a configuration document from all instances before
--- you can delete it.
+-- | The document does not support the platform type of the given instance
+-- ID(s).
+_UnsupportedPlatformType :: AsError a => Getting (First ServiceError) a ServiceError
+_UnsupportedPlatformType =
+    _ServiceError . hasStatus 400 . hasCode "UnsupportedPlatformType"
+
+-- | You must disassociate an SSM document from all instances before you can
+-- delete it.
 _AssociatedInstances :: AsError a => Getting (First ServiceError) a ServiceError
 _AssociatedInstances =
     _ServiceError . hasStatus 400 . hasCode "AssociatedInstances"
 
--- | You must specify the ID of a running instance.
+-- | The instance is not in valid state. Valid states are: Running, Pending,
+-- Stopped, Stopping. Invalid states are: Shutting-down and Terminated.
 _InvalidInstanceId :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidInstanceId =
     _ServiceError . hasStatus 404 . hasCode "InvalidInstanceId"
@@ -163,21 +276,40 @@
 _InvalidNextToken :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidNextToken = _ServiceError . hasStatus 400 . hasCode "InvalidNextToken"
 
+-- | The S3 bucket does not exist.
+_InvalidOutputFolder :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidOutputFolder =
+    _ServiceError . hasStatus 400 . hasCode "InvalidOutputFolder"
+
+-- | Prism for InvalidCommandId' errors.
+_InvalidCommandId :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidCommandId = _ServiceError . hasStatus 404 . hasCode "InvalidCommandId"
+
 -- | You cannot specify an instance ID in more than one association.
 _DuplicateInstanceId :: AsError a => Getting (First ServiceError) a ServiceError
 _DuplicateInstanceId =
     _ServiceError . hasStatus 404 . hasCode "DuplicateInstanceId"
 
--- | The configuration document is not valid.
+-- | The specified document does not exist.
 _InvalidDocument :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidDocument = _ServiceError . hasStatus 404 . hasCode "InvalidDocument"
 
+-- | The specified key is not valid.
+_InvalidFilterKey :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidFilterKey = _ServiceError . hasStatus 400 . hasCode "InvalidFilterKey"
+
+-- | The specified filter value is not valid.
+_InvalidInstanceInformationFilterValue :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidInstanceInformationFilterValue =
+    _ServiceError .
+    hasStatus 400 . hasCode "InvalidInstanceInformationFilterValue"
+
 -- | The specified association already exists.
 _AssociationAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
 _AssociationAlreadyExists =
     _ServiceError . hasStatus 400 . hasCode "AssociationAlreadyExists"
 
--- | The content for the configuration document is not valid.
+-- | The content for the SSM document is not valid.
 _InvalidDocumentContent :: AsError a => Getting (First ServiceError) a ServiceError
 _InvalidDocumentContent =
     _ServiceError . hasStatus 400 . hasCode "InvalidDocumentContent"
@@ -202,17 +334,23 @@
 _TooManyUpdates :: AsError a => Getting (First ServiceError) a ServiceError
 _TooManyUpdates = _ServiceError . hasStatus 429 . hasCode "TooManyUpdates"
 
--- | The size limit of a configuration document is 64 KB.
+-- | The size limit of an SSM document is 64 KB.
 _MaxDocumentSizeExceeded :: AsError a => Getting (First ServiceError) a ServiceError
 _MaxDocumentSizeExceeded =
     _ServiceError . hasStatus 400 . hasCode "MaxDocumentSizeExceeded"
 
--- | The specified configuration document already exists.
+-- | You must specify values for all required parameters in the SSM document.
+-- You can only supply values to parameters defined in the SSM document.
+_InvalidParameters :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidParameters =
+    _ServiceError . hasStatus 400 . hasCode "InvalidParameters"
+
+-- | The specified SSM document already exists.
 _DocumentAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
 _DocumentAlreadyExists =
     _ServiceError . hasStatus 400 . hasCode "DocumentAlreadyExists"
 
--- | You can have at most 100 active configuration documents.
+-- | You can have at most 100 active SSM documents.
 _DocumentLimitExceeded :: AsError a => Getting (First ServiceError) a ServiceError
 _DocumentLimitExceeded =
     _ServiceError . hasStatus 400 . hasCode "DocumentLimitExceeded"
diff --git a/gen/Network/AWS/SSM/Types/Product.hs b/gen/Network/AWS/SSM/Types/Product.hs
--- a/gen/Network/AWS/SSM/Types/Product.hs
+++ b/gen/Network/AWS/SSM/Types/Product.hs
@@ -20,7 +20,7 @@
 import           Network.AWS.Prelude
 import           Network.AWS.SSM.Types.Sum
 
--- | Describes an association of a configuration document and an instance.
+-- | Describes an association of an SSM document and an instance.
 --
 -- /See:/ 'association' smart constructor.
 data Association = Association'
@@ -47,7 +47,7 @@
 aInstanceId :: Lens' Association (Maybe Text)
 aInstanceId = lens _aInstanceId (\ s a -> s{_aInstanceId = a});
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 aName :: Lens' Association (Maybe Text)
 aName = lens _aName (\ s a -> s{_aName = a});
 
@@ -58,7 +58,7 @@
                  Association' <$>
                    (x .:? "InstanceId") <*> (x .:? "Name"))
 
--- | Describes an association.
+-- | Describes the parameters for a document.
 --
 -- /See:/ 'associationDescription' smart constructor.
 data AssociationDescription = AssociationDescription'
@@ -66,6 +66,7 @@
     , _adStatus     :: !(Maybe AssociationStatus)
     , _adDate       :: !(Maybe POSIX)
     , _adName       :: !(Maybe Text)
+    , _adParameters :: !(Maybe (Map Text [Text]))
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'AssociationDescription' with the minimum fields required to make a request.
@@ -79,6 +80,8 @@
 -- * 'adDate'
 --
 -- * 'adName'
+--
+-- * 'adParameters'
 associationDescription
     :: AssociationDescription
 associationDescription =
@@ -87,6 +90,7 @@
     , _adStatus = Nothing
     , _adDate = Nothing
     , _adName = Nothing
+    , _adParameters = Nothing
     }
 
 -- | The ID of the instance.
@@ -101,10 +105,14 @@
 adDate :: Lens' AssociationDescription (Maybe UTCTime)
 adDate = lens _adDate (\ s a -> s{_adDate = a}) . mapping _Time;
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 adName :: Lens' AssociationDescription (Maybe Text)
 adName = lens _adName (\ s a -> s{_adName = a});
 
+-- | A description of the parameters for a document.
+adParameters :: Lens' AssociationDescription (HashMap Text [Text])
+adParameters = lens _adParameters (\ s a -> s{_adParameters = a}) . _Default . _Map;
+
 instance FromJSON AssociationDescription where
         parseJSON
           = withObject "AssociationDescription"
@@ -112,7 +120,8 @@
                  AssociationDescription' <$>
                    (x .:? "InstanceId") <*> (x .:? "Status") <*>
                      (x .:? "Date")
-                     <*> (x .:? "Name"))
+                     <*> (x .:? "Name")
+                     <*> (x .:? "Parameters" .!= mempty))
 
 -- | Describes a filter.
 --
@@ -220,12 +229,367 @@
                   Just ("Date" .= _asDate), Just ("Name" .= _asName),
                   Just ("Message" .= _asMessage)])
 
--- | Describes the association of a configuration document and an instance.
+-- | Describes a command request.
 --
+-- /See:/ 'command' smart constructor.
+data Command = Command'
+    { _cStatus             :: !(Maybe CommandStatus)
+    , _cExpiresAfter       :: !(Maybe POSIX)
+    , _cOutputS3KeyPrefix  :: !(Maybe Text)
+    , _cDocumentName       :: !(Maybe Text)
+    , _cInstanceIds        :: !(Maybe (List1 Text))
+    , _cCommandId          :: !(Maybe Text)
+    , _cParameters         :: !(Maybe (Map Text [Text]))
+    , _cComment            :: !(Maybe Text)
+    , _cOutputS3BucketName :: !(Maybe Text)
+    , _cRequestedDateTime  :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Command' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cStatus'
+--
+-- * 'cExpiresAfter'
+--
+-- * 'cOutputS3KeyPrefix'
+--
+-- * 'cDocumentName'
+--
+-- * 'cInstanceIds'
+--
+-- * 'cCommandId'
+--
+-- * 'cParameters'
+--
+-- * 'cComment'
+--
+-- * 'cOutputS3BucketName'
+--
+-- * 'cRequestedDateTime'
+command
+    :: Command
+command =
+    Command'
+    { _cStatus = Nothing
+    , _cExpiresAfter = Nothing
+    , _cOutputS3KeyPrefix = Nothing
+    , _cDocumentName = Nothing
+    , _cInstanceIds = Nothing
+    , _cCommandId = Nothing
+    , _cParameters = Nothing
+    , _cComment = Nothing
+    , _cOutputS3BucketName = Nothing
+    , _cRequestedDateTime = Nothing
+    }
+
+-- | The status of the command.
+cStatus :: Lens' Command (Maybe CommandStatus)
+cStatus = lens _cStatus (\ s a -> s{_cStatus = a});
+
+-- | If this time is reached and the command has not already started
+-- executing, it will not execute. Calculated based on the ExpiresAfter
+-- user input provided as part of the SendCommand API.
+cExpiresAfter :: Lens' Command (Maybe UTCTime)
+cExpiresAfter = lens _cExpiresAfter (\ s a -> s{_cExpiresAfter = a}) . mapping _Time;
+
+-- | The S3 directory path inside the bucket where the responses to the
+-- command executions should be stored. This was requested when issuing the
+-- command.
+cOutputS3KeyPrefix :: Lens' Command (Maybe Text)
+cOutputS3KeyPrefix = lens _cOutputS3KeyPrefix (\ s a -> s{_cOutputS3KeyPrefix = a});
+
+-- | The name of the SSM document requested for execution.
+cDocumentName :: Lens' Command (Maybe Text)
+cDocumentName = lens _cDocumentName (\ s a -> s{_cDocumentName = a});
+
+-- | The instance IDs against which this command was requested.
+cInstanceIds :: Lens' Command (Maybe (NonEmpty Text))
+cInstanceIds = lens _cInstanceIds (\ s a -> s{_cInstanceIds = a}) . mapping _List1;
+
+-- | A unique identifier for this command.
+cCommandId :: Lens' Command (Maybe Text)
+cCommandId = lens _cCommandId (\ s a -> s{_cCommandId = a});
+
+-- | The parameter values to be inserted in the SSM document when executing
+-- the command.
+cParameters :: Lens' Command (HashMap Text [Text])
+cParameters = lens _cParameters (\ s a -> s{_cParameters = a}) . _Default . _Map;
+
+-- | User-specified information about the command, such as a brief
+-- description of what the command should do.
+cComment :: Lens' Command (Maybe Text)
+cComment = lens _cComment (\ s a -> s{_cComment = a});
+
+-- | The S3 bucket where the responses to the command executions should be
+-- stored. This was requested when issuing the command.
+cOutputS3BucketName :: Lens' Command (Maybe Text)
+cOutputS3BucketName = lens _cOutputS3BucketName (\ s a -> s{_cOutputS3BucketName = a});
+
+-- | The date and time the command was requested.
+cRequestedDateTime :: Lens' Command (Maybe UTCTime)
+cRequestedDateTime = lens _cRequestedDateTime (\ s a -> s{_cRequestedDateTime = a}) . mapping _Time;
+
+instance FromJSON Command where
+        parseJSON
+          = withObject "Command"
+              (\ x ->
+                 Command' <$>
+                   (x .:? "Status") <*> (x .:? "ExpiresAfter") <*>
+                     (x .:? "OutputS3KeyPrefix")
+                     <*> (x .:? "DocumentName")
+                     <*> (x .:? "InstanceIds")
+                     <*> (x .:? "CommandId")
+                     <*> (x .:? "Parameters" .!= mempty)
+                     <*> (x .:? "Comment")
+                     <*> (x .:? "OutputS3BucketName")
+                     <*> (x .:? "RequestedDateTime"))
+
+-- | Describes a command filter.
+--
+-- /See:/ 'commandFilter' smart constructor.
+data CommandFilter = CommandFilter'
+    { _cfKey   :: !CommandFilterKey
+    , _cfValue :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommandFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfKey'
+--
+-- * 'cfValue'
+commandFilter
+    :: CommandFilterKey -- ^ 'cfKey'
+    -> Text -- ^ 'cfValue'
+    -> CommandFilter
+commandFilter pKey_ pValue_ =
+    CommandFilter'
+    { _cfKey = pKey_
+    , _cfValue = pValue_
+    }
+
+-- | The name of the filter. For example, requested date and time.
+cfKey :: Lens' CommandFilter CommandFilterKey
+cfKey = lens _cfKey (\ s a -> s{_cfKey = a});
+
+-- | The filter value. For example: June 30, 2015.
+cfValue :: Lens' CommandFilter Text
+cfValue = lens _cfValue (\ s a -> s{_cfValue = a});
+
+instance ToJSON CommandFilter where
+        toJSON CommandFilter'{..}
+          = object
+              (catMaybes
+                 [Just ("key" .= _cfKey), Just ("value" .= _cfValue)])
+
+-- | An invocation is copy of a command sent to a specific instance. A
+-- command can apply to one or more instances. A command invocation applies
+-- to one instance. For example, if a user executes SendCommand against
+-- three instances, then a command invocation is created for each requested
+-- instance ID. A command invocation returns status and detail information
+-- about a command you executed.
+--
+-- /See:/ 'commandInvocation' smart constructor.
+data CommandInvocation = CommandInvocation'
+    { _ciInstanceId        :: !(Maybe Text)
+    , _ciStatus            :: !(Maybe CommandInvocationStatus)
+    , _ciCommandPlugins    :: !(Maybe [CommandPlugin])
+    , _ciDocumentName      :: !(Maybe Text)
+    , _ciCommandId         :: !(Maybe Text)
+    , _ciComment           :: !(Maybe Text)
+    , _ciTraceOutput       :: !(Maybe Text)
+    , _ciRequestedDateTime :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommandInvocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciInstanceId'
+--
+-- * 'ciStatus'
+--
+-- * 'ciCommandPlugins'
+--
+-- * 'ciDocumentName'
+--
+-- * 'ciCommandId'
+--
+-- * 'ciComment'
+--
+-- * 'ciTraceOutput'
+--
+-- * 'ciRequestedDateTime'
+commandInvocation
+    :: CommandInvocation
+commandInvocation =
+    CommandInvocation'
+    { _ciInstanceId = Nothing
+    , _ciStatus = Nothing
+    , _ciCommandPlugins = Nothing
+    , _ciDocumentName = Nothing
+    , _ciCommandId = Nothing
+    , _ciComment = Nothing
+    , _ciTraceOutput = Nothing
+    , _ciRequestedDateTime = Nothing
+    }
+
+-- | The instance ID in which this invocation was requested.
+ciInstanceId :: Lens' CommandInvocation (Maybe Text)
+ciInstanceId = lens _ciInstanceId (\ s a -> s{_ciInstanceId = a});
+
+-- | Whether or not the invocation succeeded, failed, or is pending.
+ciStatus :: Lens' CommandInvocation (Maybe CommandInvocationStatus)
+ciStatus = lens _ciStatus (\ s a -> s{_ciStatus = a});
+
+-- | Undocumented member.
+ciCommandPlugins :: Lens' CommandInvocation [CommandPlugin]
+ciCommandPlugins = lens _ciCommandPlugins (\ s a -> s{_ciCommandPlugins = a}) . _Default . _Coerce;
+
+-- | The document name that was requested for execution.
+ciDocumentName :: Lens' CommandInvocation (Maybe Text)
+ciDocumentName = lens _ciDocumentName (\ s a -> s{_ciDocumentName = a});
+
+-- | The command against which this invocation was requested.
+ciCommandId :: Lens' CommandInvocation (Maybe Text)
+ciCommandId = lens _ciCommandId (\ s a -> s{_ciCommandId = a});
+
+-- | User-specified information about the command, such as a brief
+-- description of what the command should do.
+ciComment :: Lens' CommandInvocation (Maybe Text)
+ciComment = lens _ciComment (\ s a -> s{_ciComment = a});
+
+-- | Gets the trace output sent by the agent.
+ciTraceOutput :: Lens' CommandInvocation (Maybe Text)
+ciTraceOutput = lens _ciTraceOutput (\ s a -> s{_ciTraceOutput = a});
+
+-- | The time and date the request was sent to this instance.
+ciRequestedDateTime :: Lens' CommandInvocation (Maybe UTCTime)
+ciRequestedDateTime = lens _ciRequestedDateTime (\ s a -> s{_ciRequestedDateTime = a}) . mapping _Time;
+
+instance FromJSON CommandInvocation where
+        parseJSON
+          = withObject "CommandInvocation"
+              (\ x ->
+                 CommandInvocation' <$>
+                   (x .:? "InstanceId") <*> (x .:? "Status") <*>
+                     (x .:? "CommandPlugins" .!= mempty)
+                     <*> (x .:? "DocumentName")
+                     <*> (x .:? "CommandId")
+                     <*> (x .:? "Comment")
+                     <*> (x .:? "TraceOutput")
+                     <*> (x .:? "RequestedDateTime"))
+
+-- | Describes plugin details.
+--
+-- /See:/ 'commandPlugin' smart constructor.
+data CommandPlugin = CommandPlugin'
+    { _cpStatus                 :: !(Maybe CommandPluginStatus)
+    , _cpResponseStartDateTime  :: !(Maybe POSIX)
+    , _cpOutputS3KeyPrefix      :: !(Maybe Text)
+    , _cpResponseCode           :: !(Maybe Int)
+    , _cpOutput                 :: !(Maybe Text)
+    , _cpName                   :: !(Maybe Text)
+    , _cpOutputS3BucketName     :: !(Maybe Text)
+    , _cpResponseFinishDateTime :: !(Maybe POSIX)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CommandPlugin' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpStatus'
+--
+-- * 'cpResponseStartDateTime'
+--
+-- * 'cpOutputS3KeyPrefix'
+--
+-- * 'cpResponseCode'
+--
+-- * 'cpOutput'
+--
+-- * 'cpName'
+--
+-- * 'cpOutputS3BucketName'
+--
+-- * 'cpResponseFinishDateTime'
+commandPlugin
+    :: CommandPlugin
+commandPlugin =
+    CommandPlugin'
+    { _cpStatus = Nothing
+    , _cpResponseStartDateTime = Nothing
+    , _cpOutputS3KeyPrefix = Nothing
+    , _cpResponseCode = Nothing
+    , _cpOutput = Nothing
+    , _cpName = Nothing
+    , _cpOutputS3BucketName = Nothing
+    , _cpResponseFinishDateTime = Nothing
+    }
+
+-- | The status of this plugin. You can execute a document with multiple
+-- plugins.
+cpStatus :: Lens' CommandPlugin (Maybe CommandPluginStatus)
+cpStatus = lens _cpStatus (\ s a -> s{_cpStatus = a});
+
+-- | The time the plugin started executing.
+cpResponseStartDateTime :: Lens' CommandPlugin (Maybe UTCTime)
+cpResponseStartDateTime = lens _cpResponseStartDateTime (\ s a -> s{_cpResponseStartDateTime = a}) . mapping _Time;
+
+-- | The S3 directory path inside the bucket where the responses to the
+-- command executions should be stored. This was requested when issuing the
+-- command.
+cpOutputS3KeyPrefix :: Lens' CommandPlugin (Maybe Text)
+cpOutputS3KeyPrefix = lens _cpOutputS3KeyPrefix (\ s a -> s{_cpOutputS3KeyPrefix = a});
+
+-- | A numeric response code generated after executing the plugin.
+cpResponseCode :: Lens' CommandPlugin (Maybe Int)
+cpResponseCode = lens _cpResponseCode (\ s a -> s{_cpResponseCode = a});
+
+-- | Output of the plugin execution.
+cpOutput :: Lens' CommandPlugin (Maybe Text)
+cpOutput = lens _cpOutput (\ s a -> s{_cpOutput = a});
+
+-- | The name of the plugin. Must be one of the following:
+-- AWS-JoinDirectoryServiceDomain, AWS-InstallApplication,
+-- AWS-RunPowerShellScript, AWS-InstallPowerShellModule,
+-- AWS-ConfigureCloudWatch.
+cpName :: Lens' CommandPlugin (Maybe Text)
+cpName = lens _cpName (\ s a -> s{_cpName = a});
+
+-- | The S3 bucket where the responses to the command executions should be
+-- stored. This was requested when issuing the command.
+cpOutputS3BucketName :: Lens' CommandPlugin (Maybe Text)
+cpOutputS3BucketName = lens _cpOutputS3BucketName (\ s a -> s{_cpOutputS3BucketName = a});
+
+-- | The time the plugin stopped executing. Could stop prematurely if, for
+-- example, a cancel command was sent.
+cpResponseFinishDateTime :: Lens' CommandPlugin (Maybe UTCTime)
+cpResponseFinishDateTime = lens _cpResponseFinishDateTime (\ s a -> s{_cpResponseFinishDateTime = a}) . mapping _Time;
+
+instance FromJSON CommandPlugin where
+        parseJSON
+          = withObject "CommandPlugin"
+              (\ x ->
+                 CommandPlugin' <$>
+                   (x .:? "Status") <*> (x .:? "ResponseStartDateTime")
+                     <*> (x .:? "OutputS3KeyPrefix")
+                     <*> (x .:? "ResponseCode")
+                     <*> (x .:? "Output")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "OutputS3BucketName")
+                     <*> (x .:? "ResponseFinishDateTime"))
+
+-- | Describes the association of an SSM document and an instance.
+--
 -- /See:/ 'createAssociationBatchRequestEntry' smart constructor.
 data CreateAssociationBatchRequestEntry = CreateAssociationBatchRequestEntry'
     { _cabreInstanceId :: !(Maybe Text)
     , _cabreName       :: !(Maybe Text)
+    , _cabreParameters :: !(Maybe (Map Text [Text]))
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'CreateAssociationBatchRequestEntry' with the minimum fields required to make a request.
@@ -235,12 +599,15 @@
 -- * 'cabreInstanceId'
 --
 -- * 'cabreName'
+--
+-- * 'cabreParameters'
 createAssociationBatchRequestEntry
     :: CreateAssociationBatchRequestEntry
 createAssociationBatchRequestEntry =
     CreateAssociationBatchRequestEntry'
     { _cabreInstanceId = Nothing
     , _cabreName = Nothing
+    , _cabreParameters = Nothing
     }
 
 -- | The ID of the instance.
@@ -251,13 +618,18 @@
 cabreName :: Lens' CreateAssociationBatchRequestEntry (Maybe Text)
 cabreName = lens _cabreName (\ s a -> s{_cabreName = a});
 
+-- | A description of the parameters for a document.
+cabreParameters :: Lens' CreateAssociationBatchRequestEntry (HashMap Text [Text])
+cabreParameters = lens _cabreParameters (\ s a -> s{_cabreParameters = a}) . _Default . _Map;
+
 instance FromJSON CreateAssociationBatchRequestEntry
          where
         parseJSON
           = withObject "CreateAssociationBatchRequestEntry"
               (\ x ->
                  CreateAssociationBatchRequestEntry' <$>
-                   (x .:? "InstanceId") <*> (x .:? "Name"))
+                   (x .:? "InstanceId") <*> (x .:? "Name") <*>
+                     (x .:? "Parameters" .!= mempty))
 
 instance ToJSON CreateAssociationBatchRequestEntry
          where
@@ -265,16 +637,20 @@
           = object
               (catMaybes
                  [("InstanceId" .=) <$> _cabreInstanceId,
-                  ("Name" .=) <$> _cabreName])
+                  ("Name" .=) <$> _cabreName,
+                  ("Parameters" .=) <$> _cabreParameters])
 
--- | Describes a configuration document.
+-- | Describes an SSM document.
 --
 -- /See:/ 'documentDescription' smart constructor.
 data DocumentDescription = DocumentDescription'
-    { _dStatus      :: !(Maybe DocumentStatus)
-    , _dSha1        :: !(Maybe Text)
-    , _dCreatedDate :: !(Maybe POSIX)
-    , _dName        :: !(Maybe Text)
+    { _dStatus        :: !(Maybe DocumentStatus)
+    , _dSha1          :: !(Maybe Text)
+    , _dPlatformTypes :: !(Maybe [PlatformType])
+    , _dCreatedDate   :: !(Maybe POSIX)
+    , _dName          :: !(Maybe Text)
+    , _dParameters    :: !(Maybe [DocumentParameter])
+    , _dDescription   :: !(Maybe Text)
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'DocumentDescription' with the minimum fields required to make a request.
@@ -285,20 +661,29 @@
 --
 -- * 'dSha1'
 --
+-- * 'dPlatformTypes'
+--
 -- * 'dCreatedDate'
 --
 -- * 'dName'
+--
+-- * 'dParameters'
+--
+-- * 'dDescription'
 documentDescription
     :: DocumentDescription
 documentDescription =
     DocumentDescription'
     { _dStatus = Nothing
     , _dSha1 = Nothing
+    , _dPlatformTypes = Nothing
     , _dCreatedDate = Nothing
     , _dName = Nothing
+    , _dParameters = Nothing
+    , _dDescription = Nothing
     }
 
--- | The status of the configuration document.
+-- | The status of the SSM document.
 dStatus :: Lens' DocumentDescription (Maybe DocumentStatus)
 dStatus = lens _dStatus (\ s a -> s{_dStatus = a});
 
@@ -307,22 +692,37 @@
 dSha1 :: Lens' DocumentDescription (Maybe Text)
 dSha1 = lens _dSha1 (\ s a -> s{_dSha1 = a});
 
--- | The date when the configuration document was created.
+-- | The list of OS platforms compatible with this SSM document.
+dPlatformTypes :: Lens' DocumentDescription [PlatformType]
+dPlatformTypes = lens _dPlatformTypes (\ s a -> s{_dPlatformTypes = a}) . _Default . _Coerce;
+
+-- | The date when the SSM document was created.
 dCreatedDate :: Lens' DocumentDescription (Maybe UTCTime)
 dCreatedDate = lens _dCreatedDate (\ s a -> s{_dCreatedDate = a}) . mapping _Time;
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 dName :: Lens' DocumentDescription (Maybe Text)
 dName = lens _dName (\ s a -> s{_dName = a});
 
+-- | A description of the parameters for a document.
+dParameters :: Lens' DocumentDescription [DocumentParameter]
+dParameters = lens _dParameters (\ s a -> s{_dParameters = a}) . _Default . _Coerce;
+
+-- | A description of the document.
+dDescription :: Lens' DocumentDescription (Maybe Text)
+dDescription = lens _dDescription (\ s a -> s{_dDescription = a});
+
 instance FromJSON DocumentDescription where
         parseJSON
           = withObject "DocumentDescription"
               (\ x ->
                  DocumentDescription' <$>
                    (x .:? "Status") <*> (x .:? "Sha1") <*>
-                     (x .:? "CreatedDate")
-                     <*> (x .:? "Name"))
+                     (x .:? "PlatformTypes" .!= mempty)
+                     <*> (x .:? "CreatedDate")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "Parameters" .!= mempty)
+                     <*> (x .:? "Description"))
 
 -- | Describes a filter.
 --
@@ -363,34 +763,102 @@
               (catMaybes
                  [Just ("key" .= _dfKey), Just ("value" .= _dfValue)])
 
--- | Describes the name of a configuration document.
+-- | Describes the name of an SSM document.
 --
 -- /See:/ 'documentIdentifier' smart constructor.
-newtype DocumentIdentifier = DocumentIdentifier'
-    { _diName :: Maybe Text
+data DocumentIdentifier = DocumentIdentifier'
+    { _diPlatformTypes :: !(Maybe [PlatformType])
+    , _diName          :: !(Maybe Text)
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'DocumentIdentifier' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'diPlatformTypes'
+--
 -- * 'diName'
 documentIdentifier
     :: DocumentIdentifier
 documentIdentifier =
     DocumentIdentifier'
-    { _diName = Nothing
+    { _diPlatformTypes = Nothing
+    , _diName = Nothing
     }
 
--- | The name of the configuration document.
+-- | The operating system platform.
+diPlatformTypes :: Lens' DocumentIdentifier [PlatformType]
+diPlatformTypes = lens _diPlatformTypes (\ s a -> s{_diPlatformTypes = a}) . _Default . _Coerce;
+
+-- | The name of the SSM document.
 diName :: Lens' DocumentIdentifier (Maybe Text)
 diName = lens _diName (\ s a -> s{_diName = a});
 
 instance FromJSON DocumentIdentifier where
         parseJSON
           = withObject "DocumentIdentifier"
-              (\ x -> DocumentIdentifier' <$> (x .:? "Name"))
+              (\ x ->
+                 DocumentIdentifier' <$>
+                   (x .:? "PlatformTypes" .!= mempty) <*>
+                     (x .:? "Name"))
 
+-- | /See:/ 'documentParameter' smart constructor.
+data DocumentParameter = DocumentParameter'
+    { _dpName         :: !(Maybe Text)
+    , _dpDefaultValue :: !(Maybe Text)
+    , _dpType         :: !(Maybe DocumentParameterType)
+    , _dpDescription  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DocumentParameter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpName'
+--
+-- * 'dpDefaultValue'
+--
+-- * 'dpType'
+--
+-- * 'dpDescription'
+documentParameter
+    :: DocumentParameter
+documentParameter =
+    DocumentParameter'
+    { _dpName = Nothing
+    , _dpDefaultValue = Nothing
+    , _dpType = Nothing
+    , _dpDescription = Nothing
+    }
+
+-- | The name of the parameter.
+dpName :: Lens' DocumentParameter (Maybe Text)
+dpName = lens _dpName (\ s a -> s{_dpName = a});
+
+-- | If specified, the default values for the parameters. Parameters without
+-- a default value are required. Parameters with a default value are
+-- optional.
+dpDefaultValue :: Lens' DocumentParameter (Maybe Text)
+dpDefaultValue = lens _dpDefaultValue (\ s a -> s{_dpDefaultValue = a});
+
+-- | The type of parameter. The type can be either “String” or “StringList”.
+dpType :: Lens' DocumentParameter (Maybe DocumentParameterType)
+dpType = lens _dpType (\ s a -> s{_dpType = a});
+
+-- | A description of what the parameter does, how to use it, the default
+-- value, and whether or not the parameter is optional.
+dpDescription :: Lens' DocumentParameter (Maybe Text)
+dpDescription = lens _dpDescription (\ s a -> s{_dpDescription = a});
+
+instance FromJSON DocumentParameter where
+        parseJSON
+          = withObject "DocumentParameter"
+              (\ x ->
+                 DocumentParameter' <$>
+                   (x .:? "Name") <*> (x .:? "DefaultValue") <*>
+                     (x .:? "Type")
+                     <*> (x .:? "Description"))
+
 -- | Describes a failed association.
 --
 -- /See:/ 'failedCreateAssociation' smart constructor.
@@ -437,3 +905,136 @@
                  FailedCreateAssociation' <$>
                    (x .:? "Entry") <*> (x .:? "Fault") <*>
                      (x .:? "Message"))
+
+-- | Describes a filter for a specific list of instances.
+--
+-- /See:/ 'instanceInformation' smart constructor.
+data InstanceInformation = InstanceInformation'
+    { _iiInstanceId       :: !(Maybe Text)
+    , _iiPingStatus       :: !(Maybe PingStatus)
+    , _iiPlatformVersion  :: !(Maybe Text)
+    , _iiIsLatestVersion  :: !(Maybe Bool)
+    , _iiAgentVersion     :: !(Maybe Text)
+    , _iiLastPingDateTime :: !(Maybe POSIX)
+    , _iiPlatformType     :: !(Maybe PlatformType)
+    , _iiPlatformName     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceInformation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iiInstanceId'
+--
+-- * 'iiPingStatus'
+--
+-- * 'iiPlatformVersion'
+--
+-- * 'iiIsLatestVersion'
+--
+-- * 'iiAgentVersion'
+--
+-- * 'iiLastPingDateTime'
+--
+-- * 'iiPlatformType'
+--
+-- * 'iiPlatformName'
+instanceInformation
+    :: InstanceInformation
+instanceInformation =
+    InstanceInformation'
+    { _iiInstanceId = Nothing
+    , _iiPingStatus = Nothing
+    , _iiPlatformVersion = Nothing
+    , _iiIsLatestVersion = Nothing
+    , _iiAgentVersion = Nothing
+    , _iiLastPingDateTime = Nothing
+    , _iiPlatformType = Nothing
+    , _iiPlatformName = Nothing
+    }
+
+-- | The instance ID.
+iiInstanceId :: Lens' InstanceInformation (Maybe Text)
+iiInstanceId = lens _iiInstanceId (\ s a -> s{_iiInstanceId = a});
+
+-- | Connection status of the SSM agent.
+iiPingStatus :: Lens' InstanceInformation (Maybe PingStatus)
+iiPingStatus = lens _iiPingStatus (\ s a -> s{_iiPingStatus = a});
+
+-- | The version of the OS platform running on your instance.
+iiPlatformVersion :: Lens' InstanceInformation (Maybe Text)
+iiPlatformVersion = lens _iiPlatformVersion (\ s a -> s{_iiPlatformVersion = a});
+
+-- | Indicates whether latest version of the SSM agent is running on your
+-- instance.
+iiIsLatestVersion :: Lens' InstanceInformation (Maybe Bool)
+iiIsLatestVersion = lens _iiIsLatestVersion (\ s a -> s{_iiIsLatestVersion = a});
+
+-- | The version of the SSM agent running on your instance.
+iiAgentVersion :: Lens' InstanceInformation (Maybe Text)
+iiAgentVersion = lens _iiAgentVersion (\ s a -> s{_iiAgentVersion = a});
+
+-- | The date and time when agent last pinged SSM service.
+iiLastPingDateTime :: Lens' InstanceInformation (Maybe UTCTime)
+iiLastPingDateTime = lens _iiLastPingDateTime (\ s a -> s{_iiLastPingDateTime = a}) . mapping _Time;
+
+-- | The operating system platform type.
+iiPlatformType :: Lens' InstanceInformation (Maybe PlatformType)
+iiPlatformType = lens _iiPlatformType (\ s a -> s{_iiPlatformType = a});
+
+-- | The name of the operating system platform running on your instance.
+iiPlatformName :: Lens' InstanceInformation (Maybe Text)
+iiPlatformName = lens _iiPlatformName (\ s a -> s{_iiPlatformName = a});
+
+instance FromJSON InstanceInformation where
+        parseJSON
+          = withObject "InstanceInformation"
+              (\ x ->
+                 InstanceInformation' <$>
+                   (x .:? "InstanceId") <*> (x .:? "PingStatus") <*>
+                     (x .:? "PlatformVersion")
+                     <*> (x .:? "IsLatestVersion")
+                     <*> (x .:? "AgentVersion")
+                     <*> (x .:? "LastPingDateTime")
+                     <*> (x .:? "PlatformType")
+                     <*> (x .:? "PlatformName"))
+
+-- | Describes a filter for a specific list of instances.
+--
+-- /See:/ 'instanceInformationFilter' smart constructor.
+data InstanceInformationFilter = InstanceInformationFilter'
+    { _iifKey      :: !InstanceInformationFilterKey
+    , _iifValueSet :: !(List1 Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceInformationFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iifKey'
+--
+-- * 'iifValueSet'
+instanceInformationFilter
+    :: InstanceInformationFilterKey -- ^ 'iifKey'
+    -> NonEmpty Text -- ^ 'iifValueSet'
+    -> InstanceInformationFilter
+instanceInformationFilter pKey_ pValueSet_ =
+    InstanceInformationFilter'
+    { _iifKey = pKey_
+    , _iifValueSet = _List1 # pValueSet_
+    }
+
+-- | The name of the filter.
+iifKey :: Lens' InstanceInformationFilter InstanceInformationFilterKey
+iifKey = lens _iifKey (\ s a -> s{_iifKey = a});
+
+-- | The filter values.
+iifValueSet :: Lens' InstanceInformationFilter (NonEmpty Text)
+iifValueSet = lens _iifValueSet (\ s a -> s{_iifValueSet = a}) . _List1;
+
+instance ToJSON InstanceInformationFilter where
+        toJSON InstanceInformationFilter'{..}
+          = object
+              (catMaybes
+                 [Just ("key" .= _iifKey),
+                  Just ("valueSet" .= _iifValueSet)])
diff --git a/gen/Network/AWS/SSM/Types/Sum.hs b/gen/Network/AWS/SSM/Types/Sum.hs
--- a/gen/Network/AWS/SSM/Types/Sum.hs
+++ b/gen/Network/AWS/SSM/Types/Sum.hs
@@ -45,24 +45,24 @@
     toJSON = toJSONText
 
 data AssociationStatusName
-    = Failed
-    | Pending
-    | Success
+    = ASNFailed
+    | ASNPending
+    | ASNSuccess
     deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
 
 instance FromText AssociationStatusName where
     parser = takeLowerText >>= \case
-        "failed" -> pure Failed
-        "pending" -> pure Pending
-        "success" -> pure Success
+        "failed" -> pure ASNFailed
+        "pending" -> pure ASNPending
+        "success" -> pure ASNSuccess
         e -> fromTextError $ "Failure parsing AssociationStatusName from value: '" <> e
            <> "'. Accepted values: Failed, Pending, Success"
 
 instance ToText AssociationStatusName where
     toText = \case
-        Failed -> "Failed"
-        Pending -> "Pending"
-        Success -> "Success"
+        ASNFailed -> "Failed"
+        ASNPending -> "Pending"
+        ASNSuccess -> "Success"
 
 instance Hashable     AssociationStatusName
 instance ToByteString AssociationStatusName
@@ -75,19 +75,170 @@
 instance FromJSON AssociationStatusName where
     parseJSON = parseJSONText "AssociationStatusName"
 
-data DocumentFilterKey =
-    Name
+data CommandFilterKey
+    = CommandInvokedAfter
+    | CommandInvokedBefore
+    | CommandStatus
     deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
 
+instance FromText CommandFilterKey where
+    parser = takeLowerText >>= \case
+        "invokedafter" -> pure CommandInvokedAfter
+        "invokedbefore" -> pure CommandInvokedBefore
+        "status" -> pure CommandStatus
+        e -> fromTextError $ "Failure parsing CommandFilterKey from value: '" <> e
+           <> "'. Accepted values: InvokedAfter, InvokedBefore, Status"
+
+instance ToText CommandFilterKey where
+    toText = \case
+        CommandInvokedAfter -> "InvokedAfter"
+        CommandInvokedBefore -> "InvokedBefore"
+        CommandStatus -> "Status"
+
+instance Hashable     CommandFilterKey
+instance ToByteString CommandFilterKey
+instance ToQuery      CommandFilterKey
+instance ToHeader     CommandFilterKey
+
+instance ToJSON CommandFilterKey where
+    toJSON = toJSONText
+
+data CommandInvocationStatus
+    = CISCancelled
+    | CISCancelling
+    | CISFailed
+    | CISInProgress
+    | CISPending
+    | CISSuccess
+    | CISTimedOut
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText CommandInvocationStatus where
+    parser = takeLowerText >>= \case
+        "cancelled" -> pure CISCancelled
+        "cancelling" -> pure CISCancelling
+        "failed" -> pure CISFailed
+        "inprogress" -> pure CISInProgress
+        "pending" -> pure CISPending
+        "success" -> pure CISSuccess
+        "timedout" -> pure CISTimedOut
+        e -> fromTextError $ "Failure parsing CommandInvocationStatus from value: '" <> e
+           <> "'. Accepted values: Cancelled, Cancelling, Failed, InProgress, Pending, Success, TimedOut"
+
+instance ToText CommandInvocationStatus where
+    toText = \case
+        CISCancelled -> "Cancelled"
+        CISCancelling -> "Cancelling"
+        CISFailed -> "Failed"
+        CISInProgress -> "InProgress"
+        CISPending -> "Pending"
+        CISSuccess -> "Success"
+        CISTimedOut -> "TimedOut"
+
+instance Hashable     CommandInvocationStatus
+instance ToByteString CommandInvocationStatus
+instance ToQuery      CommandInvocationStatus
+instance ToHeader     CommandInvocationStatus
+
+instance FromJSON CommandInvocationStatus where
+    parseJSON = parseJSONText "CommandInvocationStatus"
+
+data CommandPluginStatus
+    = CPSCancelled
+    | CPSFailed
+    | CPSInProgress
+    | CPSPending
+    | CPSSuccess
+    | CPSTimedOut
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText CommandPluginStatus where
+    parser = takeLowerText >>= \case
+        "cancelled" -> pure CPSCancelled
+        "failed" -> pure CPSFailed
+        "inprogress" -> pure CPSInProgress
+        "pending" -> pure CPSPending
+        "success" -> pure CPSSuccess
+        "timedout" -> pure CPSTimedOut
+        e -> fromTextError $ "Failure parsing CommandPluginStatus from value: '" <> e
+           <> "'. Accepted values: Cancelled, Failed, InProgress, Pending, Success, TimedOut"
+
+instance ToText CommandPluginStatus where
+    toText = \case
+        CPSCancelled -> "Cancelled"
+        CPSFailed -> "Failed"
+        CPSInProgress -> "InProgress"
+        CPSPending -> "Pending"
+        CPSSuccess -> "Success"
+        CPSTimedOut -> "TimedOut"
+
+instance Hashable     CommandPluginStatus
+instance ToByteString CommandPluginStatus
+instance ToQuery      CommandPluginStatus
+instance ToHeader     CommandPluginStatus
+
+instance FromJSON CommandPluginStatus where
+    parseJSON = parseJSONText "CommandPluginStatus"
+
+data CommandStatus
+    = Cancelled
+    | Cancelling
+    | Failed
+    | InProgress
+    | Pending
+    | Success
+    | TimedOut
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText CommandStatus where
+    parser = takeLowerText >>= \case
+        "cancelled" -> pure Cancelled
+        "cancelling" -> pure Cancelling
+        "failed" -> pure Failed
+        "inprogress" -> pure InProgress
+        "pending" -> pure Pending
+        "success" -> pure Success
+        "timedout" -> pure TimedOut
+        e -> fromTextError $ "Failure parsing CommandStatus from value: '" <> e
+           <> "'. Accepted values: Cancelled, Cancelling, Failed, InProgress, Pending, Success, TimedOut"
+
+instance ToText CommandStatus where
+    toText = \case
+        Cancelled -> "Cancelled"
+        Cancelling -> "Cancelling"
+        Failed -> "Failed"
+        InProgress -> "InProgress"
+        Pending -> "Pending"
+        Success -> "Success"
+        TimedOut -> "TimedOut"
+
+instance Hashable     CommandStatus
+instance ToByteString CommandStatus
+instance ToQuery      CommandStatus
+instance ToHeader     CommandStatus
+
+instance FromJSON CommandStatus where
+    parseJSON = parseJSONText "CommandStatus"
+
+data DocumentFilterKey
+    = Name
+    | Owner
+    | PlatformTypes
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
 instance FromText DocumentFilterKey where
     parser = takeLowerText >>= \case
         "name" -> pure Name
+        "owner" -> pure Owner
+        "platformtypes" -> pure PlatformTypes
         e -> fromTextError $ "Failure parsing DocumentFilterKey from value: '" <> e
-           <> "'. Accepted values: Name"
+           <> "'. Accepted values: Name, Owner, PlatformTypes"
 
 instance ToText DocumentFilterKey where
     toText = \case
         Name -> "Name"
+        Owner -> "Owner"
+        PlatformTypes -> "PlatformTypes"
 
 instance Hashable     DocumentFilterKey
 instance ToByteString DocumentFilterKey
@@ -97,6 +248,31 @@
 instance ToJSON DocumentFilterKey where
     toJSON = toJSONText
 
+data DocumentParameterType
+    = String
+    | StringList
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText DocumentParameterType where
+    parser = takeLowerText >>= \case
+        "string" -> pure String
+        "stringlist" -> pure StringList
+        e -> fromTextError $ "Failure parsing DocumentParameterType from value: '" <> e
+           <> "'. Accepted values: String, StringList"
+
+instance ToText DocumentParameterType where
+    toText = \case
+        String -> "String"
+        StringList -> "StringList"
+
+instance Hashable     DocumentParameterType
+instance ToByteString DocumentParameterType
+instance ToQuery      DocumentParameterType
+instance ToHeader     DocumentParameterType
+
+instance FromJSON DocumentParameterType where
+    parseJSON = parseJSONText "DocumentParameterType"
+
 data DocumentStatus
     = Active
     | Creating
@@ -152,3 +328,87 @@
 
 instance FromJSON Fault where
     parseJSON = parseJSONText "Fault"
+
+data InstanceInformationFilterKey
+    = IIFKAgentVersion
+    | IIFKInstanceIds
+    | IIFKPingStatus
+    | IIFKPlatformTypes
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText InstanceInformationFilterKey where
+    parser = takeLowerText >>= \case
+        "agentversion" -> pure IIFKAgentVersion
+        "instanceids" -> pure IIFKInstanceIds
+        "pingstatus" -> pure IIFKPingStatus
+        "platformtypes" -> pure IIFKPlatformTypes
+        e -> fromTextError $ "Failure parsing InstanceInformationFilterKey from value: '" <> e
+           <> "'. Accepted values: AgentVersion, InstanceIds, PingStatus, PlatformTypes"
+
+instance ToText InstanceInformationFilterKey where
+    toText = \case
+        IIFKAgentVersion -> "AgentVersion"
+        IIFKInstanceIds -> "InstanceIds"
+        IIFKPingStatus -> "PingStatus"
+        IIFKPlatformTypes -> "PlatformTypes"
+
+instance Hashable     InstanceInformationFilterKey
+instance ToByteString InstanceInformationFilterKey
+instance ToQuery      InstanceInformationFilterKey
+instance ToHeader     InstanceInformationFilterKey
+
+instance ToJSON InstanceInformationFilterKey where
+    toJSON = toJSONText
+
+data PingStatus
+    = ConnectionLost
+    | Inactive
+    | Online
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText PingStatus where
+    parser = takeLowerText >>= \case
+        "connectionlost" -> pure ConnectionLost
+        "inactive" -> pure Inactive
+        "online" -> pure Online
+        e -> fromTextError $ "Failure parsing PingStatus from value: '" <> e
+           <> "'. Accepted values: ConnectionLost, Inactive, Online"
+
+instance ToText PingStatus where
+    toText = \case
+        ConnectionLost -> "ConnectionLost"
+        Inactive -> "Inactive"
+        Online -> "Online"
+
+instance Hashable     PingStatus
+instance ToByteString PingStatus
+instance ToQuery      PingStatus
+instance ToHeader     PingStatus
+
+instance FromJSON PingStatus where
+    parseJSON = parseJSONText "PingStatus"
+
+data PlatformType
+    = Linux
+    | Windows
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText PlatformType where
+    parser = takeLowerText >>= \case
+        "linux" -> pure Linux
+        "windows" -> pure Windows
+        e -> fromTextError $ "Failure parsing PlatformType from value: '" <> e
+           <> "'. Accepted values: Linux, Windows"
+
+instance ToText PlatformType where
+    toText = \case
+        Linux -> "Linux"
+        Windows -> "Windows"
+
+instance Hashable     PlatformType
+instance ToByteString PlatformType
+instance ToQuery      PlatformType
+instance ToHeader     PlatformType
+
+instance FromJSON PlatformType where
+    parseJSON = parseJSONText "PlatformType"
diff --git a/gen/Network/AWS/SSM/UpdateAssociationStatus.hs b/gen/Network/AWS/SSM/UpdateAssociationStatus.hs
--- a/gen/Network/AWS/SSM/UpdateAssociationStatus.hs
+++ b/gen/Network/AWS/SSM/UpdateAssociationStatus.hs
@@ -18,8 +18,8 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Updates the status of the configuration document associated with the
--- specified instance.
+-- Updates the status of the SSM document associated with the specified
+-- instance.
 --
 -- /See:/ <http://docs.aws.amazon.com/ssm/latest/APIReference/API_UpdateAssociationStatus.html AWS API Reference> for UpdateAssociationStatus.
 module Network.AWS.SSM.UpdateAssociationStatus
@@ -74,7 +74,7 @@
     , _uasAssociationStatus = pAssociationStatus_
     }
 
--- | The name of the configuration document.
+-- | The name of the SSM document.
 uasName :: Lens' UpdateAssociationStatus Text
 uasName = lens _uasName (\ s a -> s{_uasName = a});
 
diff --git a/test/Test/AWS/Gen/SSM.hs b/test/Test/AWS/Gen/SSM.hs
--- a/test/Test/AWS/Gen/SSM.hs
+++ b/test/Test/AWS/Gen/SSM.hs
@@ -37,24 +37,39 @@
 --         , testCreateDocument $
 --             createDocument
 --
+--         , testListCommandInvocations $
+--             listCommandInvocations
+--
 --         , testListDocuments $
 --             listDocuments
 --
 --         , testGetDocument $
 --             getDocument
 --
+--         , testCancelCommand $
+--             cancelCommand
+--
 --         , testDescribeAssociation $
 --             describeAssociation
 --
 --         , testUpdateAssociationStatus $
 --             updateAssociationStatus
 --
+--         , testDescribeInstanceInformation $
+--             describeInstanceInformation
+--
 --         , testListAssociations $
 --             listAssociations
 --
 --         , testDeleteAssociation $
 --             deleteAssociation
 --
+--         , testSendCommand $
+--             sendCommand
+--
+--         , testListCommands $
+--             listCommands
+--
 --         , testDeleteDocument $
 --             deleteDocument
 --
@@ -73,24 +88,39 @@
 --         , testCreateDocumentResponse $
 --             createDocumentResponse
 --
+--         , testListCommandInvocationsResponse $
+--             listCommandInvocationsResponse
+--
 --         , testListDocumentsResponse $
 --             listDocumentsResponse
 --
 --         , testGetDocumentResponse $
 --             getDocumentResponse
 --
+--         , testCancelCommandResponse $
+--             cancelCommandResponse
+--
 --         , testDescribeAssociationResponse $
 --             describeAssociationResponse
 --
 --         , testUpdateAssociationStatusResponse $
 --             updateAssociationStatusResponse
 --
+--         , testDescribeInstanceInformationResponse $
+--             describeInstanceInformationResponse
+--
 --         , testListAssociationsResponse $
 --             listAssociationsResponse
 --
 --         , testDeleteAssociationResponse $
 --             deleteAssociationResponse
 --
+--         , testSendCommandResponse $
+--             sendCommandResponse
+--
+--         , testListCommandsResponse $
+--             listCommandsResponse
+--
 --         , testDeleteDocumentResponse $
 --             deleteDocumentResponse
 --
@@ -117,6 +147,11 @@
     "CreateDocument"
     "fixture/CreateDocument.yaml"
 
+testListCommandInvocations :: ListCommandInvocations -> TestTree
+testListCommandInvocations = req
+    "ListCommandInvocations"
+    "fixture/ListCommandInvocations.yaml"
+
 testListDocuments :: ListDocuments -> TestTree
 testListDocuments = req
     "ListDocuments"
@@ -127,6 +162,11 @@
     "GetDocument"
     "fixture/GetDocument.yaml"
 
+testCancelCommand :: CancelCommand -> TestTree
+testCancelCommand = req
+    "CancelCommand"
+    "fixture/CancelCommand.yaml"
+
 testDescribeAssociation :: DescribeAssociation -> TestTree
 testDescribeAssociation = req
     "DescribeAssociation"
@@ -137,6 +177,11 @@
     "UpdateAssociationStatus"
     "fixture/UpdateAssociationStatus.yaml"
 
+testDescribeInstanceInformation :: DescribeInstanceInformation -> TestTree
+testDescribeInstanceInformation = req
+    "DescribeInstanceInformation"
+    "fixture/DescribeInstanceInformation.yaml"
+
 testListAssociations :: ListAssociations -> TestTree
 testListAssociations = req
     "ListAssociations"
@@ -147,6 +192,16 @@
     "DeleteAssociation"
     "fixture/DeleteAssociation.yaml"
 
+testSendCommand :: SendCommand -> TestTree
+testSendCommand = req
+    "SendCommand"
+    "fixture/SendCommand.yaml"
+
+testListCommands :: ListCommands -> TestTree
+testListCommands = req
+    "ListCommands"
+    "fixture/ListCommands.yaml"
+
 testDeleteDocument :: DeleteDocument -> TestTree
 testDeleteDocument = req
     "DeleteDocument"
@@ -180,6 +235,13 @@
     sSM
     (Proxy :: Proxy CreateDocument)
 
+testListCommandInvocationsResponse :: ListCommandInvocationsResponse -> TestTree
+testListCommandInvocationsResponse = res
+    "ListCommandInvocationsResponse"
+    "fixture/ListCommandInvocationsResponse.proto"
+    sSM
+    (Proxy :: Proxy ListCommandInvocations)
+
 testListDocumentsResponse :: ListDocumentsResponse -> TestTree
 testListDocumentsResponse = res
     "ListDocumentsResponse"
@@ -194,6 +256,13 @@
     sSM
     (Proxy :: Proxy GetDocument)
 
+testCancelCommandResponse :: CancelCommandResponse -> TestTree
+testCancelCommandResponse = res
+    "CancelCommandResponse"
+    "fixture/CancelCommandResponse.proto"
+    sSM
+    (Proxy :: Proxy CancelCommand)
+
 testDescribeAssociationResponse :: DescribeAssociationResponse -> TestTree
 testDescribeAssociationResponse = res
     "DescribeAssociationResponse"
@@ -208,6 +277,13 @@
     sSM
     (Proxy :: Proxy UpdateAssociationStatus)
 
+testDescribeInstanceInformationResponse :: DescribeInstanceInformationResponse -> TestTree
+testDescribeInstanceInformationResponse = res
+    "DescribeInstanceInformationResponse"
+    "fixture/DescribeInstanceInformationResponse.proto"
+    sSM
+    (Proxy :: Proxy DescribeInstanceInformation)
+
 testListAssociationsResponse :: ListAssociationsResponse -> TestTree
 testListAssociationsResponse = res
     "ListAssociationsResponse"
@@ -221,6 +297,20 @@
     "fixture/DeleteAssociationResponse.proto"
     sSM
     (Proxy :: Proxy DeleteAssociation)
+
+testSendCommandResponse :: SendCommandResponse -> TestTree
+testSendCommandResponse = res
+    "SendCommandResponse"
+    "fixture/SendCommandResponse.proto"
+    sSM
+    (Proxy :: Proxy SendCommand)
+
+testListCommandsResponse :: ListCommandsResponse -> TestTree
+testListCommandsResponse = res
+    "ListCommandsResponse"
+    "fixture/ListCommandsResponse.proto"
+    sSM
+    (Proxy :: Proxy ListCommands)
 
 testDeleteDocumentResponse :: DeleteDocumentResponse -> TestTree
 testDeleteDocumentResponse = res
