diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,9 +7,8 @@
 
 
 ## Version
-
-`1.6.1`
-
+ 
+`2.0` - Derived from API version @2017-11-09@ of the AWS service descriptions, licensed under Apache 2.0.
 
 ## Description
 
@@ -26,7 +25,7 @@
 The provided lenses should be compatible with any of the major lens libraries
 [lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
-See [Network.AWS.AlexaBusiness](http://hackage.haskell.org/package/amazonka-alexa-business/docs/Network-AWS-AlexaBusiness.html)
+See [Amazonka.AlexaBusiness](http://hackage.haskell.org/package/amazonka-alexa-business/docs/Amazonka-AlexaBusiness.html)
 or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
 
 
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import           Distribution.Simple
-main = defaultMain
diff --git a/amazonka-alexa-business.cabal b/amazonka-alexa-business.cabal
--- a/amazonka-alexa-business.cabal
+++ b/amazonka-alexa-business.cabal
@@ -1,134 +1,265 @@
-name:                  amazonka-alexa-business
-version:               1.6.1
-synopsis:              Amazon Alexa For Business SDK.
-homepage:              https://github.com/brendanhay/amazonka
-bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               MPL-2.0
-license-file:          LICENSE
-author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-copyright:             Copyright (c) 2013-2018 Brendan Hay
-category:              Network, AWS, Cloud, Distributed Computing
-build-type:            Simple
-cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+cabal-version:      2.2
+name:               amazonka-alexa-business
+version:            2.0
+synopsis:           Amazon Alexa For Business SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
 description:
-    The types from this library are intended to be used with
-    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
-    mechanisms for specifying AuthN/AuthZ information, sending requests,
-    and receiving responses.
-    .
-    Lenses are used for constructing and manipulating types,
-    due to the depth of nesting of AWS types and transparency regarding
-    de/serialisation into more palatable Haskell values.
-    The provided lenses should be compatible with any of the major lens libraries
-    such as <http://hackage.haskell.org/package/lens lens> or
-    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
-    .
-    See "Network.AWS.AlexaBusiness" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2017-11-09@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.AlexaBusiness.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.AlexaBusiness" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
 
 source-repository head
-    type:              git
-    location:          git://github.com/brendanhay/amazonka.git
-    subdir:            amazonka-alexa-business
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-alexa-business
 
 library
-    default-language:  Haskell2010
-    hs-source-dirs:    src gen
-
-    ghc-options:
-        -Wall
-        -fwarn-incomplete-uni-patterns
-        -fwarn-incomplete-record-updates
-        -funbox-strict-fields
-
-    exposed-modules:
-          Network.AWS.AlexaBusiness
-        , Network.AWS.AlexaBusiness.AssociateContactWithAddressBook
-        , Network.AWS.AlexaBusiness.AssociateDeviceWithRoom
-        , Network.AWS.AlexaBusiness.AssociateSkillGroupWithRoom
-        , Network.AWS.AlexaBusiness.CreateAddressBook
-        , Network.AWS.AlexaBusiness.CreateContact
-        , Network.AWS.AlexaBusiness.CreateProfile
-        , Network.AWS.AlexaBusiness.CreateRoom
-        , Network.AWS.AlexaBusiness.CreateSkillGroup
-        , Network.AWS.AlexaBusiness.CreateUser
-        , Network.AWS.AlexaBusiness.DeleteAddressBook
-        , Network.AWS.AlexaBusiness.DeleteContact
-        , Network.AWS.AlexaBusiness.DeleteProfile
-        , Network.AWS.AlexaBusiness.DeleteRoom
-        , Network.AWS.AlexaBusiness.DeleteRoomSkillParameter
-        , Network.AWS.AlexaBusiness.DeleteSkillGroup
-        , Network.AWS.AlexaBusiness.DeleteUser
-        , Network.AWS.AlexaBusiness.DisassociateContactFromAddressBook
-        , Network.AWS.AlexaBusiness.DisassociateDeviceFromRoom
-        , Network.AWS.AlexaBusiness.DisassociateSkillGroupFromRoom
-        , Network.AWS.AlexaBusiness.GetAddressBook
-        , Network.AWS.AlexaBusiness.GetContact
-        , Network.AWS.AlexaBusiness.GetDevice
-        , Network.AWS.AlexaBusiness.GetProfile
-        , Network.AWS.AlexaBusiness.GetRoom
-        , Network.AWS.AlexaBusiness.GetRoomSkillParameter
-        , Network.AWS.AlexaBusiness.GetSkillGroup
-        , Network.AWS.AlexaBusiness.ListDeviceEvents
-        , Network.AWS.AlexaBusiness.ListSkills
-        , Network.AWS.AlexaBusiness.ListTags
-        , Network.AWS.AlexaBusiness.PutRoomSkillParameter
-        , Network.AWS.AlexaBusiness.ResolveRoom
-        , Network.AWS.AlexaBusiness.RevokeInvitation
-        , Network.AWS.AlexaBusiness.SearchAddressBooks
-        , Network.AWS.AlexaBusiness.SearchContacts
-        , Network.AWS.AlexaBusiness.SearchDevices
-        , Network.AWS.AlexaBusiness.SearchProfiles
-        , Network.AWS.AlexaBusiness.SearchRooms
-        , Network.AWS.AlexaBusiness.SearchSkillGroups
-        , Network.AWS.AlexaBusiness.SearchUsers
-        , Network.AWS.AlexaBusiness.SendInvitation
-        , Network.AWS.AlexaBusiness.StartDeviceSync
-        , Network.AWS.AlexaBusiness.TagResource
-        , Network.AWS.AlexaBusiness.Types
-        , Network.AWS.AlexaBusiness.UntagResource
-        , Network.AWS.AlexaBusiness.UpdateAddressBook
-        , Network.AWS.AlexaBusiness.UpdateContact
-        , Network.AWS.AlexaBusiness.UpdateDevice
-        , Network.AWS.AlexaBusiness.UpdateProfile
-        , Network.AWS.AlexaBusiness.UpdateRoom
-        , Network.AWS.AlexaBusiness.UpdateSkillGroup
-        , Network.AWS.AlexaBusiness.Waiters
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
 
-    other-modules:
-          Network.AWS.AlexaBusiness.Types.Product
-        , Network.AWS.AlexaBusiness.Types.Sum
+  exposed-modules:
+    Amazonka.AlexaBusiness
+    Amazonka.AlexaBusiness.ApproveSkill
+    Amazonka.AlexaBusiness.AssociateContactWithAddressBook
+    Amazonka.AlexaBusiness.AssociateDeviceWithNetworkProfile
+    Amazonka.AlexaBusiness.AssociateDeviceWithRoom
+    Amazonka.AlexaBusiness.AssociateSkillGroupWithRoom
+    Amazonka.AlexaBusiness.AssociateSkillWithSkillGroup
+    Amazonka.AlexaBusiness.AssociateSkillWithUsers
+    Amazonka.AlexaBusiness.CreateAddressBook
+    Amazonka.AlexaBusiness.CreateBusinessReportSchedule
+    Amazonka.AlexaBusiness.CreateConferenceProvider
+    Amazonka.AlexaBusiness.CreateContact
+    Amazonka.AlexaBusiness.CreateGatewayGroup
+    Amazonka.AlexaBusiness.CreateNetworkProfile
+    Amazonka.AlexaBusiness.CreateProfile
+    Amazonka.AlexaBusiness.CreateRoom
+    Amazonka.AlexaBusiness.CreateSkillGroup
+    Amazonka.AlexaBusiness.CreateUser
+    Amazonka.AlexaBusiness.DeleteAddressBook
+    Amazonka.AlexaBusiness.DeleteBusinessReportSchedule
+    Amazonka.AlexaBusiness.DeleteConferenceProvider
+    Amazonka.AlexaBusiness.DeleteContact
+    Amazonka.AlexaBusiness.DeleteDevice
+    Amazonka.AlexaBusiness.DeleteDeviceUsageData
+    Amazonka.AlexaBusiness.DeleteGatewayGroup
+    Amazonka.AlexaBusiness.DeleteNetworkProfile
+    Amazonka.AlexaBusiness.DeleteProfile
+    Amazonka.AlexaBusiness.DeleteRoom
+    Amazonka.AlexaBusiness.DeleteRoomSkillParameter
+    Amazonka.AlexaBusiness.DeleteSkillAuthorization
+    Amazonka.AlexaBusiness.DeleteSkillGroup
+    Amazonka.AlexaBusiness.DeleteUser
+    Amazonka.AlexaBusiness.DisassociateContactFromAddressBook
+    Amazonka.AlexaBusiness.DisassociateDeviceFromRoom
+    Amazonka.AlexaBusiness.DisassociateSkillFromSkillGroup
+    Amazonka.AlexaBusiness.DisassociateSkillFromUsers
+    Amazonka.AlexaBusiness.DisassociateSkillGroupFromRoom
+    Amazonka.AlexaBusiness.ForgetSmartHomeAppliances
+    Amazonka.AlexaBusiness.GetAddressBook
+    Amazonka.AlexaBusiness.GetConferencePreference
+    Amazonka.AlexaBusiness.GetConferenceProvider
+    Amazonka.AlexaBusiness.GetContact
+    Amazonka.AlexaBusiness.GetDevice
+    Amazonka.AlexaBusiness.GetGateway
+    Amazonka.AlexaBusiness.GetGatewayGroup
+    Amazonka.AlexaBusiness.GetInvitationConfiguration
+    Amazonka.AlexaBusiness.GetNetworkProfile
+    Amazonka.AlexaBusiness.GetProfile
+    Amazonka.AlexaBusiness.GetRoom
+    Amazonka.AlexaBusiness.GetRoomSkillParameter
+    Amazonka.AlexaBusiness.GetSkillGroup
+    Amazonka.AlexaBusiness.Lens
+    Amazonka.AlexaBusiness.ListBusinessReportSchedules
+    Amazonka.AlexaBusiness.ListConferenceProviders
+    Amazonka.AlexaBusiness.ListDeviceEvents
+    Amazonka.AlexaBusiness.ListGatewayGroups
+    Amazonka.AlexaBusiness.ListGateways
+    Amazonka.AlexaBusiness.ListSkills
+    Amazonka.AlexaBusiness.ListSkillsStoreCategories
+    Amazonka.AlexaBusiness.ListSkillsStoreSkillsByCategory
+    Amazonka.AlexaBusiness.ListSmartHomeAppliances
+    Amazonka.AlexaBusiness.ListTags
+    Amazonka.AlexaBusiness.PutConferencePreference
+    Amazonka.AlexaBusiness.PutInvitationConfiguration
+    Amazonka.AlexaBusiness.PutRoomSkillParameter
+    Amazonka.AlexaBusiness.PutSkillAuthorization
+    Amazonka.AlexaBusiness.RegisterAVSDevice
+    Amazonka.AlexaBusiness.RejectSkill
+    Amazonka.AlexaBusiness.ResolveRoom
+    Amazonka.AlexaBusiness.RevokeInvitation
+    Amazonka.AlexaBusiness.SearchAddressBooks
+    Amazonka.AlexaBusiness.SearchContacts
+    Amazonka.AlexaBusiness.SearchDevices
+    Amazonka.AlexaBusiness.SearchNetworkProfiles
+    Amazonka.AlexaBusiness.SearchProfiles
+    Amazonka.AlexaBusiness.SearchRooms
+    Amazonka.AlexaBusiness.SearchSkillGroups
+    Amazonka.AlexaBusiness.SearchUsers
+    Amazonka.AlexaBusiness.SendAnnouncement
+    Amazonka.AlexaBusiness.SendInvitation
+    Amazonka.AlexaBusiness.StartDeviceSync
+    Amazonka.AlexaBusiness.StartSmartHomeApplianceDiscovery
+    Amazonka.AlexaBusiness.TagResource
+    Amazonka.AlexaBusiness.Types
+    Amazonka.AlexaBusiness.Types.AddressBook
+    Amazonka.AlexaBusiness.Types.AddressBookData
+    Amazonka.AlexaBusiness.Types.Audio
+    Amazonka.AlexaBusiness.Types.BusinessReport
+    Amazonka.AlexaBusiness.Types.BusinessReportContentRange
+    Amazonka.AlexaBusiness.Types.BusinessReportFailureCode
+    Amazonka.AlexaBusiness.Types.BusinessReportFormat
+    Amazonka.AlexaBusiness.Types.BusinessReportInterval
+    Amazonka.AlexaBusiness.Types.BusinessReportRecurrence
+    Amazonka.AlexaBusiness.Types.BusinessReportS3Location
+    Amazonka.AlexaBusiness.Types.BusinessReportSchedule
+    Amazonka.AlexaBusiness.Types.BusinessReportStatus
+    Amazonka.AlexaBusiness.Types.Category
+    Amazonka.AlexaBusiness.Types.CommsProtocol
+    Amazonka.AlexaBusiness.Types.ConferencePreference
+    Amazonka.AlexaBusiness.Types.ConferenceProvider
+    Amazonka.AlexaBusiness.Types.ConferenceProviderType
+    Amazonka.AlexaBusiness.Types.ConnectionStatus
+    Amazonka.AlexaBusiness.Types.Contact
+    Amazonka.AlexaBusiness.Types.ContactData
+    Amazonka.AlexaBusiness.Types.Content
+    Amazonka.AlexaBusiness.Types.CreateEndOfMeetingReminder
+    Amazonka.AlexaBusiness.Types.CreateInstantBooking
+    Amazonka.AlexaBusiness.Types.CreateMeetingRoomConfiguration
+    Amazonka.AlexaBusiness.Types.CreateRequireCheckIn
+    Amazonka.AlexaBusiness.Types.DeveloperInfo
+    Amazonka.AlexaBusiness.Types.Device
+    Amazonka.AlexaBusiness.Types.DeviceData
+    Amazonka.AlexaBusiness.Types.DeviceEvent
+    Amazonka.AlexaBusiness.Types.DeviceEventType
+    Amazonka.AlexaBusiness.Types.DeviceNetworkProfileInfo
+    Amazonka.AlexaBusiness.Types.DeviceStatus
+    Amazonka.AlexaBusiness.Types.DeviceStatusDetail
+    Amazonka.AlexaBusiness.Types.DeviceStatusDetailCode
+    Amazonka.AlexaBusiness.Types.DeviceStatusInfo
+    Amazonka.AlexaBusiness.Types.DeviceUsageType
+    Amazonka.AlexaBusiness.Types.DistanceUnit
+    Amazonka.AlexaBusiness.Types.EnablementType
+    Amazonka.AlexaBusiness.Types.EnablementTypeFilter
+    Amazonka.AlexaBusiness.Types.EndOfMeetingReminder
+    Amazonka.AlexaBusiness.Types.EndOfMeetingReminderType
+    Amazonka.AlexaBusiness.Types.EnrollmentStatus
+    Amazonka.AlexaBusiness.Types.Feature
+    Amazonka.AlexaBusiness.Types.Filter
+    Amazonka.AlexaBusiness.Types.Gateway
+    Amazonka.AlexaBusiness.Types.GatewayGroup
+    Amazonka.AlexaBusiness.Types.GatewayGroupSummary
+    Amazonka.AlexaBusiness.Types.GatewaySummary
+    Amazonka.AlexaBusiness.Types.InstantBooking
+    Amazonka.AlexaBusiness.Types.IPDialIn
+    Amazonka.AlexaBusiness.Types.Locale
+    Amazonka.AlexaBusiness.Types.MeetingRoomConfiguration
+    Amazonka.AlexaBusiness.Types.MeetingSetting
+    Amazonka.AlexaBusiness.Types.NetworkEapMethod
+    Amazonka.AlexaBusiness.Types.NetworkProfile
+    Amazonka.AlexaBusiness.Types.NetworkProfileData
+    Amazonka.AlexaBusiness.Types.NetworkSecurityType
+    Amazonka.AlexaBusiness.Types.PhoneNumber
+    Amazonka.AlexaBusiness.Types.PhoneNumberType
+    Amazonka.AlexaBusiness.Types.Profile
+    Amazonka.AlexaBusiness.Types.ProfileData
+    Amazonka.AlexaBusiness.Types.PSTNDialIn
+    Amazonka.AlexaBusiness.Types.RequireCheckIn
+    Amazonka.AlexaBusiness.Types.RequirePin
+    Amazonka.AlexaBusiness.Types.Room
+    Amazonka.AlexaBusiness.Types.RoomData
+    Amazonka.AlexaBusiness.Types.RoomSkillParameter
+    Amazonka.AlexaBusiness.Types.SipAddress
+    Amazonka.AlexaBusiness.Types.SipType
+    Amazonka.AlexaBusiness.Types.SkillDetails
+    Amazonka.AlexaBusiness.Types.SkillGroup
+    Amazonka.AlexaBusiness.Types.SkillGroupData
+    Amazonka.AlexaBusiness.Types.SkillsStoreSkill
+    Amazonka.AlexaBusiness.Types.SkillSummary
+    Amazonka.AlexaBusiness.Types.SkillType
+    Amazonka.AlexaBusiness.Types.SkillTypeFilter
+    Amazonka.AlexaBusiness.Types.SmartHomeAppliance
+    Amazonka.AlexaBusiness.Types.Sort
+    Amazonka.AlexaBusiness.Types.SortValue
+    Amazonka.AlexaBusiness.Types.Ssml
+    Amazonka.AlexaBusiness.Types.Tag
+    Amazonka.AlexaBusiness.Types.TemperatureUnit
+    Amazonka.AlexaBusiness.Types.TextMessage
+    Amazonka.AlexaBusiness.Types.UpdateEndOfMeetingReminder
+    Amazonka.AlexaBusiness.Types.UpdateInstantBooking
+    Amazonka.AlexaBusiness.Types.UpdateMeetingRoomConfiguration
+    Amazonka.AlexaBusiness.Types.UpdateRequireCheckIn
+    Amazonka.AlexaBusiness.Types.UserData
+    Amazonka.AlexaBusiness.Types.WakeWord
+    Amazonka.AlexaBusiness.UntagResource
+    Amazonka.AlexaBusiness.UpdateAddressBook
+    Amazonka.AlexaBusiness.UpdateBusinessReportSchedule
+    Amazonka.AlexaBusiness.UpdateConferenceProvider
+    Amazonka.AlexaBusiness.UpdateContact
+    Amazonka.AlexaBusiness.UpdateDevice
+    Amazonka.AlexaBusiness.UpdateGateway
+    Amazonka.AlexaBusiness.UpdateGatewayGroup
+    Amazonka.AlexaBusiness.UpdateNetworkProfile
+    Amazonka.AlexaBusiness.UpdateProfile
+    Amazonka.AlexaBusiness.UpdateRoom
+    Amazonka.AlexaBusiness.UpdateSkillGroup
+    Amazonka.AlexaBusiness.Waiters
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , base          >= 4.7     && < 5
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
 
 test-suite amazonka-alexa-business-test
-    type:              exitcode-stdio-1.0
-    default-language:  Haskell2010
-    hs-source-dirs:    test
-    main-is:           Main.hs
-
-    ghc-options:       -Wall -threaded
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
 
-    -- This section is encoded by the template and any modules added by
-    -- hand outside these namespaces will not correctly be added to the
-    -- distribution package.
-    other-modules:
-          Test.AWS.AlexaBusiness
-        , Test.AWS.Gen.AlexaBusiness
-        , Test.AWS.AlexaBusiness.Internal
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.AlexaBusiness
+    Test.Amazonka.AlexaBusiness.Internal
+    Test.Amazonka.Gen.AlexaBusiness
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-alexa-business
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-alexa-business
+    , amazonka-core            >=2.0 && <2.1
+    , amazonka-test            >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/ApproveSkill.yaml b/fixture/ApproveSkill.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ApproveSkill.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ApproveSkillResponse.proto b/fixture/ApproveSkillResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ApproveSkillResponse.proto
diff --git a/fixture/AssociateDeviceWithNetworkProfile.yaml b/fixture/AssociateDeviceWithNetworkProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateDeviceWithNetworkProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateDeviceWithNetworkProfileResponse.proto b/fixture/AssociateDeviceWithNetworkProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateDeviceWithNetworkProfileResponse.proto
diff --git a/fixture/AssociateSkillWithSkillGroup.yaml b/fixture/AssociateSkillWithSkillGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateSkillWithSkillGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateSkillWithSkillGroupResponse.proto b/fixture/AssociateSkillWithSkillGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateSkillWithSkillGroupResponse.proto
diff --git a/fixture/AssociateSkillWithUsers.yaml b/fixture/AssociateSkillWithUsers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateSkillWithUsers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateSkillWithUsersResponse.proto b/fixture/AssociateSkillWithUsersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateSkillWithUsersResponse.proto
diff --git a/fixture/CreateBusinessReportSchedule.yaml b/fixture/CreateBusinessReportSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBusinessReportSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateBusinessReportScheduleResponse.proto b/fixture/CreateBusinessReportScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBusinessReportScheduleResponse.proto
diff --git a/fixture/CreateConferenceProvider.yaml b/fixture/CreateConferenceProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConferenceProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateConferenceProviderResponse.proto b/fixture/CreateConferenceProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConferenceProviderResponse.proto
diff --git a/fixture/CreateGatewayGroup.yaml b/fixture/CreateGatewayGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGatewayGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateGatewayGroupResponse.proto b/fixture/CreateGatewayGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGatewayGroupResponse.proto
diff --git a/fixture/CreateNetworkProfile.yaml b/fixture/CreateNetworkProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkProfileResponse.proto b/fixture/CreateNetworkProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkProfileResponse.proto
diff --git a/fixture/DeleteBusinessReportSchedule.yaml b/fixture/DeleteBusinessReportSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBusinessReportSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteBusinessReportScheduleResponse.proto b/fixture/DeleteBusinessReportScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBusinessReportScheduleResponse.proto
diff --git a/fixture/DeleteConferenceProvider.yaml b/fixture/DeleteConferenceProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConferenceProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteConferenceProviderResponse.proto b/fixture/DeleteConferenceProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConferenceProviderResponse.proto
diff --git a/fixture/DeleteDevice.yaml b/fixture/DeleteDevice.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDevice.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDeviceResponse.proto b/fixture/DeleteDeviceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeviceResponse.proto
diff --git a/fixture/DeleteDeviceUsageData.yaml b/fixture/DeleteDeviceUsageData.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeviceUsageData.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDeviceUsageDataResponse.proto b/fixture/DeleteDeviceUsageDataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeviceUsageDataResponse.proto
diff --git a/fixture/DeleteGatewayGroup.yaml b/fixture/DeleteGatewayGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteGatewayGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteGatewayGroupResponse.proto b/fixture/DeleteGatewayGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteGatewayGroupResponse.proto
diff --git a/fixture/DeleteNetworkProfile.yaml b/fixture/DeleteNetworkProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkProfileResponse.proto b/fixture/DeleteNetworkProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkProfileResponse.proto
diff --git a/fixture/DeleteSkillAuthorization.yaml b/fixture/DeleteSkillAuthorization.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSkillAuthorization.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteSkillAuthorizationResponse.proto b/fixture/DeleteSkillAuthorizationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSkillAuthorizationResponse.proto
diff --git a/fixture/DisassociateSkillFromSkillGroup.yaml b/fixture/DisassociateSkillFromSkillGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateSkillFromSkillGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateSkillFromSkillGroupResponse.proto b/fixture/DisassociateSkillFromSkillGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateSkillFromSkillGroupResponse.proto
diff --git a/fixture/DisassociateSkillFromUsers.yaml b/fixture/DisassociateSkillFromUsers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateSkillFromUsers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateSkillFromUsersResponse.proto b/fixture/DisassociateSkillFromUsersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateSkillFromUsersResponse.proto
diff --git a/fixture/ForgetSmartHomeAppliances.yaml b/fixture/ForgetSmartHomeAppliances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ForgetSmartHomeAppliances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ForgetSmartHomeAppliancesResponse.proto b/fixture/ForgetSmartHomeAppliancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ForgetSmartHomeAppliancesResponse.proto
diff --git a/fixture/GetConferencePreference.yaml b/fixture/GetConferencePreference.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConferencePreference.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetConferencePreferenceResponse.proto b/fixture/GetConferencePreferenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConferencePreferenceResponse.proto
diff --git a/fixture/GetConferenceProvider.yaml b/fixture/GetConferenceProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConferenceProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetConferenceProviderResponse.proto b/fixture/GetConferenceProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConferenceProviderResponse.proto
diff --git a/fixture/GetGateway.yaml b/fixture/GetGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetGatewayGroup.yaml b/fixture/GetGatewayGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGatewayGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetGatewayGroupResponse.proto b/fixture/GetGatewayGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGatewayGroupResponse.proto
diff --git a/fixture/GetGatewayResponse.proto b/fixture/GetGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGatewayResponse.proto
diff --git a/fixture/GetInvitationConfiguration.yaml b/fixture/GetInvitationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetInvitationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetInvitationConfigurationResponse.proto b/fixture/GetInvitationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetInvitationConfigurationResponse.proto
diff --git a/fixture/GetNetworkProfile.yaml b/fixture/GetNetworkProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetNetworkProfileResponse.proto b/fixture/GetNetworkProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkProfileResponse.proto
diff --git a/fixture/ListBusinessReportSchedules.yaml b/fixture/ListBusinessReportSchedules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBusinessReportSchedules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListBusinessReportSchedulesResponse.proto b/fixture/ListBusinessReportSchedulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBusinessReportSchedulesResponse.proto
diff --git a/fixture/ListConferenceProviders.yaml b/fixture/ListConferenceProviders.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListConferenceProviders.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListConferenceProvidersResponse.proto b/fixture/ListConferenceProvidersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListConferenceProvidersResponse.proto
diff --git a/fixture/ListGatewayGroups.yaml b/fixture/ListGatewayGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListGatewayGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListGatewayGroupsResponse.proto b/fixture/ListGatewayGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListGatewayGroupsResponse.proto
diff --git a/fixture/ListGateways.yaml b/fixture/ListGateways.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListGatewaysResponse.proto b/fixture/ListGatewaysResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListGatewaysResponse.proto
diff --git a/fixture/ListSkillsStoreCategories.yaml b/fixture/ListSkillsStoreCategories.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSkillsStoreCategories.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSkillsStoreCategoriesResponse.proto b/fixture/ListSkillsStoreCategoriesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSkillsStoreCategoriesResponse.proto
diff --git a/fixture/ListSkillsStoreSkillsByCategory.yaml b/fixture/ListSkillsStoreSkillsByCategory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSkillsStoreSkillsByCategory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSkillsStoreSkillsByCategoryResponse.proto b/fixture/ListSkillsStoreSkillsByCategoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSkillsStoreSkillsByCategoryResponse.proto
diff --git a/fixture/ListSmartHomeAppliances.yaml b/fixture/ListSmartHomeAppliances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSmartHomeAppliances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSmartHomeAppliancesResponse.proto b/fixture/ListSmartHomeAppliancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSmartHomeAppliancesResponse.proto
diff --git a/fixture/PutConferencePreference.yaml b/fixture/PutConferencePreference.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutConferencePreference.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutConferencePreferenceResponse.proto b/fixture/PutConferencePreferenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutConferencePreferenceResponse.proto
diff --git a/fixture/PutInvitationConfiguration.yaml b/fixture/PutInvitationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutInvitationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutInvitationConfigurationResponse.proto b/fixture/PutInvitationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutInvitationConfigurationResponse.proto
diff --git a/fixture/PutSkillAuthorization.yaml b/fixture/PutSkillAuthorization.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutSkillAuthorization.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutSkillAuthorizationResponse.proto b/fixture/PutSkillAuthorizationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutSkillAuthorizationResponse.proto
diff --git a/fixture/RegisterAVSDevice.yaml b/fixture/RegisterAVSDevice.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterAVSDevice.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterAVSDeviceResponse.proto b/fixture/RegisterAVSDeviceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterAVSDeviceResponse.proto
diff --git a/fixture/RejectSkill.yaml b/fixture/RejectSkill.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RejectSkill.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RejectSkillResponse.proto b/fixture/RejectSkillResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RejectSkillResponse.proto
diff --git a/fixture/SearchNetworkProfiles.yaml b/fixture/SearchNetworkProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchNetworkProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SearchNetworkProfilesResponse.proto b/fixture/SearchNetworkProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchNetworkProfilesResponse.proto
diff --git a/fixture/SendAnnouncement.yaml b/fixture/SendAnnouncement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendAnnouncement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SendAnnouncementResponse.proto b/fixture/SendAnnouncementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendAnnouncementResponse.proto
diff --git a/fixture/StartSmartHomeApplianceDiscovery.yaml b/fixture/StartSmartHomeApplianceDiscovery.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartSmartHomeApplianceDiscovery.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartSmartHomeApplianceDiscoveryResponse.proto b/fixture/StartSmartHomeApplianceDiscoveryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartSmartHomeApplianceDiscoveryResponse.proto
diff --git a/fixture/UpdateBusinessReportSchedule.yaml b/fixture/UpdateBusinessReportSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBusinessReportSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateBusinessReportScheduleResponse.proto b/fixture/UpdateBusinessReportScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBusinessReportScheduleResponse.proto
diff --git a/fixture/UpdateConferenceProvider.yaml b/fixture/UpdateConferenceProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConferenceProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateConferenceProviderResponse.proto b/fixture/UpdateConferenceProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConferenceProviderResponse.proto
diff --git a/fixture/UpdateGateway.yaml b/fixture/UpdateGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateGatewayGroup.yaml b/fixture/UpdateGatewayGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGatewayGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateGatewayGroupResponse.proto b/fixture/UpdateGatewayGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGatewayGroupResponse.proto
diff --git a/fixture/UpdateGatewayResponse.proto b/fixture/UpdateGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGatewayResponse.proto
diff --git a/fixture/UpdateNetworkProfile.yaml b/fixture/UpdateNetworkProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNetworkProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/a4b/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  a4b.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateNetworkProfileResponse.proto b/fixture/UpdateNetworkProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNetworkProfileResponse.proto
diff --git a/gen/Amazonka/AlexaBusiness.hs b/gen/Amazonka/AlexaBusiness.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness.hs
@@ -0,0 +1,1095 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.AlexaBusiness
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2017-11-09@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Alexa for Business helps you use Alexa in your organization. Alexa for
+-- Business provides you with the tools to manage Alexa devices, enroll
+-- your users, and assign skills, at scale. You can build your own
+-- context-aware voice skills using the Alexa Skills Kit and the Alexa for
+-- Business API operations. You can also make these available as private
+-- skills for your organization. Alexa for Business makes it efficient to
+-- voice-enable your products and services, thus providing context-aware
+-- voice experiences for your customers. Device makers building with the
+-- Alexa Voice Service (AVS) can create fully integrated solutions,
+-- register their products with Alexa for Business, and manage them as
+-- shared devices in their organization.
+module Amazonka.AlexaBusiness
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AlreadyExistsException
+    _AlreadyExistsException,
+
+    -- ** ConcurrentModificationException
+    _ConcurrentModificationException,
+
+    -- ** DeviceNotRegisteredException
+    _DeviceNotRegisteredException,
+
+    -- ** InvalidCertificateAuthorityException
+    _InvalidCertificateAuthorityException,
+
+    -- ** InvalidDeviceException
+    _InvalidDeviceException,
+
+    -- ** InvalidSecretsManagerResourceException
+    _InvalidSecretsManagerResourceException,
+
+    -- ** InvalidServiceLinkedRoleStateException
+    _InvalidServiceLinkedRoleStateException,
+
+    -- ** InvalidUserStatusException
+    _InvalidUserStatusException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** NameInUseException
+    _NameInUseException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ResourceAssociatedException
+    _ResourceAssociatedException,
+
+    -- ** ResourceInUseException
+    _ResourceInUseException,
+
+    -- ** SkillNotLinkedException
+    _SkillNotLinkedException,
+
+    -- ** UnauthorizedException
+    _UnauthorizedException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** ApproveSkill
+    ApproveSkill (ApproveSkill'),
+    newApproveSkill,
+    ApproveSkillResponse (ApproveSkillResponse'),
+    newApproveSkillResponse,
+
+    -- ** AssociateContactWithAddressBook
+    AssociateContactWithAddressBook (AssociateContactWithAddressBook'),
+    newAssociateContactWithAddressBook,
+    AssociateContactWithAddressBookResponse (AssociateContactWithAddressBookResponse'),
+    newAssociateContactWithAddressBookResponse,
+
+    -- ** AssociateDeviceWithNetworkProfile
+    AssociateDeviceWithNetworkProfile (AssociateDeviceWithNetworkProfile'),
+    newAssociateDeviceWithNetworkProfile,
+    AssociateDeviceWithNetworkProfileResponse (AssociateDeviceWithNetworkProfileResponse'),
+    newAssociateDeviceWithNetworkProfileResponse,
+
+    -- ** AssociateDeviceWithRoom
+    AssociateDeviceWithRoom (AssociateDeviceWithRoom'),
+    newAssociateDeviceWithRoom,
+    AssociateDeviceWithRoomResponse (AssociateDeviceWithRoomResponse'),
+    newAssociateDeviceWithRoomResponse,
+
+    -- ** AssociateSkillGroupWithRoom
+    AssociateSkillGroupWithRoom (AssociateSkillGroupWithRoom'),
+    newAssociateSkillGroupWithRoom,
+    AssociateSkillGroupWithRoomResponse (AssociateSkillGroupWithRoomResponse'),
+    newAssociateSkillGroupWithRoomResponse,
+
+    -- ** AssociateSkillWithSkillGroup
+    AssociateSkillWithSkillGroup (AssociateSkillWithSkillGroup'),
+    newAssociateSkillWithSkillGroup,
+    AssociateSkillWithSkillGroupResponse (AssociateSkillWithSkillGroupResponse'),
+    newAssociateSkillWithSkillGroupResponse,
+
+    -- ** AssociateSkillWithUsers
+    AssociateSkillWithUsers (AssociateSkillWithUsers'),
+    newAssociateSkillWithUsers,
+    AssociateSkillWithUsersResponse (AssociateSkillWithUsersResponse'),
+    newAssociateSkillWithUsersResponse,
+
+    -- ** CreateAddressBook
+    CreateAddressBook (CreateAddressBook'),
+    newCreateAddressBook,
+    CreateAddressBookResponse (CreateAddressBookResponse'),
+    newCreateAddressBookResponse,
+
+    -- ** CreateBusinessReportSchedule
+    CreateBusinessReportSchedule (CreateBusinessReportSchedule'),
+    newCreateBusinessReportSchedule,
+    CreateBusinessReportScheduleResponse (CreateBusinessReportScheduleResponse'),
+    newCreateBusinessReportScheduleResponse,
+
+    -- ** CreateConferenceProvider
+    CreateConferenceProvider (CreateConferenceProvider'),
+    newCreateConferenceProvider,
+    CreateConferenceProviderResponse (CreateConferenceProviderResponse'),
+    newCreateConferenceProviderResponse,
+
+    -- ** CreateContact
+    CreateContact (CreateContact'),
+    newCreateContact,
+    CreateContactResponse (CreateContactResponse'),
+    newCreateContactResponse,
+
+    -- ** CreateGatewayGroup
+    CreateGatewayGroup (CreateGatewayGroup'),
+    newCreateGatewayGroup,
+    CreateGatewayGroupResponse (CreateGatewayGroupResponse'),
+    newCreateGatewayGroupResponse,
+
+    -- ** CreateNetworkProfile
+    CreateNetworkProfile (CreateNetworkProfile'),
+    newCreateNetworkProfile,
+    CreateNetworkProfileResponse (CreateNetworkProfileResponse'),
+    newCreateNetworkProfileResponse,
+
+    -- ** CreateProfile
+    CreateProfile (CreateProfile'),
+    newCreateProfile,
+    CreateProfileResponse (CreateProfileResponse'),
+    newCreateProfileResponse,
+
+    -- ** CreateRoom
+    CreateRoom (CreateRoom'),
+    newCreateRoom,
+    CreateRoomResponse (CreateRoomResponse'),
+    newCreateRoomResponse,
+
+    -- ** CreateSkillGroup
+    CreateSkillGroup (CreateSkillGroup'),
+    newCreateSkillGroup,
+    CreateSkillGroupResponse (CreateSkillGroupResponse'),
+    newCreateSkillGroupResponse,
+
+    -- ** CreateUser
+    CreateUser (CreateUser'),
+    newCreateUser,
+    CreateUserResponse (CreateUserResponse'),
+    newCreateUserResponse,
+
+    -- ** DeleteAddressBook
+    DeleteAddressBook (DeleteAddressBook'),
+    newDeleteAddressBook,
+    DeleteAddressBookResponse (DeleteAddressBookResponse'),
+    newDeleteAddressBookResponse,
+
+    -- ** DeleteBusinessReportSchedule
+    DeleteBusinessReportSchedule (DeleteBusinessReportSchedule'),
+    newDeleteBusinessReportSchedule,
+    DeleteBusinessReportScheduleResponse (DeleteBusinessReportScheduleResponse'),
+    newDeleteBusinessReportScheduleResponse,
+
+    -- ** DeleteConferenceProvider
+    DeleteConferenceProvider (DeleteConferenceProvider'),
+    newDeleteConferenceProvider,
+    DeleteConferenceProviderResponse (DeleteConferenceProviderResponse'),
+    newDeleteConferenceProviderResponse,
+
+    -- ** DeleteContact
+    DeleteContact (DeleteContact'),
+    newDeleteContact,
+    DeleteContactResponse (DeleteContactResponse'),
+    newDeleteContactResponse,
+
+    -- ** DeleteDevice
+    DeleteDevice (DeleteDevice'),
+    newDeleteDevice,
+    DeleteDeviceResponse (DeleteDeviceResponse'),
+    newDeleteDeviceResponse,
+
+    -- ** DeleteDeviceUsageData
+    DeleteDeviceUsageData (DeleteDeviceUsageData'),
+    newDeleteDeviceUsageData,
+    DeleteDeviceUsageDataResponse (DeleteDeviceUsageDataResponse'),
+    newDeleteDeviceUsageDataResponse,
+
+    -- ** DeleteGatewayGroup
+    DeleteGatewayGroup (DeleteGatewayGroup'),
+    newDeleteGatewayGroup,
+    DeleteGatewayGroupResponse (DeleteGatewayGroupResponse'),
+    newDeleteGatewayGroupResponse,
+
+    -- ** DeleteNetworkProfile
+    DeleteNetworkProfile (DeleteNetworkProfile'),
+    newDeleteNetworkProfile,
+    DeleteNetworkProfileResponse (DeleteNetworkProfileResponse'),
+    newDeleteNetworkProfileResponse,
+
+    -- ** DeleteProfile
+    DeleteProfile (DeleteProfile'),
+    newDeleteProfile,
+    DeleteProfileResponse (DeleteProfileResponse'),
+    newDeleteProfileResponse,
+
+    -- ** DeleteRoom
+    DeleteRoom (DeleteRoom'),
+    newDeleteRoom,
+    DeleteRoomResponse (DeleteRoomResponse'),
+    newDeleteRoomResponse,
+
+    -- ** DeleteRoomSkillParameter
+    DeleteRoomSkillParameter (DeleteRoomSkillParameter'),
+    newDeleteRoomSkillParameter,
+    DeleteRoomSkillParameterResponse (DeleteRoomSkillParameterResponse'),
+    newDeleteRoomSkillParameterResponse,
+
+    -- ** DeleteSkillAuthorization
+    DeleteSkillAuthorization (DeleteSkillAuthorization'),
+    newDeleteSkillAuthorization,
+    DeleteSkillAuthorizationResponse (DeleteSkillAuthorizationResponse'),
+    newDeleteSkillAuthorizationResponse,
+
+    -- ** DeleteSkillGroup
+    DeleteSkillGroup (DeleteSkillGroup'),
+    newDeleteSkillGroup,
+    DeleteSkillGroupResponse (DeleteSkillGroupResponse'),
+    newDeleteSkillGroupResponse,
+
+    -- ** DeleteUser
+    DeleteUser (DeleteUser'),
+    newDeleteUser,
+    DeleteUserResponse (DeleteUserResponse'),
+    newDeleteUserResponse,
+
+    -- ** DisassociateContactFromAddressBook
+    DisassociateContactFromAddressBook (DisassociateContactFromAddressBook'),
+    newDisassociateContactFromAddressBook,
+    DisassociateContactFromAddressBookResponse (DisassociateContactFromAddressBookResponse'),
+    newDisassociateContactFromAddressBookResponse,
+
+    -- ** DisassociateDeviceFromRoom
+    DisassociateDeviceFromRoom (DisassociateDeviceFromRoom'),
+    newDisassociateDeviceFromRoom,
+    DisassociateDeviceFromRoomResponse (DisassociateDeviceFromRoomResponse'),
+    newDisassociateDeviceFromRoomResponse,
+
+    -- ** DisassociateSkillFromSkillGroup
+    DisassociateSkillFromSkillGroup (DisassociateSkillFromSkillGroup'),
+    newDisassociateSkillFromSkillGroup,
+    DisassociateSkillFromSkillGroupResponse (DisassociateSkillFromSkillGroupResponse'),
+    newDisassociateSkillFromSkillGroupResponse,
+
+    -- ** DisassociateSkillFromUsers
+    DisassociateSkillFromUsers (DisassociateSkillFromUsers'),
+    newDisassociateSkillFromUsers,
+    DisassociateSkillFromUsersResponse (DisassociateSkillFromUsersResponse'),
+    newDisassociateSkillFromUsersResponse,
+
+    -- ** DisassociateSkillGroupFromRoom
+    DisassociateSkillGroupFromRoom (DisassociateSkillGroupFromRoom'),
+    newDisassociateSkillGroupFromRoom,
+    DisassociateSkillGroupFromRoomResponse (DisassociateSkillGroupFromRoomResponse'),
+    newDisassociateSkillGroupFromRoomResponse,
+
+    -- ** ForgetSmartHomeAppliances
+    ForgetSmartHomeAppliances (ForgetSmartHomeAppliances'),
+    newForgetSmartHomeAppliances,
+    ForgetSmartHomeAppliancesResponse (ForgetSmartHomeAppliancesResponse'),
+    newForgetSmartHomeAppliancesResponse,
+
+    -- ** GetAddressBook
+    GetAddressBook (GetAddressBook'),
+    newGetAddressBook,
+    GetAddressBookResponse (GetAddressBookResponse'),
+    newGetAddressBookResponse,
+
+    -- ** GetConferencePreference
+    GetConferencePreference (GetConferencePreference'),
+    newGetConferencePreference,
+    GetConferencePreferenceResponse (GetConferencePreferenceResponse'),
+    newGetConferencePreferenceResponse,
+
+    -- ** GetConferenceProvider
+    GetConferenceProvider (GetConferenceProvider'),
+    newGetConferenceProvider,
+    GetConferenceProviderResponse (GetConferenceProviderResponse'),
+    newGetConferenceProviderResponse,
+
+    -- ** GetContact
+    GetContact (GetContact'),
+    newGetContact,
+    GetContactResponse (GetContactResponse'),
+    newGetContactResponse,
+
+    -- ** GetDevice
+    GetDevice (GetDevice'),
+    newGetDevice,
+    GetDeviceResponse (GetDeviceResponse'),
+    newGetDeviceResponse,
+
+    -- ** GetGateway
+    GetGateway (GetGateway'),
+    newGetGateway,
+    GetGatewayResponse (GetGatewayResponse'),
+    newGetGatewayResponse,
+
+    -- ** GetGatewayGroup
+    GetGatewayGroup (GetGatewayGroup'),
+    newGetGatewayGroup,
+    GetGatewayGroupResponse (GetGatewayGroupResponse'),
+    newGetGatewayGroupResponse,
+
+    -- ** GetInvitationConfiguration
+    GetInvitationConfiguration (GetInvitationConfiguration'),
+    newGetInvitationConfiguration,
+    GetInvitationConfigurationResponse (GetInvitationConfigurationResponse'),
+    newGetInvitationConfigurationResponse,
+
+    -- ** GetNetworkProfile
+    GetNetworkProfile (GetNetworkProfile'),
+    newGetNetworkProfile,
+    GetNetworkProfileResponse (GetNetworkProfileResponse'),
+    newGetNetworkProfileResponse,
+
+    -- ** GetProfile
+    GetProfile (GetProfile'),
+    newGetProfile,
+    GetProfileResponse (GetProfileResponse'),
+    newGetProfileResponse,
+
+    -- ** GetRoom
+    GetRoom (GetRoom'),
+    newGetRoom,
+    GetRoomResponse (GetRoomResponse'),
+    newGetRoomResponse,
+
+    -- ** GetRoomSkillParameter
+    GetRoomSkillParameter (GetRoomSkillParameter'),
+    newGetRoomSkillParameter,
+    GetRoomSkillParameterResponse (GetRoomSkillParameterResponse'),
+    newGetRoomSkillParameterResponse,
+
+    -- ** GetSkillGroup
+    GetSkillGroup (GetSkillGroup'),
+    newGetSkillGroup,
+    GetSkillGroupResponse (GetSkillGroupResponse'),
+    newGetSkillGroupResponse,
+
+    -- ** ListBusinessReportSchedules (Paginated)
+    ListBusinessReportSchedules (ListBusinessReportSchedules'),
+    newListBusinessReportSchedules,
+    ListBusinessReportSchedulesResponse (ListBusinessReportSchedulesResponse'),
+    newListBusinessReportSchedulesResponse,
+
+    -- ** ListConferenceProviders (Paginated)
+    ListConferenceProviders (ListConferenceProviders'),
+    newListConferenceProviders,
+    ListConferenceProvidersResponse (ListConferenceProvidersResponse'),
+    newListConferenceProvidersResponse,
+
+    -- ** ListDeviceEvents (Paginated)
+    ListDeviceEvents (ListDeviceEvents'),
+    newListDeviceEvents,
+    ListDeviceEventsResponse (ListDeviceEventsResponse'),
+    newListDeviceEventsResponse,
+
+    -- ** ListGatewayGroups
+    ListGatewayGroups (ListGatewayGroups'),
+    newListGatewayGroups,
+    ListGatewayGroupsResponse (ListGatewayGroupsResponse'),
+    newListGatewayGroupsResponse,
+
+    -- ** ListGateways
+    ListGateways (ListGateways'),
+    newListGateways,
+    ListGatewaysResponse (ListGatewaysResponse'),
+    newListGatewaysResponse,
+
+    -- ** ListSkills (Paginated)
+    ListSkills (ListSkills'),
+    newListSkills,
+    ListSkillsResponse (ListSkillsResponse'),
+    newListSkillsResponse,
+
+    -- ** ListSkillsStoreCategories (Paginated)
+    ListSkillsStoreCategories (ListSkillsStoreCategories'),
+    newListSkillsStoreCategories,
+    ListSkillsStoreCategoriesResponse (ListSkillsStoreCategoriesResponse'),
+    newListSkillsStoreCategoriesResponse,
+
+    -- ** ListSkillsStoreSkillsByCategory (Paginated)
+    ListSkillsStoreSkillsByCategory (ListSkillsStoreSkillsByCategory'),
+    newListSkillsStoreSkillsByCategory,
+    ListSkillsStoreSkillsByCategoryResponse (ListSkillsStoreSkillsByCategoryResponse'),
+    newListSkillsStoreSkillsByCategoryResponse,
+
+    -- ** ListSmartHomeAppliances (Paginated)
+    ListSmartHomeAppliances (ListSmartHomeAppliances'),
+    newListSmartHomeAppliances,
+    ListSmartHomeAppliancesResponse (ListSmartHomeAppliancesResponse'),
+    newListSmartHomeAppliancesResponse,
+
+    -- ** ListTags (Paginated)
+    ListTags (ListTags'),
+    newListTags,
+    ListTagsResponse (ListTagsResponse'),
+    newListTagsResponse,
+
+    -- ** PutConferencePreference
+    PutConferencePreference (PutConferencePreference'),
+    newPutConferencePreference,
+    PutConferencePreferenceResponse (PutConferencePreferenceResponse'),
+    newPutConferencePreferenceResponse,
+
+    -- ** PutInvitationConfiguration
+    PutInvitationConfiguration (PutInvitationConfiguration'),
+    newPutInvitationConfiguration,
+    PutInvitationConfigurationResponse (PutInvitationConfigurationResponse'),
+    newPutInvitationConfigurationResponse,
+
+    -- ** PutRoomSkillParameter
+    PutRoomSkillParameter (PutRoomSkillParameter'),
+    newPutRoomSkillParameter,
+    PutRoomSkillParameterResponse (PutRoomSkillParameterResponse'),
+    newPutRoomSkillParameterResponse,
+
+    -- ** PutSkillAuthorization
+    PutSkillAuthorization (PutSkillAuthorization'),
+    newPutSkillAuthorization,
+    PutSkillAuthorizationResponse (PutSkillAuthorizationResponse'),
+    newPutSkillAuthorizationResponse,
+
+    -- ** RegisterAVSDevice
+    RegisterAVSDevice (RegisterAVSDevice'),
+    newRegisterAVSDevice,
+    RegisterAVSDeviceResponse (RegisterAVSDeviceResponse'),
+    newRegisterAVSDeviceResponse,
+
+    -- ** RejectSkill
+    RejectSkill (RejectSkill'),
+    newRejectSkill,
+    RejectSkillResponse (RejectSkillResponse'),
+    newRejectSkillResponse,
+
+    -- ** ResolveRoom
+    ResolveRoom (ResolveRoom'),
+    newResolveRoom,
+    ResolveRoomResponse (ResolveRoomResponse'),
+    newResolveRoomResponse,
+
+    -- ** RevokeInvitation
+    RevokeInvitation (RevokeInvitation'),
+    newRevokeInvitation,
+    RevokeInvitationResponse (RevokeInvitationResponse'),
+    newRevokeInvitationResponse,
+
+    -- ** SearchAddressBooks
+    SearchAddressBooks (SearchAddressBooks'),
+    newSearchAddressBooks,
+    SearchAddressBooksResponse (SearchAddressBooksResponse'),
+    newSearchAddressBooksResponse,
+
+    -- ** SearchContacts
+    SearchContacts (SearchContacts'),
+    newSearchContacts,
+    SearchContactsResponse (SearchContactsResponse'),
+    newSearchContactsResponse,
+
+    -- ** SearchDevices (Paginated)
+    SearchDevices (SearchDevices'),
+    newSearchDevices,
+    SearchDevicesResponse (SearchDevicesResponse'),
+    newSearchDevicesResponse,
+
+    -- ** SearchNetworkProfiles
+    SearchNetworkProfiles (SearchNetworkProfiles'),
+    newSearchNetworkProfiles,
+    SearchNetworkProfilesResponse (SearchNetworkProfilesResponse'),
+    newSearchNetworkProfilesResponse,
+
+    -- ** SearchProfiles (Paginated)
+    SearchProfiles (SearchProfiles'),
+    newSearchProfiles,
+    SearchProfilesResponse (SearchProfilesResponse'),
+    newSearchProfilesResponse,
+
+    -- ** SearchRooms (Paginated)
+    SearchRooms (SearchRooms'),
+    newSearchRooms,
+    SearchRoomsResponse (SearchRoomsResponse'),
+    newSearchRoomsResponse,
+
+    -- ** SearchSkillGroups (Paginated)
+    SearchSkillGroups (SearchSkillGroups'),
+    newSearchSkillGroups,
+    SearchSkillGroupsResponse (SearchSkillGroupsResponse'),
+    newSearchSkillGroupsResponse,
+
+    -- ** SearchUsers (Paginated)
+    SearchUsers (SearchUsers'),
+    newSearchUsers,
+    SearchUsersResponse (SearchUsersResponse'),
+    newSearchUsersResponse,
+
+    -- ** SendAnnouncement
+    SendAnnouncement (SendAnnouncement'),
+    newSendAnnouncement,
+    SendAnnouncementResponse (SendAnnouncementResponse'),
+    newSendAnnouncementResponse,
+
+    -- ** SendInvitation
+    SendInvitation (SendInvitation'),
+    newSendInvitation,
+    SendInvitationResponse (SendInvitationResponse'),
+    newSendInvitationResponse,
+
+    -- ** StartDeviceSync
+    StartDeviceSync (StartDeviceSync'),
+    newStartDeviceSync,
+    StartDeviceSyncResponse (StartDeviceSyncResponse'),
+    newStartDeviceSyncResponse,
+
+    -- ** StartSmartHomeApplianceDiscovery
+    StartSmartHomeApplianceDiscovery (StartSmartHomeApplianceDiscovery'),
+    newStartSmartHomeApplianceDiscovery,
+    StartSmartHomeApplianceDiscoveryResponse (StartSmartHomeApplianceDiscoveryResponse'),
+    newStartSmartHomeApplianceDiscoveryResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAddressBook
+    UpdateAddressBook (UpdateAddressBook'),
+    newUpdateAddressBook,
+    UpdateAddressBookResponse (UpdateAddressBookResponse'),
+    newUpdateAddressBookResponse,
+
+    -- ** UpdateBusinessReportSchedule
+    UpdateBusinessReportSchedule (UpdateBusinessReportSchedule'),
+    newUpdateBusinessReportSchedule,
+    UpdateBusinessReportScheduleResponse (UpdateBusinessReportScheduleResponse'),
+    newUpdateBusinessReportScheduleResponse,
+
+    -- ** UpdateConferenceProvider
+    UpdateConferenceProvider (UpdateConferenceProvider'),
+    newUpdateConferenceProvider,
+    UpdateConferenceProviderResponse (UpdateConferenceProviderResponse'),
+    newUpdateConferenceProviderResponse,
+
+    -- ** UpdateContact
+    UpdateContact (UpdateContact'),
+    newUpdateContact,
+    UpdateContactResponse (UpdateContactResponse'),
+    newUpdateContactResponse,
+
+    -- ** UpdateDevice
+    UpdateDevice (UpdateDevice'),
+    newUpdateDevice,
+    UpdateDeviceResponse (UpdateDeviceResponse'),
+    newUpdateDeviceResponse,
+
+    -- ** UpdateGateway
+    UpdateGateway (UpdateGateway'),
+    newUpdateGateway,
+    UpdateGatewayResponse (UpdateGatewayResponse'),
+    newUpdateGatewayResponse,
+
+    -- ** UpdateGatewayGroup
+    UpdateGatewayGroup (UpdateGatewayGroup'),
+    newUpdateGatewayGroup,
+    UpdateGatewayGroupResponse (UpdateGatewayGroupResponse'),
+    newUpdateGatewayGroupResponse,
+
+    -- ** UpdateNetworkProfile
+    UpdateNetworkProfile (UpdateNetworkProfile'),
+    newUpdateNetworkProfile,
+    UpdateNetworkProfileResponse (UpdateNetworkProfileResponse'),
+    newUpdateNetworkProfileResponse,
+
+    -- ** UpdateProfile
+    UpdateProfile (UpdateProfile'),
+    newUpdateProfile,
+    UpdateProfileResponse (UpdateProfileResponse'),
+    newUpdateProfileResponse,
+
+    -- ** UpdateRoom
+    UpdateRoom (UpdateRoom'),
+    newUpdateRoom,
+    UpdateRoomResponse (UpdateRoomResponse'),
+    newUpdateRoomResponse,
+
+    -- ** UpdateSkillGroup
+    UpdateSkillGroup (UpdateSkillGroup'),
+    newUpdateSkillGroup,
+    UpdateSkillGroupResponse (UpdateSkillGroupResponse'),
+    newUpdateSkillGroupResponse,
+
+    -- * Types
+
+    -- ** BusinessReportFailureCode
+    BusinessReportFailureCode (..),
+
+    -- ** BusinessReportFormat
+    BusinessReportFormat (..),
+
+    -- ** BusinessReportInterval
+    BusinessReportInterval (..),
+
+    -- ** BusinessReportStatus
+    BusinessReportStatus (..),
+
+    -- ** CommsProtocol
+    CommsProtocol (..),
+
+    -- ** ConferenceProviderType
+    ConferenceProviderType (..),
+
+    -- ** ConnectionStatus
+    ConnectionStatus (..),
+
+    -- ** DeviceEventType
+    DeviceEventType (..),
+
+    -- ** DeviceStatus
+    DeviceStatus (..),
+
+    -- ** DeviceStatusDetailCode
+    DeviceStatusDetailCode (..),
+
+    -- ** DeviceUsageType
+    DeviceUsageType (..),
+
+    -- ** DistanceUnit
+    DistanceUnit (..),
+
+    -- ** EnablementType
+    EnablementType (..),
+
+    -- ** EnablementTypeFilter
+    EnablementTypeFilter (..),
+
+    -- ** EndOfMeetingReminderType
+    EndOfMeetingReminderType (..),
+
+    -- ** EnrollmentStatus
+    EnrollmentStatus (..),
+
+    -- ** Feature
+    Feature (..),
+
+    -- ** Locale
+    Locale (..),
+
+    -- ** NetworkEapMethod
+    NetworkEapMethod (..),
+
+    -- ** NetworkSecurityType
+    NetworkSecurityType (..),
+
+    -- ** PhoneNumberType
+    PhoneNumberType (..),
+
+    -- ** RequirePin
+    RequirePin (..),
+
+    -- ** SipType
+    SipType (..),
+
+    -- ** SkillType
+    SkillType (..),
+
+    -- ** SkillTypeFilter
+    SkillTypeFilter (..),
+
+    -- ** SortValue
+    SortValue (..),
+
+    -- ** TemperatureUnit
+    TemperatureUnit (..),
+
+    -- ** WakeWord
+    WakeWord (..),
+
+    -- ** AddressBook
+    AddressBook (AddressBook'),
+    newAddressBook,
+
+    -- ** AddressBookData
+    AddressBookData (AddressBookData'),
+    newAddressBookData,
+
+    -- ** Audio
+    Audio (Audio'),
+    newAudio,
+
+    -- ** BusinessReport
+    BusinessReport (BusinessReport'),
+    newBusinessReport,
+
+    -- ** BusinessReportContentRange
+    BusinessReportContentRange (BusinessReportContentRange'),
+    newBusinessReportContentRange,
+
+    -- ** BusinessReportRecurrence
+    BusinessReportRecurrence (BusinessReportRecurrence'),
+    newBusinessReportRecurrence,
+
+    -- ** BusinessReportS3Location
+    BusinessReportS3Location (BusinessReportS3Location'),
+    newBusinessReportS3Location,
+
+    -- ** BusinessReportSchedule
+    BusinessReportSchedule (BusinessReportSchedule'),
+    newBusinessReportSchedule,
+
+    -- ** Category
+    Category (Category'),
+    newCategory,
+
+    -- ** ConferencePreference
+    ConferencePreference (ConferencePreference'),
+    newConferencePreference,
+
+    -- ** ConferenceProvider
+    ConferenceProvider (ConferenceProvider'),
+    newConferenceProvider,
+
+    -- ** Contact
+    Contact (Contact'),
+    newContact,
+
+    -- ** ContactData
+    ContactData (ContactData'),
+    newContactData,
+
+    -- ** Content
+    Content (Content'),
+    newContent,
+
+    -- ** CreateEndOfMeetingReminder
+    CreateEndOfMeetingReminder (CreateEndOfMeetingReminder'),
+    newCreateEndOfMeetingReminder,
+
+    -- ** CreateInstantBooking
+    CreateInstantBooking (CreateInstantBooking'),
+    newCreateInstantBooking,
+
+    -- ** CreateMeetingRoomConfiguration
+    CreateMeetingRoomConfiguration (CreateMeetingRoomConfiguration'),
+    newCreateMeetingRoomConfiguration,
+
+    -- ** CreateRequireCheckIn
+    CreateRequireCheckIn (CreateRequireCheckIn'),
+    newCreateRequireCheckIn,
+
+    -- ** DeveloperInfo
+    DeveloperInfo (DeveloperInfo'),
+    newDeveloperInfo,
+
+    -- ** Device
+    Device (Device'),
+    newDevice,
+
+    -- ** DeviceData
+    DeviceData (DeviceData'),
+    newDeviceData,
+
+    -- ** DeviceEvent
+    DeviceEvent (DeviceEvent'),
+    newDeviceEvent,
+
+    -- ** DeviceNetworkProfileInfo
+    DeviceNetworkProfileInfo (DeviceNetworkProfileInfo'),
+    newDeviceNetworkProfileInfo,
+
+    -- ** DeviceStatusDetail
+    DeviceStatusDetail (DeviceStatusDetail'),
+    newDeviceStatusDetail,
+
+    -- ** DeviceStatusInfo
+    DeviceStatusInfo (DeviceStatusInfo'),
+    newDeviceStatusInfo,
+
+    -- ** EndOfMeetingReminder
+    EndOfMeetingReminder (EndOfMeetingReminder'),
+    newEndOfMeetingReminder,
+
+    -- ** Filter
+    Filter (Filter'),
+    newFilter,
+
+    -- ** Gateway
+    Gateway (Gateway'),
+    newGateway,
+
+    -- ** GatewayGroup
+    GatewayGroup (GatewayGroup'),
+    newGatewayGroup,
+
+    -- ** GatewayGroupSummary
+    GatewayGroupSummary (GatewayGroupSummary'),
+    newGatewayGroupSummary,
+
+    -- ** GatewaySummary
+    GatewaySummary (GatewaySummary'),
+    newGatewaySummary,
+
+    -- ** IPDialIn
+    IPDialIn (IPDialIn'),
+    newIPDialIn,
+
+    -- ** InstantBooking
+    InstantBooking (InstantBooking'),
+    newInstantBooking,
+
+    -- ** MeetingRoomConfiguration
+    MeetingRoomConfiguration (MeetingRoomConfiguration'),
+    newMeetingRoomConfiguration,
+
+    -- ** MeetingSetting
+    MeetingSetting (MeetingSetting'),
+    newMeetingSetting,
+
+    -- ** NetworkProfile
+    NetworkProfile (NetworkProfile'),
+    newNetworkProfile,
+
+    -- ** NetworkProfileData
+    NetworkProfileData (NetworkProfileData'),
+    newNetworkProfileData,
+
+    -- ** PSTNDialIn
+    PSTNDialIn (PSTNDialIn'),
+    newPSTNDialIn,
+
+    -- ** PhoneNumber
+    PhoneNumber (PhoneNumber'),
+    newPhoneNumber,
+
+    -- ** Profile
+    Profile (Profile'),
+    newProfile,
+
+    -- ** ProfileData
+    ProfileData (ProfileData'),
+    newProfileData,
+
+    -- ** RequireCheckIn
+    RequireCheckIn (RequireCheckIn'),
+    newRequireCheckIn,
+
+    -- ** Room
+    Room (Room'),
+    newRoom,
+
+    -- ** RoomData
+    RoomData (RoomData'),
+    newRoomData,
+
+    -- ** RoomSkillParameter
+    RoomSkillParameter (RoomSkillParameter'),
+    newRoomSkillParameter,
+
+    -- ** SipAddress
+    SipAddress (SipAddress'),
+    newSipAddress,
+
+    -- ** SkillDetails
+    SkillDetails (SkillDetails'),
+    newSkillDetails,
+
+    -- ** SkillGroup
+    SkillGroup (SkillGroup'),
+    newSkillGroup,
+
+    -- ** SkillGroupData
+    SkillGroupData (SkillGroupData'),
+    newSkillGroupData,
+
+    -- ** SkillSummary
+    SkillSummary (SkillSummary'),
+    newSkillSummary,
+
+    -- ** SkillsStoreSkill
+    SkillsStoreSkill (SkillsStoreSkill'),
+    newSkillsStoreSkill,
+
+    -- ** SmartHomeAppliance
+    SmartHomeAppliance (SmartHomeAppliance'),
+    newSmartHomeAppliance,
+
+    -- ** Sort
+    Sort (Sort'),
+    newSort,
+
+    -- ** Ssml
+    Ssml (Ssml'),
+    newSsml,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TextMessage
+    TextMessage (TextMessage'),
+    newTextMessage,
+
+    -- ** UpdateEndOfMeetingReminder
+    UpdateEndOfMeetingReminder (UpdateEndOfMeetingReminder'),
+    newUpdateEndOfMeetingReminder,
+
+    -- ** UpdateInstantBooking
+    UpdateInstantBooking (UpdateInstantBooking'),
+    newUpdateInstantBooking,
+
+    -- ** UpdateMeetingRoomConfiguration
+    UpdateMeetingRoomConfiguration (UpdateMeetingRoomConfiguration'),
+    newUpdateMeetingRoomConfiguration,
+
+    -- ** UpdateRequireCheckIn
+    UpdateRequireCheckIn (UpdateRequireCheckIn'),
+    newUpdateRequireCheckIn,
+
+    -- ** UserData
+    UserData (UserData'),
+    newUserData,
+  )
+where
+
+import Amazonka.AlexaBusiness.ApproveSkill
+import Amazonka.AlexaBusiness.AssociateContactWithAddressBook
+import Amazonka.AlexaBusiness.AssociateDeviceWithNetworkProfile
+import Amazonka.AlexaBusiness.AssociateDeviceWithRoom
+import Amazonka.AlexaBusiness.AssociateSkillGroupWithRoom
+import Amazonka.AlexaBusiness.AssociateSkillWithSkillGroup
+import Amazonka.AlexaBusiness.AssociateSkillWithUsers
+import Amazonka.AlexaBusiness.CreateAddressBook
+import Amazonka.AlexaBusiness.CreateBusinessReportSchedule
+import Amazonka.AlexaBusiness.CreateConferenceProvider
+import Amazonka.AlexaBusiness.CreateContact
+import Amazonka.AlexaBusiness.CreateGatewayGroup
+import Amazonka.AlexaBusiness.CreateNetworkProfile
+import Amazonka.AlexaBusiness.CreateProfile
+import Amazonka.AlexaBusiness.CreateRoom
+import Amazonka.AlexaBusiness.CreateSkillGroup
+import Amazonka.AlexaBusiness.CreateUser
+import Amazonka.AlexaBusiness.DeleteAddressBook
+import Amazonka.AlexaBusiness.DeleteBusinessReportSchedule
+import Amazonka.AlexaBusiness.DeleteConferenceProvider
+import Amazonka.AlexaBusiness.DeleteContact
+import Amazonka.AlexaBusiness.DeleteDevice
+import Amazonka.AlexaBusiness.DeleteDeviceUsageData
+import Amazonka.AlexaBusiness.DeleteGatewayGroup
+import Amazonka.AlexaBusiness.DeleteNetworkProfile
+import Amazonka.AlexaBusiness.DeleteProfile
+import Amazonka.AlexaBusiness.DeleteRoom
+import Amazonka.AlexaBusiness.DeleteRoomSkillParameter
+import Amazonka.AlexaBusiness.DeleteSkillAuthorization
+import Amazonka.AlexaBusiness.DeleteSkillGroup
+import Amazonka.AlexaBusiness.DeleteUser
+import Amazonka.AlexaBusiness.DisassociateContactFromAddressBook
+import Amazonka.AlexaBusiness.DisassociateDeviceFromRoom
+import Amazonka.AlexaBusiness.DisassociateSkillFromSkillGroup
+import Amazonka.AlexaBusiness.DisassociateSkillFromUsers
+import Amazonka.AlexaBusiness.DisassociateSkillGroupFromRoom
+import Amazonka.AlexaBusiness.ForgetSmartHomeAppliances
+import Amazonka.AlexaBusiness.GetAddressBook
+import Amazonka.AlexaBusiness.GetConferencePreference
+import Amazonka.AlexaBusiness.GetConferenceProvider
+import Amazonka.AlexaBusiness.GetContact
+import Amazonka.AlexaBusiness.GetDevice
+import Amazonka.AlexaBusiness.GetGateway
+import Amazonka.AlexaBusiness.GetGatewayGroup
+import Amazonka.AlexaBusiness.GetInvitationConfiguration
+import Amazonka.AlexaBusiness.GetNetworkProfile
+import Amazonka.AlexaBusiness.GetProfile
+import Amazonka.AlexaBusiness.GetRoom
+import Amazonka.AlexaBusiness.GetRoomSkillParameter
+import Amazonka.AlexaBusiness.GetSkillGroup
+import Amazonka.AlexaBusiness.Lens
+import Amazonka.AlexaBusiness.ListBusinessReportSchedules
+import Amazonka.AlexaBusiness.ListConferenceProviders
+import Amazonka.AlexaBusiness.ListDeviceEvents
+import Amazonka.AlexaBusiness.ListGatewayGroups
+import Amazonka.AlexaBusiness.ListGateways
+import Amazonka.AlexaBusiness.ListSkills
+import Amazonka.AlexaBusiness.ListSkillsStoreCategories
+import Amazonka.AlexaBusiness.ListSkillsStoreSkillsByCategory
+import Amazonka.AlexaBusiness.ListSmartHomeAppliances
+import Amazonka.AlexaBusiness.ListTags
+import Amazonka.AlexaBusiness.PutConferencePreference
+import Amazonka.AlexaBusiness.PutInvitationConfiguration
+import Amazonka.AlexaBusiness.PutRoomSkillParameter
+import Amazonka.AlexaBusiness.PutSkillAuthorization
+import Amazonka.AlexaBusiness.RegisterAVSDevice
+import Amazonka.AlexaBusiness.RejectSkill
+import Amazonka.AlexaBusiness.ResolveRoom
+import Amazonka.AlexaBusiness.RevokeInvitation
+import Amazonka.AlexaBusiness.SearchAddressBooks
+import Amazonka.AlexaBusiness.SearchContacts
+import Amazonka.AlexaBusiness.SearchDevices
+import Amazonka.AlexaBusiness.SearchNetworkProfiles
+import Amazonka.AlexaBusiness.SearchProfiles
+import Amazonka.AlexaBusiness.SearchRooms
+import Amazonka.AlexaBusiness.SearchSkillGroups
+import Amazonka.AlexaBusiness.SearchUsers
+import Amazonka.AlexaBusiness.SendAnnouncement
+import Amazonka.AlexaBusiness.SendInvitation
+import Amazonka.AlexaBusiness.StartDeviceSync
+import Amazonka.AlexaBusiness.StartSmartHomeApplianceDiscovery
+import Amazonka.AlexaBusiness.TagResource
+import Amazonka.AlexaBusiness.Types
+import Amazonka.AlexaBusiness.UntagResource
+import Amazonka.AlexaBusiness.UpdateAddressBook
+import Amazonka.AlexaBusiness.UpdateBusinessReportSchedule
+import Amazonka.AlexaBusiness.UpdateConferenceProvider
+import Amazonka.AlexaBusiness.UpdateContact
+import Amazonka.AlexaBusiness.UpdateDevice
+import Amazonka.AlexaBusiness.UpdateGateway
+import Amazonka.AlexaBusiness.UpdateGatewayGroup
+import Amazonka.AlexaBusiness.UpdateNetworkProfile
+import Amazonka.AlexaBusiness.UpdateProfile
+import Amazonka.AlexaBusiness.UpdateRoom
+import Amazonka.AlexaBusiness.UpdateSkillGroup
+import Amazonka.AlexaBusiness.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'AlexaBusiness'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/AlexaBusiness/ApproveSkill.hs b/gen/Amazonka/AlexaBusiness/ApproveSkill.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ApproveSkill.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ApproveSkill
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a skill with the organization under the customer\'s AWS
+-- account. If a skill is private, the user implicitly accepts access to
+-- this skill during enablement.
+module Amazonka.AlexaBusiness.ApproveSkill
+  ( -- * Creating a Request
+    ApproveSkill (..),
+    newApproveSkill,
+
+    -- * Request Lenses
+    approveSkill_skillId,
+
+    -- * Destructuring the Response
+    ApproveSkillResponse (..),
+    newApproveSkillResponse,
+
+    -- * Response Lenses
+    approveSkillResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newApproveSkill' smart constructor.
+data ApproveSkill = ApproveSkill'
+  { -- | The unique identifier of the skill.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApproveSkill' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillId', 'approveSkill_skillId' - The unique identifier of the skill.
+newApproveSkill ::
+  -- | 'skillId'
+  Prelude.Text ->
+  ApproveSkill
+newApproveSkill pSkillId_ =
+  ApproveSkill' {skillId = pSkillId_}
+
+-- | The unique identifier of the skill.
+approveSkill_skillId :: Lens.Lens' ApproveSkill Prelude.Text
+approveSkill_skillId = Lens.lens (\ApproveSkill' {skillId} -> skillId) (\s@ApproveSkill' {} a -> s {skillId = a} :: ApproveSkill)
+
+instance Core.AWSRequest ApproveSkill where
+  type AWSResponse ApproveSkill = ApproveSkillResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ApproveSkillResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ApproveSkill where
+  hashWithSalt _salt ApproveSkill' {..} =
+    _salt `Prelude.hashWithSalt` skillId
+
+instance Prelude.NFData ApproveSkill where
+  rnf ApproveSkill' {..} = Prelude.rnf skillId
+
+instance Data.ToHeaders ApproveSkill where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ApproveSkill" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ApproveSkill where
+  toJSON ApproveSkill' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("SkillId" Data..= skillId)]
+      )
+
+instance Data.ToPath ApproveSkill where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ApproveSkill where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newApproveSkillResponse' smart constructor.
+data ApproveSkillResponse = ApproveSkillResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApproveSkillResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'approveSkillResponse_httpStatus' - The response's http status code.
+newApproveSkillResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ApproveSkillResponse
+newApproveSkillResponse pHttpStatus_ =
+  ApproveSkillResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+approveSkillResponse_httpStatus :: Lens.Lens' ApproveSkillResponse Prelude.Int
+approveSkillResponse_httpStatus = Lens.lens (\ApproveSkillResponse' {httpStatus} -> httpStatus) (\s@ApproveSkillResponse' {} a -> s {httpStatus = a} :: ApproveSkillResponse)
+
+instance Prelude.NFData ApproveSkillResponse where
+  rnf ApproveSkillResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/AssociateContactWithAddressBook.hs b/gen/Amazonka/AlexaBusiness/AssociateContactWithAddressBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/AssociateContactWithAddressBook.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.AssociateContactWithAddressBook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a contact with a given address book.
+module Amazonka.AlexaBusiness.AssociateContactWithAddressBook
+  ( -- * Creating a Request
+    AssociateContactWithAddressBook (..),
+    newAssociateContactWithAddressBook,
+
+    -- * Request Lenses
+    associateContactWithAddressBook_contactArn,
+    associateContactWithAddressBook_addressBookArn,
+
+    -- * Destructuring the Response
+    AssociateContactWithAddressBookResponse (..),
+    newAssociateContactWithAddressBookResponse,
+
+    -- * Response Lenses
+    associateContactWithAddressBookResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateContactWithAddressBook' smart constructor.
+data AssociateContactWithAddressBook = AssociateContactWithAddressBook'
+  { -- | The ARN of the contact to associate with an address book.
+    contactArn :: Prelude.Text,
+    -- | The ARN of the address book with which to associate the contact.
+    addressBookArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateContactWithAddressBook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactArn', 'associateContactWithAddressBook_contactArn' - The ARN of the contact to associate with an address book.
+--
+-- 'addressBookArn', 'associateContactWithAddressBook_addressBookArn' - The ARN of the address book with which to associate the contact.
+newAssociateContactWithAddressBook ::
+  -- | 'contactArn'
+  Prelude.Text ->
+  -- | 'addressBookArn'
+  Prelude.Text ->
+  AssociateContactWithAddressBook
+newAssociateContactWithAddressBook
+  pContactArn_
+  pAddressBookArn_ =
+    AssociateContactWithAddressBook'
+      { contactArn =
+          pContactArn_,
+        addressBookArn = pAddressBookArn_
+      }
+
+-- | The ARN of the contact to associate with an address book.
+associateContactWithAddressBook_contactArn :: Lens.Lens' AssociateContactWithAddressBook Prelude.Text
+associateContactWithAddressBook_contactArn = Lens.lens (\AssociateContactWithAddressBook' {contactArn} -> contactArn) (\s@AssociateContactWithAddressBook' {} a -> s {contactArn = a} :: AssociateContactWithAddressBook)
+
+-- | The ARN of the address book with which to associate the contact.
+associateContactWithAddressBook_addressBookArn :: Lens.Lens' AssociateContactWithAddressBook Prelude.Text
+associateContactWithAddressBook_addressBookArn = Lens.lens (\AssociateContactWithAddressBook' {addressBookArn} -> addressBookArn) (\s@AssociateContactWithAddressBook' {} a -> s {addressBookArn = a} :: AssociateContactWithAddressBook)
+
+instance
+  Core.AWSRequest
+    AssociateContactWithAddressBook
+  where
+  type
+    AWSResponse AssociateContactWithAddressBook =
+      AssociateContactWithAddressBookResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateContactWithAddressBookResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateContactWithAddressBook
+  where
+  hashWithSalt
+    _salt
+    AssociateContactWithAddressBook' {..} =
+      _salt
+        `Prelude.hashWithSalt` contactArn
+        `Prelude.hashWithSalt` addressBookArn
+
+instance
+  Prelude.NFData
+    AssociateContactWithAddressBook
+  where
+  rnf AssociateContactWithAddressBook' {..} =
+    Prelude.rnf contactArn
+      `Prelude.seq` Prelude.rnf addressBookArn
+
+instance
+  Data.ToHeaders
+    AssociateContactWithAddressBook
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.AssociateContactWithAddressBook" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateContactWithAddressBook where
+  toJSON AssociateContactWithAddressBook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ContactArn" Data..= contactArn),
+            Prelude.Just
+              ("AddressBookArn" Data..= addressBookArn)
+          ]
+      )
+
+instance Data.ToPath AssociateContactWithAddressBook where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateContactWithAddressBook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateContactWithAddressBookResponse' smart constructor.
+data AssociateContactWithAddressBookResponse = AssociateContactWithAddressBookResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateContactWithAddressBookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'associateContactWithAddressBookResponse_httpStatus' - The response's http status code.
+newAssociateContactWithAddressBookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateContactWithAddressBookResponse
+newAssociateContactWithAddressBookResponse
+  pHttpStatus_ =
+    AssociateContactWithAddressBookResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+associateContactWithAddressBookResponse_httpStatus :: Lens.Lens' AssociateContactWithAddressBookResponse Prelude.Int
+associateContactWithAddressBookResponse_httpStatus = Lens.lens (\AssociateContactWithAddressBookResponse' {httpStatus} -> httpStatus) (\s@AssociateContactWithAddressBookResponse' {} a -> s {httpStatus = a} :: AssociateContactWithAddressBookResponse)
+
+instance
+  Prelude.NFData
+    AssociateContactWithAddressBookResponse
+  where
+  rnf AssociateContactWithAddressBookResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/AssociateDeviceWithNetworkProfile.hs b/gen/Amazonka/AlexaBusiness/AssociateDeviceWithNetworkProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/AssociateDeviceWithNetworkProfile.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.AssociateDeviceWithNetworkProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a device with the specified network profile.
+module Amazonka.AlexaBusiness.AssociateDeviceWithNetworkProfile
+  ( -- * Creating a Request
+    AssociateDeviceWithNetworkProfile (..),
+    newAssociateDeviceWithNetworkProfile,
+
+    -- * Request Lenses
+    associateDeviceWithNetworkProfile_deviceArn,
+    associateDeviceWithNetworkProfile_networkProfileArn,
+
+    -- * Destructuring the Response
+    AssociateDeviceWithNetworkProfileResponse (..),
+    newAssociateDeviceWithNetworkProfileResponse,
+
+    -- * Response Lenses
+    associateDeviceWithNetworkProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateDeviceWithNetworkProfile' smart constructor.
+data AssociateDeviceWithNetworkProfile = AssociateDeviceWithNetworkProfile'
+  { -- | The device ARN.
+    deviceArn :: Prelude.Text,
+    -- | The ARN of the network profile to associate with a device.
+    networkProfileArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateDeviceWithNetworkProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'associateDeviceWithNetworkProfile_deviceArn' - The device ARN.
+--
+-- 'networkProfileArn', 'associateDeviceWithNetworkProfile_networkProfileArn' - The ARN of the network profile to associate with a device.
+newAssociateDeviceWithNetworkProfile ::
+  -- | 'deviceArn'
+  Prelude.Text ->
+  -- | 'networkProfileArn'
+  Prelude.Text ->
+  AssociateDeviceWithNetworkProfile
+newAssociateDeviceWithNetworkProfile
+  pDeviceArn_
+  pNetworkProfileArn_ =
+    AssociateDeviceWithNetworkProfile'
+      { deviceArn =
+          pDeviceArn_,
+        networkProfileArn = pNetworkProfileArn_
+      }
+
+-- | The device ARN.
+associateDeviceWithNetworkProfile_deviceArn :: Lens.Lens' AssociateDeviceWithNetworkProfile Prelude.Text
+associateDeviceWithNetworkProfile_deviceArn = Lens.lens (\AssociateDeviceWithNetworkProfile' {deviceArn} -> deviceArn) (\s@AssociateDeviceWithNetworkProfile' {} a -> s {deviceArn = a} :: AssociateDeviceWithNetworkProfile)
+
+-- | The ARN of the network profile to associate with a device.
+associateDeviceWithNetworkProfile_networkProfileArn :: Lens.Lens' AssociateDeviceWithNetworkProfile Prelude.Text
+associateDeviceWithNetworkProfile_networkProfileArn = Lens.lens (\AssociateDeviceWithNetworkProfile' {networkProfileArn} -> networkProfileArn) (\s@AssociateDeviceWithNetworkProfile' {} a -> s {networkProfileArn = a} :: AssociateDeviceWithNetworkProfile)
+
+instance
+  Core.AWSRequest
+    AssociateDeviceWithNetworkProfile
+  where
+  type
+    AWSResponse AssociateDeviceWithNetworkProfile =
+      AssociateDeviceWithNetworkProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateDeviceWithNetworkProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateDeviceWithNetworkProfile
+  where
+  hashWithSalt
+    _salt
+    AssociateDeviceWithNetworkProfile' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceArn
+        `Prelude.hashWithSalt` networkProfileArn
+
+instance
+  Prelude.NFData
+    AssociateDeviceWithNetworkProfile
+  where
+  rnf AssociateDeviceWithNetworkProfile' {..} =
+    Prelude.rnf deviceArn
+      `Prelude.seq` Prelude.rnf networkProfileArn
+
+instance
+  Data.ToHeaders
+    AssociateDeviceWithNetworkProfile
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.AssociateDeviceWithNetworkProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    AssociateDeviceWithNetworkProfile
+  where
+  toJSON AssociateDeviceWithNetworkProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("DeviceArn" Data..= deviceArn),
+            Prelude.Just
+              ("NetworkProfileArn" Data..= networkProfileArn)
+          ]
+      )
+
+instance
+  Data.ToPath
+    AssociateDeviceWithNetworkProfile
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AssociateDeviceWithNetworkProfile
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateDeviceWithNetworkProfileResponse' smart constructor.
+data AssociateDeviceWithNetworkProfileResponse = AssociateDeviceWithNetworkProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateDeviceWithNetworkProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'associateDeviceWithNetworkProfileResponse_httpStatus' - The response's http status code.
+newAssociateDeviceWithNetworkProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateDeviceWithNetworkProfileResponse
+newAssociateDeviceWithNetworkProfileResponse
+  pHttpStatus_ =
+    AssociateDeviceWithNetworkProfileResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+associateDeviceWithNetworkProfileResponse_httpStatus :: Lens.Lens' AssociateDeviceWithNetworkProfileResponse Prelude.Int
+associateDeviceWithNetworkProfileResponse_httpStatus = Lens.lens (\AssociateDeviceWithNetworkProfileResponse' {httpStatus} -> httpStatus) (\s@AssociateDeviceWithNetworkProfileResponse' {} a -> s {httpStatus = a} :: AssociateDeviceWithNetworkProfileResponse)
+
+instance
+  Prelude.NFData
+    AssociateDeviceWithNetworkProfileResponse
+  where
+  rnf AssociateDeviceWithNetworkProfileResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/AssociateDeviceWithRoom.hs b/gen/Amazonka/AlexaBusiness/AssociateDeviceWithRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/AssociateDeviceWithRoom.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.AssociateDeviceWithRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a device with a given room. This applies all the settings
+-- from the room profile to the device, and all the skills in any skill
+-- groups added to that room. This operation requires the device to be
+-- online, or else a manual sync is required.
+module Amazonka.AlexaBusiness.AssociateDeviceWithRoom
+  ( -- * Creating a Request
+    AssociateDeviceWithRoom (..),
+    newAssociateDeviceWithRoom,
+
+    -- * Request Lenses
+    associateDeviceWithRoom_deviceArn,
+    associateDeviceWithRoom_roomArn,
+
+    -- * Destructuring the Response
+    AssociateDeviceWithRoomResponse (..),
+    newAssociateDeviceWithRoomResponse,
+
+    -- * Response Lenses
+    associateDeviceWithRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateDeviceWithRoom' smart constructor.
+data AssociateDeviceWithRoom = AssociateDeviceWithRoom'
+  { -- | The ARN of the device to associate to a room. Required.
+    deviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the room with which to associate the device. Required.
+    roomArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateDeviceWithRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'associateDeviceWithRoom_deviceArn' - The ARN of the device to associate to a room. Required.
+--
+-- 'roomArn', 'associateDeviceWithRoom_roomArn' - The ARN of the room with which to associate the device. Required.
+newAssociateDeviceWithRoom ::
+  AssociateDeviceWithRoom
+newAssociateDeviceWithRoom =
+  AssociateDeviceWithRoom'
+    { deviceArn =
+        Prelude.Nothing,
+      roomArn = Prelude.Nothing
+    }
+
+-- | The ARN of the device to associate to a room. Required.
+associateDeviceWithRoom_deviceArn :: Lens.Lens' AssociateDeviceWithRoom (Prelude.Maybe Prelude.Text)
+associateDeviceWithRoom_deviceArn = Lens.lens (\AssociateDeviceWithRoom' {deviceArn} -> deviceArn) (\s@AssociateDeviceWithRoom' {} a -> s {deviceArn = a} :: AssociateDeviceWithRoom)
+
+-- | The ARN of the room with which to associate the device. Required.
+associateDeviceWithRoom_roomArn :: Lens.Lens' AssociateDeviceWithRoom (Prelude.Maybe Prelude.Text)
+associateDeviceWithRoom_roomArn = Lens.lens (\AssociateDeviceWithRoom' {roomArn} -> roomArn) (\s@AssociateDeviceWithRoom' {} a -> s {roomArn = a} :: AssociateDeviceWithRoom)
+
+instance Core.AWSRequest AssociateDeviceWithRoom where
+  type
+    AWSResponse AssociateDeviceWithRoom =
+      AssociateDeviceWithRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateDeviceWithRoomResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateDeviceWithRoom where
+  hashWithSalt _salt AssociateDeviceWithRoom' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceArn
+      `Prelude.hashWithSalt` roomArn
+
+instance Prelude.NFData AssociateDeviceWithRoom where
+  rnf AssociateDeviceWithRoom' {..} =
+    Prelude.rnf deviceArn
+      `Prelude.seq` Prelude.rnf roomArn
+
+instance Data.ToHeaders AssociateDeviceWithRoom where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.AssociateDeviceWithRoom" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateDeviceWithRoom where
+  toJSON AssociateDeviceWithRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeviceArn" Data..=) Prelude.<$> deviceArn,
+            ("RoomArn" Data..=) Prelude.<$> roomArn
+          ]
+      )
+
+instance Data.ToPath AssociateDeviceWithRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateDeviceWithRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateDeviceWithRoomResponse' smart constructor.
+data AssociateDeviceWithRoomResponse = AssociateDeviceWithRoomResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateDeviceWithRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'associateDeviceWithRoomResponse_httpStatus' - The response's http status code.
+newAssociateDeviceWithRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateDeviceWithRoomResponse
+newAssociateDeviceWithRoomResponse pHttpStatus_ =
+  AssociateDeviceWithRoomResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateDeviceWithRoomResponse_httpStatus :: Lens.Lens' AssociateDeviceWithRoomResponse Prelude.Int
+associateDeviceWithRoomResponse_httpStatus = Lens.lens (\AssociateDeviceWithRoomResponse' {httpStatus} -> httpStatus) (\s@AssociateDeviceWithRoomResponse' {} a -> s {httpStatus = a} :: AssociateDeviceWithRoomResponse)
+
+instance
+  Prelude.NFData
+    AssociateDeviceWithRoomResponse
+  where
+  rnf AssociateDeviceWithRoomResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/AssociateSkillGroupWithRoom.hs b/gen/Amazonka/AlexaBusiness/AssociateSkillGroupWithRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/AssociateSkillGroupWithRoom.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.AssociateSkillGroupWithRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a skill group with a given room. This enables all skills in
+-- the associated skill group on all devices in the room.
+module Amazonka.AlexaBusiness.AssociateSkillGroupWithRoom
+  ( -- * Creating a Request
+    AssociateSkillGroupWithRoom (..),
+    newAssociateSkillGroupWithRoom,
+
+    -- * Request Lenses
+    associateSkillGroupWithRoom_roomArn,
+    associateSkillGroupWithRoom_skillGroupArn,
+
+    -- * Destructuring the Response
+    AssociateSkillGroupWithRoomResponse (..),
+    newAssociateSkillGroupWithRoomResponse,
+
+    -- * Response Lenses
+    associateSkillGroupWithRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateSkillGroupWithRoom' smart constructor.
+data AssociateSkillGroupWithRoom = AssociateSkillGroupWithRoom'
+  { -- | The ARN of the room with which to associate the skill group. Required.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the skill group to associate with a room. Required.
+    skillGroupArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSkillGroupWithRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'associateSkillGroupWithRoom_roomArn' - The ARN of the room with which to associate the skill group. Required.
+--
+-- 'skillGroupArn', 'associateSkillGroupWithRoom_skillGroupArn' - The ARN of the skill group to associate with a room. Required.
+newAssociateSkillGroupWithRoom ::
+  AssociateSkillGroupWithRoom
+newAssociateSkillGroupWithRoom =
+  AssociateSkillGroupWithRoom'
+    { roomArn =
+        Prelude.Nothing,
+      skillGroupArn = Prelude.Nothing
+    }
+
+-- | The ARN of the room with which to associate the skill group. Required.
+associateSkillGroupWithRoom_roomArn :: Lens.Lens' AssociateSkillGroupWithRoom (Prelude.Maybe Prelude.Text)
+associateSkillGroupWithRoom_roomArn = Lens.lens (\AssociateSkillGroupWithRoom' {roomArn} -> roomArn) (\s@AssociateSkillGroupWithRoom' {} a -> s {roomArn = a} :: AssociateSkillGroupWithRoom)
+
+-- | The ARN of the skill group to associate with a room. Required.
+associateSkillGroupWithRoom_skillGroupArn :: Lens.Lens' AssociateSkillGroupWithRoom (Prelude.Maybe Prelude.Text)
+associateSkillGroupWithRoom_skillGroupArn = Lens.lens (\AssociateSkillGroupWithRoom' {skillGroupArn} -> skillGroupArn) (\s@AssociateSkillGroupWithRoom' {} a -> s {skillGroupArn = a} :: AssociateSkillGroupWithRoom)
+
+instance Core.AWSRequest AssociateSkillGroupWithRoom where
+  type
+    AWSResponse AssociateSkillGroupWithRoom =
+      AssociateSkillGroupWithRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateSkillGroupWithRoomResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateSkillGroupWithRoom where
+  hashWithSalt _salt AssociateSkillGroupWithRoom' {..} =
+    _salt
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` skillGroupArn
+
+instance Prelude.NFData AssociateSkillGroupWithRoom where
+  rnf AssociateSkillGroupWithRoom' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf skillGroupArn
+
+instance Data.ToHeaders AssociateSkillGroupWithRoom where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.AssociateSkillGroupWithRoom" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateSkillGroupWithRoom where
+  toJSON AssociateSkillGroupWithRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RoomArn" Data..=) Prelude.<$> roomArn,
+            ("SkillGroupArn" Data..=) Prelude.<$> skillGroupArn
+          ]
+      )
+
+instance Data.ToPath AssociateSkillGroupWithRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateSkillGroupWithRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateSkillGroupWithRoomResponse' smart constructor.
+data AssociateSkillGroupWithRoomResponse = AssociateSkillGroupWithRoomResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSkillGroupWithRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'associateSkillGroupWithRoomResponse_httpStatus' - The response's http status code.
+newAssociateSkillGroupWithRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateSkillGroupWithRoomResponse
+newAssociateSkillGroupWithRoomResponse pHttpStatus_ =
+  AssociateSkillGroupWithRoomResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateSkillGroupWithRoomResponse_httpStatus :: Lens.Lens' AssociateSkillGroupWithRoomResponse Prelude.Int
+associateSkillGroupWithRoomResponse_httpStatus = Lens.lens (\AssociateSkillGroupWithRoomResponse' {httpStatus} -> httpStatus) (\s@AssociateSkillGroupWithRoomResponse' {} a -> s {httpStatus = a} :: AssociateSkillGroupWithRoomResponse)
+
+instance
+  Prelude.NFData
+    AssociateSkillGroupWithRoomResponse
+  where
+  rnf AssociateSkillGroupWithRoomResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/AssociateSkillWithSkillGroup.hs b/gen/Amazonka/AlexaBusiness/AssociateSkillWithSkillGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/AssociateSkillWithSkillGroup.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.AssociateSkillWithSkillGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a skill with a skill group.
+module Amazonka.AlexaBusiness.AssociateSkillWithSkillGroup
+  ( -- * Creating a Request
+    AssociateSkillWithSkillGroup (..),
+    newAssociateSkillWithSkillGroup,
+
+    -- * Request Lenses
+    associateSkillWithSkillGroup_skillGroupArn,
+    associateSkillWithSkillGroup_skillId,
+
+    -- * Destructuring the Response
+    AssociateSkillWithSkillGroupResponse (..),
+    newAssociateSkillWithSkillGroupResponse,
+
+    -- * Response Lenses
+    associateSkillWithSkillGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateSkillWithSkillGroup' smart constructor.
+data AssociateSkillWithSkillGroup = AssociateSkillWithSkillGroup'
+  { -- | The ARN of the skill group to associate the skill to. Required.
+    skillGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the skill.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSkillWithSkillGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillGroupArn', 'associateSkillWithSkillGroup_skillGroupArn' - The ARN of the skill group to associate the skill to. Required.
+--
+-- 'skillId', 'associateSkillWithSkillGroup_skillId' - The unique identifier of the skill.
+newAssociateSkillWithSkillGroup ::
+  -- | 'skillId'
+  Prelude.Text ->
+  AssociateSkillWithSkillGroup
+newAssociateSkillWithSkillGroup pSkillId_ =
+  AssociateSkillWithSkillGroup'
+    { skillGroupArn =
+        Prelude.Nothing,
+      skillId = pSkillId_
+    }
+
+-- | The ARN of the skill group to associate the skill to. Required.
+associateSkillWithSkillGroup_skillGroupArn :: Lens.Lens' AssociateSkillWithSkillGroup (Prelude.Maybe Prelude.Text)
+associateSkillWithSkillGroup_skillGroupArn = Lens.lens (\AssociateSkillWithSkillGroup' {skillGroupArn} -> skillGroupArn) (\s@AssociateSkillWithSkillGroup' {} a -> s {skillGroupArn = a} :: AssociateSkillWithSkillGroup)
+
+-- | The unique identifier of the skill.
+associateSkillWithSkillGroup_skillId :: Lens.Lens' AssociateSkillWithSkillGroup Prelude.Text
+associateSkillWithSkillGroup_skillId = Lens.lens (\AssociateSkillWithSkillGroup' {skillId} -> skillId) (\s@AssociateSkillWithSkillGroup' {} a -> s {skillId = a} :: AssociateSkillWithSkillGroup)
+
+instance Core.AWSRequest AssociateSkillWithSkillGroup where
+  type
+    AWSResponse AssociateSkillWithSkillGroup =
+      AssociateSkillWithSkillGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateSkillWithSkillGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateSkillWithSkillGroup
+  where
+  hashWithSalt _salt AssociateSkillWithSkillGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` skillGroupArn
+      `Prelude.hashWithSalt` skillId
+
+instance Prelude.NFData AssociateSkillWithSkillGroup where
+  rnf AssociateSkillWithSkillGroup' {..} =
+    Prelude.rnf skillGroupArn
+      `Prelude.seq` Prelude.rnf skillId
+
+instance Data.ToHeaders AssociateSkillWithSkillGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.AssociateSkillWithSkillGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateSkillWithSkillGroup where
+  toJSON AssociateSkillWithSkillGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SkillGroupArn" Data..=) Prelude.<$> skillGroupArn,
+            Prelude.Just ("SkillId" Data..= skillId)
+          ]
+      )
+
+instance Data.ToPath AssociateSkillWithSkillGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateSkillWithSkillGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateSkillWithSkillGroupResponse' smart constructor.
+data AssociateSkillWithSkillGroupResponse = AssociateSkillWithSkillGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSkillWithSkillGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'associateSkillWithSkillGroupResponse_httpStatus' - The response's http status code.
+newAssociateSkillWithSkillGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateSkillWithSkillGroupResponse
+newAssociateSkillWithSkillGroupResponse pHttpStatus_ =
+  AssociateSkillWithSkillGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateSkillWithSkillGroupResponse_httpStatus :: Lens.Lens' AssociateSkillWithSkillGroupResponse Prelude.Int
+associateSkillWithSkillGroupResponse_httpStatus = Lens.lens (\AssociateSkillWithSkillGroupResponse' {httpStatus} -> httpStatus) (\s@AssociateSkillWithSkillGroupResponse' {} a -> s {httpStatus = a} :: AssociateSkillWithSkillGroupResponse)
+
+instance
+  Prelude.NFData
+    AssociateSkillWithSkillGroupResponse
+  where
+  rnf AssociateSkillWithSkillGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/AssociateSkillWithUsers.hs b/gen/Amazonka/AlexaBusiness/AssociateSkillWithUsers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/AssociateSkillWithUsers.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.AssociateSkillWithUsers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Makes a private skill available for enrolled users to enable on their
+-- devices.
+module Amazonka.AlexaBusiness.AssociateSkillWithUsers
+  ( -- * Creating a Request
+    AssociateSkillWithUsers (..),
+    newAssociateSkillWithUsers,
+
+    -- * Request Lenses
+    associateSkillWithUsers_skillId,
+
+    -- * Destructuring the Response
+    AssociateSkillWithUsersResponse (..),
+    newAssociateSkillWithUsersResponse,
+
+    -- * Response Lenses
+    associateSkillWithUsersResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateSkillWithUsers' smart constructor.
+data AssociateSkillWithUsers = AssociateSkillWithUsers'
+  { -- | The private skill ID you want to make available to enrolled users.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSkillWithUsers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillId', 'associateSkillWithUsers_skillId' - The private skill ID you want to make available to enrolled users.
+newAssociateSkillWithUsers ::
+  -- | 'skillId'
+  Prelude.Text ->
+  AssociateSkillWithUsers
+newAssociateSkillWithUsers pSkillId_ =
+  AssociateSkillWithUsers' {skillId = pSkillId_}
+
+-- | The private skill ID you want to make available to enrolled users.
+associateSkillWithUsers_skillId :: Lens.Lens' AssociateSkillWithUsers Prelude.Text
+associateSkillWithUsers_skillId = Lens.lens (\AssociateSkillWithUsers' {skillId} -> skillId) (\s@AssociateSkillWithUsers' {} a -> s {skillId = a} :: AssociateSkillWithUsers)
+
+instance Core.AWSRequest AssociateSkillWithUsers where
+  type
+    AWSResponse AssociateSkillWithUsers =
+      AssociateSkillWithUsersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateSkillWithUsersResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateSkillWithUsers where
+  hashWithSalt _salt AssociateSkillWithUsers' {..} =
+    _salt `Prelude.hashWithSalt` skillId
+
+instance Prelude.NFData AssociateSkillWithUsers where
+  rnf AssociateSkillWithUsers' {..} =
+    Prelude.rnf skillId
+
+instance Data.ToHeaders AssociateSkillWithUsers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.AssociateSkillWithUsers" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateSkillWithUsers where
+  toJSON AssociateSkillWithUsers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("SkillId" Data..= skillId)]
+      )
+
+instance Data.ToPath AssociateSkillWithUsers where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateSkillWithUsers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateSkillWithUsersResponse' smart constructor.
+data AssociateSkillWithUsersResponse = AssociateSkillWithUsersResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSkillWithUsersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'associateSkillWithUsersResponse_httpStatus' - The response's http status code.
+newAssociateSkillWithUsersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateSkillWithUsersResponse
+newAssociateSkillWithUsersResponse pHttpStatus_ =
+  AssociateSkillWithUsersResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateSkillWithUsersResponse_httpStatus :: Lens.Lens' AssociateSkillWithUsersResponse Prelude.Int
+associateSkillWithUsersResponse_httpStatus = Lens.lens (\AssociateSkillWithUsersResponse' {httpStatus} -> httpStatus) (\s@AssociateSkillWithUsersResponse' {} a -> s {httpStatus = a} :: AssociateSkillWithUsersResponse)
+
+instance
+  Prelude.NFData
+    AssociateSkillWithUsersResponse
+  where
+  rnf AssociateSkillWithUsersResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateAddressBook.hs b/gen/Amazonka/AlexaBusiness/CreateAddressBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateAddressBook.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateAddressBook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an address book with the specified details.
+module Amazonka.AlexaBusiness.CreateAddressBook
+  ( -- * Creating a Request
+    CreateAddressBook (..),
+    newCreateAddressBook,
+
+    -- * Request Lenses
+    createAddressBook_clientRequestToken,
+    createAddressBook_description,
+    createAddressBook_tags,
+    createAddressBook_name,
+
+    -- * Destructuring the Response
+    CreateAddressBookResponse (..),
+    newCreateAddressBookResponse,
+
+    -- * Response Lenses
+    createAddressBookResponse_addressBookArn,
+    createAddressBookResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAddressBook' smart constructor.
+data CreateAddressBook = CreateAddressBook'
+  { -- | A unique, user-specified identifier for the request that ensures
+    -- idempotency.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the address book.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags to be added to the specified resource. Do not provide system
+    -- tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the address book.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAddressBook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createAddressBook_clientRequestToken' - A unique, user-specified identifier for the request that ensures
+-- idempotency.
+--
+-- 'description', 'createAddressBook_description' - The description of the address book.
+--
+-- 'tags', 'createAddressBook_tags' - The tags to be added to the specified resource. Do not provide system
+-- tags.
+--
+-- 'name', 'createAddressBook_name' - The name of the address book.
+newCreateAddressBook ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateAddressBook
+newCreateAddressBook pName_ =
+  CreateAddressBook'
+    { clientRequestToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A unique, user-specified identifier for the request that ensures
+-- idempotency.
+createAddressBook_clientRequestToken :: Lens.Lens' CreateAddressBook (Prelude.Maybe Prelude.Text)
+createAddressBook_clientRequestToken = Lens.lens (\CreateAddressBook' {clientRequestToken} -> clientRequestToken) (\s@CreateAddressBook' {} a -> s {clientRequestToken = a} :: CreateAddressBook)
+
+-- | The description of the address book.
+createAddressBook_description :: Lens.Lens' CreateAddressBook (Prelude.Maybe Prelude.Text)
+createAddressBook_description = Lens.lens (\CreateAddressBook' {description} -> description) (\s@CreateAddressBook' {} a -> s {description = a} :: CreateAddressBook)
+
+-- | The tags to be added to the specified resource. Do not provide system
+-- tags.
+createAddressBook_tags :: Lens.Lens' CreateAddressBook (Prelude.Maybe [Tag])
+createAddressBook_tags = Lens.lens (\CreateAddressBook' {tags} -> tags) (\s@CreateAddressBook' {} a -> s {tags = a} :: CreateAddressBook) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the address book.
+createAddressBook_name :: Lens.Lens' CreateAddressBook Prelude.Text
+createAddressBook_name = Lens.lens (\CreateAddressBook' {name} -> name) (\s@CreateAddressBook' {} a -> s {name = a} :: CreateAddressBook)
+
+instance Core.AWSRequest CreateAddressBook where
+  type
+    AWSResponse CreateAddressBook =
+      CreateAddressBookResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAddressBookResponse'
+            Prelude.<$> (x Data..?> "AddressBookArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAddressBook where
+  hashWithSalt _salt CreateAddressBook' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateAddressBook where
+  rnf CreateAddressBook' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateAddressBook where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateAddressBook" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAddressBook where
+  toJSON CreateAddressBook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateAddressBook where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateAddressBook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAddressBookResponse' smart constructor.
+data CreateAddressBookResponse = CreateAddressBookResponse'
+  { -- | The ARN of the newly created address book.
+    addressBookArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAddressBookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressBookArn', 'createAddressBookResponse_addressBookArn' - The ARN of the newly created address book.
+--
+-- 'httpStatus', 'createAddressBookResponse_httpStatus' - The response's http status code.
+newCreateAddressBookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAddressBookResponse
+newCreateAddressBookResponse pHttpStatus_ =
+  CreateAddressBookResponse'
+    { addressBookArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the newly created address book.
+createAddressBookResponse_addressBookArn :: Lens.Lens' CreateAddressBookResponse (Prelude.Maybe Prelude.Text)
+createAddressBookResponse_addressBookArn = Lens.lens (\CreateAddressBookResponse' {addressBookArn} -> addressBookArn) (\s@CreateAddressBookResponse' {} a -> s {addressBookArn = a} :: CreateAddressBookResponse)
+
+-- | The response's http status code.
+createAddressBookResponse_httpStatus :: Lens.Lens' CreateAddressBookResponse Prelude.Int
+createAddressBookResponse_httpStatus = Lens.lens (\CreateAddressBookResponse' {httpStatus} -> httpStatus) (\s@CreateAddressBookResponse' {} a -> s {httpStatus = a} :: CreateAddressBookResponse)
+
+instance Prelude.NFData CreateAddressBookResponse where
+  rnf CreateAddressBookResponse' {..} =
+    Prelude.rnf addressBookArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateBusinessReportSchedule.hs b/gen/Amazonka/AlexaBusiness/CreateBusinessReportSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateBusinessReportSchedule.hs
@@ -0,0 +1,289 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateBusinessReportSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a recurring schedule for usage reports to deliver to the
+-- specified S3 location with a specified daily or weekly interval.
+module Amazonka.AlexaBusiness.CreateBusinessReportSchedule
+  ( -- * Creating a Request
+    CreateBusinessReportSchedule (..),
+    newCreateBusinessReportSchedule,
+
+    -- * Request Lenses
+    createBusinessReportSchedule_clientRequestToken,
+    createBusinessReportSchedule_recurrence,
+    createBusinessReportSchedule_s3BucketName,
+    createBusinessReportSchedule_s3KeyPrefix,
+    createBusinessReportSchedule_scheduleName,
+    createBusinessReportSchedule_tags,
+    createBusinessReportSchedule_format,
+    createBusinessReportSchedule_contentRange,
+
+    -- * Destructuring the Response
+    CreateBusinessReportScheduleResponse (..),
+    newCreateBusinessReportScheduleResponse,
+
+    -- * Response Lenses
+    createBusinessReportScheduleResponse_scheduleArn,
+    createBusinessReportScheduleResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateBusinessReportSchedule' smart constructor.
+data CreateBusinessReportSchedule = CreateBusinessReportSchedule'
+  { -- | The client request token.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The recurrence of the reports. If this isn\'t specified, the report will
+    -- only be delivered one time when the API is called.
+    recurrence :: Prelude.Maybe BusinessReportRecurrence,
+    -- | The S3 bucket name of the output reports. If this isn\'t specified, the
+    -- report can be retrieved from a download link by calling
+    -- ListBusinessReportSchedule.
+    s3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The S3 key where the report is delivered.
+    s3KeyPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The name identifier of the schedule.
+    scheduleName :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the business report schedule.
+    tags :: Prelude.Maybe [Tag],
+    -- | The format of the generated report (individual CSV files or zipped files
+    -- of individual files).
+    format :: BusinessReportFormat,
+    -- | The content range of the reports.
+    contentRange :: BusinessReportContentRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBusinessReportSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createBusinessReportSchedule_clientRequestToken' - The client request token.
+--
+-- 'recurrence', 'createBusinessReportSchedule_recurrence' - The recurrence of the reports. If this isn\'t specified, the report will
+-- only be delivered one time when the API is called.
+--
+-- 's3BucketName', 'createBusinessReportSchedule_s3BucketName' - The S3 bucket name of the output reports. If this isn\'t specified, the
+-- report can be retrieved from a download link by calling
+-- ListBusinessReportSchedule.
+--
+-- 's3KeyPrefix', 'createBusinessReportSchedule_s3KeyPrefix' - The S3 key where the report is delivered.
+--
+-- 'scheduleName', 'createBusinessReportSchedule_scheduleName' - The name identifier of the schedule.
+--
+-- 'tags', 'createBusinessReportSchedule_tags' - The tags for the business report schedule.
+--
+-- 'format', 'createBusinessReportSchedule_format' - The format of the generated report (individual CSV files or zipped files
+-- of individual files).
+--
+-- 'contentRange', 'createBusinessReportSchedule_contentRange' - The content range of the reports.
+newCreateBusinessReportSchedule ::
+  -- | 'format'
+  BusinessReportFormat ->
+  -- | 'contentRange'
+  BusinessReportContentRange ->
+  CreateBusinessReportSchedule
+newCreateBusinessReportSchedule
+  pFormat_
+  pContentRange_ =
+    CreateBusinessReportSchedule'
+      { clientRequestToken =
+          Prelude.Nothing,
+        recurrence = Prelude.Nothing,
+        s3BucketName = Prelude.Nothing,
+        s3KeyPrefix = Prelude.Nothing,
+        scheduleName = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        format = pFormat_,
+        contentRange = pContentRange_
+      }
+
+-- | The client request token.
+createBusinessReportSchedule_clientRequestToken :: Lens.Lens' CreateBusinessReportSchedule (Prelude.Maybe Prelude.Text)
+createBusinessReportSchedule_clientRequestToken = Lens.lens (\CreateBusinessReportSchedule' {clientRequestToken} -> clientRequestToken) (\s@CreateBusinessReportSchedule' {} a -> s {clientRequestToken = a} :: CreateBusinessReportSchedule)
+
+-- | The recurrence of the reports. If this isn\'t specified, the report will
+-- only be delivered one time when the API is called.
+createBusinessReportSchedule_recurrence :: Lens.Lens' CreateBusinessReportSchedule (Prelude.Maybe BusinessReportRecurrence)
+createBusinessReportSchedule_recurrence = Lens.lens (\CreateBusinessReportSchedule' {recurrence} -> recurrence) (\s@CreateBusinessReportSchedule' {} a -> s {recurrence = a} :: CreateBusinessReportSchedule)
+
+-- | The S3 bucket name of the output reports. If this isn\'t specified, the
+-- report can be retrieved from a download link by calling
+-- ListBusinessReportSchedule.
+createBusinessReportSchedule_s3BucketName :: Lens.Lens' CreateBusinessReportSchedule (Prelude.Maybe Prelude.Text)
+createBusinessReportSchedule_s3BucketName = Lens.lens (\CreateBusinessReportSchedule' {s3BucketName} -> s3BucketName) (\s@CreateBusinessReportSchedule' {} a -> s {s3BucketName = a} :: CreateBusinessReportSchedule)
+
+-- | The S3 key where the report is delivered.
+createBusinessReportSchedule_s3KeyPrefix :: Lens.Lens' CreateBusinessReportSchedule (Prelude.Maybe Prelude.Text)
+createBusinessReportSchedule_s3KeyPrefix = Lens.lens (\CreateBusinessReportSchedule' {s3KeyPrefix} -> s3KeyPrefix) (\s@CreateBusinessReportSchedule' {} a -> s {s3KeyPrefix = a} :: CreateBusinessReportSchedule)
+
+-- | The name identifier of the schedule.
+createBusinessReportSchedule_scheduleName :: Lens.Lens' CreateBusinessReportSchedule (Prelude.Maybe Prelude.Text)
+createBusinessReportSchedule_scheduleName = Lens.lens (\CreateBusinessReportSchedule' {scheduleName} -> scheduleName) (\s@CreateBusinessReportSchedule' {} a -> s {scheduleName = a} :: CreateBusinessReportSchedule)
+
+-- | The tags for the business report schedule.
+createBusinessReportSchedule_tags :: Lens.Lens' CreateBusinessReportSchedule (Prelude.Maybe [Tag])
+createBusinessReportSchedule_tags = Lens.lens (\CreateBusinessReportSchedule' {tags} -> tags) (\s@CreateBusinessReportSchedule' {} a -> s {tags = a} :: CreateBusinessReportSchedule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The format of the generated report (individual CSV files or zipped files
+-- of individual files).
+createBusinessReportSchedule_format :: Lens.Lens' CreateBusinessReportSchedule BusinessReportFormat
+createBusinessReportSchedule_format = Lens.lens (\CreateBusinessReportSchedule' {format} -> format) (\s@CreateBusinessReportSchedule' {} a -> s {format = a} :: CreateBusinessReportSchedule)
+
+-- | The content range of the reports.
+createBusinessReportSchedule_contentRange :: Lens.Lens' CreateBusinessReportSchedule BusinessReportContentRange
+createBusinessReportSchedule_contentRange = Lens.lens (\CreateBusinessReportSchedule' {contentRange} -> contentRange) (\s@CreateBusinessReportSchedule' {} a -> s {contentRange = a} :: CreateBusinessReportSchedule)
+
+instance Core.AWSRequest CreateBusinessReportSchedule where
+  type
+    AWSResponse CreateBusinessReportSchedule =
+      CreateBusinessReportScheduleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateBusinessReportScheduleResponse'
+            Prelude.<$> (x Data..?> "ScheduleArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateBusinessReportSchedule
+  where
+  hashWithSalt _salt CreateBusinessReportSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` recurrence
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` s3KeyPrefix
+      `Prelude.hashWithSalt` scheduleName
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` contentRange
+
+instance Prelude.NFData CreateBusinessReportSchedule where
+  rnf CreateBusinessReportSchedule' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf recurrence
+      `Prelude.seq` Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf s3KeyPrefix
+      `Prelude.seq` Prelude.rnf scheduleName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf contentRange
+
+instance Data.ToHeaders CreateBusinessReportSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateBusinessReportSchedule" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateBusinessReportSchedule where
+  toJSON CreateBusinessReportSchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Recurrence" Data..=) Prelude.<$> recurrence,
+            ("S3BucketName" Data..=) Prelude.<$> s3BucketName,
+            ("S3KeyPrefix" Data..=) Prelude.<$> s3KeyPrefix,
+            ("ScheduleName" Data..=) Prelude.<$> scheduleName,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Format" Data..= format),
+            Prelude.Just ("ContentRange" Data..= contentRange)
+          ]
+      )
+
+instance Data.ToPath CreateBusinessReportSchedule where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateBusinessReportSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateBusinessReportScheduleResponse' smart constructor.
+data CreateBusinessReportScheduleResponse = CreateBusinessReportScheduleResponse'
+  { -- | The ARN of the business report schedule.
+    scheduleArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateBusinessReportScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scheduleArn', 'createBusinessReportScheduleResponse_scheduleArn' - The ARN of the business report schedule.
+--
+-- 'httpStatus', 'createBusinessReportScheduleResponse_httpStatus' - The response's http status code.
+newCreateBusinessReportScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateBusinessReportScheduleResponse
+newCreateBusinessReportScheduleResponse pHttpStatus_ =
+  CreateBusinessReportScheduleResponse'
+    { scheduleArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the business report schedule.
+createBusinessReportScheduleResponse_scheduleArn :: Lens.Lens' CreateBusinessReportScheduleResponse (Prelude.Maybe Prelude.Text)
+createBusinessReportScheduleResponse_scheduleArn = Lens.lens (\CreateBusinessReportScheduleResponse' {scheduleArn} -> scheduleArn) (\s@CreateBusinessReportScheduleResponse' {} a -> s {scheduleArn = a} :: CreateBusinessReportScheduleResponse)
+
+-- | The response's http status code.
+createBusinessReportScheduleResponse_httpStatus :: Lens.Lens' CreateBusinessReportScheduleResponse Prelude.Int
+createBusinessReportScheduleResponse_httpStatus = Lens.lens (\CreateBusinessReportScheduleResponse' {httpStatus} -> httpStatus) (\s@CreateBusinessReportScheduleResponse' {} a -> s {httpStatus = a} :: CreateBusinessReportScheduleResponse)
+
+instance
+  Prelude.NFData
+    CreateBusinessReportScheduleResponse
+  where
+  rnf CreateBusinessReportScheduleResponse' {..} =
+    Prelude.rnf scheduleArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateConferenceProvider.hs b/gen/Amazonka/AlexaBusiness/CreateConferenceProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateConferenceProvider.hs
@@ -0,0 +1,273 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateConferenceProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a new conference provider under the user\'s AWS account.
+module Amazonka.AlexaBusiness.CreateConferenceProvider
+  ( -- * Creating a Request
+    CreateConferenceProvider (..),
+    newCreateConferenceProvider,
+
+    -- * Request Lenses
+    createConferenceProvider_clientRequestToken,
+    createConferenceProvider_iPDialIn,
+    createConferenceProvider_pSTNDialIn,
+    createConferenceProvider_tags,
+    createConferenceProvider_conferenceProviderName,
+    createConferenceProvider_conferenceProviderType,
+    createConferenceProvider_meetingSetting,
+
+    -- * Destructuring the Response
+    CreateConferenceProviderResponse (..),
+    newCreateConferenceProviderResponse,
+
+    -- * Response Lenses
+    createConferenceProviderResponse_conferenceProviderArn,
+    createConferenceProviderResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateConferenceProvider' smart constructor.
+data CreateConferenceProvider = CreateConferenceProvider'
+  { -- | The request token of the client.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The IP endpoint and protocol for calling.
+    iPDialIn :: Prelude.Maybe IPDialIn,
+    -- | The information for PSTN conferencing.
+    pSTNDialIn :: Prelude.Maybe PSTNDialIn,
+    -- | The tags to be added to the specified resource. Do not provide system
+    -- tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the conference provider.
+    conferenceProviderName :: Prelude.Text,
+    -- | Represents a type within a list of predefined types.
+    conferenceProviderType :: ConferenceProviderType,
+    -- | The meeting settings for the conference provider.
+    meetingSetting :: MeetingSetting
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConferenceProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createConferenceProvider_clientRequestToken' - The request token of the client.
+--
+-- 'iPDialIn', 'createConferenceProvider_iPDialIn' - The IP endpoint and protocol for calling.
+--
+-- 'pSTNDialIn', 'createConferenceProvider_pSTNDialIn' - The information for PSTN conferencing.
+--
+-- 'tags', 'createConferenceProvider_tags' - The tags to be added to the specified resource. Do not provide system
+-- tags.
+--
+-- 'conferenceProviderName', 'createConferenceProvider_conferenceProviderName' - The name of the conference provider.
+--
+-- 'conferenceProviderType', 'createConferenceProvider_conferenceProviderType' - Represents a type within a list of predefined types.
+--
+-- 'meetingSetting', 'createConferenceProvider_meetingSetting' - The meeting settings for the conference provider.
+newCreateConferenceProvider ::
+  -- | 'conferenceProviderName'
+  Prelude.Text ->
+  -- | 'conferenceProviderType'
+  ConferenceProviderType ->
+  -- | 'meetingSetting'
+  MeetingSetting ->
+  CreateConferenceProvider
+newCreateConferenceProvider
+  pConferenceProviderName_
+  pConferenceProviderType_
+  pMeetingSetting_ =
+    CreateConferenceProvider'
+      { clientRequestToken =
+          Prelude.Nothing,
+        iPDialIn = Prelude.Nothing,
+        pSTNDialIn = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        conferenceProviderName = pConferenceProviderName_,
+        conferenceProviderType = pConferenceProviderType_,
+        meetingSetting = pMeetingSetting_
+      }
+
+-- | The request token of the client.
+createConferenceProvider_clientRequestToken :: Lens.Lens' CreateConferenceProvider (Prelude.Maybe Prelude.Text)
+createConferenceProvider_clientRequestToken = Lens.lens (\CreateConferenceProvider' {clientRequestToken} -> clientRequestToken) (\s@CreateConferenceProvider' {} a -> s {clientRequestToken = a} :: CreateConferenceProvider)
+
+-- | The IP endpoint and protocol for calling.
+createConferenceProvider_iPDialIn :: Lens.Lens' CreateConferenceProvider (Prelude.Maybe IPDialIn)
+createConferenceProvider_iPDialIn = Lens.lens (\CreateConferenceProvider' {iPDialIn} -> iPDialIn) (\s@CreateConferenceProvider' {} a -> s {iPDialIn = a} :: CreateConferenceProvider)
+
+-- | The information for PSTN conferencing.
+createConferenceProvider_pSTNDialIn :: Lens.Lens' CreateConferenceProvider (Prelude.Maybe PSTNDialIn)
+createConferenceProvider_pSTNDialIn = Lens.lens (\CreateConferenceProvider' {pSTNDialIn} -> pSTNDialIn) (\s@CreateConferenceProvider' {} a -> s {pSTNDialIn = a} :: CreateConferenceProvider)
+
+-- | The tags to be added to the specified resource. Do not provide system
+-- tags.
+createConferenceProvider_tags :: Lens.Lens' CreateConferenceProvider (Prelude.Maybe [Tag])
+createConferenceProvider_tags = Lens.lens (\CreateConferenceProvider' {tags} -> tags) (\s@CreateConferenceProvider' {} a -> s {tags = a} :: CreateConferenceProvider) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the conference provider.
+createConferenceProvider_conferenceProviderName :: Lens.Lens' CreateConferenceProvider Prelude.Text
+createConferenceProvider_conferenceProviderName = Lens.lens (\CreateConferenceProvider' {conferenceProviderName} -> conferenceProviderName) (\s@CreateConferenceProvider' {} a -> s {conferenceProviderName = a} :: CreateConferenceProvider)
+
+-- | Represents a type within a list of predefined types.
+createConferenceProvider_conferenceProviderType :: Lens.Lens' CreateConferenceProvider ConferenceProviderType
+createConferenceProvider_conferenceProviderType = Lens.lens (\CreateConferenceProvider' {conferenceProviderType} -> conferenceProviderType) (\s@CreateConferenceProvider' {} a -> s {conferenceProviderType = a} :: CreateConferenceProvider)
+
+-- | The meeting settings for the conference provider.
+createConferenceProvider_meetingSetting :: Lens.Lens' CreateConferenceProvider MeetingSetting
+createConferenceProvider_meetingSetting = Lens.lens (\CreateConferenceProvider' {meetingSetting} -> meetingSetting) (\s@CreateConferenceProvider' {} a -> s {meetingSetting = a} :: CreateConferenceProvider)
+
+instance Core.AWSRequest CreateConferenceProvider where
+  type
+    AWSResponse CreateConferenceProvider =
+      CreateConferenceProviderResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateConferenceProviderResponse'
+            Prelude.<$> (x Data..?> "ConferenceProviderArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateConferenceProvider where
+  hashWithSalt _salt CreateConferenceProvider' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` iPDialIn
+      `Prelude.hashWithSalt` pSTNDialIn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` conferenceProviderName
+      `Prelude.hashWithSalt` conferenceProviderType
+      `Prelude.hashWithSalt` meetingSetting
+
+instance Prelude.NFData CreateConferenceProvider where
+  rnf CreateConferenceProvider' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf iPDialIn
+      `Prelude.seq` Prelude.rnf pSTNDialIn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf conferenceProviderName
+      `Prelude.seq` Prelude.rnf conferenceProviderType
+      `Prelude.seq` Prelude.rnf meetingSetting
+
+instance Data.ToHeaders CreateConferenceProvider where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateConferenceProvider" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateConferenceProvider where
+  toJSON CreateConferenceProvider' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("IPDialIn" Data..=) Prelude.<$> iPDialIn,
+            ("PSTNDialIn" Data..=) Prelude.<$> pSTNDialIn,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "ConferenceProviderName"
+                  Data..= conferenceProviderName
+              ),
+            Prelude.Just
+              ( "ConferenceProviderType"
+                  Data..= conferenceProviderType
+              ),
+            Prelude.Just
+              ("MeetingSetting" Data..= meetingSetting)
+          ]
+      )
+
+instance Data.ToPath CreateConferenceProvider where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateConferenceProvider where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateConferenceProviderResponse' smart constructor.
+data CreateConferenceProviderResponse = CreateConferenceProviderResponse'
+  { -- | The ARN of the newly-created conference provider.
+    conferenceProviderArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateConferenceProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conferenceProviderArn', 'createConferenceProviderResponse_conferenceProviderArn' - The ARN of the newly-created conference provider.
+--
+-- 'httpStatus', 'createConferenceProviderResponse_httpStatus' - The response's http status code.
+newCreateConferenceProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateConferenceProviderResponse
+newCreateConferenceProviderResponse pHttpStatus_ =
+  CreateConferenceProviderResponse'
+    { conferenceProviderArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the newly-created conference provider.
+createConferenceProviderResponse_conferenceProviderArn :: Lens.Lens' CreateConferenceProviderResponse (Prelude.Maybe Prelude.Text)
+createConferenceProviderResponse_conferenceProviderArn = Lens.lens (\CreateConferenceProviderResponse' {conferenceProviderArn} -> conferenceProviderArn) (\s@CreateConferenceProviderResponse' {} a -> s {conferenceProviderArn = a} :: CreateConferenceProviderResponse)
+
+-- | The response's http status code.
+createConferenceProviderResponse_httpStatus :: Lens.Lens' CreateConferenceProviderResponse Prelude.Int
+createConferenceProviderResponse_httpStatus = Lens.lens (\CreateConferenceProviderResponse' {httpStatus} -> httpStatus) (\s@CreateConferenceProviderResponse' {} a -> s {httpStatus = a} :: CreateConferenceProviderResponse)
+
+instance
+  Prelude.NFData
+    CreateConferenceProviderResponse
+  where
+  rnf CreateConferenceProviderResponse' {..} =
+    Prelude.rnf conferenceProviderArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateContact.hs b/gen/Amazonka/AlexaBusiness/CreateContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateContact.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateContact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a contact with the specified details.
+module Amazonka.AlexaBusiness.CreateContact
+  ( -- * Creating a Request
+    CreateContact (..),
+    newCreateContact,
+
+    -- * Request Lenses
+    createContact_clientRequestToken,
+    createContact_displayName,
+    createContact_lastName,
+    createContact_phoneNumber,
+    createContact_phoneNumbers,
+    createContact_sipAddresses,
+    createContact_tags,
+    createContact_firstName,
+
+    -- * Destructuring the Response
+    CreateContactResponse (..),
+    newCreateContactResponse,
+
+    -- * Response Lenses
+    createContactResponse_contactArn,
+    createContactResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateContact' smart constructor.
+data CreateContact = CreateContact'
+  { -- | A unique, user-specified identifier for this request that ensures
+    -- idempotency.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the contact to display on the console.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The last name of the contact that is used to call the contact on the
+    -- device.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The phone number of the contact in E.164 format. The phone number type
+    -- defaults to WORK. You can specify PhoneNumber or PhoneNumbers. We
+    -- recommend that you use PhoneNumbers, which lets you specify the phone
+    -- number type and multiple numbers.
+    phoneNumber :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The list of phone numbers for the contact.
+    phoneNumbers :: Prelude.Maybe [PhoneNumber],
+    -- | The list of SIP addresses for the contact.
+    sipAddresses :: Prelude.Maybe [SipAddress],
+    -- | The tags to be added to the specified resource. Do not provide system
+    -- tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The first name of the contact that is used to call the contact on the
+    -- device.
+    firstName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createContact_clientRequestToken' - A unique, user-specified identifier for this request that ensures
+-- idempotency.
+--
+-- 'displayName', 'createContact_displayName' - The name of the contact to display on the console.
+--
+-- 'lastName', 'createContact_lastName' - The last name of the contact that is used to call the contact on the
+-- device.
+--
+-- 'phoneNumber', 'createContact_phoneNumber' - The phone number of the contact in E.164 format. The phone number type
+-- defaults to WORK. You can specify PhoneNumber or PhoneNumbers. We
+-- recommend that you use PhoneNumbers, which lets you specify the phone
+-- number type and multiple numbers.
+--
+-- 'phoneNumbers', 'createContact_phoneNumbers' - The list of phone numbers for the contact.
+--
+-- 'sipAddresses', 'createContact_sipAddresses' - The list of SIP addresses for the contact.
+--
+-- 'tags', 'createContact_tags' - The tags to be added to the specified resource. Do not provide system
+-- tags.
+--
+-- 'firstName', 'createContact_firstName' - The first name of the contact that is used to call the contact on the
+-- device.
+newCreateContact ::
+  -- | 'firstName'
+  Prelude.Text ->
+  CreateContact
+newCreateContact pFirstName_ =
+  CreateContact'
+    { clientRequestToken =
+        Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      phoneNumbers = Prelude.Nothing,
+      sipAddresses = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      firstName = pFirstName_
+    }
+
+-- | A unique, user-specified identifier for this request that ensures
+-- idempotency.
+createContact_clientRequestToken :: Lens.Lens' CreateContact (Prelude.Maybe Prelude.Text)
+createContact_clientRequestToken = Lens.lens (\CreateContact' {clientRequestToken} -> clientRequestToken) (\s@CreateContact' {} a -> s {clientRequestToken = a} :: CreateContact)
+
+-- | The name of the contact to display on the console.
+createContact_displayName :: Lens.Lens' CreateContact (Prelude.Maybe Prelude.Text)
+createContact_displayName = Lens.lens (\CreateContact' {displayName} -> displayName) (\s@CreateContact' {} a -> s {displayName = a} :: CreateContact)
+
+-- | The last name of the contact that is used to call the contact on the
+-- device.
+createContact_lastName :: Lens.Lens' CreateContact (Prelude.Maybe Prelude.Text)
+createContact_lastName = Lens.lens (\CreateContact' {lastName} -> lastName) (\s@CreateContact' {} a -> s {lastName = a} :: CreateContact)
+
+-- | The phone number of the contact in E.164 format. The phone number type
+-- defaults to WORK. You can specify PhoneNumber or PhoneNumbers. We
+-- recommend that you use PhoneNumbers, which lets you specify the phone
+-- number type and multiple numbers.
+createContact_phoneNumber :: Lens.Lens' CreateContact (Prelude.Maybe Prelude.Text)
+createContact_phoneNumber = Lens.lens (\CreateContact' {phoneNumber} -> phoneNumber) (\s@CreateContact' {} a -> s {phoneNumber = a} :: CreateContact) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The list of phone numbers for the contact.
+createContact_phoneNumbers :: Lens.Lens' CreateContact (Prelude.Maybe [PhoneNumber])
+createContact_phoneNumbers = Lens.lens (\CreateContact' {phoneNumbers} -> phoneNumbers) (\s@CreateContact' {} a -> s {phoneNumbers = a} :: CreateContact) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of SIP addresses for the contact.
+createContact_sipAddresses :: Lens.Lens' CreateContact (Prelude.Maybe [SipAddress])
+createContact_sipAddresses = Lens.lens (\CreateContact' {sipAddresses} -> sipAddresses) (\s@CreateContact' {} a -> s {sipAddresses = a} :: CreateContact) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to be added to the specified resource. Do not provide system
+-- tags.
+createContact_tags :: Lens.Lens' CreateContact (Prelude.Maybe [Tag])
+createContact_tags = Lens.lens (\CreateContact' {tags} -> tags) (\s@CreateContact' {} a -> s {tags = a} :: CreateContact) Prelude.. Lens.mapping Lens.coerced
+
+-- | The first name of the contact that is used to call the contact on the
+-- device.
+createContact_firstName :: Lens.Lens' CreateContact Prelude.Text
+createContact_firstName = Lens.lens (\CreateContact' {firstName} -> firstName) (\s@CreateContact' {} a -> s {firstName = a} :: CreateContact)
+
+instance Core.AWSRequest CreateContact where
+  type
+    AWSResponse CreateContact =
+      CreateContactResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateContactResponse'
+            Prelude.<$> (x Data..?> "ContactArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateContact where
+  hashWithSalt _salt CreateContact' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` phoneNumbers
+      `Prelude.hashWithSalt` sipAddresses
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` firstName
+
+instance Prelude.NFData CreateContact where
+  rnf CreateContact' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf phoneNumbers
+      `Prelude.seq` Prelude.rnf sipAddresses
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf firstName
+
+instance Data.ToHeaders CreateContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateContact" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateContact where
+  toJSON CreateContact' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("LastName" Data..=) Prelude.<$> lastName,
+            ("PhoneNumber" Data..=) Prelude.<$> phoneNumber,
+            ("PhoneNumbers" Data..=) Prelude.<$> phoneNumbers,
+            ("SipAddresses" Data..=) Prelude.<$> sipAddresses,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("FirstName" Data..= firstName)
+          ]
+      )
+
+instance Data.ToPath CreateContact where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateContactResponse' smart constructor.
+data CreateContactResponse = CreateContactResponse'
+  { -- | The ARN of the newly created address book.
+    contactArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactArn', 'createContactResponse_contactArn' - The ARN of the newly created address book.
+--
+-- 'httpStatus', 'createContactResponse_httpStatus' - The response's http status code.
+newCreateContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateContactResponse
+newCreateContactResponse pHttpStatus_ =
+  CreateContactResponse'
+    { contactArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the newly created address book.
+createContactResponse_contactArn :: Lens.Lens' CreateContactResponse (Prelude.Maybe Prelude.Text)
+createContactResponse_contactArn = Lens.lens (\CreateContactResponse' {contactArn} -> contactArn) (\s@CreateContactResponse' {} a -> s {contactArn = a} :: CreateContactResponse)
+
+-- | The response's http status code.
+createContactResponse_httpStatus :: Lens.Lens' CreateContactResponse Prelude.Int
+createContactResponse_httpStatus = Lens.lens (\CreateContactResponse' {httpStatus} -> httpStatus) (\s@CreateContactResponse' {} a -> s {httpStatus = a} :: CreateContactResponse)
+
+instance Prelude.NFData CreateContactResponse where
+  rnf CreateContactResponse' {..} =
+    Prelude.rnf contactArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateGatewayGroup.hs b/gen/Amazonka/AlexaBusiness/CreateGatewayGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateGatewayGroup.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateGatewayGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a gateway group with the specified details.
+module Amazonka.AlexaBusiness.CreateGatewayGroup
+  ( -- * Creating a Request
+    CreateGatewayGroup (..),
+    newCreateGatewayGroup,
+
+    -- * Request Lenses
+    createGatewayGroup_description,
+    createGatewayGroup_tags,
+    createGatewayGroup_name,
+    createGatewayGroup_clientRequestToken,
+
+    -- * Destructuring the Response
+    CreateGatewayGroupResponse (..),
+    newCreateGatewayGroupResponse,
+
+    -- * Response Lenses
+    createGatewayGroupResponse_gatewayGroupArn,
+    createGatewayGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateGatewayGroup' smart constructor.
+data CreateGatewayGroup = CreateGatewayGroup'
+  { -- | The description of the gateway group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags to be added to the specified resource. Do not provide system
+    -- tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the gateway group.
+    name :: Prelude.Text,
+    -- | A unique, user-specified identifier for the request that ensures
+    -- idempotency.
+    clientRequestToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateGatewayGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createGatewayGroup_description' - The description of the gateway group.
+--
+-- 'tags', 'createGatewayGroup_tags' - The tags to be added to the specified resource. Do not provide system
+-- tags.
+--
+-- 'name', 'createGatewayGroup_name' - The name of the gateway group.
+--
+-- 'clientRequestToken', 'createGatewayGroup_clientRequestToken' - A unique, user-specified identifier for the request that ensures
+-- idempotency.
+newCreateGatewayGroup ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  CreateGatewayGroup
+newCreateGatewayGroup pName_ pClientRequestToken_ =
+  CreateGatewayGroup'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      clientRequestToken = pClientRequestToken_
+    }
+
+-- | The description of the gateway group.
+createGatewayGroup_description :: Lens.Lens' CreateGatewayGroup (Prelude.Maybe Prelude.Text)
+createGatewayGroup_description = Lens.lens (\CreateGatewayGroup' {description} -> description) (\s@CreateGatewayGroup' {} a -> s {description = a} :: CreateGatewayGroup)
+
+-- | The tags to be added to the specified resource. Do not provide system
+-- tags.
+createGatewayGroup_tags :: Lens.Lens' CreateGatewayGroup (Prelude.Maybe [Tag])
+createGatewayGroup_tags = Lens.lens (\CreateGatewayGroup' {tags} -> tags) (\s@CreateGatewayGroup' {} a -> s {tags = a} :: CreateGatewayGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the gateway group.
+createGatewayGroup_name :: Lens.Lens' CreateGatewayGroup Prelude.Text
+createGatewayGroup_name = Lens.lens (\CreateGatewayGroup' {name} -> name) (\s@CreateGatewayGroup' {} a -> s {name = a} :: CreateGatewayGroup)
+
+-- | A unique, user-specified identifier for the request that ensures
+-- idempotency.
+createGatewayGroup_clientRequestToken :: Lens.Lens' CreateGatewayGroup Prelude.Text
+createGatewayGroup_clientRequestToken = Lens.lens (\CreateGatewayGroup' {clientRequestToken} -> clientRequestToken) (\s@CreateGatewayGroup' {} a -> s {clientRequestToken = a} :: CreateGatewayGroup)
+
+instance Core.AWSRequest CreateGatewayGroup where
+  type
+    AWSResponse CreateGatewayGroup =
+      CreateGatewayGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateGatewayGroupResponse'
+            Prelude.<$> (x Data..?> "GatewayGroupArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateGatewayGroup where
+  hashWithSalt _salt CreateGatewayGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` clientRequestToken
+
+instance Prelude.NFData CreateGatewayGroup where
+  rnf CreateGatewayGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf clientRequestToken
+
+instance Data.ToHeaders CreateGatewayGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateGatewayGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateGatewayGroup where
+  toJSON CreateGatewayGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken)
+          ]
+      )
+
+instance Data.ToPath CreateGatewayGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateGatewayGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateGatewayGroupResponse' smart constructor.
+data CreateGatewayGroupResponse = CreateGatewayGroupResponse'
+  { -- | The ARN of the created gateway group.
+    gatewayGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateGatewayGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gatewayGroupArn', 'createGatewayGroupResponse_gatewayGroupArn' - The ARN of the created gateway group.
+--
+-- 'httpStatus', 'createGatewayGroupResponse_httpStatus' - The response's http status code.
+newCreateGatewayGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateGatewayGroupResponse
+newCreateGatewayGroupResponse pHttpStatus_ =
+  CreateGatewayGroupResponse'
+    { gatewayGroupArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the created gateway group.
+createGatewayGroupResponse_gatewayGroupArn :: Lens.Lens' CreateGatewayGroupResponse (Prelude.Maybe Prelude.Text)
+createGatewayGroupResponse_gatewayGroupArn = Lens.lens (\CreateGatewayGroupResponse' {gatewayGroupArn} -> gatewayGroupArn) (\s@CreateGatewayGroupResponse' {} a -> s {gatewayGroupArn = a} :: CreateGatewayGroupResponse)
+
+-- | The response's http status code.
+createGatewayGroupResponse_httpStatus :: Lens.Lens' CreateGatewayGroupResponse Prelude.Int
+createGatewayGroupResponse_httpStatus = Lens.lens (\CreateGatewayGroupResponse' {httpStatus} -> httpStatus) (\s@CreateGatewayGroupResponse' {} a -> s {httpStatus = a} :: CreateGatewayGroupResponse)
+
+instance Prelude.NFData CreateGatewayGroupResponse where
+  rnf CreateGatewayGroupResponse' {..} =
+    Prelude.rnf gatewayGroupArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateNetworkProfile.hs b/gen/Amazonka/AlexaBusiness/CreateNetworkProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateNetworkProfile.hs
@@ -0,0 +1,344 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateNetworkProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a network profile with the specified details.
+module Amazonka.AlexaBusiness.CreateNetworkProfile
+  ( -- * Creating a Request
+    CreateNetworkProfile (..),
+    newCreateNetworkProfile,
+
+    -- * Request Lenses
+    createNetworkProfile_certificateAuthorityArn,
+    createNetworkProfile_currentPassword,
+    createNetworkProfile_description,
+    createNetworkProfile_eapMethod,
+    createNetworkProfile_nextPassword,
+    createNetworkProfile_tags,
+    createNetworkProfile_trustAnchors,
+    createNetworkProfile_networkProfileName,
+    createNetworkProfile_ssid,
+    createNetworkProfile_securityType,
+    createNetworkProfile_clientRequestToken,
+
+    -- * Destructuring the Response
+    CreateNetworkProfileResponse (..),
+    newCreateNetworkProfileResponse,
+
+    -- * Response Lenses
+    createNetworkProfileResponse_networkProfileArn,
+    createNetworkProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNetworkProfile' smart constructor.
+data CreateNetworkProfile = CreateNetworkProfile'
+  { -- | The ARN of the Private Certificate Authority (PCA) created in AWS
+    -- Certificate Manager (ACM). This is used to issue certificates to the
+    -- devices.
+    certificateAuthorityArn :: Prelude.Maybe Prelude.Text,
+    -- | The current password of the Wi-Fi network.
+    currentPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Detailed information about a device\'s network profile.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The authentication standard that is used in the EAP framework.
+    -- Currently, EAP_TLS is supported.
+    eapMethod :: Prelude.Maybe NetworkEapMethod,
+    -- | The next, or subsequent, password of the Wi-Fi network. This password is
+    -- asynchronously transmitted to the device and is used when the password
+    -- of the network changes to NextPassword.
+    nextPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The tags to be added to the specified resource. Do not provide system
+    -- tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The root certificates of your authentication server that is installed on
+    -- your devices and used to trust your authentication server during EAP
+    -- negotiation.
+    trustAnchors :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The name of the network profile associated with a device.
+    networkProfileName :: Prelude.Text,
+    -- | The SSID of the Wi-Fi network.
+    ssid :: Prelude.Text,
+    -- | The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+    -- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+    securityType :: NetworkSecurityType,
+    clientRequestToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateAuthorityArn', 'createNetworkProfile_certificateAuthorityArn' - The ARN of the Private Certificate Authority (PCA) created in AWS
+-- Certificate Manager (ACM). This is used to issue certificates to the
+-- devices.
+--
+-- 'currentPassword', 'createNetworkProfile_currentPassword' - The current password of the Wi-Fi network.
+--
+-- 'description', 'createNetworkProfile_description' - Detailed information about a device\'s network profile.
+--
+-- 'eapMethod', 'createNetworkProfile_eapMethod' - The authentication standard that is used in the EAP framework.
+-- Currently, EAP_TLS is supported.
+--
+-- 'nextPassword', 'createNetworkProfile_nextPassword' - The next, or subsequent, password of the Wi-Fi network. This password is
+-- asynchronously transmitted to the device and is used when the password
+-- of the network changes to NextPassword.
+--
+-- 'tags', 'createNetworkProfile_tags' - The tags to be added to the specified resource. Do not provide system
+-- tags.
+--
+-- 'trustAnchors', 'createNetworkProfile_trustAnchors' - The root certificates of your authentication server that is installed on
+-- your devices and used to trust your authentication server during EAP
+-- negotiation.
+--
+-- 'networkProfileName', 'createNetworkProfile_networkProfileName' - The name of the network profile associated with a device.
+--
+-- 'ssid', 'createNetworkProfile_ssid' - The SSID of the Wi-Fi network.
+--
+-- 'securityType', 'createNetworkProfile_securityType' - The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+-- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+--
+-- 'clientRequestToken', 'createNetworkProfile_clientRequestToken' - Undocumented member.
+newCreateNetworkProfile ::
+  -- | 'networkProfileName'
+  Prelude.Text ->
+  -- | 'ssid'
+  Prelude.Text ->
+  -- | 'securityType'
+  NetworkSecurityType ->
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  CreateNetworkProfile
+newCreateNetworkProfile
+  pNetworkProfileName_
+  pSsid_
+  pSecurityType_
+  pClientRequestToken_ =
+    CreateNetworkProfile'
+      { certificateAuthorityArn =
+          Prelude.Nothing,
+        currentPassword = Prelude.Nothing,
+        description = Prelude.Nothing,
+        eapMethod = Prelude.Nothing,
+        nextPassword = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        trustAnchors = Prelude.Nothing,
+        networkProfileName = pNetworkProfileName_,
+        ssid = pSsid_,
+        securityType = pSecurityType_,
+        clientRequestToken = pClientRequestToken_
+      }
+
+-- | The ARN of the Private Certificate Authority (PCA) created in AWS
+-- Certificate Manager (ACM). This is used to issue certificates to the
+-- devices.
+createNetworkProfile_certificateAuthorityArn :: Lens.Lens' CreateNetworkProfile (Prelude.Maybe Prelude.Text)
+createNetworkProfile_certificateAuthorityArn = Lens.lens (\CreateNetworkProfile' {certificateAuthorityArn} -> certificateAuthorityArn) (\s@CreateNetworkProfile' {} a -> s {certificateAuthorityArn = a} :: CreateNetworkProfile)
+
+-- | The current password of the Wi-Fi network.
+createNetworkProfile_currentPassword :: Lens.Lens' CreateNetworkProfile (Prelude.Maybe Prelude.Text)
+createNetworkProfile_currentPassword = Lens.lens (\CreateNetworkProfile' {currentPassword} -> currentPassword) (\s@CreateNetworkProfile' {} a -> s {currentPassword = a} :: CreateNetworkProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Detailed information about a device\'s network profile.
+createNetworkProfile_description :: Lens.Lens' CreateNetworkProfile (Prelude.Maybe Prelude.Text)
+createNetworkProfile_description = Lens.lens (\CreateNetworkProfile' {description} -> description) (\s@CreateNetworkProfile' {} a -> s {description = a} :: CreateNetworkProfile)
+
+-- | The authentication standard that is used in the EAP framework.
+-- Currently, EAP_TLS is supported.
+createNetworkProfile_eapMethod :: Lens.Lens' CreateNetworkProfile (Prelude.Maybe NetworkEapMethod)
+createNetworkProfile_eapMethod = Lens.lens (\CreateNetworkProfile' {eapMethod} -> eapMethod) (\s@CreateNetworkProfile' {} a -> s {eapMethod = a} :: CreateNetworkProfile)
+
+-- | The next, or subsequent, password of the Wi-Fi network. This password is
+-- asynchronously transmitted to the device and is used when the password
+-- of the network changes to NextPassword.
+createNetworkProfile_nextPassword :: Lens.Lens' CreateNetworkProfile (Prelude.Maybe Prelude.Text)
+createNetworkProfile_nextPassword = Lens.lens (\CreateNetworkProfile' {nextPassword} -> nextPassword) (\s@CreateNetworkProfile' {} a -> s {nextPassword = a} :: CreateNetworkProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The tags to be added to the specified resource. Do not provide system
+-- tags.
+createNetworkProfile_tags :: Lens.Lens' CreateNetworkProfile (Prelude.Maybe [Tag])
+createNetworkProfile_tags = Lens.lens (\CreateNetworkProfile' {tags} -> tags) (\s@CreateNetworkProfile' {} a -> s {tags = a} :: CreateNetworkProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The root certificates of your authentication server that is installed on
+-- your devices and used to trust your authentication server during EAP
+-- negotiation.
+createNetworkProfile_trustAnchors :: Lens.Lens' CreateNetworkProfile (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createNetworkProfile_trustAnchors = Lens.lens (\CreateNetworkProfile' {trustAnchors} -> trustAnchors) (\s@CreateNetworkProfile' {} a -> s {trustAnchors = a} :: CreateNetworkProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the network profile associated with a device.
+createNetworkProfile_networkProfileName :: Lens.Lens' CreateNetworkProfile Prelude.Text
+createNetworkProfile_networkProfileName = Lens.lens (\CreateNetworkProfile' {networkProfileName} -> networkProfileName) (\s@CreateNetworkProfile' {} a -> s {networkProfileName = a} :: CreateNetworkProfile)
+
+-- | The SSID of the Wi-Fi network.
+createNetworkProfile_ssid :: Lens.Lens' CreateNetworkProfile Prelude.Text
+createNetworkProfile_ssid = Lens.lens (\CreateNetworkProfile' {ssid} -> ssid) (\s@CreateNetworkProfile' {} a -> s {ssid = a} :: CreateNetworkProfile)
+
+-- | The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+-- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+createNetworkProfile_securityType :: Lens.Lens' CreateNetworkProfile NetworkSecurityType
+createNetworkProfile_securityType = Lens.lens (\CreateNetworkProfile' {securityType} -> securityType) (\s@CreateNetworkProfile' {} a -> s {securityType = a} :: CreateNetworkProfile)
+
+-- | Undocumented member.
+createNetworkProfile_clientRequestToken :: Lens.Lens' CreateNetworkProfile Prelude.Text
+createNetworkProfile_clientRequestToken = Lens.lens (\CreateNetworkProfile' {clientRequestToken} -> clientRequestToken) (\s@CreateNetworkProfile' {} a -> s {clientRequestToken = a} :: CreateNetworkProfile)
+
+instance Core.AWSRequest CreateNetworkProfile where
+  type
+    AWSResponse CreateNetworkProfile =
+      CreateNetworkProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateNetworkProfileResponse'
+            Prelude.<$> (x Data..?> "NetworkProfileArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateNetworkProfile where
+  hashWithSalt _salt CreateNetworkProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateAuthorityArn
+      `Prelude.hashWithSalt` currentPassword
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eapMethod
+      `Prelude.hashWithSalt` nextPassword
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trustAnchors
+      `Prelude.hashWithSalt` networkProfileName
+      `Prelude.hashWithSalt` ssid
+      `Prelude.hashWithSalt` securityType
+      `Prelude.hashWithSalt` clientRequestToken
+
+instance Prelude.NFData CreateNetworkProfile where
+  rnf CreateNetworkProfile' {..} =
+    Prelude.rnf certificateAuthorityArn
+      `Prelude.seq` Prelude.rnf currentPassword
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eapMethod
+      `Prelude.seq` Prelude.rnf nextPassword
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trustAnchors
+      `Prelude.seq` Prelude.rnf networkProfileName
+      `Prelude.seq` Prelude.rnf ssid
+      `Prelude.seq` Prelude.rnf securityType
+      `Prelude.seq` Prelude.rnf clientRequestToken
+
+instance Data.ToHeaders CreateNetworkProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateNetworkProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateNetworkProfile where
+  toJSON CreateNetworkProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CertificateAuthorityArn" Data..=)
+              Prelude.<$> certificateAuthorityArn,
+            ("CurrentPassword" Data..=)
+              Prelude.<$> currentPassword,
+            ("Description" Data..=) Prelude.<$> description,
+            ("EapMethod" Data..=) Prelude.<$> eapMethod,
+            ("NextPassword" Data..=) Prelude.<$> nextPassword,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TrustAnchors" Data..=) Prelude.<$> trustAnchors,
+            Prelude.Just
+              ("NetworkProfileName" Data..= networkProfileName),
+            Prelude.Just ("Ssid" Data..= ssid),
+            Prelude.Just ("SecurityType" Data..= securityType),
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken)
+          ]
+      )
+
+instance Data.ToPath CreateNetworkProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateNetworkProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateNetworkProfileResponse' smart constructor.
+data CreateNetworkProfileResponse = CreateNetworkProfileResponse'
+  { -- | The ARN of the network profile associated with a device.
+    networkProfileArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkProfileArn', 'createNetworkProfileResponse_networkProfileArn' - The ARN of the network profile associated with a device.
+--
+-- 'httpStatus', 'createNetworkProfileResponse_httpStatus' - The response's http status code.
+newCreateNetworkProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNetworkProfileResponse
+newCreateNetworkProfileResponse pHttpStatus_ =
+  CreateNetworkProfileResponse'
+    { networkProfileArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the network profile associated with a device.
+createNetworkProfileResponse_networkProfileArn :: Lens.Lens' CreateNetworkProfileResponse (Prelude.Maybe Prelude.Text)
+createNetworkProfileResponse_networkProfileArn = Lens.lens (\CreateNetworkProfileResponse' {networkProfileArn} -> networkProfileArn) (\s@CreateNetworkProfileResponse' {} a -> s {networkProfileArn = a} :: CreateNetworkProfileResponse)
+
+-- | The response's http status code.
+createNetworkProfileResponse_httpStatus :: Lens.Lens' CreateNetworkProfileResponse Prelude.Int
+createNetworkProfileResponse_httpStatus = Lens.lens (\CreateNetworkProfileResponse' {httpStatus} -> httpStatus) (\s@CreateNetworkProfileResponse' {} a -> s {httpStatus = a} :: CreateNetworkProfileResponse)
+
+instance Prelude.NFData CreateNetworkProfileResponse where
+  rnf CreateNetworkProfileResponse' {..} =
+    Prelude.rnf networkProfileArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateProfile.hs b/gen/Amazonka/AlexaBusiness/CreateProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateProfile.hs
@@ -0,0 +1,368 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new room profile with the specified details.
+module Amazonka.AlexaBusiness.CreateProfile
+  ( -- * Creating a Request
+    CreateProfile (..),
+    newCreateProfile,
+
+    -- * Request Lenses
+    createProfile_clientRequestToken,
+    createProfile_dataRetentionOptIn,
+    createProfile_locale,
+    createProfile_maxVolumeLimit,
+    createProfile_meetingRoomConfiguration,
+    createProfile_pSTNEnabled,
+    createProfile_setupModeDisabled,
+    createProfile_tags,
+    createProfile_profileName,
+    createProfile_timezone,
+    createProfile_address,
+    createProfile_distanceUnit,
+    createProfile_temperatureUnit,
+    createProfile_wakeWord,
+
+    -- * Destructuring the Response
+    CreateProfileResponse (..),
+    newCreateProfileResponse,
+
+    -- * Response Lenses
+    createProfileResponse_profileArn,
+    createProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateProfile' smart constructor.
+data CreateProfile = CreateProfile'
+  { -- | The user-specified token that is used during the creation of a profile.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | Whether data retention of the profile is enabled.
+    dataRetentionOptIn :: Prelude.Maybe Prelude.Bool,
+    -- | The locale of the room profile. (This is currently only available to a
+    -- limited preview audience.)
+    locale :: Prelude.Maybe Prelude.Text,
+    -- | The maximum volume limit for a room profile.
+    maxVolumeLimit :: Prelude.Maybe Prelude.Int,
+    -- | The meeting room settings of a room profile.
+    meetingRoomConfiguration :: Prelude.Maybe CreateMeetingRoomConfiguration,
+    -- | Whether PSTN calling is enabled.
+    pSTNEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | Whether room profile setup is enabled.
+    setupModeDisabled :: Prelude.Maybe Prelude.Bool,
+    -- | The tags for the profile.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of a room profile.
+    profileName :: Prelude.Text,
+    -- | The time zone used by a room profile.
+    timezone :: Prelude.Text,
+    -- | The valid address for the room.
+    address :: Prelude.Text,
+    -- | The distance unit to be used by devices in the profile.
+    distanceUnit :: DistanceUnit,
+    -- | The temperature unit to be used by devices in the profile.
+    temperatureUnit :: TemperatureUnit,
+    -- | A wake word for Alexa, Echo, Amazon, or a computer.
+    wakeWord :: WakeWord
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createProfile_clientRequestToken' - The user-specified token that is used during the creation of a profile.
+--
+-- 'dataRetentionOptIn', 'createProfile_dataRetentionOptIn' - Whether data retention of the profile is enabled.
+--
+-- 'locale', 'createProfile_locale' - The locale of the room profile. (This is currently only available to a
+-- limited preview audience.)
+--
+-- 'maxVolumeLimit', 'createProfile_maxVolumeLimit' - The maximum volume limit for a room profile.
+--
+-- 'meetingRoomConfiguration', 'createProfile_meetingRoomConfiguration' - The meeting room settings of a room profile.
+--
+-- 'pSTNEnabled', 'createProfile_pSTNEnabled' - Whether PSTN calling is enabled.
+--
+-- 'setupModeDisabled', 'createProfile_setupModeDisabled' - Whether room profile setup is enabled.
+--
+-- 'tags', 'createProfile_tags' - The tags for the profile.
+--
+-- 'profileName', 'createProfile_profileName' - The name of a room profile.
+--
+-- 'timezone', 'createProfile_timezone' - The time zone used by a room profile.
+--
+-- 'address', 'createProfile_address' - The valid address for the room.
+--
+-- 'distanceUnit', 'createProfile_distanceUnit' - The distance unit to be used by devices in the profile.
+--
+-- 'temperatureUnit', 'createProfile_temperatureUnit' - The temperature unit to be used by devices in the profile.
+--
+-- 'wakeWord', 'createProfile_wakeWord' - A wake word for Alexa, Echo, Amazon, or a computer.
+newCreateProfile ::
+  -- | 'profileName'
+  Prelude.Text ->
+  -- | 'timezone'
+  Prelude.Text ->
+  -- | 'address'
+  Prelude.Text ->
+  -- | 'distanceUnit'
+  DistanceUnit ->
+  -- | 'temperatureUnit'
+  TemperatureUnit ->
+  -- | 'wakeWord'
+  WakeWord ->
+  CreateProfile
+newCreateProfile
+  pProfileName_
+  pTimezone_
+  pAddress_
+  pDistanceUnit_
+  pTemperatureUnit_
+  pWakeWord_ =
+    CreateProfile'
+      { clientRequestToken =
+          Prelude.Nothing,
+        dataRetentionOptIn = Prelude.Nothing,
+        locale = Prelude.Nothing,
+        maxVolumeLimit = Prelude.Nothing,
+        meetingRoomConfiguration = Prelude.Nothing,
+        pSTNEnabled = Prelude.Nothing,
+        setupModeDisabled = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        profileName = pProfileName_,
+        timezone = pTimezone_,
+        address = pAddress_,
+        distanceUnit = pDistanceUnit_,
+        temperatureUnit = pTemperatureUnit_,
+        wakeWord = pWakeWord_
+      }
+
+-- | The user-specified token that is used during the creation of a profile.
+createProfile_clientRequestToken :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_clientRequestToken = Lens.lens (\CreateProfile' {clientRequestToken} -> clientRequestToken) (\s@CreateProfile' {} a -> s {clientRequestToken = a} :: CreateProfile)
+
+-- | Whether data retention of the profile is enabled.
+createProfile_dataRetentionOptIn :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Bool)
+createProfile_dataRetentionOptIn = Lens.lens (\CreateProfile' {dataRetentionOptIn} -> dataRetentionOptIn) (\s@CreateProfile' {} a -> s {dataRetentionOptIn = a} :: CreateProfile)
+
+-- | The locale of the room profile. (This is currently only available to a
+-- limited preview audience.)
+createProfile_locale :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Text)
+createProfile_locale = Lens.lens (\CreateProfile' {locale} -> locale) (\s@CreateProfile' {} a -> s {locale = a} :: CreateProfile)
+
+-- | The maximum volume limit for a room profile.
+createProfile_maxVolumeLimit :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Int)
+createProfile_maxVolumeLimit = Lens.lens (\CreateProfile' {maxVolumeLimit} -> maxVolumeLimit) (\s@CreateProfile' {} a -> s {maxVolumeLimit = a} :: CreateProfile)
+
+-- | The meeting room settings of a room profile.
+createProfile_meetingRoomConfiguration :: Lens.Lens' CreateProfile (Prelude.Maybe CreateMeetingRoomConfiguration)
+createProfile_meetingRoomConfiguration = Lens.lens (\CreateProfile' {meetingRoomConfiguration} -> meetingRoomConfiguration) (\s@CreateProfile' {} a -> s {meetingRoomConfiguration = a} :: CreateProfile)
+
+-- | Whether PSTN calling is enabled.
+createProfile_pSTNEnabled :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Bool)
+createProfile_pSTNEnabled = Lens.lens (\CreateProfile' {pSTNEnabled} -> pSTNEnabled) (\s@CreateProfile' {} a -> s {pSTNEnabled = a} :: CreateProfile)
+
+-- | Whether room profile setup is enabled.
+createProfile_setupModeDisabled :: Lens.Lens' CreateProfile (Prelude.Maybe Prelude.Bool)
+createProfile_setupModeDisabled = Lens.lens (\CreateProfile' {setupModeDisabled} -> setupModeDisabled) (\s@CreateProfile' {} a -> s {setupModeDisabled = a} :: CreateProfile)
+
+-- | The tags for the profile.
+createProfile_tags :: Lens.Lens' CreateProfile (Prelude.Maybe [Tag])
+createProfile_tags = Lens.lens (\CreateProfile' {tags} -> tags) (\s@CreateProfile' {} a -> s {tags = a} :: CreateProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of a room profile.
+createProfile_profileName :: Lens.Lens' CreateProfile Prelude.Text
+createProfile_profileName = Lens.lens (\CreateProfile' {profileName} -> profileName) (\s@CreateProfile' {} a -> s {profileName = a} :: CreateProfile)
+
+-- | The time zone used by a room profile.
+createProfile_timezone :: Lens.Lens' CreateProfile Prelude.Text
+createProfile_timezone = Lens.lens (\CreateProfile' {timezone} -> timezone) (\s@CreateProfile' {} a -> s {timezone = a} :: CreateProfile)
+
+-- | The valid address for the room.
+createProfile_address :: Lens.Lens' CreateProfile Prelude.Text
+createProfile_address = Lens.lens (\CreateProfile' {address} -> address) (\s@CreateProfile' {} a -> s {address = a} :: CreateProfile)
+
+-- | The distance unit to be used by devices in the profile.
+createProfile_distanceUnit :: Lens.Lens' CreateProfile DistanceUnit
+createProfile_distanceUnit = Lens.lens (\CreateProfile' {distanceUnit} -> distanceUnit) (\s@CreateProfile' {} a -> s {distanceUnit = a} :: CreateProfile)
+
+-- | The temperature unit to be used by devices in the profile.
+createProfile_temperatureUnit :: Lens.Lens' CreateProfile TemperatureUnit
+createProfile_temperatureUnit = Lens.lens (\CreateProfile' {temperatureUnit} -> temperatureUnit) (\s@CreateProfile' {} a -> s {temperatureUnit = a} :: CreateProfile)
+
+-- | A wake word for Alexa, Echo, Amazon, or a computer.
+createProfile_wakeWord :: Lens.Lens' CreateProfile WakeWord
+createProfile_wakeWord = Lens.lens (\CreateProfile' {wakeWord} -> wakeWord) (\s@CreateProfile' {} a -> s {wakeWord = a} :: CreateProfile)
+
+instance Core.AWSRequest CreateProfile where
+  type
+    AWSResponse CreateProfile =
+      CreateProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateProfileResponse'
+            Prelude.<$> (x Data..?> "ProfileArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateProfile where
+  hashWithSalt _salt CreateProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` dataRetentionOptIn
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` maxVolumeLimit
+      `Prelude.hashWithSalt` meetingRoomConfiguration
+      `Prelude.hashWithSalt` pSTNEnabled
+      `Prelude.hashWithSalt` setupModeDisabled
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` timezone
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` distanceUnit
+      `Prelude.hashWithSalt` temperatureUnit
+      `Prelude.hashWithSalt` wakeWord
+
+instance Prelude.NFData CreateProfile where
+  rnf CreateProfile' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf dataRetentionOptIn
+      `Prelude.seq` Prelude.rnf locale
+      `Prelude.seq` Prelude.rnf maxVolumeLimit
+      `Prelude.seq` Prelude.rnf meetingRoomConfiguration
+      `Prelude.seq` Prelude.rnf pSTNEnabled
+      `Prelude.seq` Prelude.rnf setupModeDisabled
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf timezone
+      `Prelude.seq` Prelude.rnf address
+      `Prelude.seq` Prelude.rnf distanceUnit
+      `Prelude.seq` Prelude.rnf temperatureUnit
+      `Prelude.seq` Prelude.rnf wakeWord
+
+instance Data.ToHeaders CreateProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateProfile where
+  toJSON CreateProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("DataRetentionOptIn" Data..=)
+              Prelude.<$> dataRetentionOptIn,
+            ("Locale" Data..=) Prelude.<$> locale,
+            ("MaxVolumeLimit" Data..=)
+              Prelude.<$> maxVolumeLimit,
+            ("MeetingRoomConfiguration" Data..=)
+              Prelude.<$> meetingRoomConfiguration,
+            ("PSTNEnabled" Data..=) Prelude.<$> pSTNEnabled,
+            ("SetupModeDisabled" Data..=)
+              Prelude.<$> setupModeDisabled,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("ProfileName" Data..= profileName),
+            Prelude.Just ("Timezone" Data..= timezone),
+            Prelude.Just ("Address" Data..= address),
+            Prelude.Just ("DistanceUnit" Data..= distanceUnit),
+            Prelude.Just
+              ("TemperatureUnit" Data..= temperatureUnit),
+            Prelude.Just ("WakeWord" Data..= wakeWord)
+          ]
+      )
+
+instance Data.ToPath CreateProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateProfileResponse' smart constructor.
+data CreateProfileResponse = CreateProfileResponse'
+  { -- | The ARN of the newly created room profile in the response.
+    profileArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileArn', 'createProfileResponse_profileArn' - The ARN of the newly created room profile in the response.
+--
+-- 'httpStatus', 'createProfileResponse_httpStatus' - The response's http status code.
+newCreateProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateProfileResponse
+newCreateProfileResponse pHttpStatus_ =
+  CreateProfileResponse'
+    { profileArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the newly created room profile in the response.
+createProfileResponse_profileArn :: Lens.Lens' CreateProfileResponse (Prelude.Maybe Prelude.Text)
+createProfileResponse_profileArn = Lens.lens (\CreateProfileResponse' {profileArn} -> profileArn) (\s@CreateProfileResponse' {} a -> s {profileArn = a} :: CreateProfileResponse)
+
+-- | The response's http status code.
+createProfileResponse_httpStatus :: Lens.Lens' CreateProfileResponse Prelude.Int
+createProfileResponse_httpStatus = Lens.lens (\CreateProfileResponse' {httpStatus} -> httpStatus) (\s@CreateProfileResponse' {} a -> s {httpStatus = a} :: CreateProfileResponse)
+
+instance Prelude.NFData CreateProfileResponse where
+  rnf CreateProfileResponse' {..} =
+    Prelude.rnf profileArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateRoom.hs b/gen/Amazonka/AlexaBusiness/CreateRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateRoom.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a room with the specified details.
+module Amazonka.AlexaBusiness.CreateRoom
+  ( -- * Creating a Request
+    CreateRoom (..),
+    newCreateRoom,
+
+    -- * Request Lenses
+    createRoom_clientRequestToken,
+    createRoom_description,
+    createRoom_profileArn,
+    createRoom_providerCalendarId,
+    createRoom_tags,
+    createRoom_roomName,
+
+    -- * Destructuring the Response
+    CreateRoomResponse (..),
+    newCreateRoomResponse,
+
+    -- * Response Lenses
+    createRoomResponse_roomArn,
+    createRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRoom' smart constructor.
+data CreateRoom = CreateRoom'
+  { -- | A unique, user-specified identifier for this request that ensures
+    -- idempotency.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The description for the room.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The profile ARN for the room. This is required.
+    profileArn :: Prelude.Maybe Prelude.Text,
+    -- | The calendar ARN for the room.
+    providerCalendarId :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the room.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name for the room.
+    roomName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createRoom_clientRequestToken' - A unique, user-specified identifier for this request that ensures
+-- idempotency.
+--
+-- 'description', 'createRoom_description' - The description for the room.
+--
+-- 'profileArn', 'createRoom_profileArn' - The profile ARN for the room. This is required.
+--
+-- 'providerCalendarId', 'createRoom_providerCalendarId' - The calendar ARN for the room.
+--
+-- 'tags', 'createRoom_tags' - The tags for the room.
+--
+-- 'roomName', 'createRoom_roomName' - The name for the room.
+newCreateRoom ::
+  -- | 'roomName'
+  Prelude.Text ->
+  CreateRoom
+newCreateRoom pRoomName_ =
+  CreateRoom'
+    { clientRequestToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      profileArn = Prelude.Nothing,
+      providerCalendarId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      roomName = pRoomName_
+    }
+
+-- | A unique, user-specified identifier for this request that ensures
+-- idempotency.
+createRoom_clientRequestToken :: Lens.Lens' CreateRoom (Prelude.Maybe Prelude.Text)
+createRoom_clientRequestToken = Lens.lens (\CreateRoom' {clientRequestToken} -> clientRequestToken) (\s@CreateRoom' {} a -> s {clientRequestToken = a} :: CreateRoom)
+
+-- | The description for the room.
+createRoom_description :: Lens.Lens' CreateRoom (Prelude.Maybe Prelude.Text)
+createRoom_description = Lens.lens (\CreateRoom' {description} -> description) (\s@CreateRoom' {} a -> s {description = a} :: CreateRoom)
+
+-- | The profile ARN for the room. This is required.
+createRoom_profileArn :: Lens.Lens' CreateRoom (Prelude.Maybe Prelude.Text)
+createRoom_profileArn = Lens.lens (\CreateRoom' {profileArn} -> profileArn) (\s@CreateRoom' {} a -> s {profileArn = a} :: CreateRoom)
+
+-- | The calendar ARN for the room.
+createRoom_providerCalendarId :: Lens.Lens' CreateRoom (Prelude.Maybe Prelude.Text)
+createRoom_providerCalendarId = Lens.lens (\CreateRoom' {providerCalendarId} -> providerCalendarId) (\s@CreateRoom' {} a -> s {providerCalendarId = a} :: CreateRoom)
+
+-- | The tags for the room.
+createRoom_tags :: Lens.Lens' CreateRoom (Prelude.Maybe [Tag])
+createRoom_tags = Lens.lens (\CreateRoom' {tags} -> tags) (\s@CreateRoom' {} a -> s {tags = a} :: CreateRoom) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the room.
+createRoom_roomName :: Lens.Lens' CreateRoom Prelude.Text
+createRoom_roomName = Lens.lens (\CreateRoom' {roomName} -> roomName) (\s@CreateRoom' {} a -> s {roomName = a} :: CreateRoom)
+
+instance Core.AWSRequest CreateRoom where
+  type AWSResponse CreateRoom = CreateRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRoomResponse'
+            Prelude.<$> (x Data..?> "RoomArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRoom where
+  hashWithSalt _salt CreateRoom' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` profileArn
+      `Prelude.hashWithSalt` providerCalendarId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` roomName
+
+instance Prelude.NFData CreateRoom where
+  rnf CreateRoom' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf profileArn
+      `Prelude.seq` Prelude.rnf providerCalendarId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf roomName
+
+instance Data.ToHeaders CreateRoom where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateRoom" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRoom where
+  toJSON CreateRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("ProfileArn" Data..=) Prelude.<$> profileArn,
+            ("ProviderCalendarId" Data..=)
+              Prelude.<$> providerCalendarId,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("RoomName" Data..= roomName)
+          ]
+      )
+
+instance Data.ToPath CreateRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRoomResponse' smart constructor.
+data CreateRoomResponse = CreateRoomResponse'
+  { -- | The ARN of the newly created room in the response.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'createRoomResponse_roomArn' - The ARN of the newly created room in the response.
+--
+-- 'httpStatus', 'createRoomResponse_httpStatus' - The response's http status code.
+newCreateRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRoomResponse
+newCreateRoomResponse pHttpStatus_ =
+  CreateRoomResponse'
+    { roomArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the newly created room in the response.
+createRoomResponse_roomArn :: Lens.Lens' CreateRoomResponse (Prelude.Maybe Prelude.Text)
+createRoomResponse_roomArn = Lens.lens (\CreateRoomResponse' {roomArn} -> roomArn) (\s@CreateRoomResponse' {} a -> s {roomArn = a} :: CreateRoomResponse)
+
+-- | The response's http status code.
+createRoomResponse_httpStatus :: Lens.Lens' CreateRoomResponse Prelude.Int
+createRoomResponse_httpStatus = Lens.lens (\CreateRoomResponse' {httpStatus} -> httpStatus) (\s@CreateRoomResponse' {} a -> s {httpStatus = a} :: CreateRoomResponse)
+
+instance Prelude.NFData CreateRoomResponse where
+  rnf CreateRoomResponse' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateSkillGroup.hs b/gen/Amazonka/AlexaBusiness/CreateSkillGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateSkillGroup.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateSkillGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a skill group with a specified name and description.
+module Amazonka.AlexaBusiness.CreateSkillGroup
+  ( -- * Creating a Request
+    CreateSkillGroup (..),
+    newCreateSkillGroup,
+
+    -- * Request Lenses
+    createSkillGroup_clientRequestToken,
+    createSkillGroup_description,
+    createSkillGroup_tags,
+    createSkillGroup_skillGroupName,
+
+    -- * Destructuring the Response
+    CreateSkillGroupResponse (..),
+    newCreateSkillGroupResponse,
+
+    -- * Response Lenses
+    createSkillGroupResponse_skillGroupArn,
+    createSkillGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSkillGroup' smart constructor.
+data CreateSkillGroup = CreateSkillGroup'
+  { -- | A unique, user-specified identifier for this request that ensures
+    -- idempotency.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The description for the skill group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the skill group.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name for the skill group.
+    skillGroupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSkillGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createSkillGroup_clientRequestToken' - A unique, user-specified identifier for this request that ensures
+-- idempotency.
+--
+-- 'description', 'createSkillGroup_description' - The description for the skill group.
+--
+-- 'tags', 'createSkillGroup_tags' - The tags for the skill group.
+--
+-- 'skillGroupName', 'createSkillGroup_skillGroupName' - The name for the skill group.
+newCreateSkillGroup ::
+  -- | 'skillGroupName'
+  Prelude.Text ->
+  CreateSkillGroup
+newCreateSkillGroup pSkillGroupName_ =
+  CreateSkillGroup'
+    { clientRequestToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      skillGroupName = pSkillGroupName_
+    }
+
+-- | A unique, user-specified identifier for this request that ensures
+-- idempotency.
+createSkillGroup_clientRequestToken :: Lens.Lens' CreateSkillGroup (Prelude.Maybe Prelude.Text)
+createSkillGroup_clientRequestToken = Lens.lens (\CreateSkillGroup' {clientRequestToken} -> clientRequestToken) (\s@CreateSkillGroup' {} a -> s {clientRequestToken = a} :: CreateSkillGroup)
+
+-- | The description for the skill group.
+createSkillGroup_description :: Lens.Lens' CreateSkillGroup (Prelude.Maybe Prelude.Text)
+createSkillGroup_description = Lens.lens (\CreateSkillGroup' {description} -> description) (\s@CreateSkillGroup' {} a -> s {description = a} :: CreateSkillGroup)
+
+-- | The tags for the skill group.
+createSkillGroup_tags :: Lens.Lens' CreateSkillGroup (Prelude.Maybe [Tag])
+createSkillGroup_tags = Lens.lens (\CreateSkillGroup' {tags} -> tags) (\s@CreateSkillGroup' {} a -> s {tags = a} :: CreateSkillGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the skill group.
+createSkillGroup_skillGroupName :: Lens.Lens' CreateSkillGroup Prelude.Text
+createSkillGroup_skillGroupName = Lens.lens (\CreateSkillGroup' {skillGroupName} -> skillGroupName) (\s@CreateSkillGroup' {} a -> s {skillGroupName = a} :: CreateSkillGroup)
+
+instance Core.AWSRequest CreateSkillGroup where
+  type
+    AWSResponse CreateSkillGroup =
+      CreateSkillGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSkillGroupResponse'
+            Prelude.<$> (x Data..?> "SkillGroupArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSkillGroup where
+  hashWithSalt _salt CreateSkillGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` skillGroupName
+
+instance Prelude.NFData CreateSkillGroup where
+  rnf CreateSkillGroup' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf skillGroupName
+
+instance Data.ToHeaders CreateSkillGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateSkillGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSkillGroup where
+  toJSON CreateSkillGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("SkillGroupName" Data..= skillGroupName)
+          ]
+      )
+
+instance Data.ToPath CreateSkillGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSkillGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSkillGroupResponse' smart constructor.
+data CreateSkillGroupResponse = CreateSkillGroupResponse'
+  { -- | The ARN of the newly created skill group in the response.
+    skillGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSkillGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillGroupArn', 'createSkillGroupResponse_skillGroupArn' - The ARN of the newly created skill group in the response.
+--
+-- 'httpStatus', 'createSkillGroupResponse_httpStatus' - The response's http status code.
+newCreateSkillGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSkillGroupResponse
+newCreateSkillGroupResponse pHttpStatus_ =
+  CreateSkillGroupResponse'
+    { skillGroupArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the newly created skill group in the response.
+createSkillGroupResponse_skillGroupArn :: Lens.Lens' CreateSkillGroupResponse (Prelude.Maybe Prelude.Text)
+createSkillGroupResponse_skillGroupArn = Lens.lens (\CreateSkillGroupResponse' {skillGroupArn} -> skillGroupArn) (\s@CreateSkillGroupResponse' {} a -> s {skillGroupArn = a} :: CreateSkillGroupResponse)
+
+-- | The response's http status code.
+createSkillGroupResponse_httpStatus :: Lens.Lens' CreateSkillGroupResponse Prelude.Int
+createSkillGroupResponse_httpStatus = Lens.lens (\CreateSkillGroupResponse' {httpStatus} -> httpStatus) (\s@CreateSkillGroupResponse' {} a -> s {httpStatus = a} :: CreateSkillGroupResponse)
+
+instance Prelude.NFData CreateSkillGroupResponse where
+  rnf CreateSkillGroupResponse' {..} =
+    Prelude.rnf skillGroupArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/CreateUser.hs b/gen/Amazonka/AlexaBusiness/CreateUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/CreateUser.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.CreateUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a user.
+module Amazonka.AlexaBusiness.CreateUser
+  ( -- * Creating a Request
+    CreateUser (..),
+    newCreateUser,
+
+    -- * Request Lenses
+    createUser_clientRequestToken,
+    createUser_email,
+    createUser_firstName,
+    createUser_lastName,
+    createUser_tags,
+    createUser_userId,
+
+    -- * Destructuring the Response
+    CreateUserResponse (..),
+    newCreateUserResponse,
+
+    -- * Response Lenses
+    createUserResponse_userArn,
+    createUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateUser' smart constructor.
+data CreateUser = CreateUser'
+  { -- | A unique, user-specified identifier for this request that ensures
+    -- idempotency.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The email address for the user.
+    email :: Prelude.Maybe Prelude.Text,
+    -- | The first name for the user.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | The last name for the user.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the user.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ARN for the user.
+    userId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRequestToken', 'createUser_clientRequestToken' - A unique, user-specified identifier for this request that ensures
+-- idempotency.
+--
+-- 'email', 'createUser_email' - The email address for the user.
+--
+-- 'firstName', 'createUser_firstName' - The first name for the user.
+--
+-- 'lastName', 'createUser_lastName' - The last name for the user.
+--
+-- 'tags', 'createUser_tags' - The tags for the user.
+--
+-- 'userId', 'createUser_userId' - The ARN for the user.
+newCreateUser ::
+  -- | 'userId'
+  Prelude.Text ->
+  CreateUser
+newCreateUser pUserId_ =
+  CreateUser'
+    { clientRequestToken = Prelude.Nothing,
+      email = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      userId = pUserId_
+    }
+
+-- | A unique, user-specified identifier for this request that ensures
+-- idempotency.
+createUser_clientRequestToken :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
+createUser_clientRequestToken = Lens.lens (\CreateUser' {clientRequestToken} -> clientRequestToken) (\s@CreateUser' {} a -> s {clientRequestToken = a} :: CreateUser)
+
+-- | The email address for the user.
+createUser_email :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
+createUser_email = Lens.lens (\CreateUser' {email} -> email) (\s@CreateUser' {} a -> s {email = a} :: CreateUser)
+
+-- | The first name for the user.
+createUser_firstName :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
+createUser_firstName = Lens.lens (\CreateUser' {firstName} -> firstName) (\s@CreateUser' {} a -> s {firstName = a} :: CreateUser)
+
+-- | The last name for the user.
+createUser_lastName :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
+createUser_lastName = Lens.lens (\CreateUser' {lastName} -> lastName) (\s@CreateUser' {} a -> s {lastName = a} :: CreateUser)
+
+-- | The tags for the user.
+createUser_tags :: Lens.Lens' CreateUser (Prelude.Maybe [Tag])
+createUser_tags = Lens.lens (\CreateUser' {tags} -> tags) (\s@CreateUser' {} a -> s {tags = a} :: CreateUser) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN for the user.
+createUser_userId :: Lens.Lens' CreateUser Prelude.Text
+createUser_userId = Lens.lens (\CreateUser' {userId} -> userId) (\s@CreateUser' {} a -> s {userId = a} :: CreateUser)
+
+instance Core.AWSRequest CreateUser where
+  type AWSResponse CreateUser = CreateUserResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateUserResponse'
+            Prelude.<$> (x Data..?> "UserArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateUser where
+  hashWithSalt _salt CreateUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` email
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` userId
+
+instance Prelude.NFData CreateUser where
+  rnf CreateUser' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf email
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf userId
+
+instance Data.ToHeaders CreateUser where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.CreateUser" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateUser where
+  toJSON CreateUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Email" Data..=) Prelude.<$> email,
+            ("FirstName" Data..=) Prelude.<$> firstName,
+            ("LastName" Data..=) Prelude.<$> lastName,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("UserId" Data..= userId)
+          ]
+      )
+
+instance Data.ToPath CreateUser where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateUserResponse' smart constructor.
+data CreateUserResponse = CreateUserResponse'
+  { -- | The ARN of the newly created user in the response.
+    userArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUserResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userArn', 'createUserResponse_userArn' - The ARN of the newly created user in the response.
+--
+-- 'httpStatus', 'createUserResponse_httpStatus' - The response's http status code.
+newCreateUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateUserResponse
+newCreateUserResponse pHttpStatus_ =
+  CreateUserResponse'
+    { userArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the newly created user in the response.
+createUserResponse_userArn :: Lens.Lens' CreateUserResponse (Prelude.Maybe Prelude.Text)
+createUserResponse_userArn = Lens.lens (\CreateUserResponse' {userArn} -> userArn) (\s@CreateUserResponse' {} a -> s {userArn = a} :: CreateUserResponse)
+
+-- | The response's http status code.
+createUserResponse_httpStatus :: Lens.Lens' CreateUserResponse Prelude.Int
+createUserResponse_httpStatus = Lens.lens (\CreateUserResponse' {httpStatus} -> httpStatus) (\s@CreateUserResponse' {} a -> s {httpStatus = a} :: CreateUserResponse)
+
+instance Prelude.NFData CreateUserResponse where
+  rnf CreateUserResponse' {..} =
+    Prelude.rnf userArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteAddressBook.hs b/gen/Amazonka/AlexaBusiness/DeleteAddressBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteAddressBook.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteAddressBook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an address book by the address book ARN.
+module Amazonka.AlexaBusiness.DeleteAddressBook
+  ( -- * Creating a Request
+    DeleteAddressBook (..),
+    newDeleteAddressBook,
+
+    -- * Request Lenses
+    deleteAddressBook_addressBookArn,
+
+    -- * Destructuring the Response
+    DeleteAddressBookResponse (..),
+    newDeleteAddressBookResponse,
+
+    -- * Response Lenses
+    deleteAddressBookResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAddressBook' smart constructor.
+data DeleteAddressBook = DeleteAddressBook'
+  { -- | The ARN of the address book to delete.
+    addressBookArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAddressBook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressBookArn', 'deleteAddressBook_addressBookArn' - The ARN of the address book to delete.
+newDeleteAddressBook ::
+  -- | 'addressBookArn'
+  Prelude.Text ->
+  DeleteAddressBook
+newDeleteAddressBook pAddressBookArn_ =
+  DeleteAddressBook'
+    { addressBookArn =
+        pAddressBookArn_
+    }
+
+-- | The ARN of the address book to delete.
+deleteAddressBook_addressBookArn :: Lens.Lens' DeleteAddressBook Prelude.Text
+deleteAddressBook_addressBookArn = Lens.lens (\DeleteAddressBook' {addressBookArn} -> addressBookArn) (\s@DeleteAddressBook' {} a -> s {addressBookArn = a} :: DeleteAddressBook)
+
+instance Core.AWSRequest DeleteAddressBook where
+  type
+    AWSResponse DeleteAddressBook =
+      DeleteAddressBookResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAddressBookResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAddressBook where
+  hashWithSalt _salt DeleteAddressBook' {..} =
+    _salt `Prelude.hashWithSalt` addressBookArn
+
+instance Prelude.NFData DeleteAddressBook where
+  rnf DeleteAddressBook' {..} =
+    Prelude.rnf addressBookArn
+
+instance Data.ToHeaders DeleteAddressBook where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteAddressBook" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAddressBook where
+  toJSON DeleteAddressBook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AddressBookArn" Data..= addressBookArn)
+          ]
+      )
+
+instance Data.ToPath DeleteAddressBook where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteAddressBook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAddressBookResponse' smart constructor.
+data DeleteAddressBookResponse = DeleteAddressBookResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAddressBookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteAddressBookResponse_httpStatus' - The response's http status code.
+newDeleteAddressBookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAddressBookResponse
+newDeleteAddressBookResponse pHttpStatus_ =
+  DeleteAddressBookResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteAddressBookResponse_httpStatus :: Lens.Lens' DeleteAddressBookResponse Prelude.Int
+deleteAddressBookResponse_httpStatus = Lens.lens (\DeleteAddressBookResponse' {httpStatus} -> httpStatus) (\s@DeleteAddressBookResponse' {} a -> s {httpStatus = a} :: DeleteAddressBookResponse)
+
+instance Prelude.NFData DeleteAddressBookResponse where
+  rnf DeleteAddressBookResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteBusinessReportSchedule.hs b/gen/Amazonka/AlexaBusiness/DeleteBusinessReportSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteBusinessReportSchedule.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteBusinessReportSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the recurring report delivery schedule with the specified
+-- schedule ARN.
+module Amazonka.AlexaBusiness.DeleteBusinessReportSchedule
+  ( -- * Creating a Request
+    DeleteBusinessReportSchedule (..),
+    newDeleteBusinessReportSchedule,
+
+    -- * Request Lenses
+    deleteBusinessReportSchedule_scheduleArn,
+
+    -- * Destructuring the Response
+    DeleteBusinessReportScheduleResponse (..),
+    newDeleteBusinessReportScheduleResponse,
+
+    -- * Response Lenses
+    deleteBusinessReportScheduleResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteBusinessReportSchedule' smart constructor.
+data DeleteBusinessReportSchedule = DeleteBusinessReportSchedule'
+  { -- | The ARN of the business report schedule.
+    scheduleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBusinessReportSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scheduleArn', 'deleteBusinessReportSchedule_scheduleArn' - The ARN of the business report schedule.
+newDeleteBusinessReportSchedule ::
+  -- | 'scheduleArn'
+  Prelude.Text ->
+  DeleteBusinessReportSchedule
+newDeleteBusinessReportSchedule pScheduleArn_ =
+  DeleteBusinessReportSchedule'
+    { scheduleArn =
+        pScheduleArn_
+    }
+
+-- | The ARN of the business report schedule.
+deleteBusinessReportSchedule_scheduleArn :: Lens.Lens' DeleteBusinessReportSchedule Prelude.Text
+deleteBusinessReportSchedule_scheduleArn = Lens.lens (\DeleteBusinessReportSchedule' {scheduleArn} -> scheduleArn) (\s@DeleteBusinessReportSchedule' {} a -> s {scheduleArn = a} :: DeleteBusinessReportSchedule)
+
+instance Core.AWSRequest DeleteBusinessReportSchedule where
+  type
+    AWSResponse DeleteBusinessReportSchedule =
+      DeleteBusinessReportScheduleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteBusinessReportScheduleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteBusinessReportSchedule
+  where
+  hashWithSalt _salt DeleteBusinessReportSchedule' {..} =
+    _salt `Prelude.hashWithSalt` scheduleArn
+
+instance Prelude.NFData DeleteBusinessReportSchedule where
+  rnf DeleteBusinessReportSchedule' {..} =
+    Prelude.rnf scheduleArn
+
+instance Data.ToHeaders DeleteBusinessReportSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteBusinessReportSchedule" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteBusinessReportSchedule where
+  toJSON DeleteBusinessReportSchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ScheduleArn" Data..= scheduleArn)]
+      )
+
+instance Data.ToPath DeleteBusinessReportSchedule where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteBusinessReportSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteBusinessReportScheduleResponse' smart constructor.
+data DeleteBusinessReportScheduleResponse = DeleteBusinessReportScheduleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteBusinessReportScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteBusinessReportScheduleResponse_httpStatus' - The response's http status code.
+newDeleteBusinessReportScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteBusinessReportScheduleResponse
+newDeleteBusinessReportScheduleResponse pHttpStatus_ =
+  DeleteBusinessReportScheduleResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteBusinessReportScheduleResponse_httpStatus :: Lens.Lens' DeleteBusinessReportScheduleResponse Prelude.Int
+deleteBusinessReportScheduleResponse_httpStatus = Lens.lens (\DeleteBusinessReportScheduleResponse' {httpStatus} -> httpStatus) (\s@DeleteBusinessReportScheduleResponse' {} a -> s {httpStatus = a} :: DeleteBusinessReportScheduleResponse)
+
+instance
+  Prelude.NFData
+    DeleteBusinessReportScheduleResponse
+  where
+  rnf DeleteBusinessReportScheduleResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteConferenceProvider.hs b/gen/Amazonka/AlexaBusiness/DeleteConferenceProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteConferenceProvider.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteConferenceProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a conference provider.
+module Amazonka.AlexaBusiness.DeleteConferenceProvider
+  ( -- * Creating a Request
+    DeleteConferenceProvider (..),
+    newDeleteConferenceProvider,
+
+    -- * Request Lenses
+    deleteConferenceProvider_conferenceProviderArn,
+
+    -- * Destructuring the Response
+    DeleteConferenceProviderResponse (..),
+    newDeleteConferenceProviderResponse,
+
+    -- * Response Lenses
+    deleteConferenceProviderResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteConferenceProvider' smart constructor.
+data DeleteConferenceProvider = DeleteConferenceProvider'
+  { -- | The ARN of the conference provider.
+    conferenceProviderArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConferenceProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conferenceProviderArn', 'deleteConferenceProvider_conferenceProviderArn' - The ARN of the conference provider.
+newDeleteConferenceProvider ::
+  -- | 'conferenceProviderArn'
+  Prelude.Text ->
+  DeleteConferenceProvider
+newDeleteConferenceProvider pConferenceProviderArn_ =
+  DeleteConferenceProvider'
+    { conferenceProviderArn =
+        pConferenceProviderArn_
+    }
+
+-- | The ARN of the conference provider.
+deleteConferenceProvider_conferenceProviderArn :: Lens.Lens' DeleteConferenceProvider Prelude.Text
+deleteConferenceProvider_conferenceProviderArn = Lens.lens (\DeleteConferenceProvider' {conferenceProviderArn} -> conferenceProviderArn) (\s@DeleteConferenceProvider' {} a -> s {conferenceProviderArn = a} :: DeleteConferenceProvider)
+
+instance Core.AWSRequest DeleteConferenceProvider where
+  type
+    AWSResponse DeleteConferenceProvider =
+      DeleteConferenceProviderResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteConferenceProviderResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteConferenceProvider where
+  hashWithSalt _salt DeleteConferenceProvider' {..} =
+    _salt `Prelude.hashWithSalt` conferenceProviderArn
+
+instance Prelude.NFData DeleteConferenceProvider where
+  rnf DeleteConferenceProvider' {..} =
+    Prelude.rnf conferenceProviderArn
+
+instance Data.ToHeaders DeleteConferenceProvider where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteConferenceProvider" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteConferenceProvider where
+  toJSON DeleteConferenceProvider' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ConferenceProviderArn"
+                  Data..= conferenceProviderArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeleteConferenceProvider where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteConferenceProvider where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteConferenceProviderResponse' smart constructor.
+data DeleteConferenceProviderResponse = DeleteConferenceProviderResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteConferenceProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteConferenceProviderResponse_httpStatus' - The response's http status code.
+newDeleteConferenceProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteConferenceProviderResponse
+newDeleteConferenceProviderResponse pHttpStatus_ =
+  DeleteConferenceProviderResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteConferenceProviderResponse_httpStatus :: Lens.Lens' DeleteConferenceProviderResponse Prelude.Int
+deleteConferenceProviderResponse_httpStatus = Lens.lens (\DeleteConferenceProviderResponse' {httpStatus} -> httpStatus) (\s@DeleteConferenceProviderResponse' {} a -> s {httpStatus = a} :: DeleteConferenceProviderResponse)
+
+instance
+  Prelude.NFData
+    DeleteConferenceProviderResponse
+  where
+  rnf DeleteConferenceProviderResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteContact.hs b/gen/Amazonka/AlexaBusiness/DeleteContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteContact.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteContact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a contact by the contact ARN.
+module Amazonka.AlexaBusiness.DeleteContact
+  ( -- * Creating a Request
+    DeleteContact (..),
+    newDeleteContact,
+
+    -- * Request Lenses
+    deleteContact_contactArn,
+
+    -- * Destructuring the Response
+    DeleteContactResponse (..),
+    newDeleteContactResponse,
+
+    -- * Response Lenses
+    deleteContactResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteContact' smart constructor.
+data DeleteContact = DeleteContact'
+  { -- | The ARN of the contact to delete.
+    contactArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactArn', 'deleteContact_contactArn' - The ARN of the contact to delete.
+newDeleteContact ::
+  -- | 'contactArn'
+  Prelude.Text ->
+  DeleteContact
+newDeleteContact pContactArn_ =
+  DeleteContact' {contactArn = pContactArn_}
+
+-- | The ARN of the contact to delete.
+deleteContact_contactArn :: Lens.Lens' DeleteContact Prelude.Text
+deleteContact_contactArn = Lens.lens (\DeleteContact' {contactArn} -> contactArn) (\s@DeleteContact' {} a -> s {contactArn = a} :: DeleteContact)
+
+instance Core.AWSRequest DeleteContact where
+  type
+    AWSResponse DeleteContact =
+      DeleteContactResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteContactResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteContact where
+  hashWithSalt _salt DeleteContact' {..} =
+    _salt `Prelude.hashWithSalt` contactArn
+
+instance Prelude.NFData DeleteContact where
+  rnf DeleteContact' {..} = Prelude.rnf contactArn
+
+instance Data.ToHeaders DeleteContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteContact" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteContact where
+  toJSON DeleteContact' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ContactArn" Data..= contactArn)]
+      )
+
+instance Data.ToPath DeleteContact where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteContactResponse' smart constructor.
+data DeleteContactResponse = DeleteContactResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteContactResponse_httpStatus' - The response's http status code.
+newDeleteContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteContactResponse
+newDeleteContactResponse pHttpStatus_ =
+  DeleteContactResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteContactResponse_httpStatus :: Lens.Lens' DeleteContactResponse Prelude.Int
+deleteContactResponse_httpStatus = Lens.lens (\DeleteContactResponse' {httpStatus} -> httpStatus) (\s@DeleteContactResponse' {} a -> s {httpStatus = a} :: DeleteContactResponse)
+
+instance Prelude.NFData DeleteContactResponse where
+  rnf DeleteContactResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteDevice.hs b/gen/Amazonka/AlexaBusiness/DeleteDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteDevice.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a device from Alexa For Business.
+module Amazonka.AlexaBusiness.DeleteDevice
+  ( -- * Creating a Request
+    DeleteDevice (..),
+    newDeleteDevice,
+
+    -- * Request Lenses
+    deleteDevice_deviceArn,
+
+    -- * Destructuring the Response
+    DeleteDeviceResponse (..),
+    newDeleteDeviceResponse,
+
+    -- * Response Lenses
+    deleteDeviceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDevice' smart constructor.
+data DeleteDevice = DeleteDevice'
+  { -- | The ARN of the device for which to request details.
+    deviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDevice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'deleteDevice_deviceArn' - The ARN of the device for which to request details.
+newDeleteDevice ::
+  -- | 'deviceArn'
+  Prelude.Text ->
+  DeleteDevice
+newDeleteDevice pDeviceArn_ =
+  DeleteDevice' {deviceArn = pDeviceArn_}
+
+-- | The ARN of the device for which to request details.
+deleteDevice_deviceArn :: Lens.Lens' DeleteDevice Prelude.Text
+deleteDevice_deviceArn = Lens.lens (\DeleteDevice' {deviceArn} -> deviceArn) (\s@DeleteDevice' {} a -> s {deviceArn = a} :: DeleteDevice)
+
+instance Core.AWSRequest DeleteDevice where
+  type AWSResponse DeleteDevice = DeleteDeviceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDeviceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDevice where
+  hashWithSalt _salt DeleteDevice' {..} =
+    _salt `Prelude.hashWithSalt` deviceArn
+
+instance Prelude.NFData DeleteDevice where
+  rnf DeleteDevice' {..} = Prelude.rnf deviceArn
+
+instance Data.ToHeaders DeleteDevice where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteDevice" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDevice where
+  toJSON DeleteDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("DeviceArn" Data..= deviceArn)]
+      )
+
+instance Data.ToPath DeleteDevice where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDeviceResponse' smart constructor.
+data DeleteDeviceResponse = DeleteDeviceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeviceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteDeviceResponse_httpStatus' - The response's http status code.
+newDeleteDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDeviceResponse
+newDeleteDeviceResponse pHttpStatus_ =
+  DeleteDeviceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteDeviceResponse_httpStatus :: Lens.Lens' DeleteDeviceResponse Prelude.Int
+deleteDeviceResponse_httpStatus = Lens.lens (\DeleteDeviceResponse' {httpStatus} -> httpStatus) (\s@DeleteDeviceResponse' {} a -> s {httpStatus = a} :: DeleteDeviceResponse)
+
+instance Prelude.NFData DeleteDeviceResponse where
+  rnf DeleteDeviceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteDeviceUsageData.hs b/gen/Amazonka/AlexaBusiness/DeleteDeviceUsageData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteDeviceUsageData.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteDeviceUsageData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- When this action is called for a specified shared device, it allows
+-- authorized users to delete the device\'s entire previous history of
+-- voice input data and associated response data. This action can be called
+-- once every 24 hours for a specific shared device.
+module Amazonka.AlexaBusiness.DeleteDeviceUsageData
+  ( -- * Creating a Request
+    DeleteDeviceUsageData (..),
+    newDeleteDeviceUsageData,
+
+    -- * Request Lenses
+    deleteDeviceUsageData_deviceArn,
+    deleteDeviceUsageData_deviceUsageType,
+
+    -- * Destructuring the Response
+    DeleteDeviceUsageDataResponse (..),
+    newDeleteDeviceUsageDataResponse,
+
+    -- * Response Lenses
+    deleteDeviceUsageDataResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDeviceUsageData' smart constructor.
+data DeleteDeviceUsageData = DeleteDeviceUsageData'
+  { -- | The ARN of the device.
+    deviceArn :: Prelude.Text,
+    -- | The type of usage data to delete.
+    deviceUsageType :: DeviceUsageType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeviceUsageData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'deleteDeviceUsageData_deviceArn' - The ARN of the device.
+--
+-- 'deviceUsageType', 'deleteDeviceUsageData_deviceUsageType' - The type of usage data to delete.
+newDeleteDeviceUsageData ::
+  -- | 'deviceArn'
+  Prelude.Text ->
+  -- | 'deviceUsageType'
+  DeviceUsageType ->
+  DeleteDeviceUsageData
+newDeleteDeviceUsageData
+  pDeviceArn_
+  pDeviceUsageType_ =
+    DeleteDeviceUsageData'
+      { deviceArn = pDeviceArn_,
+        deviceUsageType = pDeviceUsageType_
+      }
+
+-- | The ARN of the device.
+deleteDeviceUsageData_deviceArn :: Lens.Lens' DeleteDeviceUsageData Prelude.Text
+deleteDeviceUsageData_deviceArn = Lens.lens (\DeleteDeviceUsageData' {deviceArn} -> deviceArn) (\s@DeleteDeviceUsageData' {} a -> s {deviceArn = a} :: DeleteDeviceUsageData)
+
+-- | The type of usage data to delete.
+deleteDeviceUsageData_deviceUsageType :: Lens.Lens' DeleteDeviceUsageData DeviceUsageType
+deleteDeviceUsageData_deviceUsageType = Lens.lens (\DeleteDeviceUsageData' {deviceUsageType} -> deviceUsageType) (\s@DeleteDeviceUsageData' {} a -> s {deviceUsageType = a} :: DeleteDeviceUsageData)
+
+instance Core.AWSRequest DeleteDeviceUsageData where
+  type
+    AWSResponse DeleteDeviceUsageData =
+      DeleteDeviceUsageDataResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDeviceUsageDataResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDeviceUsageData where
+  hashWithSalt _salt DeleteDeviceUsageData' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceArn
+      `Prelude.hashWithSalt` deviceUsageType
+
+instance Prelude.NFData DeleteDeviceUsageData where
+  rnf DeleteDeviceUsageData' {..} =
+    Prelude.rnf deviceArn
+      `Prelude.seq` Prelude.rnf deviceUsageType
+
+instance Data.ToHeaders DeleteDeviceUsageData where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteDeviceUsageData" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDeviceUsageData where
+  toJSON DeleteDeviceUsageData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("DeviceArn" Data..= deviceArn),
+            Prelude.Just
+              ("DeviceUsageType" Data..= deviceUsageType)
+          ]
+      )
+
+instance Data.ToPath DeleteDeviceUsageData where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDeviceUsageData where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDeviceUsageDataResponse' smart constructor.
+data DeleteDeviceUsageDataResponse = DeleteDeviceUsageDataResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeviceUsageDataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteDeviceUsageDataResponse_httpStatus' - The response's http status code.
+newDeleteDeviceUsageDataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDeviceUsageDataResponse
+newDeleteDeviceUsageDataResponse pHttpStatus_ =
+  DeleteDeviceUsageDataResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDeviceUsageDataResponse_httpStatus :: Lens.Lens' DeleteDeviceUsageDataResponse Prelude.Int
+deleteDeviceUsageDataResponse_httpStatus = Lens.lens (\DeleteDeviceUsageDataResponse' {httpStatus} -> httpStatus) (\s@DeleteDeviceUsageDataResponse' {} a -> s {httpStatus = a} :: DeleteDeviceUsageDataResponse)
+
+instance Prelude.NFData DeleteDeviceUsageDataResponse where
+  rnf DeleteDeviceUsageDataResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteGatewayGroup.hs b/gen/Amazonka/AlexaBusiness/DeleteGatewayGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteGatewayGroup.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteGatewayGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a gateway group.
+module Amazonka.AlexaBusiness.DeleteGatewayGroup
+  ( -- * Creating a Request
+    DeleteGatewayGroup (..),
+    newDeleteGatewayGroup,
+
+    -- * Request Lenses
+    deleteGatewayGroup_gatewayGroupArn,
+
+    -- * Destructuring the Response
+    DeleteGatewayGroupResponse (..),
+    newDeleteGatewayGroupResponse,
+
+    -- * Response Lenses
+    deleteGatewayGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteGatewayGroup' smart constructor.
+data DeleteGatewayGroup = DeleteGatewayGroup'
+  { -- | The ARN of the gateway group to delete.
+    gatewayGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteGatewayGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gatewayGroupArn', 'deleteGatewayGroup_gatewayGroupArn' - The ARN of the gateway group to delete.
+newDeleteGatewayGroup ::
+  -- | 'gatewayGroupArn'
+  Prelude.Text ->
+  DeleteGatewayGroup
+newDeleteGatewayGroup pGatewayGroupArn_ =
+  DeleteGatewayGroup'
+    { gatewayGroupArn =
+        pGatewayGroupArn_
+    }
+
+-- | The ARN of the gateway group to delete.
+deleteGatewayGroup_gatewayGroupArn :: Lens.Lens' DeleteGatewayGroup Prelude.Text
+deleteGatewayGroup_gatewayGroupArn = Lens.lens (\DeleteGatewayGroup' {gatewayGroupArn} -> gatewayGroupArn) (\s@DeleteGatewayGroup' {} a -> s {gatewayGroupArn = a} :: DeleteGatewayGroup)
+
+instance Core.AWSRequest DeleteGatewayGroup where
+  type
+    AWSResponse DeleteGatewayGroup =
+      DeleteGatewayGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteGatewayGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteGatewayGroup where
+  hashWithSalt _salt DeleteGatewayGroup' {..} =
+    _salt `Prelude.hashWithSalt` gatewayGroupArn
+
+instance Prelude.NFData DeleteGatewayGroup where
+  rnf DeleteGatewayGroup' {..} =
+    Prelude.rnf gatewayGroupArn
+
+instance Data.ToHeaders DeleteGatewayGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteGatewayGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteGatewayGroup where
+  toJSON DeleteGatewayGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("GatewayGroupArn" Data..= gatewayGroupArn)
+          ]
+      )
+
+instance Data.ToPath DeleteGatewayGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteGatewayGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteGatewayGroupResponse' smart constructor.
+data DeleteGatewayGroupResponse = DeleteGatewayGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteGatewayGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteGatewayGroupResponse_httpStatus' - The response's http status code.
+newDeleteGatewayGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteGatewayGroupResponse
+newDeleteGatewayGroupResponse pHttpStatus_ =
+  DeleteGatewayGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteGatewayGroupResponse_httpStatus :: Lens.Lens' DeleteGatewayGroupResponse Prelude.Int
+deleteGatewayGroupResponse_httpStatus = Lens.lens (\DeleteGatewayGroupResponse' {httpStatus} -> httpStatus) (\s@DeleteGatewayGroupResponse' {} a -> s {httpStatus = a} :: DeleteGatewayGroupResponse)
+
+instance Prelude.NFData DeleteGatewayGroupResponse where
+  rnf DeleteGatewayGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteNetworkProfile.hs b/gen/Amazonka/AlexaBusiness/DeleteNetworkProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteNetworkProfile.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteNetworkProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a network profile by the network profile ARN.
+module Amazonka.AlexaBusiness.DeleteNetworkProfile
+  ( -- * Creating a Request
+    DeleteNetworkProfile (..),
+    newDeleteNetworkProfile,
+
+    -- * Request Lenses
+    deleteNetworkProfile_networkProfileArn,
+
+    -- * Destructuring the Response
+    DeleteNetworkProfileResponse (..),
+    newDeleteNetworkProfileResponse,
+
+    -- * Response Lenses
+    deleteNetworkProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNetworkProfile' smart constructor.
+data DeleteNetworkProfile = DeleteNetworkProfile'
+  { -- | The ARN of the network profile associated with a device.
+    networkProfileArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkProfileArn', 'deleteNetworkProfile_networkProfileArn' - The ARN of the network profile associated with a device.
+newDeleteNetworkProfile ::
+  -- | 'networkProfileArn'
+  Prelude.Text ->
+  DeleteNetworkProfile
+newDeleteNetworkProfile pNetworkProfileArn_ =
+  DeleteNetworkProfile'
+    { networkProfileArn =
+        pNetworkProfileArn_
+    }
+
+-- | The ARN of the network profile associated with a device.
+deleteNetworkProfile_networkProfileArn :: Lens.Lens' DeleteNetworkProfile Prelude.Text
+deleteNetworkProfile_networkProfileArn = Lens.lens (\DeleteNetworkProfile' {networkProfileArn} -> networkProfileArn) (\s@DeleteNetworkProfile' {} a -> s {networkProfileArn = a} :: DeleteNetworkProfile)
+
+instance Core.AWSRequest DeleteNetworkProfile where
+  type
+    AWSResponse DeleteNetworkProfile =
+      DeleteNetworkProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteNetworkProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteNetworkProfile where
+  hashWithSalt _salt DeleteNetworkProfile' {..} =
+    _salt `Prelude.hashWithSalt` networkProfileArn
+
+instance Prelude.NFData DeleteNetworkProfile where
+  rnf DeleteNetworkProfile' {..} =
+    Prelude.rnf networkProfileArn
+
+instance Data.ToHeaders DeleteNetworkProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteNetworkProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteNetworkProfile where
+  toJSON DeleteNetworkProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("NetworkProfileArn" Data..= networkProfileArn)
+          ]
+      )
+
+instance Data.ToPath DeleteNetworkProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteNetworkProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteNetworkProfileResponse' smart constructor.
+data DeleteNetworkProfileResponse = DeleteNetworkProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteNetworkProfileResponse_httpStatus' - The response's http status code.
+newDeleteNetworkProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNetworkProfileResponse
+newDeleteNetworkProfileResponse pHttpStatus_ =
+  DeleteNetworkProfileResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteNetworkProfileResponse_httpStatus :: Lens.Lens' DeleteNetworkProfileResponse Prelude.Int
+deleteNetworkProfileResponse_httpStatus = Lens.lens (\DeleteNetworkProfileResponse' {httpStatus} -> httpStatus) (\s@DeleteNetworkProfileResponse' {} a -> s {httpStatus = a} :: DeleteNetworkProfileResponse)
+
+instance Prelude.NFData DeleteNetworkProfileResponse where
+  rnf DeleteNetworkProfileResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteProfile.hs b/gen/Amazonka/AlexaBusiness/DeleteProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteProfile.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a room profile by the profile ARN.
+module Amazonka.AlexaBusiness.DeleteProfile
+  ( -- * Creating a Request
+    DeleteProfile (..),
+    newDeleteProfile,
+
+    -- * Request Lenses
+    deleteProfile_profileArn,
+
+    -- * Destructuring the Response
+    DeleteProfileResponse (..),
+    newDeleteProfileResponse,
+
+    -- * Response Lenses
+    deleteProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteProfile' smart constructor.
+data DeleteProfile = DeleteProfile'
+  { -- | The ARN of the room profile to delete. Required.
+    profileArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileArn', 'deleteProfile_profileArn' - The ARN of the room profile to delete. Required.
+newDeleteProfile ::
+  DeleteProfile
+newDeleteProfile =
+  DeleteProfile' {profileArn = Prelude.Nothing}
+
+-- | The ARN of the room profile to delete. Required.
+deleteProfile_profileArn :: Lens.Lens' DeleteProfile (Prelude.Maybe Prelude.Text)
+deleteProfile_profileArn = Lens.lens (\DeleteProfile' {profileArn} -> profileArn) (\s@DeleteProfile' {} a -> s {profileArn = a} :: DeleteProfile)
+
+instance Core.AWSRequest DeleteProfile where
+  type
+    AWSResponse DeleteProfile =
+      DeleteProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteProfile where
+  hashWithSalt _salt DeleteProfile' {..} =
+    _salt `Prelude.hashWithSalt` profileArn
+
+instance Prelude.NFData DeleteProfile where
+  rnf DeleteProfile' {..} = Prelude.rnf profileArn
+
+instance Data.ToHeaders DeleteProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteProfile where
+  toJSON DeleteProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("ProfileArn" Data..=) Prelude.<$> profileArn]
+      )
+
+instance Data.ToPath DeleteProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteProfileResponse' smart constructor.
+data DeleteProfileResponse = DeleteProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteProfileResponse_httpStatus' - The response's http status code.
+newDeleteProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteProfileResponse
+newDeleteProfileResponse pHttpStatus_ =
+  DeleteProfileResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteProfileResponse_httpStatus :: Lens.Lens' DeleteProfileResponse Prelude.Int
+deleteProfileResponse_httpStatus = Lens.lens (\DeleteProfileResponse' {httpStatus} -> httpStatus) (\s@DeleteProfileResponse' {} a -> s {httpStatus = a} :: DeleteProfileResponse)
+
+instance Prelude.NFData DeleteProfileResponse where
+  rnf DeleteProfileResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteRoom.hs b/gen/Amazonka/AlexaBusiness/DeleteRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteRoom.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a room by the room ARN.
+module Amazonka.AlexaBusiness.DeleteRoom
+  ( -- * Creating a Request
+    DeleteRoom (..),
+    newDeleteRoom,
+
+    -- * Request Lenses
+    deleteRoom_roomArn,
+
+    -- * Destructuring the Response
+    DeleteRoomResponse (..),
+    newDeleteRoomResponse,
+
+    -- * Response Lenses
+    deleteRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRoom' smart constructor.
+data DeleteRoom = DeleteRoom'
+  { -- | The ARN of the room to delete. Required.
+    roomArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'deleteRoom_roomArn' - The ARN of the room to delete. Required.
+newDeleteRoom ::
+  DeleteRoom
+newDeleteRoom =
+  DeleteRoom' {roomArn = Prelude.Nothing}
+
+-- | The ARN of the room to delete. Required.
+deleteRoom_roomArn :: Lens.Lens' DeleteRoom (Prelude.Maybe Prelude.Text)
+deleteRoom_roomArn = Lens.lens (\DeleteRoom' {roomArn} -> roomArn) (\s@DeleteRoom' {} a -> s {roomArn = a} :: DeleteRoom)
+
+instance Core.AWSRequest DeleteRoom where
+  type AWSResponse DeleteRoom = DeleteRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteRoomResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteRoom where
+  hashWithSalt _salt DeleteRoom' {..} =
+    _salt `Prelude.hashWithSalt` roomArn
+
+instance Prelude.NFData DeleteRoom where
+  rnf DeleteRoom' {..} = Prelude.rnf roomArn
+
+instance Data.ToHeaders DeleteRoom where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteRoom" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteRoom where
+  toJSON DeleteRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("RoomArn" Data..=) Prelude.<$> roomArn]
+      )
+
+instance Data.ToPath DeleteRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRoomResponse' smart constructor.
+data DeleteRoomResponse = DeleteRoomResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteRoomResponse_httpStatus' - The response's http status code.
+newDeleteRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteRoomResponse
+newDeleteRoomResponse pHttpStatus_ =
+  DeleteRoomResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteRoomResponse_httpStatus :: Lens.Lens' DeleteRoomResponse Prelude.Int
+deleteRoomResponse_httpStatus = Lens.lens (\DeleteRoomResponse' {httpStatus} -> httpStatus) (\s@DeleteRoomResponse' {} a -> s {httpStatus = a} :: DeleteRoomResponse)
+
+instance Prelude.NFData DeleteRoomResponse where
+  rnf DeleteRoomResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteRoomSkillParameter.hs b/gen/Amazonka/AlexaBusiness/DeleteRoomSkillParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteRoomSkillParameter.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteRoomSkillParameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes room skill parameter details by room, skill, and parameter key
+-- ID.
+module Amazonka.AlexaBusiness.DeleteRoomSkillParameter
+  ( -- * Creating a Request
+    DeleteRoomSkillParameter (..),
+    newDeleteRoomSkillParameter,
+
+    -- * Request Lenses
+    deleteRoomSkillParameter_roomArn,
+    deleteRoomSkillParameter_skillId,
+    deleteRoomSkillParameter_parameterKey,
+
+    -- * Destructuring the Response
+    DeleteRoomSkillParameterResponse (..),
+    newDeleteRoomSkillParameterResponse,
+
+    -- * Response Lenses
+    deleteRoomSkillParameterResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRoomSkillParameter' smart constructor.
+data DeleteRoomSkillParameter = DeleteRoomSkillParameter'
+  { -- | The ARN of the room from which to remove the room skill parameter
+    -- details.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the skill from which to remove the room skill parameter
+    -- details.
+    skillId :: Prelude.Text,
+    -- | The room skill parameter key for which to remove details.
+    parameterKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRoomSkillParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'deleteRoomSkillParameter_roomArn' - The ARN of the room from which to remove the room skill parameter
+-- details.
+--
+-- 'skillId', 'deleteRoomSkillParameter_skillId' - The ID of the skill from which to remove the room skill parameter
+-- details.
+--
+-- 'parameterKey', 'deleteRoomSkillParameter_parameterKey' - The room skill parameter key for which to remove details.
+newDeleteRoomSkillParameter ::
+  -- | 'skillId'
+  Prelude.Text ->
+  -- | 'parameterKey'
+  Prelude.Text ->
+  DeleteRoomSkillParameter
+newDeleteRoomSkillParameter pSkillId_ pParameterKey_ =
+  DeleteRoomSkillParameter'
+    { roomArn =
+        Prelude.Nothing,
+      skillId = pSkillId_,
+      parameterKey = pParameterKey_
+    }
+
+-- | The ARN of the room from which to remove the room skill parameter
+-- details.
+deleteRoomSkillParameter_roomArn :: Lens.Lens' DeleteRoomSkillParameter (Prelude.Maybe Prelude.Text)
+deleteRoomSkillParameter_roomArn = Lens.lens (\DeleteRoomSkillParameter' {roomArn} -> roomArn) (\s@DeleteRoomSkillParameter' {} a -> s {roomArn = a} :: DeleteRoomSkillParameter)
+
+-- | The ID of the skill from which to remove the room skill parameter
+-- details.
+deleteRoomSkillParameter_skillId :: Lens.Lens' DeleteRoomSkillParameter Prelude.Text
+deleteRoomSkillParameter_skillId = Lens.lens (\DeleteRoomSkillParameter' {skillId} -> skillId) (\s@DeleteRoomSkillParameter' {} a -> s {skillId = a} :: DeleteRoomSkillParameter)
+
+-- | The room skill parameter key for which to remove details.
+deleteRoomSkillParameter_parameterKey :: Lens.Lens' DeleteRoomSkillParameter Prelude.Text
+deleteRoomSkillParameter_parameterKey = Lens.lens (\DeleteRoomSkillParameter' {parameterKey} -> parameterKey) (\s@DeleteRoomSkillParameter' {} a -> s {parameterKey = a} :: DeleteRoomSkillParameter)
+
+instance Core.AWSRequest DeleteRoomSkillParameter where
+  type
+    AWSResponse DeleteRoomSkillParameter =
+      DeleteRoomSkillParameterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteRoomSkillParameterResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteRoomSkillParameter where
+  hashWithSalt _salt DeleteRoomSkillParameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` skillId
+      `Prelude.hashWithSalt` parameterKey
+
+instance Prelude.NFData DeleteRoomSkillParameter where
+  rnf DeleteRoomSkillParameter' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf skillId
+      `Prelude.seq` Prelude.rnf parameterKey
+
+instance Data.ToHeaders DeleteRoomSkillParameter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteRoomSkillParameter" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteRoomSkillParameter where
+  toJSON DeleteRoomSkillParameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RoomArn" Data..=) Prelude.<$> roomArn,
+            Prelude.Just ("SkillId" Data..= skillId),
+            Prelude.Just ("ParameterKey" Data..= parameterKey)
+          ]
+      )
+
+instance Data.ToPath DeleteRoomSkillParameter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteRoomSkillParameter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRoomSkillParameterResponse' smart constructor.
+data DeleteRoomSkillParameterResponse = DeleteRoomSkillParameterResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRoomSkillParameterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteRoomSkillParameterResponse_httpStatus' - The response's http status code.
+newDeleteRoomSkillParameterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteRoomSkillParameterResponse
+newDeleteRoomSkillParameterResponse pHttpStatus_ =
+  DeleteRoomSkillParameterResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteRoomSkillParameterResponse_httpStatus :: Lens.Lens' DeleteRoomSkillParameterResponse Prelude.Int
+deleteRoomSkillParameterResponse_httpStatus = Lens.lens (\DeleteRoomSkillParameterResponse' {httpStatus} -> httpStatus) (\s@DeleteRoomSkillParameterResponse' {} a -> s {httpStatus = a} :: DeleteRoomSkillParameterResponse)
+
+instance
+  Prelude.NFData
+    DeleteRoomSkillParameterResponse
+  where
+  rnf DeleteRoomSkillParameterResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteSkillAuthorization.hs b/gen/Amazonka/AlexaBusiness/DeleteSkillAuthorization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteSkillAuthorization.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteSkillAuthorization
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Unlinks a third-party account from a skill.
+module Amazonka.AlexaBusiness.DeleteSkillAuthorization
+  ( -- * Creating a Request
+    DeleteSkillAuthorization (..),
+    newDeleteSkillAuthorization,
+
+    -- * Request Lenses
+    deleteSkillAuthorization_roomArn,
+    deleteSkillAuthorization_skillId,
+
+    -- * Destructuring the Response
+    DeleteSkillAuthorizationResponse (..),
+    newDeleteSkillAuthorizationResponse,
+
+    -- * Response Lenses
+    deleteSkillAuthorizationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSkillAuthorization' smart constructor.
+data DeleteSkillAuthorization = DeleteSkillAuthorization'
+  { -- | The room that the skill is authorized for.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of a skill.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSkillAuthorization' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'deleteSkillAuthorization_roomArn' - The room that the skill is authorized for.
+--
+-- 'skillId', 'deleteSkillAuthorization_skillId' - The unique identifier of a skill.
+newDeleteSkillAuthorization ::
+  -- | 'skillId'
+  Prelude.Text ->
+  DeleteSkillAuthorization
+newDeleteSkillAuthorization pSkillId_ =
+  DeleteSkillAuthorization'
+    { roomArn =
+        Prelude.Nothing,
+      skillId = pSkillId_
+    }
+
+-- | The room that the skill is authorized for.
+deleteSkillAuthorization_roomArn :: Lens.Lens' DeleteSkillAuthorization (Prelude.Maybe Prelude.Text)
+deleteSkillAuthorization_roomArn = Lens.lens (\DeleteSkillAuthorization' {roomArn} -> roomArn) (\s@DeleteSkillAuthorization' {} a -> s {roomArn = a} :: DeleteSkillAuthorization)
+
+-- | The unique identifier of a skill.
+deleteSkillAuthorization_skillId :: Lens.Lens' DeleteSkillAuthorization Prelude.Text
+deleteSkillAuthorization_skillId = Lens.lens (\DeleteSkillAuthorization' {skillId} -> skillId) (\s@DeleteSkillAuthorization' {} a -> s {skillId = a} :: DeleteSkillAuthorization)
+
+instance Core.AWSRequest DeleteSkillAuthorization where
+  type
+    AWSResponse DeleteSkillAuthorization =
+      DeleteSkillAuthorizationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSkillAuthorizationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSkillAuthorization where
+  hashWithSalt _salt DeleteSkillAuthorization' {..} =
+    _salt
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` skillId
+
+instance Prelude.NFData DeleteSkillAuthorization where
+  rnf DeleteSkillAuthorization' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf skillId
+
+instance Data.ToHeaders DeleteSkillAuthorization where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteSkillAuthorization" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSkillAuthorization where
+  toJSON DeleteSkillAuthorization' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RoomArn" Data..=) Prelude.<$> roomArn,
+            Prelude.Just ("SkillId" Data..= skillId)
+          ]
+      )
+
+instance Data.ToPath DeleteSkillAuthorization where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSkillAuthorization where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSkillAuthorizationResponse' smart constructor.
+data DeleteSkillAuthorizationResponse = DeleteSkillAuthorizationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSkillAuthorizationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteSkillAuthorizationResponse_httpStatus' - The response's http status code.
+newDeleteSkillAuthorizationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSkillAuthorizationResponse
+newDeleteSkillAuthorizationResponse pHttpStatus_ =
+  DeleteSkillAuthorizationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteSkillAuthorizationResponse_httpStatus :: Lens.Lens' DeleteSkillAuthorizationResponse Prelude.Int
+deleteSkillAuthorizationResponse_httpStatus = Lens.lens (\DeleteSkillAuthorizationResponse' {httpStatus} -> httpStatus) (\s@DeleteSkillAuthorizationResponse' {} a -> s {httpStatus = a} :: DeleteSkillAuthorizationResponse)
+
+instance
+  Prelude.NFData
+    DeleteSkillAuthorizationResponse
+  where
+  rnf DeleteSkillAuthorizationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteSkillGroup.hs b/gen/Amazonka/AlexaBusiness/DeleteSkillGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteSkillGroup.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteSkillGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a skill group by skill group ARN.
+module Amazonka.AlexaBusiness.DeleteSkillGroup
+  ( -- * Creating a Request
+    DeleteSkillGroup (..),
+    newDeleteSkillGroup,
+
+    -- * Request Lenses
+    deleteSkillGroup_skillGroupArn,
+
+    -- * Destructuring the Response
+    DeleteSkillGroupResponse (..),
+    newDeleteSkillGroupResponse,
+
+    -- * Response Lenses
+    deleteSkillGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSkillGroup' smart constructor.
+data DeleteSkillGroup = DeleteSkillGroup'
+  { -- | The ARN of the skill group to delete. Required.
+    skillGroupArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSkillGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillGroupArn', 'deleteSkillGroup_skillGroupArn' - The ARN of the skill group to delete. Required.
+newDeleteSkillGroup ::
+  DeleteSkillGroup
+newDeleteSkillGroup =
+  DeleteSkillGroup' {skillGroupArn = Prelude.Nothing}
+
+-- | The ARN of the skill group to delete. Required.
+deleteSkillGroup_skillGroupArn :: Lens.Lens' DeleteSkillGroup (Prelude.Maybe Prelude.Text)
+deleteSkillGroup_skillGroupArn = Lens.lens (\DeleteSkillGroup' {skillGroupArn} -> skillGroupArn) (\s@DeleteSkillGroup' {} a -> s {skillGroupArn = a} :: DeleteSkillGroup)
+
+instance Core.AWSRequest DeleteSkillGroup where
+  type
+    AWSResponse DeleteSkillGroup =
+      DeleteSkillGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSkillGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSkillGroup where
+  hashWithSalt _salt DeleteSkillGroup' {..} =
+    _salt `Prelude.hashWithSalt` skillGroupArn
+
+instance Prelude.NFData DeleteSkillGroup where
+  rnf DeleteSkillGroup' {..} = Prelude.rnf skillGroupArn
+
+instance Data.ToHeaders DeleteSkillGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteSkillGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSkillGroup where
+  toJSON DeleteSkillGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SkillGroupArn" Data..=)
+              Prelude.<$> skillGroupArn
+          ]
+      )
+
+instance Data.ToPath DeleteSkillGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSkillGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSkillGroupResponse' smart constructor.
+data DeleteSkillGroupResponse = DeleteSkillGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSkillGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteSkillGroupResponse_httpStatus' - The response's http status code.
+newDeleteSkillGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSkillGroupResponse
+newDeleteSkillGroupResponse pHttpStatus_ =
+  DeleteSkillGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteSkillGroupResponse_httpStatus :: Lens.Lens' DeleteSkillGroupResponse Prelude.Int
+deleteSkillGroupResponse_httpStatus = Lens.lens (\DeleteSkillGroupResponse' {httpStatus} -> httpStatus) (\s@DeleteSkillGroupResponse' {} a -> s {httpStatus = a} :: DeleteSkillGroupResponse)
+
+instance Prelude.NFData DeleteSkillGroupResponse where
+  rnf DeleteSkillGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DeleteUser.hs b/gen/Amazonka/AlexaBusiness/DeleteUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DeleteUser.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DeleteUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a specified user by user ARN and enrollment ARN.
+module Amazonka.AlexaBusiness.DeleteUser
+  ( -- * Creating a Request
+    DeleteUser (..),
+    newDeleteUser,
+
+    -- * Request Lenses
+    deleteUser_userArn,
+    deleteUser_enrollmentId,
+
+    -- * Destructuring the Response
+    DeleteUserResponse (..),
+    newDeleteUserResponse,
+
+    -- * Response Lenses
+    deleteUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteUser' smart constructor.
+data DeleteUser = DeleteUser'
+  { -- | The ARN of the user to delete in the organization. Required.
+    userArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the user\'s enrollment in the organization. Required.
+    enrollmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userArn', 'deleteUser_userArn' - The ARN of the user to delete in the organization. Required.
+--
+-- 'enrollmentId', 'deleteUser_enrollmentId' - The ARN of the user\'s enrollment in the organization. Required.
+newDeleteUser ::
+  -- | 'enrollmentId'
+  Prelude.Text ->
+  DeleteUser
+newDeleteUser pEnrollmentId_ =
+  DeleteUser'
+    { userArn = Prelude.Nothing,
+      enrollmentId = pEnrollmentId_
+    }
+
+-- | The ARN of the user to delete in the organization. Required.
+deleteUser_userArn :: Lens.Lens' DeleteUser (Prelude.Maybe Prelude.Text)
+deleteUser_userArn = Lens.lens (\DeleteUser' {userArn} -> userArn) (\s@DeleteUser' {} a -> s {userArn = a} :: DeleteUser)
+
+-- | The ARN of the user\'s enrollment in the organization. Required.
+deleteUser_enrollmentId :: Lens.Lens' DeleteUser Prelude.Text
+deleteUser_enrollmentId = Lens.lens (\DeleteUser' {enrollmentId} -> enrollmentId) (\s@DeleteUser' {} a -> s {enrollmentId = a} :: DeleteUser)
+
+instance Core.AWSRequest DeleteUser where
+  type AWSResponse DeleteUser = DeleteUserResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteUserResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteUser where
+  hashWithSalt _salt DeleteUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` userArn
+      `Prelude.hashWithSalt` enrollmentId
+
+instance Prelude.NFData DeleteUser where
+  rnf DeleteUser' {..} =
+    Prelude.rnf userArn
+      `Prelude.seq` Prelude.rnf enrollmentId
+
+instance Data.ToHeaders DeleteUser where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DeleteUser" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteUser where
+  toJSON DeleteUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("UserArn" Data..=) Prelude.<$> userArn,
+            Prelude.Just ("EnrollmentId" Data..= enrollmentId)
+          ]
+      )
+
+instance Data.ToPath DeleteUser where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteUserResponse' smart constructor.
+data DeleteUserResponse = DeleteUserResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteUserResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteUserResponse_httpStatus' - The response's http status code.
+newDeleteUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteUserResponse
+newDeleteUserResponse pHttpStatus_ =
+  DeleteUserResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteUserResponse_httpStatus :: Lens.Lens' DeleteUserResponse Prelude.Int
+deleteUserResponse_httpStatus = Lens.lens (\DeleteUserResponse' {httpStatus} -> httpStatus) (\s@DeleteUserResponse' {} a -> s {httpStatus = a} :: DeleteUserResponse)
+
+instance Prelude.NFData DeleteUserResponse where
+  rnf DeleteUserResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DisassociateContactFromAddressBook.hs b/gen/Amazonka/AlexaBusiness/DisassociateContactFromAddressBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DisassociateContactFromAddressBook.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DisassociateContactFromAddressBook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a contact from a given address book.
+module Amazonka.AlexaBusiness.DisassociateContactFromAddressBook
+  ( -- * Creating a Request
+    DisassociateContactFromAddressBook (..),
+    newDisassociateContactFromAddressBook,
+
+    -- * Request Lenses
+    disassociateContactFromAddressBook_contactArn,
+    disassociateContactFromAddressBook_addressBookArn,
+
+    -- * Destructuring the Response
+    DisassociateContactFromAddressBookResponse (..),
+    newDisassociateContactFromAddressBookResponse,
+
+    -- * Response Lenses
+    disassociateContactFromAddressBookResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateContactFromAddressBook' smart constructor.
+data DisassociateContactFromAddressBook = DisassociateContactFromAddressBook'
+  { -- | The ARN of the contact to disassociate from an address book.
+    contactArn :: Prelude.Text,
+    -- | The ARN of the address from which to disassociate the contact.
+    addressBookArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateContactFromAddressBook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactArn', 'disassociateContactFromAddressBook_contactArn' - The ARN of the contact to disassociate from an address book.
+--
+-- 'addressBookArn', 'disassociateContactFromAddressBook_addressBookArn' - The ARN of the address from which to disassociate the contact.
+newDisassociateContactFromAddressBook ::
+  -- | 'contactArn'
+  Prelude.Text ->
+  -- | 'addressBookArn'
+  Prelude.Text ->
+  DisassociateContactFromAddressBook
+newDisassociateContactFromAddressBook
+  pContactArn_
+  pAddressBookArn_ =
+    DisassociateContactFromAddressBook'
+      { contactArn =
+          pContactArn_,
+        addressBookArn = pAddressBookArn_
+      }
+
+-- | The ARN of the contact to disassociate from an address book.
+disassociateContactFromAddressBook_contactArn :: Lens.Lens' DisassociateContactFromAddressBook Prelude.Text
+disassociateContactFromAddressBook_contactArn = Lens.lens (\DisassociateContactFromAddressBook' {contactArn} -> contactArn) (\s@DisassociateContactFromAddressBook' {} a -> s {contactArn = a} :: DisassociateContactFromAddressBook)
+
+-- | The ARN of the address from which to disassociate the contact.
+disassociateContactFromAddressBook_addressBookArn :: Lens.Lens' DisassociateContactFromAddressBook Prelude.Text
+disassociateContactFromAddressBook_addressBookArn = Lens.lens (\DisassociateContactFromAddressBook' {addressBookArn} -> addressBookArn) (\s@DisassociateContactFromAddressBook' {} a -> s {addressBookArn = a} :: DisassociateContactFromAddressBook)
+
+instance
+  Core.AWSRequest
+    DisassociateContactFromAddressBook
+  where
+  type
+    AWSResponse DisassociateContactFromAddressBook =
+      DisassociateContactFromAddressBookResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateContactFromAddressBookResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateContactFromAddressBook
+  where
+  hashWithSalt
+    _salt
+    DisassociateContactFromAddressBook' {..} =
+      _salt
+        `Prelude.hashWithSalt` contactArn
+        `Prelude.hashWithSalt` addressBookArn
+
+instance
+  Prelude.NFData
+    DisassociateContactFromAddressBook
+  where
+  rnf DisassociateContactFromAddressBook' {..} =
+    Prelude.rnf contactArn
+      `Prelude.seq` Prelude.rnf addressBookArn
+
+instance
+  Data.ToHeaders
+    DisassociateContactFromAddressBook
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DisassociateContactFromAddressBook" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DisassociateContactFromAddressBook
+  where
+  toJSON DisassociateContactFromAddressBook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ContactArn" Data..= contactArn),
+            Prelude.Just
+              ("AddressBookArn" Data..= addressBookArn)
+          ]
+      )
+
+instance
+  Data.ToPath
+    DisassociateContactFromAddressBook
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociateContactFromAddressBook
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateContactFromAddressBookResponse' smart constructor.
+data DisassociateContactFromAddressBookResponse = DisassociateContactFromAddressBookResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateContactFromAddressBookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'disassociateContactFromAddressBookResponse_httpStatus' - The response's http status code.
+newDisassociateContactFromAddressBookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateContactFromAddressBookResponse
+newDisassociateContactFromAddressBookResponse
+  pHttpStatus_ =
+    DisassociateContactFromAddressBookResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateContactFromAddressBookResponse_httpStatus :: Lens.Lens' DisassociateContactFromAddressBookResponse Prelude.Int
+disassociateContactFromAddressBookResponse_httpStatus = Lens.lens (\DisassociateContactFromAddressBookResponse' {httpStatus} -> httpStatus) (\s@DisassociateContactFromAddressBookResponse' {} a -> s {httpStatus = a} :: DisassociateContactFromAddressBookResponse)
+
+instance
+  Prelude.NFData
+    DisassociateContactFromAddressBookResponse
+  where
+  rnf DisassociateContactFromAddressBookResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DisassociateDeviceFromRoom.hs b/gen/Amazonka/AlexaBusiness/DisassociateDeviceFromRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DisassociateDeviceFromRoom.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DisassociateDeviceFromRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a device from its current room. The device continues to be
+-- connected to the Wi-Fi network and is still registered to the account.
+-- The device settings and skills are removed from the room.
+module Amazonka.AlexaBusiness.DisassociateDeviceFromRoom
+  ( -- * Creating a Request
+    DisassociateDeviceFromRoom (..),
+    newDisassociateDeviceFromRoom,
+
+    -- * Request Lenses
+    disassociateDeviceFromRoom_deviceArn,
+
+    -- * Destructuring the Response
+    DisassociateDeviceFromRoomResponse (..),
+    newDisassociateDeviceFromRoomResponse,
+
+    -- * Response Lenses
+    disassociateDeviceFromRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateDeviceFromRoom' smart constructor.
+data DisassociateDeviceFromRoom = DisassociateDeviceFromRoom'
+  { -- | The ARN of the device to disassociate from a room. Required.
+    deviceArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateDeviceFromRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'disassociateDeviceFromRoom_deviceArn' - The ARN of the device to disassociate from a room. Required.
+newDisassociateDeviceFromRoom ::
+  DisassociateDeviceFromRoom
+newDisassociateDeviceFromRoom =
+  DisassociateDeviceFromRoom'
+    { deviceArn =
+        Prelude.Nothing
+    }
+
+-- | The ARN of the device to disassociate from a room. Required.
+disassociateDeviceFromRoom_deviceArn :: Lens.Lens' DisassociateDeviceFromRoom (Prelude.Maybe Prelude.Text)
+disassociateDeviceFromRoom_deviceArn = Lens.lens (\DisassociateDeviceFromRoom' {deviceArn} -> deviceArn) (\s@DisassociateDeviceFromRoom' {} a -> s {deviceArn = a} :: DisassociateDeviceFromRoom)
+
+instance Core.AWSRequest DisassociateDeviceFromRoom where
+  type
+    AWSResponse DisassociateDeviceFromRoom =
+      DisassociateDeviceFromRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateDeviceFromRoomResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateDeviceFromRoom where
+  hashWithSalt _salt DisassociateDeviceFromRoom' {..} =
+    _salt `Prelude.hashWithSalt` deviceArn
+
+instance Prelude.NFData DisassociateDeviceFromRoom where
+  rnf DisassociateDeviceFromRoom' {..} =
+    Prelude.rnf deviceArn
+
+instance Data.ToHeaders DisassociateDeviceFromRoom where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DisassociateDeviceFromRoom" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateDeviceFromRoom where
+  toJSON DisassociateDeviceFromRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("DeviceArn" Data..=) Prelude.<$> deviceArn]
+      )
+
+instance Data.ToPath DisassociateDeviceFromRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateDeviceFromRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateDeviceFromRoomResponse' smart constructor.
+data DisassociateDeviceFromRoomResponse = DisassociateDeviceFromRoomResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateDeviceFromRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'disassociateDeviceFromRoomResponse_httpStatus' - The response's http status code.
+newDisassociateDeviceFromRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateDeviceFromRoomResponse
+newDisassociateDeviceFromRoomResponse pHttpStatus_ =
+  DisassociateDeviceFromRoomResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateDeviceFromRoomResponse_httpStatus :: Lens.Lens' DisassociateDeviceFromRoomResponse Prelude.Int
+disassociateDeviceFromRoomResponse_httpStatus = Lens.lens (\DisassociateDeviceFromRoomResponse' {httpStatus} -> httpStatus) (\s@DisassociateDeviceFromRoomResponse' {} a -> s {httpStatus = a} :: DisassociateDeviceFromRoomResponse)
+
+instance
+  Prelude.NFData
+    DisassociateDeviceFromRoomResponse
+  where
+  rnf DisassociateDeviceFromRoomResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DisassociateSkillFromSkillGroup.hs b/gen/Amazonka/AlexaBusiness/DisassociateSkillFromSkillGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DisassociateSkillFromSkillGroup.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DisassociateSkillFromSkillGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a skill from a skill group.
+module Amazonka.AlexaBusiness.DisassociateSkillFromSkillGroup
+  ( -- * Creating a Request
+    DisassociateSkillFromSkillGroup (..),
+    newDisassociateSkillFromSkillGroup,
+
+    -- * Request Lenses
+    disassociateSkillFromSkillGroup_skillGroupArn,
+    disassociateSkillFromSkillGroup_skillId,
+
+    -- * Destructuring the Response
+    DisassociateSkillFromSkillGroupResponse (..),
+    newDisassociateSkillFromSkillGroupResponse,
+
+    -- * Response Lenses
+    disassociateSkillFromSkillGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateSkillFromSkillGroup' smart constructor.
+data DisassociateSkillFromSkillGroup = DisassociateSkillFromSkillGroup'
+  { -- | The unique identifier of a skill. Required.
+    skillGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a skill group to associate to a skill.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSkillFromSkillGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillGroupArn', 'disassociateSkillFromSkillGroup_skillGroupArn' - The unique identifier of a skill. Required.
+--
+-- 'skillId', 'disassociateSkillFromSkillGroup_skillId' - The ARN of a skill group to associate to a skill.
+newDisassociateSkillFromSkillGroup ::
+  -- | 'skillId'
+  Prelude.Text ->
+  DisassociateSkillFromSkillGroup
+newDisassociateSkillFromSkillGroup pSkillId_ =
+  DisassociateSkillFromSkillGroup'
+    { skillGroupArn =
+        Prelude.Nothing,
+      skillId = pSkillId_
+    }
+
+-- | The unique identifier of a skill. Required.
+disassociateSkillFromSkillGroup_skillGroupArn :: Lens.Lens' DisassociateSkillFromSkillGroup (Prelude.Maybe Prelude.Text)
+disassociateSkillFromSkillGroup_skillGroupArn = Lens.lens (\DisassociateSkillFromSkillGroup' {skillGroupArn} -> skillGroupArn) (\s@DisassociateSkillFromSkillGroup' {} a -> s {skillGroupArn = a} :: DisassociateSkillFromSkillGroup)
+
+-- | The ARN of a skill group to associate to a skill.
+disassociateSkillFromSkillGroup_skillId :: Lens.Lens' DisassociateSkillFromSkillGroup Prelude.Text
+disassociateSkillFromSkillGroup_skillId = Lens.lens (\DisassociateSkillFromSkillGroup' {skillId} -> skillId) (\s@DisassociateSkillFromSkillGroup' {} a -> s {skillId = a} :: DisassociateSkillFromSkillGroup)
+
+instance
+  Core.AWSRequest
+    DisassociateSkillFromSkillGroup
+  where
+  type
+    AWSResponse DisassociateSkillFromSkillGroup =
+      DisassociateSkillFromSkillGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateSkillFromSkillGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateSkillFromSkillGroup
+  where
+  hashWithSalt
+    _salt
+    DisassociateSkillFromSkillGroup' {..} =
+      _salt
+        `Prelude.hashWithSalt` skillGroupArn
+        `Prelude.hashWithSalt` skillId
+
+instance
+  Prelude.NFData
+    DisassociateSkillFromSkillGroup
+  where
+  rnf DisassociateSkillFromSkillGroup' {..} =
+    Prelude.rnf skillGroupArn
+      `Prelude.seq` Prelude.rnf skillId
+
+instance
+  Data.ToHeaders
+    DisassociateSkillFromSkillGroup
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DisassociateSkillFromSkillGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateSkillFromSkillGroup where
+  toJSON DisassociateSkillFromSkillGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SkillGroupArn" Data..=) Prelude.<$> skillGroupArn,
+            Prelude.Just ("SkillId" Data..= skillId)
+          ]
+      )
+
+instance Data.ToPath DisassociateSkillFromSkillGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateSkillFromSkillGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateSkillFromSkillGroupResponse' smart constructor.
+data DisassociateSkillFromSkillGroupResponse = DisassociateSkillFromSkillGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSkillFromSkillGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'disassociateSkillFromSkillGroupResponse_httpStatus' - The response's http status code.
+newDisassociateSkillFromSkillGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateSkillFromSkillGroupResponse
+newDisassociateSkillFromSkillGroupResponse
+  pHttpStatus_ =
+    DisassociateSkillFromSkillGroupResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateSkillFromSkillGroupResponse_httpStatus :: Lens.Lens' DisassociateSkillFromSkillGroupResponse Prelude.Int
+disassociateSkillFromSkillGroupResponse_httpStatus = Lens.lens (\DisassociateSkillFromSkillGroupResponse' {httpStatus} -> httpStatus) (\s@DisassociateSkillFromSkillGroupResponse' {} a -> s {httpStatus = a} :: DisassociateSkillFromSkillGroupResponse)
+
+instance
+  Prelude.NFData
+    DisassociateSkillFromSkillGroupResponse
+  where
+  rnf DisassociateSkillFromSkillGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DisassociateSkillFromUsers.hs b/gen/Amazonka/AlexaBusiness/DisassociateSkillFromUsers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DisassociateSkillFromUsers.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DisassociateSkillFromUsers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Makes a private skill unavailable for enrolled users and prevents them
+-- from enabling it on their devices.
+module Amazonka.AlexaBusiness.DisassociateSkillFromUsers
+  ( -- * Creating a Request
+    DisassociateSkillFromUsers (..),
+    newDisassociateSkillFromUsers,
+
+    -- * Request Lenses
+    disassociateSkillFromUsers_skillId,
+
+    -- * Destructuring the Response
+    DisassociateSkillFromUsersResponse (..),
+    newDisassociateSkillFromUsersResponse,
+
+    -- * Response Lenses
+    disassociateSkillFromUsersResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateSkillFromUsers' smart constructor.
+data DisassociateSkillFromUsers = DisassociateSkillFromUsers'
+  { -- | The private skill ID you want to make unavailable for enrolled users.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSkillFromUsers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillId', 'disassociateSkillFromUsers_skillId' - The private skill ID you want to make unavailable for enrolled users.
+newDisassociateSkillFromUsers ::
+  -- | 'skillId'
+  Prelude.Text ->
+  DisassociateSkillFromUsers
+newDisassociateSkillFromUsers pSkillId_ =
+  DisassociateSkillFromUsers' {skillId = pSkillId_}
+
+-- | The private skill ID you want to make unavailable for enrolled users.
+disassociateSkillFromUsers_skillId :: Lens.Lens' DisassociateSkillFromUsers Prelude.Text
+disassociateSkillFromUsers_skillId = Lens.lens (\DisassociateSkillFromUsers' {skillId} -> skillId) (\s@DisassociateSkillFromUsers' {} a -> s {skillId = a} :: DisassociateSkillFromUsers)
+
+instance Core.AWSRequest DisassociateSkillFromUsers where
+  type
+    AWSResponse DisassociateSkillFromUsers =
+      DisassociateSkillFromUsersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateSkillFromUsersResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateSkillFromUsers where
+  hashWithSalt _salt DisassociateSkillFromUsers' {..} =
+    _salt `Prelude.hashWithSalt` skillId
+
+instance Prelude.NFData DisassociateSkillFromUsers where
+  rnf DisassociateSkillFromUsers' {..} =
+    Prelude.rnf skillId
+
+instance Data.ToHeaders DisassociateSkillFromUsers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DisassociateSkillFromUsers" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateSkillFromUsers where
+  toJSON DisassociateSkillFromUsers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("SkillId" Data..= skillId)]
+      )
+
+instance Data.ToPath DisassociateSkillFromUsers where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateSkillFromUsers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateSkillFromUsersResponse' smart constructor.
+data DisassociateSkillFromUsersResponse = DisassociateSkillFromUsersResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSkillFromUsersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'disassociateSkillFromUsersResponse_httpStatus' - The response's http status code.
+newDisassociateSkillFromUsersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateSkillFromUsersResponse
+newDisassociateSkillFromUsersResponse pHttpStatus_ =
+  DisassociateSkillFromUsersResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateSkillFromUsersResponse_httpStatus :: Lens.Lens' DisassociateSkillFromUsersResponse Prelude.Int
+disassociateSkillFromUsersResponse_httpStatus = Lens.lens (\DisassociateSkillFromUsersResponse' {httpStatus} -> httpStatus) (\s@DisassociateSkillFromUsersResponse' {} a -> s {httpStatus = a} :: DisassociateSkillFromUsersResponse)
+
+instance
+  Prelude.NFData
+    DisassociateSkillFromUsersResponse
+  where
+  rnf DisassociateSkillFromUsersResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/DisassociateSkillGroupFromRoom.hs b/gen/Amazonka/AlexaBusiness/DisassociateSkillGroupFromRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/DisassociateSkillGroupFromRoom.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.DisassociateSkillGroupFromRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a skill group from a specified room. This disables all
+-- skills in the skill group on all devices in the room.
+module Amazonka.AlexaBusiness.DisassociateSkillGroupFromRoom
+  ( -- * Creating a Request
+    DisassociateSkillGroupFromRoom (..),
+    newDisassociateSkillGroupFromRoom,
+
+    -- * Request Lenses
+    disassociateSkillGroupFromRoom_roomArn,
+    disassociateSkillGroupFromRoom_skillGroupArn,
+
+    -- * Destructuring the Response
+    DisassociateSkillGroupFromRoomResponse (..),
+    newDisassociateSkillGroupFromRoomResponse,
+
+    -- * Response Lenses
+    disassociateSkillGroupFromRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateSkillGroupFromRoom' smart constructor.
+data DisassociateSkillGroupFromRoom = DisassociateSkillGroupFromRoom'
+  { -- | The ARN of the room from which the skill group is to be disassociated.
+    -- Required.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the skill group to disassociate from a room. Required.
+    skillGroupArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSkillGroupFromRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'disassociateSkillGroupFromRoom_roomArn' - The ARN of the room from which the skill group is to be disassociated.
+-- Required.
+--
+-- 'skillGroupArn', 'disassociateSkillGroupFromRoom_skillGroupArn' - The ARN of the skill group to disassociate from a room. Required.
+newDisassociateSkillGroupFromRoom ::
+  DisassociateSkillGroupFromRoom
+newDisassociateSkillGroupFromRoom =
+  DisassociateSkillGroupFromRoom'
+    { roomArn =
+        Prelude.Nothing,
+      skillGroupArn = Prelude.Nothing
+    }
+
+-- | The ARN of the room from which the skill group is to be disassociated.
+-- Required.
+disassociateSkillGroupFromRoom_roomArn :: Lens.Lens' DisassociateSkillGroupFromRoom (Prelude.Maybe Prelude.Text)
+disassociateSkillGroupFromRoom_roomArn = Lens.lens (\DisassociateSkillGroupFromRoom' {roomArn} -> roomArn) (\s@DisassociateSkillGroupFromRoom' {} a -> s {roomArn = a} :: DisassociateSkillGroupFromRoom)
+
+-- | The ARN of the skill group to disassociate from a room. Required.
+disassociateSkillGroupFromRoom_skillGroupArn :: Lens.Lens' DisassociateSkillGroupFromRoom (Prelude.Maybe Prelude.Text)
+disassociateSkillGroupFromRoom_skillGroupArn = Lens.lens (\DisassociateSkillGroupFromRoom' {skillGroupArn} -> skillGroupArn) (\s@DisassociateSkillGroupFromRoom' {} a -> s {skillGroupArn = a} :: DisassociateSkillGroupFromRoom)
+
+instance
+  Core.AWSRequest
+    DisassociateSkillGroupFromRoom
+  where
+  type
+    AWSResponse DisassociateSkillGroupFromRoom =
+      DisassociateSkillGroupFromRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateSkillGroupFromRoomResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateSkillGroupFromRoom
+  where
+  hashWithSalt
+    _salt
+    DisassociateSkillGroupFromRoom' {..} =
+      _salt
+        `Prelude.hashWithSalt` roomArn
+        `Prelude.hashWithSalt` skillGroupArn
+
+instance
+  Prelude.NFData
+    DisassociateSkillGroupFromRoom
+  where
+  rnf DisassociateSkillGroupFromRoom' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf skillGroupArn
+
+instance
+  Data.ToHeaders
+    DisassociateSkillGroupFromRoom
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.DisassociateSkillGroupFromRoom" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateSkillGroupFromRoom where
+  toJSON DisassociateSkillGroupFromRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RoomArn" Data..=) Prelude.<$> roomArn,
+            ("SkillGroupArn" Data..=) Prelude.<$> skillGroupArn
+          ]
+      )
+
+instance Data.ToPath DisassociateSkillGroupFromRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateSkillGroupFromRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateSkillGroupFromRoomResponse' smart constructor.
+data DisassociateSkillGroupFromRoomResponse = DisassociateSkillGroupFromRoomResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSkillGroupFromRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'disassociateSkillGroupFromRoomResponse_httpStatus' - The response's http status code.
+newDisassociateSkillGroupFromRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateSkillGroupFromRoomResponse
+newDisassociateSkillGroupFromRoomResponse
+  pHttpStatus_ =
+    DisassociateSkillGroupFromRoomResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateSkillGroupFromRoomResponse_httpStatus :: Lens.Lens' DisassociateSkillGroupFromRoomResponse Prelude.Int
+disassociateSkillGroupFromRoomResponse_httpStatus = Lens.lens (\DisassociateSkillGroupFromRoomResponse' {httpStatus} -> httpStatus) (\s@DisassociateSkillGroupFromRoomResponse' {} a -> s {httpStatus = a} :: DisassociateSkillGroupFromRoomResponse)
+
+instance
+  Prelude.NFData
+    DisassociateSkillGroupFromRoomResponse
+  where
+  rnf DisassociateSkillGroupFromRoomResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ForgetSmartHomeAppliances.hs b/gen/Amazonka/AlexaBusiness/ForgetSmartHomeAppliances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ForgetSmartHomeAppliances.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ForgetSmartHomeAppliances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Forgets smart home appliances associated to a room.
+module Amazonka.AlexaBusiness.ForgetSmartHomeAppliances
+  ( -- * Creating a Request
+    ForgetSmartHomeAppliances (..),
+    newForgetSmartHomeAppliances,
+
+    -- * Request Lenses
+    forgetSmartHomeAppliances_roomArn,
+
+    -- * Destructuring the Response
+    ForgetSmartHomeAppliancesResponse (..),
+    newForgetSmartHomeAppliancesResponse,
+
+    -- * Response Lenses
+    forgetSmartHomeAppliancesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newForgetSmartHomeAppliances' smart constructor.
+data ForgetSmartHomeAppliances = ForgetSmartHomeAppliances'
+  { -- | The room that the appliances are associated with.
+    roomArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ForgetSmartHomeAppliances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'forgetSmartHomeAppliances_roomArn' - The room that the appliances are associated with.
+newForgetSmartHomeAppliances ::
+  -- | 'roomArn'
+  Prelude.Text ->
+  ForgetSmartHomeAppliances
+newForgetSmartHomeAppliances pRoomArn_ =
+  ForgetSmartHomeAppliances' {roomArn = pRoomArn_}
+
+-- | The room that the appliances are associated with.
+forgetSmartHomeAppliances_roomArn :: Lens.Lens' ForgetSmartHomeAppliances Prelude.Text
+forgetSmartHomeAppliances_roomArn = Lens.lens (\ForgetSmartHomeAppliances' {roomArn} -> roomArn) (\s@ForgetSmartHomeAppliances' {} a -> s {roomArn = a} :: ForgetSmartHomeAppliances)
+
+instance Core.AWSRequest ForgetSmartHomeAppliances where
+  type
+    AWSResponse ForgetSmartHomeAppliances =
+      ForgetSmartHomeAppliancesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ForgetSmartHomeAppliancesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ForgetSmartHomeAppliances where
+  hashWithSalt _salt ForgetSmartHomeAppliances' {..} =
+    _salt `Prelude.hashWithSalt` roomArn
+
+instance Prelude.NFData ForgetSmartHomeAppliances where
+  rnf ForgetSmartHomeAppliances' {..} =
+    Prelude.rnf roomArn
+
+instance Data.ToHeaders ForgetSmartHomeAppliances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ForgetSmartHomeAppliances" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ForgetSmartHomeAppliances where
+  toJSON ForgetSmartHomeAppliances' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("RoomArn" Data..= roomArn)]
+      )
+
+instance Data.ToPath ForgetSmartHomeAppliances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ForgetSmartHomeAppliances where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newForgetSmartHomeAppliancesResponse' smart constructor.
+data ForgetSmartHomeAppliancesResponse = ForgetSmartHomeAppliancesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ForgetSmartHomeAppliancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'forgetSmartHomeAppliancesResponse_httpStatus' - The response's http status code.
+newForgetSmartHomeAppliancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ForgetSmartHomeAppliancesResponse
+newForgetSmartHomeAppliancesResponse pHttpStatus_ =
+  ForgetSmartHomeAppliancesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+forgetSmartHomeAppliancesResponse_httpStatus :: Lens.Lens' ForgetSmartHomeAppliancesResponse Prelude.Int
+forgetSmartHomeAppliancesResponse_httpStatus = Lens.lens (\ForgetSmartHomeAppliancesResponse' {httpStatus} -> httpStatus) (\s@ForgetSmartHomeAppliancesResponse' {} a -> s {httpStatus = a} :: ForgetSmartHomeAppliancesResponse)
+
+instance
+  Prelude.NFData
+    ForgetSmartHomeAppliancesResponse
+  where
+  rnf ForgetSmartHomeAppliancesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetAddressBook.hs b/gen/Amazonka/AlexaBusiness/GetAddressBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetAddressBook.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetAddressBook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets address the book details by the address book ARN.
+module Amazonka.AlexaBusiness.GetAddressBook
+  ( -- * Creating a Request
+    GetAddressBook (..),
+    newGetAddressBook,
+
+    -- * Request Lenses
+    getAddressBook_addressBookArn,
+
+    -- * Destructuring the Response
+    GetAddressBookResponse (..),
+    newGetAddressBookResponse,
+
+    -- * Response Lenses
+    getAddressBookResponse_addressBook,
+    getAddressBookResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAddressBook' smart constructor.
+data GetAddressBook = GetAddressBook'
+  { -- | The ARN of the address book for which to request details.
+    addressBookArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAddressBook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressBookArn', 'getAddressBook_addressBookArn' - The ARN of the address book for which to request details.
+newGetAddressBook ::
+  -- | 'addressBookArn'
+  Prelude.Text ->
+  GetAddressBook
+newGetAddressBook pAddressBookArn_ =
+  GetAddressBook' {addressBookArn = pAddressBookArn_}
+
+-- | The ARN of the address book for which to request details.
+getAddressBook_addressBookArn :: Lens.Lens' GetAddressBook Prelude.Text
+getAddressBook_addressBookArn = Lens.lens (\GetAddressBook' {addressBookArn} -> addressBookArn) (\s@GetAddressBook' {} a -> s {addressBookArn = a} :: GetAddressBook)
+
+instance Core.AWSRequest GetAddressBook where
+  type
+    AWSResponse GetAddressBook =
+      GetAddressBookResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAddressBookResponse'
+            Prelude.<$> (x Data..?> "AddressBook")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAddressBook where
+  hashWithSalt _salt GetAddressBook' {..} =
+    _salt `Prelude.hashWithSalt` addressBookArn
+
+instance Prelude.NFData GetAddressBook where
+  rnf GetAddressBook' {..} = Prelude.rnf addressBookArn
+
+instance Data.ToHeaders GetAddressBook where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetAddressBook" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAddressBook where
+  toJSON GetAddressBook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AddressBookArn" Data..= addressBookArn)
+          ]
+      )
+
+instance Data.ToPath GetAddressBook where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAddressBook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAddressBookResponse' smart constructor.
+data GetAddressBookResponse = GetAddressBookResponse'
+  { -- | The details of the requested address book.
+    addressBook :: Prelude.Maybe AddressBook,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAddressBookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressBook', 'getAddressBookResponse_addressBook' - The details of the requested address book.
+--
+-- 'httpStatus', 'getAddressBookResponse_httpStatus' - The response's http status code.
+newGetAddressBookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAddressBookResponse
+newGetAddressBookResponse pHttpStatus_ =
+  GetAddressBookResponse'
+    { addressBook =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the requested address book.
+getAddressBookResponse_addressBook :: Lens.Lens' GetAddressBookResponse (Prelude.Maybe AddressBook)
+getAddressBookResponse_addressBook = Lens.lens (\GetAddressBookResponse' {addressBook} -> addressBook) (\s@GetAddressBookResponse' {} a -> s {addressBook = a} :: GetAddressBookResponse)
+
+-- | The response's http status code.
+getAddressBookResponse_httpStatus :: Lens.Lens' GetAddressBookResponse Prelude.Int
+getAddressBookResponse_httpStatus = Lens.lens (\GetAddressBookResponse' {httpStatus} -> httpStatus) (\s@GetAddressBookResponse' {} a -> s {httpStatus = a} :: GetAddressBookResponse)
+
+instance Prelude.NFData GetAddressBookResponse where
+  rnf GetAddressBookResponse' {..} =
+    Prelude.rnf addressBook
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetConferencePreference.hs b/gen/Amazonka/AlexaBusiness/GetConferencePreference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetConferencePreference.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetConferencePreference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the existing conference preferences.
+module Amazonka.AlexaBusiness.GetConferencePreference
+  ( -- * Creating a Request
+    GetConferencePreference (..),
+    newGetConferencePreference,
+
+    -- * Destructuring the Response
+    GetConferencePreferenceResponse (..),
+    newGetConferencePreferenceResponse,
+
+    -- * Response Lenses
+    getConferencePreferenceResponse_preference,
+    getConferencePreferenceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetConferencePreference' smart constructor.
+data GetConferencePreference = GetConferencePreference'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConferencePreference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetConferencePreference ::
+  GetConferencePreference
+newGetConferencePreference = GetConferencePreference'
+
+instance Core.AWSRequest GetConferencePreference where
+  type
+    AWSResponse GetConferencePreference =
+      GetConferencePreferenceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetConferencePreferenceResponse'
+            Prelude.<$> (x Data..?> "Preference")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetConferencePreference where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetConferencePreference where
+  rnf _ = ()
+
+instance Data.ToHeaders GetConferencePreference where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetConferencePreference" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetConferencePreference where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetConferencePreference where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetConferencePreference where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetConferencePreferenceResponse' smart constructor.
+data GetConferencePreferenceResponse = GetConferencePreferenceResponse'
+  { -- | The conference preference.
+    preference :: Prelude.Maybe ConferencePreference,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConferencePreferenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'preference', 'getConferencePreferenceResponse_preference' - The conference preference.
+--
+-- 'httpStatus', 'getConferencePreferenceResponse_httpStatus' - The response's http status code.
+newGetConferencePreferenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConferencePreferenceResponse
+newGetConferencePreferenceResponse pHttpStatus_ =
+  GetConferencePreferenceResponse'
+    { preference =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The conference preference.
+getConferencePreferenceResponse_preference :: Lens.Lens' GetConferencePreferenceResponse (Prelude.Maybe ConferencePreference)
+getConferencePreferenceResponse_preference = Lens.lens (\GetConferencePreferenceResponse' {preference} -> preference) (\s@GetConferencePreferenceResponse' {} a -> s {preference = a} :: GetConferencePreferenceResponse)
+
+-- | The response's http status code.
+getConferencePreferenceResponse_httpStatus :: Lens.Lens' GetConferencePreferenceResponse Prelude.Int
+getConferencePreferenceResponse_httpStatus = Lens.lens (\GetConferencePreferenceResponse' {httpStatus} -> httpStatus) (\s@GetConferencePreferenceResponse' {} a -> s {httpStatus = a} :: GetConferencePreferenceResponse)
+
+instance
+  Prelude.NFData
+    GetConferencePreferenceResponse
+  where
+  rnf GetConferencePreferenceResponse' {..} =
+    Prelude.rnf preference
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetConferenceProvider.hs b/gen/Amazonka/AlexaBusiness/GetConferenceProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetConferenceProvider.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetConferenceProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets details about a specific conference provider.
+module Amazonka.AlexaBusiness.GetConferenceProvider
+  ( -- * Creating a Request
+    GetConferenceProvider (..),
+    newGetConferenceProvider,
+
+    -- * Request Lenses
+    getConferenceProvider_conferenceProviderArn,
+
+    -- * Destructuring the Response
+    GetConferenceProviderResponse (..),
+    newGetConferenceProviderResponse,
+
+    -- * Response Lenses
+    getConferenceProviderResponse_conferenceProvider,
+    getConferenceProviderResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetConferenceProvider' smart constructor.
+data GetConferenceProvider = GetConferenceProvider'
+  { -- | The ARN of the newly created conference provider.
+    conferenceProviderArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConferenceProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conferenceProviderArn', 'getConferenceProvider_conferenceProviderArn' - The ARN of the newly created conference provider.
+newGetConferenceProvider ::
+  -- | 'conferenceProviderArn'
+  Prelude.Text ->
+  GetConferenceProvider
+newGetConferenceProvider pConferenceProviderArn_ =
+  GetConferenceProvider'
+    { conferenceProviderArn =
+        pConferenceProviderArn_
+    }
+
+-- | The ARN of the newly created conference provider.
+getConferenceProvider_conferenceProviderArn :: Lens.Lens' GetConferenceProvider Prelude.Text
+getConferenceProvider_conferenceProviderArn = Lens.lens (\GetConferenceProvider' {conferenceProviderArn} -> conferenceProviderArn) (\s@GetConferenceProvider' {} a -> s {conferenceProviderArn = a} :: GetConferenceProvider)
+
+instance Core.AWSRequest GetConferenceProvider where
+  type
+    AWSResponse GetConferenceProvider =
+      GetConferenceProviderResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetConferenceProviderResponse'
+            Prelude.<$> (x Data..?> "ConferenceProvider")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetConferenceProvider where
+  hashWithSalt _salt GetConferenceProvider' {..} =
+    _salt `Prelude.hashWithSalt` conferenceProviderArn
+
+instance Prelude.NFData GetConferenceProvider where
+  rnf GetConferenceProvider' {..} =
+    Prelude.rnf conferenceProviderArn
+
+instance Data.ToHeaders GetConferenceProvider where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetConferenceProvider" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetConferenceProvider where
+  toJSON GetConferenceProvider' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ConferenceProviderArn"
+                  Data..= conferenceProviderArn
+              )
+          ]
+      )
+
+instance Data.ToPath GetConferenceProvider where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetConferenceProvider where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetConferenceProviderResponse' smart constructor.
+data GetConferenceProviderResponse = GetConferenceProviderResponse'
+  { -- | The conference provider.
+    conferenceProvider :: Prelude.Maybe ConferenceProvider,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConferenceProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conferenceProvider', 'getConferenceProviderResponse_conferenceProvider' - The conference provider.
+--
+-- 'httpStatus', 'getConferenceProviderResponse_httpStatus' - The response's http status code.
+newGetConferenceProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConferenceProviderResponse
+newGetConferenceProviderResponse pHttpStatus_ =
+  GetConferenceProviderResponse'
+    { conferenceProvider =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The conference provider.
+getConferenceProviderResponse_conferenceProvider :: Lens.Lens' GetConferenceProviderResponse (Prelude.Maybe ConferenceProvider)
+getConferenceProviderResponse_conferenceProvider = Lens.lens (\GetConferenceProviderResponse' {conferenceProvider} -> conferenceProvider) (\s@GetConferenceProviderResponse' {} a -> s {conferenceProvider = a} :: GetConferenceProviderResponse)
+
+-- | The response's http status code.
+getConferenceProviderResponse_httpStatus :: Lens.Lens' GetConferenceProviderResponse Prelude.Int
+getConferenceProviderResponse_httpStatus = Lens.lens (\GetConferenceProviderResponse' {httpStatus} -> httpStatus) (\s@GetConferenceProviderResponse' {} a -> s {httpStatus = a} :: GetConferenceProviderResponse)
+
+instance Prelude.NFData GetConferenceProviderResponse where
+  rnf GetConferenceProviderResponse' {..} =
+    Prelude.rnf conferenceProvider
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetContact.hs b/gen/Amazonka/AlexaBusiness/GetContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetContact.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetContact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the contact details by the contact ARN.
+module Amazonka.AlexaBusiness.GetContact
+  ( -- * Creating a Request
+    GetContact (..),
+    newGetContact,
+
+    -- * Request Lenses
+    getContact_contactArn,
+
+    -- * Destructuring the Response
+    GetContactResponse (..),
+    newGetContactResponse,
+
+    -- * Response Lenses
+    getContactResponse_contact,
+    getContactResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetContact' smart constructor.
+data GetContact = GetContact'
+  { -- | The ARN of the contact for which to request details.
+    contactArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactArn', 'getContact_contactArn' - The ARN of the contact for which to request details.
+newGetContact ::
+  -- | 'contactArn'
+  Prelude.Text ->
+  GetContact
+newGetContact pContactArn_ =
+  GetContact' {contactArn = pContactArn_}
+
+-- | The ARN of the contact for which to request details.
+getContact_contactArn :: Lens.Lens' GetContact Prelude.Text
+getContact_contactArn = Lens.lens (\GetContact' {contactArn} -> contactArn) (\s@GetContact' {} a -> s {contactArn = a} :: GetContact)
+
+instance Core.AWSRequest GetContact where
+  type AWSResponse GetContact = GetContactResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetContactResponse'
+            Prelude.<$> (x Data..?> "Contact")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetContact where
+  hashWithSalt _salt GetContact' {..} =
+    _salt `Prelude.hashWithSalt` contactArn
+
+instance Prelude.NFData GetContact where
+  rnf GetContact' {..} = Prelude.rnf contactArn
+
+instance Data.ToHeaders GetContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetContact" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetContact where
+  toJSON GetContact' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ContactArn" Data..= contactArn)]
+      )
+
+instance Data.ToPath GetContact where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetContactResponse' smart constructor.
+data GetContactResponse = GetContactResponse'
+  { -- | The details of the requested contact.
+    contact :: Prelude.Maybe Contact,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contact', 'getContactResponse_contact' - The details of the requested contact.
+--
+-- 'httpStatus', 'getContactResponse_httpStatus' - The response's http status code.
+newGetContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetContactResponse
+newGetContactResponse pHttpStatus_ =
+  GetContactResponse'
+    { contact = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the requested contact.
+getContactResponse_contact :: Lens.Lens' GetContactResponse (Prelude.Maybe Contact)
+getContactResponse_contact = Lens.lens (\GetContactResponse' {contact} -> contact) (\s@GetContactResponse' {} a -> s {contact = a} :: GetContactResponse)
+
+-- | The response's http status code.
+getContactResponse_httpStatus :: Lens.Lens' GetContactResponse Prelude.Int
+getContactResponse_httpStatus = Lens.lens (\GetContactResponse' {httpStatus} -> httpStatus) (\s@GetContactResponse' {} a -> s {httpStatus = a} :: GetContactResponse)
+
+instance Prelude.NFData GetContactResponse where
+  rnf GetContactResponse' {..} =
+    Prelude.rnf contact
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetDevice.hs b/gen/Amazonka/AlexaBusiness/GetDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetDevice.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the details of a device by device ARN.
+module Amazonka.AlexaBusiness.GetDevice
+  ( -- * Creating a Request
+    GetDevice (..),
+    newGetDevice,
+
+    -- * Request Lenses
+    getDevice_deviceArn,
+
+    -- * Destructuring the Response
+    GetDeviceResponse (..),
+    newGetDeviceResponse,
+
+    -- * Response Lenses
+    getDeviceResponse_device,
+    getDeviceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDevice' smart constructor.
+data GetDevice = GetDevice'
+  { -- | The ARN of the device for which to request details. Required.
+    deviceArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDevice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'getDevice_deviceArn' - The ARN of the device for which to request details. Required.
+newGetDevice ::
+  GetDevice
+newGetDevice =
+  GetDevice' {deviceArn = Prelude.Nothing}
+
+-- | The ARN of the device for which to request details. Required.
+getDevice_deviceArn :: Lens.Lens' GetDevice (Prelude.Maybe Prelude.Text)
+getDevice_deviceArn = Lens.lens (\GetDevice' {deviceArn} -> deviceArn) (\s@GetDevice' {} a -> s {deviceArn = a} :: GetDevice)
+
+instance Core.AWSRequest GetDevice where
+  type AWSResponse GetDevice = GetDeviceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDeviceResponse'
+            Prelude.<$> (x Data..?> "Device")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDevice where
+  hashWithSalt _salt GetDevice' {..} =
+    _salt `Prelude.hashWithSalt` deviceArn
+
+instance Prelude.NFData GetDevice where
+  rnf GetDevice' {..} = Prelude.rnf deviceArn
+
+instance Data.ToHeaders GetDevice where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AlexaForBusiness.GetDevice" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDevice where
+  toJSON GetDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("DeviceArn" Data..=) Prelude.<$> deviceArn]
+      )
+
+instance Data.ToPath GetDevice where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDeviceResponse' smart constructor.
+data GetDeviceResponse = GetDeviceResponse'
+  { -- | The details of the device requested. Required.
+    device :: Prelude.Maybe Device,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeviceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'device', 'getDeviceResponse_device' - The details of the device requested. Required.
+--
+-- 'httpStatus', 'getDeviceResponse_httpStatus' - The response's http status code.
+newGetDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDeviceResponse
+newGetDeviceResponse pHttpStatus_ =
+  GetDeviceResponse'
+    { device = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the device requested. Required.
+getDeviceResponse_device :: Lens.Lens' GetDeviceResponse (Prelude.Maybe Device)
+getDeviceResponse_device = Lens.lens (\GetDeviceResponse' {device} -> device) (\s@GetDeviceResponse' {} a -> s {device = a} :: GetDeviceResponse)
+
+-- | The response's http status code.
+getDeviceResponse_httpStatus :: Lens.Lens' GetDeviceResponse Prelude.Int
+getDeviceResponse_httpStatus = Lens.lens (\GetDeviceResponse' {httpStatus} -> httpStatus) (\s@GetDeviceResponse' {} a -> s {httpStatus = a} :: GetDeviceResponse)
+
+instance Prelude.NFData GetDeviceResponse where
+  rnf GetDeviceResponse' {..} =
+    Prelude.rnf device
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetGateway.hs b/gen/Amazonka/AlexaBusiness/GetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetGateway.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the details of a gateway.
+module Amazonka.AlexaBusiness.GetGateway
+  ( -- * Creating a Request
+    GetGateway (..),
+    newGetGateway,
+
+    -- * Request Lenses
+    getGateway_gatewayArn,
+
+    -- * Destructuring the Response
+    GetGatewayResponse (..),
+    newGetGatewayResponse,
+
+    -- * Response Lenses
+    getGatewayResponse_gateway,
+    getGatewayResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetGateway' smart constructor.
+data GetGateway = GetGateway'
+  { -- | The ARN of the gateway to get.
+    gatewayArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gatewayArn', 'getGateway_gatewayArn' - The ARN of the gateway to get.
+newGetGateway ::
+  -- | 'gatewayArn'
+  Prelude.Text ->
+  GetGateway
+newGetGateway pGatewayArn_ =
+  GetGateway' {gatewayArn = pGatewayArn_}
+
+-- | The ARN of the gateway to get.
+getGateway_gatewayArn :: Lens.Lens' GetGateway Prelude.Text
+getGateway_gatewayArn = Lens.lens (\GetGateway' {gatewayArn} -> gatewayArn) (\s@GetGateway' {} a -> s {gatewayArn = a} :: GetGateway)
+
+instance Core.AWSRequest GetGateway where
+  type AWSResponse GetGateway = GetGatewayResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetGatewayResponse'
+            Prelude.<$> (x Data..?> "Gateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetGateway where
+  hashWithSalt _salt GetGateway' {..} =
+    _salt `Prelude.hashWithSalt` gatewayArn
+
+instance Prelude.NFData GetGateway where
+  rnf GetGateway' {..} = Prelude.rnf gatewayArn
+
+instance Data.ToHeaders GetGateway where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetGateway" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetGateway where
+  toJSON GetGateway' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("GatewayArn" Data..= gatewayArn)]
+      )
+
+instance Data.ToPath GetGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetGateway where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetGatewayResponse' smart constructor.
+data GetGatewayResponse = GetGatewayResponse'
+  { -- | The details of the gateway.
+    gateway :: Prelude.Maybe Gateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gateway', 'getGatewayResponse_gateway' - The details of the gateway.
+--
+-- 'httpStatus', 'getGatewayResponse_httpStatus' - The response's http status code.
+newGetGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetGatewayResponse
+newGetGatewayResponse pHttpStatus_ =
+  GetGatewayResponse'
+    { gateway = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the gateway.
+getGatewayResponse_gateway :: Lens.Lens' GetGatewayResponse (Prelude.Maybe Gateway)
+getGatewayResponse_gateway = Lens.lens (\GetGatewayResponse' {gateway} -> gateway) (\s@GetGatewayResponse' {} a -> s {gateway = a} :: GetGatewayResponse)
+
+-- | The response's http status code.
+getGatewayResponse_httpStatus :: Lens.Lens' GetGatewayResponse Prelude.Int
+getGatewayResponse_httpStatus = Lens.lens (\GetGatewayResponse' {httpStatus} -> httpStatus) (\s@GetGatewayResponse' {} a -> s {httpStatus = a} :: GetGatewayResponse)
+
+instance Prelude.NFData GetGatewayResponse where
+  rnf GetGatewayResponse' {..} =
+    Prelude.rnf gateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetGatewayGroup.hs b/gen/Amazonka/AlexaBusiness/GetGatewayGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetGatewayGroup.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetGatewayGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the details of a gateway group.
+module Amazonka.AlexaBusiness.GetGatewayGroup
+  ( -- * Creating a Request
+    GetGatewayGroup (..),
+    newGetGatewayGroup,
+
+    -- * Request Lenses
+    getGatewayGroup_gatewayGroupArn,
+
+    -- * Destructuring the Response
+    GetGatewayGroupResponse (..),
+    newGetGatewayGroupResponse,
+
+    -- * Response Lenses
+    getGatewayGroupResponse_gatewayGroup,
+    getGatewayGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetGatewayGroup' smart constructor.
+data GetGatewayGroup = GetGatewayGroup'
+  { -- | The ARN of the gateway group to get.
+    gatewayGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGatewayGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gatewayGroupArn', 'getGatewayGroup_gatewayGroupArn' - The ARN of the gateway group to get.
+newGetGatewayGroup ::
+  -- | 'gatewayGroupArn'
+  Prelude.Text ->
+  GetGatewayGroup
+newGetGatewayGroup pGatewayGroupArn_ =
+  GetGatewayGroup'
+    { gatewayGroupArn =
+        pGatewayGroupArn_
+    }
+
+-- | The ARN of the gateway group to get.
+getGatewayGroup_gatewayGroupArn :: Lens.Lens' GetGatewayGroup Prelude.Text
+getGatewayGroup_gatewayGroupArn = Lens.lens (\GetGatewayGroup' {gatewayGroupArn} -> gatewayGroupArn) (\s@GetGatewayGroup' {} a -> s {gatewayGroupArn = a} :: GetGatewayGroup)
+
+instance Core.AWSRequest GetGatewayGroup where
+  type
+    AWSResponse GetGatewayGroup =
+      GetGatewayGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetGatewayGroupResponse'
+            Prelude.<$> (x Data..?> "GatewayGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetGatewayGroup where
+  hashWithSalt _salt GetGatewayGroup' {..} =
+    _salt `Prelude.hashWithSalt` gatewayGroupArn
+
+instance Prelude.NFData GetGatewayGroup where
+  rnf GetGatewayGroup' {..} =
+    Prelude.rnf gatewayGroupArn
+
+instance Data.ToHeaders GetGatewayGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetGatewayGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetGatewayGroup where
+  toJSON GetGatewayGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("GatewayGroupArn" Data..= gatewayGroupArn)
+          ]
+      )
+
+instance Data.ToPath GetGatewayGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetGatewayGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetGatewayGroupResponse' smart constructor.
+data GetGatewayGroupResponse = GetGatewayGroupResponse'
+  { gatewayGroup :: Prelude.Maybe GatewayGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGatewayGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gatewayGroup', 'getGatewayGroupResponse_gatewayGroup' - Undocumented member.
+--
+-- 'httpStatus', 'getGatewayGroupResponse_httpStatus' - The response's http status code.
+newGetGatewayGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetGatewayGroupResponse
+newGetGatewayGroupResponse pHttpStatus_ =
+  GetGatewayGroupResponse'
+    { gatewayGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getGatewayGroupResponse_gatewayGroup :: Lens.Lens' GetGatewayGroupResponse (Prelude.Maybe GatewayGroup)
+getGatewayGroupResponse_gatewayGroup = Lens.lens (\GetGatewayGroupResponse' {gatewayGroup} -> gatewayGroup) (\s@GetGatewayGroupResponse' {} a -> s {gatewayGroup = a} :: GetGatewayGroupResponse)
+
+-- | The response's http status code.
+getGatewayGroupResponse_httpStatus :: Lens.Lens' GetGatewayGroupResponse Prelude.Int
+getGatewayGroupResponse_httpStatus = Lens.lens (\GetGatewayGroupResponse' {httpStatus} -> httpStatus) (\s@GetGatewayGroupResponse' {} a -> s {httpStatus = a} :: GetGatewayGroupResponse)
+
+instance Prelude.NFData GetGatewayGroupResponse where
+  rnf GetGatewayGroupResponse' {..} =
+    Prelude.rnf gatewayGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetInvitationConfiguration.hs b/gen/Amazonka/AlexaBusiness/GetInvitationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetInvitationConfiguration.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetInvitationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the configured values for the user enrollment invitation email
+-- template.
+module Amazonka.AlexaBusiness.GetInvitationConfiguration
+  ( -- * Creating a Request
+    GetInvitationConfiguration (..),
+    newGetInvitationConfiguration,
+
+    -- * Destructuring the Response
+    GetInvitationConfigurationResponse (..),
+    newGetInvitationConfigurationResponse,
+
+    -- * Response Lenses
+    getInvitationConfigurationResponse_contactEmail,
+    getInvitationConfigurationResponse_organizationName,
+    getInvitationConfigurationResponse_privateSkillIds,
+    getInvitationConfigurationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetInvitationConfiguration' smart constructor.
+data GetInvitationConfiguration = GetInvitationConfiguration'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInvitationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetInvitationConfiguration ::
+  GetInvitationConfiguration
+newGetInvitationConfiguration =
+  GetInvitationConfiguration'
+
+instance Core.AWSRequest GetInvitationConfiguration where
+  type
+    AWSResponse GetInvitationConfiguration =
+      GetInvitationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetInvitationConfigurationResponse'
+            Prelude.<$> (x Data..?> "ContactEmail")
+            Prelude.<*> (x Data..?> "OrganizationName")
+            Prelude.<*> ( x
+                            Data..?> "PrivateSkillIds"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetInvitationConfiguration where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetInvitationConfiguration where
+  rnf _ = ()
+
+instance Data.ToHeaders GetInvitationConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetInvitationConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetInvitationConfiguration where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetInvitationConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetInvitationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetInvitationConfigurationResponse' smart constructor.
+data GetInvitationConfigurationResponse = GetInvitationConfigurationResponse'
+  { -- | The email ID of the organization or individual contact that the enrolled
+    -- user can use.
+    contactEmail :: Prelude.Maybe Prelude.Text,
+    -- | The name of the organization sending the enrollment invite to a user.
+    organizationName :: Prelude.Maybe Prelude.Text,
+    -- | The list of private skill IDs that you want to recommend to the user to
+    -- enable in the invitation.
+    privateSkillIds :: Prelude.Maybe [Prelude.Text],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInvitationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactEmail', 'getInvitationConfigurationResponse_contactEmail' - The email ID of the organization or individual contact that the enrolled
+-- user can use.
+--
+-- 'organizationName', 'getInvitationConfigurationResponse_organizationName' - The name of the organization sending the enrollment invite to a user.
+--
+-- 'privateSkillIds', 'getInvitationConfigurationResponse_privateSkillIds' - The list of private skill IDs that you want to recommend to the user to
+-- enable in the invitation.
+--
+-- 'httpStatus', 'getInvitationConfigurationResponse_httpStatus' - The response's http status code.
+newGetInvitationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetInvitationConfigurationResponse
+newGetInvitationConfigurationResponse pHttpStatus_ =
+  GetInvitationConfigurationResponse'
+    { contactEmail =
+        Prelude.Nothing,
+      organizationName = Prelude.Nothing,
+      privateSkillIds = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The email ID of the organization or individual contact that the enrolled
+-- user can use.
+getInvitationConfigurationResponse_contactEmail :: Lens.Lens' GetInvitationConfigurationResponse (Prelude.Maybe Prelude.Text)
+getInvitationConfigurationResponse_contactEmail = Lens.lens (\GetInvitationConfigurationResponse' {contactEmail} -> contactEmail) (\s@GetInvitationConfigurationResponse' {} a -> s {contactEmail = a} :: GetInvitationConfigurationResponse)
+
+-- | The name of the organization sending the enrollment invite to a user.
+getInvitationConfigurationResponse_organizationName :: Lens.Lens' GetInvitationConfigurationResponse (Prelude.Maybe Prelude.Text)
+getInvitationConfigurationResponse_organizationName = Lens.lens (\GetInvitationConfigurationResponse' {organizationName} -> organizationName) (\s@GetInvitationConfigurationResponse' {} a -> s {organizationName = a} :: GetInvitationConfigurationResponse)
+
+-- | The list of private skill IDs that you want to recommend to the user to
+-- enable in the invitation.
+getInvitationConfigurationResponse_privateSkillIds :: Lens.Lens' GetInvitationConfigurationResponse (Prelude.Maybe [Prelude.Text])
+getInvitationConfigurationResponse_privateSkillIds = Lens.lens (\GetInvitationConfigurationResponse' {privateSkillIds} -> privateSkillIds) (\s@GetInvitationConfigurationResponse' {} a -> s {privateSkillIds = a} :: GetInvitationConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getInvitationConfigurationResponse_httpStatus :: Lens.Lens' GetInvitationConfigurationResponse Prelude.Int
+getInvitationConfigurationResponse_httpStatus = Lens.lens (\GetInvitationConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetInvitationConfigurationResponse' {} a -> s {httpStatus = a} :: GetInvitationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetInvitationConfigurationResponse
+  where
+  rnf GetInvitationConfigurationResponse' {..} =
+    Prelude.rnf contactEmail
+      `Prelude.seq` Prelude.rnf organizationName
+      `Prelude.seq` Prelude.rnf privateSkillIds
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetNetworkProfile.hs b/gen/Amazonka/AlexaBusiness/GetNetworkProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetNetworkProfile.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetNetworkProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the network profile details by the network profile ARN.
+module Amazonka.AlexaBusiness.GetNetworkProfile
+  ( -- * Creating a Request
+    GetNetworkProfile (..),
+    newGetNetworkProfile,
+
+    -- * Request Lenses
+    getNetworkProfile_networkProfileArn,
+
+    -- * Destructuring the Response
+    GetNetworkProfileResponse (..),
+    newGetNetworkProfileResponse,
+
+    -- * Response Lenses
+    getNetworkProfileResponse_networkProfile,
+    getNetworkProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetNetworkProfile' smart constructor.
+data GetNetworkProfile = GetNetworkProfile'
+  { -- | The ARN of the network profile associated with a device.
+    networkProfileArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetworkProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkProfileArn', 'getNetworkProfile_networkProfileArn' - The ARN of the network profile associated with a device.
+newGetNetworkProfile ::
+  -- | 'networkProfileArn'
+  Prelude.Text ->
+  GetNetworkProfile
+newGetNetworkProfile pNetworkProfileArn_ =
+  GetNetworkProfile'
+    { networkProfileArn =
+        pNetworkProfileArn_
+    }
+
+-- | The ARN of the network profile associated with a device.
+getNetworkProfile_networkProfileArn :: Lens.Lens' GetNetworkProfile Prelude.Text
+getNetworkProfile_networkProfileArn = Lens.lens (\GetNetworkProfile' {networkProfileArn} -> networkProfileArn) (\s@GetNetworkProfile' {} a -> s {networkProfileArn = a} :: GetNetworkProfile)
+
+instance Core.AWSRequest GetNetworkProfile where
+  type
+    AWSResponse GetNetworkProfile =
+      GetNetworkProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetNetworkProfileResponse'
+            Prelude.<$> (x Data..?> "NetworkProfile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetNetworkProfile where
+  hashWithSalt _salt GetNetworkProfile' {..} =
+    _salt `Prelude.hashWithSalt` networkProfileArn
+
+instance Prelude.NFData GetNetworkProfile where
+  rnf GetNetworkProfile' {..} =
+    Prelude.rnf networkProfileArn
+
+instance Data.ToHeaders GetNetworkProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetNetworkProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetNetworkProfile where
+  toJSON GetNetworkProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("NetworkProfileArn" Data..= networkProfileArn)
+          ]
+      )
+
+instance Data.ToPath GetNetworkProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetNetworkProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetNetworkProfileResponse' smart constructor.
+data GetNetworkProfileResponse = GetNetworkProfileResponse'
+  { -- | The network profile associated with a device.
+    networkProfile :: Prelude.Maybe NetworkProfile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetworkProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkProfile', 'getNetworkProfileResponse_networkProfile' - The network profile associated with a device.
+--
+-- 'httpStatus', 'getNetworkProfileResponse_httpStatus' - The response's http status code.
+newGetNetworkProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetNetworkProfileResponse
+newGetNetworkProfileResponse pHttpStatus_ =
+  GetNetworkProfileResponse'
+    { networkProfile =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The network profile associated with a device.
+getNetworkProfileResponse_networkProfile :: Lens.Lens' GetNetworkProfileResponse (Prelude.Maybe NetworkProfile)
+getNetworkProfileResponse_networkProfile = Lens.lens (\GetNetworkProfileResponse' {networkProfile} -> networkProfile) (\s@GetNetworkProfileResponse' {} a -> s {networkProfile = a} :: GetNetworkProfileResponse)
+
+-- | The response's http status code.
+getNetworkProfileResponse_httpStatus :: Lens.Lens' GetNetworkProfileResponse Prelude.Int
+getNetworkProfileResponse_httpStatus = Lens.lens (\GetNetworkProfileResponse' {httpStatus} -> httpStatus) (\s@GetNetworkProfileResponse' {} a -> s {httpStatus = a} :: GetNetworkProfileResponse)
+
+instance Prelude.NFData GetNetworkProfileResponse where
+  rnf GetNetworkProfileResponse' {..} =
+    Prelude.rnf networkProfile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetProfile.hs b/gen/Amazonka/AlexaBusiness/GetProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetProfile.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the details of a room profile by profile ARN.
+module Amazonka.AlexaBusiness.GetProfile
+  ( -- * Creating a Request
+    GetProfile (..),
+    newGetProfile,
+
+    -- * Request Lenses
+    getProfile_profileArn,
+
+    -- * Destructuring the Response
+    GetProfileResponse (..),
+    newGetProfileResponse,
+
+    -- * Response Lenses
+    getProfileResponse_profile,
+    getProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetProfile' smart constructor.
+data GetProfile = GetProfile'
+  { -- | The ARN of the room profile for which to request details. Required.
+    profileArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profileArn', 'getProfile_profileArn' - The ARN of the room profile for which to request details. Required.
+newGetProfile ::
+  GetProfile
+newGetProfile =
+  GetProfile' {profileArn = Prelude.Nothing}
+
+-- | The ARN of the room profile for which to request details. Required.
+getProfile_profileArn :: Lens.Lens' GetProfile (Prelude.Maybe Prelude.Text)
+getProfile_profileArn = Lens.lens (\GetProfile' {profileArn} -> profileArn) (\s@GetProfile' {} a -> s {profileArn = a} :: GetProfile)
+
+instance Core.AWSRequest GetProfile where
+  type AWSResponse GetProfile = GetProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetProfileResponse'
+            Prelude.<$> (x Data..?> "Profile")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetProfile where
+  hashWithSalt _salt GetProfile' {..} =
+    _salt `Prelude.hashWithSalt` profileArn
+
+instance Prelude.NFData GetProfile where
+  rnf GetProfile' {..} = Prelude.rnf profileArn
+
+instance Data.ToHeaders GetProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetProfile where
+  toJSON GetProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("ProfileArn" Data..=) Prelude.<$> profileArn]
+      )
+
+instance Data.ToPath GetProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetProfileResponse' smart constructor.
+data GetProfileResponse = GetProfileResponse'
+  { -- | The details of the room profile requested. Required.
+    profile :: Prelude.Maybe Profile,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'profile', 'getProfileResponse_profile' - The details of the room profile requested. Required.
+--
+-- 'httpStatus', 'getProfileResponse_httpStatus' - The response's http status code.
+newGetProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetProfileResponse
+newGetProfileResponse pHttpStatus_ =
+  GetProfileResponse'
+    { profile = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the room profile requested. Required.
+getProfileResponse_profile :: Lens.Lens' GetProfileResponse (Prelude.Maybe Profile)
+getProfileResponse_profile = Lens.lens (\GetProfileResponse' {profile} -> profile) (\s@GetProfileResponse' {} a -> s {profile = a} :: GetProfileResponse)
+
+-- | The response's http status code.
+getProfileResponse_httpStatus :: Lens.Lens' GetProfileResponse Prelude.Int
+getProfileResponse_httpStatus = Lens.lens (\GetProfileResponse' {httpStatus} -> httpStatus) (\s@GetProfileResponse' {} a -> s {httpStatus = a} :: GetProfileResponse)
+
+instance Prelude.NFData GetProfileResponse where
+  rnf GetProfileResponse' {..} =
+    Prelude.rnf profile
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetRoom.hs b/gen/Amazonka/AlexaBusiness/GetRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetRoom.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets room details by room ARN.
+module Amazonka.AlexaBusiness.GetRoom
+  ( -- * Creating a Request
+    GetRoom (..),
+    newGetRoom,
+
+    -- * Request Lenses
+    getRoom_roomArn,
+
+    -- * Destructuring the Response
+    GetRoomResponse (..),
+    newGetRoomResponse,
+
+    -- * Response Lenses
+    getRoomResponse_room,
+    getRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRoom' smart constructor.
+data GetRoom = GetRoom'
+  { -- | The ARN of the room for which to request details. Required.
+    roomArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'getRoom_roomArn' - The ARN of the room for which to request details. Required.
+newGetRoom ::
+  GetRoom
+newGetRoom = GetRoom' {roomArn = Prelude.Nothing}
+
+-- | The ARN of the room for which to request details. Required.
+getRoom_roomArn :: Lens.Lens' GetRoom (Prelude.Maybe Prelude.Text)
+getRoom_roomArn = Lens.lens (\GetRoom' {roomArn} -> roomArn) (\s@GetRoom' {} a -> s {roomArn = a} :: GetRoom)
+
+instance Core.AWSRequest GetRoom where
+  type AWSResponse GetRoom = GetRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRoomResponse'
+            Prelude.<$> (x Data..?> "Room")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRoom where
+  hashWithSalt _salt GetRoom' {..} =
+    _salt `Prelude.hashWithSalt` roomArn
+
+instance Prelude.NFData GetRoom where
+  rnf GetRoom' {..} = Prelude.rnf roomArn
+
+instance Data.ToHeaders GetRoom where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AlexaForBusiness.GetRoom" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetRoom where
+  toJSON GetRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("RoomArn" Data..=) Prelude.<$> roomArn]
+      )
+
+instance Data.ToPath GetRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRoomResponse' smart constructor.
+data GetRoomResponse = GetRoomResponse'
+  { -- | The details of the room requested.
+    room :: Prelude.Maybe Room,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'room', 'getRoomResponse_room' - The details of the room requested.
+--
+-- 'httpStatus', 'getRoomResponse_httpStatus' - The response's http status code.
+newGetRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRoomResponse
+newGetRoomResponse pHttpStatus_ =
+  GetRoomResponse'
+    { room = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the room requested.
+getRoomResponse_room :: Lens.Lens' GetRoomResponse (Prelude.Maybe Room)
+getRoomResponse_room = Lens.lens (\GetRoomResponse' {room} -> room) (\s@GetRoomResponse' {} a -> s {room = a} :: GetRoomResponse)
+
+-- | The response's http status code.
+getRoomResponse_httpStatus :: Lens.Lens' GetRoomResponse Prelude.Int
+getRoomResponse_httpStatus = Lens.lens (\GetRoomResponse' {httpStatus} -> httpStatus) (\s@GetRoomResponse' {} a -> s {httpStatus = a} :: GetRoomResponse)
+
+instance Prelude.NFData GetRoomResponse where
+  rnf GetRoomResponse' {..} =
+    Prelude.rnf room
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetRoomSkillParameter.hs b/gen/Amazonka/AlexaBusiness/GetRoomSkillParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetRoomSkillParameter.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetRoomSkillParameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets room skill parameter details by room, skill, and parameter key ARN.
+module Amazonka.AlexaBusiness.GetRoomSkillParameter
+  ( -- * Creating a Request
+    GetRoomSkillParameter (..),
+    newGetRoomSkillParameter,
+
+    -- * Request Lenses
+    getRoomSkillParameter_roomArn,
+    getRoomSkillParameter_skillId,
+    getRoomSkillParameter_parameterKey,
+
+    -- * Destructuring the Response
+    GetRoomSkillParameterResponse (..),
+    newGetRoomSkillParameterResponse,
+
+    -- * Response Lenses
+    getRoomSkillParameterResponse_roomSkillParameter,
+    getRoomSkillParameterResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRoomSkillParameter' smart constructor.
+data GetRoomSkillParameter = GetRoomSkillParameter'
+  { -- | The ARN of the room from which to get the room skill parameter details.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the skill from which to get the room skill parameter details.
+    -- Required.
+    skillId :: Prelude.Text,
+    -- | The room skill parameter key for which to get details. Required.
+    parameterKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRoomSkillParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'getRoomSkillParameter_roomArn' - The ARN of the room from which to get the room skill parameter details.
+--
+-- 'skillId', 'getRoomSkillParameter_skillId' - The ARN of the skill from which to get the room skill parameter details.
+-- Required.
+--
+-- 'parameterKey', 'getRoomSkillParameter_parameterKey' - The room skill parameter key for which to get details. Required.
+newGetRoomSkillParameter ::
+  -- | 'skillId'
+  Prelude.Text ->
+  -- | 'parameterKey'
+  Prelude.Text ->
+  GetRoomSkillParameter
+newGetRoomSkillParameter pSkillId_ pParameterKey_ =
+  GetRoomSkillParameter'
+    { roomArn = Prelude.Nothing,
+      skillId = pSkillId_,
+      parameterKey = pParameterKey_
+    }
+
+-- | The ARN of the room from which to get the room skill parameter details.
+getRoomSkillParameter_roomArn :: Lens.Lens' GetRoomSkillParameter (Prelude.Maybe Prelude.Text)
+getRoomSkillParameter_roomArn = Lens.lens (\GetRoomSkillParameter' {roomArn} -> roomArn) (\s@GetRoomSkillParameter' {} a -> s {roomArn = a} :: GetRoomSkillParameter)
+
+-- | The ARN of the skill from which to get the room skill parameter details.
+-- Required.
+getRoomSkillParameter_skillId :: Lens.Lens' GetRoomSkillParameter Prelude.Text
+getRoomSkillParameter_skillId = Lens.lens (\GetRoomSkillParameter' {skillId} -> skillId) (\s@GetRoomSkillParameter' {} a -> s {skillId = a} :: GetRoomSkillParameter)
+
+-- | The room skill parameter key for which to get details. Required.
+getRoomSkillParameter_parameterKey :: Lens.Lens' GetRoomSkillParameter Prelude.Text
+getRoomSkillParameter_parameterKey = Lens.lens (\GetRoomSkillParameter' {parameterKey} -> parameterKey) (\s@GetRoomSkillParameter' {} a -> s {parameterKey = a} :: GetRoomSkillParameter)
+
+instance Core.AWSRequest GetRoomSkillParameter where
+  type
+    AWSResponse GetRoomSkillParameter =
+      GetRoomSkillParameterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRoomSkillParameterResponse'
+            Prelude.<$> (x Data..?> "RoomSkillParameter")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRoomSkillParameter where
+  hashWithSalt _salt GetRoomSkillParameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` skillId
+      `Prelude.hashWithSalt` parameterKey
+
+instance Prelude.NFData GetRoomSkillParameter where
+  rnf GetRoomSkillParameter' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf skillId
+      `Prelude.seq` Prelude.rnf parameterKey
+
+instance Data.ToHeaders GetRoomSkillParameter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetRoomSkillParameter" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetRoomSkillParameter where
+  toJSON GetRoomSkillParameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RoomArn" Data..=) Prelude.<$> roomArn,
+            Prelude.Just ("SkillId" Data..= skillId),
+            Prelude.Just ("ParameterKey" Data..= parameterKey)
+          ]
+      )
+
+instance Data.ToPath GetRoomSkillParameter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetRoomSkillParameter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRoomSkillParameterResponse' smart constructor.
+data GetRoomSkillParameterResponse = GetRoomSkillParameterResponse'
+  { -- | The details of the room skill parameter requested. Required.
+    roomSkillParameter :: Prelude.Maybe RoomSkillParameter,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRoomSkillParameterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomSkillParameter', 'getRoomSkillParameterResponse_roomSkillParameter' - The details of the room skill parameter requested. Required.
+--
+-- 'httpStatus', 'getRoomSkillParameterResponse_httpStatus' - The response's http status code.
+newGetRoomSkillParameterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRoomSkillParameterResponse
+newGetRoomSkillParameterResponse pHttpStatus_ =
+  GetRoomSkillParameterResponse'
+    { roomSkillParameter =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the room skill parameter requested. Required.
+getRoomSkillParameterResponse_roomSkillParameter :: Lens.Lens' GetRoomSkillParameterResponse (Prelude.Maybe RoomSkillParameter)
+getRoomSkillParameterResponse_roomSkillParameter = Lens.lens (\GetRoomSkillParameterResponse' {roomSkillParameter} -> roomSkillParameter) (\s@GetRoomSkillParameterResponse' {} a -> s {roomSkillParameter = a} :: GetRoomSkillParameterResponse)
+
+-- | The response's http status code.
+getRoomSkillParameterResponse_httpStatus :: Lens.Lens' GetRoomSkillParameterResponse Prelude.Int
+getRoomSkillParameterResponse_httpStatus = Lens.lens (\GetRoomSkillParameterResponse' {httpStatus} -> httpStatus) (\s@GetRoomSkillParameterResponse' {} a -> s {httpStatus = a} :: GetRoomSkillParameterResponse)
+
+instance Prelude.NFData GetRoomSkillParameterResponse where
+  rnf GetRoomSkillParameterResponse' {..} =
+    Prelude.rnf roomSkillParameter
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/GetSkillGroup.hs b/gen/Amazonka/AlexaBusiness/GetSkillGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/GetSkillGroup.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.GetSkillGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets skill group details by skill group ARN.
+module Amazonka.AlexaBusiness.GetSkillGroup
+  ( -- * Creating a Request
+    GetSkillGroup (..),
+    newGetSkillGroup,
+
+    -- * Request Lenses
+    getSkillGroup_skillGroupArn,
+
+    -- * Destructuring the Response
+    GetSkillGroupResponse (..),
+    newGetSkillGroupResponse,
+
+    -- * Response Lenses
+    getSkillGroupResponse_skillGroup,
+    getSkillGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSkillGroup' smart constructor.
+data GetSkillGroup = GetSkillGroup'
+  { -- | The ARN of the skill group for which to get details. Required.
+    skillGroupArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSkillGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillGroupArn', 'getSkillGroup_skillGroupArn' - The ARN of the skill group for which to get details. Required.
+newGetSkillGroup ::
+  GetSkillGroup
+newGetSkillGroup =
+  GetSkillGroup' {skillGroupArn = Prelude.Nothing}
+
+-- | The ARN of the skill group for which to get details. Required.
+getSkillGroup_skillGroupArn :: Lens.Lens' GetSkillGroup (Prelude.Maybe Prelude.Text)
+getSkillGroup_skillGroupArn = Lens.lens (\GetSkillGroup' {skillGroupArn} -> skillGroupArn) (\s@GetSkillGroup' {} a -> s {skillGroupArn = a} :: GetSkillGroup)
+
+instance Core.AWSRequest GetSkillGroup where
+  type
+    AWSResponse GetSkillGroup =
+      GetSkillGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSkillGroupResponse'
+            Prelude.<$> (x Data..?> "SkillGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSkillGroup where
+  hashWithSalt _salt GetSkillGroup' {..} =
+    _salt `Prelude.hashWithSalt` skillGroupArn
+
+instance Prelude.NFData GetSkillGroup where
+  rnf GetSkillGroup' {..} = Prelude.rnf skillGroupArn
+
+instance Data.ToHeaders GetSkillGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.GetSkillGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetSkillGroup where
+  toJSON GetSkillGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SkillGroupArn" Data..=)
+              Prelude.<$> skillGroupArn
+          ]
+      )
+
+instance Data.ToPath GetSkillGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSkillGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSkillGroupResponse' smart constructor.
+data GetSkillGroupResponse = GetSkillGroupResponse'
+  { -- | The details of the skill group requested. Required.
+    skillGroup :: Prelude.Maybe SkillGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSkillGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillGroup', 'getSkillGroupResponse_skillGroup' - The details of the skill group requested. Required.
+--
+-- 'httpStatus', 'getSkillGroupResponse_httpStatus' - The response's http status code.
+newGetSkillGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSkillGroupResponse
+newGetSkillGroupResponse pHttpStatus_ =
+  GetSkillGroupResponse'
+    { skillGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The details of the skill group requested. Required.
+getSkillGroupResponse_skillGroup :: Lens.Lens' GetSkillGroupResponse (Prelude.Maybe SkillGroup)
+getSkillGroupResponse_skillGroup = Lens.lens (\GetSkillGroupResponse' {skillGroup} -> skillGroup) (\s@GetSkillGroupResponse' {} a -> s {skillGroup = a} :: GetSkillGroupResponse)
+
+-- | The response's http status code.
+getSkillGroupResponse_httpStatus :: Lens.Lens' GetSkillGroupResponse Prelude.Int
+getSkillGroupResponse_httpStatus = Lens.lens (\GetSkillGroupResponse' {httpStatus} -> httpStatus) (\s@GetSkillGroupResponse' {} a -> s {httpStatus = a} :: GetSkillGroupResponse)
+
+instance Prelude.NFData GetSkillGroupResponse where
+  rnf GetSkillGroupResponse' {..} =
+    Prelude.rnf skillGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/Lens.hs b/gen/Amazonka/AlexaBusiness/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Lens.hs
@@ -0,0 +1,1179 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Lens
+  ( -- * Operations
+
+    -- ** ApproveSkill
+    approveSkill_skillId,
+    approveSkillResponse_httpStatus,
+
+    -- ** AssociateContactWithAddressBook
+    associateContactWithAddressBook_contactArn,
+    associateContactWithAddressBook_addressBookArn,
+    associateContactWithAddressBookResponse_httpStatus,
+
+    -- ** AssociateDeviceWithNetworkProfile
+    associateDeviceWithNetworkProfile_deviceArn,
+    associateDeviceWithNetworkProfile_networkProfileArn,
+    associateDeviceWithNetworkProfileResponse_httpStatus,
+
+    -- ** AssociateDeviceWithRoom
+    associateDeviceWithRoom_deviceArn,
+    associateDeviceWithRoom_roomArn,
+    associateDeviceWithRoomResponse_httpStatus,
+
+    -- ** AssociateSkillGroupWithRoom
+    associateSkillGroupWithRoom_roomArn,
+    associateSkillGroupWithRoom_skillGroupArn,
+    associateSkillGroupWithRoomResponse_httpStatus,
+
+    -- ** AssociateSkillWithSkillGroup
+    associateSkillWithSkillGroup_skillGroupArn,
+    associateSkillWithSkillGroup_skillId,
+    associateSkillWithSkillGroupResponse_httpStatus,
+
+    -- ** AssociateSkillWithUsers
+    associateSkillWithUsers_skillId,
+    associateSkillWithUsersResponse_httpStatus,
+
+    -- ** CreateAddressBook
+    createAddressBook_clientRequestToken,
+    createAddressBook_description,
+    createAddressBook_tags,
+    createAddressBook_name,
+    createAddressBookResponse_addressBookArn,
+    createAddressBookResponse_httpStatus,
+
+    -- ** CreateBusinessReportSchedule
+    createBusinessReportSchedule_clientRequestToken,
+    createBusinessReportSchedule_recurrence,
+    createBusinessReportSchedule_s3BucketName,
+    createBusinessReportSchedule_s3KeyPrefix,
+    createBusinessReportSchedule_scheduleName,
+    createBusinessReportSchedule_tags,
+    createBusinessReportSchedule_format,
+    createBusinessReportSchedule_contentRange,
+    createBusinessReportScheduleResponse_scheduleArn,
+    createBusinessReportScheduleResponse_httpStatus,
+
+    -- ** CreateConferenceProvider
+    createConferenceProvider_clientRequestToken,
+    createConferenceProvider_iPDialIn,
+    createConferenceProvider_pSTNDialIn,
+    createConferenceProvider_tags,
+    createConferenceProvider_conferenceProviderName,
+    createConferenceProvider_conferenceProviderType,
+    createConferenceProvider_meetingSetting,
+    createConferenceProviderResponse_conferenceProviderArn,
+    createConferenceProviderResponse_httpStatus,
+
+    -- ** CreateContact
+    createContact_clientRequestToken,
+    createContact_displayName,
+    createContact_lastName,
+    createContact_phoneNumber,
+    createContact_phoneNumbers,
+    createContact_sipAddresses,
+    createContact_tags,
+    createContact_firstName,
+    createContactResponse_contactArn,
+    createContactResponse_httpStatus,
+
+    -- ** CreateGatewayGroup
+    createGatewayGroup_description,
+    createGatewayGroup_tags,
+    createGatewayGroup_name,
+    createGatewayGroup_clientRequestToken,
+    createGatewayGroupResponse_gatewayGroupArn,
+    createGatewayGroupResponse_httpStatus,
+
+    -- ** CreateNetworkProfile
+    createNetworkProfile_certificateAuthorityArn,
+    createNetworkProfile_currentPassword,
+    createNetworkProfile_description,
+    createNetworkProfile_eapMethod,
+    createNetworkProfile_nextPassword,
+    createNetworkProfile_tags,
+    createNetworkProfile_trustAnchors,
+    createNetworkProfile_networkProfileName,
+    createNetworkProfile_ssid,
+    createNetworkProfile_securityType,
+    createNetworkProfile_clientRequestToken,
+    createNetworkProfileResponse_networkProfileArn,
+    createNetworkProfileResponse_httpStatus,
+
+    -- ** CreateProfile
+    createProfile_clientRequestToken,
+    createProfile_dataRetentionOptIn,
+    createProfile_locale,
+    createProfile_maxVolumeLimit,
+    createProfile_meetingRoomConfiguration,
+    createProfile_pSTNEnabled,
+    createProfile_setupModeDisabled,
+    createProfile_tags,
+    createProfile_profileName,
+    createProfile_timezone,
+    createProfile_address,
+    createProfile_distanceUnit,
+    createProfile_temperatureUnit,
+    createProfile_wakeWord,
+    createProfileResponse_profileArn,
+    createProfileResponse_httpStatus,
+
+    -- ** CreateRoom
+    createRoom_clientRequestToken,
+    createRoom_description,
+    createRoom_profileArn,
+    createRoom_providerCalendarId,
+    createRoom_tags,
+    createRoom_roomName,
+    createRoomResponse_roomArn,
+    createRoomResponse_httpStatus,
+
+    -- ** CreateSkillGroup
+    createSkillGroup_clientRequestToken,
+    createSkillGroup_description,
+    createSkillGroup_tags,
+    createSkillGroup_skillGroupName,
+    createSkillGroupResponse_skillGroupArn,
+    createSkillGroupResponse_httpStatus,
+
+    -- ** CreateUser
+    createUser_clientRequestToken,
+    createUser_email,
+    createUser_firstName,
+    createUser_lastName,
+    createUser_tags,
+    createUser_userId,
+    createUserResponse_userArn,
+    createUserResponse_httpStatus,
+
+    -- ** DeleteAddressBook
+    deleteAddressBook_addressBookArn,
+    deleteAddressBookResponse_httpStatus,
+
+    -- ** DeleteBusinessReportSchedule
+    deleteBusinessReportSchedule_scheduleArn,
+    deleteBusinessReportScheduleResponse_httpStatus,
+
+    -- ** DeleteConferenceProvider
+    deleteConferenceProvider_conferenceProviderArn,
+    deleteConferenceProviderResponse_httpStatus,
+
+    -- ** DeleteContact
+    deleteContact_contactArn,
+    deleteContactResponse_httpStatus,
+
+    -- ** DeleteDevice
+    deleteDevice_deviceArn,
+    deleteDeviceResponse_httpStatus,
+
+    -- ** DeleteDeviceUsageData
+    deleteDeviceUsageData_deviceArn,
+    deleteDeviceUsageData_deviceUsageType,
+    deleteDeviceUsageDataResponse_httpStatus,
+
+    -- ** DeleteGatewayGroup
+    deleteGatewayGroup_gatewayGroupArn,
+    deleteGatewayGroupResponse_httpStatus,
+
+    -- ** DeleteNetworkProfile
+    deleteNetworkProfile_networkProfileArn,
+    deleteNetworkProfileResponse_httpStatus,
+
+    -- ** DeleteProfile
+    deleteProfile_profileArn,
+    deleteProfileResponse_httpStatus,
+
+    -- ** DeleteRoom
+    deleteRoom_roomArn,
+    deleteRoomResponse_httpStatus,
+
+    -- ** DeleteRoomSkillParameter
+    deleteRoomSkillParameter_roomArn,
+    deleteRoomSkillParameter_skillId,
+    deleteRoomSkillParameter_parameterKey,
+    deleteRoomSkillParameterResponse_httpStatus,
+
+    -- ** DeleteSkillAuthorization
+    deleteSkillAuthorization_roomArn,
+    deleteSkillAuthorization_skillId,
+    deleteSkillAuthorizationResponse_httpStatus,
+
+    -- ** DeleteSkillGroup
+    deleteSkillGroup_skillGroupArn,
+    deleteSkillGroupResponse_httpStatus,
+
+    -- ** DeleteUser
+    deleteUser_userArn,
+    deleteUser_enrollmentId,
+    deleteUserResponse_httpStatus,
+
+    -- ** DisassociateContactFromAddressBook
+    disassociateContactFromAddressBook_contactArn,
+    disassociateContactFromAddressBook_addressBookArn,
+    disassociateContactFromAddressBookResponse_httpStatus,
+
+    -- ** DisassociateDeviceFromRoom
+    disassociateDeviceFromRoom_deviceArn,
+    disassociateDeviceFromRoomResponse_httpStatus,
+
+    -- ** DisassociateSkillFromSkillGroup
+    disassociateSkillFromSkillGroup_skillGroupArn,
+    disassociateSkillFromSkillGroup_skillId,
+    disassociateSkillFromSkillGroupResponse_httpStatus,
+
+    -- ** DisassociateSkillFromUsers
+    disassociateSkillFromUsers_skillId,
+    disassociateSkillFromUsersResponse_httpStatus,
+
+    -- ** DisassociateSkillGroupFromRoom
+    disassociateSkillGroupFromRoom_roomArn,
+    disassociateSkillGroupFromRoom_skillGroupArn,
+    disassociateSkillGroupFromRoomResponse_httpStatus,
+
+    -- ** ForgetSmartHomeAppliances
+    forgetSmartHomeAppliances_roomArn,
+    forgetSmartHomeAppliancesResponse_httpStatus,
+
+    -- ** GetAddressBook
+    getAddressBook_addressBookArn,
+    getAddressBookResponse_addressBook,
+    getAddressBookResponse_httpStatus,
+
+    -- ** GetConferencePreference
+    getConferencePreferenceResponse_preference,
+    getConferencePreferenceResponse_httpStatus,
+
+    -- ** GetConferenceProvider
+    getConferenceProvider_conferenceProviderArn,
+    getConferenceProviderResponse_conferenceProvider,
+    getConferenceProviderResponse_httpStatus,
+
+    -- ** GetContact
+    getContact_contactArn,
+    getContactResponse_contact,
+    getContactResponse_httpStatus,
+
+    -- ** GetDevice
+    getDevice_deviceArn,
+    getDeviceResponse_device,
+    getDeviceResponse_httpStatus,
+
+    -- ** GetGateway
+    getGateway_gatewayArn,
+    getGatewayResponse_gateway,
+    getGatewayResponse_httpStatus,
+
+    -- ** GetGatewayGroup
+    getGatewayGroup_gatewayGroupArn,
+    getGatewayGroupResponse_gatewayGroup,
+    getGatewayGroupResponse_httpStatus,
+
+    -- ** GetInvitationConfiguration
+    getInvitationConfigurationResponse_contactEmail,
+    getInvitationConfigurationResponse_organizationName,
+    getInvitationConfigurationResponse_privateSkillIds,
+    getInvitationConfigurationResponse_httpStatus,
+
+    -- ** GetNetworkProfile
+    getNetworkProfile_networkProfileArn,
+    getNetworkProfileResponse_networkProfile,
+    getNetworkProfileResponse_httpStatus,
+
+    -- ** GetProfile
+    getProfile_profileArn,
+    getProfileResponse_profile,
+    getProfileResponse_httpStatus,
+
+    -- ** GetRoom
+    getRoom_roomArn,
+    getRoomResponse_room,
+    getRoomResponse_httpStatus,
+
+    -- ** GetRoomSkillParameter
+    getRoomSkillParameter_roomArn,
+    getRoomSkillParameter_skillId,
+    getRoomSkillParameter_parameterKey,
+    getRoomSkillParameterResponse_roomSkillParameter,
+    getRoomSkillParameterResponse_httpStatus,
+
+    -- ** GetSkillGroup
+    getSkillGroup_skillGroupArn,
+    getSkillGroupResponse_skillGroup,
+    getSkillGroupResponse_httpStatus,
+
+    -- ** ListBusinessReportSchedules
+    listBusinessReportSchedules_maxResults,
+    listBusinessReportSchedules_nextToken,
+    listBusinessReportSchedulesResponse_businessReportSchedules,
+    listBusinessReportSchedulesResponse_nextToken,
+    listBusinessReportSchedulesResponse_httpStatus,
+
+    -- ** ListConferenceProviders
+    listConferenceProviders_maxResults,
+    listConferenceProviders_nextToken,
+    listConferenceProvidersResponse_conferenceProviders,
+    listConferenceProvidersResponse_nextToken,
+    listConferenceProvidersResponse_httpStatus,
+
+    -- ** ListDeviceEvents
+    listDeviceEvents_eventType,
+    listDeviceEvents_maxResults,
+    listDeviceEvents_nextToken,
+    listDeviceEvents_deviceArn,
+    listDeviceEventsResponse_deviceEvents,
+    listDeviceEventsResponse_nextToken,
+    listDeviceEventsResponse_httpStatus,
+
+    -- ** ListGatewayGroups
+    listGatewayGroups_maxResults,
+    listGatewayGroups_nextToken,
+    listGatewayGroupsResponse_gatewayGroups,
+    listGatewayGroupsResponse_nextToken,
+    listGatewayGroupsResponse_httpStatus,
+
+    -- ** ListGateways
+    listGateways_gatewayGroupArn,
+    listGateways_maxResults,
+    listGateways_nextToken,
+    listGatewaysResponse_gateways,
+    listGatewaysResponse_nextToken,
+    listGatewaysResponse_httpStatus,
+
+    -- ** ListSkills
+    listSkills_enablementType,
+    listSkills_maxResults,
+    listSkills_nextToken,
+    listSkills_skillGroupArn,
+    listSkills_skillType,
+    listSkillsResponse_nextToken,
+    listSkillsResponse_skillSummaries,
+    listSkillsResponse_httpStatus,
+
+    -- ** ListSkillsStoreCategories
+    listSkillsStoreCategories_maxResults,
+    listSkillsStoreCategories_nextToken,
+    listSkillsStoreCategoriesResponse_categoryList,
+    listSkillsStoreCategoriesResponse_nextToken,
+    listSkillsStoreCategoriesResponse_httpStatus,
+
+    -- ** ListSkillsStoreSkillsByCategory
+    listSkillsStoreSkillsByCategory_maxResults,
+    listSkillsStoreSkillsByCategory_nextToken,
+    listSkillsStoreSkillsByCategory_categoryId,
+    listSkillsStoreSkillsByCategoryResponse_nextToken,
+    listSkillsStoreSkillsByCategoryResponse_skillsStoreSkills,
+    listSkillsStoreSkillsByCategoryResponse_httpStatus,
+
+    -- ** ListSmartHomeAppliances
+    listSmartHomeAppliances_maxResults,
+    listSmartHomeAppliances_nextToken,
+    listSmartHomeAppliances_roomArn,
+    listSmartHomeAppliancesResponse_nextToken,
+    listSmartHomeAppliancesResponse_smartHomeAppliances,
+    listSmartHomeAppliancesResponse_httpStatus,
+
+    -- ** ListTags
+    listTags_maxResults,
+    listTags_nextToken,
+    listTags_arn,
+    listTagsResponse_nextToken,
+    listTagsResponse_tags,
+    listTagsResponse_httpStatus,
+
+    -- ** PutConferencePreference
+    putConferencePreference_conferencePreference,
+    putConferencePreferenceResponse_httpStatus,
+
+    -- ** PutInvitationConfiguration
+    putInvitationConfiguration_contactEmail,
+    putInvitationConfiguration_privateSkillIds,
+    putInvitationConfiguration_organizationName,
+    putInvitationConfigurationResponse_httpStatus,
+
+    -- ** PutRoomSkillParameter
+    putRoomSkillParameter_roomArn,
+    putRoomSkillParameter_skillId,
+    putRoomSkillParameter_roomSkillParameter,
+    putRoomSkillParameterResponse_httpStatus,
+
+    -- ** PutSkillAuthorization
+    putSkillAuthorization_roomArn,
+    putSkillAuthorization_authorizationResult,
+    putSkillAuthorization_skillId,
+    putSkillAuthorizationResponse_httpStatus,
+
+    -- ** RegisterAVSDevice
+    registerAVSDevice_deviceSerialNumber,
+    registerAVSDevice_roomArn,
+    registerAVSDevice_tags,
+    registerAVSDevice_clientId,
+    registerAVSDevice_userCode,
+    registerAVSDevice_productId,
+    registerAVSDevice_amazonId,
+    registerAVSDeviceResponse_deviceArn,
+    registerAVSDeviceResponse_httpStatus,
+
+    -- ** RejectSkill
+    rejectSkill_skillId,
+    rejectSkillResponse_httpStatus,
+
+    -- ** ResolveRoom
+    resolveRoom_userId,
+    resolveRoom_skillId,
+    resolveRoomResponse_roomArn,
+    resolveRoomResponse_roomName,
+    resolveRoomResponse_roomSkillParameters,
+    resolveRoomResponse_httpStatus,
+
+    -- ** RevokeInvitation
+    revokeInvitation_enrollmentId,
+    revokeInvitation_userArn,
+    revokeInvitationResponse_httpStatus,
+
+    -- ** SearchAddressBooks
+    searchAddressBooks_filters,
+    searchAddressBooks_maxResults,
+    searchAddressBooks_nextToken,
+    searchAddressBooks_sortCriteria,
+    searchAddressBooksResponse_addressBooks,
+    searchAddressBooksResponse_nextToken,
+    searchAddressBooksResponse_totalCount,
+    searchAddressBooksResponse_httpStatus,
+
+    -- ** SearchContacts
+    searchContacts_filters,
+    searchContacts_maxResults,
+    searchContacts_nextToken,
+    searchContacts_sortCriteria,
+    searchContactsResponse_contacts,
+    searchContactsResponse_nextToken,
+    searchContactsResponse_totalCount,
+    searchContactsResponse_httpStatus,
+
+    -- ** SearchDevices
+    searchDevices_filters,
+    searchDevices_maxResults,
+    searchDevices_nextToken,
+    searchDevices_sortCriteria,
+    searchDevicesResponse_devices,
+    searchDevicesResponse_nextToken,
+    searchDevicesResponse_totalCount,
+    searchDevicesResponse_httpStatus,
+
+    -- ** SearchNetworkProfiles
+    searchNetworkProfiles_filters,
+    searchNetworkProfiles_maxResults,
+    searchNetworkProfiles_nextToken,
+    searchNetworkProfiles_sortCriteria,
+    searchNetworkProfilesResponse_networkProfiles,
+    searchNetworkProfilesResponse_nextToken,
+    searchNetworkProfilesResponse_totalCount,
+    searchNetworkProfilesResponse_httpStatus,
+
+    -- ** SearchProfiles
+    searchProfiles_filters,
+    searchProfiles_maxResults,
+    searchProfiles_nextToken,
+    searchProfiles_sortCriteria,
+    searchProfilesResponse_nextToken,
+    searchProfilesResponse_profiles,
+    searchProfilesResponse_totalCount,
+    searchProfilesResponse_httpStatus,
+
+    -- ** SearchRooms
+    searchRooms_filters,
+    searchRooms_maxResults,
+    searchRooms_nextToken,
+    searchRooms_sortCriteria,
+    searchRoomsResponse_nextToken,
+    searchRoomsResponse_rooms,
+    searchRoomsResponse_totalCount,
+    searchRoomsResponse_httpStatus,
+
+    -- ** SearchSkillGroups
+    searchSkillGroups_filters,
+    searchSkillGroups_maxResults,
+    searchSkillGroups_nextToken,
+    searchSkillGroups_sortCriteria,
+    searchSkillGroupsResponse_nextToken,
+    searchSkillGroupsResponse_skillGroups,
+    searchSkillGroupsResponse_totalCount,
+    searchSkillGroupsResponse_httpStatus,
+
+    -- ** SearchUsers
+    searchUsers_filters,
+    searchUsers_maxResults,
+    searchUsers_nextToken,
+    searchUsers_sortCriteria,
+    searchUsersResponse_nextToken,
+    searchUsersResponse_totalCount,
+    searchUsersResponse_users,
+    searchUsersResponse_httpStatus,
+
+    -- ** SendAnnouncement
+    sendAnnouncement_timeToLiveInSeconds,
+    sendAnnouncement_roomFilters,
+    sendAnnouncement_content,
+    sendAnnouncement_clientRequestToken,
+    sendAnnouncementResponse_announcementArn,
+    sendAnnouncementResponse_httpStatus,
+
+    -- ** SendInvitation
+    sendInvitation_userArn,
+    sendInvitationResponse_httpStatus,
+
+    -- ** StartDeviceSync
+    startDeviceSync_deviceArn,
+    startDeviceSync_roomArn,
+    startDeviceSync_features,
+    startDeviceSyncResponse_httpStatus,
+
+    -- ** StartSmartHomeApplianceDiscovery
+    startSmartHomeApplianceDiscovery_roomArn,
+    startSmartHomeApplianceDiscoveryResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_arn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_arn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAddressBook
+    updateAddressBook_description,
+    updateAddressBook_name,
+    updateAddressBook_addressBookArn,
+    updateAddressBookResponse_httpStatus,
+
+    -- ** UpdateBusinessReportSchedule
+    updateBusinessReportSchedule_format,
+    updateBusinessReportSchedule_recurrence,
+    updateBusinessReportSchedule_s3BucketName,
+    updateBusinessReportSchedule_s3KeyPrefix,
+    updateBusinessReportSchedule_scheduleName,
+    updateBusinessReportSchedule_scheduleArn,
+    updateBusinessReportScheduleResponse_httpStatus,
+
+    -- ** UpdateConferenceProvider
+    updateConferenceProvider_iPDialIn,
+    updateConferenceProvider_pSTNDialIn,
+    updateConferenceProvider_conferenceProviderArn,
+    updateConferenceProvider_conferenceProviderType,
+    updateConferenceProvider_meetingSetting,
+    updateConferenceProviderResponse_httpStatus,
+
+    -- ** UpdateContact
+    updateContact_displayName,
+    updateContact_firstName,
+    updateContact_lastName,
+    updateContact_phoneNumber,
+    updateContact_phoneNumbers,
+    updateContact_sipAddresses,
+    updateContact_contactArn,
+    updateContactResponse_httpStatus,
+
+    -- ** UpdateDevice
+    updateDevice_deviceArn,
+    updateDevice_deviceName,
+    updateDeviceResponse_httpStatus,
+
+    -- ** UpdateGateway
+    updateGateway_description,
+    updateGateway_name,
+    updateGateway_softwareVersion,
+    updateGateway_gatewayArn,
+    updateGatewayResponse_httpStatus,
+
+    -- ** UpdateGatewayGroup
+    updateGatewayGroup_description,
+    updateGatewayGroup_name,
+    updateGatewayGroup_gatewayGroupArn,
+    updateGatewayGroupResponse_httpStatus,
+
+    -- ** UpdateNetworkProfile
+    updateNetworkProfile_certificateAuthorityArn,
+    updateNetworkProfile_currentPassword,
+    updateNetworkProfile_description,
+    updateNetworkProfile_networkProfileName,
+    updateNetworkProfile_nextPassword,
+    updateNetworkProfile_trustAnchors,
+    updateNetworkProfile_networkProfileArn,
+    updateNetworkProfileResponse_httpStatus,
+
+    -- ** UpdateProfile
+    updateProfile_address,
+    updateProfile_dataRetentionOptIn,
+    updateProfile_distanceUnit,
+    updateProfile_isDefault,
+    updateProfile_locale,
+    updateProfile_maxVolumeLimit,
+    updateProfile_meetingRoomConfiguration,
+    updateProfile_pSTNEnabled,
+    updateProfile_profileArn,
+    updateProfile_profileName,
+    updateProfile_setupModeDisabled,
+    updateProfile_temperatureUnit,
+    updateProfile_timezone,
+    updateProfile_wakeWord,
+    updateProfileResponse_httpStatus,
+
+    -- ** UpdateRoom
+    updateRoom_description,
+    updateRoom_profileArn,
+    updateRoom_providerCalendarId,
+    updateRoom_roomArn,
+    updateRoom_roomName,
+    updateRoomResponse_httpStatus,
+
+    -- ** UpdateSkillGroup
+    updateSkillGroup_description,
+    updateSkillGroup_skillGroupArn,
+    updateSkillGroup_skillGroupName,
+    updateSkillGroupResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AddressBook
+    addressBook_addressBookArn,
+    addressBook_description,
+    addressBook_name,
+
+    -- ** AddressBookData
+    addressBookData_addressBookArn,
+    addressBookData_description,
+    addressBookData_name,
+
+    -- ** Audio
+    audio_locale,
+    audio_location,
+
+    -- ** BusinessReport
+    businessReport_deliveryTime,
+    businessReport_downloadUrl,
+    businessReport_failureCode,
+    businessReport_s3Location,
+    businessReport_status,
+
+    -- ** BusinessReportContentRange
+    businessReportContentRange_interval,
+
+    -- ** BusinessReportRecurrence
+    businessReportRecurrence_startDate,
+
+    -- ** BusinessReportS3Location
+    businessReportS3Location_bucketName,
+    businessReportS3Location_path,
+
+    -- ** BusinessReportSchedule
+    businessReportSchedule_contentRange,
+    businessReportSchedule_format,
+    businessReportSchedule_lastBusinessReport,
+    businessReportSchedule_recurrence,
+    businessReportSchedule_s3BucketName,
+    businessReportSchedule_s3KeyPrefix,
+    businessReportSchedule_scheduleArn,
+    businessReportSchedule_scheduleName,
+
+    -- ** Category
+    category_categoryId,
+    category_categoryName,
+
+    -- ** ConferencePreference
+    conferencePreference_defaultConferenceProviderArn,
+
+    -- ** ConferenceProvider
+    conferenceProvider_arn,
+    conferenceProvider_iPDialIn,
+    conferenceProvider_meetingSetting,
+    conferenceProvider_name,
+    conferenceProvider_pSTNDialIn,
+    conferenceProvider_type,
+
+    -- ** Contact
+    contact_contactArn,
+    contact_displayName,
+    contact_firstName,
+    contact_lastName,
+    contact_phoneNumber,
+    contact_phoneNumbers,
+    contact_sipAddresses,
+
+    -- ** ContactData
+    contactData_contactArn,
+    contactData_displayName,
+    contactData_firstName,
+    contactData_lastName,
+    contactData_phoneNumber,
+    contactData_phoneNumbers,
+    contactData_sipAddresses,
+
+    -- ** Content
+    content_audioList,
+    content_ssmlList,
+    content_textList,
+
+    -- ** CreateEndOfMeetingReminder
+    createEndOfMeetingReminder_reminderAtMinutes,
+    createEndOfMeetingReminder_reminderType,
+    createEndOfMeetingReminder_enabled,
+
+    -- ** CreateInstantBooking
+    createInstantBooking_durationInMinutes,
+    createInstantBooking_enabled,
+
+    -- ** CreateMeetingRoomConfiguration
+    createMeetingRoomConfiguration_endOfMeetingReminder,
+    createMeetingRoomConfiguration_instantBooking,
+    createMeetingRoomConfiguration_requireCheckIn,
+    createMeetingRoomConfiguration_roomUtilizationMetricsEnabled,
+
+    -- ** CreateRequireCheckIn
+    createRequireCheckIn_releaseAfterMinutes,
+    createRequireCheckIn_enabled,
+
+    -- ** DeveloperInfo
+    developerInfo_developerName,
+    developerInfo_email,
+    developerInfo_privacyPolicy,
+    developerInfo_url,
+
+    -- ** Device
+    device_deviceArn,
+    device_deviceName,
+    device_deviceSerialNumber,
+    device_deviceStatus,
+    device_deviceStatusInfo,
+    device_deviceType,
+    device_macAddress,
+    device_networkProfileInfo,
+    device_roomArn,
+    device_softwareVersion,
+
+    -- ** DeviceData
+    deviceData_createdTime,
+    deviceData_deviceArn,
+    deviceData_deviceName,
+    deviceData_deviceSerialNumber,
+    deviceData_deviceStatus,
+    deviceData_deviceStatusInfo,
+    deviceData_deviceType,
+    deviceData_macAddress,
+    deviceData_networkProfileArn,
+    deviceData_networkProfileName,
+    deviceData_roomArn,
+    deviceData_roomName,
+    deviceData_softwareVersion,
+
+    -- ** DeviceEvent
+    deviceEvent_timestamp,
+    deviceEvent_type,
+    deviceEvent_value,
+
+    -- ** DeviceNetworkProfileInfo
+    deviceNetworkProfileInfo_certificateArn,
+    deviceNetworkProfileInfo_certificateExpirationTime,
+    deviceNetworkProfileInfo_networkProfileArn,
+
+    -- ** DeviceStatusDetail
+    deviceStatusDetail_code,
+    deviceStatusDetail_feature,
+
+    -- ** DeviceStatusInfo
+    deviceStatusInfo_connectionStatus,
+    deviceStatusInfo_connectionStatusUpdatedTime,
+    deviceStatusInfo_deviceStatusDetails,
+
+    -- ** EndOfMeetingReminder
+    endOfMeetingReminder_enabled,
+    endOfMeetingReminder_reminderAtMinutes,
+    endOfMeetingReminder_reminderType,
+
+    -- ** Filter
+    filter_key,
+    filter_values,
+
+    -- ** Gateway
+    gateway_arn,
+    gateway_description,
+    gateway_gatewayGroupArn,
+    gateway_name,
+    gateway_softwareVersion,
+
+    -- ** GatewayGroup
+    gatewayGroup_arn,
+    gatewayGroup_description,
+    gatewayGroup_name,
+
+    -- ** GatewayGroupSummary
+    gatewayGroupSummary_arn,
+    gatewayGroupSummary_description,
+    gatewayGroupSummary_name,
+
+    -- ** GatewaySummary
+    gatewaySummary_arn,
+    gatewaySummary_description,
+    gatewaySummary_gatewayGroupArn,
+    gatewaySummary_name,
+    gatewaySummary_softwareVersion,
+
+    -- ** IPDialIn
+    iPDialIn_endpoint,
+    iPDialIn_commsProtocol,
+
+    -- ** InstantBooking
+    instantBooking_durationInMinutes,
+    instantBooking_enabled,
+
+    -- ** MeetingRoomConfiguration
+    meetingRoomConfiguration_endOfMeetingReminder,
+    meetingRoomConfiguration_instantBooking,
+    meetingRoomConfiguration_requireCheckIn,
+    meetingRoomConfiguration_roomUtilizationMetricsEnabled,
+
+    -- ** MeetingSetting
+    meetingSetting_requirePin,
+
+    -- ** NetworkProfile
+    networkProfile_certificateAuthorityArn,
+    networkProfile_currentPassword,
+    networkProfile_description,
+    networkProfile_eapMethod,
+    networkProfile_networkProfileArn,
+    networkProfile_networkProfileName,
+    networkProfile_nextPassword,
+    networkProfile_securityType,
+    networkProfile_ssid,
+    networkProfile_trustAnchors,
+
+    -- ** NetworkProfileData
+    networkProfileData_certificateAuthorityArn,
+    networkProfileData_description,
+    networkProfileData_eapMethod,
+    networkProfileData_networkProfileArn,
+    networkProfileData_networkProfileName,
+    networkProfileData_securityType,
+    networkProfileData_ssid,
+
+    -- ** PSTNDialIn
+    pSTNDialIn_countryCode,
+    pSTNDialIn_phoneNumber,
+    pSTNDialIn_oneClickIdDelay,
+    pSTNDialIn_oneClickPinDelay,
+
+    -- ** PhoneNumber
+    phoneNumber_number,
+    phoneNumber_type,
+
+    -- ** Profile
+    profile_address,
+    profile_addressBookArn,
+    profile_dataRetentionOptIn,
+    profile_distanceUnit,
+    profile_isDefault,
+    profile_locale,
+    profile_maxVolumeLimit,
+    profile_meetingRoomConfiguration,
+    profile_pSTNEnabled,
+    profile_profileArn,
+    profile_profileName,
+    profile_setupModeDisabled,
+    profile_temperatureUnit,
+    profile_timezone,
+    profile_wakeWord,
+
+    -- ** ProfileData
+    profileData_address,
+    profileData_distanceUnit,
+    profileData_isDefault,
+    profileData_locale,
+    profileData_profileArn,
+    profileData_profileName,
+    profileData_temperatureUnit,
+    profileData_timezone,
+    profileData_wakeWord,
+
+    -- ** RequireCheckIn
+    requireCheckIn_enabled,
+    requireCheckIn_releaseAfterMinutes,
+
+    -- ** Room
+    room_description,
+    room_profileArn,
+    room_providerCalendarId,
+    room_roomArn,
+    room_roomName,
+
+    -- ** RoomData
+    roomData_description,
+    roomData_profileArn,
+    roomData_profileName,
+    roomData_providerCalendarId,
+    roomData_roomArn,
+    roomData_roomName,
+
+    -- ** RoomSkillParameter
+    roomSkillParameter_parameterKey,
+    roomSkillParameter_parameterValue,
+
+    -- ** SipAddress
+    sipAddress_uri,
+    sipAddress_type,
+
+    -- ** SkillDetails
+    skillDetails_bulletPoints,
+    skillDetails_developerInfo,
+    skillDetails_endUserLicenseAgreement,
+    skillDetails_genericKeywords,
+    skillDetails_invocationPhrase,
+    skillDetails_newInThisVersionBulletPoints,
+    skillDetails_productDescription,
+    skillDetails_releaseDate,
+    skillDetails_reviews,
+    skillDetails_skillTypes,
+
+    -- ** SkillGroup
+    skillGroup_description,
+    skillGroup_skillGroupArn,
+    skillGroup_skillGroupName,
+
+    -- ** SkillGroupData
+    skillGroupData_description,
+    skillGroupData_skillGroupArn,
+    skillGroupData_skillGroupName,
+
+    -- ** SkillSummary
+    skillSummary_enablementType,
+    skillSummary_skillId,
+    skillSummary_skillName,
+    skillSummary_skillType,
+    skillSummary_supportsLinking,
+
+    -- ** SkillsStoreSkill
+    skillsStoreSkill_iconUrl,
+    skillsStoreSkill_sampleUtterances,
+    skillsStoreSkill_shortDescription,
+    skillsStoreSkill_skillDetails,
+    skillsStoreSkill_skillId,
+    skillsStoreSkill_skillName,
+    skillsStoreSkill_supportsLinking,
+
+    -- ** SmartHomeAppliance
+    smartHomeAppliance_description,
+    smartHomeAppliance_friendlyName,
+    smartHomeAppliance_manufacturerName,
+
+    -- ** Sort
+    sort_key,
+    sort_value,
+
+    -- ** Ssml
+    ssml_locale,
+    ssml_value,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TextMessage
+    textMessage_locale,
+    textMessage_value,
+
+    -- ** UpdateEndOfMeetingReminder
+    updateEndOfMeetingReminder_enabled,
+    updateEndOfMeetingReminder_reminderAtMinutes,
+    updateEndOfMeetingReminder_reminderType,
+
+    -- ** UpdateInstantBooking
+    updateInstantBooking_durationInMinutes,
+    updateInstantBooking_enabled,
+
+    -- ** UpdateMeetingRoomConfiguration
+    updateMeetingRoomConfiguration_endOfMeetingReminder,
+    updateMeetingRoomConfiguration_instantBooking,
+    updateMeetingRoomConfiguration_requireCheckIn,
+    updateMeetingRoomConfiguration_roomUtilizationMetricsEnabled,
+
+    -- ** UpdateRequireCheckIn
+    updateRequireCheckIn_enabled,
+    updateRequireCheckIn_releaseAfterMinutes,
+
+    -- ** UserData
+    userData_email,
+    userData_enrollmentId,
+    userData_enrollmentStatus,
+    userData_firstName,
+    userData_lastName,
+    userData_userArn,
+  )
+where
+
+import Amazonka.AlexaBusiness.ApproveSkill
+import Amazonka.AlexaBusiness.AssociateContactWithAddressBook
+import Amazonka.AlexaBusiness.AssociateDeviceWithNetworkProfile
+import Amazonka.AlexaBusiness.AssociateDeviceWithRoom
+import Amazonka.AlexaBusiness.AssociateSkillGroupWithRoom
+import Amazonka.AlexaBusiness.AssociateSkillWithSkillGroup
+import Amazonka.AlexaBusiness.AssociateSkillWithUsers
+import Amazonka.AlexaBusiness.CreateAddressBook
+import Amazonka.AlexaBusiness.CreateBusinessReportSchedule
+import Amazonka.AlexaBusiness.CreateConferenceProvider
+import Amazonka.AlexaBusiness.CreateContact
+import Amazonka.AlexaBusiness.CreateGatewayGroup
+import Amazonka.AlexaBusiness.CreateNetworkProfile
+import Amazonka.AlexaBusiness.CreateProfile
+import Amazonka.AlexaBusiness.CreateRoom
+import Amazonka.AlexaBusiness.CreateSkillGroup
+import Amazonka.AlexaBusiness.CreateUser
+import Amazonka.AlexaBusiness.DeleteAddressBook
+import Amazonka.AlexaBusiness.DeleteBusinessReportSchedule
+import Amazonka.AlexaBusiness.DeleteConferenceProvider
+import Amazonka.AlexaBusiness.DeleteContact
+import Amazonka.AlexaBusiness.DeleteDevice
+import Amazonka.AlexaBusiness.DeleteDeviceUsageData
+import Amazonka.AlexaBusiness.DeleteGatewayGroup
+import Amazonka.AlexaBusiness.DeleteNetworkProfile
+import Amazonka.AlexaBusiness.DeleteProfile
+import Amazonka.AlexaBusiness.DeleteRoom
+import Amazonka.AlexaBusiness.DeleteRoomSkillParameter
+import Amazonka.AlexaBusiness.DeleteSkillAuthorization
+import Amazonka.AlexaBusiness.DeleteSkillGroup
+import Amazonka.AlexaBusiness.DeleteUser
+import Amazonka.AlexaBusiness.DisassociateContactFromAddressBook
+import Amazonka.AlexaBusiness.DisassociateDeviceFromRoom
+import Amazonka.AlexaBusiness.DisassociateSkillFromSkillGroup
+import Amazonka.AlexaBusiness.DisassociateSkillFromUsers
+import Amazonka.AlexaBusiness.DisassociateSkillGroupFromRoom
+import Amazonka.AlexaBusiness.ForgetSmartHomeAppliances
+import Amazonka.AlexaBusiness.GetAddressBook
+import Amazonka.AlexaBusiness.GetConferencePreference
+import Amazonka.AlexaBusiness.GetConferenceProvider
+import Amazonka.AlexaBusiness.GetContact
+import Amazonka.AlexaBusiness.GetDevice
+import Amazonka.AlexaBusiness.GetGateway
+import Amazonka.AlexaBusiness.GetGatewayGroup
+import Amazonka.AlexaBusiness.GetInvitationConfiguration
+import Amazonka.AlexaBusiness.GetNetworkProfile
+import Amazonka.AlexaBusiness.GetProfile
+import Amazonka.AlexaBusiness.GetRoom
+import Amazonka.AlexaBusiness.GetRoomSkillParameter
+import Amazonka.AlexaBusiness.GetSkillGroup
+import Amazonka.AlexaBusiness.ListBusinessReportSchedules
+import Amazonka.AlexaBusiness.ListConferenceProviders
+import Amazonka.AlexaBusiness.ListDeviceEvents
+import Amazonka.AlexaBusiness.ListGatewayGroups
+import Amazonka.AlexaBusiness.ListGateways
+import Amazonka.AlexaBusiness.ListSkills
+import Amazonka.AlexaBusiness.ListSkillsStoreCategories
+import Amazonka.AlexaBusiness.ListSkillsStoreSkillsByCategory
+import Amazonka.AlexaBusiness.ListSmartHomeAppliances
+import Amazonka.AlexaBusiness.ListTags
+import Amazonka.AlexaBusiness.PutConferencePreference
+import Amazonka.AlexaBusiness.PutInvitationConfiguration
+import Amazonka.AlexaBusiness.PutRoomSkillParameter
+import Amazonka.AlexaBusiness.PutSkillAuthorization
+import Amazonka.AlexaBusiness.RegisterAVSDevice
+import Amazonka.AlexaBusiness.RejectSkill
+import Amazonka.AlexaBusiness.ResolveRoom
+import Amazonka.AlexaBusiness.RevokeInvitation
+import Amazonka.AlexaBusiness.SearchAddressBooks
+import Amazonka.AlexaBusiness.SearchContacts
+import Amazonka.AlexaBusiness.SearchDevices
+import Amazonka.AlexaBusiness.SearchNetworkProfiles
+import Amazonka.AlexaBusiness.SearchProfiles
+import Amazonka.AlexaBusiness.SearchRooms
+import Amazonka.AlexaBusiness.SearchSkillGroups
+import Amazonka.AlexaBusiness.SearchUsers
+import Amazonka.AlexaBusiness.SendAnnouncement
+import Amazonka.AlexaBusiness.SendInvitation
+import Amazonka.AlexaBusiness.StartDeviceSync
+import Amazonka.AlexaBusiness.StartSmartHomeApplianceDiscovery
+import Amazonka.AlexaBusiness.TagResource
+import Amazonka.AlexaBusiness.Types.AddressBook
+import Amazonka.AlexaBusiness.Types.AddressBookData
+import Amazonka.AlexaBusiness.Types.Audio
+import Amazonka.AlexaBusiness.Types.BusinessReport
+import Amazonka.AlexaBusiness.Types.BusinessReportContentRange
+import Amazonka.AlexaBusiness.Types.BusinessReportRecurrence
+import Amazonka.AlexaBusiness.Types.BusinessReportS3Location
+import Amazonka.AlexaBusiness.Types.BusinessReportSchedule
+import Amazonka.AlexaBusiness.Types.Category
+import Amazonka.AlexaBusiness.Types.ConferencePreference
+import Amazonka.AlexaBusiness.Types.ConferenceProvider
+import Amazonka.AlexaBusiness.Types.Contact
+import Amazonka.AlexaBusiness.Types.ContactData
+import Amazonka.AlexaBusiness.Types.Content
+import Amazonka.AlexaBusiness.Types.CreateEndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.CreateInstantBooking
+import Amazonka.AlexaBusiness.Types.CreateMeetingRoomConfiguration
+import Amazonka.AlexaBusiness.Types.CreateRequireCheckIn
+import Amazonka.AlexaBusiness.Types.DeveloperInfo
+import Amazonka.AlexaBusiness.Types.Device
+import Amazonka.AlexaBusiness.Types.DeviceData
+import Amazonka.AlexaBusiness.Types.DeviceEvent
+import Amazonka.AlexaBusiness.Types.DeviceNetworkProfileInfo
+import Amazonka.AlexaBusiness.Types.DeviceStatusDetail
+import Amazonka.AlexaBusiness.Types.DeviceStatusInfo
+import Amazonka.AlexaBusiness.Types.EndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.Filter
+import Amazonka.AlexaBusiness.Types.Gateway
+import Amazonka.AlexaBusiness.Types.GatewayGroup
+import Amazonka.AlexaBusiness.Types.GatewayGroupSummary
+import Amazonka.AlexaBusiness.Types.GatewaySummary
+import Amazonka.AlexaBusiness.Types.IPDialIn
+import Amazonka.AlexaBusiness.Types.InstantBooking
+import Amazonka.AlexaBusiness.Types.MeetingRoomConfiguration
+import Amazonka.AlexaBusiness.Types.MeetingSetting
+import Amazonka.AlexaBusiness.Types.NetworkProfile
+import Amazonka.AlexaBusiness.Types.NetworkProfileData
+import Amazonka.AlexaBusiness.Types.PSTNDialIn
+import Amazonka.AlexaBusiness.Types.PhoneNumber
+import Amazonka.AlexaBusiness.Types.Profile
+import Amazonka.AlexaBusiness.Types.ProfileData
+import Amazonka.AlexaBusiness.Types.RequireCheckIn
+import Amazonka.AlexaBusiness.Types.Room
+import Amazonka.AlexaBusiness.Types.RoomData
+import Amazonka.AlexaBusiness.Types.RoomSkillParameter
+import Amazonka.AlexaBusiness.Types.SipAddress
+import Amazonka.AlexaBusiness.Types.SkillDetails
+import Amazonka.AlexaBusiness.Types.SkillGroup
+import Amazonka.AlexaBusiness.Types.SkillGroupData
+import Amazonka.AlexaBusiness.Types.SkillSummary
+import Amazonka.AlexaBusiness.Types.SkillsStoreSkill
+import Amazonka.AlexaBusiness.Types.SmartHomeAppliance
+import Amazonka.AlexaBusiness.Types.Sort
+import Amazonka.AlexaBusiness.Types.Ssml
+import Amazonka.AlexaBusiness.Types.Tag
+import Amazonka.AlexaBusiness.Types.TextMessage
+import Amazonka.AlexaBusiness.Types.UpdateEndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.UpdateInstantBooking
+import Amazonka.AlexaBusiness.Types.UpdateMeetingRoomConfiguration
+import Amazonka.AlexaBusiness.Types.UpdateRequireCheckIn
+import Amazonka.AlexaBusiness.Types.UserData
+import Amazonka.AlexaBusiness.UntagResource
+import Amazonka.AlexaBusiness.UpdateAddressBook
+import Amazonka.AlexaBusiness.UpdateBusinessReportSchedule
+import Amazonka.AlexaBusiness.UpdateConferenceProvider
+import Amazonka.AlexaBusiness.UpdateContact
+import Amazonka.AlexaBusiness.UpdateDevice
+import Amazonka.AlexaBusiness.UpdateGateway
+import Amazonka.AlexaBusiness.UpdateGatewayGroup
+import Amazonka.AlexaBusiness.UpdateNetworkProfile
+import Amazonka.AlexaBusiness.UpdateProfile
+import Amazonka.AlexaBusiness.UpdateRoom
+import Amazonka.AlexaBusiness.UpdateSkillGroup
diff --git a/gen/Amazonka/AlexaBusiness/ListBusinessReportSchedules.hs b/gen/Amazonka/AlexaBusiness/ListBusinessReportSchedules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListBusinessReportSchedules.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListBusinessReportSchedules
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the details of the schedules that a user configured. A download
+-- URL of the report associated with each schedule is returned every time
+-- this action is called. A new download URL is returned each time, and is
+-- valid for 24 hours.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.ListBusinessReportSchedules
+  ( -- * Creating a Request
+    ListBusinessReportSchedules (..),
+    newListBusinessReportSchedules,
+
+    -- * Request Lenses
+    listBusinessReportSchedules_maxResults,
+    listBusinessReportSchedules_nextToken,
+
+    -- * Destructuring the Response
+    ListBusinessReportSchedulesResponse (..),
+    newListBusinessReportSchedulesResponse,
+
+    -- * Response Lenses
+    listBusinessReportSchedulesResponse_businessReportSchedules,
+    listBusinessReportSchedulesResponse_nextToken,
+    listBusinessReportSchedulesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListBusinessReportSchedules' smart constructor.
+data ListBusinessReportSchedules = ListBusinessReportSchedules'
+  { -- | The maximum number of schedules listed in the call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token used to list the remaining schedules from the previous API
+    -- call.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBusinessReportSchedules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listBusinessReportSchedules_maxResults' - The maximum number of schedules listed in the call.
+--
+-- 'nextToken', 'listBusinessReportSchedules_nextToken' - The token used to list the remaining schedules from the previous API
+-- call.
+newListBusinessReportSchedules ::
+  ListBusinessReportSchedules
+newListBusinessReportSchedules =
+  ListBusinessReportSchedules'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of schedules listed in the call.
+listBusinessReportSchedules_maxResults :: Lens.Lens' ListBusinessReportSchedules (Prelude.Maybe Prelude.Natural)
+listBusinessReportSchedules_maxResults = Lens.lens (\ListBusinessReportSchedules' {maxResults} -> maxResults) (\s@ListBusinessReportSchedules' {} a -> s {maxResults = a} :: ListBusinessReportSchedules)
+
+-- | The token used to list the remaining schedules from the previous API
+-- call.
+listBusinessReportSchedules_nextToken :: Lens.Lens' ListBusinessReportSchedules (Prelude.Maybe Prelude.Text)
+listBusinessReportSchedules_nextToken = Lens.lens (\ListBusinessReportSchedules' {nextToken} -> nextToken) (\s@ListBusinessReportSchedules' {} a -> s {nextToken = a} :: ListBusinessReportSchedules)
+
+instance Core.AWSPager ListBusinessReportSchedules where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listBusinessReportSchedulesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listBusinessReportSchedulesResponse_businessReportSchedules
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listBusinessReportSchedules_nextToken
+          Lens..~ rs
+          Lens.^? listBusinessReportSchedulesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListBusinessReportSchedules where
+  type
+    AWSResponse ListBusinessReportSchedules =
+      ListBusinessReportSchedulesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListBusinessReportSchedulesResponse'
+            Prelude.<$> ( x
+                            Data..?> "BusinessReportSchedules"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListBusinessReportSchedules where
+  hashWithSalt _salt ListBusinessReportSchedules' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListBusinessReportSchedules where
+  rnf ListBusinessReportSchedules' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListBusinessReportSchedules where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListBusinessReportSchedules" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListBusinessReportSchedules where
+  toJSON ListBusinessReportSchedules' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListBusinessReportSchedules where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListBusinessReportSchedules where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListBusinessReportSchedulesResponse' smart constructor.
+data ListBusinessReportSchedulesResponse = ListBusinessReportSchedulesResponse'
+  { -- | The schedule of the reports.
+    businessReportSchedules :: Prelude.Maybe [BusinessReportSchedule],
+    -- | The token used to list the remaining schedules from the previous API
+    -- call.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListBusinessReportSchedulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'businessReportSchedules', 'listBusinessReportSchedulesResponse_businessReportSchedules' - The schedule of the reports.
+--
+-- 'nextToken', 'listBusinessReportSchedulesResponse_nextToken' - The token used to list the remaining schedules from the previous API
+-- call.
+--
+-- 'httpStatus', 'listBusinessReportSchedulesResponse_httpStatus' - The response's http status code.
+newListBusinessReportSchedulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListBusinessReportSchedulesResponse
+newListBusinessReportSchedulesResponse pHttpStatus_ =
+  ListBusinessReportSchedulesResponse'
+    { businessReportSchedules =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The schedule of the reports.
+listBusinessReportSchedulesResponse_businessReportSchedules :: Lens.Lens' ListBusinessReportSchedulesResponse (Prelude.Maybe [BusinessReportSchedule])
+listBusinessReportSchedulesResponse_businessReportSchedules = Lens.lens (\ListBusinessReportSchedulesResponse' {businessReportSchedules} -> businessReportSchedules) (\s@ListBusinessReportSchedulesResponse' {} a -> s {businessReportSchedules = a} :: ListBusinessReportSchedulesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token used to list the remaining schedules from the previous API
+-- call.
+listBusinessReportSchedulesResponse_nextToken :: Lens.Lens' ListBusinessReportSchedulesResponse (Prelude.Maybe Prelude.Text)
+listBusinessReportSchedulesResponse_nextToken = Lens.lens (\ListBusinessReportSchedulesResponse' {nextToken} -> nextToken) (\s@ListBusinessReportSchedulesResponse' {} a -> s {nextToken = a} :: ListBusinessReportSchedulesResponse)
+
+-- | The response's http status code.
+listBusinessReportSchedulesResponse_httpStatus :: Lens.Lens' ListBusinessReportSchedulesResponse Prelude.Int
+listBusinessReportSchedulesResponse_httpStatus = Lens.lens (\ListBusinessReportSchedulesResponse' {httpStatus} -> httpStatus) (\s@ListBusinessReportSchedulesResponse' {} a -> s {httpStatus = a} :: ListBusinessReportSchedulesResponse)
+
+instance
+  Prelude.NFData
+    ListBusinessReportSchedulesResponse
+  where
+  rnf ListBusinessReportSchedulesResponse' {..} =
+    Prelude.rnf businessReportSchedules
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListConferenceProviders.hs b/gen/Amazonka/AlexaBusiness/ListConferenceProviders.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListConferenceProviders.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListConferenceProviders
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists conference providers under a specific AWS account.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.ListConferenceProviders
+  ( -- * Creating a Request
+    ListConferenceProviders (..),
+    newListConferenceProviders,
+
+    -- * Request Lenses
+    listConferenceProviders_maxResults,
+    listConferenceProviders_nextToken,
+
+    -- * Destructuring the Response
+    ListConferenceProvidersResponse (..),
+    newListConferenceProvidersResponse,
+
+    -- * Response Lenses
+    listConferenceProvidersResponse_conferenceProviders,
+    listConferenceProvidersResponse_nextToken,
+    listConferenceProvidersResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListConferenceProviders' smart constructor.
+data ListConferenceProviders = ListConferenceProviders'
+  { -- | The maximum number of conference providers to be returned, per paginated
+    -- calls.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The tokens used for pagination.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListConferenceProviders' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listConferenceProviders_maxResults' - The maximum number of conference providers to be returned, per paginated
+-- calls.
+--
+-- 'nextToken', 'listConferenceProviders_nextToken' - The tokens used for pagination.
+newListConferenceProviders ::
+  ListConferenceProviders
+newListConferenceProviders =
+  ListConferenceProviders'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of conference providers to be returned, per paginated
+-- calls.
+listConferenceProviders_maxResults :: Lens.Lens' ListConferenceProviders (Prelude.Maybe Prelude.Natural)
+listConferenceProviders_maxResults = Lens.lens (\ListConferenceProviders' {maxResults} -> maxResults) (\s@ListConferenceProviders' {} a -> s {maxResults = a} :: ListConferenceProviders)
+
+-- | The tokens used for pagination.
+listConferenceProviders_nextToken :: Lens.Lens' ListConferenceProviders (Prelude.Maybe Prelude.Text)
+listConferenceProviders_nextToken = Lens.lens (\ListConferenceProviders' {nextToken} -> nextToken) (\s@ListConferenceProviders' {} a -> s {nextToken = a} :: ListConferenceProviders)
+
+instance Core.AWSPager ListConferenceProviders where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listConferenceProvidersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listConferenceProvidersResponse_conferenceProviders
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listConferenceProviders_nextToken
+          Lens..~ rs
+          Lens.^? listConferenceProvidersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListConferenceProviders where
+  type
+    AWSResponse ListConferenceProviders =
+      ListConferenceProvidersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListConferenceProvidersResponse'
+            Prelude.<$> ( x
+                            Data..?> "ConferenceProviders"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListConferenceProviders where
+  hashWithSalt _salt ListConferenceProviders' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListConferenceProviders where
+  rnf ListConferenceProviders' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListConferenceProviders where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListConferenceProviders" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListConferenceProviders where
+  toJSON ListConferenceProviders' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListConferenceProviders where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListConferenceProviders where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListConferenceProvidersResponse' smart constructor.
+data ListConferenceProvidersResponse = ListConferenceProvidersResponse'
+  { -- | The conference providers.
+    conferenceProviders :: Prelude.Maybe [ConferenceProvider],
+    -- | The tokens used for pagination.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListConferenceProvidersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conferenceProviders', 'listConferenceProvidersResponse_conferenceProviders' - The conference providers.
+--
+-- 'nextToken', 'listConferenceProvidersResponse_nextToken' - The tokens used for pagination.
+--
+-- 'httpStatus', 'listConferenceProvidersResponse_httpStatus' - The response's http status code.
+newListConferenceProvidersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListConferenceProvidersResponse
+newListConferenceProvidersResponse pHttpStatus_ =
+  ListConferenceProvidersResponse'
+    { conferenceProviders =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The conference providers.
+listConferenceProvidersResponse_conferenceProviders :: Lens.Lens' ListConferenceProvidersResponse (Prelude.Maybe [ConferenceProvider])
+listConferenceProvidersResponse_conferenceProviders = Lens.lens (\ListConferenceProvidersResponse' {conferenceProviders} -> conferenceProviders) (\s@ListConferenceProvidersResponse' {} a -> s {conferenceProviders = a} :: ListConferenceProvidersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tokens used for pagination.
+listConferenceProvidersResponse_nextToken :: Lens.Lens' ListConferenceProvidersResponse (Prelude.Maybe Prelude.Text)
+listConferenceProvidersResponse_nextToken = Lens.lens (\ListConferenceProvidersResponse' {nextToken} -> nextToken) (\s@ListConferenceProvidersResponse' {} a -> s {nextToken = a} :: ListConferenceProvidersResponse)
+
+-- | The response's http status code.
+listConferenceProvidersResponse_httpStatus :: Lens.Lens' ListConferenceProvidersResponse Prelude.Int
+listConferenceProvidersResponse_httpStatus = Lens.lens (\ListConferenceProvidersResponse' {httpStatus} -> httpStatus) (\s@ListConferenceProvidersResponse' {} a -> s {httpStatus = a} :: ListConferenceProvidersResponse)
+
+instance
+  Prelude.NFData
+    ListConferenceProvidersResponse
+  where
+  rnf ListConferenceProvidersResponse' {..} =
+    Prelude.rnf conferenceProviders
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListDeviceEvents.hs b/gen/Amazonka/AlexaBusiness/ListDeviceEvents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListDeviceEvents.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListDeviceEvents
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the device event history, including device connection status, for
+-- up to 30 days.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.ListDeviceEvents
+  ( -- * Creating a Request
+    ListDeviceEvents (..),
+    newListDeviceEvents,
+
+    -- * Request Lenses
+    listDeviceEvents_eventType,
+    listDeviceEvents_maxResults,
+    listDeviceEvents_nextToken,
+    listDeviceEvents_deviceArn,
+
+    -- * Destructuring the Response
+    ListDeviceEventsResponse (..),
+    newListDeviceEventsResponse,
+
+    -- * Response Lenses
+    listDeviceEventsResponse_deviceEvents,
+    listDeviceEventsResponse_nextToken,
+    listDeviceEventsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDeviceEvents' smart constructor.
+data ListDeviceEvents = ListDeviceEvents'
+  { -- | The event type to filter device events. If EventType isn\'t specified,
+    -- this returns a list of all device events in reverse chronological order.
+    -- If EventType is specified, this returns a list of device events for that
+    -- EventType in reverse chronological order.
+    eventType :: Prelude.Maybe DeviceEventType,
+    -- | The maximum number of results to include in the response. The default
+    -- value is 50. If more results exist than the specified MaxResults value,
+    -- a token is included in the response so that the remaining results can be
+    -- retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response only includes results beyond the token, up to the value
+    -- specified by MaxResults. When the end of results is reached, the
+    -- response has a value of null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a device.
+    deviceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeviceEvents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventType', 'listDeviceEvents_eventType' - The event type to filter device events. If EventType isn\'t specified,
+-- this returns a list of all device events in reverse chronological order.
+-- If EventType is specified, this returns a list of device events for that
+-- EventType in reverse chronological order.
+--
+-- 'maxResults', 'listDeviceEvents_maxResults' - The maximum number of results to include in the response. The default
+-- value is 50. If more results exist than the specified MaxResults value,
+-- a token is included in the response so that the remaining results can be
+-- retrieved.
+--
+-- 'nextToken', 'listDeviceEvents_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response only includes results beyond the token, up to the value
+-- specified by MaxResults. When the end of results is reached, the
+-- response has a value of null.
+--
+-- 'deviceArn', 'listDeviceEvents_deviceArn' - The ARN of a device.
+newListDeviceEvents ::
+  -- | 'deviceArn'
+  Prelude.Text ->
+  ListDeviceEvents
+newListDeviceEvents pDeviceArn_ =
+  ListDeviceEvents'
+    { eventType = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      deviceArn = pDeviceArn_
+    }
+
+-- | The event type to filter device events. If EventType isn\'t specified,
+-- this returns a list of all device events in reverse chronological order.
+-- If EventType is specified, this returns a list of device events for that
+-- EventType in reverse chronological order.
+listDeviceEvents_eventType :: Lens.Lens' ListDeviceEvents (Prelude.Maybe DeviceEventType)
+listDeviceEvents_eventType = Lens.lens (\ListDeviceEvents' {eventType} -> eventType) (\s@ListDeviceEvents' {} a -> s {eventType = a} :: ListDeviceEvents)
+
+-- | The maximum number of results to include in the response. The default
+-- value is 50. If more results exist than the specified MaxResults value,
+-- a token is included in the response so that the remaining results can be
+-- retrieved.
+listDeviceEvents_maxResults :: Lens.Lens' ListDeviceEvents (Prelude.Maybe Prelude.Natural)
+listDeviceEvents_maxResults = Lens.lens (\ListDeviceEvents' {maxResults} -> maxResults) (\s@ListDeviceEvents' {} a -> s {maxResults = a} :: ListDeviceEvents)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response only includes results beyond the token, up to the value
+-- specified by MaxResults. When the end of results is reached, the
+-- response has a value of null.
+listDeviceEvents_nextToken :: Lens.Lens' ListDeviceEvents (Prelude.Maybe Prelude.Text)
+listDeviceEvents_nextToken = Lens.lens (\ListDeviceEvents' {nextToken} -> nextToken) (\s@ListDeviceEvents' {} a -> s {nextToken = a} :: ListDeviceEvents)
+
+-- | The ARN of a device.
+listDeviceEvents_deviceArn :: Lens.Lens' ListDeviceEvents Prelude.Text
+listDeviceEvents_deviceArn = Lens.lens (\ListDeviceEvents' {deviceArn} -> deviceArn) (\s@ListDeviceEvents' {} a -> s {deviceArn = a} :: ListDeviceEvents)
+
+instance Core.AWSPager ListDeviceEvents where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDeviceEventsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDeviceEventsResponse_deviceEvents
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDeviceEvents_nextToken
+          Lens..~ rs
+          Lens.^? listDeviceEventsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDeviceEvents where
+  type
+    AWSResponse ListDeviceEvents =
+      ListDeviceEventsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDeviceEventsResponse'
+            Prelude.<$> (x Data..?> "DeviceEvents" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDeviceEvents where
+  hashWithSalt _salt ListDeviceEvents' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` deviceArn
+
+instance Prelude.NFData ListDeviceEvents where
+  rnf ListDeviceEvents' {..} =
+    Prelude.rnf eventType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf deviceArn
+
+instance Data.ToHeaders ListDeviceEvents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListDeviceEvents" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDeviceEvents where
+  toJSON ListDeviceEvents' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EventType" Data..=) Prelude.<$> eventType,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("DeviceArn" Data..= deviceArn)
+          ]
+      )
+
+instance Data.ToPath ListDeviceEvents where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDeviceEvents where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDeviceEventsResponse' smart constructor.
+data ListDeviceEventsResponse = ListDeviceEventsResponse'
+  { -- | The device events requested for the device ARN.
+    deviceEvents :: Prelude.Maybe [DeviceEvent],
+    -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeviceEventsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceEvents', 'listDeviceEventsResponse_deviceEvents' - The device events requested for the device ARN.
+--
+-- 'nextToken', 'listDeviceEventsResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'httpStatus', 'listDeviceEventsResponse_httpStatus' - The response's http status code.
+newListDeviceEventsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDeviceEventsResponse
+newListDeviceEventsResponse pHttpStatus_ =
+  ListDeviceEventsResponse'
+    { deviceEvents =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The device events requested for the device ARN.
+listDeviceEventsResponse_deviceEvents :: Lens.Lens' ListDeviceEventsResponse (Prelude.Maybe [DeviceEvent])
+listDeviceEventsResponse_deviceEvents = Lens.lens (\ListDeviceEventsResponse' {deviceEvents} -> deviceEvents) (\s@ListDeviceEventsResponse' {} a -> s {deviceEvents = a} :: ListDeviceEventsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token returned to indicate that there is more data available.
+listDeviceEventsResponse_nextToken :: Lens.Lens' ListDeviceEventsResponse (Prelude.Maybe Prelude.Text)
+listDeviceEventsResponse_nextToken = Lens.lens (\ListDeviceEventsResponse' {nextToken} -> nextToken) (\s@ListDeviceEventsResponse' {} a -> s {nextToken = a} :: ListDeviceEventsResponse)
+
+-- | The response's http status code.
+listDeviceEventsResponse_httpStatus :: Lens.Lens' ListDeviceEventsResponse Prelude.Int
+listDeviceEventsResponse_httpStatus = Lens.lens (\ListDeviceEventsResponse' {httpStatus} -> httpStatus) (\s@ListDeviceEventsResponse' {} a -> s {httpStatus = a} :: ListDeviceEventsResponse)
+
+instance Prelude.NFData ListDeviceEventsResponse where
+  rnf ListDeviceEventsResponse' {..} =
+    Prelude.rnf deviceEvents
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListGatewayGroups.hs b/gen/Amazonka/AlexaBusiness/ListGatewayGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListGatewayGroups.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListGatewayGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of gateway group summaries. Use GetGatewayGroup to
+-- retrieve details of a specific gateway group.
+module Amazonka.AlexaBusiness.ListGatewayGroups
+  ( -- * Creating a Request
+    ListGatewayGroups (..),
+    newListGatewayGroups,
+
+    -- * Request Lenses
+    listGatewayGroups_maxResults,
+    listGatewayGroups_nextToken,
+
+    -- * Destructuring the Response
+    ListGatewayGroupsResponse (..),
+    newListGatewayGroupsResponse,
+
+    -- * Response Lenses
+    listGatewayGroupsResponse_gatewayGroups,
+    listGatewayGroupsResponse_nextToken,
+    listGatewayGroupsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListGatewayGroups' smart constructor.
+data ListGatewayGroups = ListGatewayGroups'
+  { -- | The maximum number of gateway group summaries to return. The default is
+    -- 50.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token used to paginate though multiple pages of gateway group
+    -- summaries.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGatewayGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listGatewayGroups_maxResults' - The maximum number of gateway group summaries to return. The default is
+-- 50.
+--
+-- 'nextToken', 'listGatewayGroups_nextToken' - The token used to paginate though multiple pages of gateway group
+-- summaries.
+newListGatewayGroups ::
+  ListGatewayGroups
+newListGatewayGroups =
+  ListGatewayGroups'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of gateway group summaries to return. The default is
+-- 50.
+listGatewayGroups_maxResults :: Lens.Lens' ListGatewayGroups (Prelude.Maybe Prelude.Natural)
+listGatewayGroups_maxResults = Lens.lens (\ListGatewayGroups' {maxResults} -> maxResults) (\s@ListGatewayGroups' {} a -> s {maxResults = a} :: ListGatewayGroups)
+
+-- | The token used to paginate though multiple pages of gateway group
+-- summaries.
+listGatewayGroups_nextToken :: Lens.Lens' ListGatewayGroups (Prelude.Maybe Prelude.Text)
+listGatewayGroups_nextToken = Lens.lens (\ListGatewayGroups' {nextToken} -> nextToken) (\s@ListGatewayGroups' {} a -> s {nextToken = a} :: ListGatewayGroups)
+
+instance Core.AWSRequest ListGatewayGroups where
+  type
+    AWSResponse ListGatewayGroups =
+      ListGatewayGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListGatewayGroupsResponse'
+            Prelude.<$> (x Data..?> "GatewayGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListGatewayGroups where
+  hashWithSalt _salt ListGatewayGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListGatewayGroups where
+  rnf ListGatewayGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListGatewayGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListGatewayGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListGatewayGroups where
+  toJSON ListGatewayGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListGatewayGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListGatewayGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListGatewayGroupsResponse' smart constructor.
+data ListGatewayGroupsResponse = ListGatewayGroupsResponse'
+  { -- | The gateway groups in the list.
+    gatewayGroups :: Prelude.Maybe [GatewayGroupSummary],
+    -- | The token used to paginate though multiple pages of gateway group
+    -- summaries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGatewayGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gatewayGroups', 'listGatewayGroupsResponse_gatewayGroups' - The gateway groups in the list.
+--
+-- 'nextToken', 'listGatewayGroupsResponse_nextToken' - The token used to paginate though multiple pages of gateway group
+-- summaries.
+--
+-- 'httpStatus', 'listGatewayGroupsResponse_httpStatus' - The response's http status code.
+newListGatewayGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListGatewayGroupsResponse
+newListGatewayGroupsResponse pHttpStatus_ =
+  ListGatewayGroupsResponse'
+    { gatewayGroups =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The gateway groups in the list.
+listGatewayGroupsResponse_gatewayGroups :: Lens.Lens' ListGatewayGroupsResponse (Prelude.Maybe [GatewayGroupSummary])
+listGatewayGroupsResponse_gatewayGroups = Lens.lens (\ListGatewayGroupsResponse' {gatewayGroups} -> gatewayGroups) (\s@ListGatewayGroupsResponse' {} a -> s {gatewayGroups = a} :: ListGatewayGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token used to paginate though multiple pages of gateway group
+-- summaries.
+listGatewayGroupsResponse_nextToken :: Lens.Lens' ListGatewayGroupsResponse (Prelude.Maybe Prelude.Text)
+listGatewayGroupsResponse_nextToken = Lens.lens (\ListGatewayGroupsResponse' {nextToken} -> nextToken) (\s@ListGatewayGroupsResponse' {} a -> s {nextToken = a} :: ListGatewayGroupsResponse)
+
+-- | The response's http status code.
+listGatewayGroupsResponse_httpStatus :: Lens.Lens' ListGatewayGroupsResponse Prelude.Int
+listGatewayGroupsResponse_httpStatus = Lens.lens (\ListGatewayGroupsResponse' {httpStatus} -> httpStatus) (\s@ListGatewayGroupsResponse' {} a -> s {httpStatus = a} :: ListGatewayGroupsResponse)
+
+instance Prelude.NFData ListGatewayGroupsResponse where
+  rnf ListGatewayGroupsResponse' {..} =
+    Prelude.rnf gatewayGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListGateways.hs b/gen/Amazonka/AlexaBusiness/ListGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListGateways.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of gateway summaries. Use GetGateway to retrieve
+-- details of a specific gateway. An optional gateway group ARN can be
+-- provided to only retrieve gateway summaries of gateways that are
+-- associated with that gateway group ARN.
+module Amazonka.AlexaBusiness.ListGateways
+  ( -- * Creating a Request
+    ListGateways (..),
+    newListGateways,
+
+    -- * Request Lenses
+    listGateways_gatewayGroupArn,
+    listGateways_maxResults,
+    listGateways_nextToken,
+
+    -- * Destructuring the Response
+    ListGatewaysResponse (..),
+    newListGatewaysResponse,
+
+    -- * Response Lenses
+    listGatewaysResponse_gateways,
+    listGatewaysResponse_nextToken,
+    listGatewaysResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListGateways' smart constructor.
+data ListGateways = ListGateways'
+  { -- | The gateway group ARN for which to list gateways.
+    gatewayGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of gateway summaries to return. The default is 50.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token used to paginate though multiple pages of gateway summaries.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gatewayGroupArn', 'listGateways_gatewayGroupArn' - The gateway group ARN for which to list gateways.
+--
+-- 'maxResults', 'listGateways_maxResults' - The maximum number of gateway summaries to return. The default is 50.
+--
+-- 'nextToken', 'listGateways_nextToken' - The token used to paginate though multiple pages of gateway summaries.
+newListGateways ::
+  ListGateways
+newListGateways =
+  ListGateways'
+    { gatewayGroupArn = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The gateway group ARN for which to list gateways.
+listGateways_gatewayGroupArn :: Lens.Lens' ListGateways (Prelude.Maybe Prelude.Text)
+listGateways_gatewayGroupArn = Lens.lens (\ListGateways' {gatewayGroupArn} -> gatewayGroupArn) (\s@ListGateways' {} a -> s {gatewayGroupArn = a} :: ListGateways)
+
+-- | The maximum number of gateway summaries to return. The default is 50.
+listGateways_maxResults :: Lens.Lens' ListGateways (Prelude.Maybe Prelude.Natural)
+listGateways_maxResults = Lens.lens (\ListGateways' {maxResults} -> maxResults) (\s@ListGateways' {} a -> s {maxResults = a} :: ListGateways)
+
+-- | The token used to paginate though multiple pages of gateway summaries.
+listGateways_nextToken :: Lens.Lens' ListGateways (Prelude.Maybe Prelude.Text)
+listGateways_nextToken = Lens.lens (\ListGateways' {nextToken} -> nextToken) (\s@ListGateways' {} a -> s {nextToken = a} :: ListGateways)
+
+instance Core.AWSRequest ListGateways where
+  type AWSResponse ListGateways = ListGatewaysResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListGatewaysResponse'
+            Prelude.<$> (x Data..?> "Gateways" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListGateways where
+  hashWithSalt _salt ListGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` gatewayGroupArn
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListGateways where
+  rnf ListGateways' {..} =
+    Prelude.rnf gatewayGroupArn
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListGateways where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListGateways" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListGateways where
+  toJSON ListGateways' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("GatewayGroupArn" Data..=)
+              Prelude.<$> gatewayGroupArn,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListGateways where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListGateways where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListGatewaysResponse' smart constructor.
+data ListGatewaysResponse = ListGatewaysResponse'
+  { -- | The gateways in the list.
+    gateways :: Prelude.Maybe [GatewaySummary],
+    -- | The token used to paginate though multiple pages of gateway summaries.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gateways', 'listGatewaysResponse_gateways' - The gateways in the list.
+--
+-- 'nextToken', 'listGatewaysResponse_nextToken' - The token used to paginate though multiple pages of gateway summaries.
+--
+-- 'httpStatus', 'listGatewaysResponse_httpStatus' - The response's http status code.
+newListGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListGatewaysResponse
+newListGatewaysResponse pHttpStatus_ =
+  ListGatewaysResponse'
+    { gateways = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The gateways in the list.
+listGatewaysResponse_gateways :: Lens.Lens' ListGatewaysResponse (Prelude.Maybe [GatewaySummary])
+listGatewaysResponse_gateways = Lens.lens (\ListGatewaysResponse' {gateways} -> gateways) (\s@ListGatewaysResponse' {} a -> s {gateways = a} :: ListGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token used to paginate though multiple pages of gateway summaries.
+listGatewaysResponse_nextToken :: Lens.Lens' ListGatewaysResponse (Prelude.Maybe Prelude.Text)
+listGatewaysResponse_nextToken = Lens.lens (\ListGatewaysResponse' {nextToken} -> nextToken) (\s@ListGatewaysResponse' {} a -> s {nextToken = a} :: ListGatewaysResponse)
+
+-- | The response's http status code.
+listGatewaysResponse_httpStatus :: Lens.Lens' ListGatewaysResponse Prelude.Int
+listGatewaysResponse_httpStatus = Lens.lens (\ListGatewaysResponse' {httpStatus} -> httpStatus) (\s@ListGatewaysResponse' {} a -> s {httpStatus = a} :: ListGatewaysResponse)
+
+instance Prelude.NFData ListGatewaysResponse where
+  rnf ListGatewaysResponse' {..} =
+    Prelude.rnf gateways
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListSkills.hs b/gen/Amazonka/AlexaBusiness/ListSkills.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListSkills.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListSkills
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all enabled skills in a specific skill group.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.ListSkills
+  ( -- * Creating a Request
+    ListSkills (..),
+    newListSkills,
+
+    -- * Request Lenses
+    listSkills_enablementType,
+    listSkills_maxResults,
+    listSkills_nextToken,
+    listSkills_skillGroupArn,
+    listSkills_skillType,
+
+    -- * Destructuring the Response
+    ListSkillsResponse (..),
+    newListSkillsResponse,
+
+    -- * Response Lenses
+    listSkillsResponse_nextToken,
+    listSkillsResponse_skillSummaries,
+    listSkillsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSkills' smart constructor.
+data ListSkills = ListSkills'
+  { -- | Whether the skill is enabled under the user\'s account.
+    enablementType :: Prelude.Maybe EnablementTypeFilter,
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by @MaxResults@.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the skill group for which to list enabled skills.
+    skillGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | Whether the skill is publicly available or is a private skill.
+    skillType :: Prelude.Maybe SkillTypeFilter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSkills' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enablementType', 'listSkills_enablementType' - Whether the skill is enabled under the user\'s account.
+--
+-- 'maxResults', 'listSkills_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listSkills_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+--
+-- 'skillGroupArn', 'listSkills_skillGroupArn' - The ARN of the skill group for which to list enabled skills.
+--
+-- 'skillType', 'listSkills_skillType' - Whether the skill is publicly available or is a private skill.
+newListSkills ::
+  ListSkills
+newListSkills =
+  ListSkills'
+    { enablementType = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      skillGroupArn = Prelude.Nothing,
+      skillType = Prelude.Nothing
+    }
+
+-- | Whether the skill is enabled under the user\'s account.
+listSkills_enablementType :: Lens.Lens' ListSkills (Prelude.Maybe EnablementTypeFilter)
+listSkills_enablementType = Lens.lens (\ListSkills' {enablementType} -> enablementType) (\s@ListSkills' {} a -> s {enablementType = a} :: ListSkills)
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listSkills_maxResults :: Lens.Lens' ListSkills (Prelude.Maybe Prelude.Natural)
+listSkills_maxResults = Lens.lens (\ListSkills' {maxResults} -> maxResults) (\s@ListSkills' {} a -> s {maxResults = a} :: ListSkills)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+listSkills_nextToken :: Lens.Lens' ListSkills (Prelude.Maybe Prelude.Text)
+listSkills_nextToken = Lens.lens (\ListSkills' {nextToken} -> nextToken) (\s@ListSkills' {} a -> s {nextToken = a} :: ListSkills)
+
+-- | The ARN of the skill group for which to list enabled skills.
+listSkills_skillGroupArn :: Lens.Lens' ListSkills (Prelude.Maybe Prelude.Text)
+listSkills_skillGroupArn = Lens.lens (\ListSkills' {skillGroupArn} -> skillGroupArn) (\s@ListSkills' {} a -> s {skillGroupArn = a} :: ListSkills)
+
+-- | Whether the skill is publicly available or is a private skill.
+listSkills_skillType :: Lens.Lens' ListSkills (Prelude.Maybe SkillTypeFilter)
+listSkills_skillType = Lens.lens (\ListSkills' {skillType} -> skillType) (\s@ListSkills' {} a -> s {skillType = a} :: ListSkills)
+
+instance Core.AWSPager ListSkills where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSkillsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSkillsResponse_skillSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSkills_nextToken
+          Lens..~ rs
+          Lens.^? listSkillsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSkills where
+  type AWSResponse ListSkills = ListSkillsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSkillsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "SkillSummaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSkills where
+  hashWithSalt _salt ListSkills' {..} =
+    _salt
+      `Prelude.hashWithSalt` enablementType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` skillGroupArn
+      `Prelude.hashWithSalt` skillType
+
+instance Prelude.NFData ListSkills where
+  rnf ListSkills' {..} =
+    Prelude.rnf enablementType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf skillGroupArn
+      `Prelude.seq` Prelude.rnf skillType
+
+instance Data.ToHeaders ListSkills where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListSkills" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSkills where
+  toJSON ListSkills' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EnablementType" Data..=)
+              Prelude.<$> enablementType,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SkillGroupArn" Data..=) Prelude.<$> skillGroupArn,
+            ("SkillType" Data..=) Prelude.<$> skillType
+          ]
+      )
+
+instance Data.ToPath ListSkills where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSkills where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSkillsResponse' smart constructor.
+data ListSkillsResponse = ListSkillsResponse'
+  { -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The list of enabled skills requested. Required.
+    skillSummaries :: Prelude.Maybe [SkillSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSkillsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listSkillsResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'skillSummaries', 'listSkillsResponse_skillSummaries' - The list of enabled skills requested. Required.
+--
+-- 'httpStatus', 'listSkillsResponse_httpStatus' - The response's http status code.
+newListSkillsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSkillsResponse
+newListSkillsResponse pHttpStatus_ =
+  ListSkillsResponse'
+    { nextToken = Prelude.Nothing,
+      skillSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token returned to indicate that there is more data available.
+listSkillsResponse_nextToken :: Lens.Lens' ListSkillsResponse (Prelude.Maybe Prelude.Text)
+listSkillsResponse_nextToken = Lens.lens (\ListSkillsResponse' {nextToken} -> nextToken) (\s@ListSkillsResponse' {} a -> s {nextToken = a} :: ListSkillsResponse)
+
+-- | The list of enabled skills requested. Required.
+listSkillsResponse_skillSummaries :: Lens.Lens' ListSkillsResponse (Prelude.Maybe [SkillSummary])
+listSkillsResponse_skillSummaries = Lens.lens (\ListSkillsResponse' {skillSummaries} -> skillSummaries) (\s@ListSkillsResponse' {} a -> s {skillSummaries = a} :: ListSkillsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSkillsResponse_httpStatus :: Lens.Lens' ListSkillsResponse Prelude.Int
+listSkillsResponse_httpStatus = Lens.lens (\ListSkillsResponse' {httpStatus} -> httpStatus) (\s@ListSkillsResponse' {} a -> s {httpStatus = a} :: ListSkillsResponse)
+
+instance Prelude.NFData ListSkillsResponse where
+  rnf ListSkillsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf skillSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListSkillsStoreCategories.hs b/gen/Amazonka/AlexaBusiness/ListSkillsStoreCategories.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListSkillsStoreCategories.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListSkillsStoreCategories
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all categories in the Alexa skill store.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.ListSkillsStoreCategories
+  ( -- * Creating a Request
+    ListSkillsStoreCategories (..),
+    newListSkillsStoreCategories,
+
+    -- * Request Lenses
+    listSkillsStoreCategories_maxResults,
+    listSkillsStoreCategories_nextToken,
+
+    -- * Destructuring the Response
+    ListSkillsStoreCategoriesResponse (..),
+    newListSkillsStoreCategoriesResponse,
+
+    -- * Response Lenses
+    listSkillsStoreCategoriesResponse_categoryList,
+    listSkillsStoreCategoriesResponse_nextToken,
+    listSkillsStoreCategoriesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSkillsStoreCategories' smart constructor.
+data ListSkillsStoreCategories = ListSkillsStoreCategories'
+  { -- | The maximum number of categories returned, per paginated calls.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The tokens used for pagination.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSkillsStoreCategories' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listSkillsStoreCategories_maxResults' - The maximum number of categories returned, per paginated calls.
+--
+-- 'nextToken', 'listSkillsStoreCategories_nextToken' - The tokens used for pagination.
+newListSkillsStoreCategories ::
+  ListSkillsStoreCategories
+newListSkillsStoreCategories =
+  ListSkillsStoreCategories'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of categories returned, per paginated calls.
+listSkillsStoreCategories_maxResults :: Lens.Lens' ListSkillsStoreCategories (Prelude.Maybe Prelude.Natural)
+listSkillsStoreCategories_maxResults = Lens.lens (\ListSkillsStoreCategories' {maxResults} -> maxResults) (\s@ListSkillsStoreCategories' {} a -> s {maxResults = a} :: ListSkillsStoreCategories)
+
+-- | The tokens used for pagination.
+listSkillsStoreCategories_nextToken :: Lens.Lens' ListSkillsStoreCategories (Prelude.Maybe Prelude.Text)
+listSkillsStoreCategories_nextToken = Lens.lens (\ListSkillsStoreCategories' {nextToken} -> nextToken) (\s@ListSkillsStoreCategories' {} a -> s {nextToken = a} :: ListSkillsStoreCategories)
+
+instance Core.AWSPager ListSkillsStoreCategories where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSkillsStoreCategoriesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSkillsStoreCategoriesResponse_categoryList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSkillsStoreCategories_nextToken
+          Lens..~ rs
+          Lens.^? listSkillsStoreCategoriesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSkillsStoreCategories where
+  type
+    AWSResponse ListSkillsStoreCategories =
+      ListSkillsStoreCategoriesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSkillsStoreCategoriesResponse'
+            Prelude.<$> (x Data..?> "CategoryList" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSkillsStoreCategories where
+  hashWithSalt _salt ListSkillsStoreCategories' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListSkillsStoreCategories where
+  rnf ListSkillsStoreCategories' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListSkillsStoreCategories where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListSkillsStoreCategories" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSkillsStoreCategories where
+  toJSON ListSkillsStoreCategories' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListSkillsStoreCategories where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSkillsStoreCategories where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSkillsStoreCategoriesResponse' smart constructor.
+data ListSkillsStoreCategoriesResponse = ListSkillsStoreCategoriesResponse'
+  { -- | The list of categories.
+    categoryList :: Prelude.Maybe [Category],
+    -- | The tokens used for pagination.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSkillsStoreCategoriesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'categoryList', 'listSkillsStoreCategoriesResponse_categoryList' - The list of categories.
+--
+-- 'nextToken', 'listSkillsStoreCategoriesResponse_nextToken' - The tokens used for pagination.
+--
+-- 'httpStatus', 'listSkillsStoreCategoriesResponse_httpStatus' - The response's http status code.
+newListSkillsStoreCategoriesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSkillsStoreCategoriesResponse
+newListSkillsStoreCategoriesResponse pHttpStatus_ =
+  ListSkillsStoreCategoriesResponse'
+    { categoryList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of categories.
+listSkillsStoreCategoriesResponse_categoryList :: Lens.Lens' ListSkillsStoreCategoriesResponse (Prelude.Maybe [Category])
+listSkillsStoreCategoriesResponse_categoryList = Lens.lens (\ListSkillsStoreCategoriesResponse' {categoryList} -> categoryList) (\s@ListSkillsStoreCategoriesResponse' {} a -> s {categoryList = a} :: ListSkillsStoreCategoriesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tokens used for pagination.
+listSkillsStoreCategoriesResponse_nextToken :: Lens.Lens' ListSkillsStoreCategoriesResponse (Prelude.Maybe Prelude.Text)
+listSkillsStoreCategoriesResponse_nextToken = Lens.lens (\ListSkillsStoreCategoriesResponse' {nextToken} -> nextToken) (\s@ListSkillsStoreCategoriesResponse' {} a -> s {nextToken = a} :: ListSkillsStoreCategoriesResponse)
+
+-- | The response's http status code.
+listSkillsStoreCategoriesResponse_httpStatus :: Lens.Lens' ListSkillsStoreCategoriesResponse Prelude.Int
+listSkillsStoreCategoriesResponse_httpStatus = Lens.lens (\ListSkillsStoreCategoriesResponse' {httpStatus} -> httpStatus) (\s@ListSkillsStoreCategoriesResponse' {} a -> s {httpStatus = a} :: ListSkillsStoreCategoriesResponse)
+
+instance
+  Prelude.NFData
+    ListSkillsStoreCategoriesResponse
+  where
+  rnf ListSkillsStoreCategoriesResponse' {..} =
+    Prelude.rnf categoryList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListSkillsStoreSkillsByCategory.hs b/gen/Amazonka/AlexaBusiness/ListSkillsStoreSkillsByCategory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListSkillsStoreSkillsByCategory.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListSkillsStoreSkillsByCategory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all skills in the Alexa skill store by category.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.ListSkillsStoreSkillsByCategory
+  ( -- * Creating a Request
+    ListSkillsStoreSkillsByCategory (..),
+    newListSkillsStoreSkillsByCategory,
+
+    -- * Request Lenses
+    listSkillsStoreSkillsByCategory_maxResults,
+    listSkillsStoreSkillsByCategory_nextToken,
+    listSkillsStoreSkillsByCategory_categoryId,
+
+    -- * Destructuring the Response
+    ListSkillsStoreSkillsByCategoryResponse (..),
+    newListSkillsStoreSkillsByCategoryResponse,
+
+    -- * Response Lenses
+    listSkillsStoreSkillsByCategoryResponse_nextToken,
+    listSkillsStoreSkillsByCategoryResponse_skillsStoreSkills,
+    listSkillsStoreSkillsByCategoryResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSkillsStoreSkillsByCategory' smart constructor.
+data ListSkillsStoreSkillsByCategory = ListSkillsStoreSkillsByCategory'
+  { -- | The maximum number of skills returned per paginated calls.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The tokens used for pagination.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The category ID for which the skills are being retrieved from the skill
+    -- store.
+    categoryId :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSkillsStoreSkillsByCategory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listSkillsStoreSkillsByCategory_maxResults' - The maximum number of skills returned per paginated calls.
+--
+-- 'nextToken', 'listSkillsStoreSkillsByCategory_nextToken' - The tokens used for pagination.
+--
+-- 'categoryId', 'listSkillsStoreSkillsByCategory_categoryId' - The category ID for which the skills are being retrieved from the skill
+-- store.
+newListSkillsStoreSkillsByCategory ::
+  -- | 'categoryId'
+  Prelude.Natural ->
+  ListSkillsStoreSkillsByCategory
+newListSkillsStoreSkillsByCategory pCategoryId_ =
+  ListSkillsStoreSkillsByCategory'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      categoryId = pCategoryId_
+    }
+
+-- | The maximum number of skills returned per paginated calls.
+listSkillsStoreSkillsByCategory_maxResults :: Lens.Lens' ListSkillsStoreSkillsByCategory (Prelude.Maybe Prelude.Natural)
+listSkillsStoreSkillsByCategory_maxResults = Lens.lens (\ListSkillsStoreSkillsByCategory' {maxResults} -> maxResults) (\s@ListSkillsStoreSkillsByCategory' {} a -> s {maxResults = a} :: ListSkillsStoreSkillsByCategory)
+
+-- | The tokens used for pagination.
+listSkillsStoreSkillsByCategory_nextToken :: Lens.Lens' ListSkillsStoreSkillsByCategory (Prelude.Maybe Prelude.Text)
+listSkillsStoreSkillsByCategory_nextToken = Lens.lens (\ListSkillsStoreSkillsByCategory' {nextToken} -> nextToken) (\s@ListSkillsStoreSkillsByCategory' {} a -> s {nextToken = a} :: ListSkillsStoreSkillsByCategory)
+
+-- | The category ID for which the skills are being retrieved from the skill
+-- store.
+listSkillsStoreSkillsByCategory_categoryId :: Lens.Lens' ListSkillsStoreSkillsByCategory Prelude.Natural
+listSkillsStoreSkillsByCategory_categoryId = Lens.lens (\ListSkillsStoreSkillsByCategory' {categoryId} -> categoryId) (\s@ListSkillsStoreSkillsByCategory' {} a -> s {categoryId = a} :: ListSkillsStoreSkillsByCategory)
+
+instance
+  Core.AWSPager
+    ListSkillsStoreSkillsByCategory
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSkillsStoreSkillsByCategoryResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSkillsStoreSkillsByCategoryResponse_skillsStoreSkills
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSkillsStoreSkillsByCategory_nextToken
+          Lens..~ rs
+          Lens.^? listSkillsStoreSkillsByCategoryResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListSkillsStoreSkillsByCategory
+  where
+  type
+    AWSResponse ListSkillsStoreSkillsByCategory =
+      ListSkillsStoreSkillsByCategoryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSkillsStoreSkillsByCategoryResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "SkillsStoreSkills"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListSkillsStoreSkillsByCategory
+  where
+  hashWithSalt
+    _salt
+    ListSkillsStoreSkillsByCategory' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` categoryId
+
+instance
+  Prelude.NFData
+    ListSkillsStoreSkillsByCategory
+  where
+  rnf ListSkillsStoreSkillsByCategory' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf categoryId
+
+instance
+  Data.ToHeaders
+    ListSkillsStoreSkillsByCategory
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListSkillsStoreSkillsByCategory" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSkillsStoreSkillsByCategory where
+  toJSON ListSkillsStoreSkillsByCategory' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("CategoryId" Data..= categoryId)
+          ]
+      )
+
+instance Data.ToPath ListSkillsStoreSkillsByCategory where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSkillsStoreSkillsByCategory where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSkillsStoreSkillsByCategoryResponse' smart constructor.
+data ListSkillsStoreSkillsByCategoryResponse = ListSkillsStoreSkillsByCategoryResponse'
+  { -- | The tokens used for pagination.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The skill store skills.
+    skillsStoreSkills :: Prelude.Maybe [SkillsStoreSkill],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSkillsStoreSkillsByCategoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listSkillsStoreSkillsByCategoryResponse_nextToken' - The tokens used for pagination.
+--
+-- 'skillsStoreSkills', 'listSkillsStoreSkillsByCategoryResponse_skillsStoreSkills' - The skill store skills.
+--
+-- 'httpStatus', 'listSkillsStoreSkillsByCategoryResponse_httpStatus' - The response's http status code.
+newListSkillsStoreSkillsByCategoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSkillsStoreSkillsByCategoryResponse
+newListSkillsStoreSkillsByCategoryResponse
+  pHttpStatus_ =
+    ListSkillsStoreSkillsByCategoryResponse'
+      { nextToken =
+          Prelude.Nothing,
+        skillsStoreSkills =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The tokens used for pagination.
+listSkillsStoreSkillsByCategoryResponse_nextToken :: Lens.Lens' ListSkillsStoreSkillsByCategoryResponse (Prelude.Maybe Prelude.Text)
+listSkillsStoreSkillsByCategoryResponse_nextToken = Lens.lens (\ListSkillsStoreSkillsByCategoryResponse' {nextToken} -> nextToken) (\s@ListSkillsStoreSkillsByCategoryResponse' {} a -> s {nextToken = a} :: ListSkillsStoreSkillsByCategoryResponse)
+
+-- | The skill store skills.
+listSkillsStoreSkillsByCategoryResponse_skillsStoreSkills :: Lens.Lens' ListSkillsStoreSkillsByCategoryResponse (Prelude.Maybe [SkillsStoreSkill])
+listSkillsStoreSkillsByCategoryResponse_skillsStoreSkills = Lens.lens (\ListSkillsStoreSkillsByCategoryResponse' {skillsStoreSkills} -> skillsStoreSkills) (\s@ListSkillsStoreSkillsByCategoryResponse' {} a -> s {skillsStoreSkills = a} :: ListSkillsStoreSkillsByCategoryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSkillsStoreSkillsByCategoryResponse_httpStatus :: Lens.Lens' ListSkillsStoreSkillsByCategoryResponse Prelude.Int
+listSkillsStoreSkillsByCategoryResponse_httpStatus = Lens.lens (\ListSkillsStoreSkillsByCategoryResponse' {httpStatus} -> httpStatus) (\s@ListSkillsStoreSkillsByCategoryResponse' {} a -> s {httpStatus = a} :: ListSkillsStoreSkillsByCategoryResponse)
+
+instance
+  Prelude.NFData
+    ListSkillsStoreSkillsByCategoryResponse
+  where
+  rnf ListSkillsStoreSkillsByCategoryResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf skillsStoreSkills
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListSmartHomeAppliances.hs b/gen/Amazonka/AlexaBusiness/ListSmartHomeAppliances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListSmartHomeAppliances.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListSmartHomeAppliances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all of the smart home appliances associated with a room.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.ListSmartHomeAppliances
+  ( -- * Creating a Request
+    ListSmartHomeAppliances (..),
+    newListSmartHomeAppliances,
+
+    -- * Request Lenses
+    listSmartHomeAppliances_maxResults,
+    listSmartHomeAppliances_nextToken,
+    listSmartHomeAppliances_roomArn,
+
+    -- * Destructuring the Response
+    ListSmartHomeAppliancesResponse (..),
+    newListSmartHomeAppliancesResponse,
+
+    -- * Response Lenses
+    listSmartHomeAppliancesResponse_nextToken,
+    listSmartHomeAppliancesResponse_smartHomeAppliances,
+    listSmartHomeAppliancesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSmartHomeAppliances' smart constructor.
+data ListSmartHomeAppliances = ListSmartHomeAppliances'
+  { -- | The maximum number of appliances to be returned, per paginated calls.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The tokens used for pagination.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The room that the appliances are associated with.
+    roomArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSmartHomeAppliances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listSmartHomeAppliances_maxResults' - The maximum number of appliances to be returned, per paginated calls.
+--
+-- 'nextToken', 'listSmartHomeAppliances_nextToken' - The tokens used for pagination.
+--
+-- 'roomArn', 'listSmartHomeAppliances_roomArn' - The room that the appliances are associated with.
+newListSmartHomeAppliances ::
+  -- | 'roomArn'
+  Prelude.Text ->
+  ListSmartHomeAppliances
+newListSmartHomeAppliances pRoomArn_ =
+  ListSmartHomeAppliances'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      roomArn = pRoomArn_
+    }
+
+-- | The maximum number of appliances to be returned, per paginated calls.
+listSmartHomeAppliances_maxResults :: Lens.Lens' ListSmartHomeAppliances (Prelude.Maybe Prelude.Natural)
+listSmartHomeAppliances_maxResults = Lens.lens (\ListSmartHomeAppliances' {maxResults} -> maxResults) (\s@ListSmartHomeAppliances' {} a -> s {maxResults = a} :: ListSmartHomeAppliances)
+
+-- | The tokens used for pagination.
+listSmartHomeAppliances_nextToken :: Lens.Lens' ListSmartHomeAppliances (Prelude.Maybe Prelude.Text)
+listSmartHomeAppliances_nextToken = Lens.lens (\ListSmartHomeAppliances' {nextToken} -> nextToken) (\s@ListSmartHomeAppliances' {} a -> s {nextToken = a} :: ListSmartHomeAppliances)
+
+-- | The room that the appliances are associated with.
+listSmartHomeAppliances_roomArn :: Lens.Lens' ListSmartHomeAppliances Prelude.Text
+listSmartHomeAppliances_roomArn = Lens.lens (\ListSmartHomeAppliances' {roomArn} -> roomArn) (\s@ListSmartHomeAppliances' {} a -> s {roomArn = a} :: ListSmartHomeAppliances)
+
+instance Core.AWSPager ListSmartHomeAppliances where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSmartHomeAppliancesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSmartHomeAppliancesResponse_smartHomeAppliances
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSmartHomeAppliances_nextToken
+          Lens..~ rs
+          Lens.^? listSmartHomeAppliancesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSmartHomeAppliances where
+  type
+    AWSResponse ListSmartHomeAppliances =
+      ListSmartHomeAppliancesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSmartHomeAppliancesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "SmartHomeAppliances"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSmartHomeAppliances where
+  hashWithSalt _salt ListSmartHomeAppliances' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` roomArn
+
+instance Prelude.NFData ListSmartHomeAppliances where
+  rnf ListSmartHomeAppliances' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf roomArn
+
+instance Data.ToHeaders ListSmartHomeAppliances where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ListSmartHomeAppliances" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSmartHomeAppliances where
+  toJSON ListSmartHomeAppliances' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("RoomArn" Data..= roomArn)
+          ]
+      )
+
+instance Data.ToPath ListSmartHomeAppliances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSmartHomeAppliances where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSmartHomeAppliancesResponse' smart constructor.
+data ListSmartHomeAppliancesResponse = ListSmartHomeAppliancesResponse'
+  { -- | The tokens used for pagination.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The smart home appliances.
+    smartHomeAppliances :: Prelude.Maybe [SmartHomeAppliance],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSmartHomeAppliancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listSmartHomeAppliancesResponse_nextToken' - The tokens used for pagination.
+--
+-- 'smartHomeAppliances', 'listSmartHomeAppliancesResponse_smartHomeAppliances' - The smart home appliances.
+--
+-- 'httpStatus', 'listSmartHomeAppliancesResponse_httpStatus' - The response's http status code.
+newListSmartHomeAppliancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSmartHomeAppliancesResponse
+newListSmartHomeAppliancesResponse pHttpStatus_ =
+  ListSmartHomeAppliancesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      smartHomeAppliances = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tokens used for pagination.
+listSmartHomeAppliancesResponse_nextToken :: Lens.Lens' ListSmartHomeAppliancesResponse (Prelude.Maybe Prelude.Text)
+listSmartHomeAppliancesResponse_nextToken = Lens.lens (\ListSmartHomeAppliancesResponse' {nextToken} -> nextToken) (\s@ListSmartHomeAppliancesResponse' {} a -> s {nextToken = a} :: ListSmartHomeAppliancesResponse)
+
+-- | The smart home appliances.
+listSmartHomeAppliancesResponse_smartHomeAppliances :: Lens.Lens' ListSmartHomeAppliancesResponse (Prelude.Maybe [SmartHomeAppliance])
+listSmartHomeAppliancesResponse_smartHomeAppliances = Lens.lens (\ListSmartHomeAppliancesResponse' {smartHomeAppliances} -> smartHomeAppliances) (\s@ListSmartHomeAppliancesResponse' {} a -> s {smartHomeAppliances = a} :: ListSmartHomeAppliancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSmartHomeAppliancesResponse_httpStatus :: Lens.Lens' ListSmartHomeAppliancesResponse Prelude.Int
+listSmartHomeAppliancesResponse_httpStatus = Lens.lens (\ListSmartHomeAppliancesResponse' {httpStatus} -> httpStatus) (\s@ListSmartHomeAppliancesResponse' {} a -> s {httpStatus = a} :: ListSmartHomeAppliancesResponse)
+
+instance
+  Prelude.NFData
+    ListSmartHomeAppliancesResponse
+  where
+  rnf ListSmartHomeAppliancesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf smartHomeAppliances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ListTags.hs b/gen/Amazonka/AlexaBusiness/ListTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ListTags.hs
@@ -0,0 +1,245 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ListTags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all tags for the specified resource.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.ListTags
+  ( -- * Creating a Request
+    ListTags (..),
+    newListTags,
+
+    -- * Request Lenses
+    listTags_maxResults,
+    listTags_nextToken,
+    listTags_arn,
+
+    -- * Destructuring the Response
+    ListTagsResponse (..),
+    newListTagsResponse,
+
+    -- * Response Lenses
+    listTagsResponse_nextToken,
+    listTagsResponse_tags,
+    listTagsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTags' smart constructor.
+data ListTags = ListTags'
+  { -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by @MaxResults@.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the specified resource for which to list tags.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTags' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listTags_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'listTags_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+--
+-- 'arn', 'listTags_arn' - The ARN of the specified resource for which to list tags.
+newListTags ::
+  -- | 'arn'
+  Prelude.Text ->
+  ListTags
+newListTags pArn_ =
+  ListTags'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      arn = pArn_
+    }
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+listTags_maxResults :: Lens.Lens' ListTags (Prelude.Maybe Prelude.Natural)
+listTags_maxResults = Lens.lens (\ListTags' {maxResults} -> maxResults) (\s@ListTags' {} a -> s {maxResults = a} :: ListTags)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+listTags_nextToken :: Lens.Lens' ListTags (Prelude.Maybe Prelude.Text)
+listTags_nextToken = Lens.lens (\ListTags' {nextToken} -> nextToken) (\s@ListTags' {} a -> s {nextToken = a} :: ListTags)
+
+-- | The ARN of the specified resource for which to list tags.
+listTags_arn :: Lens.Lens' ListTags Prelude.Text
+listTags_arn = Lens.lens (\ListTags' {arn} -> arn) (\s@ListTags' {} a -> s {arn = a} :: ListTags)
+
+instance Core.AWSPager ListTags where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTagsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listTagsResponse_tags
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTags_nextToken
+          Lens..~ rs
+          Lens.^? listTagsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTags where
+  type AWSResponse ListTags = ListTagsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTags where
+  hashWithSalt _salt ListTags' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` arn
+
+instance Prelude.NFData ListTags where
+  rnf ListTags' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf arn
+
+instance Data.ToHeaders ListTags where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AlexaForBusiness.ListTags" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTags where
+  toJSON ListTags' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("Arn" Data..= arn)
+          ]
+      )
+
+instance Data.ToPath ListTags where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTags where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsResponse' smart constructor.
+data ListTagsResponse = ListTagsResponse'
+  { -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The tags requested for the specified resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listTagsResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'tags', 'listTagsResponse_tags' - The tags requested for the specified resource.
+--
+-- 'httpStatus', 'listTagsResponse_httpStatus' - The response's http status code.
+newListTagsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsResponse
+newListTagsResponse pHttpStatus_ =
+  ListTagsResponse'
+    { nextToken = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token returned to indicate that there is more data available.
+listTagsResponse_nextToken :: Lens.Lens' ListTagsResponse (Prelude.Maybe Prelude.Text)
+listTagsResponse_nextToken = Lens.lens (\ListTagsResponse' {nextToken} -> nextToken) (\s@ListTagsResponse' {} a -> s {nextToken = a} :: ListTagsResponse)
+
+-- | The tags requested for the specified resource.
+listTagsResponse_tags :: Lens.Lens' ListTagsResponse (Prelude.Maybe [Tag])
+listTagsResponse_tags = Lens.lens (\ListTagsResponse' {tags} -> tags) (\s@ListTagsResponse' {} a -> s {tags = a} :: ListTagsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsResponse_httpStatus :: Lens.Lens' ListTagsResponse Prelude.Int
+listTagsResponse_httpStatus = Lens.lens (\ListTagsResponse' {httpStatus} -> httpStatus) (\s@ListTagsResponse' {} a -> s {httpStatus = a} :: ListTagsResponse)
+
+instance Prelude.NFData ListTagsResponse where
+  rnf ListTagsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/PutConferencePreference.hs b/gen/Amazonka/AlexaBusiness/PutConferencePreference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/PutConferencePreference.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.PutConferencePreference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the conference preferences on a specific conference provider at the
+-- account level.
+module Amazonka.AlexaBusiness.PutConferencePreference
+  ( -- * Creating a Request
+    PutConferencePreference (..),
+    newPutConferencePreference,
+
+    -- * Request Lenses
+    putConferencePreference_conferencePreference,
+
+    -- * Destructuring the Response
+    PutConferencePreferenceResponse (..),
+    newPutConferencePreferenceResponse,
+
+    -- * Response Lenses
+    putConferencePreferenceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutConferencePreference' smart constructor.
+data PutConferencePreference = PutConferencePreference'
+  { -- | The conference preference of a specific conference provider.
+    conferencePreference :: ConferencePreference
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConferencePreference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conferencePreference', 'putConferencePreference_conferencePreference' - The conference preference of a specific conference provider.
+newPutConferencePreference ::
+  -- | 'conferencePreference'
+  ConferencePreference ->
+  PutConferencePreference
+newPutConferencePreference pConferencePreference_ =
+  PutConferencePreference'
+    { conferencePreference =
+        pConferencePreference_
+    }
+
+-- | The conference preference of a specific conference provider.
+putConferencePreference_conferencePreference :: Lens.Lens' PutConferencePreference ConferencePreference
+putConferencePreference_conferencePreference = Lens.lens (\PutConferencePreference' {conferencePreference} -> conferencePreference) (\s@PutConferencePreference' {} a -> s {conferencePreference = a} :: PutConferencePreference)
+
+instance Core.AWSRequest PutConferencePreference where
+  type
+    AWSResponse PutConferencePreference =
+      PutConferencePreferenceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutConferencePreferenceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutConferencePreference where
+  hashWithSalt _salt PutConferencePreference' {..} =
+    _salt `Prelude.hashWithSalt` conferencePreference
+
+instance Prelude.NFData PutConferencePreference where
+  rnf PutConferencePreference' {..} =
+    Prelude.rnf conferencePreference
+
+instance Data.ToHeaders PutConferencePreference where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.PutConferencePreference" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutConferencePreference where
+  toJSON PutConferencePreference' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ConferencePreference"
+                  Data..= conferencePreference
+              )
+          ]
+      )
+
+instance Data.ToPath PutConferencePreference where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutConferencePreference where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutConferencePreferenceResponse' smart constructor.
+data PutConferencePreferenceResponse = PutConferencePreferenceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutConferencePreferenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'putConferencePreferenceResponse_httpStatus' - The response's http status code.
+newPutConferencePreferenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutConferencePreferenceResponse
+newPutConferencePreferenceResponse pHttpStatus_ =
+  PutConferencePreferenceResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putConferencePreferenceResponse_httpStatus :: Lens.Lens' PutConferencePreferenceResponse Prelude.Int
+putConferencePreferenceResponse_httpStatus = Lens.lens (\PutConferencePreferenceResponse' {httpStatus} -> httpStatus) (\s@PutConferencePreferenceResponse' {} a -> s {httpStatus = a} :: PutConferencePreferenceResponse)
+
+instance
+  Prelude.NFData
+    PutConferencePreferenceResponse
+  where
+  rnf PutConferencePreferenceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/PutInvitationConfiguration.hs b/gen/Amazonka/AlexaBusiness/PutInvitationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/PutInvitationConfiguration.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.PutInvitationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Configures the email template for the user enrollment invitation with
+-- the specified attributes.
+module Amazonka.AlexaBusiness.PutInvitationConfiguration
+  ( -- * Creating a Request
+    PutInvitationConfiguration (..),
+    newPutInvitationConfiguration,
+
+    -- * Request Lenses
+    putInvitationConfiguration_contactEmail,
+    putInvitationConfiguration_privateSkillIds,
+    putInvitationConfiguration_organizationName,
+
+    -- * Destructuring the Response
+    PutInvitationConfigurationResponse (..),
+    newPutInvitationConfigurationResponse,
+
+    -- * Response Lenses
+    putInvitationConfigurationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutInvitationConfiguration' smart constructor.
+data PutInvitationConfiguration = PutInvitationConfiguration'
+  { -- | The email ID of the organization or individual contact that the enrolled
+    -- user can use.
+    contactEmail :: Prelude.Maybe Prelude.Text,
+    -- | The list of private skill IDs that you want to recommend to the user to
+    -- enable in the invitation.
+    privateSkillIds :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the organization sending the enrollment invite to a user.
+    organizationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutInvitationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactEmail', 'putInvitationConfiguration_contactEmail' - The email ID of the organization or individual contact that the enrolled
+-- user can use.
+--
+-- 'privateSkillIds', 'putInvitationConfiguration_privateSkillIds' - The list of private skill IDs that you want to recommend to the user to
+-- enable in the invitation.
+--
+-- 'organizationName', 'putInvitationConfiguration_organizationName' - The name of the organization sending the enrollment invite to a user.
+newPutInvitationConfiguration ::
+  -- | 'organizationName'
+  Prelude.Text ->
+  PutInvitationConfiguration
+newPutInvitationConfiguration pOrganizationName_ =
+  PutInvitationConfiguration'
+    { contactEmail =
+        Prelude.Nothing,
+      privateSkillIds = Prelude.Nothing,
+      organizationName = pOrganizationName_
+    }
+
+-- | The email ID of the organization or individual contact that the enrolled
+-- user can use.
+putInvitationConfiguration_contactEmail :: Lens.Lens' PutInvitationConfiguration (Prelude.Maybe Prelude.Text)
+putInvitationConfiguration_contactEmail = Lens.lens (\PutInvitationConfiguration' {contactEmail} -> contactEmail) (\s@PutInvitationConfiguration' {} a -> s {contactEmail = a} :: PutInvitationConfiguration)
+
+-- | The list of private skill IDs that you want to recommend to the user to
+-- enable in the invitation.
+putInvitationConfiguration_privateSkillIds :: Lens.Lens' PutInvitationConfiguration (Prelude.Maybe [Prelude.Text])
+putInvitationConfiguration_privateSkillIds = Lens.lens (\PutInvitationConfiguration' {privateSkillIds} -> privateSkillIds) (\s@PutInvitationConfiguration' {} a -> s {privateSkillIds = a} :: PutInvitationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the organization sending the enrollment invite to a user.
+putInvitationConfiguration_organizationName :: Lens.Lens' PutInvitationConfiguration Prelude.Text
+putInvitationConfiguration_organizationName = Lens.lens (\PutInvitationConfiguration' {organizationName} -> organizationName) (\s@PutInvitationConfiguration' {} a -> s {organizationName = a} :: PutInvitationConfiguration)
+
+instance Core.AWSRequest PutInvitationConfiguration where
+  type
+    AWSResponse PutInvitationConfiguration =
+      PutInvitationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutInvitationConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutInvitationConfiguration where
+  hashWithSalt _salt PutInvitationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` contactEmail
+      `Prelude.hashWithSalt` privateSkillIds
+      `Prelude.hashWithSalt` organizationName
+
+instance Prelude.NFData PutInvitationConfiguration where
+  rnf PutInvitationConfiguration' {..} =
+    Prelude.rnf contactEmail
+      `Prelude.seq` Prelude.rnf privateSkillIds
+      `Prelude.seq` Prelude.rnf organizationName
+
+instance Data.ToHeaders PutInvitationConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.PutInvitationConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutInvitationConfiguration where
+  toJSON PutInvitationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ContactEmail" Data..=) Prelude.<$> contactEmail,
+            ("PrivateSkillIds" Data..=)
+              Prelude.<$> privateSkillIds,
+            Prelude.Just
+              ("OrganizationName" Data..= organizationName)
+          ]
+      )
+
+instance Data.ToPath PutInvitationConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutInvitationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutInvitationConfigurationResponse' smart constructor.
+data PutInvitationConfigurationResponse = PutInvitationConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutInvitationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'putInvitationConfigurationResponse_httpStatus' - The response's http status code.
+newPutInvitationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutInvitationConfigurationResponse
+newPutInvitationConfigurationResponse pHttpStatus_ =
+  PutInvitationConfigurationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putInvitationConfigurationResponse_httpStatus :: Lens.Lens' PutInvitationConfigurationResponse Prelude.Int
+putInvitationConfigurationResponse_httpStatus = Lens.lens (\PutInvitationConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutInvitationConfigurationResponse' {} a -> s {httpStatus = a} :: PutInvitationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutInvitationConfigurationResponse
+  where
+  rnf PutInvitationConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/PutRoomSkillParameter.hs b/gen/Amazonka/AlexaBusiness/PutRoomSkillParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/PutRoomSkillParameter.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.PutRoomSkillParameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates room skill parameter details by room, skill, and parameter key
+-- ID. Not all skills have a room skill parameter.
+module Amazonka.AlexaBusiness.PutRoomSkillParameter
+  ( -- * Creating a Request
+    PutRoomSkillParameter (..),
+    newPutRoomSkillParameter,
+
+    -- * Request Lenses
+    putRoomSkillParameter_roomArn,
+    putRoomSkillParameter_skillId,
+    putRoomSkillParameter_roomSkillParameter,
+
+    -- * Destructuring the Response
+    PutRoomSkillParameterResponse (..),
+    newPutRoomSkillParameterResponse,
+
+    -- * Response Lenses
+    putRoomSkillParameterResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutRoomSkillParameter' smart constructor.
+data PutRoomSkillParameter = PutRoomSkillParameter'
+  { -- | The ARN of the room associated with the room skill parameter. Required.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the skill associated with the room skill parameter. Required.
+    skillId :: Prelude.Text,
+    -- | The updated room skill parameter. Required.
+    roomSkillParameter :: RoomSkillParameter
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutRoomSkillParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'putRoomSkillParameter_roomArn' - The ARN of the room associated with the room skill parameter. Required.
+--
+-- 'skillId', 'putRoomSkillParameter_skillId' - The ARN of the skill associated with the room skill parameter. Required.
+--
+-- 'roomSkillParameter', 'putRoomSkillParameter_roomSkillParameter' - The updated room skill parameter. Required.
+newPutRoomSkillParameter ::
+  -- | 'skillId'
+  Prelude.Text ->
+  -- | 'roomSkillParameter'
+  RoomSkillParameter ->
+  PutRoomSkillParameter
+newPutRoomSkillParameter
+  pSkillId_
+  pRoomSkillParameter_ =
+    PutRoomSkillParameter'
+      { roomArn = Prelude.Nothing,
+        skillId = pSkillId_,
+        roomSkillParameter = pRoomSkillParameter_
+      }
+
+-- | The ARN of the room associated with the room skill parameter. Required.
+putRoomSkillParameter_roomArn :: Lens.Lens' PutRoomSkillParameter (Prelude.Maybe Prelude.Text)
+putRoomSkillParameter_roomArn = Lens.lens (\PutRoomSkillParameter' {roomArn} -> roomArn) (\s@PutRoomSkillParameter' {} a -> s {roomArn = a} :: PutRoomSkillParameter)
+
+-- | The ARN of the skill associated with the room skill parameter. Required.
+putRoomSkillParameter_skillId :: Lens.Lens' PutRoomSkillParameter Prelude.Text
+putRoomSkillParameter_skillId = Lens.lens (\PutRoomSkillParameter' {skillId} -> skillId) (\s@PutRoomSkillParameter' {} a -> s {skillId = a} :: PutRoomSkillParameter)
+
+-- | The updated room skill parameter. Required.
+putRoomSkillParameter_roomSkillParameter :: Lens.Lens' PutRoomSkillParameter RoomSkillParameter
+putRoomSkillParameter_roomSkillParameter = Lens.lens (\PutRoomSkillParameter' {roomSkillParameter} -> roomSkillParameter) (\s@PutRoomSkillParameter' {} a -> s {roomSkillParameter = a} :: PutRoomSkillParameter)
+
+instance Core.AWSRequest PutRoomSkillParameter where
+  type
+    AWSResponse PutRoomSkillParameter =
+      PutRoomSkillParameterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutRoomSkillParameterResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutRoomSkillParameter where
+  hashWithSalt _salt PutRoomSkillParameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` skillId
+      `Prelude.hashWithSalt` roomSkillParameter
+
+instance Prelude.NFData PutRoomSkillParameter where
+  rnf PutRoomSkillParameter' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf skillId
+      `Prelude.seq` Prelude.rnf roomSkillParameter
+
+instance Data.ToHeaders PutRoomSkillParameter where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.PutRoomSkillParameter" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutRoomSkillParameter where
+  toJSON PutRoomSkillParameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RoomArn" Data..=) Prelude.<$> roomArn,
+            Prelude.Just ("SkillId" Data..= skillId),
+            Prelude.Just
+              ("RoomSkillParameter" Data..= roomSkillParameter)
+          ]
+      )
+
+instance Data.ToPath PutRoomSkillParameter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutRoomSkillParameter where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutRoomSkillParameterResponse' smart constructor.
+data PutRoomSkillParameterResponse = PutRoomSkillParameterResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutRoomSkillParameterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'putRoomSkillParameterResponse_httpStatus' - The response's http status code.
+newPutRoomSkillParameterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutRoomSkillParameterResponse
+newPutRoomSkillParameterResponse pHttpStatus_ =
+  PutRoomSkillParameterResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putRoomSkillParameterResponse_httpStatus :: Lens.Lens' PutRoomSkillParameterResponse Prelude.Int
+putRoomSkillParameterResponse_httpStatus = Lens.lens (\PutRoomSkillParameterResponse' {httpStatus} -> httpStatus) (\s@PutRoomSkillParameterResponse' {} a -> s {httpStatus = a} :: PutRoomSkillParameterResponse)
+
+instance Prelude.NFData PutRoomSkillParameterResponse where
+  rnf PutRoomSkillParameterResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/PutSkillAuthorization.hs b/gen/Amazonka/AlexaBusiness/PutSkillAuthorization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/PutSkillAuthorization.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.PutSkillAuthorization
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Links a user\'s account to a third-party skill provider. If this API
+-- operation is called by an assumed IAM role, the skill being linked must
+-- be a private skill. Also, the skill must be owned by the AWS account
+-- that assumed the IAM role.
+module Amazonka.AlexaBusiness.PutSkillAuthorization
+  ( -- * Creating a Request
+    PutSkillAuthorization (..),
+    newPutSkillAuthorization,
+
+    -- * Request Lenses
+    putSkillAuthorization_roomArn,
+    putSkillAuthorization_authorizationResult,
+    putSkillAuthorization_skillId,
+
+    -- * Destructuring the Response
+    PutSkillAuthorizationResponse (..),
+    newPutSkillAuthorizationResponse,
+
+    -- * Response Lenses
+    putSkillAuthorizationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutSkillAuthorization' smart constructor.
+data PutSkillAuthorization = PutSkillAuthorization'
+  { -- | The room that the skill is authorized for.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The authorization result specific to OAUTH code grant output. \"Code”
+    -- must be populated in the AuthorizationResult map to establish the
+    -- authorization.
+    authorizationResult :: Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique identifier of a skill.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSkillAuthorization' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'putSkillAuthorization_roomArn' - The room that the skill is authorized for.
+--
+-- 'authorizationResult', 'putSkillAuthorization_authorizationResult' - The authorization result specific to OAUTH code grant output. \"Code”
+-- must be populated in the AuthorizationResult map to establish the
+-- authorization.
+--
+-- 'skillId', 'putSkillAuthorization_skillId' - The unique identifier of a skill.
+newPutSkillAuthorization ::
+  -- | 'skillId'
+  Prelude.Text ->
+  PutSkillAuthorization
+newPutSkillAuthorization pSkillId_ =
+  PutSkillAuthorization'
+    { roomArn = Prelude.Nothing,
+      authorizationResult = Prelude.mempty,
+      skillId = pSkillId_
+    }
+
+-- | The room that the skill is authorized for.
+putSkillAuthorization_roomArn :: Lens.Lens' PutSkillAuthorization (Prelude.Maybe Prelude.Text)
+putSkillAuthorization_roomArn = Lens.lens (\PutSkillAuthorization' {roomArn} -> roomArn) (\s@PutSkillAuthorization' {} a -> s {roomArn = a} :: PutSkillAuthorization)
+
+-- | The authorization result specific to OAUTH code grant output. \"Code”
+-- must be populated in the AuthorizationResult map to establish the
+-- authorization.
+putSkillAuthorization_authorizationResult :: Lens.Lens' PutSkillAuthorization (Prelude.HashMap Prelude.Text Prelude.Text)
+putSkillAuthorization_authorizationResult = Lens.lens (\PutSkillAuthorization' {authorizationResult} -> authorizationResult) (\s@PutSkillAuthorization' {} a -> s {authorizationResult = a} :: PutSkillAuthorization) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The unique identifier of a skill.
+putSkillAuthorization_skillId :: Lens.Lens' PutSkillAuthorization Prelude.Text
+putSkillAuthorization_skillId = Lens.lens (\PutSkillAuthorization' {skillId} -> skillId) (\s@PutSkillAuthorization' {} a -> s {skillId = a} :: PutSkillAuthorization)
+
+instance Core.AWSRequest PutSkillAuthorization where
+  type
+    AWSResponse PutSkillAuthorization =
+      PutSkillAuthorizationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutSkillAuthorizationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutSkillAuthorization where
+  hashWithSalt _salt PutSkillAuthorization' {..} =
+    _salt
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` authorizationResult
+      `Prelude.hashWithSalt` skillId
+
+instance Prelude.NFData PutSkillAuthorization where
+  rnf PutSkillAuthorization' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf authorizationResult
+      `Prelude.seq` Prelude.rnf skillId
+
+instance Data.ToHeaders PutSkillAuthorization where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.PutSkillAuthorization" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutSkillAuthorization where
+  toJSON PutSkillAuthorization' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RoomArn" Data..=) Prelude.<$> roomArn,
+            Prelude.Just
+              ("AuthorizationResult" Data..= authorizationResult),
+            Prelude.Just ("SkillId" Data..= skillId)
+          ]
+      )
+
+instance Data.ToPath PutSkillAuthorization where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutSkillAuthorization where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutSkillAuthorizationResponse' smart constructor.
+data PutSkillAuthorizationResponse = PutSkillAuthorizationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSkillAuthorizationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'putSkillAuthorizationResponse_httpStatus' - The response's http status code.
+newPutSkillAuthorizationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutSkillAuthorizationResponse
+newPutSkillAuthorizationResponse pHttpStatus_ =
+  PutSkillAuthorizationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putSkillAuthorizationResponse_httpStatus :: Lens.Lens' PutSkillAuthorizationResponse Prelude.Int
+putSkillAuthorizationResponse_httpStatus = Lens.lens (\PutSkillAuthorizationResponse' {httpStatus} -> httpStatus) (\s@PutSkillAuthorizationResponse' {} a -> s {httpStatus = a} :: PutSkillAuthorizationResponse)
+
+instance Prelude.NFData PutSkillAuthorizationResponse where
+  rnf PutSkillAuthorizationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/RegisterAVSDevice.hs b/gen/Amazonka/AlexaBusiness/RegisterAVSDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/RegisterAVSDevice.hs
@@ -0,0 +1,285 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.RegisterAVSDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Registers an Alexa-enabled device built by an Original Equipment
+-- Manufacturer (OEM) using Alexa Voice Service (AVS).
+module Amazonka.AlexaBusiness.RegisterAVSDevice
+  ( -- * Creating a Request
+    RegisterAVSDevice (..),
+    newRegisterAVSDevice,
+
+    -- * Request Lenses
+    registerAVSDevice_deviceSerialNumber,
+    registerAVSDevice_roomArn,
+    registerAVSDevice_tags,
+    registerAVSDevice_clientId,
+    registerAVSDevice_userCode,
+    registerAVSDevice_productId,
+    registerAVSDevice_amazonId,
+
+    -- * Destructuring the Response
+    RegisterAVSDeviceResponse (..),
+    newRegisterAVSDeviceResponse,
+
+    -- * Response Lenses
+    registerAVSDeviceResponse_deviceArn,
+    registerAVSDeviceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRegisterAVSDevice' smart constructor.
+data RegisterAVSDevice = RegisterAVSDevice'
+  { -- | The key generated by the OEM that uniquely identifies a specified
+    -- instance of your AVS device.
+    deviceSerialNumber :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the room with which to associate your
+    -- AVS device.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The tags to be added to the specified resource. Do not provide system
+    -- tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The client ID of the OEM used for code-based linking authorization on an
+    -- AVS device.
+    clientId :: Prelude.Text,
+    -- | The code that is obtained after your AVS device has made a POST request
+    -- to LWA as a part of the Device Authorization Request component of the
+    -- OAuth code-based linking specification.
+    userCode :: Prelude.Text,
+    -- | The product ID used to identify your AVS device during authorization.
+    productId :: Prelude.Text,
+    -- | The device type ID for your AVS device generated by Amazon when the OEM
+    -- creates a new product on Amazon\'s Developer Console.
+    amazonId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterAVSDevice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceSerialNumber', 'registerAVSDevice_deviceSerialNumber' - The key generated by the OEM that uniquely identifies a specified
+-- instance of your AVS device.
+--
+-- 'roomArn', 'registerAVSDevice_roomArn' - The Amazon Resource Name (ARN) of the room with which to associate your
+-- AVS device.
+--
+-- 'tags', 'registerAVSDevice_tags' - The tags to be added to the specified resource. Do not provide system
+-- tags.
+--
+-- 'clientId', 'registerAVSDevice_clientId' - The client ID of the OEM used for code-based linking authorization on an
+-- AVS device.
+--
+-- 'userCode', 'registerAVSDevice_userCode' - The code that is obtained after your AVS device has made a POST request
+-- to LWA as a part of the Device Authorization Request component of the
+-- OAuth code-based linking specification.
+--
+-- 'productId', 'registerAVSDevice_productId' - The product ID used to identify your AVS device during authorization.
+--
+-- 'amazonId', 'registerAVSDevice_amazonId' - The device type ID for your AVS device generated by Amazon when the OEM
+-- creates a new product on Amazon\'s Developer Console.
+newRegisterAVSDevice ::
+  -- | 'clientId'
+  Prelude.Text ->
+  -- | 'userCode'
+  Prelude.Text ->
+  -- | 'productId'
+  Prelude.Text ->
+  -- | 'amazonId'
+  Prelude.Text ->
+  RegisterAVSDevice
+newRegisterAVSDevice
+  pClientId_
+  pUserCode_
+  pProductId_
+  pAmazonId_ =
+    RegisterAVSDevice'
+      { deviceSerialNumber =
+          Prelude.Nothing,
+        roomArn = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        clientId = pClientId_,
+        userCode = pUserCode_,
+        productId = pProductId_,
+        amazonId = pAmazonId_
+      }
+
+-- | The key generated by the OEM that uniquely identifies a specified
+-- instance of your AVS device.
+registerAVSDevice_deviceSerialNumber :: Lens.Lens' RegisterAVSDevice (Prelude.Maybe Prelude.Text)
+registerAVSDevice_deviceSerialNumber = Lens.lens (\RegisterAVSDevice' {deviceSerialNumber} -> deviceSerialNumber) (\s@RegisterAVSDevice' {} a -> s {deviceSerialNumber = a} :: RegisterAVSDevice)
+
+-- | The Amazon Resource Name (ARN) of the room with which to associate your
+-- AVS device.
+registerAVSDevice_roomArn :: Lens.Lens' RegisterAVSDevice (Prelude.Maybe Prelude.Text)
+registerAVSDevice_roomArn = Lens.lens (\RegisterAVSDevice' {roomArn} -> roomArn) (\s@RegisterAVSDevice' {} a -> s {roomArn = a} :: RegisterAVSDevice)
+
+-- | The tags to be added to the specified resource. Do not provide system
+-- tags.
+registerAVSDevice_tags :: Lens.Lens' RegisterAVSDevice (Prelude.Maybe [Tag])
+registerAVSDevice_tags = Lens.lens (\RegisterAVSDevice' {tags} -> tags) (\s@RegisterAVSDevice' {} a -> s {tags = a} :: RegisterAVSDevice) Prelude.. Lens.mapping Lens.coerced
+
+-- | The client ID of the OEM used for code-based linking authorization on an
+-- AVS device.
+registerAVSDevice_clientId :: Lens.Lens' RegisterAVSDevice Prelude.Text
+registerAVSDevice_clientId = Lens.lens (\RegisterAVSDevice' {clientId} -> clientId) (\s@RegisterAVSDevice' {} a -> s {clientId = a} :: RegisterAVSDevice)
+
+-- | The code that is obtained after your AVS device has made a POST request
+-- to LWA as a part of the Device Authorization Request component of the
+-- OAuth code-based linking specification.
+registerAVSDevice_userCode :: Lens.Lens' RegisterAVSDevice Prelude.Text
+registerAVSDevice_userCode = Lens.lens (\RegisterAVSDevice' {userCode} -> userCode) (\s@RegisterAVSDevice' {} a -> s {userCode = a} :: RegisterAVSDevice)
+
+-- | The product ID used to identify your AVS device during authorization.
+registerAVSDevice_productId :: Lens.Lens' RegisterAVSDevice Prelude.Text
+registerAVSDevice_productId = Lens.lens (\RegisterAVSDevice' {productId} -> productId) (\s@RegisterAVSDevice' {} a -> s {productId = a} :: RegisterAVSDevice)
+
+-- | The device type ID for your AVS device generated by Amazon when the OEM
+-- creates a new product on Amazon\'s Developer Console.
+registerAVSDevice_amazonId :: Lens.Lens' RegisterAVSDevice Prelude.Text
+registerAVSDevice_amazonId = Lens.lens (\RegisterAVSDevice' {amazonId} -> amazonId) (\s@RegisterAVSDevice' {} a -> s {amazonId = a} :: RegisterAVSDevice)
+
+instance Core.AWSRequest RegisterAVSDevice where
+  type
+    AWSResponse RegisterAVSDevice =
+      RegisterAVSDeviceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RegisterAVSDeviceResponse'
+            Prelude.<$> (x Data..?> "DeviceArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RegisterAVSDevice where
+  hashWithSalt _salt RegisterAVSDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceSerialNumber
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` clientId
+      `Prelude.hashWithSalt` userCode
+      `Prelude.hashWithSalt` productId
+      `Prelude.hashWithSalt` amazonId
+
+instance Prelude.NFData RegisterAVSDevice where
+  rnf RegisterAVSDevice' {..} =
+    Prelude.rnf deviceSerialNumber
+      `Prelude.seq` Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf clientId
+      `Prelude.seq` Prelude.rnf userCode
+      `Prelude.seq` Prelude.rnf productId
+      `Prelude.seq` Prelude.rnf amazonId
+
+instance Data.ToHeaders RegisterAVSDevice where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.RegisterAVSDevice" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RegisterAVSDevice where
+  toJSON RegisterAVSDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeviceSerialNumber" Data..=)
+              Prelude.<$> deviceSerialNumber,
+            ("RoomArn" Data..=) Prelude.<$> roomArn,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("ClientId" Data..= clientId),
+            Prelude.Just ("UserCode" Data..= userCode),
+            Prelude.Just ("ProductId" Data..= productId),
+            Prelude.Just ("AmazonId" Data..= amazonId)
+          ]
+      )
+
+instance Data.ToPath RegisterAVSDevice where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RegisterAVSDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRegisterAVSDeviceResponse' smart constructor.
+data RegisterAVSDeviceResponse = RegisterAVSDeviceResponse'
+  { -- | The ARN of the device.
+    deviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterAVSDeviceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'registerAVSDeviceResponse_deviceArn' - The ARN of the device.
+--
+-- 'httpStatus', 'registerAVSDeviceResponse_httpStatus' - The response's http status code.
+newRegisterAVSDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterAVSDeviceResponse
+newRegisterAVSDeviceResponse pHttpStatus_ =
+  RegisterAVSDeviceResponse'
+    { deviceArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the device.
+registerAVSDeviceResponse_deviceArn :: Lens.Lens' RegisterAVSDeviceResponse (Prelude.Maybe Prelude.Text)
+registerAVSDeviceResponse_deviceArn = Lens.lens (\RegisterAVSDeviceResponse' {deviceArn} -> deviceArn) (\s@RegisterAVSDeviceResponse' {} a -> s {deviceArn = a} :: RegisterAVSDeviceResponse)
+
+-- | The response's http status code.
+registerAVSDeviceResponse_httpStatus :: Lens.Lens' RegisterAVSDeviceResponse Prelude.Int
+registerAVSDeviceResponse_httpStatus = Lens.lens (\RegisterAVSDeviceResponse' {httpStatus} -> httpStatus) (\s@RegisterAVSDeviceResponse' {} a -> s {httpStatus = a} :: RegisterAVSDeviceResponse)
+
+instance Prelude.NFData RegisterAVSDeviceResponse where
+  rnf RegisterAVSDeviceResponse' {..} =
+    Prelude.rnf deviceArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/RejectSkill.hs b/gen/Amazonka/AlexaBusiness/RejectSkill.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/RejectSkill.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.RejectSkill
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a skill from the organization under a user\'s AWS account.
+-- If the skill is a private skill, it moves to an AcceptStatus of PENDING.
+-- Any private or public skill that is rejected can be added later by
+-- calling the ApproveSkill API.
+module Amazonka.AlexaBusiness.RejectSkill
+  ( -- * Creating a Request
+    RejectSkill (..),
+    newRejectSkill,
+
+    -- * Request Lenses
+    rejectSkill_skillId,
+
+    -- * Destructuring the Response
+    RejectSkillResponse (..),
+    newRejectSkillResponse,
+
+    -- * Response Lenses
+    rejectSkillResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRejectSkill' smart constructor.
+data RejectSkill = RejectSkill'
+  { -- | The unique identifier of the skill.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectSkill' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'skillId', 'rejectSkill_skillId' - The unique identifier of the skill.
+newRejectSkill ::
+  -- | 'skillId'
+  Prelude.Text ->
+  RejectSkill
+newRejectSkill pSkillId_ =
+  RejectSkill' {skillId = pSkillId_}
+
+-- | The unique identifier of the skill.
+rejectSkill_skillId :: Lens.Lens' RejectSkill Prelude.Text
+rejectSkill_skillId = Lens.lens (\RejectSkill' {skillId} -> skillId) (\s@RejectSkill' {} a -> s {skillId = a} :: RejectSkill)
+
+instance Core.AWSRequest RejectSkill where
+  type AWSResponse RejectSkill = RejectSkillResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RejectSkillResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RejectSkill where
+  hashWithSalt _salt RejectSkill' {..} =
+    _salt `Prelude.hashWithSalt` skillId
+
+instance Prelude.NFData RejectSkill where
+  rnf RejectSkill' {..} = Prelude.rnf skillId
+
+instance Data.ToHeaders RejectSkill where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.RejectSkill" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RejectSkill where
+  toJSON RejectSkill' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("SkillId" Data..= skillId)]
+      )
+
+instance Data.ToPath RejectSkill where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RejectSkill where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRejectSkillResponse' smart constructor.
+data RejectSkillResponse = RejectSkillResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectSkillResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'rejectSkillResponse_httpStatus' - The response's http status code.
+newRejectSkillResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RejectSkillResponse
+newRejectSkillResponse pHttpStatus_ =
+  RejectSkillResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+rejectSkillResponse_httpStatus :: Lens.Lens' RejectSkillResponse Prelude.Int
+rejectSkillResponse_httpStatus = Lens.lens (\RejectSkillResponse' {httpStatus} -> httpStatus) (\s@RejectSkillResponse' {} a -> s {httpStatus = a} :: RejectSkillResponse)
+
+instance Prelude.NFData RejectSkillResponse where
+  rnf RejectSkillResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/ResolveRoom.hs b/gen/Amazonka/AlexaBusiness/ResolveRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/ResolveRoom.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.ResolveRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Determines the details for the room from which a skill request was
+-- invoked. This operation is used by skill developers.
+--
+-- To query ResolveRoom from an Alexa skill, the skill ID needs to be
+-- authorized. When the skill is using an AWS Lambda function, the skill is
+-- automatically authorized when you publish your skill as a private skill
+-- to your AWS account. Skills that are hosted using a custom web service
+-- must be manually authorized. To get your skill authorized, contact AWS
+-- Support with your AWS account ID that queries the ResolveRoom API and
+-- skill ID.
+module Amazonka.AlexaBusiness.ResolveRoom
+  ( -- * Creating a Request
+    ResolveRoom (..),
+    newResolveRoom,
+
+    -- * Request Lenses
+    resolveRoom_userId,
+    resolveRoom_skillId,
+
+    -- * Destructuring the Response
+    ResolveRoomResponse (..),
+    newResolveRoomResponse,
+
+    -- * Response Lenses
+    resolveRoomResponse_roomArn,
+    resolveRoomResponse_roomName,
+    resolveRoomResponse_roomSkillParameters,
+    resolveRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResolveRoom' smart constructor.
+data ResolveRoom = ResolveRoom'
+  { -- | The ARN of the user. Required.
+    userId :: Prelude.Text,
+    -- | The ARN of the skill that was requested. Required.
+    skillId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResolveRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userId', 'resolveRoom_userId' - The ARN of the user. Required.
+--
+-- 'skillId', 'resolveRoom_skillId' - The ARN of the skill that was requested. Required.
+newResolveRoom ::
+  -- | 'userId'
+  Prelude.Text ->
+  -- | 'skillId'
+  Prelude.Text ->
+  ResolveRoom
+newResolveRoom pUserId_ pSkillId_ =
+  ResolveRoom'
+    { userId = pUserId_,
+      skillId = pSkillId_
+    }
+
+-- | The ARN of the user. Required.
+resolveRoom_userId :: Lens.Lens' ResolveRoom Prelude.Text
+resolveRoom_userId = Lens.lens (\ResolveRoom' {userId} -> userId) (\s@ResolveRoom' {} a -> s {userId = a} :: ResolveRoom)
+
+-- | The ARN of the skill that was requested. Required.
+resolveRoom_skillId :: Lens.Lens' ResolveRoom Prelude.Text
+resolveRoom_skillId = Lens.lens (\ResolveRoom' {skillId} -> skillId) (\s@ResolveRoom' {} a -> s {skillId = a} :: ResolveRoom)
+
+instance Core.AWSRequest ResolveRoom where
+  type AWSResponse ResolveRoom = ResolveRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ResolveRoomResponse'
+            Prelude.<$> (x Data..?> "RoomArn")
+            Prelude.<*> (x Data..?> "RoomName")
+            Prelude.<*> ( x
+                            Data..?> "RoomSkillParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ResolveRoom where
+  hashWithSalt _salt ResolveRoom' {..} =
+    _salt
+      `Prelude.hashWithSalt` userId
+      `Prelude.hashWithSalt` skillId
+
+instance Prelude.NFData ResolveRoom where
+  rnf ResolveRoom' {..} =
+    Prelude.rnf userId
+      `Prelude.seq` Prelude.rnf skillId
+
+instance Data.ToHeaders ResolveRoom where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.ResolveRoom" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ResolveRoom where
+  toJSON ResolveRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("UserId" Data..= userId),
+            Prelude.Just ("SkillId" Data..= skillId)
+          ]
+      )
+
+instance Data.ToPath ResolveRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResolveRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newResolveRoomResponse' smart constructor.
+data ResolveRoomResponse = ResolveRoomResponse'
+  { -- | The ARN of the room from which the skill request was invoked.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the room from which the skill request was invoked.
+    roomName :: Prelude.Maybe Prelude.Text,
+    -- | Response to get the room profile request. Required.
+    roomSkillParameters :: Prelude.Maybe [RoomSkillParameter],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResolveRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'resolveRoomResponse_roomArn' - The ARN of the room from which the skill request was invoked.
+--
+-- 'roomName', 'resolveRoomResponse_roomName' - The name of the room from which the skill request was invoked.
+--
+-- 'roomSkillParameters', 'resolveRoomResponse_roomSkillParameters' - Response to get the room profile request. Required.
+--
+-- 'httpStatus', 'resolveRoomResponse_httpStatus' - The response's http status code.
+newResolveRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ResolveRoomResponse
+newResolveRoomResponse pHttpStatus_ =
+  ResolveRoomResponse'
+    { roomArn = Prelude.Nothing,
+      roomName = Prelude.Nothing,
+      roomSkillParameters = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the room from which the skill request was invoked.
+resolveRoomResponse_roomArn :: Lens.Lens' ResolveRoomResponse (Prelude.Maybe Prelude.Text)
+resolveRoomResponse_roomArn = Lens.lens (\ResolveRoomResponse' {roomArn} -> roomArn) (\s@ResolveRoomResponse' {} a -> s {roomArn = a} :: ResolveRoomResponse)
+
+-- | The name of the room from which the skill request was invoked.
+resolveRoomResponse_roomName :: Lens.Lens' ResolveRoomResponse (Prelude.Maybe Prelude.Text)
+resolveRoomResponse_roomName = Lens.lens (\ResolveRoomResponse' {roomName} -> roomName) (\s@ResolveRoomResponse' {} a -> s {roomName = a} :: ResolveRoomResponse)
+
+-- | Response to get the room profile request. Required.
+resolveRoomResponse_roomSkillParameters :: Lens.Lens' ResolveRoomResponse (Prelude.Maybe [RoomSkillParameter])
+resolveRoomResponse_roomSkillParameters = Lens.lens (\ResolveRoomResponse' {roomSkillParameters} -> roomSkillParameters) (\s@ResolveRoomResponse' {} a -> s {roomSkillParameters = a} :: ResolveRoomResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+resolveRoomResponse_httpStatus :: Lens.Lens' ResolveRoomResponse Prelude.Int
+resolveRoomResponse_httpStatus = Lens.lens (\ResolveRoomResponse' {httpStatus} -> httpStatus) (\s@ResolveRoomResponse' {} a -> s {httpStatus = a} :: ResolveRoomResponse)
+
+instance Prelude.NFData ResolveRoomResponse where
+  rnf ResolveRoomResponse' {..} =
+    Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf roomName
+      `Prelude.seq` Prelude.rnf roomSkillParameters
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/RevokeInvitation.hs b/gen/Amazonka/AlexaBusiness/RevokeInvitation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/RevokeInvitation.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.RevokeInvitation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Revokes an invitation and invalidates the enrollment URL.
+module Amazonka.AlexaBusiness.RevokeInvitation
+  ( -- * Creating a Request
+    RevokeInvitation (..),
+    newRevokeInvitation,
+
+    -- * Request Lenses
+    revokeInvitation_enrollmentId,
+    revokeInvitation_userArn,
+
+    -- * Destructuring the Response
+    RevokeInvitationResponse (..),
+    newRevokeInvitationResponse,
+
+    -- * Response Lenses
+    revokeInvitationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRevokeInvitation' smart constructor.
+data RevokeInvitation = RevokeInvitation'
+  { -- | The ARN of the enrollment invitation to revoke. Required.
+    enrollmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the user for whom to revoke an enrollment invitation.
+    -- Required.
+    userArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeInvitation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enrollmentId', 'revokeInvitation_enrollmentId' - The ARN of the enrollment invitation to revoke. Required.
+--
+-- 'userArn', 'revokeInvitation_userArn' - The ARN of the user for whom to revoke an enrollment invitation.
+-- Required.
+newRevokeInvitation ::
+  RevokeInvitation
+newRevokeInvitation =
+  RevokeInvitation'
+    { enrollmentId = Prelude.Nothing,
+      userArn = Prelude.Nothing
+    }
+
+-- | The ARN of the enrollment invitation to revoke. Required.
+revokeInvitation_enrollmentId :: Lens.Lens' RevokeInvitation (Prelude.Maybe Prelude.Text)
+revokeInvitation_enrollmentId = Lens.lens (\RevokeInvitation' {enrollmentId} -> enrollmentId) (\s@RevokeInvitation' {} a -> s {enrollmentId = a} :: RevokeInvitation)
+
+-- | The ARN of the user for whom to revoke an enrollment invitation.
+-- Required.
+revokeInvitation_userArn :: Lens.Lens' RevokeInvitation (Prelude.Maybe Prelude.Text)
+revokeInvitation_userArn = Lens.lens (\RevokeInvitation' {userArn} -> userArn) (\s@RevokeInvitation' {} a -> s {userArn = a} :: RevokeInvitation)
+
+instance Core.AWSRequest RevokeInvitation where
+  type
+    AWSResponse RevokeInvitation =
+      RevokeInvitationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          RevokeInvitationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RevokeInvitation where
+  hashWithSalt _salt RevokeInvitation' {..} =
+    _salt
+      `Prelude.hashWithSalt` enrollmentId
+      `Prelude.hashWithSalt` userArn
+
+instance Prelude.NFData RevokeInvitation where
+  rnf RevokeInvitation' {..} =
+    Prelude.rnf enrollmentId
+      `Prelude.seq` Prelude.rnf userArn
+
+instance Data.ToHeaders RevokeInvitation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.RevokeInvitation" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RevokeInvitation where
+  toJSON RevokeInvitation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EnrollmentId" Data..=) Prelude.<$> enrollmentId,
+            ("UserArn" Data..=) Prelude.<$> userArn
+          ]
+      )
+
+instance Data.ToPath RevokeInvitation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RevokeInvitation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRevokeInvitationResponse' smart constructor.
+data RevokeInvitationResponse = RevokeInvitationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeInvitationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'revokeInvitationResponse_httpStatus' - The response's http status code.
+newRevokeInvitationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RevokeInvitationResponse
+newRevokeInvitationResponse pHttpStatus_ =
+  RevokeInvitationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+revokeInvitationResponse_httpStatus :: Lens.Lens' RevokeInvitationResponse Prelude.Int
+revokeInvitationResponse_httpStatus = Lens.lens (\RevokeInvitationResponse' {httpStatus} -> httpStatus) (\s@RevokeInvitationResponse' {} a -> s {httpStatus = a} :: RevokeInvitationResponse)
+
+instance Prelude.NFData RevokeInvitationResponse where
+  rnf RevokeInvitationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SearchAddressBooks.hs b/gen/Amazonka/AlexaBusiness/SearchAddressBooks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SearchAddressBooks.hs
@@ -0,0 +1,259 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SearchAddressBooks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches address books and lists the ones that meet a set of filter and
+-- sort criteria.
+module Amazonka.AlexaBusiness.SearchAddressBooks
+  ( -- * Creating a Request
+    SearchAddressBooks (..),
+    newSearchAddressBooks,
+
+    -- * Request Lenses
+    searchAddressBooks_filters,
+    searchAddressBooks_maxResults,
+    searchAddressBooks_nextToken,
+    searchAddressBooks_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchAddressBooksResponse (..),
+    newSearchAddressBooksResponse,
+
+    -- * Response Lenses
+    searchAddressBooksResponse_addressBooks,
+    searchAddressBooksResponse_nextToken,
+    searchAddressBooksResponse_totalCount,
+    searchAddressBooksResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchAddressBooks' smart constructor.
+data SearchAddressBooks = SearchAddressBooks'
+  { -- | The filters to use to list a specified set of address books. The
+    -- supported filter key is AddressBookName.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified MaxResults value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response only includes results beyond the token, up to the value
+    -- specified by MaxResults.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to use in listing the specified set of address books. The
+    -- supported sort key is AddressBookName.
+    sortCriteria :: Prelude.Maybe [Sort]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchAddressBooks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchAddressBooks_filters' - The filters to use to list a specified set of address books. The
+-- supported filter key is AddressBookName.
+--
+-- 'maxResults', 'searchAddressBooks_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified MaxResults value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'searchAddressBooks_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response only includes results beyond the token, up to the value
+-- specified by MaxResults.
+--
+-- 'sortCriteria', 'searchAddressBooks_sortCriteria' - The sort order to use in listing the specified set of address books. The
+-- supported sort key is AddressBookName.
+newSearchAddressBooks ::
+  SearchAddressBooks
+newSearchAddressBooks =
+  SearchAddressBooks'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filters to use to list a specified set of address books. The
+-- supported filter key is AddressBookName.
+searchAddressBooks_filters :: Lens.Lens' SearchAddressBooks (Prelude.Maybe [Filter])
+searchAddressBooks_filters = Lens.lens (\SearchAddressBooks' {filters} -> filters) (\s@SearchAddressBooks' {} a -> s {filters = a} :: SearchAddressBooks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified MaxResults value, a token is included
+-- in the response so that the remaining results can be retrieved.
+searchAddressBooks_maxResults :: Lens.Lens' SearchAddressBooks (Prelude.Maybe Prelude.Natural)
+searchAddressBooks_maxResults = Lens.lens (\SearchAddressBooks' {maxResults} -> maxResults) (\s@SearchAddressBooks' {} a -> s {maxResults = a} :: SearchAddressBooks)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response only includes results beyond the token, up to the value
+-- specified by MaxResults.
+searchAddressBooks_nextToken :: Lens.Lens' SearchAddressBooks (Prelude.Maybe Prelude.Text)
+searchAddressBooks_nextToken = Lens.lens (\SearchAddressBooks' {nextToken} -> nextToken) (\s@SearchAddressBooks' {} a -> s {nextToken = a} :: SearchAddressBooks)
+
+-- | The sort order to use in listing the specified set of address books. The
+-- supported sort key is AddressBookName.
+searchAddressBooks_sortCriteria :: Lens.Lens' SearchAddressBooks (Prelude.Maybe [Sort])
+searchAddressBooks_sortCriteria = Lens.lens (\SearchAddressBooks' {sortCriteria} -> sortCriteria) (\s@SearchAddressBooks' {} a -> s {sortCriteria = a} :: SearchAddressBooks) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest SearchAddressBooks where
+  type
+    AWSResponse SearchAddressBooks =
+      SearchAddressBooksResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchAddressBooksResponse'
+            Prelude.<$> (x Data..?> "AddressBooks" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "TotalCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchAddressBooks where
+  hashWithSalt _salt SearchAddressBooks' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchAddressBooks where
+  rnf SearchAddressBooks' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchAddressBooks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SearchAddressBooks" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchAddressBooks where
+  toJSON SearchAddressBooks' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchAddressBooks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchAddressBooks where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchAddressBooksResponse' smart constructor.
+data SearchAddressBooksResponse = SearchAddressBooksResponse'
+  { -- | The address books that meet the specified set of filter criteria, in
+    -- sort order.
+    addressBooks :: Prelude.Maybe [AddressBookData],
+    -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The total number of address books returned.
+    totalCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchAddressBooksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressBooks', 'searchAddressBooksResponse_addressBooks' - The address books that meet the specified set of filter criteria, in
+-- sort order.
+--
+-- 'nextToken', 'searchAddressBooksResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'totalCount', 'searchAddressBooksResponse_totalCount' - The total number of address books returned.
+--
+-- 'httpStatus', 'searchAddressBooksResponse_httpStatus' - The response's http status code.
+newSearchAddressBooksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchAddressBooksResponse
+newSearchAddressBooksResponse pHttpStatus_ =
+  SearchAddressBooksResponse'
+    { addressBooks =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The address books that meet the specified set of filter criteria, in
+-- sort order.
+searchAddressBooksResponse_addressBooks :: Lens.Lens' SearchAddressBooksResponse (Prelude.Maybe [AddressBookData])
+searchAddressBooksResponse_addressBooks = Lens.lens (\SearchAddressBooksResponse' {addressBooks} -> addressBooks) (\s@SearchAddressBooksResponse' {} a -> s {addressBooks = a} :: SearchAddressBooksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token returned to indicate that there is more data available.
+searchAddressBooksResponse_nextToken :: Lens.Lens' SearchAddressBooksResponse (Prelude.Maybe Prelude.Text)
+searchAddressBooksResponse_nextToken = Lens.lens (\SearchAddressBooksResponse' {nextToken} -> nextToken) (\s@SearchAddressBooksResponse' {} a -> s {nextToken = a} :: SearchAddressBooksResponse)
+
+-- | The total number of address books returned.
+searchAddressBooksResponse_totalCount :: Lens.Lens' SearchAddressBooksResponse (Prelude.Maybe Prelude.Int)
+searchAddressBooksResponse_totalCount = Lens.lens (\SearchAddressBooksResponse' {totalCount} -> totalCount) (\s@SearchAddressBooksResponse' {} a -> s {totalCount = a} :: SearchAddressBooksResponse)
+
+-- | The response's http status code.
+searchAddressBooksResponse_httpStatus :: Lens.Lens' SearchAddressBooksResponse Prelude.Int
+searchAddressBooksResponse_httpStatus = Lens.lens (\SearchAddressBooksResponse' {httpStatus} -> httpStatus) (\s@SearchAddressBooksResponse' {} a -> s {httpStatus = a} :: SearchAddressBooksResponse)
+
+instance Prelude.NFData SearchAddressBooksResponse where
+  rnf SearchAddressBooksResponse' {..} =
+    Prelude.rnf addressBooks
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SearchContacts.hs b/gen/Amazonka/AlexaBusiness/SearchContacts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SearchContacts.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SearchContacts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches contacts and lists the ones that meet a set of filter and sort
+-- criteria.
+module Amazonka.AlexaBusiness.SearchContacts
+  ( -- * Creating a Request
+    SearchContacts (..),
+    newSearchContacts,
+
+    -- * Request Lenses
+    searchContacts_filters,
+    searchContacts_maxResults,
+    searchContacts_nextToken,
+    searchContacts_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchContactsResponse (..),
+    newSearchContactsResponse,
+
+    -- * Response Lenses
+    searchContactsResponse_contacts,
+    searchContactsResponse_nextToken,
+    searchContactsResponse_totalCount,
+    searchContactsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchContacts' smart constructor.
+data SearchContacts = SearchContacts'
+  { -- | The filters to use to list a specified set of address books. The
+    -- supported filter keys are DisplayName, FirstName, LastName, and
+    -- AddressBookArns.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified MaxResults value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response only includes results beyond the token, up to the value
+    -- specified by MaxResults.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to use in listing the specified set of contacts. The
+    -- supported sort keys are DisplayName, FirstName, and LastName.
+    sortCriteria :: Prelude.Maybe [Sort]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchContacts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchContacts_filters' - The filters to use to list a specified set of address books. The
+-- supported filter keys are DisplayName, FirstName, LastName, and
+-- AddressBookArns.
+--
+-- 'maxResults', 'searchContacts_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified MaxResults value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'searchContacts_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response only includes results beyond the token, up to the value
+-- specified by MaxResults.
+--
+-- 'sortCriteria', 'searchContacts_sortCriteria' - The sort order to use in listing the specified set of contacts. The
+-- supported sort keys are DisplayName, FirstName, and LastName.
+newSearchContacts ::
+  SearchContacts
+newSearchContacts =
+  SearchContacts'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filters to use to list a specified set of address books. The
+-- supported filter keys are DisplayName, FirstName, LastName, and
+-- AddressBookArns.
+searchContacts_filters :: Lens.Lens' SearchContacts (Prelude.Maybe [Filter])
+searchContacts_filters = Lens.lens (\SearchContacts' {filters} -> filters) (\s@SearchContacts' {} a -> s {filters = a} :: SearchContacts) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified MaxResults value, a token is included
+-- in the response so that the remaining results can be retrieved.
+searchContacts_maxResults :: Lens.Lens' SearchContacts (Prelude.Maybe Prelude.Natural)
+searchContacts_maxResults = Lens.lens (\SearchContacts' {maxResults} -> maxResults) (\s@SearchContacts' {} a -> s {maxResults = a} :: SearchContacts)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response only includes results beyond the token, up to the value
+-- specified by MaxResults.
+searchContacts_nextToken :: Lens.Lens' SearchContacts (Prelude.Maybe Prelude.Text)
+searchContacts_nextToken = Lens.lens (\SearchContacts' {nextToken} -> nextToken) (\s@SearchContacts' {} a -> s {nextToken = a} :: SearchContacts)
+
+-- | The sort order to use in listing the specified set of contacts. The
+-- supported sort keys are DisplayName, FirstName, and LastName.
+searchContacts_sortCriteria :: Lens.Lens' SearchContacts (Prelude.Maybe [Sort])
+searchContacts_sortCriteria = Lens.lens (\SearchContacts' {sortCriteria} -> sortCriteria) (\s@SearchContacts' {} a -> s {sortCriteria = a} :: SearchContacts) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest SearchContacts where
+  type
+    AWSResponse SearchContacts =
+      SearchContactsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchContactsResponse'
+            Prelude.<$> (x Data..?> "Contacts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "TotalCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchContacts where
+  hashWithSalt _salt SearchContacts' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchContacts where
+  rnf SearchContacts' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchContacts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SearchContacts" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchContacts where
+  toJSON SearchContacts' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchContacts where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchContacts where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchContactsResponse' smart constructor.
+data SearchContactsResponse = SearchContactsResponse'
+  { -- | The contacts that meet the specified set of filter criteria, in sort
+    -- order.
+    contacts :: Prelude.Maybe [ContactData],
+    -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The total number of contacts returned.
+    totalCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchContactsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contacts', 'searchContactsResponse_contacts' - The contacts that meet the specified set of filter criteria, in sort
+-- order.
+--
+-- 'nextToken', 'searchContactsResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'totalCount', 'searchContactsResponse_totalCount' - The total number of contacts returned.
+--
+-- 'httpStatus', 'searchContactsResponse_httpStatus' - The response's http status code.
+newSearchContactsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchContactsResponse
+newSearchContactsResponse pHttpStatus_ =
+  SearchContactsResponse'
+    { contacts = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The contacts that meet the specified set of filter criteria, in sort
+-- order.
+searchContactsResponse_contacts :: Lens.Lens' SearchContactsResponse (Prelude.Maybe [ContactData])
+searchContactsResponse_contacts = Lens.lens (\SearchContactsResponse' {contacts} -> contacts) (\s@SearchContactsResponse' {} a -> s {contacts = a} :: SearchContactsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token returned to indicate that there is more data available.
+searchContactsResponse_nextToken :: Lens.Lens' SearchContactsResponse (Prelude.Maybe Prelude.Text)
+searchContactsResponse_nextToken = Lens.lens (\SearchContactsResponse' {nextToken} -> nextToken) (\s@SearchContactsResponse' {} a -> s {nextToken = a} :: SearchContactsResponse)
+
+-- | The total number of contacts returned.
+searchContactsResponse_totalCount :: Lens.Lens' SearchContactsResponse (Prelude.Maybe Prelude.Int)
+searchContactsResponse_totalCount = Lens.lens (\SearchContactsResponse' {totalCount} -> totalCount) (\s@SearchContactsResponse' {} a -> s {totalCount = a} :: SearchContactsResponse)
+
+-- | The response's http status code.
+searchContactsResponse_httpStatus :: Lens.Lens' SearchContactsResponse Prelude.Int
+searchContactsResponse_httpStatus = Lens.lens (\SearchContactsResponse' {httpStatus} -> httpStatus) (\s@SearchContactsResponse' {} a -> s {httpStatus = a} :: SearchContactsResponse)
+
+instance Prelude.NFData SearchContactsResponse where
+  rnf SearchContactsResponse' {..} =
+    Prelude.rnf contacts
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SearchDevices.hs b/gen/Amazonka/AlexaBusiness/SearchDevices.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SearchDevices.hs
@@ -0,0 +1,296 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SearchDevices
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches devices and lists the ones that meet a set of filter criteria.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.SearchDevices
+  ( -- * Creating a Request
+    SearchDevices (..),
+    newSearchDevices,
+
+    -- * Request Lenses
+    searchDevices_filters,
+    searchDevices_maxResults,
+    searchDevices_nextToken,
+    searchDevices_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchDevicesResponse (..),
+    newSearchDevicesResponse,
+
+    -- * Response Lenses
+    searchDevicesResponse_devices,
+    searchDevicesResponse_nextToken,
+    searchDevicesResponse_totalCount,
+    searchDevicesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchDevices' smart constructor.
+data SearchDevices = SearchDevices'
+  { -- | The filters to use to list a specified set of devices. Supported filter
+    -- keys are DeviceName, DeviceStatus, DeviceStatusDetailCode, RoomName,
+    -- DeviceType, DeviceSerialNumber, UnassociatedOnly, ConnectionStatus
+    -- (ONLINE and OFFLINE), NetworkProfileName, NetworkProfileArn, Feature,
+    -- and FailureCode.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by @MaxResults@.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to use in listing the specified set of devices. Supported
+    -- sort keys are DeviceName, DeviceStatus, RoomName, DeviceType,
+    -- DeviceSerialNumber, ConnectionStatus, NetworkProfileName,
+    -- NetworkProfileArn, Feature, and FailureCode.
+    sortCriteria :: Prelude.Maybe [Sort]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchDevices' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchDevices_filters' - The filters to use to list a specified set of devices. Supported filter
+-- keys are DeviceName, DeviceStatus, DeviceStatusDetailCode, RoomName,
+-- DeviceType, DeviceSerialNumber, UnassociatedOnly, ConnectionStatus
+-- (ONLINE and OFFLINE), NetworkProfileName, NetworkProfileArn, Feature,
+-- and FailureCode.
+--
+-- 'maxResults', 'searchDevices_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'searchDevices_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+--
+-- 'sortCriteria', 'searchDevices_sortCriteria' - The sort order to use in listing the specified set of devices. Supported
+-- sort keys are DeviceName, DeviceStatus, RoomName, DeviceType,
+-- DeviceSerialNumber, ConnectionStatus, NetworkProfileName,
+-- NetworkProfileArn, Feature, and FailureCode.
+newSearchDevices ::
+  SearchDevices
+newSearchDevices =
+  SearchDevices'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filters to use to list a specified set of devices. Supported filter
+-- keys are DeviceName, DeviceStatus, DeviceStatusDetailCode, RoomName,
+-- DeviceType, DeviceSerialNumber, UnassociatedOnly, ConnectionStatus
+-- (ONLINE and OFFLINE), NetworkProfileName, NetworkProfileArn, Feature,
+-- and FailureCode.
+searchDevices_filters :: Lens.Lens' SearchDevices (Prelude.Maybe [Filter])
+searchDevices_filters = Lens.lens (\SearchDevices' {filters} -> filters) (\s@SearchDevices' {} a -> s {filters = a} :: SearchDevices) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+searchDevices_maxResults :: Lens.Lens' SearchDevices (Prelude.Maybe Prelude.Natural)
+searchDevices_maxResults = Lens.lens (\SearchDevices' {maxResults} -> maxResults) (\s@SearchDevices' {} a -> s {maxResults = a} :: SearchDevices)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+searchDevices_nextToken :: Lens.Lens' SearchDevices (Prelude.Maybe Prelude.Text)
+searchDevices_nextToken = Lens.lens (\SearchDevices' {nextToken} -> nextToken) (\s@SearchDevices' {} a -> s {nextToken = a} :: SearchDevices)
+
+-- | The sort order to use in listing the specified set of devices. Supported
+-- sort keys are DeviceName, DeviceStatus, RoomName, DeviceType,
+-- DeviceSerialNumber, ConnectionStatus, NetworkProfileName,
+-- NetworkProfileArn, Feature, and FailureCode.
+searchDevices_sortCriteria :: Lens.Lens' SearchDevices (Prelude.Maybe [Sort])
+searchDevices_sortCriteria = Lens.lens (\SearchDevices' {sortCriteria} -> sortCriteria) (\s@SearchDevices' {} a -> s {sortCriteria = a} :: SearchDevices) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager SearchDevices where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchDevicesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchDevicesResponse_devices
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchDevices_nextToken
+          Lens..~ rs
+          Lens.^? searchDevicesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchDevices where
+  type
+    AWSResponse SearchDevices =
+      SearchDevicesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchDevicesResponse'
+            Prelude.<$> (x Data..?> "Devices" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "TotalCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchDevices where
+  hashWithSalt _salt SearchDevices' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchDevices where
+  rnf SearchDevices' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchDevices where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SearchDevices" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchDevices where
+  toJSON SearchDevices' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchDevices where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchDevices where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchDevicesResponse' smart constructor.
+data SearchDevicesResponse = SearchDevicesResponse'
+  { -- | The devices that meet the specified set of filter criteria, in sort
+    -- order.
+    devices :: Prelude.Maybe [DeviceData],
+    -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The total number of devices returned.
+    totalCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchDevicesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'devices', 'searchDevicesResponse_devices' - The devices that meet the specified set of filter criteria, in sort
+-- order.
+--
+-- 'nextToken', 'searchDevicesResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'totalCount', 'searchDevicesResponse_totalCount' - The total number of devices returned.
+--
+-- 'httpStatus', 'searchDevicesResponse_httpStatus' - The response's http status code.
+newSearchDevicesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchDevicesResponse
+newSearchDevicesResponse pHttpStatus_ =
+  SearchDevicesResponse'
+    { devices = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The devices that meet the specified set of filter criteria, in sort
+-- order.
+searchDevicesResponse_devices :: Lens.Lens' SearchDevicesResponse (Prelude.Maybe [DeviceData])
+searchDevicesResponse_devices = Lens.lens (\SearchDevicesResponse' {devices} -> devices) (\s@SearchDevicesResponse' {} a -> s {devices = a} :: SearchDevicesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token returned to indicate that there is more data available.
+searchDevicesResponse_nextToken :: Lens.Lens' SearchDevicesResponse (Prelude.Maybe Prelude.Text)
+searchDevicesResponse_nextToken = Lens.lens (\SearchDevicesResponse' {nextToken} -> nextToken) (\s@SearchDevicesResponse' {} a -> s {nextToken = a} :: SearchDevicesResponse)
+
+-- | The total number of devices returned.
+searchDevicesResponse_totalCount :: Lens.Lens' SearchDevicesResponse (Prelude.Maybe Prelude.Int)
+searchDevicesResponse_totalCount = Lens.lens (\SearchDevicesResponse' {totalCount} -> totalCount) (\s@SearchDevicesResponse' {} a -> s {totalCount = a} :: SearchDevicesResponse)
+
+-- | The response's http status code.
+searchDevicesResponse_httpStatus :: Lens.Lens' SearchDevicesResponse Prelude.Int
+searchDevicesResponse_httpStatus = Lens.lens (\SearchDevicesResponse' {httpStatus} -> httpStatus) (\s@SearchDevicesResponse' {} a -> s {httpStatus = a} :: SearchDevicesResponse)
+
+instance Prelude.NFData SearchDevicesResponse where
+  rnf SearchDevicesResponse' {..} =
+    Prelude.rnf devices
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SearchNetworkProfiles.hs b/gen/Amazonka/AlexaBusiness/SearchNetworkProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SearchNetworkProfiles.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SearchNetworkProfiles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches network profiles and lists the ones that meet a set of filter
+-- and sort criteria.
+module Amazonka.AlexaBusiness.SearchNetworkProfiles
+  ( -- * Creating a Request
+    SearchNetworkProfiles (..),
+    newSearchNetworkProfiles,
+
+    -- * Request Lenses
+    searchNetworkProfiles_filters,
+    searchNetworkProfiles_maxResults,
+    searchNetworkProfiles_nextToken,
+    searchNetworkProfiles_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchNetworkProfilesResponse (..),
+    newSearchNetworkProfilesResponse,
+
+    -- * Response Lenses
+    searchNetworkProfilesResponse_networkProfiles,
+    searchNetworkProfilesResponse_nextToken,
+    searchNetworkProfilesResponse_totalCount,
+    searchNetworkProfilesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchNetworkProfiles' smart constructor.
+data SearchNetworkProfiles = SearchNetworkProfiles'
+  { -- | The filters to use to list a specified set of network profiles. Valid
+    -- filters are NetworkProfileName, Ssid, and SecurityType.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified MaxResults value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by MaxResults.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to use to list the specified set of network profiles.
+    -- Valid sort criteria includes NetworkProfileName, Ssid, and SecurityType.
+    sortCriteria :: Prelude.Maybe [Sort]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchNetworkProfiles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchNetworkProfiles_filters' - The filters to use to list a specified set of network profiles. Valid
+-- filters are NetworkProfileName, Ssid, and SecurityType.
+--
+-- 'maxResults', 'searchNetworkProfiles_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified MaxResults value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'searchNetworkProfiles_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by MaxResults.
+--
+-- 'sortCriteria', 'searchNetworkProfiles_sortCriteria' - The sort order to use to list the specified set of network profiles.
+-- Valid sort criteria includes NetworkProfileName, Ssid, and SecurityType.
+newSearchNetworkProfiles ::
+  SearchNetworkProfiles
+newSearchNetworkProfiles =
+  SearchNetworkProfiles'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filters to use to list a specified set of network profiles. Valid
+-- filters are NetworkProfileName, Ssid, and SecurityType.
+searchNetworkProfiles_filters :: Lens.Lens' SearchNetworkProfiles (Prelude.Maybe [Filter])
+searchNetworkProfiles_filters = Lens.lens (\SearchNetworkProfiles' {filters} -> filters) (\s@SearchNetworkProfiles' {} a -> s {filters = a} :: SearchNetworkProfiles) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified MaxResults value, a token is included
+-- in the response so that the remaining results can be retrieved.
+searchNetworkProfiles_maxResults :: Lens.Lens' SearchNetworkProfiles (Prelude.Maybe Prelude.Natural)
+searchNetworkProfiles_maxResults = Lens.lens (\SearchNetworkProfiles' {maxResults} -> maxResults) (\s@SearchNetworkProfiles' {} a -> s {maxResults = a} :: SearchNetworkProfiles)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by MaxResults.
+searchNetworkProfiles_nextToken :: Lens.Lens' SearchNetworkProfiles (Prelude.Maybe Prelude.Text)
+searchNetworkProfiles_nextToken = Lens.lens (\SearchNetworkProfiles' {nextToken} -> nextToken) (\s@SearchNetworkProfiles' {} a -> s {nextToken = a} :: SearchNetworkProfiles)
+
+-- | The sort order to use to list the specified set of network profiles.
+-- Valid sort criteria includes NetworkProfileName, Ssid, and SecurityType.
+searchNetworkProfiles_sortCriteria :: Lens.Lens' SearchNetworkProfiles (Prelude.Maybe [Sort])
+searchNetworkProfiles_sortCriteria = Lens.lens (\SearchNetworkProfiles' {sortCriteria} -> sortCriteria) (\s@SearchNetworkProfiles' {} a -> s {sortCriteria = a} :: SearchNetworkProfiles) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest SearchNetworkProfiles where
+  type
+    AWSResponse SearchNetworkProfiles =
+      SearchNetworkProfilesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchNetworkProfilesResponse'
+            Prelude.<$> ( x
+                            Data..?> "NetworkProfiles"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "TotalCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchNetworkProfiles where
+  hashWithSalt _salt SearchNetworkProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchNetworkProfiles where
+  rnf SearchNetworkProfiles' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchNetworkProfiles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SearchNetworkProfiles" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchNetworkProfiles where
+  toJSON SearchNetworkProfiles' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchNetworkProfiles where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchNetworkProfiles where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchNetworkProfilesResponse' smart constructor.
+data SearchNetworkProfilesResponse = SearchNetworkProfilesResponse'
+  { -- | The network profiles that meet the specified set of filter criteria, in
+    -- sort order. It is a list of NetworkProfileData objects.
+    networkProfiles :: Prelude.Maybe [NetworkProfileData],
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by MaxResults.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The total number of network profiles returned.
+    totalCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchNetworkProfilesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkProfiles', 'searchNetworkProfilesResponse_networkProfiles' - The network profiles that meet the specified set of filter criteria, in
+-- sort order. It is a list of NetworkProfileData objects.
+--
+-- 'nextToken', 'searchNetworkProfilesResponse_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by MaxResults.
+--
+-- 'totalCount', 'searchNetworkProfilesResponse_totalCount' - The total number of network profiles returned.
+--
+-- 'httpStatus', 'searchNetworkProfilesResponse_httpStatus' - The response's http status code.
+newSearchNetworkProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchNetworkProfilesResponse
+newSearchNetworkProfilesResponse pHttpStatus_ =
+  SearchNetworkProfilesResponse'
+    { networkProfiles =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The network profiles that meet the specified set of filter criteria, in
+-- sort order. It is a list of NetworkProfileData objects.
+searchNetworkProfilesResponse_networkProfiles :: Lens.Lens' SearchNetworkProfilesResponse (Prelude.Maybe [NetworkProfileData])
+searchNetworkProfilesResponse_networkProfiles = Lens.lens (\SearchNetworkProfilesResponse' {networkProfiles} -> networkProfiles) (\s@SearchNetworkProfilesResponse' {} a -> s {networkProfiles = a} :: SearchNetworkProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by MaxResults.
+searchNetworkProfilesResponse_nextToken :: Lens.Lens' SearchNetworkProfilesResponse (Prelude.Maybe Prelude.Text)
+searchNetworkProfilesResponse_nextToken = Lens.lens (\SearchNetworkProfilesResponse' {nextToken} -> nextToken) (\s@SearchNetworkProfilesResponse' {} a -> s {nextToken = a} :: SearchNetworkProfilesResponse)
+
+-- | The total number of network profiles returned.
+searchNetworkProfilesResponse_totalCount :: Lens.Lens' SearchNetworkProfilesResponse (Prelude.Maybe Prelude.Int)
+searchNetworkProfilesResponse_totalCount = Lens.lens (\SearchNetworkProfilesResponse' {totalCount} -> totalCount) (\s@SearchNetworkProfilesResponse' {} a -> s {totalCount = a} :: SearchNetworkProfilesResponse)
+
+-- | The response's http status code.
+searchNetworkProfilesResponse_httpStatus :: Lens.Lens' SearchNetworkProfilesResponse Prelude.Int
+searchNetworkProfilesResponse_httpStatus = Lens.lens (\SearchNetworkProfilesResponse' {httpStatus} -> httpStatus) (\s@SearchNetworkProfilesResponse' {} a -> s {httpStatus = a} :: SearchNetworkProfilesResponse)
+
+instance Prelude.NFData SearchNetworkProfilesResponse where
+  rnf SearchNetworkProfilesResponse' {..} =
+    Prelude.rnf networkProfiles
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SearchProfiles.hs b/gen/Amazonka/AlexaBusiness/SearchProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SearchProfiles.hs
@@ -0,0 +1,283 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SearchProfiles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches room profiles and lists the ones that meet a set of filter
+-- criteria.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.SearchProfiles
+  ( -- * Creating a Request
+    SearchProfiles (..),
+    newSearchProfiles,
+
+    -- * Request Lenses
+    searchProfiles_filters,
+    searchProfiles_maxResults,
+    searchProfiles_nextToken,
+    searchProfiles_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchProfilesResponse (..),
+    newSearchProfilesResponse,
+
+    -- * Response Lenses
+    searchProfilesResponse_nextToken,
+    searchProfilesResponse_profiles,
+    searchProfilesResponse_totalCount,
+    searchProfilesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchProfiles' smart constructor.
+data SearchProfiles = SearchProfiles'
+  { -- | The filters to use to list a specified set of room profiles. Supported
+    -- filter keys are ProfileName and Address. Required.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by @MaxResults@.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to use in listing the specified set of room profiles.
+    -- Supported sort keys are ProfileName and Address.
+    sortCriteria :: Prelude.Maybe [Sort]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchProfiles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchProfiles_filters' - The filters to use to list a specified set of room profiles. Supported
+-- filter keys are ProfileName and Address. Required.
+--
+-- 'maxResults', 'searchProfiles_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'searchProfiles_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+--
+-- 'sortCriteria', 'searchProfiles_sortCriteria' - The sort order to use in listing the specified set of room profiles.
+-- Supported sort keys are ProfileName and Address.
+newSearchProfiles ::
+  SearchProfiles
+newSearchProfiles =
+  SearchProfiles'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filters to use to list a specified set of room profiles. Supported
+-- filter keys are ProfileName and Address. Required.
+searchProfiles_filters :: Lens.Lens' SearchProfiles (Prelude.Maybe [Filter])
+searchProfiles_filters = Lens.lens (\SearchProfiles' {filters} -> filters) (\s@SearchProfiles' {} a -> s {filters = a} :: SearchProfiles) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+searchProfiles_maxResults :: Lens.Lens' SearchProfiles (Prelude.Maybe Prelude.Natural)
+searchProfiles_maxResults = Lens.lens (\SearchProfiles' {maxResults} -> maxResults) (\s@SearchProfiles' {} a -> s {maxResults = a} :: SearchProfiles)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+searchProfiles_nextToken :: Lens.Lens' SearchProfiles (Prelude.Maybe Prelude.Text)
+searchProfiles_nextToken = Lens.lens (\SearchProfiles' {nextToken} -> nextToken) (\s@SearchProfiles' {} a -> s {nextToken = a} :: SearchProfiles)
+
+-- | The sort order to use in listing the specified set of room profiles.
+-- Supported sort keys are ProfileName and Address.
+searchProfiles_sortCriteria :: Lens.Lens' SearchProfiles (Prelude.Maybe [Sort])
+searchProfiles_sortCriteria = Lens.lens (\SearchProfiles' {sortCriteria} -> sortCriteria) (\s@SearchProfiles' {} a -> s {sortCriteria = a} :: SearchProfiles) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager SearchProfiles where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchProfilesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchProfilesResponse_profiles
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchProfiles_nextToken
+          Lens..~ rs
+          Lens.^? searchProfilesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchProfiles where
+  type
+    AWSResponse SearchProfiles =
+      SearchProfilesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchProfilesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Profiles" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TotalCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchProfiles where
+  hashWithSalt _salt SearchProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchProfiles where
+  rnf SearchProfiles' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchProfiles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SearchProfiles" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchProfiles where
+  toJSON SearchProfiles' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchProfiles where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchProfiles where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchProfilesResponse' smart constructor.
+data SearchProfilesResponse = SearchProfilesResponse'
+  { -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The profiles that meet the specified set of filter criteria, in sort
+    -- order.
+    profiles :: Prelude.Maybe [ProfileData],
+    -- | The total number of room profiles returned.
+    totalCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchProfilesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'searchProfilesResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'profiles', 'searchProfilesResponse_profiles' - The profiles that meet the specified set of filter criteria, in sort
+-- order.
+--
+-- 'totalCount', 'searchProfilesResponse_totalCount' - The total number of room profiles returned.
+--
+-- 'httpStatus', 'searchProfilesResponse_httpStatus' - The response's http status code.
+newSearchProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchProfilesResponse
+newSearchProfilesResponse pHttpStatus_ =
+  SearchProfilesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      profiles = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token returned to indicate that there is more data available.
+searchProfilesResponse_nextToken :: Lens.Lens' SearchProfilesResponse (Prelude.Maybe Prelude.Text)
+searchProfilesResponse_nextToken = Lens.lens (\SearchProfilesResponse' {nextToken} -> nextToken) (\s@SearchProfilesResponse' {} a -> s {nextToken = a} :: SearchProfilesResponse)
+
+-- | The profiles that meet the specified set of filter criteria, in sort
+-- order.
+searchProfilesResponse_profiles :: Lens.Lens' SearchProfilesResponse (Prelude.Maybe [ProfileData])
+searchProfilesResponse_profiles = Lens.lens (\SearchProfilesResponse' {profiles} -> profiles) (\s@SearchProfilesResponse' {} a -> s {profiles = a} :: SearchProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of room profiles returned.
+searchProfilesResponse_totalCount :: Lens.Lens' SearchProfilesResponse (Prelude.Maybe Prelude.Int)
+searchProfilesResponse_totalCount = Lens.lens (\SearchProfilesResponse' {totalCount} -> totalCount) (\s@SearchProfilesResponse' {} a -> s {totalCount = a} :: SearchProfilesResponse)
+
+-- | The response's http status code.
+searchProfilesResponse_httpStatus :: Lens.Lens' SearchProfilesResponse Prelude.Int
+searchProfilesResponse_httpStatus = Lens.lens (\SearchProfilesResponse' {httpStatus} -> httpStatus) (\s@SearchProfilesResponse' {} a -> s {httpStatus = a} :: SearchProfilesResponse)
+
+instance Prelude.NFData SearchProfilesResponse where
+  rnf SearchProfilesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf profiles
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SearchRooms.hs b/gen/Amazonka/AlexaBusiness/SearchRooms.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SearchRooms.hs
@@ -0,0 +1,277 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SearchRooms
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches rooms and lists the ones that meet a set of filter and sort
+-- criteria.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.SearchRooms
+  ( -- * Creating a Request
+    SearchRooms (..),
+    newSearchRooms,
+
+    -- * Request Lenses
+    searchRooms_filters,
+    searchRooms_maxResults,
+    searchRooms_nextToken,
+    searchRooms_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchRoomsResponse (..),
+    newSearchRoomsResponse,
+
+    -- * Response Lenses
+    searchRoomsResponse_nextToken,
+    searchRoomsResponse_rooms,
+    searchRoomsResponse_totalCount,
+    searchRoomsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchRooms' smart constructor.
+data SearchRooms = SearchRooms'
+  { -- | The filters to use to list a specified set of rooms. The supported
+    -- filter keys are RoomName and ProfileName.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by @MaxResults@.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to use in listing the specified set of rooms. The
+    -- supported sort keys are RoomName and ProfileName.
+    sortCriteria :: Prelude.Maybe [Sort]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchRooms' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchRooms_filters' - The filters to use to list a specified set of rooms. The supported
+-- filter keys are RoomName and ProfileName.
+--
+-- 'maxResults', 'searchRooms_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'searchRooms_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+--
+-- 'sortCriteria', 'searchRooms_sortCriteria' - The sort order to use in listing the specified set of rooms. The
+-- supported sort keys are RoomName and ProfileName.
+newSearchRooms ::
+  SearchRooms
+newSearchRooms =
+  SearchRooms'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filters to use to list a specified set of rooms. The supported
+-- filter keys are RoomName and ProfileName.
+searchRooms_filters :: Lens.Lens' SearchRooms (Prelude.Maybe [Filter])
+searchRooms_filters = Lens.lens (\SearchRooms' {filters} -> filters) (\s@SearchRooms' {} a -> s {filters = a} :: SearchRooms) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+searchRooms_maxResults :: Lens.Lens' SearchRooms (Prelude.Maybe Prelude.Natural)
+searchRooms_maxResults = Lens.lens (\SearchRooms' {maxResults} -> maxResults) (\s@SearchRooms' {} a -> s {maxResults = a} :: SearchRooms)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@.
+searchRooms_nextToken :: Lens.Lens' SearchRooms (Prelude.Maybe Prelude.Text)
+searchRooms_nextToken = Lens.lens (\SearchRooms' {nextToken} -> nextToken) (\s@SearchRooms' {} a -> s {nextToken = a} :: SearchRooms)
+
+-- | The sort order to use in listing the specified set of rooms. The
+-- supported sort keys are RoomName and ProfileName.
+searchRooms_sortCriteria :: Lens.Lens' SearchRooms (Prelude.Maybe [Sort])
+searchRooms_sortCriteria = Lens.lens (\SearchRooms' {sortCriteria} -> sortCriteria) (\s@SearchRooms' {} a -> s {sortCriteria = a} :: SearchRooms) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager SearchRooms where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchRoomsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchRoomsResponse_rooms
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchRooms_nextToken
+          Lens..~ rs
+          Lens.^? searchRoomsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchRooms where
+  type AWSResponse SearchRooms = SearchRoomsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchRoomsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Rooms" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TotalCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchRooms where
+  hashWithSalt _salt SearchRooms' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchRooms where
+  rnf SearchRooms' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchRooms where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SearchRooms" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchRooms where
+  toJSON SearchRooms' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchRooms where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchRooms where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchRoomsResponse' smart constructor.
+data SearchRoomsResponse = SearchRoomsResponse'
+  { -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The rooms that meet the specified set of filter criteria, in sort order.
+    rooms :: Prelude.Maybe [RoomData],
+    -- | The total number of rooms returned.
+    totalCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchRoomsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'searchRoomsResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'rooms', 'searchRoomsResponse_rooms' - The rooms that meet the specified set of filter criteria, in sort order.
+--
+-- 'totalCount', 'searchRoomsResponse_totalCount' - The total number of rooms returned.
+--
+-- 'httpStatus', 'searchRoomsResponse_httpStatus' - The response's http status code.
+newSearchRoomsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchRoomsResponse
+newSearchRoomsResponse pHttpStatus_ =
+  SearchRoomsResponse'
+    { nextToken = Prelude.Nothing,
+      rooms = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token returned to indicate that there is more data available.
+searchRoomsResponse_nextToken :: Lens.Lens' SearchRoomsResponse (Prelude.Maybe Prelude.Text)
+searchRoomsResponse_nextToken = Lens.lens (\SearchRoomsResponse' {nextToken} -> nextToken) (\s@SearchRoomsResponse' {} a -> s {nextToken = a} :: SearchRoomsResponse)
+
+-- | The rooms that meet the specified set of filter criteria, in sort order.
+searchRoomsResponse_rooms :: Lens.Lens' SearchRoomsResponse (Prelude.Maybe [RoomData])
+searchRoomsResponse_rooms = Lens.lens (\SearchRoomsResponse' {rooms} -> rooms) (\s@SearchRoomsResponse' {} a -> s {rooms = a} :: SearchRoomsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of rooms returned.
+searchRoomsResponse_totalCount :: Lens.Lens' SearchRoomsResponse (Prelude.Maybe Prelude.Int)
+searchRoomsResponse_totalCount = Lens.lens (\SearchRoomsResponse' {totalCount} -> totalCount) (\s@SearchRoomsResponse' {} a -> s {totalCount = a} :: SearchRoomsResponse)
+
+-- | The response's http status code.
+searchRoomsResponse_httpStatus :: Lens.Lens' SearchRoomsResponse Prelude.Int
+searchRoomsResponse_httpStatus = Lens.lens (\SearchRoomsResponse' {httpStatus} -> httpStatus) (\s@SearchRoomsResponse' {} a -> s {httpStatus = a} :: SearchRoomsResponse)
+
+instance Prelude.NFData SearchRoomsResponse where
+  rnf SearchRoomsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf rooms
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SearchSkillGroups.hs b/gen/Amazonka/AlexaBusiness/SearchSkillGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SearchSkillGroups.hs
@@ -0,0 +1,280 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SearchSkillGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches skill groups and lists the ones that meet a set of filter and
+-- sort criteria.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.SearchSkillGroups
+  ( -- * Creating a Request
+    SearchSkillGroups (..),
+    newSearchSkillGroups,
+
+    -- * Request Lenses
+    searchSkillGroups_filters,
+    searchSkillGroups_maxResults,
+    searchSkillGroups_nextToken,
+    searchSkillGroups_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchSkillGroupsResponse (..),
+    newSearchSkillGroupsResponse,
+
+    -- * Response Lenses
+    searchSkillGroupsResponse_nextToken,
+    searchSkillGroupsResponse_skillGroups,
+    searchSkillGroupsResponse_totalCount,
+    searchSkillGroupsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchSkillGroups' smart constructor.
+data SearchSkillGroups = SearchSkillGroups'
+  { -- | The filters to use to list a specified set of skill groups. The
+    -- supported filter key is SkillGroupName.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by @MaxResults@. Required.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to use in listing the specified set of skill groups. The
+    -- supported sort key is SkillGroupName.
+    sortCriteria :: Prelude.Maybe [Sort]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchSkillGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchSkillGroups_filters' - The filters to use to list a specified set of skill groups. The
+-- supported filter key is SkillGroupName.
+--
+-- 'maxResults', 'searchSkillGroups_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+--
+-- 'nextToken', 'searchSkillGroups_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@. Required.
+--
+-- 'sortCriteria', 'searchSkillGroups_sortCriteria' - The sort order to use in listing the specified set of skill groups. The
+-- supported sort key is SkillGroupName.
+newSearchSkillGroups ::
+  SearchSkillGroups
+newSearchSkillGroups =
+  SearchSkillGroups'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filters to use to list a specified set of skill groups. The
+-- supported filter key is SkillGroupName.
+searchSkillGroups_filters :: Lens.Lens' SearchSkillGroups (Prelude.Maybe [Filter])
+searchSkillGroups_filters = Lens.lens (\SearchSkillGroups' {filters} -> filters) (\s@SearchSkillGroups' {} a -> s {filters = a} :: SearchSkillGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+searchSkillGroups_maxResults :: Lens.Lens' SearchSkillGroups (Prelude.Maybe Prelude.Natural)
+searchSkillGroups_maxResults = Lens.lens (\SearchSkillGroups' {maxResults} -> maxResults) (\s@SearchSkillGroups' {} a -> s {maxResults = a} :: SearchSkillGroups)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@. Required.
+searchSkillGroups_nextToken :: Lens.Lens' SearchSkillGroups (Prelude.Maybe Prelude.Text)
+searchSkillGroups_nextToken = Lens.lens (\SearchSkillGroups' {nextToken} -> nextToken) (\s@SearchSkillGroups' {} a -> s {nextToken = a} :: SearchSkillGroups)
+
+-- | The sort order to use in listing the specified set of skill groups. The
+-- supported sort key is SkillGroupName.
+searchSkillGroups_sortCriteria :: Lens.Lens' SearchSkillGroups (Prelude.Maybe [Sort])
+searchSkillGroups_sortCriteria = Lens.lens (\SearchSkillGroups' {sortCriteria} -> sortCriteria) (\s@SearchSkillGroups' {} a -> s {sortCriteria = a} :: SearchSkillGroups) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager SearchSkillGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchSkillGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchSkillGroupsResponse_skillGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchSkillGroups_nextToken
+          Lens..~ rs
+          Lens.^? searchSkillGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchSkillGroups where
+  type
+    AWSResponse SearchSkillGroups =
+      SearchSkillGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchSkillGroupsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "SkillGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "TotalCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchSkillGroups where
+  hashWithSalt _salt SearchSkillGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchSkillGroups where
+  rnf SearchSkillGroups' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchSkillGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SearchSkillGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchSkillGroups where
+  toJSON SearchSkillGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchSkillGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchSkillGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchSkillGroupsResponse' smart constructor.
+data SearchSkillGroupsResponse = SearchSkillGroupsResponse'
+  { -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The skill groups that meet the filter criteria, in sort order.
+    skillGroups :: Prelude.Maybe [SkillGroupData],
+    -- | The total number of skill groups returned.
+    totalCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchSkillGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'searchSkillGroupsResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'skillGroups', 'searchSkillGroupsResponse_skillGroups' - The skill groups that meet the filter criteria, in sort order.
+--
+-- 'totalCount', 'searchSkillGroupsResponse_totalCount' - The total number of skill groups returned.
+--
+-- 'httpStatus', 'searchSkillGroupsResponse_httpStatus' - The response's http status code.
+newSearchSkillGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchSkillGroupsResponse
+newSearchSkillGroupsResponse pHttpStatus_ =
+  SearchSkillGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      skillGroups = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token returned to indicate that there is more data available.
+searchSkillGroupsResponse_nextToken :: Lens.Lens' SearchSkillGroupsResponse (Prelude.Maybe Prelude.Text)
+searchSkillGroupsResponse_nextToken = Lens.lens (\SearchSkillGroupsResponse' {nextToken} -> nextToken) (\s@SearchSkillGroupsResponse' {} a -> s {nextToken = a} :: SearchSkillGroupsResponse)
+
+-- | The skill groups that meet the filter criteria, in sort order.
+searchSkillGroupsResponse_skillGroups :: Lens.Lens' SearchSkillGroupsResponse (Prelude.Maybe [SkillGroupData])
+searchSkillGroupsResponse_skillGroups = Lens.lens (\SearchSkillGroupsResponse' {skillGroups} -> skillGroups) (\s@SearchSkillGroupsResponse' {} a -> s {skillGroups = a} :: SearchSkillGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of skill groups returned.
+searchSkillGroupsResponse_totalCount :: Lens.Lens' SearchSkillGroupsResponse (Prelude.Maybe Prelude.Int)
+searchSkillGroupsResponse_totalCount = Lens.lens (\SearchSkillGroupsResponse' {totalCount} -> totalCount) (\s@SearchSkillGroupsResponse' {} a -> s {totalCount = a} :: SearchSkillGroupsResponse)
+
+-- | The response's http status code.
+searchSkillGroupsResponse_httpStatus :: Lens.Lens' SearchSkillGroupsResponse Prelude.Int
+searchSkillGroupsResponse_httpStatus = Lens.lens (\SearchSkillGroupsResponse' {httpStatus} -> httpStatus) (\s@SearchSkillGroupsResponse' {} a -> s {httpStatus = a} :: SearchSkillGroupsResponse)
+
+instance Prelude.NFData SearchSkillGroupsResponse where
+  rnf SearchSkillGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf skillGroups
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SearchUsers.hs b/gen/Amazonka/AlexaBusiness/SearchUsers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SearchUsers.hs
@@ -0,0 +1,286 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SearchUsers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches users and lists the ones that meet a set of filter and sort
+-- criteria.
+--
+-- This operation returns paginated results.
+module Amazonka.AlexaBusiness.SearchUsers
+  ( -- * Creating a Request
+    SearchUsers (..),
+    newSearchUsers,
+
+    -- * Request Lenses
+    searchUsers_filters,
+    searchUsers_maxResults,
+    searchUsers_nextToken,
+    searchUsers_sortCriteria,
+
+    -- * Destructuring the Response
+    SearchUsersResponse (..),
+    newSearchUsersResponse,
+
+    -- * Response Lenses
+    searchUsersResponse_nextToken,
+    searchUsersResponse_totalCount,
+    searchUsersResponse_users,
+    searchUsersResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchUsers' smart constructor.
+data SearchUsers = SearchUsers'
+  { -- | The filters to use for listing a specific set of users. Required.
+    -- Supported filter keys are UserId, FirstName, LastName, Email, and
+    -- EnrollmentStatus.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to include in the response. If more
+    -- results exist than the specified @MaxResults@ value, a token is included
+    -- in the response so that the remaining results can be retrieved.
+    -- Required.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | An optional token returned from a prior request. Use this token for
+    -- pagination of results from this action. If this parameter is specified,
+    -- the response includes only results beyond the token, up to the value
+    -- specified by @MaxResults@. Required.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The sort order to use in listing the filtered set of users. Required.
+    -- Supported sort keys are UserId, FirstName, LastName, Email, and
+    -- EnrollmentStatus.
+    sortCriteria :: Prelude.Maybe [Sort]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchUsers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'searchUsers_filters' - The filters to use for listing a specific set of users. Required.
+-- Supported filter keys are UserId, FirstName, LastName, Email, and
+-- EnrollmentStatus.
+--
+-- 'maxResults', 'searchUsers_maxResults' - The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+-- Required.
+--
+-- 'nextToken', 'searchUsers_nextToken' - An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@. Required.
+--
+-- 'sortCriteria', 'searchUsers_sortCriteria' - The sort order to use in listing the filtered set of users. Required.
+-- Supported sort keys are UserId, FirstName, LastName, Email, and
+-- EnrollmentStatus.
+newSearchUsers ::
+  SearchUsers
+newSearchUsers =
+  SearchUsers'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sortCriteria = Prelude.Nothing
+    }
+
+-- | The filters to use for listing a specific set of users. Required.
+-- Supported filter keys are UserId, FirstName, LastName, Email, and
+-- EnrollmentStatus.
+searchUsers_filters :: Lens.Lens' SearchUsers (Prelude.Maybe [Filter])
+searchUsers_filters = Lens.lens (\SearchUsers' {filters} -> filters) (\s@SearchUsers' {} a -> s {filters = a} :: SearchUsers) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to include in the response. If more
+-- results exist than the specified @MaxResults@ value, a token is included
+-- in the response so that the remaining results can be retrieved.
+-- Required.
+searchUsers_maxResults :: Lens.Lens' SearchUsers (Prelude.Maybe Prelude.Natural)
+searchUsers_maxResults = Lens.lens (\SearchUsers' {maxResults} -> maxResults) (\s@SearchUsers' {} a -> s {maxResults = a} :: SearchUsers)
+
+-- | An optional token returned from a prior request. Use this token for
+-- pagination of results from this action. If this parameter is specified,
+-- the response includes only results beyond the token, up to the value
+-- specified by @MaxResults@. Required.
+searchUsers_nextToken :: Lens.Lens' SearchUsers (Prelude.Maybe Prelude.Text)
+searchUsers_nextToken = Lens.lens (\SearchUsers' {nextToken} -> nextToken) (\s@SearchUsers' {} a -> s {nextToken = a} :: SearchUsers)
+
+-- | The sort order to use in listing the filtered set of users. Required.
+-- Supported sort keys are UserId, FirstName, LastName, Email, and
+-- EnrollmentStatus.
+searchUsers_sortCriteria :: Lens.Lens' SearchUsers (Prelude.Maybe [Sort])
+searchUsers_sortCriteria = Lens.lens (\SearchUsers' {sortCriteria} -> sortCriteria) (\s@SearchUsers' {} a -> s {sortCriteria = a} :: SearchUsers) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager SearchUsers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchUsersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchUsersResponse_users
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchUsers_nextToken
+          Lens..~ rs
+          Lens.^? searchUsersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchUsers where
+  type AWSResponse SearchUsers = SearchUsersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchUsersResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "TotalCount")
+            Prelude.<*> (x Data..?> "Users" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchUsers where
+  hashWithSalt _salt SearchUsers' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sortCriteria
+
+instance Prelude.NFData SearchUsers where
+  rnf SearchUsers' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sortCriteria
+
+instance Data.ToHeaders SearchUsers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SearchUsers" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchUsers where
+  toJSON SearchUsers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SortCriteria" Data..=) Prelude.<$> sortCriteria
+          ]
+      )
+
+instance Data.ToPath SearchUsers where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchUsers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchUsersResponse' smart constructor.
+data SearchUsersResponse = SearchUsersResponse'
+  { -- | The token returned to indicate that there is more data available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The total number of users returned.
+    totalCount :: Prelude.Maybe Prelude.Int,
+    -- | The users that meet the specified set of filter criteria, in sort order.
+    users :: Prelude.Maybe [UserData],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchUsersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'searchUsersResponse_nextToken' - The token returned to indicate that there is more data available.
+--
+-- 'totalCount', 'searchUsersResponse_totalCount' - The total number of users returned.
+--
+-- 'users', 'searchUsersResponse_users' - The users that meet the specified set of filter criteria, in sort order.
+--
+-- 'httpStatus', 'searchUsersResponse_httpStatus' - The response's http status code.
+newSearchUsersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchUsersResponse
+newSearchUsersResponse pHttpStatus_ =
+  SearchUsersResponse'
+    { nextToken = Prelude.Nothing,
+      totalCount = Prelude.Nothing,
+      users = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token returned to indicate that there is more data available.
+searchUsersResponse_nextToken :: Lens.Lens' SearchUsersResponse (Prelude.Maybe Prelude.Text)
+searchUsersResponse_nextToken = Lens.lens (\SearchUsersResponse' {nextToken} -> nextToken) (\s@SearchUsersResponse' {} a -> s {nextToken = a} :: SearchUsersResponse)
+
+-- | The total number of users returned.
+searchUsersResponse_totalCount :: Lens.Lens' SearchUsersResponse (Prelude.Maybe Prelude.Int)
+searchUsersResponse_totalCount = Lens.lens (\SearchUsersResponse' {totalCount} -> totalCount) (\s@SearchUsersResponse' {} a -> s {totalCount = a} :: SearchUsersResponse)
+
+-- | The users that meet the specified set of filter criteria, in sort order.
+searchUsersResponse_users :: Lens.Lens' SearchUsersResponse (Prelude.Maybe [UserData])
+searchUsersResponse_users = Lens.lens (\SearchUsersResponse' {users} -> users) (\s@SearchUsersResponse' {} a -> s {users = a} :: SearchUsersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+searchUsersResponse_httpStatus :: Lens.Lens' SearchUsersResponse Prelude.Int
+searchUsersResponse_httpStatus = Lens.lens (\SearchUsersResponse' {httpStatus} -> httpStatus) (\s@SearchUsersResponse' {} a -> s {httpStatus = a} :: SearchUsersResponse)
+
+instance Prelude.NFData SearchUsersResponse where
+  rnf SearchUsersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf totalCount
+      `Prelude.seq` Prelude.rnf users
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SendAnnouncement.hs b/gen/Amazonka/AlexaBusiness/SendAnnouncement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SendAnnouncement.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SendAnnouncement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Triggers an asynchronous flow to send text, SSML, or audio announcements
+-- to rooms that are identified by a search or filter.
+module Amazonka.AlexaBusiness.SendAnnouncement
+  ( -- * Creating a Request
+    SendAnnouncement (..),
+    newSendAnnouncement,
+
+    -- * Request Lenses
+    sendAnnouncement_timeToLiveInSeconds,
+    sendAnnouncement_roomFilters,
+    sendAnnouncement_content,
+    sendAnnouncement_clientRequestToken,
+
+    -- * Destructuring the Response
+    SendAnnouncementResponse (..),
+    newSendAnnouncementResponse,
+
+    -- * Response Lenses
+    sendAnnouncementResponse_announcementArn,
+    sendAnnouncementResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSendAnnouncement' smart constructor.
+data SendAnnouncement = SendAnnouncement'
+  { -- | The time to live for an announcement. Default is 300. If delivery
+    -- doesn\'t occur within this time, the announcement is not delivered.
+    timeToLiveInSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The filters to use to send an announcement to a specified list of rooms.
+    -- The supported filter keys are RoomName, ProfileName, RoomArn, and
+    -- ProfileArn. To send to all rooms, specify an empty RoomFilters list.
+    roomFilters :: [Filter],
+    -- | The announcement content. This can contain only one of the three
+    -- possible announcement types (text, SSML or audio).
+    content :: Content,
+    -- | The unique, user-specified identifier for the request that ensures
+    -- idempotency.
+    clientRequestToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendAnnouncement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timeToLiveInSeconds', 'sendAnnouncement_timeToLiveInSeconds' - The time to live for an announcement. Default is 300. If delivery
+-- doesn\'t occur within this time, the announcement is not delivered.
+--
+-- 'roomFilters', 'sendAnnouncement_roomFilters' - The filters to use to send an announcement to a specified list of rooms.
+-- The supported filter keys are RoomName, ProfileName, RoomArn, and
+-- ProfileArn. To send to all rooms, specify an empty RoomFilters list.
+--
+-- 'content', 'sendAnnouncement_content' - The announcement content. This can contain only one of the three
+-- possible announcement types (text, SSML or audio).
+--
+-- 'clientRequestToken', 'sendAnnouncement_clientRequestToken' - The unique, user-specified identifier for the request that ensures
+-- idempotency.
+newSendAnnouncement ::
+  -- | 'content'
+  Content ->
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  SendAnnouncement
+newSendAnnouncement pContent_ pClientRequestToken_ =
+  SendAnnouncement'
+    { timeToLiveInSeconds =
+        Prelude.Nothing,
+      roomFilters = Prelude.mempty,
+      content = pContent_,
+      clientRequestToken = pClientRequestToken_
+    }
+
+-- | The time to live for an announcement. Default is 300. If delivery
+-- doesn\'t occur within this time, the announcement is not delivered.
+sendAnnouncement_timeToLiveInSeconds :: Lens.Lens' SendAnnouncement (Prelude.Maybe Prelude.Natural)
+sendAnnouncement_timeToLiveInSeconds = Lens.lens (\SendAnnouncement' {timeToLiveInSeconds} -> timeToLiveInSeconds) (\s@SendAnnouncement' {} a -> s {timeToLiveInSeconds = a} :: SendAnnouncement)
+
+-- | The filters to use to send an announcement to a specified list of rooms.
+-- The supported filter keys are RoomName, ProfileName, RoomArn, and
+-- ProfileArn. To send to all rooms, specify an empty RoomFilters list.
+sendAnnouncement_roomFilters :: Lens.Lens' SendAnnouncement [Filter]
+sendAnnouncement_roomFilters = Lens.lens (\SendAnnouncement' {roomFilters} -> roomFilters) (\s@SendAnnouncement' {} a -> s {roomFilters = a} :: SendAnnouncement) Prelude.. Lens.coerced
+
+-- | The announcement content. This can contain only one of the three
+-- possible announcement types (text, SSML or audio).
+sendAnnouncement_content :: Lens.Lens' SendAnnouncement Content
+sendAnnouncement_content = Lens.lens (\SendAnnouncement' {content} -> content) (\s@SendAnnouncement' {} a -> s {content = a} :: SendAnnouncement)
+
+-- | The unique, user-specified identifier for the request that ensures
+-- idempotency.
+sendAnnouncement_clientRequestToken :: Lens.Lens' SendAnnouncement Prelude.Text
+sendAnnouncement_clientRequestToken = Lens.lens (\SendAnnouncement' {clientRequestToken} -> clientRequestToken) (\s@SendAnnouncement' {} a -> s {clientRequestToken = a} :: SendAnnouncement)
+
+instance Core.AWSRequest SendAnnouncement where
+  type
+    AWSResponse SendAnnouncement =
+      SendAnnouncementResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SendAnnouncementResponse'
+            Prelude.<$> (x Data..?> "AnnouncementArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SendAnnouncement where
+  hashWithSalt _salt SendAnnouncement' {..} =
+    _salt
+      `Prelude.hashWithSalt` timeToLiveInSeconds
+      `Prelude.hashWithSalt` roomFilters
+      `Prelude.hashWithSalt` content
+      `Prelude.hashWithSalt` clientRequestToken
+
+instance Prelude.NFData SendAnnouncement where
+  rnf SendAnnouncement' {..} =
+    Prelude.rnf timeToLiveInSeconds
+      `Prelude.seq` Prelude.rnf roomFilters
+      `Prelude.seq` Prelude.rnf content
+      `Prelude.seq` Prelude.rnf clientRequestToken
+
+instance Data.ToHeaders SendAnnouncement where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SendAnnouncement" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SendAnnouncement where
+  toJSON SendAnnouncement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TimeToLiveInSeconds" Data..=)
+              Prelude.<$> timeToLiveInSeconds,
+            Prelude.Just ("RoomFilters" Data..= roomFilters),
+            Prelude.Just ("Content" Data..= content),
+            Prelude.Just
+              ("ClientRequestToken" Data..= clientRequestToken)
+          ]
+      )
+
+instance Data.ToPath SendAnnouncement where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SendAnnouncement where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSendAnnouncementResponse' smart constructor.
+data SendAnnouncementResponse = SendAnnouncementResponse'
+  { -- | The identifier of the announcement.
+    announcementArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendAnnouncementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'announcementArn', 'sendAnnouncementResponse_announcementArn' - The identifier of the announcement.
+--
+-- 'httpStatus', 'sendAnnouncementResponse_httpStatus' - The response's http status code.
+newSendAnnouncementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendAnnouncementResponse
+newSendAnnouncementResponse pHttpStatus_ =
+  SendAnnouncementResponse'
+    { announcementArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The identifier of the announcement.
+sendAnnouncementResponse_announcementArn :: Lens.Lens' SendAnnouncementResponse (Prelude.Maybe Prelude.Text)
+sendAnnouncementResponse_announcementArn = Lens.lens (\SendAnnouncementResponse' {announcementArn} -> announcementArn) (\s@SendAnnouncementResponse' {} a -> s {announcementArn = a} :: SendAnnouncementResponse)
+
+-- | The response's http status code.
+sendAnnouncementResponse_httpStatus :: Lens.Lens' SendAnnouncementResponse Prelude.Int
+sendAnnouncementResponse_httpStatus = Lens.lens (\SendAnnouncementResponse' {httpStatus} -> httpStatus) (\s@SendAnnouncementResponse' {} a -> s {httpStatus = a} :: SendAnnouncementResponse)
+
+instance Prelude.NFData SendAnnouncementResponse where
+  rnf SendAnnouncementResponse' {..} =
+    Prelude.rnf announcementArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/SendInvitation.hs b/gen/Amazonka/AlexaBusiness/SendInvitation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/SendInvitation.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.SendInvitation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sends an enrollment invitation email with a URL to a user. The URL is
+-- valid for 30 days or until you call this operation again, whichever
+-- comes first.
+module Amazonka.AlexaBusiness.SendInvitation
+  ( -- * Creating a Request
+    SendInvitation (..),
+    newSendInvitation,
+
+    -- * Request Lenses
+    sendInvitation_userArn,
+
+    -- * Destructuring the Response
+    SendInvitationResponse (..),
+    newSendInvitationResponse,
+
+    -- * Response Lenses
+    sendInvitationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSendInvitation' smart constructor.
+data SendInvitation = SendInvitation'
+  { -- | The ARN of the user to whom to send an invitation. Required.
+    userArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendInvitation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userArn', 'sendInvitation_userArn' - The ARN of the user to whom to send an invitation. Required.
+newSendInvitation ::
+  SendInvitation
+newSendInvitation =
+  SendInvitation' {userArn = Prelude.Nothing}
+
+-- | The ARN of the user to whom to send an invitation. Required.
+sendInvitation_userArn :: Lens.Lens' SendInvitation (Prelude.Maybe Prelude.Text)
+sendInvitation_userArn = Lens.lens (\SendInvitation' {userArn} -> userArn) (\s@SendInvitation' {} a -> s {userArn = a} :: SendInvitation)
+
+instance Core.AWSRequest SendInvitation where
+  type
+    AWSResponse SendInvitation =
+      SendInvitationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          SendInvitationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SendInvitation where
+  hashWithSalt _salt SendInvitation' {..} =
+    _salt `Prelude.hashWithSalt` userArn
+
+instance Prelude.NFData SendInvitation where
+  rnf SendInvitation' {..} = Prelude.rnf userArn
+
+instance Data.ToHeaders SendInvitation where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.SendInvitation" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SendInvitation where
+  toJSON SendInvitation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("UserArn" Data..=) Prelude.<$> userArn]
+      )
+
+instance Data.ToPath SendInvitation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SendInvitation where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSendInvitationResponse' smart constructor.
+data SendInvitationResponse = SendInvitationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendInvitationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'sendInvitationResponse_httpStatus' - The response's http status code.
+newSendInvitationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendInvitationResponse
+newSendInvitationResponse pHttpStatus_ =
+  SendInvitationResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+sendInvitationResponse_httpStatus :: Lens.Lens' SendInvitationResponse Prelude.Int
+sendInvitationResponse_httpStatus = Lens.lens (\SendInvitationResponse' {httpStatus} -> httpStatus) (\s@SendInvitationResponse' {} a -> s {httpStatus = a} :: SendInvitationResponse)
+
+instance Prelude.NFData SendInvitationResponse where
+  rnf SendInvitationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/StartDeviceSync.hs b/gen/Amazonka/AlexaBusiness/StartDeviceSync.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/StartDeviceSync.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.StartDeviceSync
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets a device and its account to the known default settings. This
+-- clears all information and settings set by previous users in the
+-- following ways:
+--
+-- -   Bluetooth - This unpairs all bluetooth devices paired with your echo
+--     device.
+--
+-- -   Volume - This resets the echo device\'s volume to the default value.
+--
+-- -   Notifications - This clears all notifications from your echo device.
+--
+-- -   Lists - This clears all to-do items from your echo device.
+--
+-- -   Settings - This internally syncs the room\'s profile (if the device
+--     is assigned to a room), contacts, address books, delegation access
+--     for account linking, and communications (if enabled on the room
+--     profile).
+module Amazonka.AlexaBusiness.StartDeviceSync
+  ( -- * Creating a Request
+    StartDeviceSync (..),
+    newStartDeviceSync,
+
+    -- * Request Lenses
+    startDeviceSync_deviceArn,
+    startDeviceSync_roomArn,
+    startDeviceSync_features,
+
+    -- * Destructuring the Response
+    StartDeviceSyncResponse (..),
+    newStartDeviceSyncResponse,
+
+    -- * Response Lenses
+    startDeviceSyncResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartDeviceSync' smart constructor.
+data StartDeviceSync = StartDeviceSync'
+  { -- | The ARN of the device to sync. Required.
+    deviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the room with which the device to sync is associated.
+    -- Required.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | Request structure to start the device sync. Required.
+    features :: [Feature]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartDeviceSync' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'startDeviceSync_deviceArn' - The ARN of the device to sync. Required.
+--
+-- 'roomArn', 'startDeviceSync_roomArn' - The ARN of the room with which the device to sync is associated.
+-- Required.
+--
+-- 'features', 'startDeviceSync_features' - Request structure to start the device sync. Required.
+newStartDeviceSync ::
+  StartDeviceSync
+newStartDeviceSync =
+  StartDeviceSync'
+    { deviceArn = Prelude.Nothing,
+      roomArn = Prelude.Nothing,
+      features = Prelude.mempty
+    }
+
+-- | The ARN of the device to sync. Required.
+startDeviceSync_deviceArn :: Lens.Lens' StartDeviceSync (Prelude.Maybe Prelude.Text)
+startDeviceSync_deviceArn = Lens.lens (\StartDeviceSync' {deviceArn} -> deviceArn) (\s@StartDeviceSync' {} a -> s {deviceArn = a} :: StartDeviceSync)
+
+-- | The ARN of the room with which the device to sync is associated.
+-- Required.
+startDeviceSync_roomArn :: Lens.Lens' StartDeviceSync (Prelude.Maybe Prelude.Text)
+startDeviceSync_roomArn = Lens.lens (\StartDeviceSync' {roomArn} -> roomArn) (\s@StartDeviceSync' {} a -> s {roomArn = a} :: StartDeviceSync)
+
+-- | Request structure to start the device sync. Required.
+startDeviceSync_features :: Lens.Lens' StartDeviceSync [Feature]
+startDeviceSync_features = Lens.lens (\StartDeviceSync' {features} -> features) (\s@StartDeviceSync' {} a -> s {features = a} :: StartDeviceSync) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartDeviceSync where
+  type
+    AWSResponse StartDeviceSync =
+      StartDeviceSyncResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartDeviceSyncResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartDeviceSync where
+  hashWithSalt _salt StartDeviceSync' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceArn
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` features
+
+instance Prelude.NFData StartDeviceSync where
+  rnf StartDeviceSync' {..} =
+    Prelude.rnf deviceArn
+      `Prelude.seq` Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf features
+
+instance Data.ToHeaders StartDeviceSync where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.StartDeviceSync" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartDeviceSync where
+  toJSON StartDeviceSync' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeviceArn" Data..=) Prelude.<$> deviceArn,
+            ("RoomArn" Data..=) Prelude.<$> roomArn,
+            Prelude.Just ("Features" Data..= features)
+          ]
+      )
+
+instance Data.ToPath StartDeviceSync where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartDeviceSync where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartDeviceSyncResponse' smart constructor.
+data StartDeviceSyncResponse = StartDeviceSyncResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartDeviceSyncResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'startDeviceSyncResponse_httpStatus' - The response's http status code.
+newStartDeviceSyncResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartDeviceSyncResponse
+newStartDeviceSyncResponse pHttpStatus_ =
+  StartDeviceSyncResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+startDeviceSyncResponse_httpStatus :: Lens.Lens' StartDeviceSyncResponse Prelude.Int
+startDeviceSyncResponse_httpStatus = Lens.lens (\StartDeviceSyncResponse' {httpStatus} -> httpStatus) (\s@StartDeviceSyncResponse' {} a -> s {httpStatus = a} :: StartDeviceSyncResponse)
+
+instance Prelude.NFData StartDeviceSyncResponse where
+  rnf StartDeviceSyncResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/StartSmartHomeApplianceDiscovery.hs b/gen/Amazonka/AlexaBusiness/StartSmartHomeApplianceDiscovery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/StartSmartHomeApplianceDiscovery.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.StartSmartHomeApplianceDiscovery
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Initiates the discovery of any smart home appliances associated with the
+-- room.
+module Amazonka.AlexaBusiness.StartSmartHomeApplianceDiscovery
+  ( -- * Creating a Request
+    StartSmartHomeApplianceDiscovery (..),
+    newStartSmartHomeApplianceDiscovery,
+
+    -- * Request Lenses
+    startSmartHomeApplianceDiscovery_roomArn,
+
+    -- * Destructuring the Response
+    StartSmartHomeApplianceDiscoveryResponse (..),
+    newStartSmartHomeApplianceDiscoveryResponse,
+
+    -- * Response Lenses
+    startSmartHomeApplianceDiscoveryResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartSmartHomeApplianceDiscovery' smart constructor.
+data StartSmartHomeApplianceDiscovery = StartSmartHomeApplianceDiscovery'
+  { -- | The room where smart home appliance discovery was initiated.
+    roomArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartSmartHomeApplianceDiscovery' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roomArn', 'startSmartHomeApplianceDiscovery_roomArn' - The room where smart home appliance discovery was initiated.
+newStartSmartHomeApplianceDiscovery ::
+  -- | 'roomArn'
+  Prelude.Text ->
+  StartSmartHomeApplianceDiscovery
+newStartSmartHomeApplianceDiscovery pRoomArn_ =
+  StartSmartHomeApplianceDiscovery'
+    { roomArn =
+        pRoomArn_
+    }
+
+-- | The room where smart home appliance discovery was initiated.
+startSmartHomeApplianceDiscovery_roomArn :: Lens.Lens' StartSmartHomeApplianceDiscovery Prelude.Text
+startSmartHomeApplianceDiscovery_roomArn = Lens.lens (\StartSmartHomeApplianceDiscovery' {roomArn} -> roomArn) (\s@StartSmartHomeApplianceDiscovery' {} a -> s {roomArn = a} :: StartSmartHomeApplianceDiscovery)
+
+instance
+  Core.AWSRequest
+    StartSmartHomeApplianceDiscovery
+  where
+  type
+    AWSResponse StartSmartHomeApplianceDiscovery =
+      StartSmartHomeApplianceDiscoveryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartSmartHomeApplianceDiscoveryResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    StartSmartHomeApplianceDiscovery
+  where
+  hashWithSalt
+    _salt
+    StartSmartHomeApplianceDiscovery' {..} =
+      _salt `Prelude.hashWithSalt` roomArn
+
+instance
+  Prelude.NFData
+    StartSmartHomeApplianceDiscovery
+  where
+  rnf StartSmartHomeApplianceDiscovery' {..} =
+    Prelude.rnf roomArn
+
+instance
+  Data.ToHeaders
+    StartSmartHomeApplianceDiscovery
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.StartSmartHomeApplianceDiscovery" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartSmartHomeApplianceDiscovery where
+  toJSON StartSmartHomeApplianceDiscovery' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("RoomArn" Data..= roomArn)]
+      )
+
+instance Data.ToPath StartSmartHomeApplianceDiscovery where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    StartSmartHomeApplianceDiscovery
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartSmartHomeApplianceDiscoveryResponse' smart constructor.
+data StartSmartHomeApplianceDiscoveryResponse = StartSmartHomeApplianceDiscoveryResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartSmartHomeApplianceDiscoveryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'startSmartHomeApplianceDiscoveryResponse_httpStatus' - The response's http status code.
+newStartSmartHomeApplianceDiscoveryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartSmartHomeApplianceDiscoveryResponse
+newStartSmartHomeApplianceDiscoveryResponse
+  pHttpStatus_ =
+    StartSmartHomeApplianceDiscoveryResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+startSmartHomeApplianceDiscoveryResponse_httpStatus :: Lens.Lens' StartSmartHomeApplianceDiscoveryResponse Prelude.Int
+startSmartHomeApplianceDiscoveryResponse_httpStatus = Lens.lens (\StartSmartHomeApplianceDiscoveryResponse' {httpStatus} -> httpStatus) (\s@StartSmartHomeApplianceDiscoveryResponse' {} a -> s {httpStatus = a} :: StartSmartHomeApplianceDiscoveryResponse)
+
+instance
+  Prelude.NFData
+    StartSmartHomeApplianceDiscoveryResponse
+  where
+  rnf StartSmartHomeApplianceDiscoveryResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/TagResource.hs b/gen/Amazonka/AlexaBusiness/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/TagResource.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds metadata tags to a specified resource.
+module Amazonka.AlexaBusiness.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_arn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The ARN of the resource to which to add metadata tags. Required.
+    arn :: Prelude.Text,
+    -- | The tags to be added to the specified resource. Do not provide system
+    -- tags. Required.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'tagResource_arn' - The ARN of the resource to which to add metadata tags. Required.
+--
+-- 'tags', 'tagResource_tags' - The tags to be added to the specified resource. Do not provide system
+-- tags. Required.
+newTagResource ::
+  -- | 'arn'
+  Prelude.Text ->
+  TagResource
+newTagResource pArn_ =
+  TagResource' {arn = pArn_, tags = Prelude.mempty}
+
+-- | The ARN of the resource to which to add metadata tags. Required.
+tagResource_arn :: Lens.Lens' TagResource Prelude.Text
+tagResource_arn = Lens.lens (\TagResource' {arn} -> arn) (\s@TagResource' {} a -> s {arn = a} :: TagResource)
+
+-- | The tags to be added to the specified resource. Do not provide system
+-- tags. Required.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.TagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Arn" Data..= arn),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/Types.hs b/gen/Amazonka/AlexaBusiness/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types.hs
@@ -0,0 +1,888 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AlreadyExistsException,
+    _ConcurrentModificationException,
+    _DeviceNotRegisteredException,
+    _InvalidCertificateAuthorityException,
+    _InvalidDeviceException,
+    _InvalidSecretsManagerResourceException,
+    _InvalidServiceLinkedRoleStateException,
+    _InvalidUserStatusException,
+    _LimitExceededException,
+    _NameInUseException,
+    _NotFoundException,
+    _ResourceAssociatedException,
+    _ResourceInUseException,
+    _SkillNotLinkedException,
+    _UnauthorizedException,
+
+    -- * BusinessReportFailureCode
+    BusinessReportFailureCode (..),
+
+    -- * BusinessReportFormat
+    BusinessReportFormat (..),
+
+    -- * BusinessReportInterval
+    BusinessReportInterval (..),
+
+    -- * BusinessReportStatus
+    BusinessReportStatus (..),
+
+    -- * CommsProtocol
+    CommsProtocol (..),
+
+    -- * ConferenceProviderType
+    ConferenceProviderType (..),
+
+    -- * ConnectionStatus
+    ConnectionStatus (..),
+
+    -- * DeviceEventType
+    DeviceEventType (..),
+
+    -- * DeviceStatus
+    DeviceStatus (..),
+
+    -- * DeviceStatusDetailCode
+    DeviceStatusDetailCode (..),
+
+    -- * DeviceUsageType
+    DeviceUsageType (..),
+
+    -- * DistanceUnit
+    DistanceUnit (..),
+
+    -- * EnablementType
+    EnablementType (..),
+
+    -- * EnablementTypeFilter
+    EnablementTypeFilter (..),
+
+    -- * EndOfMeetingReminderType
+    EndOfMeetingReminderType (..),
+
+    -- * EnrollmentStatus
+    EnrollmentStatus (..),
+
+    -- * Feature
+    Feature (..),
+
+    -- * Locale
+    Locale (..),
+
+    -- * NetworkEapMethod
+    NetworkEapMethod (..),
+
+    -- * NetworkSecurityType
+    NetworkSecurityType (..),
+
+    -- * PhoneNumberType
+    PhoneNumberType (..),
+
+    -- * RequirePin
+    RequirePin (..),
+
+    -- * SipType
+    SipType (..),
+
+    -- * SkillType
+    SkillType (..),
+
+    -- * SkillTypeFilter
+    SkillTypeFilter (..),
+
+    -- * SortValue
+    SortValue (..),
+
+    -- * TemperatureUnit
+    TemperatureUnit (..),
+
+    -- * WakeWord
+    WakeWord (..),
+
+    -- * AddressBook
+    AddressBook (..),
+    newAddressBook,
+    addressBook_addressBookArn,
+    addressBook_description,
+    addressBook_name,
+
+    -- * AddressBookData
+    AddressBookData (..),
+    newAddressBookData,
+    addressBookData_addressBookArn,
+    addressBookData_description,
+    addressBookData_name,
+
+    -- * Audio
+    Audio (..),
+    newAudio,
+    audio_locale,
+    audio_location,
+
+    -- * BusinessReport
+    BusinessReport (..),
+    newBusinessReport,
+    businessReport_deliveryTime,
+    businessReport_downloadUrl,
+    businessReport_failureCode,
+    businessReport_s3Location,
+    businessReport_status,
+
+    -- * BusinessReportContentRange
+    BusinessReportContentRange (..),
+    newBusinessReportContentRange,
+    businessReportContentRange_interval,
+
+    -- * BusinessReportRecurrence
+    BusinessReportRecurrence (..),
+    newBusinessReportRecurrence,
+    businessReportRecurrence_startDate,
+
+    -- * BusinessReportS3Location
+    BusinessReportS3Location (..),
+    newBusinessReportS3Location,
+    businessReportS3Location_bucketName,
+    businessReportS3Location_path,
+
+    -- * BusinessReportSchedule
+    BusinessReportSchedule (..),
+    newBusinessReportSchedule,
+    businessReportSchedule_contentRange,
+    businessReportSchedule_format,
+    businessReportSchedule_lastBusinessReport,
+    businessReportSchedule_recurrence,
+    businessReportSchedule_s3BucketName,
+    businessReportSchedule_s3KeyPrefix,
+    businessReportSchedule_scheduleArn,
+    businessReportSchedule_scheduleName,
+
+    -- * Category
+    Category (..),
+    newCategory,
+    category_categoryId,
+    category_categoryName,
+
+    -- * ConferencePreference
+    ConferencePreference (..),
+    newConferencePreference,
+    conferencePreference_defaultConferenceProviderArn,
+
+    -- * ConferenceProvider
+    ConferenceProvider (..),
+    newConferenceProvider,
+    conferenceProvider_arn,
+    conferenceProvider_iPDialIn,
+    conferenceProvider_meetingSetting,
+    conferenceProvider_name,
+    conferenceProvider_pSTNDialIn,
+    conferenceProvider_type,
+
+    -- * Contact
+    Contact (..),
+    newContact,
+    contact_contactArn,
+    contact_displayName,
+    contact_firstName,
+    contact_lastName,
+    contact_phoneNumber,
+    contact_phoneNumbers,
+    contact_sipAddresses,
+
+    -- * ContactData
+    ContactData (..),
+    newContactData,
+    contactData_contactArn,
+    contactData_displayName,
+    contactData_firstName,
+    contactData_lastName,
+    contactData_phoneNumber,
+    contactData_phoneNumbers,
+    contactData_sipAddresses,
+
+    -- * Content
+    Content (..),
+    newContent,
+    content_audioList,
+    content_ssmlList,
+    content_textList,
+
+    -- * CreateEndOfMeetingReminder
+    CreateEndOfMeetingReminder (..),
+    newCreateEndOfMeetingReminder,
+    createEndOfMeetingReminder_reminderAtMinutes,
+    createEndOfMeetingReminder_reminderType,
+    createEndOfMeetingReminder_enabled,
+
+    -- * CreateInstantBooking
+    CreateInstantBooking (..),
+    newCreateInstantBooking,
+    createInstantBooking_durationInMinutes,
+    createInstantBooking_enabled,
+
+    -- * CreateMeetingRoomConfiguration
+    CreateMeetingRoomConfiguration (..),
+    newCreateMeetingRoomConfiguration,
+    createMeetingRoomConfiguration_endOfMeetingReminder,
+    createMeetingRoomConfiguration_instantBooking,
+    createMeetingRoomConfiguration_requireCheckIn,
+    createMeetingRoomConfiguration_roomUtilizationMetricsEnabled,
+
+    -- * CreateRequireCheckIn
+    CreateRequireCheckIn (..),
+    newCreateRequireCheckIn,
+    createRequireCheckIn_releaseAfterMinutes,
+    createRequireCheckIn_enabled,
+
+    -- * DeveloperInfo
+    DeveloperInfo (..),
+    newDeveloperInfo,
+    developerInfo_developerName,
+    developerInfo_email,
+    developerInfo_privacyPolicy,
+    developerInfo_url,
+
+    -- * Device
+    Device (..),
+    newDevice,
+    device_deviceArn,
+    device_deviceName,
+    device_deviceSerialNumber,
+    device_deviceStatus,
+    device_deviceStatusInfo,
+    device_deviceType,
+    device_macAddress,
+    device_networkProfileInfo,
+    device_roomArn,
+    device_softwareVersion,
+
+    -- * DeviceData
+    DeviceData (..),
+    newDeviceData,
+    deviceData_createdTime,
+    deviceData_deviceArn,
+    deviceData_deviceName,
+    deviceData_deviceSerialNumber,
+    deviceData_deviceStatus,
+    deviceData_deviceStatusInfo,
+    deviceData_deviceType,
+    deviceData_macAddress,
+    deviceData_networkProfileArn,
+    deviceData_networkProfileName,
+    deviceData_roomArn,
+    deviceData_roomName,
+    deviceData_softwareVersion,
+
+    -- * DeviceEvent
+    DeviceEvent (..),
+    newDeviceEvent,
+    deviceEvent_timestamp,
+    deviceEvent_type,
+    deviceEvent_value,
+
+    -- * DeviceNetworkProfileInfo
+    DeviceNetworkProfileInfo (..),
+    newDeviceNetworkProfileInfo,
+    deviceNetworkProfileInfo_certificateArn,
+    deviceNetworkProfileInfo_certificateExpirationTime,
+    deviceNetworkProfileInfo_networkProfileArn,
+
+    -- * DeviceStatusDetail
+    DeviceStatusDetail (..),
+    newDeviceStatusDetail,
+    deviceStatusDetail_code,
+    deviceStatusDetail_feature,
+
+    -- * DeviceStatusInfo
+    DeviceStatusInfo (..),
+    newDeviceStatusInfo,
+    deviceStatusInfo_connectionStatus,
+    deviceStatusInfo_connectionStatusUpdatedTime,
+    deviceStatusInfo_deviceStatusDetails,
+
+    -- * EndOfMeetingReminder
+    EndOfMeetingReminder (..),
+    newEndOfMeetingReminder,
+    endOfMeetingReminder_enabled,
+    endOfMeetingReminder_reminderAtMinutes,
+    endOfMeetingReminder_reminderType,
+
+    -- * Filter
+    Filter (..),
+    newFilter,
+    filter_key,
+    filter_values,
+
+    -- * Gateway
+    Gateway (..),
+    newGateway,
+    gateway_arn,
+    gateway_description,
+    gateway_gatewayGroupArn,
+    gateway_name,
+    gateway_softwareVersion,
+
+    -- * GatewayGroup
+    GatewayGroup (..),
+    newGatewayGroup,
+    gatewayGroup_arn,
+    gatewayGroup_description,
+    gatewayGroup_name,
+
+    -- * GatewayGroupSummary
+    GatewayGroupSummary (..),
+    newGatewayGroupSummary,
+    gatewayGroupSummary_arn,
+    gatewayGroupSummary_description,
+    gatewayGroupSummary_name,
+
+    -- * GatewaySummary
+    GatewaySummary (..),
+    newGatewaySummary,
+    gatewaySummary_arn,
+    gatewaySummary_description,
+    gatewaySummary_gatewayGroupArn,
+    gatewaySummary_name,
+    gatewaySummary_softwareVersion,
+
+    -- * IPDialIn
+    IPDialIn (..),
+    newIPDialIn,
+    iPDialIn_endpoint,
+    iPDialIn_commsProtocol,
+
+    -- * InstantBooking
+    InstantBooking (..),
+    newInstantBooking,
+    instantBooking_durationInMinutes,
+    instantBooking_enabled,
+
+    -- * MeetingRoomConfiguration
+    MeetingRoomConfiguration (..),
+    newMeetingRoomConfiguration,
+    meetingRoomConfiguration_endOfMeetingReminder,
+    meetingRoomConfiguration_instantBooking,
+    meetingRoomConfiguration_requireCheckIn,
+    meetingRoomConfiguration_roomUtilizationMetricsEnabled,
+
+    -- * MeetingSetting
+    MeetingSetting (..),
+    newMeetingSetting,
+    meetingSetting_requirePin,
+
+    -- * NetworkProfile
+    NetworkProfile (..),
+    newNetworkProfile,
+    networkProfile_certificateAuthorityArn,
+    networkProfile_currentPassword,
+    networkProfile_description,
+    networkProfile_eapMethod,
+    networkProfile_networkProfileArn,
+    networkProfile_networkProfileName,
+    networkProfile_nextPassword,
+    networkProfile_securityType,
+    networkProfile_ssid,
+    networkProfile_trustAnchors,
+
+    -- * NetworkProfileData
+    NetworkProfileData (..),
+    newNetworkProfileData,
+    networkProfileData_certificateAuthorityArn,
+    networkProfileData_description,
+    networkProfileData_eapMethod,
+    networkProfileData_networkProfileArn,
+    networkProfileData_networkProfileName,
+    networkProfileData_securityType,
+    networkProfileData_ssid,
+
+    -- * PSTNDialIn
+    PSTNDialIn (..),
+    newPSTNDialIn,
+    pSTNDialIn_countryCode,
+    pSTNDialIn_phoneNumber,
+    pSTNDialIn_oneClickIdDelay,
+    pSTNDialIn_oneClickPinDelay,
+
+    -- * PhoneNumber
+    PhoneNumber (..),
+    newPhoneNumber,
+    phoneNumber_number,
+    phoneNumber_type,
+
+    -- * Profile
+    Profile (..),
+    newProfile,
+    profile_address,
+    profile_addressBookArn,
+    profile_dataRetentionOptIn,
+    profile_distanceUnit,
+    profile_isDefault,
+    profile_locale,
+    profile_maxVolumeLimit,
+    profile_meetingRoomConfiguration,
+    profile_pSTNEnabled,
+    profile_profileArn,
+    profile_profileName,
+    profile_setupModeDisabled,
+    profile_temperatureUnit,
+    profile_timezone,
+    profile_wakeWord,
+
+    -- * ProfileData
+    ProfileData (..),
+    newProfileData,
+    profileData_address,
+    profileData_distanceUnit,
+    profileData_isDefault,
+    profileData_locale,
+    profileData_profileArn,
+    profileData_profileName,
+    profileData_temperatureUnit,
+    profileData_timezone,
+    profileData_wakeWord,
+
+    -- * RequireCheckIn
+    RequireCheckIn (..),
+    newRequireCheckIn,
+    requireCheckIn_enabled,
+    requireCheckIn_releaseAfterMinutes,
+
+    -- * Room
+    Room (..),
+    newRoom,
+    room_description,
+    room_profileArn,
+    room_providerCalendarId,
+    room_roomArn,
+    room_roomName,
+
+    -- * RoomData
+    RoomData (..),
+    newRoomData,
+    roomData_description,
+    roomData_profileArn,
+    roomData_profileName,
+    roomData_providerCalendarId,
+    roomData_roomArn,
+    roomData_roomName,
+
+    -- * RoomSkillParameter
+    RoomSkillParameter (..),
+    newRoomSkillParameter,
+    roomSkillParameter_parameterKey,
+    roomSkillParameter_parameterValue,
+
+    -- * SipAddress
+    SipAddress (..),
+    newSipAddress,
+    sipAddress_uri,
+    sipAddress_type,
+
+    -- * SkillDetails
+    SkillDetails (..),
+    newSkillDetails,
+    skillDetails_bulletPoints,
+    skillDetails_developerInfo,
+    skillDetails_endUserLicenseAgreement,
+    skillDetails_genericKeywords,
+    skillDetails_invocationPhrase,
+    skillDetails_newInThisVersionBulletPoints,
+    skillDetails_productDescription,
+    skillDetails_releaseDate,
+    skillDetails_reviews,
+    skillDetails_skillTypes,
+
+    -- * SkillGroup
+    SkillGroup (..),
+    newSkillGroup,
+    skillGroup_description,
+    skillGroup_skillGroupArn,
+    skillGroup_skillGroupName,
+
+    -- * SkillGroupData
+    SkillGroupData (..),
+    newSkillGroupData,
+    skillGroupData_description,
+    skillGroupData_skillGroupArn,
+    skillGroupData_skillGroupName,
+
+    -- * SkillSummary
+    SkillSummary (..),
+    newSkillSummary,
+    skillSummary_enablementType,
+    skillSummary_skillId,
+    skillSummary_skillName,
+    skillSummary_skillType,
+    skillSummary_supportsLinking,
+
+    -- * SkillsStoreSkill
+    SkillsStoreSkill (..),
+    newSkillsStoreSkill,
+    skillsStoreSkill_iconUrl,
+    skillsStoreSkill_sampleUtterances,
+    skillsStoreSkill_shortDescription,
+    skillsStoreSkill_skillDetails,
+    skillsStoreSkill_skillId,
+    skillsStoreSkill_skillName,
+    skillsStoreSkill_supportsLinking,
+
+    -- * SmartHomeAppliance
+    SmartHomeAppliance (..),
+    newSmartHomeAppliance,
+    smartHomeAppliance_description,
+    smartHomeAppliance_friendlyName,
+    smartHomeAppliance_manufacturerName,
+
+    -- * Sort
+    Sort (..),
+    newSort,
+    sort_key,
+    sort_value,
+
+    -- * Ssml
+    Ssml (..),
+    newSsml,
+    ssml_locale,
+    ssml_value,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TextMessage
+    TextMessage (..),
+    newTextMessage,
+    textMessage_locale,
+    textMessage_value,
+
+    -- * UpdateEndOfMeetingReminder
+    UpdateEndOfMeetingReminder (..),
+    newUpdateEndOfMeetingReminder,
+    updateEndOfMeetingReminder_enabled,
+    updateEndOfMeetingReminder_reminderAtMinutes,
+    updateEndOfMeetingReminder_reminderType,
+
+    -- * UpdateInstantBooking
+    UpdateInstantBooking (..),
+    newUpdateInstantBooking,
+    updateInstantBooking_durationInMinutes,
+    updateInstantBooking_enabled,
+
+    -- * UpdateMeetingRoomConfiguration
+    UpdateMeetingRoomConfiguration (..),
+    newUpdateMeetingRoomConfiguration,
+    updateMeetingRoomConfiguration_endOfMeetingReminder,
+    updateMeetingRoomConfiguration_instantBooking,
+    updateMeetingRoomConfiguration_requireCheckIn,
+    updateMeetingRoomConfiguration_roomUtilizationMetricsEnabled,
+
+    -- * UpdateRequireCheckIn
+    UpdateRequireCheckIn (..),
+    newUpdateRequireCheckIn,
+    updateRequireCheckIn_enabled,
+    updateRequireCheckIn_releaseAfterMinutes,
+
+    -- * UserData
+    UserData (..),
+    newUserData,
+    userData_email,
+    userData_enrollmentId,
+    userData_enrollmentStatus,
+    userData_firstName,
+    userData_lastName,
+    userData_userArn,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types.AddressBook
+import Amazonka.AlexaBusiness.Types.AddressBookData
+import Amazonka.AlexaBusiness.Types.Audio
+import Amazonka.AlexaBusiness.Types.BusinessReport
+import Amazonka.AlexaBusiness.Types.BusinessReportContentRange
+import Amazonka.AlexaBusiness.Types.BusinessReportFailureCode
+import Amazonka.AlexaBusiness.Types.BusinessReportFormat
+import Amazonka.AlexaBusiness.Types.BusinessReportInterval
+import Amazonka.AlexaBusiness.Types.BusinessReportRecurrence
+import Amazonka.AlexaBusiness.Types.BusinessReportS3Location
+import Amazonka.AlexaBusiness.Types.BusinessReportSchedule
+import Amazonka.AlexaBusiness.Types.BusinessReportStatus
+import Amazonka.AlexaBusiness.Types.Category
+import Amazonka.AlexaBusiness.Types.CommsProtocol
+import Amazonka.AlexaBusiness.Types.ConferencePreference
+import Amazonka.AlexaBusiness.Types.ConferenceProvider
+import Amazonka.AlexaBusiness.Types.ConferenceProviderType
+import Amazonka.AlexaBusiness.Types.ConnectionStatus
+import Amazonka.AlexaBusiness.Types.Contact
+import Amazonka.AlexaBusiness.Types.ContactData
+import Amazonka.AlexaBusiness.Types.Content
+import Amazonka.AlexaBusiness.Types.CreateEndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.CreateInstantBooking
+import Amazonka.AlexaBusiness.Types.CreateMeetingRoomConfiguration
+import Amazonka.AlexaBusiness.Types.CreateRequireCheckIn
+import Amazonka.AlexaBusiness.Types.DeveloperInfo
+import Amazonka.AlexaBusiness.Types.Device
+import Amazonka.AlexaBusiness.Types.DeviceData
+import Amazonka.AlexaBusiness.Types.DeviceEvent
+import Amazonka.AlexaBusiness.Types.DeviceEventType
+import Amazonka.AlexaBusiness.Types.DeviceNetworkProfileInfo
+import Amazonka.AlexaBusiness.Types.DeviceStatus
+import Amazonka.AlexaBusiness.Types.DeviceStatusDetail
+import Amazonka.AlexaBusiness.Types.DeviceStatusDetailCode
+import Amazonka.AlexaBusiness.Types.DeviceStatusInfo
+import Amazonka.AlexaBusiness.Types.DeviceUsageType
+import Amazonka.AlexaBusiness.Types.DistanceUnit
+import Amazonka.AlexaBusiness.Types.EnablementType
+import Amazonka.AlexaBusiness.Types.EnablementTypeFilter
+import Amazonka.AlexaBusiness.Types.EndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.EndOfMeetingReminderType
+import Amazonka.AlexaBusiness.Types.EnrollmentStatus
+import Amazonka.AlexaBusiness.Types.Feature
+import Amazonka.AlexaBusiness.Types.Filter
+import Amazonka.AlexaBusiness.Types.Gateway
+import Amazonka.AlexaBusiness.Types.GatewayGroup
+import Amazonka.AlexaBusiness.Types.GatewayGroupSummary
+import Amazonka.AlexaBusiness.Types.GatewaySummary
+import Amazonka.AlexaBusiness.Types.IPDialIn
+import Amazonka.AlexaBusiness.Types.InstantBooking
+import Amazonka.AlexaBusiness.Types.Locale
+import Amazonka.AlexaBusiness.Types.MeetingRoomConfiguration
+import Amazonka.AlexaBusiness.Types.MeetingSetting
+import Amazonka.AlexaBusiness.Types.NetworkEapMethod
+import Amazonka.AlexaBusiness.Types.NetworkProfile
+import Amazonka.AlexaBusiness.Types.NetworkProfileData
+import Amazonka.AlexaBusiness.Types.NetworkSecurityType
+import Amazonka.AlexaBusiness.Types.PSTNDialIn
+import Amazonka.AlexaBusiness.Types.PhoneNumber
+import Amazonka.AlexaBusiness.Types.PhoneNumberType
+import Amazonka.AlexaBusiness.Types.Profile
+import Amazonka.AlexaBusiness.Types.ProfileData
+import Amazonka.AlexaBusiness.Types.RequireCheckIn
+import Amazonka.AlexaBusiness.Types.RequirePin
+import Amazonka.AlexaBusiness.Types.Room
+import Amazonka.AlexaBusiness.Types.RoomData
+import Amazonka.AlexaBusiness.Types.RoomSkillParameter
+import Amazonka.AlexaBusiness.Types.SipAddress
+import Amazonka.AlexaBusiness.Types.SipType
+import Amazonka.AlexaBusiness.Types.SkillDetails
+import Amazonka.AlexaBusiness.Types.SkillGroup
+import Amazonka.AlexaBusiness.Types.SkillGroupData
+import Amazonka.AlexaBusiness.Types.SkillSummary
+import Amazonka.AlexaBusiness.Types.SkillType
+import Amazonka.AlexaBusiness.Types.SkillTypeFilter
+import Amazonka.AlexaBusiness.Types.SkillsStoreSkill
+import Amazonka.AlexaBusiness.Types.SmartHomeAppliance
+import Amazonka.AlexaBusiness.Types.Sort
+import Amazonka.AlexaBusiness.Types.SortValue
+import Amazonka.AlexaBusiness.Types.Ssml
+import Amazonka.AlexaBusiness.Types.Tag
+import Amazonka.AlexaBusiness.Types.TemperatureUnit
+import Amazonka.AlexaBusiness.Types.TextMessage
+import Amazonka.AlexaBusiness.Types.UpdateEndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.UpdateInstantBooking
+import Amazonka.AlexaBusiness.Types.UpdateMeetingRoomConfiguration
+import Amazonka.AlexaBusiness.Types.UpdateRequireCheckIn
+import Amazonka.AlexaBusiness.Types.UserData
+import Amazonka.AlexaBusiness.Types.WakeWord
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-11-09@ of the Amazon Alexa For Business SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "AlexaBusiness",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "a4b",
+      Core.signingName = "a4b",
+      Core.version = "2017-11-09",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "AlexaBusiness",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The resource being created already exists.
+_AlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "AlreadyExistsException"
+
+-- | There is a concurrent modification of resources.
+_ConcurrentModificationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConcurrentModificationException =
+  Core._MatchServiceError
+    defaultService
+    "ConcurrentModificationException"
+
+-- | The request failed because this device is no longer registered and
+-- therefore no longer managed by this account.
+_DeviceNotRegisteredException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DeviceNotRegisteredException =
+  Core._MatchServiceError
+    defaultService
+    "DeviceNotRegisteredException"
+
+-- | The Certificate Authority can\'t issue or revoke a certificate.
+_InvalidCertificateAuthorityException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidCertificateAuthorityException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidCertificateAuthorityException"
+
+-- | The device is in an invalid state.
+_InvalidDeviceException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidDeviceException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidDeviceException"
+
+-- | A password in SecretsManager is in an invalid state.
+_InvalidSecretsManagerResourceException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidSecretsManagerResourceException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidSecretsManagerResourceException"
+
+-- | The service linked role is locked for deletion.
+_InvalidServiceLinkedRoleStateException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidServiceLinkedRoleStateException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidServiceLinkedRoleStateException"
+
+-- | The attempt to update a user is invalid due to the user\'s current
+-- status.
+_InvalidUserStatusException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidUserStatusException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidUserStatusException"
+
+-- | You are performing an action that would put you beyond your account\'s
+-- limits.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+
+-- | The name sent in the request is already in use.
+_NameInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NameInUseException =
+  Core._MatchServiceError
+    defaultService
+    "NameInUseException"
+
+-- | The resource is not found.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+
+-- | Another resource is associated with the resource in the request.
+_ResourceAssociatedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAssociatedException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAssociatedException"
+
+-- | The resource in the request is already in use.
+_ResourceInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceInUseException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceInUseException"
+
+-- | The skill must be linked to a third-party account.
+_SkillNotLinkedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_SkillNotLinkedException =
+  Core._MatchServiceError
+    defaultService
+    "SkillNotLinkedException"
+
+-- | The caller has no permissions to operate on the resource involved in the
+-- API call.
+_UnauthorizedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnauthorizedException =
+  Core._MatchServiceError
+    defaultService
+    "UnauthorizedException"
diff --git a/gen/Amazonka/AlexaBusiness/Types/AddressBook.hs b/gen/Amazonka/AlexaBusiness/Types/AddressBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/AddressBook.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.AddressBook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.AddressBook where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An address book with attributes.
+--
+-- /See:/ 'newAddressBook' smart constructor.
+data AddressBook = AddressBook'
+  { -- | The ARN of the address book.
+    addressBookArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the address book.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the address book.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddressBook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressBookArn', 'addressBook_addressBookArn' - The ARN of the address book.
+--
+-- 'description', 'addressBook_description' - The description of the address book.
+--
+-- 'name', 'addressBook_name' - The name of the address book.
+newAddressBook ::
+  AddressBook
+newAddressBook =
+  AddressBook'
+    { addressBookArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN of the address book.
+addressBook_addressBookArn :: Lens.Lens' AddressBook (Prelude.Maybe Prelude.Text)
+addressBook_addressBookArn = Lens.lens (\AddressBook' {addressBookArn} -> addressBookArn) (\s@AddressBook' {} a -> s {addressBookArn = a} :: AddressBook)
+
+-- | The description of the address book.
+addressBook_description :: Lens.Lens' AddressBook (Prelude.Maybe Prelude.Text)
+addressBook_description = Lens.lens (\AddressBook' {description} -> description) (\s@AddressBook' {} a -> s {description = a} :: AddressBook)
+
+-- | The name of the address book.
+addressBook_name :: Lens.Lens' AddressBook (Prelude.Maybe Prelude.Text)
+addressBook_name = Lens.lens (\AddressBook' {name} -> name) (\s@AddressBook' {} a -> s {name = a} :: AddressBook)
+
+instance Data.FromJSON AddressBook where
+  parseJSON =
+    Data.withObject
+      "AddressBook"
+      ( \x ->
+          AddressBook'
+            Prelude.<$> (x Data..:? "AddressBookArn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable AddressBook where
+  hashWithSalt _salt AddressBook' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressBookArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AddressBook where
+  rnf AddressBook' {..} =
+    Prelude.rnf addressBookArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AlexaBusiness/Types/AddressBookData.hs b/gen/Amazonka/AlexaBusiness/Types/AddressBookData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/AddressBookData.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.AddressBookData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.AddressBookData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information related to an address book.
+--
+-- /See:/ 'newAddressBookData' smart constructor.
+data AddressBookData = AddressBookData'
+  { -- | The ARN of the address book.
+    addressBookArn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the address book.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the address book.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddressBookData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressBookArn', 'addressBookData_addressBookArn' - The ARN of the address book.
+--
+-- 'description', 'addressBookData_description' - The description of the address book.
+--
+-- 'name', 'addressBookData_name' - The name of the address book.
+newAddressBookData ::
+  AddressBookData
+newAddressBookData =
+  AddressBookData'
+    { addressBookArn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN of the address book.
+addressBookData_addressBookArn :: Lens.Lens' AddressBookData (Prelude.Maybe Prelude.Text)
+addressBookData_addressBookArn = Lens.lens (\AddressBookData' {addressBookArn} -> addressBookArn) (\s@AddressBookData' {} a -> s {addressBookArn = a} :: AddressBookData)
+
+-- | The description of the address book.
+addressBookData_description :: Lens.Lens' AddressBookData (Prelude.Maybe Prelude.Text)
+addressBookData_description = Lens.lens (\AddressBookData' {description} -> description) (\s@AddressBookData' {} a -> s {description = a} :: AddressBookData)
+
+-- | The name of the address book.
+addressBookData_name :: Lens.Lens' AddressBookData (Prelude.Maybe Prelude.Text)
+addressBookData_name = Lens.lens (\AddressBookData' {name} -> name) (\s@AddressBookData' {} a -> s {name = a} :: AddressBookData)
+
+instance Data.FromJSON AddressBookData where
+  parseJSON =
+    Data.withObject
+      "AddressBookData"
+      ( \x ->
+          AddressBookData'
+            Prelude.<$> (x Data..:? "AddressBookArn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable AddressBookData where
+  hashWithSalt _salt AddressBookData' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressBookArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AddressBookData where
+  rnf AddressBookData' {..} =
+    Prelude.rnf addressBookArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AlexaBusiness/Types/Audio.hs b/gen/Amazonka/AlexaBusiness/Types/Audio.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Audio.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Audio
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Audio where
+
+import Amazonka.AlexaBusiness.Types.Locale
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The audio message. There is a 1 MB limit on the audio file input and the
+-- only supported format is MP3. To convert your MP3 audio files to an
+-- Alexa-friendly,
+--
+-- required codec version (MPEG version 2) and bit rate (48 kbps), you
+-- might use converter software. One option for this is a command-line
+-- tool, FFmpeg. For more information, see
+-- <https://www.ffmpeg.org/ FFmpeg>. The following command converts the
+-- provided \<input-file> to an MP3 file that is played in the
+-- announcement:
+--
+-- @ffmpeg -i \<input-file> -ac 2 -codec:a libmp3lame -b:a 48k -ar 16000 \<output-file.mp3>@
+--
+-- /See:/ 'newAudio' smart constructor.
+data Audio = Audio'
+  { -- | The locale of the audio message. Currently, en-US is supported.
+    locale :: Locale,
+    -- | The location of the audio file. Currently, S3 URLs are supported. Only
+    -- S3 locations comprised of safe characters are valid. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#Safe%20Characters Safe Characters>.
+    location :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Audio' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locale', 'audio_locale' - The locale of the audio message. Currently, en-US is supported.
+--
+-- 'location', 'audio_location' - The location of the audio file. Currently, S3 URLs are supported. Only
+-- S3 locations comprised of safe characters are valid. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#Safe%20Characters Safe Characters>.
+newAudio ::
+  -- | 'locale'
+  Locale ->
+  -- | 'location'
+  Prelude.Text ->
+  Audio
+newAudio pLocale_ pLocation_ =
+  Audio' {locale = pLocale_, location = pLocation_}
+
+-- | The locale of the audio message. Currently, en-US is supported.
+audio_locale :: Lens.Lens' Audio Locale
+audio_locale = Lens.lens (\Audio' {locale} -> locale) (\s@Audio' {} a -> s {locale = a} :: Audio)
+
+-- | The location of the audio file. Currently, S3 URLs are supported. Only
+-- S3 locations comprised of safe characters are valid. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#Safe%20Characters Safe Characters>.
+audio_location :: Lens.Lens' Audio Prelude.Text
+audio_location = Lens.lens (\Audio' {location} -> location) (\s@Audio' {} a -> s {location = a} :: Audio)
+
+instance Prelude.Hashable Audio where
+  hashWithSalt _salt Audio' {..} =
+    _salt
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` location
+
+instance Prelude.NFData Audio where
+  rnf Audio' {..} =
+    Prelude.rnf locale
+      `Prelude.seq` Prelude.rnf location
+
+instance Data.ToJSON Audio where
+  toJSON Audio' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Locale" Data..= locale),
+            Prelude.Just ("Location" Data..= location)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReport.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReport.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReport where
+
+import Amazonka.AlexaBusiness.Types.BusinessReportFailureCode
+import Amazonka.AlexaBusiness.Types.BusinessReportS3Location
+import Amazonka.AlexaBusiness.Types.BusinessReportStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Usage report with specified parameters.
+--
+-- /See:/ 'newBusinessReport' smart constructor.
+data BusinessReport = BusinessReport'
+  { -- | The time of report delivery.
+    deliveryTime :: Prelude.Maybe Data.POSIX,
+    -- | The download link where a user can download the report.
+    downloadUrl :: Prelude.Maybe Prelude.Text,
+    -- | The failure code.
+    failureCode :: Prelude.Maybe BusinessReportFailureCode,
+    -- | The S3 location of the output reports.
+    s3Location :: Prelude.Maybe BusinessReportS3Location,
+    -- | The status of the report generation execution (RUNNING, SUCCEEDED, or
+    -- FAILED).
+    status :: Prelude.Maybe BusinessReportStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BusinessReport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deliveryTime', 'businessReport_deliveryTime' - The time of report delivery.
+--
+-- 'downloadUrl', 'businessReport_downloadUrl' - The download link where a user can download the report.
+--
+-- 'failureCode', 'businessReport_failureCode' - The failure code.
+--
+-- 's3Location', 'businessReport_s3Location' - The S3 location of the output reports.
+--
+-- 'status', 'businessReport_status' - The status of the report generation execution (RUNNING, SUCCEEDED, or
+-- FAILED).
+newBusinessReport ::
+  BusinessReport
+newBusinessReport =
+  BusinessReport'
+    { deliveryTime = Prelude.Nothing,
+      downloadUrl = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      s3Location = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The time of report delivery.
+businessReport_deliveryTime :: Lens.Lens' BusinessReport (Prelude.Maybe Prelude.UTCTime)
+businessReport_deliveryTime = Lens.lens (\BusinessReport' {deliveryTime} -> deliveryTime) (\s@BusinessReport' {} a -> s {deliveryTime = a} :: BusinessReport) Prelude.. Lens.mapping Data._Time
+
+-- | The download link where a user can download the report.
+businessReport_downloadUrl :: Lens.Lens' BusinessReport (Prelude.Maybe Prelude.Text)
+businessReport_downloadUrl = Lens.lens (\BusinessReport' {downloadUrl} -> downloadUrl) (\s@BusinessReport' {} a -> s {downloadUrl = a} :: BusinessReport)
+
+-- | The failure code.
+businessReport_failureCode :: Lens.Lens' BusinessReport (Prelude.Maybe BusinessReportFailureCode)
+businessReport_failureCode = Lens.lens (\BusinessReport' {failureCode} -> failureCode) (\s@BusinessReport' {} a -> s {failureCode = a} :: BusinessReport)
+
+-- | The S3 location of the output reports.
+businessReport_s3Location :: Lens.Lens' BusinessReport (Prelude.Maybe BusinessReportS3Location)
+businessReport_s3Location = Lens.lens (\BusinessReport' {s3Location} -> s3Location) (\s@BusinessReport' {} a -> s {s3Location = a} :: BusinessReport)
+
+-- | The status of the report generation execution (RUNNING, SUCCEEDED, or
+-- FAILED).
+businessReport_status :: Lens.Lens' BusinessReport (Prelude.Maybe BusinessReportStatus)
+businessReport_status = Lens.lens (\BusinessReport' {status} -> status) (\s@BusinessReport' {} a -> s {status = a} :: BusinessReport)
+
+instance Data.FromJSON BusinessReport where
+  parseJSON =
+    Data.withObject
+      "BusinessReport"
+      ( \x ->
+          BusinessReport'
+            Prelude.<$> (x Data..:? "DeliveryTime")
+            Prelude.<*> (x Data..:? "DownloadUrl")
+            Prelude.<*> (x Data..:? "FailureCode")
+            Prelude.<*> (x Data..:? "S3Location")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable BusinessReport where
+  hashWithSalt _salt BusinessReport' {..} =
+    _salt
+      `Prelude.hashWithSalt` deliveryTime
+      `Prelude.hashWithSalt` downloadUrl
+      `Prelude.hashWithSalt` failureCode
+      `Prelude.hashWithSalt` s3Location
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData BusinessReport where
+  rnf BusinessReport' {..} =
+    Prelude.rnf deliveryTime
+      `Prelude.seq` Prelude.rnf downloadUrl
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf s3Location
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReportContentRange.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReportContentRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReportContentRange.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReportContentRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReportContentRange where
+
+import Amazonka.AlexaBusiness.Types.BusinessReportInterval
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The content range of the report.
+--
+-- /See:/ 'newBusinessReportContentRange' smart constructor.
+data BusinessReportContentRange = BusinessReportContentRange'
+  { -- | The interval of the content range.
+    interval :: BusinessReportInterval
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BusinessReportContentRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'interval', 'businessReportContentRange_interval' - The interval of the content range.
+newBusinessReportContentRange ::
+  -- | 'interval'
+  BusinessReportInterval ->
+  BusinessReportContentRange
+newBusinessReportContentRange pInterval_ =
+  BusinessReportContentRange' {interval = pInterval_}
+
+-- | The interval of the content range.
+businessReportContentRange_interval :: Lens.Lens' BusinessReportContentRange BusinessReportInterval
+businessReportContentRange_interval = Lens.lens (\BusinessReportContentRange' {interval} -> interval) (\s@BusinessReportContentRange' {} a -> s {interval = a} :: BusinessReportContentRange)
+
+instance Data.FromJSON BusinessReportContentRange where
+  parseJSON =
+    Data.withObject
+      "BusinessReportContentRange"
+      ( \x ->
+          BusinessReportContentRange'
+            Prelude.<$> (x Data..: "Interval")
+      )
+
+instance Prelude.Hashable BusinessReportContentRange where
+  hashWithSalt _salt BusinessReportContentRange' {..} =
+    _salt `Prelude.hashWithSalt` interval
+
+instance Prelude.NFData BusinessReportContentRange where
+  rnf BusinessReportContentRange' {..} =
+    Prelude.rnf interval
+
+instance Data.ToJSON BusinessReportContentRange where
+  toJSON BusinessReportContentRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Interval" Data..= interval)]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReportFailureCode.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReportFailureCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReportFailureCode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReportFailureCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReportFailureCode
+  ( BusinessReportFailureCode
+      ( ..,
+        BusinessReportFailureCode_ACCESS_DENIED,
+        BusinessReportFailureCode_INTERNAL_FAILURE,
+        BusinessReportFailureCode_NO_SUCH_BUCKET
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BusinessReportFailureCode = BusinessReportFailureCode'
+  { fromBusinessReportFailureCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BusinessReportFailureCode_ACCESS_DENIED :: BusinessReportFailureCode
+pattern BusinessReportFailureCode_ACCESS_DENIED = BusinessReportFailureCode' "ACCESS_DENIED"
+
+pattern BusinessReportFailureCode_INTERNAL_FAILURE :: BusinessReportFailureCode
+pattern BusinessReportFailureCode_INTERNAL_FAILURE = BusinessReportFailureCode' "INTERNAL_FAILURE"
+
+pattern BusinessReportFailureCode_NO_SUCH_BUCKET :: BusinessReportFailureCode
+pattern BusinessReportFailureCode_NO_SUCH_BUCKET = BusinessReportFailureCode' "NO_SUCH_BUCKET"
+
+{-# COMPLETE
+  BusinessReportFailureCode_ACCESS_DENIED,
+  BusinessReportFailureCode_INTERNAL_FAILURE,
+  BusinessReportFailureCode_NO_SUCH_BUCKET,
+  BusinessReportFailureCode'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReportFormat.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReportFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReportFormat.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReportFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReportFormat
+  ( BusinessReportFormat
+      ( ..,
+        BusinessReportFormat_CSV,
+        BusinessReportFormat_CSV_ZIP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BusinessReportFormat = BusinessReportFormat'
+  { fromBusinessReportFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BusinessReportFormat_CSV :: BusinessReportFormat
+pattern BusinessReportFormat_CSV = BusinessReportFormat' "CSV"
+
+pattern BusinessReportFormat_CSV_ZIP :: BusinessReportFormat
+pattern BusinessReportFormat_CSV_ZIP = BusinessReportFormat' "CSV_ZIP"
+
+{-# COMPLETE
+  BusinessReportFormat_CSV,
+  BusinessReportFormat_CSV_ZIP,
+  BusinessReportFormat'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReportInterval.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReportInterval.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReportInterval.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReportInterval
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReportInterval
+  ( BusinessReportInterval
+      ( ..,
+        BusinessReportInterval_ONE_DAY,
+        BusinessReportInterval_ONE_WEEK,
+        BusinessReportInterval_THIRTY_DAYS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BusinessReportInterval = BusinessReportInterval'
+  { fromBusinessReportInterval ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BusinessReportInterval_ONE_DAY :: BusinessReportInterval
+pattern BusinessReportInterval_ONE_DAY = BusinessReportInterval' "ONE_DAY"
+
+pattern BusinessReportInterval_ONE_WEEK :: BusinessReportInterval
+pattern BusinessReportInterval_ONE_WEEK = BusinessReportInterval' "ONE_WEEK"
+
+pattern BusinessReportInterval_THIRTY_DAYS :: BusinessReportInterval
+pattern BusinessReportInterval_THIRTY_DAYS = BusinessReportInterval' "THIRTY_DAYS"
+
+{-# COMPLETE
+  BusinessReportInterval_ONE_DAY,
+  BusinessReportInterval_ONE_WEEK,
+  BusinessReportInterval_THIRTY_DAYS,
+  BusinessReportInterval'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReportRecurrence.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReportRecurrence.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReportRecurrence.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReportRecurrence
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReportRecurrence where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The recurrence of the reports.
+--
+-- /See:/ 'newBusinessReportRecurrence' smart constructor.
+data BusinessReportRecurrence = BusinessReportRecurrence'
+  { -- | The start date.
+    startDate :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BusinessReportRecurrence' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'startDate', 'businessReportRecurrence_startDate' - The start date.
+newBusinessReportRecurrence ::
+  BusinessReportRecurrence
+newBusinessReportRecurrence =
+  BusinessReportRecurrence'
+    { startDate =
+        Prelude.Nothing
+    }
+
+-- | The start date.
+businessReportRecurrence_startDate :: Lens.Lens' BusinessReportRecurrence (Prelude.Maybe Prelude.Text)
+businessReportRecurrence_startDate = Lens.lens (\BusinessReportRecurrence' {startDate} -> startDate) (\s@BusinessReportRecurrence' {} a -> s {startDate = a} :: BusinessReportRecurrence)
+
+instance Data.FromJSON BusinessReportRecurrence where
+  parseJSON =
+    Data.withObject
+      "BusinessReportRecurrence"
+      ( \x ->
+          BusinessReportRecurrence'
+            Prelude.<$> (x Data..:? "StartDate")
+      )
+
+instance Prelude.Hashable BusinessReportRecurrence where
+  hashWithSalt _salt BusinessReportRecurrence' {..} =
+    _salt `Prelude.hashWithSalt` startDate
+
+instance Prelude.NFData BusinessReportRecurrence where
+  rnf BusinessReportRecurrence' {..} =
+    Prelude.rnf startDate
+
+instance Data.ToJSON BusinessReportRecurrence where
+  toJSON BusinessReportRecurrence' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("StartDate" Data..=) Prelude.<$> startDate]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReportS3Location.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReportS3Location.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReportS3Location.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReportS3Location
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReportS3Location where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The S3 location of the output reports.
+--
+-- /See:/ 'newBusinessReportS3Location' smart constructor.
+data BusinessReportS3Location = BusinessReportS3Location'
+  { -- | The S3 bucket name of the output reports.
+    bucketName :: Prelude.Maybe Prelude.Text,
+    -- | The path of the business report.
+    path :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BusinessReportS3Location' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketName', 'businessReportS3Location_bucketName' - The S3 bucket name of the output reports.
+--
+-- 'path', 'businessReportS3Location_path' - The path of the business report.
+newBusinessReportS3Location ::
+  BusinessReportS3Location
+newBusinessReportS3Location =
+  BusinessReportS3Location'
+    { bucketName =
+        Prelude.Nothing,
+      path = Prelude.Nothing
+    }
+
+-- | The S3 bucket name of the output reports.
+businessReportS3Location_bucketName :: Lens.Lens' BusinessReportS3Location (Prelude.Maybe Prelude.Text)
+businessReportS3Location_bucketName = Lens.lens (\BusinessReportS3Location' {bucketName} -> bucketName) (\s@BusinessReportS3Location' {} a -> s {bucketName = a} :: BusinessReportS3Location)
+
+-- | The path of the business report.
+businessReportS3Location_path :: Lens.Lens' BusinessReportS3Location (Prelude.Maybe Prelude.Text)
+businessReportS3Location_path = Lens.lens (\BusinessReportS3Location' {path} -> path) (\s@BusinessReportS3Location' {} a -> s {path = a} :: BusinessReportS3Location)
+
+instance Data.FromJSON BusinessReportS3Location where
+  parseJSON =
+    Data.withObject
+      "BusinessReportS3Location"
+      ( \x ->
+          BusinessReportS3Location'
+            Prelude.<$> (x Data..:? "BucketName")
+            Prelude.<*> (x Data..:? "Path")
+      )
+
+instance Prelude.Hashable BusinessReportS3Location where
+  hashWithSalt _salt BusinessReportS3Location' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` path
+
+instance Prelude.NFData BusinessReportS3Location where
+  rnf BusinessReportS3Location' {..} =
+    Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf path
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReportSchedule.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReportSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReportSchedule.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReportSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReportSchedule where
+
+import Amazonka.AlexaBusiness.Types.BusinessReport
+import Amazonka.AlexaBusiness.Types.BusinessReportContentRange
+import Amazonka.AlexaBusiness.Types.BusinessReportFormat
+import Amazonka.AlexaBusiness.Types.BusinessReportRecurrence
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The schedule of the usage report.
+--
+-- /See:/ 'newBusinessReportSchedule' smart constructor.
+data BusinessReportSchedule = BusinessReportSchedule'
+  { -- | The content range of the reports.
+    contentRange :: Prelude.Maybe BusinessReportContentRange,
+    -- | The format of the generated report (individual CSV files or zipped files
+    -- of individual files).
+    format :: Prelude.Maybe BusinessReportFormat,
+    -- | The details of the last business report delivery for a specified time
+    -- interval.
+    lastBusinessReport :: Prelude.Maybe BusinessReport,
+    -- | The recurrence of the reports.
+    recurrence :: Prelude.Maybe BusinessReportRecurrence,
+    -- | The S3 bucket name of the output reports.
+    s3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The S3 key where the report is delivered.
+    s3KeyPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the business report schedule.
+    scheduleArn :: Prelude.Maybe Prelude.Text,
+    -- | The name identifier of the schedule.
+    scheduleName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BusinessReportSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contentRange', 'businessReportSchedule_contentRange' - The content range of the reports.
+--
+-- 'format', 'businessReportSchedule_format' - The format of the generated report (individual CSV files or zipped files
+-- of individual files).
+--
+-- 'lastBusinessReport', 'businessReportSchedule_lastBusinessReport' - The details of the last business report delivery for a specified time
+-- interval.
+--
+-- 'recurrence', 'businessReportSchedule_recurrence' - The recurrence of the reports.
+--
+-- 's3BucketName', 'businessReportSchedule_s3BucketName' - The S3 bucket name of the output reports.
+--
+-- 's3KeyPrefix', 'businessReportSchedule_s3KeyPrefix' - The S3 key where the report is delivered.
+--
+-- 'scheduleArn', 'businessReportSchedule_scheduleArn' - The ARN of the business report schedule.
+--
+-- 'scheduleName', 'businessReportSchedule_scheduleName' - The name identifier of the schedule.
+newBusinessReportSchedule ::
+  BusinessReportSchedule
+newBusinessReportSchedule =
+  BusinessReportSchedule'
+    { contentRange =
+        Prelude.Nothing,
+      format = Prelude.Nothing,
+      lastBusinessReport = Prelude.Nothing,
+      recurrence = Prelude.Nothing,
+      s3BucketName = Prelude.Nothing,
+      s3KeyPrefix = Prelude.Nothing,
+      scheduleArn = Prelude.Nothing,
+      scheduleName = Prelude.Nothing
+    }
+
+-- | The content range of the reports.
+businessReportSchedule_contentRange :: Lens.Lens' BusinessReportSchedule (Prelude.Maybe BusinessReportContentRange)
+businessReportSchedule_contentRange = Lens.lens (\BusinessReportSchedule' {contentRange} -> contentRange) (\s@BusinessReportSchedule' {} a -> s {contentRange = a} :: BusinessReportSchedule)
+
+-- | The format of the generated report (individual CSV files or zipped files
+-- of individual files).
+businessReportSchedule_format :: Lens.Lens' BusinessReportSchedule (Prelude.Maybe BusinessReportFormat)
+businessReportSchedule_format = Lens.lens (\BusinessReportSchedule' {format} -> format) (\s@BusinessReportSchedule' {} a -> s {format = a} :: BusinessReportSchedule)
+
+-- | The details of the last business report delivery for a specified time
+-- interval.
+businessReportSchedule_lastBusinessReport :: Lens.Lens' BusinessReportSchedule (Prelude.Maybe BusinessReport)
+businessReportSchedule_lastBusinessReport = Lens.lens (\BusinessReportSchedule' {lastBusinessReport} -> lastBusinessReport) (\s@BusinessReportSchedule' {} a -> s {lastBusinessReport = a} :: BusinessReportSchedule)
+
+-- | The recurrence of the reports.
+businessReportSchedule_recurrence :: Lens.Lens' BusinessReportSchedule (Prelude.Maybe BusinessReportRecurrence)
+businessReportSchedule_recurrence = Lens.lens (\BusinessReportSchedule' {recurrence} -> recurrence) (\s@BusinessReportSchedule' {} a -> s {recurrence = a} :: BusinessReportSchedule)
+
+-- | The S3 bucket name of the output reports.
+businessReportSchedule_s3BucketName :: Lens.Lens' BusinessReportSchedule (Prelude.Maybe Prelude.Text)
+businessReportSchedule_s3BucketName = Lens.lens (\BusinessReportSchedule' {s3BucketName} -> s3BucketName) (\s@BusinessReportSchedule' {} a -> s {s3BucketName = a} :: BusinessReportSchedule)
+
+-- | The S3 key where the report is delivered.
+businessReportSchedule_s3KeyPrefix :: Lens.Lens' BusinessReportSchedule (Prelude.Maybe Prelude.Text)
+businessReportSchedule_s3KeyPrefix = Lens.lens (\BusinessReportSchedule' {s3KeyPrefix} -> s3KeyPrefix) (\s@BusinessReportSchedule' {} a -> s {s3KeyPrefix = a} :: BusinessReportSchedule)
+
+-- | The ARN of the business report schedule.
+businessReportSchedule_scheduleArn :: Lens.Lens' BusinessReportSchedule (Prelude.Maybe Prelude.Text)
+businessReportSchedule_scheduleArn = Lens.lens (\BusinessReportSchedule' {scheduleArn} -> scheduleArn) (\s@BusinessReportSchedule' {} a -> s {scheduleArn = a} :: BusinessReportSchedule)
+
+-- | The name identifier of the schedule.
+businessReportSchedule_scheduleName :: Lens.Lens' BusinessReportSchedule (Prelude.Maybe Prelude.Text)
+businessReportSchedule_scheduleName = Lens.lens (\BusinessReportSchedule' {scheduleName} -> scheduleName) (\s@BusinessReportSchedule' {} a -> s {scheduleName = a} :: BusinessReportSchedule)
+
+instance Data.FromJSON BusinessReportSchedule where
+  parseJSON =
+    Data.withObject
+      "BusinessReportSchedule"
+      ( \x ->
+          BusinessReportSchedule'
+            Prelude.<$> (x Data..:? "ContentRange")
+            Prelude.<*> (x Data..:? "Format")
+            Prelude.<*> (x Data..:? "LastBusinessReport")
+            Prelude.<*> (x Data..:? "Recurrence")
+            Prelude.<*> (x Data..:? "S3BucketName")
+            Prelude.<*> (x Data..:? "S3KeyPrefix")
+            Prelude.<*> (x Data..:? "ScheduleArn")
+            Prelude.<*> (x Data..:? "ScheduleName")
+      )
+
+instance Prelude.Hashable BusinessReportSchedule where
+  hashWithSalt _salt BusinessReportSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` contentRange
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` lastBusinessReport
+      `Prelude.hashWithSalt` recurrence
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` s3KeyPrefix
+      `Prelude.hashWithSalt` scheduleArn
+      `Prelude.hashWithSalt` scheduleName
+
+instance Prelude.NFData BusinessReportSchedule where
+  rnf BusinessReportSchedule' {..} =
+    Prelude.rnf contentRange
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf lastBusinessReport
+      `Prelude.seq` Prelude.rnf recurrence
+      `Prelude.seq` Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf s3KeyPrefix
+      `Prelude.seq` Prelude.rnf scheduleArn
+      `Prelude.seq` Prelude.rnf scheduleName
diff --git a/gen/Amazonka/AlexaBusiness/Types/BusinessReportStatus.hs b/gen/Amazonka/AlexaBusiness/Types/BusinessReportStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/BusinessReportStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.BusinessReportStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.BusinessReportStatus
+  ( BusinessReportStatus
+      ( ..,
+        BusinessReportStatus_FAILED,
+        BusinessReportStatus_RUNNING,
+        BusinessReportStatus_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BusinessReportStatus = BusinessReportStatus'
+  { fromBusinessReportStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BusinessReportStatus_FAILED :: BusinessReportStatus
+pattern BusinessReportStatus_FAILED = BusinessReportStatus' "FAILED"
+
+pattern BusinessReportStatus_RUNNING :: BusinessReportStatus
+pattern BusinessReportStatus_RUNNING = BusinessReportStatus' "RUNNING"
+
+pattern BusinessReportStatus_SUCCEEDED :: BusinessReportStatus
+pattern BusinessReportStatus_SUCCEEDED = BusinessReportStatus' "SUCCEEDED"
+
+{-# COMPLETE
+  BusinessReportStatus_FAILED,
+  BusinessReportStatus_RUNNING,
+  BusinessReportStatus_SUCCEEDED,
+  BusinessReportStatus'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/Category.hs b/gen/Amazonka/AlexaBusiness/Types/Category.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Category.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Category
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Category where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The skill store category that is shown. Alexa skills are assigned a
+-- specific skill category during creation, such as News, Social, and
+-- Sports.
+--
+-- /See:/ 'newCategory' smart constructor.
+data Category = Category'
+  { -- | The ID of the skill store category.
+    categoryId :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the skill store category.
+    categoryName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Category' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'categoryId', 'category_categoryId' - The ID of the skill store category.
+--
+-- 'categoryName', 'category_categoryName' - The name of the skill store category.
+newCategory ::
+  Category
+newCategory =
+  Category'
+    { categoryId = Prelude.Nothing,
+      categoryName = Prelude.Nothing
+    }
+
+-- | The ID of the skill store category.
+category_categoryId :: Lens.Lens' Category (Prelude.Maybe Prelude.Natural)
+category_categoryId = Lens.lens (\Category' {categoryId} -> categoryId) (\s@Category' {} a -> s {categoryId = a} :: Category)
+
+-- | The name of the skill store category.
+category_categoryName :: Lens.Lens' Category (Prelude.Maybe Prelude.Text)
+category_categoryName = Lens.lens (\Category' {categoryName} -> categoryName) (\s@Category' {} a -> s {categoryName = a} :: Category)
+
+instance Data.FromJSON Category where
+  parseJSON =
+    Data.withObject
+      "Category"
+      ( \x ->
+          Category'
+            Prelude.<$> (x Data..:? "CategoryId")
+            Prelude.<*> (x Data..:? "CategoryName")
+      )
+
+instance Prelude.Hashable Category where
+  hashWithSalt _salt Category' {..} =
+    _salt
+      `Prelude.hashWithSalt` categoryId
+      `Prelude.hashWithSalt` categoryName
+
+instance Prelude.NFData Category where
+  rnf Category' {..} =
+    Prelude.rnf categoryId
+      `Prelude.seq` Prelude.rnf categoryName
diff --git a/gen/Amazonka/AlexaBusiness/Types/CommsProtocol.hs b/gen/Amazonka/AlexaBusiness/Types/CommsProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/CommsProtocol.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.CommsProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.CommsProtocol
+  ( CommsProtocol
+      ( ..,
+        CommsProtocol_H323,
+        CommsProtocol_SIP,
+        CommsProtocol_SIPS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CommsProtocol = CommsProtocol'
+  { fromCommsProtocol ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CommsProtocol_H323 :: CommsProtocol
+pattern CommsProtocol_H323 = CommsProtocol' "H323"
+
+pattern CommsProtocol_SIP :: CommsProtocol
+pattern CommsProtocol_SIP = CommsProtocol' "SIP"
+
+pattern CommsProtocol_SIPS :: CommsProtocol
+pattern CommsProtocol_SIPS = CommsProtocol' "SIPS"
+
+{-# COMPLETE
+  CommsProtocol_H323,
+  CommsProtocol_SIP,
+  CommsProtocol_SIPS,
+  CommsProtocol'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/ConferencePreference.hs b/gen/Amazonka/AlexaBusiness/Types/ConferencePreference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/ConferencePreference.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.ConferencePreference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.ConferencePreference where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The default conference provider that is used if no other scheduled
+-- meetings are detected.
+--
+-- /See:/ 'newConferencePreference' smart constructor.
+data ConferencePreference = ConferencePreference'
+  { -- | The ARN of the default conference provider.
+    defaultConferenceProviderArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConferencePreference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultConferenceProviderArn', 'conferencePreference_defaultConferenceProviderArn' - The ARN of the default conference provider.
+newConferencePreference ::
+  ConferencePreference
+newConferencePreference =
+  ConferencePreference'
+    { defaultConferenceProviderArn =
+        Prelude.Nothing
+    }
+
+-- | The ARN of the default conference provider.
+conferencePreference_defaultConferenceProviderArn :: Lens.Lens' ConferencePreference (Prelude.Maybe Prelude.Text)
+conferencePreference_defaultConferenceProviderArn = Lens.lens (\ConferencePreference' {defaultConferenceProviderArn} -> defaultConferenceProviderArn) (\s@ConferencePreference' {} a -> s {defaultConferenceProviderArn = a} :: ConferencePreference)
+
+instance Data.FromJSON ConferencePreference where
+  parseJSON =
+    Data.withObject
+      "ConferencePreference"
+      ( \x ->
+          ConferencePreference'
+            Prelude.<$> (x Data..:? "DefaultConferenceProviderArn")
+      )
+
+instance Prelude.Hashable ConferencePreference where
+  hashWithSalt _salt ConferencePreference' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultConferenceProviderArn
+
+instance Prelude.NFData ConferencePreference where
+  rnf ConferencePreference' {..} =
+    Prelude.rnf defaultConferenceProviderArn
+
+instance Data.ToJSON ConferencePreference where
+  toJSON ConferencePreference' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DefaultConferenceProviderArn" Data..=)
+              Prelude.<$> defaultConferenceProviderArn
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/ConferenceProvider.hs b/gen/Amazonka/AlexaBusiness/Types/ConferenceProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/ConferenceProvider.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.ConferenceProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.ConferenceProvider where
+
+import Amazonka.AlexaBusiness.Types.ConferenceProviderType
+import Amazonka.AlexaBusiness.Types.IPDialIn
+import Amazonka.AlexaBusiness.Types.MeetingSetting
+import Amazonka.AlexaBusiness.Types.PSTNDialIn
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An entity that provides a conferencing solution. Alexa for Business acts
+-- as the voice interface and mediator that connects users to their
+-- preferred conference provider. Examples of conference providers include
+-- Amazon Chime, Zoom, Cisco, and Polycom.
+--
+-- /See:/ 'newConferenceProvider' smart constructor.
+data ConferenceProvider = ConferenceProvider'
+  { -- | The ARN of the newly created conference provider.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The IP endpoint and protocol for calling.
+    iPDialIn :: Prelude.Maybe IPDialIn,
+    -- | The meeting settings for the conference provider.
+    meetingSetting :: Prelude.Maybe MeetingSetting,
+    -- | The name of the conference provider.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The information for PSTN conferencing.
+    pSTNDialIn :: Prelude.Maybe PSTNDialIn,
+    -- | The type of conference providers.
+    type' :: Prelude.Maybe ConferenceProviderType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConferenceProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'conferenceProvider_arn' - The ARN of the newly created conference provider.
+--
+-- 'iPDialIn', 'conferenceProvider_iPDialIn' - The IP endpoint and protocol for calling.
+--
+-- 'meetingSetting', 'conferenceProvider_meetingSetting' - The meeting settings for the conference provider.
+--
+-- 'name', 'conferenceProvider_name' - The name of the conference provider.
+--
+-- 'pSTNDialIn', 'conferenceProvider_pSTNDialIn' - The information for PSTN conferencing.
+--
+-- 'type'', 'conferenceProvider_type' - The type of conference providers.
+newConferenceProvider ::
+  ConferenceProvider
+newConferenceProvider =
+  ConferenceProvider'
+    { arn = Prelude.Nothing,
+      iPDialIn = Prelude.Nothing,
+      meetingSetting = Prelude.Nothing,
+      name = Prelude.Nothing,
+      pSTNDialIn = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The ARN of the newly created conference provider.
+conferenceProvider_arn :: Lens.Lens' ConferenceProvider (Prelude.Maybe Prelude.Text)
+conferenceProvider_arn = Lens.lens (\ConferenceProvider' {arn} -> arn) (\s@ConferenceProvider' {} a -> s {arn = a} :: ConferenceProvider)
+
+-- | The IP endpoint and protocol for calling.
+conferenceProvider_iPDialIn :: Lens.Lens' ConferenceProvider (Prelude.Maybe IPDialIn)
+conferenceProvider_iPDialIn = Lens.lens (\ConferenceProvider' {iPDialIn} -> iPDialIn) (\s@ConferenceProvider' {} a -> s {iPDialIn = a} :: ConferenceProvider)
+
+-- | The meeting settings for the conference provider.
+conferenceProvider_meetingSetting :: Lens.Lens' ConferenceProvider (Prelude.Maybe MeetingSetting)
+conferenceProvider_meetingSetting = Lens.lens (\ConferenceProvider' {meetingSetting} -> meetingSetting) (\s@ConferenceProvider' {} a -> s {meetingSetting = a} :: ConferenceProvider)
+
+-- | The name of the conference provider.
+conferenceProvider_name :: Lens.Lens' ConferenceProvider (Prelude.Maybe Prelude.Text)
+conferenceProvider_name = Lens.lens (\ConferenceProvider' {name} -> name) (\s@ConferenceProvider' {} a -> s {name = a} :: ConferenceProvider)
+
+-- | The information for PSTN conferencing.
+conferenceProvider_pSTNDialIn :: Lens.Lens' ConferenceProvider (Prelude.Maybe PSTNDialIn)
+conferenceProvider_pSTNDialIn = Lens.lens (\ConferenceProvider' {pSTNDialIn} -> pSTNDialIn) (\s@ConferenceProvider' {} a -> s {pSTNDialIn = a} :: ConferenceProvider)
+
+-- | The type of conference providers.
+conferenceProvider_type :: Lens.Lens' ConferenceProvider (Prelude.Maybe ConferenceProviderType)
+conferenceProvider_type = Lens.lens (\ConferenceProvider' {type'} -> type') (\s@ConferenceProvider' {} a -> s {type' = a} :: ConferenceProvider)
+
+instance Data.FromJSON ConferenceProvider where
+  parseJSON =
+    Data.withObject
+      "ConferenceProvider"
+      ( \x ->
+          ConferenceProvider'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "IPDialIn")
+            Prelude.<*> (x Data..:? "MeetingSetting")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "PSTNDialIn")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable ConferenceProvider where
+  hashWithSalt _salt ConferenceProvider' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` iPDialIn
+      `Prelude.hashWithSalt` meetingSetting
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` pSTNDialIn
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ConferenceProvider where
+  rnf ConferenceProvider' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf iPDialIn
+      `Prelude.seq` Prelude.rnf meetingSetting
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf pSTNDialIn
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/AlexaBusiness/Types/ConferenceProviderType.hs b/gen/Amazonka/AlexaBusiness/Types/ConferenceProviderType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/ConferenceProviderType.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.ConferenceProviderType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.ConferenceProviderType
+  ( ConferenceProviderType
+      ( ..,
+        ConferenceProviderType_BLUEJEANS,
+        ConferenceProviderType_CHIME,
+        ConferenceProviderType_CUSTOM,
+        ConferenceProviderType_FUZE,
+        ConferenceProviderType_GOOGLE_HANGOUTS,
+        ConferenceProviderType_POLYCOM,
+        ConferenceProviderType_RINGCENTRAL,
+        ConferenceProviderType_SKYPE_FOR_BUSINESS,
+        ConferenceProviderType_WEBEX,
+        ConferenceProviderType_ZOOM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConferenceProviderType = ConferenceProviderType'
+  { fromConferenceProviderType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConferenceProviderType_BLUEJEANS :: ConferenceProviderType
+pattern ConferenceProviderType_BLUEJEANS = ConferenceProviderType' "BLUEJEANS"
+
+pattern ConferenceProviderType_CHIME :: ConferenceProviderType
+pattern ConferenceProviderType_CHIME = ConferenceProviderType' "CHIME"
+
+pattern ConferenceProviderType_CUSTOM :: ConferenceProviderType
+pattern ConferenceProviderType_CUSTOM = ConferenceProviderType' "CUSTOM"
+
+pattern ConferenceProviderType_FUZE :: ConferenceProviderType
+pattern ConferenceProviderType_FUZE = ConferenceProviderType' "FUZE"
+
+pattern ConferenceProviderType_GOOGLE_HANGOUTS :: ConferenceProviderType
+pattern ConferenceProviderType_GOOGLE_HANGOUTS = ConferenceProviderType' "GOOGLE_HANGOUTS"
+
+pattern ConferenceProviderType_POLYCOM :: ConferenceProviderType
+pattern ConferenceProviderType_POLYCOM = ConferenceProviderType' "POLYCOM"
+
+pattern ConferenceProviderType_RINGCENTRAL :: ConferenceProviderType
+pattern ConferenceProviderType_RINGCENTRAL = ConferenceProviderType' "RINGCENTRAL"
+
+pattern ConferenceProviderType_SKYPE_FOR_BUSINESS :: ConferenceProviderType
+pattern ConferenceProviderType_SKYPE_FOR_BUSINESS = ConferenceProviderType' "SKYPE_FOR_BUSINESS"
+
+pattern ConferenceProviderType_WEBEX :: ConferenceProviderType
+pattern ConferenceProviderType_WEBEX = ConferenceProviderType' "WEBEX"
+
+pattern ConferenceProviderType_ZOOM :: ConferenceProviderType
+pattern ConferenceProviderType_ZOOM = ConferenceProviderType' "ZOOM"
+
+{-# COMPLETE
+  ConferenceProviderType_BLUEJEANS,
+  ConferenceProviderType_CHIME,
+  ConferenceProviderType_CUSTOM,
+  ConferenceProviderType_FUZE,
+  ConferenceProviderType_GOOGLE_HANGOUTS,
+  ConferenceProviderType_POLYCOM,
+  ConferenceProviderType_RINGCENTRAL,
+  ConferenceProviderType_SKYPE_FOR_BUSINESS,
+  ConferenceProviderType_WEBEX,
+  ConferenceProviderType_ZOOM,
+  ConferenceProviderType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/ConnectionStatus.hs b/gen/Amazonka/AlexaBusiness/Types/ConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/ConnectionStatus.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.ConnectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.ConnectionStatus
+  ( ConnectionStatus
+      ( ..,
+        ConnectionStatus_OFFLINE,
+        ConnectionStatus_ONLINE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectionStatus = ConnectionStatus'
+  { fromConnectionStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConnectionStatus_OFFLINE :: ConnectionStatus
+pattern ConnectionStatus_OFFLINE = ConnectionStatus' "OFFLINE"
+
+pattern ConnectionStatus_ONLINE :: ConnectionStatus
+pattern ConnectionStatus_ONLINE = ConnectionStatus' "ONLINE"
+
+{-# COMPLETE
+  ConnectionStatus_OFFLINE,
+  ConnectionStatus_ONLINE,
+  ConnectionStatus'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/Contact.hs b/gen/Amazonka/AlexaBusiness/Types/Contact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Contact.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Contact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Contact where
+
+import Amazonka.AlexaBusiness.Types.PhoneNumber
+import Amazonka.AlexaBusiness.Types.SipAddress
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A contact with attributes.
+--
+-- /See:/ 'newContact' smart constructor.
+data Contact = Contact'
+  { -- | The ARN of the contact.
+    contactArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the contact to display on the console.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The first name of the contact, used to call the contact on the device.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | The last name of the contact, used to call the contact on the device.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The phone number of the contact. The phone number type defaults to WORK.
+    -- You can either specify PhoneNumber or PhoneNumbers. We recommend that
+    -- you use PhoneNumbers, which lets you specify the phone number type and
+    -- multiple numbers.
+    phoneNumber :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The list of phone numbers for the contact.
+    phoneNumbers :: Prelude.Maybe [PhoneNumber],
+    -- | The list of SIP addresses for the contact.
+    sipAddresses :: Prelude.Maybe [SipAddress]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Contact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactArn', 'contact_contactArn' - The ARN of the contact.
+--
+-- 'displayName', 'contact_displayName' - The name of the contact to display on the console.
+--
+-- 'firstName', 'contact_firstName' - The first name of the contact, used to call the contact on the device.
+--
+-- 'lastName', 'contact_lastName' - The last name of the contact, used to call the contact on the device.
+--
+-- 'phoneNumber', 'contact_phoneNumber' - The phone number of the contact. The phone number type defaults to WORK.
+-- You can either specify PhoneNumber or PhoneNumbers. We recommend that
+-- you use PhoneNumbers, which lets you specify the phone number type and
+-- multiple numbers.
+--
+-- 'phoneNumbers', 'contact_phoneNumbers' - The list of phone numbers for the contact.
+--
+-- 'sipAddresses', 'contact_sipAddresses' - The list of SIP addresses for the contact.
+newContact ::
+  Contact
+newContact =
+  Contact'
+    { contactArn = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      phoneNumbers = Prelude.Nothing,
+      sipAddresses = Prelude.Nothing
+    }
+
+-- | The ARN of the contact.
+contact_contactArn :: Lens.Lens' Contact (Prelude.Maybe Prelude.Text)
+contact_contactArn = Lens.lens (\Contact' {contactArn} -> contactArn) (\s@Contact' {} a -> s {contactArn = a} :: Contact)
+
+-- | The name of the contact to display on the console.
+contact_displayName :: Lens.Lens' Contact (Prelude.Maybe Prelude.Text)
+contact_displayName = Lens.lens (\Contact' {displayName} -> displayName) (\s@Contact' {} a -> s {displayName = a} :: Contact)
+
+-- | The first name of the contact, used to call the contact on the device.
+contact_firstName :: Lens.Lens' Contact (Prelude.Maybe Prelude.Text)
+contact_firstName = Lens.lens (\Contact' {firstName} -> firstName) (\s@Contact' {} a -> s {firstName = a} :: Contact)
+
+-- | The last name of the contact, used to call the contact on the device.
+contact_lastName :: Lens.Lens' Contact (Prelude.Maybe Prelude.Text)
+contact_lastName = Lens.lens (\Contact' {lastName} -> lastName) (\s@Contact' {} a -> s {lastName = a} :: Contact)
+
+-- | The phone number of the contact. The phone number type defaults to WORK.
+-- You can either specify PhoneNumber or PhoneNumbers. We recommend that
+-- you use PhoneNumbers, which lets you specify the phone number type and
+-- multiple numbers.
+contact_phoneNumber :: Lens.Lens' Contact (Prelude.Maybe Prelude.Text)
+contact_phoneNumber = Lens.lens (\Contact' {phoneNumber} -> phoneNumber) (\s@Contact' {} a -> s {phoneNumber = a} :: Contact) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The list of phone numbers for the contact.
+contact_phoneNumbers :: Lens.Lens' Contact (Prelude.Maybe [PhoneNumber])
+contact_phoneNumbers = Lens.lens (\Contact' {phoneNumbers} -> phoneNumbers) (\s@Contact' {} a -> s {phoneNumbers = a} :: Contact) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of SIP addresses for the contact.
+contact_sipAddresses :: Lens.Lens' Contact (Prelude.Maybe [SipAddress])
+contact_sipAddresses = Lens.lens (\Contact' {sipAddresses} -> sipAddresses) (\s@Contact' {} a -> s {sipAddresses = a} :: Contact) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Contact where
+  parseJSON =
+    Data.withObject
+      "Contact"
+      ( \x ->
+          Contact'
+            Prelude.<$> (x Data..:? "ContactArn")
+            Prelude.<*> (x Data..:? "DisplayName")
+            Prelude.<*> (x Data..:? "FirstName")
+            Prelude.<*> (x Data..:? "LastName")
+            Prelude.<*> (x Data..:? "PhoneNumber")
+            Prelude.<*> (x Data..:? "PhoneNumbers" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "SipAddresses" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Contact where
+  hashWithSalt _salt Contact' {..} =
+    _salt
+      `Prelude.hashWithSalt` contactArn
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` phoneNumbers
+      `Prelude.hashWithSalt` sipAddresses
+
+instance Prelude.NFData Contact where
+  rnf Contact' {..} =
+    Prelude.rnf contactArn
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf phoneNumbers
+      `Prelude.seq` Prelude.rnf sipAddresses
diff --git a/gen/Amazonka/AlexaBusiness/Types/ContactData.hs b/gen/Amazonka/AlexaBusiness/Types/ContactData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/ContactData.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.ContactData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.ContactData where
+
+import Amazonka.AlexaBusiness.Types.PhoneNumber
+import Amazonka.AlexaBusiness.Types.SipAddress
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information related to a contact.
+--
+-- /See:/ 'newContactData' smart constructor.
+data ContactData = ContactData'
+  { -- | The ARN of the contact.
+    contactArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the contact to display on the console.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The first name of the contact, used to call the contact on the device.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | The last name of the contact, used to call the contact on the device.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The phone number of the contact. The phone number type defaults to WORK.
+    -- You can specify PhoneNumber or PhoneNumbers. We recommend that you use
+    -- PhoneNumbers, which lets you specify the phone number type and multiple
+    -- numbers.
+    phoneNumber :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The list of phone numbers for the contact.
+    phoneNumbers :: Prelude.Maybe [PhoneNumber],
+    -- | The list of SIP addresses for the contact.
+    sipAddresses :: Prelude.Maybe [SipAddress]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContactData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'contactArn', 'contactData_contactArn' - The ARN of the contact.
+--
+-- 'displayName', 'contactData_displayName' - The name of the contact to display on the console.
+--
+-- 'firstName', 'contactData_firstName' - The first name of the contact, used to call the contact on the device.
+--
+-- 'lastName', 'contactData_lastName' - The last name of the contact, used to call the contact on the device.
+--
+-- 'phoneNumber', 'contactData_phoneNumber' - The phone number of the contact. The phone number type defaults to WORK.
+-- You can specify PhoneNumber or PhoneNumbers. We recommend that you use
+-- PhoneNumbers, which lets you specify the phone number type and multiple
+-- numbers.
+--
+-- 'phoneNumbers', 'contactData_phoneNumbers' - The list of phone numbers for the contact.
+--
+-- 'sipAddresses', 'contactData_sipAddresses' - The list of SIP addresses for the contact.
+newContactData ::
+  ContactData
+newContactData =
+  ContactData'
+    { contactArn = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      phoneNumbers = Prelude.Nothing,
+      sipAddresses = Prelude.Nothing
+    }
+
+-- | The ARN of the contact.
+contactData_contactArn :: Lens.Lens' ContactData (Prelude.Maybe Prelude.Text)
+contactData_contactArn = Lens.lens (\ContactData' {contactArn} -> contactArn) (\s@ContactData' {} a -> s {contactArn = a} :: ContactData)
+
+-- | The name of the contact to display on the console.
+contactData_displayName :: Lens.Lens' ContactData (Prelude.Maybe Prelude.Text)
+contactData_displayName = Lens.lens (\ContactData' {displayName} -> displayName) (\s@ContactData' {} a -> s {displayName = a} :: ContactData)
+
+-- | The first name of the contact, used to call the contact on the device.
+contactData_firstName :: Lens.Lens' ContactData (Prelude.Maybe Prelude.Text)
+contactData_firstName = Lens.lens (\ContactData' {firstName} -> firstName) (\s@ContactData' {} a -> s {firstName = a} :: ContactData)
+
+-- | The last name of the contact, used to call the contact on the device.
+contactData_lastName :: Lens.Lens' ContactData (Prelude.Maybe Prelude.Text)
+contactData_lastName = Lens.lens (\ContactData' {lastName} -> lastName) (\s@ContactData' {} a -> s {lastName = a} :: ContactData)
+
+-- | The phone number of the contact. The phone number type defaults to WORK.
+-- You can specify PhoneNumber or PhoneNumbers. We recommend that you use
+-- PhoneNumbers, which lets you specify the phone number type and multiple
+-- numbers.
+contactData_phoneNumber :: Lens.Lens' ContactData (Prelude.Maybe Prelude.Text)
+contactData_phoneNumber = Lens.lens (\ContactData' {phoneNumber} -> phoneNumber) (\s@ContactData' {} a -> s {phoneNumber = a} :: ContactData) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The list of phone numbers for the contact.
+contactData_phoneNumbers :: Lens.Lens' ContactData (Prelude.Maybe [PhoneNumber])
+contactData_phoneNumbers = Lens.lens (\ContactData' {phoneNumbers} -> phoneNumbers) (\s@ContactData' {} a -> s {phoneNumbers = a} :: ContactData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of SIP addresses for the contact.
+contactData_sipAddresses :: Lens.Lens' ContactData (Prelude.Maybe [SipAddress])
+contactData_sipAddresses = Lens.lens (\ContactData' {sipAddresses} -> sipAddresses) (\s@ContactData' {} a -> s {sipAddresses = a} :: ContactData) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ContactData where
+  parseJSON =
+    Data.withObject
+      "ContactData"
+      ( \x ->
+          ContactData'
+            Prelude.<$> (x Data..:? "ContactArn")
+            Prelude.<*> (x Data..:? "DisplayName")
+            Prelude.<*> (x Data..:? "FirstName")
+            Prelude.<*> (x Data..:? "LastName")
+            Prelude.<*> (x Data..:? "PhoneNumber")
+            Prelude.<*> (x Data..:? "PhoneNumbers" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "SipAddresses" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ContactData where
+  hashWithSalt _salt ContactData' {..} =
+    _salt
+      `Prelude.hashWithSalt` contactArn
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` phoneNumbers
+      `Prelude.hashWithSalt` sipAddresses
+
+instance Prelude.NFData ContactData where
+  rnf ContactData' {..} =
+    Prelude.rnf contactArn
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf phoneNumbers
+      `Prelude.seq` Prelude.rnf sipAddresses
diff --git a/gen/Amazonka/AlexaBusiness/Types/Content.hs b/gen/Amazonka/AlexaBusiness/Types/Content.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Content.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Content
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Content where
+
+import Amazonka.AlexaBusiness.Types.Audio
+import Amazonka.AlexaBusiness.Types.Ssml
+import Amazonka.AlexaBusiness.Types.TextMessage
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The content definition. This can contain only one text, SSML, or audio
+-- list object.
+--
+-- /See:/ 'newContent' smart constructor.
+data Content = Content'
+  { -- | The list of audio messages.
+    audioList :: Prelude.Maybe [Audio],
+    -- | The list of SSML messages.
+    ssmlList :: Prelude.Maybe [Ssml],
+    -- | The list of text messages.
+    textList :: Prelude.Maybe [TextMessage]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Content' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'audioList', 'content_audioList' - The list of audio messages.
+--
+-- 'ssmlList', 'content_ssmlList' - The list of SSML messages.
+--
+-- 'textList', 'content_textList' - The list of text messages.
+newContent ::
+  Content
+newContent =
+  Content'
+    { audioList = Prelude.Nothing,
+      ssmlList = Prelude.Nothing,
+      textList = Prelude.Nothing
+    }
+
+-- | The list of audio messages.
+content_audioList :: Lens.Lens' Content (Prelude.Maybe [Audio])
+content_audioList = Lens.lens (\Content' {audioList} -> audioList) (\s@Content' {} a -> s {audioList = a} :: Content) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of SSML messages.
+content_ssmlList :: Lens.Lens' Content (Prelude.Maybe [Ssml])
+content_ssmlList = Lens.lens (\Content' {ssmlList} -> ssmlList) (\s@Content' {} a -> s {ssmlList = a} :: Content) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of text messages.
+content_textList :: Lens.Lens' Content (Prelude.Maybe [TextMessage])
+content_textList = Lens.lens (\Content' {textList} -> textList) (\s@Content' {} a -> s {textList = a} :: Content) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable Content where
+  hashWithSalt _salt Content' {..} =
+    _salt
+      `Prelude.hashWithSalt` audioList
+      `Prelude.hashWithSalt` ssmlList
+      `Prelude.hashWithSalt` textList
+
+instance Prelude.NFData Content where
+  rnf Content' {..} =
+    Prelude.rnf audioList
+      `Prelude.seq` Prelude.rnf ssmlList
+      `Prelude.seq` Prelude.rnf textList
+
+instance Data.ToJSON Content where
+  toJSON Content' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AudioList" Data..=) Prelude.<$> audioList,
+            ("SsmlList" Data..=) Prelude.<$> ssmlList,
+            ("TextList" Data..=) Prelude.<$> textList
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/CreateEndOfMeetingReminder.hs b/gen/Amazonka/AlexaBusiness/Types/CreateEndOfMeetingReminder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/CreateEndOfMeetingReminder.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.CreateEndOfMeetingReminder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.CreateEndOfMeetingReminder where
+
+import Amazonka.AlexaBusiness.Types.EndOfMeetingReminderType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Creates settings for the end of meeting reminder feature that are
+-- applied to a room profile. The end of meeting reminder enables Alexa to
+-- remind users when a meeting is ending.
+--
+-- /See:/ 'newCreateEndOfMeetingReminder' smart constructor.
+data CreateEndOfMeetingReminder = CreateEndOfMeetingReminder'
+  { -- | A range of 3 to 15 minutes that determines when the reminder begins.
+    reminderAtMinutes :: Prelude.NonEmpty Prelude.Int,
+    -- | The type of sound that users hear during the end of meeting reminder.
+    reminderType :: EndOfMeetingReminderType,
+    -- | Whether an end of meeting reminder is enabled or not.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEndOfMeetingReminder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reminderAtMinutes', 'createEndOfMeetingReminder_reminderAtMinutes' - A range of 3 to 15 minutes that determines when the reminder begins.
+--
+-- 'reminderType', 'createEndOfMeetingReminder_reminderType' - The type of sound that users hear during the end of meeting reminder.
+--
+-- 'enabled', 'createEndOfMeetingReminder_enabled' - Whether an end of meeting reminder is enabled or not.
+newCreateEndOfMeetingReminder ::
+  -- | 'reminderAtMinutes'
+  Prelude.NonEmpty Prelude.Int ->
+  -- | 'reminderType'
+  EndOfMeetingReminderType ->
+  -- | 'enabled'
+  Prelude.Bool ->
+  CreateEndOfMeetingReminder
+newCreateEndOfMeetingReminder
+  pReminderAtMinutes_
+  pReminderType_
+  pEnabled_ =
+    CreateEndOfMeetingReminder'
+      { reminderAtMinutes =
+          Lens.coerced Lens.# pReminderAtMinutes_,
+        reminderType = pReminderType_,
+        enabled = pEnabled_
+      }
+
+-- | A range of 3 to 15 minutes that determines when the reminder begins.
+createEndOfMeetingReminder_reminderAtMinutes :: Lens.Lens' CreateEndOfMeetingReminder (Prelude.NonEmpty Prelude.Int)
+createEndOfMeetingReminder_reminderAtMinutes = Lens.lens (\CreateEndOfMeetingReminder' {reminderAtMinutes} -> reminderAtMinutes) (\s@CreateEndOfMeetingReminder' {} a -> s {reminderAtMinutes = a} :: CreateEndOfMeetingReminder) Prelude.. Lens.coerced
+
+-- | The type of sound that users hear during the end of meeting reminder.
+createEndOfMeetingReminder_reminderType :: Lens.Lens' CreateEndOfMeetingReminder EndOfMeetingReminderType
+createEndOfMeetingReminder_reminderType = Lens.lens (\CreateEndOfMeetingReminder' {reminderType} -> reminderType) (\s@CreateEndOfMeetingReminder' {} a -> s {reminderType = a} :: CreateEndOfMeetingReminder)
+
+-- | Whether an end of meeting reminder is enabled or not.
+createEndOfMeetingReminder_enabled :: Lens.Lens' CreateEndOfMeetingReminder Prelude.Bool
+createEndOfMeetingReminder_enabled = Lens.lens (\CreateEndOfMeetingReminder' {enabled} -> enabled) (\s@CreateEndOfMeetingReminder' {} a -> s {enabled = a} :: CreateEndOfMeetingReminder)
+
+instance Prelude.Hashable CreateEndOfMeetingReminder where
+  hashWithSalt _salt CreateEndOfMeetingReminder' {..} =
+    _salt
+      `Prelude.hashWithSalt` reminderAtMinutes
+      `Prelude.hashWithSalt` reminderType
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData CreateEndOfMeetingReminder where
+  rnf CreateEndOfMeetingReminder' {..} =
+    Prelude.rnf reminderAtMinutes
+      `Prelude.seq` Prelude.rnf reminderType
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON CreateEndOfMeetingReminder where
+  toJSON CreateEndOfMeetingReminder' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ReminderAtMinutes" Data..= reminderAtMinutes),
+            Prelude.Just ("ReminderType" Data..= reminderType),
+            Prelude.Just ("Enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/CreateInstantBooking.hs b/gen/Amazonka/AlexaBusiness/Types/CreateInstantBooking.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/CreateInstantBooking.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.CreateInstantBooking
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.CreateInstantBooking where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Creates settings for the instant booking feature that are applied to a
+-- room profile. When users start their meeting with Alexa, Alexa
+-- automatically books the room for the configured duration if the room is
+-- available.
+--
+-- /See:/ 'newCreateInstantBooking' smart constructor.
+data CreateInstantBooking = CreateInstantBooking'
+  { -- | Duration between 15 and 240 minutes at increments of 15 that determines
+    -- how long to book an available room when a meeting is started with Alexa.
+    durationInMinutes :: Prelude.Int,
+    -- | Whether instant booking is enabled or not.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInstantBooking' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'durationInMinutes', 'createInstantBooking_durationInMinutes' - Duration between 15 and 240 minutes at increments of 15 that determines
+-- how long to book an available room when a meeting is started with Alexa.
+--
+-- 'enabled', 'createInstantBooking_enabled' - Whether instant booking is enabled or not.
+newCreateInstantBooking ::
+  -- | 'durationInMinutes'
+  Prelude.Int ->
+  -- | 'enabled'
+  Prelude.Bool ->
+  CreateInstantBooking
+newCreateInstantBooking pDurationInMinutes_ pEnabled_ =
+  CreateInstantBooking'
+    { durationInMinutes =
+        pDurationInMinutes_,
+      enabled = pEnabled_
+    }
+
+-- | Duration between 15 and 240 minutes at increments of 15 that determines
+-- how long to book an available room when a meeting is started with Alexa.
+createInstantBooking_durationInMinutes :: Lens.Lens' CreateInstantBooking Prelude.Int
+createInstantBooking_durationInMinutes = Lens.lens (\CreateInstantBooking' {durationInMinutes} -> durationInMinutes) (\s@CreateInstantBooking' {} a -> s {durationInMinutes = a} :: CreateInstantBooking)
+
+-- | Whether instant booking is enabled or not.
+createInstantBooking_enabled :: Lens.Lens' CreateInstantBooking Prelude.Bool
+createInstantBooking_enabled = Lens.lens (\CreateInstantBooking' {enabled} -> enabled) (\s@CreateInstantBooking' {} a -> s {enabled = a} :: CreateInstantBooking)
+
+instance Prelude.Hashable CreateInstantBooking where
+  hashWithSalt _salt CreateInstantBooking' {..} =
+    _salt
+      `Prelude.hashWithSalt` durationInMinutes
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData CreateInstantBooking where
+  rnf CreateInstantBooking' {..} =
+    Prelude.rnf durationInMinutes
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON CreateInstantBooking where
+  toJSON CreateInstantBooking' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DurationInMinutes" Data..= durationInMinutes),
+            Prelude.Just ("Enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/CreateMeetingRoomConfiguration.hs b/gen/Amazonka/AlexaBusiness/Types/CreateMeetingRoomConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/CreateMeetingRoomConfiguration.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.CreateMeetingRoomConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.CreateMeetingRoomConfiguration where
+
+import Amazonka.AlexaBusiness.Types.CreateEndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.CreateInstantBooking
+import Amazonka.AlexaBusiness.Types.CreateRequireCheckIn
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Creates meeting room settings of a room profile.
+--
+-- /See:/ 'newCreateMeetingRoomConfiguration' smart constructor.
+data CreateMeetingRoomConfiguration = CreateMeetingRoomConfiguration'
+  { endOfMeetingReminder :: Prelude.Maybe CreateEndOfMeetingReminder,
+    -- | Settings to automatically book a room for a configured duration if it\'s
+    -- free when joining a meeting with Alexa.
+    instantBooking :: Prelude.Maybe CreateInstantBooking,
+    -- | Settings for requiring a check in when a room is reserved. Alexa can
+    -- cancel a room reservation if it\'s not checked into to make the room
+    -- available for others. Users can check in by joining the meeting with
+    -- Alexa or an AVS device, or by saying “Alexa, check in.”
+    requireCheckIn :: Prelude.Maybe CreateRequireCheckIn,
+    -- | Whether room utilization metrics are enabled or not.
+    roomUtilizationMetricsEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMeetingRoomConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endOfMeetingReminder', 'createMeetingRoomConfiguration_endOfMeetingReminder' - Undocumented member.
+--
+-- 'instantBooking', 'createMeetingRoomConfiguration_instantBooking' - Settings to automatically book a room for a configured duration if it\'s
+-- free when joining a meeting with Alexa.
+--
+-- 'requireCheckIn', 'createMeetingRoomConfiguration_requireCheckIn' - Settings for requiring a check in when a room is reserved. Alexa can
+-- cancel a room reservation if it\'s not checked into to make the room
+-- available for others. Users can check in by joining the meeting with
+-- Alexa or an AVS device, or by saying “Alexa, check in.”
+--
+-- 'roomUtilizationMetricsEnabled', 'createMeetingRoomConfiguration_roomUtilizationMetricsEnabled' - Whether room utilization metrics are enabled or not.
+newCreateMeetingRoomConfiguration ::
+  CreateMeetingRoomConfiguration
+newCreateMeetingRoomConfiguration =
+  CreateMeetingRoomConfiguration'
+    { endOfMeetingReminder =
+        Prelude.Nothing,
+      instantBooking = Prelude.Nothing,
+      requireCheckIn = Prelude.Nothing,
+      roomUtilizationMetricsEnabled =
+        Prelude.Nothing
+    }
+
+-- | Undocumented member.
+createMeetingRoomConfiguration_endOfMeetingReminder :: Lens.Lens' CreateMeetingRoomConfiguration (Prelude.Maybe CreateEndOfMeetingReminder)
+createMeetingRoomConfiguration_endOfMeetingReminder = Lens.lens (\CreateMeetingRoomConfiguration' {endOfMeetingReminder} -> endOfMeetingReminder) (\s@CreateMeetingRoomConfiguration' {} a -> s {endOfMeetingReminder = a} :: CreateMeetingRoomConfiguration)
+
+-- | Settings to automatically book a room for a configured duration if it\'s
+-- free when joining a meeting with Alexa.
+createMeetingRoomConfiguration_instantBooking :: Lens.Lens' CreateMeetingRoomConfiguration (Prelude.Maybe CreateInstantBooking)
+createMeetingRoomConfiguration_instantBooking = Lens.lens (\CreateMeetingRoomConfiguration' {instantBooking} -> instantBooking) (\s@CreateMeetingRoomConfiguration' {} a -> s {instantBooking = a} :: CreateMeetingRoomConfiguration)
+
+-- | Settings for requiring a check in when a room is reserved. Alexa can
+-- cancel a room reservation if it\'s not checked into to make the room
+-- available for others. Users can check in by joining the meeting with
+-- Alexa or an AVS device, or by saying “Alexa, check in.”
+createMeetingRoomConfiguration_requireCheckIn :: Lens.Lens' CreateMeetingRoomConfiguration (Prelude.Maybe CreateRequireCheckIn)
+createMeetingRoomConfiguration_requireCheckIn = Lens.lens (\CreateMeetingRoomConfiguration' {requireCheckIn} -> requireCheckIn) (\s@CreateMeetingRoomConfiguration' {} a -> s {requireCheckIn = a} :: CreateMeetingRoomConfiguration)
+
+-- | Whether room utilization metrics are enabled or not.
+createMeetingRoomConfiguration_roomUtilizationMetricsEnabled :: Lens.Lens' CreateMeetingRoomConfiguration (Prelude.Maybe Prelude.Bool)
+createMeetingRoomConfiguration_roomUtilizationMetricsEnabled = Lens.lens (\CreateMeetingRoomConfiguration' {roomUtilizationMetricsEnabled} -> roomUtilizationMetricsEnabled) (\s@CreateMeetingRoomConfiguration' {} a -> s {roomUtilizationMetricsEnabled = a} :: CreateMeetingRoomConfiguration)
+
+instance
+  Prelude.Hashable
+    CreateMeetingRoomConfiguration
+  where
+  hashWithSalt
+    _salt
+    CreateMeetingRoomConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` endOfMeetingReminder
+        `Prelude.hashWithSalt` instantBooking
+        `Prelude.hashWithSalt` requireCheckIn
+        `Prelude.hashWithSalt` roomUtilizationMetricsEnabled
+
+instance
+  Prelude.NFData
+    CreateMeetingRoomConfiguration
+  where
+  rnf CreateMeetingRoomConfiguration' {..} =
+    Prelude.rnf endOfMeetingReminder
+      `Prelude.seq` Prelude.rnf instantBooking
+      `Prelude.seq` Prelude.rnf requireCheckIn
+      `Prelude.seq` Prelude.rnf roomUtilizationMetricsEnabled
+
+instance Data.ToJSON CreateMeetingRoomConfiguration where
+  toJSON CreateMeetingRoomConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndOfMeetingReminder" Data..=)
+              Prelude.<$> endOfMeetingReminder,
+            ("InstantBooking" Data..=)
+              Prelude.<$> instantBooking,
+            ("RequireCheckIn" Data..=)
+              Prelude.<$> requireCheckIn,
+            ("RoomUtilizationMetricsEnabled" Data..=)
+              Prelude.<$> roomUtilizationMetricsEnabled
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/CreateRequireCheckIn.hs b/gen/Amazonka/AlexaBusiness/Types/CreateRequireCheckIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/CreateRequireCheckIn.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.CreateRequireCheckIn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.CreateRequireCheckIn where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Creates settings for the require check in feature that are applied to a
+-- room profile. Require check in allows a meeting room’s Alexa or AVS
+-- device to prompt the user to check in; otherwise, the room will be
+-- released.
+--
+-- /See:/ 'newCreateRequireCheckIn' smart constructor.
+data CreateRequireCheckIn = CreateRequireCheckIn'
+  { -- | Duration between 5 and 20 minutes to determine when to release the room
+    -- if it\'s not checked into.
+    releaseAfterMinutes :: Prelude.Int,
+    -- | Whether require check in is enabled or not.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRequireCheckIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'releaseAfterMinutes', 'createRequireCheckIn_releaseAfterMinutes' - Duration between 5 and 20 minutes to determine when to release the room
+-- if it\'s not checked into.
+--
+-- 'enabled', 'createRequireCheckIn_enabled' - Whether require check in is enabled or not.
+newCreateRequireCheckIn ::
+  -- | 'releaseAfterMinutes'
+  Prelude.Int ->
+  -- | 'enabled'
+  Prelude.Bool ->
+  CreateRequireCheckIn
+newCreateRequireCheckIn
+  pReleaseAfterMinutes_
+  pEnabled_ =
+    CreateRequireCheckIn'
+      { releaseAfterMinutes =
+          pReleaseAfterMinutes_,
+        enabled = pEnabled_
+      }
+
+-- | Duration between 5 and 20 minutes to determine when to release the room
+-- if it\'s not checked into.
+createRequireCheckIn_releaseAfterMinutes :: Lens.Lens' CreateRequireCheckIn Prelude.Int
+createRequireCheckIn_releaseAfterMinutes = Lens.lens (\CreateRequireCheckIn' {releaseAfterMinutes} -> releaseAfterMinutes) (\s@CreateRequireCheckIn' {} a -> s {releaseAfterMinutes = a} :: CreateRequireCheckIn)
+
+-- | Whether require check in is enabled or not.
+createRequireCheckIn_enabled :: Lens.Lens' CreateRequireCheckIn Prelude.Bool
+createRequireCheckIn_enabled = Lens.lens (\CreateRequireCheckIn' {enabled} -> enabled) (\s@CreateRequireCheckIn' {} a -> s {enabled = a} :: CreateRequireCheckIn)
+
+instance Prelude.Hashable CreateRequireCheckIn where
+  hashWithSalt _salt CreateRequireCheckIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` releaseAfterMinutes
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData CreateRequireCheckIn where
+  rnf CreateRequireCheckIn' {..} =
+    Prelude.rnf releaseAfterMinutes
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON CreateRequireCheckIn where
+  toJSON CreateRequireCheckIn' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ReleaseAfterMinutes" Data..= releaseAfterMinutes),
+            Prelude.Just ("Enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeveloperInfo.hs b/gen/Amazonka/AlexaBusiness/Types/DeveloperInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeveloperInfo.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeveloperInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeveloperInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details about the developer that published the skill.
+--
+-- /See:/ 'newDeveloperInfo' smart constructor.
+data DeveloperInfo = DeveloperInfo'
+  { -- | The name of the developer.
+    developerName :: Prelude.Maybe Prelude.Text,
+    -- | The email of the developer.
+    email :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the privacy policy.
+    privacyPolicy :: Prelude.Maybe Prelude.Text,
+    -- | The website of the developer.
+    url :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeveloperInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'developerName', 'developerInfo_developerName' - The name of the developer.
+--
+-- 'email', 'developerInfo_email' - The email of the developer.
+--
+-- 'privacyPolicy', 'developerInfo_privacyPolicy' - The URL of the privacy policy.
+--
+-- 'url', 'developerInfo_url' - The website of the developer.
+newDeveloperInfo ::
+  DeveloperInfo
+newDeveloperInfo =
+  DeveloperInfo'
+    { developerName = Prelude.Nothing,
+      email = Prelude.Nothing,
+      privacyPolicy = Prelude.Nothing,
+      url = Prelude.Nothing
+    }
+
+-- | The name of the developer.
+developerInfo_developerName :: Lens.Lens' DeveloperInfo (Prelude.Maybe Prelude.Text)
+developerInfo_developerName = Lens.lens (\DeveloperInfo' {developerName} -> developerName) (\s@DeveloperInfo' {} a -> s {developerName = a} :: DeveloperInfo)
+
+-- | The email of the developer.
+developerInfo_email :: Lens.Lens' DeveloperInfo (Prelude.Maybe Prelude.Text)
+developerInfo_email = Lens.lens (\DeveloperInfo' {email} -> email) (\s@DeveloperInfo' {} a -> s {email = a} :: DeveloperInfo)
+
+-- | The URL of the privacy policy.
+developerInfo_privacyPolicy :: Lens.Lens' DeveloperInfo (Prelude.Maybe Prelude.Text)
+developerInfo_privacyPolicy = Lens.lens (\DeveloperInfo' {privacyPolicy} -> privacyPolicy) (\s@DeveloperInfo' {} a -> s {privacyPolicy = a} :: DeveloperInfo)
+
+-- | The website of the developer.
+developerInfo_url :: Lens.Lens' DeveloperInfo (Prelude.Maybe Prelude.Text)
+developerInfo_url = Lens.lens (\DeveloperInfo' {url} -> url) (\s@DeveloperInfo' {} a -> s {url = a} :: DeveloperInfo)
+
+instance Data.FromJSON DeveloperInfo where
+  parseJSON =
+    Data.withObject
+      "DeveloperInfo"
+      ( \x ->
+          DeveloperInfo'
+            Prelude.<$> (x Data..:? "DeveloperName")
+            Prelude.<*> (x Data..:? "Email")
+            Prelude.<*> (x Data..:? "PrivacyPolicy")
+            Prelude.<*> (x Data..:? "Url")
+      )
+
+instance Prelude.Hashable DeveloperInfo where
+  hashWithSalt _salt DeveloperInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` developerName
+      `Prelude.hashWithSalt` email
+      `Prelude.hashWithSalt` privacyPolicy
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData DeveloperInfo where
+  rnf DeveloperInfo' {..} =
+    Prelude.rnf developerName
+      `Prelude.seq` Prelude.rnf email
+      `Prelude.seq` Prelude.rnf privacyPolicy
+      `Prelude.seq` Prelude.rnf url
diff --git a/gen/Amazonka/AlexaBusiness/Types/Device.hs b/gen/Amazonka/AlexaBusiness/Types/Device.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Device.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Device
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Device where
+
+import Amazonka.AlexaBusiness.Types.DeviceNetworkProfileInfo
+import Amazonka.AlexaBusiness.Types.DeviceStatus
+import Amazonka.AlexaBusiness.Types.DeviceStatusInfo
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A device with attributes.
+--
+-- /See:/ 'newDevice' smart constructor.
+data Device = Device'
+  { -- | The ARN of a device.
+    deviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of a device.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | The serial number of a device.
+    deviceSerialNumber :: Prelude.Maybe Prelude.Text,
+    -- | The status of a device. If the status is not READY, check the
+    -- DeviceStatusInfo value for details.
+    deviceStatus :: Prelude.Maybe DeviceStatus,
+    -- | Detailed information about a device\'s status.
+    deviceStatusInfo :: Prelude.Maybe DeviceStatusInfo,
+    -- | The type of a device.
+    deviceType :: Prelude.Maybe Prelude.Text,
+    -- | The MAC address of a device.
+    macAddress :: Prelude.Maybe Prelude.Text,
+    -- | Detailed information about a device\'s network profile.
+    networkProfileInfo :: Prelude.Maybe DeviceNetworkProfileInfo,
+    -- | The room ARN of a device.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The software version of a device.
+    softwareVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Device' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'device_deviceArn' - The ARN of a device.
+--
+-- 'deviceName', 'device_deviceName' - The name of a device.
+--
+-- 'deviceSerialNumber', 'device_deviceSerialNumber' - The serial number of a device.
+--
+-- 'deviceStatus', 'device_deviceStatus' - The status of a device. If the status is not READY, check the
+-- DeviceStatusInfo value for details.
+--
+-- 'deviceStatusInfo', 'device_deviceStatusInfo' - Detailed information about a device\'s status.
+--
+-- 'deviceType', 'device_deviceType' - The type of a device.
+--
+-- 'macAddress', 'device_macAddress' - The MAC address of a device.
+--
+-- 'networkProfileInfo', 'device_networkProfileInfo' - Detailed information about a device\'s network profile.
+--
+-- 'roomArn', 'device_roomArn' - The room ARN of a device.
+--
+-- 'softwareVersion', 'device_softwareVersion' - The software version of a device.
+newDevice ::
+  Device
+newDevice =
+  Device'
+    { deviceArn = Prelude.Nothing,
+      deviceName = Prelude.Nothing,
+      deviceSerialNumber = Prelude.Nothing,
+      deviceStatus = Prelude.Nothing,
+      deviceStatusInfo = Prelude.Nothing,
+      deviceType = Prelude.Nothing,
+      macAddress = Prelude.Nothing,
+      networkProfileInfo = Prelude.Nothing,
+      roomArn = Prelude.Nothing,
+      softwareVersion = Prelude.Nothing
+    }
+
+-- | The ARN of a device.
+device_deviceArn :: Lens.Lens' Device (Prelude.Maybe Prelude.Text)
+device_deviceArn = Lens.lens (\Device' {deviceArn} -> deviceArn) (\s@Device' {} a -> s {deviceArn = a} :: Device)
+
+-- | The name of a device.
+device_deviceName :: Lens.Lens' Device (Prelude.Maybe Prelude.Text)
+device_deviceName = Lens.lens (\Device' {deviceName} -> deviceName) (\s@Device' {} a -> s {deviceName = a} :: Device)
+
+-- | The serial number of a device.
+device_deviceSerialNumber :: Lens.Lens' Device (Prelude.Maybe Prelude.Text)
+device_deviceSerialNumber = Lens.lens (\Device' {deviceSerialNumber} -> deviceSerialNumber) (\s@Device' {} a -> s {deviceSerialNumber = a} :: Device)
+
+-- | The status of a device. If the status is not READY, check the
+-- DeviceStatusInfo value for details.
+device_deviceStatus :: Lens.Lens' Device (Prelude.Maybe DeviceStatus)
+device_deviceStatus = Lens.lens (\Device' {deviceStatus} -> deviceStatus) (\s@Device' {} a -> s {deviceStatus = a} :: Device)
+
+-- | Detailed information about a device\'s status.
+device_deviceStatusInfo :: Lens.Lens' Device (Prelude.Maybe DeviceStatusInfo)
+device_deviceStatusInfo = Lens.lens (\Device' {deviceStatusInfo} -> deviceStatusInfo) (\s@Device' {} a -> s {deviceStatusInfo = a} :: Device)
+
+-- | The type of a device.
+device_deviceType :: Lens.Lens' Device (Prelude.Maybe Prelude.Text)
+device_deviceType = Lens.lens (\Device' {deviceType} -> deviceType) (\s@Device' {} a -> s {deviceType = a} :: Device)
+
+-- | The MAC address of a device.
+device_macAddress :: Lens.Lens' Device (Prelude.Maybe Prelude.Text)
+device_macAddress = Lens.lens (\Device' {macAddress} -> macAddress) (\s@Device' {} a -> s {macAddress = a} :: Device)
+
+-- | Detailed information about a device\'s network profile.
+device_networkProfileInfo :: Lens.Lens' Device (Prelude.Maybe DeviceNetworkProfileInfo)
+device_networkProfileInfo = Lens.lens (\Device' {networkProfileInfo} -> networkProfileInfo) (\s@Device' {} a -> s {networkProfileInfo = a} :: Device)
+
+-- | The room ARN of a device.
+device_roomArn :: Lens.Lens' Device (Prelude.Maybe Prelude.Text)
+device_roomArn = Lens.lens (\Device' {roomArn} -> roomArn) (\s@Device' {} a -> s {roomArn = a} :: Device)
+
+-- | The software version of a device.
+device_softwareVersion :: Lens.Lens' Device (Prelude.Maybe Prelude.Text)
+device_softwareVersion = Lens.lens (\Device' {softwareVersion} -> softwareVersion) (\s@Device' {} a -> s {softwareVersion = a} :: Device)
+
+instance Data.FromJSON Device where
+  parseJSON =
+    Data.withObject
+      "Device"
+      ( \x ->
+          Device'
+            Prelude.<$> (x Data..:? "DeviceArn")
+            Prelude.<*> (x Data..:? "DeviceName")
+            Prelude.<*> (x Data..:? "DeviceSerialNumber")
+            Prelude.<*> (x Data..:? "DeviceStatus")
+            Prelude.<*> (x Data..:? "DeviceStatusInfo")
+            Prelude.<*> (x Data..:? "DeviceType")
+            Prelude.<*> (x Data..:? "MacAddress")
+            Prelude.<*> (x Data..:? "NetworkProfileInfo")
+            Prelude.<*> (x Data..:? "RoomArn")
+            Prelude.<*> (x Data..:? "SoftwareVersion")
+      )
+
+instance Prelude.Hashable Device where
+  hashWithSalt _salt Device' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceArn
+      `Prelude.hashWithSalt` deviceName
+      `Prelude.hashWithSalt` deviceSerialNumber
+      `Prelude.hashWithSalt` deviceStatus
+      `Prelude.hashWithSalt` deviceStatusInfo
+      `Prelude.hashWithSalt` deviceType
+      `Prelude.hashWithSalt` macAddress
+      `Prelude.hashWithSalt` networkProfileInfo
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` softwareVersion
+
+instance Prelude.NFData Device where
+  rnf Device' {..} =
+    Prelude.rnf deviceArn
+      `Prelude.seq` Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf deviceSerialNumber
+      `Prelude.seq` Prelude.rnf deviceStatus
+      `Prelude.seq` Prelude.rnf deviceStatusInfo
+      `Prelude.seq` Prelude.rnf deviceType
+      `Prelude.seq` Prelude.rnf macAddress
+      `Prelude.seq` Prelude.rnf networkProfileInfo
+      `Prelude.seq` Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf softwareVersion
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceData.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceData.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceData where
+
+import Amazonka.AlexaBusiness.Types.DeviceStatus
+import Amazonka.AlexaBusiness.Types.DeviceStatusInfo
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Device attributes.
+--
+-- /See:/ 'newDeviceData' smart constructor.
+data DeviceData = DeviceData'
+  { -- | The time (in epoch) when the device data was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of a device.
+    deviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of a device.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | The serial number of a device.
+    deviceSerialNumber :: Prelude.Maybe Prelude.Text,
+    -- | The status of a device.
+    deviceStatus :: Prelude.Maybe DeviceStatus,
+    -- | Detailed information about a device\'s status.
+    deviceStatusInfo :: Prelude.Maybe DeviceStatusInfo,
+    -- | The type of a device.
+    deviceType :: Prelude.Maybe Prelude.Text,
+    -- | The MAC address of a device.
+    macAddress :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the network profile associated with a device.
+    networkProfileArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the network profile associated with a device.
+    networkProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The room ARN associated with a device.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the room associated with a device.
+    roomName :: Prelude.Maybe Prelude.Text,
+    -- | The software version of a device.
+    softwareVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdTime', 'deviceData_createdTime' - The time (in epoch) when the device data was created.
+--
+-- 'deviceArn', 'deviceData_deviceArn' - The ARN of a device.
+--
+-- 'deviceName', 'deviceData_deviceName' - The name of a device.
+--
+-- 'deviceSerialNumber', 'deviceData_deviceSerialNumber' - The serial number of a device.
+--
+-- 'deviceStatus', 'deviceData_deviceStatus' - The status of a device.
+--
+-- 'deviceStatusInfo', 'deviceData_deviceStatusInfo' - Detailed information about a device\'s status.
+--
+-- 'deviceType', 'deviceData_deviceType' - The type of a device.
+--
+-- 'macAddress', 'deviceData_macAddress' - The MAC address of a device.
+--
+-- 'networkProfileArn', 'deviceData_networkProfileArn' - The ARN of the network profile associated with a device.
+--
+-- 'networkProfileName', 'deviceData_networkProfileName' - The name of the network profile associated with a device.
+--
+-- 'roomArn', 'deviceData_roomArn' - The room ARN associated with a device.
+--
+-- 'roomName', 'deviceData_roomName' - The name of the room associated with a device.
+--
+-- 'softwareVersion', 'deviceData_softwareVersion' - The software version of a device.
+newDeviceData ::
+  DeviceData
+newDeviceData =
+  DeviceData'
+    { createdTime = Prelude.Nothing,
+      deviceArn = Prelude.Nothing,
+      deviceName = Prelude.Nothing,
+      deviceSerialNumber = Prelude.Nothing,
+      deviceStatus = Prelude.Nothing,
+      deviceStatusInfo = Prelude.Nothing,
+      deviceType = Prelude.Nothing,
+      macAddress = Prelude.Nothing,
+      networkProfileArn = Prelude.Nothing,
+      networkProfileName = Prelude.Nothing,
+      roomArn = Prelude.Nothing,
+      roomName = Prelude.Nothing,
+      softwareVersion = Prelude.Nothing
+    }
+
+-- | The time (in epoch) when the device data was created.
+deviceData_createdTime :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.UTCTime)
+deviceData_createdTime = Lens.lens (\DeviceData' {createdTime} -> createdTime) (\s@DeviceData' {} a -> s {createdTime = a} :: DeviceData) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of a device.
+deviceData_deviceArn :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_deviceArn = Lens.lens (\DeviceData' {deviceArn} -> deviceArn) (\s@DeviceData' {} a -> s {deviceArn = a} :: DeviceData)
+
+-- | The name of a device.
+deviceData_deviceName :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_deviceName = Lens.lens (\DeviceData' {deviceName} -> deviceName) (\s@DeviceData' {} a -> s {deviceName = a} :: DeviceData)
+
+-- | The serial number of a device.
+deviceData_deviceSerialNumber :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_deviceSerialNumber = Lens.lens (\DeviceData' {deviceSerialNumber} -> deviceSerialNumber) (\s@DeviceData' {} a -> s {deviceSerialNumber = a} :: DeviceData)
+
+-- | The status of a device.
+deviceData_deviceStatus :: Lens.Lens' DeviceData (Prelude.Maybe DeviceStatus)
+deviceData_deviceStatus = Lens.lens (\DeviceData' {deviceStatus} -> deviceStatus) (\s@DeviceData' {} a -> s {deviceStatus = a} :: DeviceData)
+
+-- | Detailed information about a device\'s status.
+deviceData_deviceStatusInfo :: Lens.Lens' DeviceData (Prelude.Maybe DeviceStatusInfo)
+deviceData_deviceStatusInfo = Lens.lens (\DeviceData' {deviceStatusInfo} -> deviceStatusInfo) (\s@DeviceData' {} a -> s {deviceStatusInfo = a} :: DeviceData)
+
+-- | The type of a device.
+deviceData_deviceType :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_deviceType = Lens.lens (\DeviceData' {deviceType} -> deviceType) (\s@DeviceData' {} a -> s {deviceType = a} :: DeviceData)
+
+-- | The MAC address of a device.
+deviceData_macAddress :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_macAddress = Lens.lens (\DeviceData' {macAddress} -> macAddress) (\s@DeviceData' {} a -> s {macAddress = a} :: DeviceData)
+
+-- | The ARN of the network profile associated with a device.
+deviceData_networkProfileArn :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_networkProfileArn = Lens.lens (\DeviceData' {networkProfileArn} -> networkProfileArn) (\s@DeviceData' {} a -> s {networkProfileArn = a} :: DeviceData)
+
+-- | The name of the network profile associated with a device.
+deviceData_networkProfileName :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_networkProfileName = Lens.lens (\DeviceData' {networkProfileName} -> networkProfileName) (\s@DeviceData' {} a -> s {networkProfileName = a} :: DeviceData)
+
+-- | The room ARN associated with a device.
+deviceData_roomArn :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_roomArn = Lens.lens (\DeviceData' {roomArn} -> roomArn) (\s@DeviceData' {} a -> s {roomArn = a} :: DeviceData)
+
+-- | The name of the room associated with a device.
+deviceData_roomName :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_roomName = Lens.lens (\DeviceData' {roomName} -> roomName) (\s@DeviceData' {} a -> s {roomName = a} :: DeviceData)
+
+-- | The software version of a device.
+deviceData_softwareVersion :: Lens.Lens' DeviceData (Prelude.Maybe Prelude.Text)
+deviceData_softwareVersion = Lens.lens (\DeviceData' {softwareVersion} -> softwareVersion) (\s@DeviceData' {} a -> s {softwareVersion = a} :: DeviceData)
+
+instance Data.FromJSON DeviceData where
+  parseJSON =
+    Data.withObject
+      "DeviceData"
+      ( \x ->
+          DeviceData'
+            Prelude.<$> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "DeviceArn")
+            Prelude.<*> (x Data..:? "DeviceName")
+            Prelude.<*> (x Data..:? "DeviceSerialNumber")
+            Prelude.<*> (x Data..:? "DeviceStatus")
+            Prelude.<*> (x Data..:? "DeviceStatusInfo")
+            Prelude.<*> (x Data..:? "DeviceType")
+            Prelude.<*> (x Data..:? "MacAddress")
+            Prelude.<*> (x Data..:? "NetworkProfileArn")
+            Prelude.<*> (x Data..:? "NetworkProfileName")
+            Prelude.<*> (x Data..:? "RoomArn")
+            Prelude.<*> (x Data..:? "RoomName")
+            Prelude.<*> (x Data..:? "SoftwareVersion")
+      )
+
+instance Prelude.Hashable DeviceData where
+  hashWithSalt _salt DeviceData' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` deviceArn
+      `Prelude.hashWithSalt` deviceName
+      `Prelude.hashWithSalt` deviceSerialNumber
+      `Prelude.hashWithSalt` deviceStatus
+      `Prelude.hashWithSalt` deviceStatusInfo
+      `Prelude.hashWithSalt` deviceType
+      `Prelude.hashWithSalt` macAddress
+      `Prelude.hashWithSalt` networkProfileArn
+      `Prelude.hashWithSalt` networkProfileName
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` roomName
+      `Prelude.hashWithSalt` softwareVersion
+
+instance Prelude.NFData DeviceData where
+  rnf DeviceData' {..} =
+    Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf deviceArn
+      `Prelude.seq` Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf deviceSerialNumber
+      `Prelude.seq` Prelude.rnf deviceStatus
+      `Prelude.seq` Prelude.rnf deviceStatusInfo
+      `Prelude.seq` Prelude.rnf deviceType
+      `Prelude.seq` Prelude.rnf macAddress
+      `Prelude.seq` Prelude.rnf networkProfileArn
+      `Prelude.seq` Prelude.rnf networkProfileName
+      `Prelude.seq` Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf roomName
+      `Prelude.seq` Prelude.rnf softwareVersion
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceEvent.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceEvent.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceEvent where
+
+import Amazonka.AlexaBusiness.Types.DeviceEventType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The list of device events.
+--
+-- /See:/ 'newDeviceEvent' smart constructor.
+data DeviceEvent = DeviceEvent'
+  { -- | The time (in epoch) when the event occurred.
+    timestamp :: Prelude.Maybe Data.POSIX,
+    -- | The type of device event.
+    type' :: Prelude.Maybe DeviceEventType,
+    -- | The value of the event.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timestamp', 'deviceEvent_timestamp' - The time (in epoch) when the event occurred.
+--
+-- 'type'', 'deviceEvent_type' - The type of device event.
+--
+-- 'value', 'deviceEvent_value' - The value of the event.
+newDeviceEvent ::
+  DeviceEvent
+newDeviceEvent =
+  DeviceEvent'
+    { timestamp = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The time (in epoch) when the event occurred.
+deviceEvent_timestamp :: Lens.Lens' DeviceEvent (Prelude.Maybe Prelude.UTCTime)
+deviceEvent_timestamp = Lens.lens (\DeviceEvent' {timestamp} -> timestamp) (\s@DeviceEvent' {} a -> s {timestamp = a} :: DeviceEvent) Prelude.. Lens.mapping Data._Time
+
+-- | The type of device event.
+deviceEvent_type :: Lens.Lens' DeviceEvent (Prelude.Maybe DeviceEventType)
+deviceEvent_type = Lens.lens (\DeviceEvent' {type'} -> type') (\s@DeviceEvent' {} a -> s {type' = a} :: DeviceEvent)
+
+-- | The value of the event.
+deviceEvent_value :: Lens.Lens' DeviceEvent (Prelude.Maybe Prelude.Text)
+deviceEvent_value = Lens.lens (\DeviceEvent' {value} -> value) (\s@DeviceEvent' {} a -> s {value = a} :: DeviceEvent)
+
+instance Data.FromJSON DeviceEvent where
+  parseJSON =
+    Data.withObject
+      "DeviceEvent"
+      ( \x ->
+          DeviceEvent'
+            Prelude.<$> (x Data..:? "Timestamp")
+            Prelude.<*> (x Data..:? "Type")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable DeviceEvent where
+  hashWithSalt _salt DeviceEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` timestamp
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData DeviceEvent where
+  rnf DeviceEvent' {..} =
+    Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceEventType.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceEventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceEventType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceEventType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceEventType
+  ( DeviceEventType
+      ( ..,
+        DeviceEventType_CONNECTION_STATUS,
+        DeviceEventType_DEVICE_STATUS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeviceEventType = DeviceEventType'
+  { fromDeviceEventType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeviceEventType_CONNECTION_STATUS :: DeviceEventType
+pattern DeviceEventType_CONNECTION_STATUS = DeviceEventType' "CONNECTION_STATUS"
+
+pattern DeviceEventType_DEVICE_STATUS :: DeviceEventType
+pattern DeviceEventType_DEVICE_STATUS = DeviceEventType' "DEVICE_STATUS"
+
+{-# COMPLETE
+  DeviceEventType_CONNECTION_STATUS,
+  DeviceEventType_DEVICE_STATUS,
+  DeviceEventType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceNetworkProfileInfo.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceNetworkProfileInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceNetworkProfileInfo.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceNetworkProfileInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceNetworkProfileInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Detailed information about a device\'s network profile.
+--
+-- /See:/ 'newDeviceNetworkProfileInfo' smart constructor.
+data DeviceNetworkProfileInfo = DeviceNetworkProfileInfo'
+  { -- | The ARN of the certificate associated with a device.
+    certificateArn :: Prelude.Maybe Prelude.Text,
+    -- | The time (in epoch) when the certificate expires.
+    certificateExpirationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the network profile associated with a device.
+    networkProfileArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceNetworkProfileInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateArn', 'deviceNetworkProfileInfo_certificateArn' - The ARN of the certificate associated with a device.
+--
+-- 'certificateExpirationTime', 'deviceNetworkProfileInfo_certificateExpirationTime' - The time (in epoch) when the certificate expires.
+--
+-- 'networkProfileArn', 'deviceNetworkProfileInfo_networkProfileArn' - The ARN of the network profile associated with a device.
+newDeviceNetworkProfileInfo ::
+  DeviceNetworkProfileInfo
+newDeviceNetworkProfileInfo =
+  DeviceNetworkProfileInfo'
+    { certificateArn =
+        Prelude.Nothing,
+      certificateExpirationTime = Prelude.Nothing,
+      networkProfileArn = Prelude.Nothing
+    }
+
+-- | The ARN of the certificate associated with a device.
+deviceNetworkProfileInfo_certificateArn :: Lens.Lens' DeviceNetworkProfileInfo (Prelude.Maybe Prelude.Text)
+deviceNetworkProfileInfo_certificateArn = Lens.lens (\DeviceNetworkProfileInfo' {certificateArn} -> certificateArn) (\s@DeviceNetworkProfileInfo' {} a -> s {certificateArn = a} :: DeviceNetworkProfileInfo)
+
+-- | The time (in epoch) when the certificate expires.
+deviceNetworkProfileInfo_certificateExpirationTime :: Lens.Lens' DeviceNetworkProfileInfo (Prelude.Maybe Prelude.UTCTime)
+deviceNetworkProfileInfo_certificateExpirationTime = Lens.lens (\DeviceNetworkProfileInfo' {certificateExpirationTime} -> certificateExpirationTime) (\s@DeviceNetworkProfileInfo' {} a -> s {certificateExpirationTime = a} :: DeviceNetworkProfileInfo) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the network profile associated with a device.
+deviceNetworkProfileInfo_networkProfileArn :: Lens.Lens' DeviceNetworkProfileInfo (Prelude.Maybe Prelude.Text)
+deviceNetworkProfileInfo_networkProfileArn = Lens.lens (\DeviceNetworkProfileInfo' {networkProfileArn} -> networkProfileArn) (\s@DeviceNetworkProfileInfo' {} a -> s {networkProfileArn = a} :: DeviceNetworkProfileInfo)
+
+instance Data.FromJSON DeviceNetworkProfileInfo where
+  parseJSON =
+    Data.withObject
+      "DeviceNetworkProfileInfo"
+      ( \x ->
+          DeviceNetworkProfileInfo'
+            Prelude.<$> (x Data..:? "CertificateArn")
+            Prelude.<*> (x Data..:? "CertificateExpirationTime")
+            Prelude.<*> (x Data..:? "NetworkProfileArn")
+      )
+
+instance Prelude.Hashable DeviceNetworkProfileInfo where
+  hashWithSalt _salt DeviceNetworkProfileInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateArn
+      `Prelude.hashWithSalt` certificateExpirationTime
+      `Prelude.hashWithSalt` networkProfileArn
+
+instance Prelude.NFData DeviceNetworkProfileInfo where
+  rnf DeviceNetworkProfileInfo' {..} =
+    Prelude.rnf certificateArn
+      `Prelude.seq` Prelude.rnf certificateExpirationTime
+      `Prelude.seq` Prelude.rnf networkProfileArn
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceStatus.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceStatus
+  ( DeviceStatus
+      ( ..,
+        DeviceStatus_DEREGISTERED,
+        DeviceStatus_FAILED,
+        DeviceStatus_PENDING,
+        DeviceStatus_READY,
+        DeviceStatus_WAS_OFFLINE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeviceStatus = DeviceStatus'
+  { fromDeviceStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeviceStatus_DEREGISTERED :: DeviceStatus
+pattern DeviceStatus_DEREGISTERED = DeviceStatus' "DEREGISTERED"
+
+pattern DeviceStatus_FAILED :: DeviceStatus
+pattern DeviceStatus_FAILED = DeviceStatus' "FAILED"
+
+pattern DeviceStatus_PENDING :: DeviceStatus
+pattern DeviceStatus_PENDING = DeviceStatus' "PENDING"
+
+pattern DeviceStatus_READY :: DeviceStatus
+pattern DeviceStatus_READY = DeviceStatus' "READY"
+
+pattern DeviceStatus_WAS_OFFLINE :: DeviceStatus
+pattern DeviceStatus_WAS_OFFLINE = DeviceStatus' "WAS_OFFLINE"
+
+{-# COMPLETE
+  DeviceStatus_DEREGISTERED,
+  DeviceStatus_FAILED,
+  DeviceStatus_PENDING,
+  DeviceStatus_READY,
+  DeviceStatus_WAS_OFFLINE,
+  DeviceStatus'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceStatusDetail.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceStatusDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceStatusDetail.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceStatusDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceStatusDetail where
+
+import Amazonka.AlexaBusiness.Types.DeviceStatusDetailCode
+import Amazonka.AlexaBusiness.Types.Feature
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of a device’s status.
+--
+-- /See:/ 'newDeviceStatusDetail' smart constructor.
+data DeviceStatusDetail = DeviceStatusDetail'
+  { -- | The device status detail code.
+    code :: Prelude.Maybe DeviceStatusDetailCode,
+    -- | The list of available features on the device.
+    feature :: Prelude.Maybe Feature
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceStatusDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'deviceStatusDetail_code' - The device status detail code.
+--
+-- 'feature', 'deviceStatusDetail_feature' - The list of available features on the device.
+newDeviceStatusDetail ::
+  DeviceStatusDetail
+newDeviceStatusDetail =
+  DeviceStatusDetail'
+    { code = Prelude.Nothing,
+      feature = Prelude.Nothing
+    }
+
+-- | The device status detail code.
+deviceStatusDetail_code :: Lens.Lens' DeviceStatusDetail (Prelude.Maybe DeviceStatusDetailCode)
+deviceStatusDetail_code = Lens.lens (\DeviceStatusDetail' {code} -> code) (\s@DeviceStatusDetail' {} a -> s {code = a} :: DeviceStatusDetail)
+
+-- | The list of available features on the device.
+deviceStatusDetail_feature :: Lens.Lens' DeviceStatusDetail (Prelude.Maybe Feature)
+deviceStatusDetail_feature = Lens.lens (\DeviceStatusDetail' {feature} -> feature) (\s@DeviceStatusDetail' {} a -> s {feature = a} :: DeviceStatusDetail)
+
+instance Data.FromJSON DeviceStatusDetail where
+  parseJSON =
+    Data.withObject
+      "DeviceStatusDetail"
+      ( \x ->
+          DeviceStatusDetail'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Feature")
+      )
+
+instance Prelude.Hashable DeviceStatusDetail where
+  hashWithSalt _salt DeviceStatusDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` feature
+
+instance Prelude.NFData DeviceStatusDetail where
+  rnf DeviceStatusDetail' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf feature
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceStatusDetailCode.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceStatusDetailCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceStatusDetailCode.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceStatusDetailCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceStatusDetailCode
+  ( DeviceStatusDetailCode
+      ( ..,
+        DeviceStatusDetailCode_ASSOCIATION_REJECTION,
+        DeviceStatusDetailCode_AUTHENTICATION_FAILURE,
+        DeviceStatusDetailCode_CERTIFICATE_AUTHORITY_ACCESS_DENIED,
+        DeviceStatusDetailCode_CERTIFICATE_ISSUING_LIMIT_EXCEEDED,
+        DeviceStatusDetailCode_CREDENTIALS_ACCESS_FAILURE,
+        DeviceStatusDetailCode_DEVICE_SOFTWARE_UPDATE_NEEDED,
+        DeviceStatusDetailCode_DEVICE_WAS_OFFLINE,
+        DeviceStatusDetailCode_DHCP_FAILURE,
+        DeviceStatusDetailCode_DNS_FAILURE,
+        DeviceStatusDetailCode_INTERNET_UNAVAILABLE,
+        DeviceStatusDetailCode_INVALID_CERTIFICATE_AUTHORITY,
+        DeviceStatusDetailCode_INVALID_PASSWORD_STATE,
+        DeviceStatusDetailCode_NETWORK_PROFILE_NOT_FOUND,
+        DeviceStatusDetailCode_PASSWORD_MANAGER_ACCESS_DENIED,
+        DeviceStatusDetailCode_PASSWORD_NOT_FOUND,
+        DeviceStatusDetailCode_TLS_VERSION_MISMATCH,
+        DeviceStatusDetailCode_UNKNOWN_FAILURE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeviceStatusDetailCode = DeviceStatusDetailCode'
+  { fromDeviceStatusDetailCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeviceStatusDetailCode_ASSOCIATION_REJECTION :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_ASSOCIATION_REJECTION = DeviceStatusDetailCode' "ASSOCIATION_REJECTION"
+
+pattern DeviceStatusDetailCode_AUTHENTICATION_FAILURE :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_AUTHENTICATION_FAILURE = DeviceStatusDetailCode' "AUTHENTICATION_FAILURE"
+
+pattern DeviceStatusDetailCode_CERTIFICATE_AUTHORITY_ACCESS_DENIED :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_CERTIFICATE_AUTHORITY_ACCESS_DENIED = DeviceStatusDetailCode' "CERTIFICATE_AUTHORITY_ACCESS_DENIED"
+
+pattern DeviceStatusDetailCode_CERTIFICATE_ISSUING_LIMIT_EXCEEDED :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_CERTIFICATE_ISSUING_LIMIT_EXCEEDED = DeviceStatusDetailCode' "CERTIFICATE_ISSUING_LIMIT_EXCEEDED"
+
+pattern DeviceStatusDetailCode_CREDENTIALS_ACCESS_FAILURE :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_CREDENTIALS_ACCESS_FAILURE = DeviceStatusDetailCode' "CREDENTIALS_ACCESS_FAILURE"
+
+pattern DeviceStatusDetailCode_DEVICE_SOFTWARE_UPDATE_NEEDED :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_DEVICE_SOFTWARE_UPDATE_NEEDED = DeviceStatusDetailCode' "DEVICE_SOFTWARE_UPDATE_NEEDED"
+
+pattern DeviceStatusDetailCode_DEVICE_WAS_OFFLINE :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_DEVICE_WAS_OFFLINE = DeviceStatusDetailCode' "DEVICE_WAS_OFFLINE"
+
+pattern DeviceStatusDetailCode_DHCP_FAILURE :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_DHCP_FAILURE = DeviceStatusDetailCode' "DHCP_FAILURE"
+
+pattern DeviceStatusDetailCode_DNS_FAILURE :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_DNS_FAILURE = DeviceStatusDetailCode' "DNS_FAILURE"
+
+pattern DeviceStatusDetailCode_INTERNET_UNAVAILABLE :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_INTERNET_UNAVAILABLE = DeviceStatusDetailCode' "INTERNET_UNAVAILABLE"
+
+pattern DeviceStatusDetailCode_INVALID_CERTIFICATE_AUTHORITY :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_INVALID_CERTIFICATE_AUTHORITY = DeviceStatusDetailCode' "INVALID_CERTIFICATE_AUTHORITY"
+
+pattern DeviceStatusDetailCode_INVALID_PASSWORD_STATE :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_INVALID_PASSWORD_STATE = DeviceStatusDetailCode' "INVALID_PASSWORD_STATE"
+
+pattern DeviceStatusDetailCode_NETWORK_PROFILE_NOT_FOUND :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_NETWORK_PROFILE_NOT_FOUND = DeviceStatusDetailCode' "NETWORK_PROFILE_NOT_FOUND"
+
+pattern DeviceStatusDetailCode_PASSWORD_MANAGER_ACCESS_DENIED :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_PASSWORD_MANAGER_ACCESS_DENIED = DeviceStatusDetailCode' "PASSWORD_MANAGER_ACCESS_DENIED"
+
+pattern DeviceStatusDetailCode_PASSWORD_NOT_FOUND :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_PASSWORD_NOT_FOUND = DeviceStatusDetailCode' "PASSWORD_NOT_FOUND"
+
+pattern DeviceStatusDetailCode_TLS_VERSION_MISMATCH :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_TLS_VERSION_MISMATCH = DeviceStatusDetailCode' "TLS_VERSION_MISMATCH"
+
+pattern DeviceStatusDetailCode_UNKNOWN_FAILURE :: DeviceStatusDetailCode
+pattern DeviceStatusDetailCode_UNKNOWN_FAILURE = DeviceStatusDetailCode' "UNKNOWN_FAILURE"
+
+{-# COMPLETE
+  DeviceStatusDetailCode_ASSOCIATION_REJECTION,
+  DeviceStatusDetailCode_AUTHENTICATION_FAILURE,
+  DeviceStatusDetailCode_CERTIFICATE_AUTHORITY_ACCESS_DENIED,
+  DeviceStatusDetailCode_CERTIFICATE_ISSUING_LIMIT_EXCEEDED,
+  DeviceStatusDetailCode_CREDENTIALS_ACCESS_FAILURE,
+  DeviceStatusDetailCode_DEVICE_SOFTWARE_UPDATE_NEEDED,
+  DeviceStatusDetailCode_DEVICE_WAS_OFFLINE,
+  DeviceStatusDetailCode_DHCP_FAILURE,
+  DeviceStatusDetailCode_DNS_FAILURE,
+  DeviceStatusDetailCode_INTERNET_UNAVAILABLE,
+  DeviceStatusDetailCode_INVALID_CERTIFICATE_AUTHORITY,
+  DeviceStatusDetailCode_INVALID_PASSWORD_STATE,
+  DeviceStatusDetailCode_NETWORK_PROFILE_NOT_FOUND,
+  DeviceStatusDetailCode_PASSWORD_MANAGER_ACCESS_DENIED,
+  DeviceStatusDetailCode_PASSWORD_NOT_FOUND,
+  DeviceStatusDetailCode_TLS_VERSION_MISMATCH,
+  DeviceStatusDetailCode_UNKNOWN_FAILURE,
+  DeviceStatusDetailCode'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceStatusInfo.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceStatusInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceStatusInfo.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceStatusInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceStatusInfo where
+
+import Amazonka.AlexaBusiness.Types.ConnectionStatus
+import Amazonka.AlexaBusiness.Types.DeviceStatusDetail
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Detailed information about a device\'s status.
+--
+-- /See:/ 'newDeviceStatusInfo' smart constructor.
+data DeviceStatusInfo = DeviceStatusInfo'
+  { -- | The latest available information about the connection status of a
+    -- device.
+    connectionStatus :: Prelude.Maybe ConnectionStatus,
+    -- | The time (in epoch) when the device connection status changed.
+    connectionStatusUpdatedTime :: Prelude.Maybe Data.POSIX,
+    -- | One or more device status detail descriptions.
+    deviceStatusDetails :: Prelude.Maybe [DeviceStatusDetail]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceStatusInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionStatus', 'deviceStatusInfo_connectionStatus' - The latest available information about the connection status of a
+-- device.
+--
+-- 'connectionStatusUpdatedTime', 'deviceStatusInfo_connectionStatusUpdatedTime' - The time (in epoch) when the device connection status changed.
+--
+-- 'deviceStatusDetails', 'deviceStatusInfo_deviceStatusDetails' - One or more device status detail descriptions.
+newDeviceStatusInfo ::
+  DeviceStatusInfo
+newDeviceStatusInfo =
+  DeviceStatusInfo'
+    { connectionStatus =
+        Prelude.Nothing,
+      connectionStatusUpdatedTime = Prelude.Nothing,
+      deviceStatusDetails = Prelude.Nothing
+    }
+
+-- | The latest available information about the connection status of a
+-- device.
+deviceStatusInfo_connectionStatus :: Lens.Lens' DeviceStatusInfo (Prelude.Maybe ConnectionStatus)
+deviceStatusInfo_connectionStatus = Lens.lens (\DeviceStatusInfo' {connectionStatus} -> connectionStatus) (\s@DeviceStatusInfo' {} a -> s {connectionStatus = a} :: DeviceStatusInfo)
+
+-- | The time (in epoch) when the device connection status changed.
+deviceStatusInfo_connectionStatusUpdatedTime :: Lens.Lens' DeviceStatusInfo (Prelude.Maybe Prelude.UTCTime)
+deviceStatusInfo_connectionStatusUpdatedTime = Lens.lens (\DeviceStatusInfo' {connectionStatusUpdatedTime} -> connectionStatusUpdatedTime) (\s@DeviceStatusInfo' {} a -> s {connectionStatusUpdatedTime = a} :: DeviceStatusInfo) Prelude.. Lens.mapping Data._Time
+
+-- | One or more device status detail descriptions.
+deviceStatusInfo_deviceStatusDetails :: Lens.Lens' DeviceStatusInfo (Prelude.Maybe [DeviceStatusDetail])
+deviceStatusInfo_deviceStatusDetails = Lens.lens (\DeviceStatusInfo' {deviceStatusDetails} -> deviceStatusDetails) (\s@DeviceStatusInfo' {} a -> s {deviceStatusDetails = a} :: DeviceStatusInfo) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON DeviceStatusInfo where
+  parseJSON =
+    Data.withObject
+      "DeviceStatusInfo"
+      ( \x ->
+          DeviceStatusInfo'
+            Prelude.<$> (x Data..:? "ConnectionStatus")
+            Prelude.<*> (x Data..:? "ConnectionStatusUpdatedTime")
+            Prelude.<*> ( x
+                            Data..:? "DeviceStatusDetails"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable DeviceStatusInfo where
+  hashWithSalt _salt DeviceStatusInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionStatus
+      `Prelude.hashWithSalt` connectionStatusUpdatedTime
+      `Prelude.hashWithSalt` deviceStatusDetails
+
+instance Prelude.NFData DeviceStatusInfo where
+  rnf DeviceStatusInfo' {..} =
+    Prelude.rnf connectionStatus
+      `Prelude.seq` Prelude.rnf connectionStatusUpdatedTime
+      `Prelude.seq` Prelude.rnf deviceStatusDetails
diff --git a/gen/Amazonka/AlexaBusiness/Types/DeviceUsageType.hs b/gen/Amazonka/AlexaBusiness/Types/DeviceUsageType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DeviceUsageType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DeviceUsageType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DeviceUsageType
+  ( DeviceUsageType
+      ( ..,
+        DeviceUsageType_VOICE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeviceUsageType = DeviceUsageType'
+  { fromDeviceUsageType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeviceUsageType_VOICE :: DeviceUsageType
+pattern DeviceUsageType_VOICE = DeviceUsageType' "VOICE"
+
+{-# COMPLETE
+  DeviceUsageType_VOICE,
+  DeviceUsageType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/DistanceUnit.hs b/gen/Amazonka/AlexaBusiness/Types/DistanceUnit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/DistanceUnit.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.DistanceUnit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.DistanceUnit
+  ( DistanceUnit
+      ( ..,
+        DistanceUnit_IMPERIAL,
+        DistanceUnit_METRIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DistanceUnit = DistanceUnit'
+  { fromDistanceUnit ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DistanceUnit_IMPERIAL :: DistanceUnit
+pattern DistanceUnit_IMPERIAL = DistanceUnit' "IMPERIAL"
+
+pattern DistanceUnit_METRIC :: DistanceUnit
+pattern DistanceUnit_METRIC = DistanceUnit' "METRIC"
+
+{-# COMPLETE
+  DistanceUnit_IMPERIAL,
+  DistanceUnit_METRIC,
+  DistanceUnit'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/EnablementType.hs b/gen/Amazonka/AlexaBusiness/Types/EnablementType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/EnablementType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.EnablementType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.EnablementType
+  ( EnablementType
+      ( ..,
+        EnablementType_ENABLED,
+        EnablementType_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnablementType = EnablementType'
+  { fromEnablementType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EnablementType_ENABLED :: EnablementType
+pattern EnablementType_ENABLED = EnablementType' "ENABLED"
+
+pattern EnablementType_PENDING :: EnablementType
+pattern EnablementType_PENDING = EnablementType' "PENDING"
+
+{-# COMPLETE
+  EnablementType_ENABLED,
+  EnablementType_PENDING,
+  EnablementType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/EnablementTypeFilter.hs b/gen/Amazonka/AlexaBusiness/Types/EnablementTypeFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/EnablementTypeFilter.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.EnablementTypeFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.EnablementTypeFilter
+  ( EnablementTypeFilter
+      ( ..,
+        EnablementTypeFilter_ENABLED,
+        EnablementTypeFilter_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnablementTypeFilter = EnablementTypeFilter'
+  { fromEnablementTypeFilter ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EnablementTypeFilter_ENABLED :: EnablementTypeFilter
+pattern EnablementTypeFilter_ENABLED = EnablementTypeFilter' "ENABLED"
+
+pattern EnablementTypeFilter_PENDING :: EnablementTypeFilter
+pattern EnablementTypeFilter_PENDING = EnablementTypeFilter' "PENDING"
+
+{-# COMPLETE
+  EnablementTypeFilter_ENABLED,
+  EnablementTypeFilter_PENDING,
+  EnablementTypeFilter'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/EndOfMeetingReminder.hs b/gen/Amazonka/AlexaBusiness/Types/EndOfMeetingReminder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/EndOfMeetingReminder.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.EndOfMeetingReminder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.EndOfMeetingReminder where
+
+import Amazonka.AlexaBusiness.Types.EndOfMeetingReminderType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Settings for the end of meeting reminder feature that are applied to a
+-- room profile. The end of meeting reminder enables Alexa to remind users
+-- when a meeting is ending.
+--
+-- /See:/ 'newEndOfMeetingReminder' smart constructor.
+data EndOfMeetingReminder = EndOfMeetingReminder'
+  { -- | Whether an end of meeting reminder is enabled or not.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | A range of 3 to 15 minutes that determines when the reminder begins.
+    reminderAtMinutes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Int),
+    -- | The type of sound that users hear during the end of meeting reminder.
+    reminderType :: Prelude.Maybe EndOfMeetingReminderType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EndOfMeetingReminder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'endOfMeetingReminder_enabled' - Whether an end of meeting reminder is enabled or not.
+--
+-- 'reminderAtMinutes', 'endOfMeetingReminder_reminderAtMinutes' - A range of 3 to 15 minutes that determines when the reminder begins.
+--
+-- 'reminderType', 'endOfMeetingReminder_reminderType' - The type of sound that users hear during the end of meeting reminder.
+newEndOfMeetingReminder ::
+  EndOfMeetingReminder
+newEndOfMeetingReminder =
+  EndOfMeetingReminder'
+    { enabled = Prelude.Nothing,
+      reminderAtMinutes = Prelude.Nothing,
+      reminderType = Prelude.Nothing
+    }
+
+-- | Whether an end of meeting reminder is enabled or not.
+endOfMeetingReminder_enabled :: Lens.Lens' EndOfMeetingReminder (Prelude.Maybe Prelude.Bool)
+endOfMeetingReminder_enabled = Lens.lens (\EndOfMeetingReminder' {enabled} -> enabled) (\s@EndOfMeetingReminder' {} a -> s {enabled = a} :: EndOfMeetingReminder)
+
+-- | A range of 3 to 15 minutes that determines when the reminder begins.
+endOfMeetingReminder_reminderAtMinutes :: Lens.Lens' EndOfMeetingReminder (Prelude.Maybe (Prelude.NonEmpty Prelude.Int))
+endOfMeetingReminder_reminderAtMinutes = Lens.lens (\EndOfMeetingReminder' {reminderAtMinutes} -> reminderAtMinutes) (\s@EndOfMeetingReminder' {} a -> s {reminderAtMinutes = a} :: EndOfMeetingReminder) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of sound that users hear during the end of meeting reminder.
+endOfMeetingReminder_reminderType :: Lens.Lens' EndOfMeetingReminder (Prelude.Maybe EndOfMeetingReminderType)
+endOfMeetingReminder_reminderType = Lens.lens (\EndOfMeetingReminder' {reminderType} -> reminderType) (\s@EndOfMeetingReminder' {} a -> s {reminderType = a} :: EndOfMeetingReminder)
+
+instance Data.FromJSON EndOfMeetingReminder where
+  parseJSON =
+    Data.withObject
+      "EndOfMeetingReminder"
+      ( \x ->
+          EndOfMeetingReminder'
+            Prelude.<$> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "ReminderAtMinutes")
+            Prelude.<*> (x Data..:? "ReminderType")
+      )
+
+instance Prelude.Hashable EndOfMeetingReminder where
+  hashWithSalt _salt EndOfMeetingReminder' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` reminderAtMinutes
+      `Prelude.hashWithSalt` reminderType
+
+instance Prelude.NFData EndOfMeetingReminder where
+  rnf EndOfMeetingReminder' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf reminderAtMinutes
+      `Prelude.seq` Prelude.rnf reminderType
diff --git a/gen/Amazonka/AlexaBusiness/Types/EndOfMeetingReminderType.hs b/gen/Amazonka/AlexaBusiness/Types/EndOfMeetingReminderType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/EndOfMeetingReminderType.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.EndOfMeetingReminderType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.EndOfMeetingReminderType
+  ( EndOfMeetingReminderType
+      ( ..,
+        EndOfMeetingReminderType_ANNOUNCEMENT_TIME_CHECK,
+        EndOfMeetingReminderType_ANNOUNCEMENT_VARIABLE_TIME_LEFT,
+        EndOfMeetingReminderType_CHIME,
+        EndOfMeetingReminderType_KNOCK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EndOfMeetingReminderType = EndOfMeetingReminderType'
+  { fromEndOfMeetingReminderType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EndOfMeetingReminderType_ANNOUNCEMENT_TIME_CHECK :: EndOfMeetingReminderType
+pattern EndOfMeetingReminderType_ANNOUNCEMENT_TIME_CHECK = EndOfMeetingReminderType' "ANNOUNCEMENT_TIME_CHECK"
+
+pattern EndOfMeetingReminderType_ANNOUNCEMENT_VARIABLE_TIME_LEFT :: EndOfMeetingReminderType
+pattern EndOfMeetingReminderType_ANNOUNCEMENT_VARIABLE_TIME_LEFT = EndOfMeetingReminderType' "ANNOUNCEMENT_VARIABLE_TIME_LEFT"
+
+pattern EndOfMeetingReminderType_CHIME :: EndOfMeetingReminderType
+pattern EndOfMeetingReminderType_CHIME = EndOfMeetingReminderType' "CHIME"
+
+pattern EndOfMeetingReminderType_KNOCK :: EndOfMeetingReminderType
+pattern EndOfMeetingReminderType_KNOCK = EndOfMeetingReminderType' "KNOCK"
+
+{-# COMPLETE
+  EndOfMeetingReminderType_ANNOUNCEMENT_TIME_CHECK,
+  EndOfMeetingReminderType_ANNOUNCEMENT_VARIABLE_TIME_LEFT,
+  EndOfMeetingReminderType_CHIME,
+  EndOfMeetingReminderType_KNOCK,
+  EndOfMeetingReminderType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/EnrollmentStatus.hs b/gen/Amazonka/AlexaBusiness/Types/EnrollmentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/EnrollmentStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.EnrollmentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.EnrollmentStatus
+  ( EnrollmentStatus
+      ( ..,
+        EnrollmentStatus_DEREGISTERING,
+        EnrollmentStatus_DISASSOCIATING,
+        EnrollmentStatus_INITIALIZED,
+        EnrollmentStatus_PENDING,
+        EnrollmentStatus_REGISTERED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnrollmentStatus = EnrollmentStatus'
+  { fromEnrollmentStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EnrollmentStatus_DEREGISTERING :: EnrollmentStatus
+pattern EnrollmentStatus_DEREGISTERING = EnrollmentStatus' "DEREGISTERING"
+
+pattern EnrollmentStatus_DISASSOCIATING :: EnrollmentStatus
+pattern EnrollmentStatus_DISASSOCIATING = EnrollmentStatus' "DISASSOCIATING"
+
+pattern EnrollmentStatus_INITIALIZED :: EnrollmentStatus
+pattern EnrollmentStatus_INITIALIZED = EnrollmentStatus' "INITIALIZED"
+
+pattern EnrollmentStatus_PENDING :: EnrollmentStatus
+pattern EnrollmentStatus_PENDING = EnrollmentStatus' "PENDING"
+
+pattern EnrollmentStatus_REGISTERED :: EnrollmentStatus
+pattern EnrollmentStatus_REGISTERED = EnrollmentStatus' "REGISTERED"
+
+{-# COMPLETE
+  EnrollmentStatus_DEREGISTERING,
+  EnrollmentStatus_DISASSOCIATING,
+  EnrollmentStatus_INITIALIZED,
+  EnrollmentStatus_PENDING,
+  EnrollmentStatus_REGISTERED,
+  EnrollmentStatus'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/Feature.hs b/gen/Amazonka/AlexaBusiness/Types/Feature.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Feature.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Feature
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Feature
+  ( Feature
+      ( ..,
+        Feature_ALL,
+        Feature_BLUETOOTH,
+        Feature_LISTS,
+        Feature_NETWORK_PROFILE,
+        Feature_NOTIFICATIONS,
+        Feature_SETTINGS,
+        Feature_SKILLS,
+        Feature_VOLUME
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Feature = Feature' {fromFeature :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Feature_ALL :: Feature
+pattern Feature_ALL = Feature' "ALL"
+
+pattern Feature_BLUETOOTH :: Feature
+pattern Feature_BLUETOOTH = Feature' "BLUETOOTH"
+
+pattern Feature_LISTS :: Feature
+pattern Feature_LISTS = Feature' "LISTS"
+
+pattern Feature_NETWORK_PROFILE :: Feature
+pattern Feature_NETWORK_PROFILE = Feature' "NETWORK_PROFILE"
+
+pattern Feature_NOTIFICATIONS :: Feature
+pattern Feature_NOTIFICATIONS = Feature' "NOTIFICATIONS"
+
+pattern Feature_SETTINGS :: Feature
+pattern Feature_SETTINGS = Feature' "SETTINGS"
+
+pattern Feature_SKILLS :: Feature
+pattern Feature_SKILLS = Feature' "SKILLS"
+
+pattern Feature_VOLUME :: Feature
+pattern Feature_VOLUME = Feature' "VOLUME"
+
+{-# COMPLETE
+  Feature_ALL,
+  Feature_BLUETOOTH,
+  Feature_LISTS,
+  Feature_NETWORK_PROFILE,
+  Feature_NOTIFICATIONS,
+  Feature_SETTINGS,
+  Feature_SKILLS,
+  Feature_VOLUME,
+  Feature'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/Filter.hs b/gen/Amazonka/AlexaBusiness/Types/Filter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Filter.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Filter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Filter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter name and value pair that is used to return a more specific list
+-- of results. Filters can be used to match a set of resources by various
+-- criteria.
+--
+-- /See:/ 'newFilter' smart constructor.
+data Filter = Filter'
+  { -- | The key of a filter.
+    key :: Prelude.Text,
+    -- | The values of a filter.
+    values :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Filter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'filter_key' - The key of a filter.
+--
+-- 'values', 'filter_values' - The values of a filter.
+newFilter ::
+  -- | 'key'
+  Prelude.Text ->
+  Filter
+newFilter pKey_ =
+  Filter' {key = pKey_, values = Prelude.mempty}
+
+-- | The key of a filter.
+filter_key :: Lens.Lens' Filter Prelude.Text
+filter_key = Lens.lens (\Filter' {key} -> key) (\s@Filter' {} a -> s {key = a} :: Filter)
+
+-- | The values of a filter.
+filter_values :: Lens.Lens' Filter [Prelude.Text]
+filter_values = Lens.lens (\Filter' {values} -> values) (\s@Filter' {} a -> s {values = a} :: Filter) Prelude.. Lens.coerced
+
+instance Prelude.Hashable Filter where
+  hashWithSalt _salt Filter' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData Filter where
+  rnf Filter' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON Filter where
+  toJSON Filter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Values" Data..= values)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/Gateway.hs b/gen/Amazonka/AlexaBusiness/Types/Gateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Gateway.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Gateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Gateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the gateway.
+--
+-- /See:/ 'newGateway' smart constructor.
+data Gateway = Gateway'
+  { -- | The ARN of the gateway.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the gateway.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the gateway group that the gateway is associated to.
+    gatewayGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the gateway.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The software version of the gateway. The gateway automatically updates
+    -- its software version during normal operation.
+    softwareVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Gateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'gateway_arn' - The ARN of the gateway.
+--
+-- 'description', 'gateway_description' - The description of the gateway.
+--
+-- 'gatewayGroupArn', 'gateway_gatewayGroupArn' - The ARN of the gateway group that the gateway is associated to.
+--
+-- 'name', 'gateway_name' - The name of the gateway.
+--
+-- 'softwareVersion', 'gateway_softwareVersion' - The software version of the gateway. The gateway automatically updates
+-- its software version during normal operation.
+newGateway ::
+  Gateway
+newGateway =
+  Gateway'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      gatewayGroupArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      softwareVersion = Prelude.Nothing
+    }
+
+-- | The ARN of the gateway.
+gateway_arn :: Lens.Lens' Gateway (Prelude.Maybe Prelude.Text)
+gateway_arn = Lens.lens (\Gateway' {arn} -> arn) (\s@Gateway' {} a -> s {arn = a} :: Gateway)
+
+-- | The description of the gateway.
+gateway_description :: Lens.Lens' Gateway (Prelude.Maybe Prelude.Text)
+gateway_description = Lens.lens (\Gateway' {description} -> description) (\s@Gateway' {} a -> s {description = a} :: Gateway)
+
+-- | The ARN of the gateway group that the gateway is associated to.
+gateway_gatewayGroupArn :: Lens.Lens' Gateway (Prelude.Maybe Prelude.Text)
+gateway_gatewayGroupArn = Lens.lens (\Gateway' {gatewayGroupArn} -> gatewayGroupArn) (\s@Gateway' {} a -> s {gatewayGroupArn = a} :: Gateway)
+
+-- | The name of the gateway.
+gateway_name :: Lens.Lens' Gateway (Prelude.Maybe Prelude.Text)
+gateway_name = Lens.lens (\Gateway' {name} -> name) (\s@Gateway' {} a -> s {name = a} :: Gateway)
+
+-- | The software version of the gateway. The gateway automatically updates
+-- its software version during normal operation.
+gateway_softwareVersion :: Lens.Lens' Gateway (Prelude.Maybe Prelude.Text)
+gateway_softwareVersion = Lens.lens (\Gateway' {softwareVersion} -> softwareVersion) (\s@Gateway' {} a -> s {softwareVersion = a} :: Gateway)
+
+instance Data.FromJSON Gateway where
+  parseJSON =
+    Data.withObject
+      "Gateway"
+      ( \x ->
+          Gateway'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "GatewayGroupArn")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "SoftwareVersion")
+      )
+
+instance Prelude.Hashable Gateway where
+  hashWithSalt _salt Gateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` gatewayGroupArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` softwareVersion
+
+instance Prelude.NFData Gateway where
+  rnf Gateway' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf gatewayGroupArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf softwareVersion
diff --git a/gen/Amazonka/AlexaBusiness/Types/GatewayGroup.hs b/gen/Amazonka/AlexaBusiness/Types/GatewayGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/GatewayGroup.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.GatewayGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.GatewayGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the gateway group.
+--
+-- /See:/ 'newGatewayGroup' smart constructor.
+data GatewayGroup = GatewayGroup'
+  { -- | The ARN of the gateway group.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the gateway group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the gateway group.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GatewayGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'gatewayGroup_arn' - The ARN of the gateway group.
+--
+-- 'description', 'gatewayGroup_description' - The description of the gateway group.
+--
+-- 'name', 'gatewayGroup_name' - The name of the gateway group.
+newGatewayGroup ::
+  GatewayGroup
+newGatewayGroup =
+  GatewayGroup'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN of the gateway group.
+gatewayGroup_arn :: Lens.Lens' GatewayGroup (Prelude.Maybe Prelude.Text)
+gatewayGroup_arn = Lens.lens (\GatewayGroup' {arn} -> arn) (\s@GatewayGroup' {} a -> s {arn = a} :: GatewayGroup)
+
+-- | The description of the gateway group.
+gatewayGroup_description :: Lens.Lens' GatewayGroup (Prelude.Maybe Prelude.Text)
+gatewayGroup_description = Lens.lens (\GatewayGroup' {description} -> description) (\s@GatewayGroup' {} a -> s {description = a} :: GatewayGroup)
+
+-- | The name of the gateway group.
+gatewayGroup_name :: Lens.Lens' GatewayGroup (Prelude.Maybe Prelude.Text)
+gatewayGroup_name = Lens.lens (\GatewayGroup' {name} -> name) (\s@GatewayGroup' {} a -> s {name = a} :: GatewayGroup)
+
+instance Data.FromJSON GatewayGroup where
+  parseJSON =
+    Data.withObject
+      "GatewayGroup"
+      ( \x ->
+          GatewayGroup'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable GatewayGroup where
+  hashWithSalt _salt GatewayGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GatewayGroup where
+  rnf GatewayGroup' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AlexaBusiness/Types/GatewayGroupSummary.hs b/gen/Amazonka/AlexaBusiness/Types/GatewayGroupSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/GatewayGroupSummary.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.GatewayGroupSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.GatewayGroupSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of a gateway group.
+--
+-- /See:/ 'newGatewayGroupSummary' smart constructor.
+data GatewayGroupSummary = GatewayGroupSummary'
+  { -- | The ARN of the gateway group.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the gateway group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the gateway group.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GatewayGroupSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'gatewayGroupSummary_arn' - The ARN of the gateway group.
+--
+-- 'description', 'gatewayGroupSummary_description' - The description of the gateway group.
+--
+-- 'name', 'gatewayGroupSummary_name' - The name of the gateway group.
+newGatewayGroupSummary ::
+  GatewayGroupSummary
+newGatewayGroupSummary =
+  GatewayGroupSummary'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The ARN of the gateway group.
+gatewayGroupSummary_arn :: Lens.Lens' GatewayGroupSummary (Prelude.Maybe Prelude.Text)
+gatewayGroupSummary_arn = Lens.lens (\GatewayGroupSummary' {arn} -> arn) (\s@GatewayGroupSummary' {} a -> s {arn = a} :: GatewayGroupSummary)
+
+-- | The description of the gateway group.
+gatewayGroupSummary_description :: Lens.Lens' GatewayGroupSummary (Prelude.Maybe Prelude.Text)
+gatewayGroupSummary_description = Lens.lens (\GatewayGroupSummary' {description} -> description) (\s@GatewayGroupSummary' {} a -> s {description = a} :: GatewayGroupSummary)
+
+-- | The name of the gateway group.
+gatewayGroupSummary_name :: Lens.Lens' GatewayGroupSummary (Prelude.Maybe Prelude.Text)
+gatewayGroupSummary_name = Lens.lens (\GatewayGroupSummary' {name} -> name) (\s@GatewayGroupSummary' {} a -> s {name = a} :: GatewayGroupSummary)
+
+instance Data.FromJSON GatewayGroupSummary where
+  parseJSON =
+    Data.withObject
+      "GatewayGroupSummary"
+      ( \x ->
+          GatewayGroupSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable GatewayGroupSummary where
+  hashWithSalt _salt GatewayGroupSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GatewayGroupSummary where
+  rnf GatewayGroupSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AlexaBusiness/Types/GatewaySummary.hs b/gen/Amazonka/AlexaBusiness/Types/GatewaySummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/GatewaySummary.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.GatewaySummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.GatewaySummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of a gateway.
+--
+-- /See:/ 'newGatewaySummary' smart constructor.
+data GatewaySummary = GatewaySummary'
+  { -- | The ARN of the gateway.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the gateway.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the gateway group that the gateway is associated to.
+    gatewayGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the gateway.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The software version of the gateway. The gateway automatically updates
+    -- its software version during normal operation.
+    softwareVersion :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GatewaySummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'gatewaySummary_arn' - The ARN of the gateway.
+--
+-- 'description', 'gatewaySummary_description' - The description of the gateway.
+--
+-- 'gatewayGroupArn', 'gatewaySummary_gatewayGroupArn' - The ARN of the gateway group that the gateway is associated to.
+--
+-- 'name', 'gatewaySummary_name' - The name of the gateway.
+--
+-- 'softwareVersion', 'gatewaySummary_softwareVersion' - The software version of the gateway. The gateway automatically updates
+-- its software version during normal operation.
+newGatewaySummary ::
+  GatewaySummary
+newGatewaySummary =
+  GatewaySummary'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      gatewayGroupArn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      softwareVersion = Prelude.Nothing
+    }
+
+-- | The ARN of the gateway.
+gatewaySummary_arn :: Lens.Lens' GatewaySummary (Prelude.Maybe Prelude.Text)
+gatewaySummary_arn = Lens.lens (\GatewaySummary' {arn} -> arn) (\s@GatewaySummary' {} a -> s {arn = a} :: GatewaySummary)
+
+-- | The description of the gateway.
+gatewaySummary_description :: Lens.Lens' GatewaySummary (Prelude.Maybe Prelude.Text)
+gatewaySummary_description = Lens.lens (\GatewaySummary' {description} -> description) (\s@GatewaySummary' {} a -> s {description = a} :: GatewaySummary)
+
+-- | The ARN of the gateway group that the gateway is associated to.
+gatewaySummary_gatewayGroupArn :: Lens.Lens' GatewaySummary (Prelude.Maybe Prelude.Text)
+gatewaySummary_gatewayGroupArn = Lens.lens (\GatewaySummary' {gatewayGroupArn} -> gatewayGroupArn) (\s@GatewaySummary' {} a -> s {gatewayGroupArn = a} :: GatewaySummary)
+
+-- | The name of the gateway.
+gatewaySummary_name :: Lens.Lens' GatewaySummary (Prelude.Maybe Prelude.Text)
+gatewaySummary_name = Lens.lens (\GatewaySummary' {name} -> name) (\s@GatewaySummary' {} a -> s {name = a} :: GatewaySummary)
+
+-- | The software version of the gateway. The gateway automatically updates
+-- its software version during normal operation.
+gatewaySummary_softwareVersion :: Lens.Lens' GatewaySummary (Prelude.Maybe Prelude.Text)
+gatewaySummary_softwareVersion = Lens.lens (\GatewaySummary' {softwareVersion} -> softwareVersion) (\s@GatewaySummary' {} a -> s {softwareVersion = a} :: GatewaySummary)
+
+instance Data.FromJSON GatewaySummary where
+  parseJSON =
+    Data.withObject
+      "GatewaySummary"
+      ( \x ->
+          GatewaySummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "GatewayGroupArn")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "SoftwareVersion")
+      )
+
+instance Prelude.Hashable GatewaySummary where
+  hashWithSalt _salt GatewaySummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` gatewayGroupArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` softwareVersion
+
+instance Prelude.NFData GatewaySummary where
+  rnf GatewaySummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf gatewayGroupArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf softwareVersion
diff --git a/gen/Amazonka/AlexaBusiness/Types/IPDialIn.hs b/gen/Amazonka/AlexaBusiness/Types/IPDialIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/IPDialIn.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.IPDialIn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.IPDialIn where
+
+import Amazonka.AlexaBusiness.Types.CommsProtocol
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The IP endpoint and protocol for calling.
+--
+-- /See:/ 'newIPDialIn' smart constructor.
+data IPDialIn = IPDialIn'
+  { -- | The IP address.
+    endpoint :: Prelude.Text,
+    -- | The protocol, including SIP, SIPS, and H323.
+    commsProtocol :: CommsProtocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IPDialIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpoint', 'iPDialIn_endpoint' - The IP address.
+--
+-- 'commsProtocol', 'iPDialIn_commsProtocol' - The protocol, including SIP, SIPS, and H323.
+newIPDialIn ::
+  -- | 'endpoint'
+  Prelude.Text ->
+  -- | 'commsProtocol'
+  CommsProtocol ->
+  IPDialIn
+newIPDialIn pEndpoint_ pCommsProtocol_ =
+  IPDialIn'
+    { endpoint = pEndpoint_,
+      commsProtocol = pCommsProtocol_
+    }
+
+-- | The IP address.
+iPDialIn_endpoint :: Lens.Lens' IPDialIn Prelude.Text
+iPDialIn_endpoint = Lens.lens (\IPDialIn' {endpoint} -> endpoint) (\s@IPDialIn' {} a -> s {endpoint = a} :: IPDialIn)
+
+-- | The protocol, including SIP, SIPS, and H323.
+iPDialIn_commsProtocol :: Lens.Lens' IPDialIn CommsProtocol
+iPDialIn_commsProtocol = Lens.lens (\IPDialIn' {commsProtocol} -> commsProtocol) (\s@IPDialIn' {} a -> s {commsProtocol = a} :: IPDialIn)
+
+instance Data.FromJSON IPDialIn where
+  parseJSON =
+    Data.withObject
+      "IPDialIn"
+      ( \x ->
+          IPDialIn'
+            Prelude.<$> (x Data..: "Endpoint")
+            Prelude.<*> (x Data..: "CommsProtocol")
+      )
+
+instance Prelude.Hashable IPDialIn where
+  hashWithSalt _salt IPDialIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpoint
+      `Prelude.hashWithSalt` commsProtocol
+
+instance Prelude.NFData IPDialIn where
+  rnf IPDialIn' {..} =
+    Prelude.rnf endpoint
+      `Prelude.seq` Prelude.rnf commsProtocol
+
+instance Data.ToJSON IPDialIn where
+  toJSON IPDialIn' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Endpoint" Data..= endpoint),
+            Prelude.Just
+              ("CommsProtocol" Data..= commsProtocol)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/InstantBooking.hs b/gen/Amazonka/AlexaBusiness/Types/InstantBooking.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/InstantBooking.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.InstantBooking
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.InstantBooking where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Settings for the instant booking feature that are applied to a room
+-- profile. When users start their meeting with Alexa, Alexa automatically
+-- books the room for the configured duration if the room is available.
+--
+-- /See:/ 'newInstantBooking' smart constructor.
+data InstantBooking = InstantBooking'
+  { -- | Duration between 15 and 240 minutes at increments of 15 that determines
+    -- how long to book an available room when a meeting is started with Alexa.
+    durationInMinutes :: Prelude.Maybe Prelude.Int,
+    -- | Whether instant booking is enabled or not.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstantBooking' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'durationInMinutes', 'instantBooking_durationInMinutes' - Duration between 15 and 240 minutes at increments of 15 that determines
+-- how long to book an available room when a meeting is started with Alexa.
+--
+-- 'enabled', 'instantBooking_enabled' - Whether instant booking is enabled or not.
+newInstantBooking ::
+  InstantBooking
+newInstantBooking =
+  InstantBooking'
+    { durationInMinutes =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | Duration between 15 and 240 minutes at increments of 15 that determines
+-- how long to book an available room when a meeting is started with Alexa.
+instantBooking_durationInMinutes :: Lens.Lens' InstantBooking (Prelude.Maybe Prelude.Int)
+instantBooking_durationInMinutes = Lens.lens (\InstantBooking' {durationInMinutes} -> durationInMinutes) (\s@InstantBooking' {} a -> s {durationInMinutes = a} :: InstantBooking)
+
+-- | Whether instant booking is enabled or not.
+instantBooking_enabled :: Lens.Lens' InstantBooking (Prelude.Maybe Prelude.Bool)
+instantBooking_enabled = Lens.lens (\InstantBooking' {enabled} -> enabled) (\s@InstantBooking' {} a -> s {enabled = a} :: InstantBooking)
+
+instance Data.FromJSON InstantBooking where
+  parseJSON =
+    Data.withObject
+      "InstantBooking"
+      ( \x ->
+          InstantBooking'
+            Prelude.<$> (x Data..:? "DurationInMinutes")
+            Prelude.<*> (x Data..:? "Enabled")
+      )
+
+instance Prelude.Hashable InstantBooking where
+  hashWithSalt _salt InstantBooking' {..} =
+    _salt
+      `Prelude.hashWithSalt` durationInMinutes
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData InstantBooking where
+  rnf InstantBooking' {..} =
+    Prelude.rnf durationInMinutes
+      `Prelude.seq` Prelude.rnf enabled
diff --git a/gen/Amazonka/AlexaBusiness/Types/Locale.hs b/gen/Amazonka/AlexaBusiness/Types/Locale.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Locale.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Locale
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Locale
+  ( Locale
+      ( ..,
+        Locale_En_US
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Locale = Locale' {fromLocale :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Locale_En_US :: Locale
+pattern Locale_En_US = Locale' "en-US"
+
+{-# COMPLETE
+  Locale_En_US,
+  Locale'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/MeetingRoomConfiguration.hs b/gen/Amazonka/AlexaBusiness/Types/MeetingRoomConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/MeetingRoomConfiguration.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.MeetingRoomConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.MeetingRoomConfiguration where
+
+import Amazonka.AlexaBusiness.Types.EndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.InstantBooking
+import Amazonka.AlexaBusiness.Types.RequireCheckIn
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Meeting room settings of a room profile.
+--
+-- /See:/ 'newMeetingRoomConfiguration' smart constructor.
+data MeetingRoomConfiguration = MeetingRoomConfiguration'
+  { -- | Settings for the end of meeting reminder feature that are applied to a
+    -- room profile. The end of meeting reminder enables Alexa to remind users
+    -- when a meeting is ending.
+    endOfMeetingReminder :: Prelude.Maybe EndOfMeetingReminder,
+    -- | Settings to automatically book the room if available for a configured
+    -- duration when joining a meeting with Alexa.
+    instantBooking :: Prelude.Maybe InstantBooking,
+    -- | Settings for requiring a check in when a room is reserved. Alexa can
+    -- cancel a room reservation if it\'s not checked into. This makes the room
+    -- available for others. Users can check in by joining the meeting with
+    -- Alexa or an AVS device, or by saying “Alexa, check in.”
+    requireCheckIn :: Prelude.Maybe RequireCheckIn,
+    -- | Whether room utilization metrics are enabled or not.
+    roomUtilizationMetricsEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MeetingRoomConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endOfMeetingReminder', 'meetingRoomConfiguration_endOfMeetingReminder' - Settings for the end of meeting reminder feature that are applied to a
+-- room profile. The end of meeting reminder enables Alexa to remind users
+-- when a meeting is ending.
+--
+-- 'instantBooking', 'meetingRoomConfiguration_instantBooking' - Settings to automatically book the room if available for a configured
+-- duration when joining a meeting with Alexa.
+--
+-- 'requireCheckIn', 'meetingRoomConfiguration_requireCheckIn' - Settings for requiring a check in when a room is reserved. Alexa can
+-- cancel a room reservation if it\'s not checked into. This makes the room
+-- available for others. Users can check in by joining the meeting with
+-- Alexa or an AVS device, or by saying “Alexa, check in.”
+--
+-- 'roomUtilizationMetricsEnabled', 'meetingRoomConfiguration_roomUtilizationMetricsEnabled' - Whether room utilization metrics are enabled or not.
+newMeetingRoomConfiguration ::
+  MeetingRoomConfiguration
+newMeetingRoomConfiguration =
+  MeetingRoomConfiguration'
+    { endOfMeetingReminder =
+        Prelude.Nothing,
+      instantBooking = Prelude.Nothing,
+      requireCheckIn = Prelude.Nothing,
+      roomUtilizationMetricsEnabled = Prelude.Nothing
+    }
+
+-- | Settings for the end of meeting reminder feature that are applied to a
+-- room profile. The end of meeting reminder enables Alexa to remind users
+-- when a meeting is ending.
+meetingRoomConfiguration_endOfMeetingReminder :: Lens.Lens' MeetingRoomConfiguration (Prelude.Maybe EndOfMeetingReminder)
+meetingRoomConfiguration_endOfMeetingReminder = Lens.lens (\MeetingRoomConfiguration' {endOfMeetingReminder} -> endOfMeetingReminder) (\s@MeetingRoomConfiguration' {} a -> s {endOfMeetingReminder = a} :: MeetingRoomConfiguration)
+
+-- | Settings to automatically book the room if available for a configured
+-- duration when joining a meeting with Alexa.
+meetingRoomConfiguration_instantBooking :: Lens.Lens' MeetingRoomConfiguration (Prelude.Maybe InstantBooking)
+meetingRoomConfiguration_instantBooking = Lens.lens (\MeetingRoomConfiguration' {instantBooking} -> instantBooking) (\s@MeetingRoomConfiguration' {} a -> s {instantBooking = a} :: MeetingRoomConfiguration)
+
+-- | Settings for requiring a check in when a room is reserved. Alexa can
+-- cancel a room reservation if it\'s not checked into. This makes the room
+-- available for others. Users can check in by joining the meeting with
+-- Alexa or an AVS device, or by saying “Alexa, check in.”
+meetingRoomConfiguration_requireCheckIn :: Lens.Lens' MeetingRoomConfiguration (Prelude.Maybe RequireCheckIn)
+meetingRoomConfiguration_requireCheckIn = Lens.lens (\MeetingRoomConfiguration' {requireCheckIn} -> requireCheckIn) (\s@MeetingRoomConfiguration' {} a -> s {requireCheckIn = a} :: MeetingRoomConfiguration)
+
+-- | Whether room utilization metrics are enabled or not.
+meetingRoomConfiguration_roomUtilizationMetricsEnabled :: Lens.Lens' MeetingRoomConfiguration (Prelude.Maybe Prelude.Bool)
+meetingRoomConfiguration_roomUtilizationMetricsEnabled = Lens.lens (\MeetingRoomConfiguration' {roomUtilizationMetricsEnabled} -> roomUtilizationMetricsEnabled) (\s@MeetingRoomConfiguration' {} a -> s {roomUtilizationMetricsEnabled = a} :: MeetingRoomConfiguration)
+
+instance Data.FromJSON MeetingRoomConfiguration where
+  parseJSON =
+    Data.withObject
+      "MeetingRoomConfiguration"
+      ( \x ->
+          MeetingRoomConfiguration'
+            Prelude.<$> (x Data..:? "EndOfMeetingReminder")
+            Prelude.<*> (x Data..:? "InstantBooking")
+            Prelude.<*> (x Data..:? "RequireCheckIn")
+            Prelude.<*> (x Data..:? "RoomUtilizationMetricsEnabled")
+      )
+
+instance Prelude.Hashable MeetingRoomConfiguration where
+  hashWithSalt _salt MeetingRoomConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` endOfMeetingReminder
+      `Prelude.hashWithSalt` instantBooking
+      `Prelude.hashWithSalt` requireCheckIn
+      `Prelude.hashWithSalt` roomUtilizationMetricsEnabled
+
+instance Prelude.NFData MeetingRoomConfiguration where
+  rnf MeetingRoomConfiguration' {..} =
+    Prelude.rnf endOfMeetingReminder
+      `Prelude.seq` Prelude.rnf instantBooking
+      `Prelude.seq` Prelude.rnf requireCheckIn
+      `Prelude.seq` Prelude.rnf roomUtilizationMetricsEnabled
diff --git a/gen/Amazonka/AlexaBusiness/Types/MeetingSetting.hs b/gen/Amazonka/AlexaBusiness/Types/MeetingSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/MeetingSetting.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.MeetingSetting
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.MeetingSetting where
+
+import Amazonka.AlexaBusiness.Types.RequirePin
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The values that indicate whether a pin is always required (YES), never
+-- required (NO), or OPTIONAL.
+--
+-- -   If YES, Alexa will always ask for a meeting pin.
+--
+-- -   If NO, Alexa will never ask for a meeting pin.
+--
+-- -   If OPTIONAL, Alexa will ask if you have a meeting pin and if the
+--     customer responds with yes, it will ask for the meeting pin.
+--
+-- /See:/ 'newMeetingSetting' smart constructor.
+data MeetingSetting = MeetingSetting'
+  { -- | The values that indicate whether the pin is always required.
+    requirePin :: RequirePin
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MeetingSetting' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'requirePin', 'meetingSetting_requirePin' - The values that indicate whether the pin is always required.
+newMeetingSetting ::
+  -- | 'requirePin'
+  RequirePin ->
+  MeetingSetting
+newMeetingSetting pRequirePin_ =
+  MeetingSetting' {requirePin = pRequirePin_}
+
+-- | The values that indicate whether the pin is always required.
+meetingSetting_requirePin :: Lens.Lens' MeetingSetting RequirePin
+meetingSetting_requirePin = Lens.lens (\MeetingSetting' {requirePin} -> requirePin) (\s@MeetingSetting' {} a -> s {requirePin = a} :: MeetingSetting)
+
+instance Data.FromJSON MeetingSetting where
+  parseJSON =
+    Data.withObject
+      "MeetingSetting"
+      ( \x ->
+          MeetingSetting' Prelude.<$> (x Data..: "RequirePin")
+      )
+
+instance Prelude.Hashable MeetingSetting where
+  hashWithSalt _salt MeetingSetting' {..} =
+    _salt `Prelude.hashWithSalt` requirePin
+
+instance Prelude.NFData MeetingSetting where
+  rnf MeetingSetting' {..} = Prelude.rnf requirePin
+
+instance Data.ToJSON MeetingSetting where
+  toJSON MeetingSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("RequirePin" Data..= requirePin)]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/NetworkEapMethod.hs b/gen/Amazonka/AlexaBusiness/Types/NetworkEapMethod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/NetworkEapMethod.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.NetworkEapMethod
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.NetworkEapMethod
+  ( NetworkEapMethod
+      ( ..,
+        NetworkEapMethod_EAP_TLS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkEapMethod = NetworkEapMethod'
+  { fromNetworkEapMethod ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NetworkEapMethod_EAP_TLS :: NetworkEapMethod
+pattern NetworkEapMethod_EAP_TLS = NetworkEapMethod' "EAP_TLS"
+
+{-# COMPLETE
+  NetworkEapMethod_EAP_TLS,
+  NetworkEapMethod'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/NetworkProfile.hs b/gen/Amazonka/AlexaBusiness/Types/NetworkProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/NetworkProfile.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.NetworkProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.NetworkProfile where
+
+import Amazonka.AlexaBusiness.Types.NetworkEapMethod
+import Amazonka.AlexaBusiness.Types.NetworkSecurityType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The network profile associated with a device.
+--
+-- /See:/ 'newNetworkProfile' smart constructor.
+data NetworkProfile = NetworkProfile'
+  { -- | The ARN of the Private Certificate Authority (PCA) created in AWS
+    -- Certificate Manager (ACM). This is used to issue certificates to the
+    -- devices.
+    certificateAuthorityArn :: Prelude.Maybe Prelude.Text,
+    -- | The current password of the Wi-Fi network.
+    currentPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Detailed information about a device\'s network profile.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The authentication standard that is used in the EAP framework.
+    -- Currently, EAP_TLS is supported.
+    eapMethod :: Prelude.Maybe NetworkEapMethod,
+    -- | The ARN of the network profile associated with a device.
+    networkProfileArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the network profile associated with a device.
+    networkProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The next, or subsequent, password of the Wi-Fi network. This password is
+    -- asynchronously transmitted to the device and is used when the password
+    -- of the network changes to NextPassword.
+    nextPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+    -- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+    securityType :: Prelude.Maybe NetworkSecurityType,
+    -- | The SSID of the Wi-Fi network.
+    ssid :: Prelude.Maybe Prelude.Text,
+    -- | The root certificates of your authentication server, which is installed
+    -- on your devices and used to trust your authentication server during EAP
+    -- negotiation.
+    trustAnchors :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateAuthorityArn', 'networkProfile_certificateAuthorityArn' - The ARN of the Private Certificate Authority (PCA) created in AWS
+-- Certificate Manager (ACM). This is used to issue certificates to the
+-- devices.
+--
+-- 'currentPassword', 'networkProfile_currentPassword' - The current password of the Wi-Fi network.
+--
+-- 'description', 'networkProfile_description' - Detailed information about a device\'s network profile.
+--
+-- 'eapMethod', 'networkProfile_eapMethod' - The authentication standard that is used in the EAP framework.
+-- Currently, EAP_TLS is supported.
+--
+-- 'networkProfileArn', 'networkProfile_networkProfileArn' - The ARN of the network profile associated with a device.
+--
+-- 'networkProfileName', 'networkProfile_networkProfileName' - The name of the network profile associated with a device.
+--
+-- 'nextPassword', 'networkProfile_nextPassword' - The next, or subsequent, password of the Wi-Fi network. This password is
+-- asynchronously transmitted to the device and is used when the password
+-- of the network changes to NextPassword.
+--
+-- 'securityType', 'networkProfile_securityType' - The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+-- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+--
+-- 'ssid', 'networkProfile_ssid' - The SSID of the Wi-Fi network.
+--
+-- 'trustAnchors', 'networkProfile_trustAnchors' - The root certificates of your authentication server, which is installed
+-- on your devices and used to trust your authentication server during EAP
+-- negotiation.
+newNetworkProfile ::
+  NetworkProfile
+newNetworkProfile =
+  NetworkProfile'
+    { certificateAuthorityArn =
+        Prelude.Nothing,
+      currentPassword = Prelude.Nothing,
+      description = Prelude.Nothing,
+      eapMethod = Prelude.Nothing,
+      networkProfileArn = Prelude.Nothing,
+      networkProfileName = Prelude.Nothing,
+      nextPassword = Prelude.Nothing,
+      securityType = Prelude.Nothing,
+      ssid = Prelude.Nothing,
+      trustAnchors = Prelude.Nothing
+    }
+
+-- | The ARN of the Private Certificate Authority (PCA) created in AWS
+-- Certificate Manager (ACM). This is used to issue certificates to the
+-- devices.
+networkProfile_certificateAuthorityArn :: Lens.Lens' NetworkProfile (Prelude.Maybe Prelude.Text)
+networkProfile_certificateAuthorityArn = Lens.lens (\NetworkProfile' {certificateAuthorityArn} -> certificateAuthorityArn) (\s@NetworkProfile' {} a -> s {certificateAuthorityArn = a} :: NetworkProfile)
+
+-- | The current password of the Wi-Fi network.
+networkProfile_currentPassword :: Lens.Lens' NetworkProfile (Prelude.Maybe Prelude.Text)
+networkProfile_currentPassword = Lens.lens (\NetworkProfile' {currentPassword} -> currentPassword) (\s@NetworkProfile' {} a -> s {currentPassword = a} :: NetworkProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Detailed information about a device\'s network profile.
+networkProfile_description :: Lens.Lens' NetworkProfile (Prelude.Maybe Prelude.Text)
+networkProfile_description = Lens.lens (\NetworkProfile' {description} -> description) (\s@NetworkProfile' {} a -> s {description = a} :: NetworkProfile)
+
+-- | The authentication standard that is used in the EAP framework.
+-- Currently, EAP_TLS is supported.
+networkProfile_eapMethod :: Lens.Lens' NetworkProfile (Prelude.Maybe NetworkEapMethod)
+networkProfile_eapMethod = Lens.lens (\NetworkProfile' {eapMethod} -> eapMethod) (\s@NetworkProfile' {} a -> s {eapMethod = a} :: NetworkProfile)
+
+-- | The ARN of the network profile associated with a device.
+networkProfile_networkProfileArn :: Lens.Lens' NetworkProfile (Prelude.Maybe Prelude.Text)
+networkProfile_networkProfileArn = Lens.lens (\NetworkProfile' {networkProfileArn} -> networkProfileArn) (\s@NetworkProfile' {} a -> s {networkProfileArn = a} :: NetworkProfile)
+
+-- | The name of the network profile associated with a device.
+networkProfile_networkProfileName :: Lens.Lens' NetworkProfile (Prelude.Maybe Prelude.Text)
+networkProfile_networkProfileName = Lens.lens (\NetworkProfile' {networkProfileName} -> networkProfileName) (\s@NetworkProfile' {} a -> s {networkProfileName = a} :: NetworkProfile)
+
+-- | The next, or subsequent, password of the Wi-Fi network. This password is
+-- asynchronously transmitted to the device and is used when the password
+-- of the network changes to NextPassword.
+networkProfile_nextPassword :: Lens.Lens' NetworkProfile (Prelude.Maybe Prelude.Text)
+networkProfile_nextPassword = Lens.lens (\NetworkProfile' {nextPassword} -> nextPassword) (\s@NetworkProfile' {} a -> s {nextPassword = a} :: NetworkProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+-- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+networkProfile_securityType :: Lens.Lens' NetworkProfile (Prelude.Maybe NetworkSecurityType)
+networkProfile_securityType = Lens.lens (\NetworkProfile' {securityType} -> securityType) (\s@NetworkProfile' {} a -> s {securityType = a} :: NetworkProfile)
+
+-- | The SSID of the Wi-Fi network.
+networkProfile_ssid :: Lens.Lens' NetworkProfile (Prelude.Maybe Prelude.Text)
+networkProfile_ssid = Lens.lens (\NetworkProfile' {ssid} -> ssid) (\s@NetworkProfile' {} a -> s {ssid = a} :: NetworkProfile)
+
+-- | The root certificates of your authentication server, which is installed
+-- on your devices and used to trust your authentication server during EAP
+-- negotiation.
+networkProfile_trustAnchors :: Lens.Lens' NetworkProfile (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+networkProfile_trustAnchors = Lens.lens (\NetworkProfile' {trustAnchors} -> trustAnchors) (\s@NetworkProfile' {} a -> s {trustAnchors = a} :: NetworkProfile) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON NetworkProfile where
+  parseJSON =
+    Data.withObject
+      "NetworkProfile"
+      ( \x ->
+          NetworkProfile'
+            Prelude.<$> (x Data..:? "CertificateAuthorityArn")
+            Prelude.<*> (x Data..:? "CurrentPassword")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "EapMethod")
+            Prelude.<*> (x Data..:? "NetworkProfileArn")
+            Prelude.<*> (x Data..:? "NetworkProfileName")
+            Prelude.<*> (x Data..:? "NextPassword")
+            Prelude.<*> (x Data..:? "SecurityType")
+            Prelude.<*> (x Data..:? "Ssid")
+            Prelude.<*> (x Data..:? "TrustAnchors")
+      )
+
+instance Prelude.Hashable NetworkProfile where
+  hashWithSalt _salt NetworkProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateAuthorityArn
+      `Prelude.hashWithSalt` currentPassword
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eapMethod
+      `Prelude.hashWithSalt` networkProfileArn
+      `Prelude.hashWithSalt` networkProfileName
+      `Prelude.hashWithSalt` nextPassword
+      `Prelude.hashWithSalt` securityType
+      `Prelude.hashWithSalt` ssid
+      `Prelude.hashWithSalt` trustAnchors
+
+instance Prelude.NFData NetworkProfile where
+  rnf NetworkProfile' {..} =
+    Prelude.rnf certificateAuthorityArn
+      `Prelude.seq` Prelude.rnf currentPassword
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eapMethod
+      `Prelude.seq` Prelude.rnf networkProfileArn
+      `Prelude.seq` Prelude.rnf networkProfileName
+      `Prelude.seq` Prelude.rnf nextPassword
+      `Prelude.seq` Prelude.rnf securityType
+      `Prelude.seq` Prelude.rnf ssid
+      `Prelude.seq` Prelude.rnf trustAnchors
diff --git a/gen/Amazonka/AlexaBusiness/Types/NetworkProfileData.hs b/gen/Amazonka/AlexaBusiness/Types/NetworkProfileData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/NetworkProfileData.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.NetworkProfileData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.NetworkProfileData where
+
+import Amazonka.AlexaBusiness.Types.NetworkEapMethod
+import Amazonka.AlexaBusiness.Types.NetworkSecurityType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The data associated with a network profile.
+--
+-- /See:/ 'newNetworkProfileData' smart constructor.
+data NetworkProfileData = NetworkProfileData'
+  { -- | The ARN of the Private Certificate Authority (PCA) created in AWS
+    -- Certificate Manager (ACM). This is used to issue certificates to the
+    -- devices.
+    certificateAuthorityArn :: Prelude.Maybe Prelude.Text,
+    -- | Detailed information about a device\'s network profile.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The authentication standard that is used in the EAP framework.
+    -- Currently, EAP_TLS is supported.
+    eapMethod :: Prelude.Maybe NetworkEapMethod,
+    -- | The ARN of the network profile associated with a device.
+    networkProfileArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the network profile associated with a device.
+    networkProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+    -- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+    securityType :: Prelude.Maybe NetworkSecurityType,
+    -- | The SSID of the Wi-Fi network.
+    ssid :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkProfileData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateAuthorityArn', 'networkProfileData_certificateAuthorityArn' - The ARN of the Private Certificate Authority (PCA) created in AWS
+-- Certificate Manager (ACM). This is used to issue certificates to the
+-- devices.
+--
+-- 'description', 'networkProfileData_description' - Detailed information about a device\'s network profile.
+--
+-- 'eapMethod', 'networkProfileData_eapMethod' - The authentication standard that is used in the EAP framework.
+-- Currently, EAP_TLS is supported.
+--
+-- 'networkProfileArn', 'networkProfileData_networkProfileArn' - The ARN of the network profile associated with a device.
+--
+-- 'networkProfileName', 'networkProfileData_networkProfileName' - The name of the network profile associated with a device.
+--
+-- 'securityType', 'networkProfileData_securityType' - The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+-- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+--
+-- 'ssid', 'networkProfileData_ssid' - The SSID of the Wi-Fi network.
+newNetworkProfileData ::
+  NetworkProfileData
+newNetworkProfileData =
+  NetworkProfileData'
+    { certificateAuthorityArn =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      eapMethod = Prelude.Nothing,
+      networkProfileArn = Prelude.Nothing,
+      networkProfileName = Prelude.Nothing,
+      securityType = Prelude.Nothing,
+      ssid = Prelude.Nothing
+    }
+
+-- | The ARN of the Private Certificate Authority (PCA) created in AWS
+-- Certificate Manager (ACM). This is used to issue certificates to the
+-- devices.
+networkProfileData_certificateAuthorityArn :: Lens.Lens' NetworkProfileData (Prelude.Maybe Prelude.Text)
+networkProfileData_certificateAuthorityArn = Lens.lens (\NetworkProfileData' {certificateAuthorityArn} -> certificateAuthorityArn) (\s@NetworkProfileData' {} a -> s {certificateAuthorityArn = a} :: NetworkProfileData)
+
+-- | Detailed information about a device\'s network profile.
+networkProfileData_description :: Lens.Lens' NetworkProfileData (Prelude.Maybe Prelude.Text)
+networkProfileData_description = Lens.lens (\NetworkProfileData' {description} -> description) (\s@NetworkProfileData' {} a -> s {description = a} :: NetworkProfileData)
+
+-- | The authentication standard that is used in the EAP framework.
+-- Currently, EAP_TLS is supported.
+networkProfileData_eapMethod :: Lens.Lens' NetworkProfileData (Prelude.Maybe NetworkEapMethod)
+networkProfileData_eapMethod = Lens.lens (\NetworkProfileData' {eapMethod} -> eapMethod) (\s@NetworkProfileData' {} a -> s {eapMethod = a} :: NetworkProfileData)
+
+-- | The ARN of the network profile associated with a device.
+networkProfileData_networkProfileArn :: Lens.Lens' NetworkProfileData (Prelude.Maybe Prelude.Text)
+networkProfileData_networkProfileArn = Lens.lens (\NetworkProfileData' {networkProfileArn} -> networkProfileArn) (\s@NetworkProfileData' {} a -> s {networkProfileArn = a} :: NetworkProfileData)
+
+-- | The name of the network profile associated with a device.
+networkProfileData_networkProfileName :: Lens.Lens' NetworkProfileData (Prelude.Maybe Prelude.Text)
+networkProfileData_networkProfileName = Lens.lens (\NetworkProfileData' {networkProfileName} -> networkProfileName) (\s@NetworkProfileData' {} a -> s {networkProfileName = a} :: NetworkProfileData)
+
+-- | The security type of the Wi-Fi network. This can be WPA2_ENTERPRISE,
+-- WPA2_PSK, WPA_PSK, WEP, or OPEN.
+networkProfileData_securityType :: Lens.Lens' NetworkProfileData (Prelude.Maybe NetworkSecurityType)
+networkProfileData_securityType = Lens.lens (\NetworkProfileData' {securityType} -> securityType) (\s@NetworkProfileData' {} a -> s {securityType = a} :: NetworkProfileData)
+
+-- | The SSID of the Wi-Fi network.
+networkProfileData_ssid :: Lens.Lens' NetworkProfileData (Prelude.Maybe Prelude.Text)
+networkProfileData_ssid = Lens.lens (\NetworkProfileData' {ssid} -> ssid) (\s@NetworkProfileData' {} a -> s {ssid = a} :: NetworkProfileData)
+
+instance Data.FromJSON NetworkProfileData where
+  parseJSON =
+    Data.withObject
+      "NetworkProfileData"
+      ( \x ->
+          NetworkProfileData'
+            Prelude.<$> (x Data..:? "CertificateAuthorityArn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "EapMethod")
+            Prelude.<*> (x Data..:? "NetworkProfileArn")
+            Prelude.<*> (x Data..:? "NetworkProfileName")
+            Prelude.<*> (x Data..:? "SecurityType")
+            Prelude.<*> (x Data..:? "Ssid")
+      )
+
+instance Prelude.Hashable NetworkProfileData where
+  hashWithSalt _salt NetworkProfileData' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateAuthorityArn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eapMethod
+      `Prelude.hashWithSalt` networkProfileArn
+      `Prelude.hashWithSalt` networkProfileName
+      `Prelude.hashWithSalt` securityType
+      `Prelude.hashWithSalt` ssid
+
+instance Prelude.NFData NetworkProfileData where
+  rnf NetworkProfileData' {..} =
+    Prelude.rnf certificateAuthorityArn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eapMethod
+      `Prelude.seq` Prelude.rnf networkProfileArn
+      `Prelude.seq` Prelude.rnf networkProfileName
+      `Prelude.seq` Prelude.rnf securityType
+      `Prelude.seq` Prelude.rnf ssid
diff --git a/gen/Amazonka/AlexaBusiness/Types/NetworkSecurityType.hs b/gen/Amazonka/AlexaBusiness/Types/NetworkSecurityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/NetworkSecurityType.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.NetworkSecurityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.NetworkSecurityType
+  ( NetworkSecurityType
+      ( ..,
+        NetworkSecurityType_OPEN,
+        NetworkSecurityType_WEP,
+        NetworkSecurityType_WPA2_ENTERPRISE,
+        NetworkSecurityType_WPA2_PSK,
+        NetworkSecurityType_WPA_PSK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkSecurityType = NetworkSecurityType'
+  { fromNetworkSecurityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NetworkSecurityType_OPEN :: NetworkSecurityType
+pattern NetworkSecurityType_OPEN = NetworkSecurityType' "OPEN"
+
+pattern NetworkSecurityType_WEP :: NetworkSecurityType
+pattern NetworkSecurityType_WEP = NetworkSecurityType' "WEP"
+
+pattern NetworkSecurityType_WPA2_ENTERPRISE :: NetworkSecurityType
+pattern NetworkSecurityType_WPA2_ENTERPRISE = NetworkSecurityType' "WPA2_ENTERPRISE"
+
+pattern NetworkSecurityType_WPA2_PSK :: NetworkSecurityType
+pattern NetworkSecurityType_WPA2_PSK = NetworkSecurityType' "WPA2_PSK"
+
+pattern NetworkSecurityType_WPA_PSK :: NetworkSecurityType
+pattern NetworkSecurityType_WPA_PSK = NetworkSecurityType' "WPA_PSK"
+
+{-# COMPLETE
+  NetworkSecurityType_OPEN,
+  NetworkSecurityType_WEP,
+  NetworkSecurityType_WPA2_ENTERPRISE,
+  NetworkSecurityType_WPA2_PSK,
+  NetworkSecurityType_WPA_PSK,
+  NetworkSecurityType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/PSTNDialIn.hs b/gen/Amazonka/AlexaBusiness/Types/PSTNDialIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/PSTNDialIn.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.PSTNDialIn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.PSTNDialIn where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The information for public switched telephone network (PSTN)
+-- conferencing.
+--
+-- /See:/ 'newPSTNDialIn' smart constructor.
+data PSTNDialIn = PSTNDialIn'
+  { -- | The zip code.
+    countryCode :: Prelude.Text,
+    -- | The phone number to call to join the conference.
+    phoneNumber :: Prelude.Text,
+    -- | The delay duration before Alexa enters the conference ID with dual-tone
+    -- multi-frequency (DTMF). Each number on the dial pad corresponds to a
+    -- DTMF tone, which is how we send data over the telephone network.
+    oneClickIdDelay :: Prelude.Text,
+    -- | The delay duration before Alexa enters the conference pin with dual-tone
+    -- multi-frequency (DTMF). Each number on the dial pad corresponds to a
+    -- DTMF tone, which is how we send data over the telephone network.
+    oneClickPinDelay :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PSTNDialIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'countryCode', 'pSTNDialIn_countryCode' - The zip code.
+--
+-- 'phoneNumber', 'pSTNDialIn_phoneNumber' - The phone number to call to join the conference.
+--
+-- 'oneClickIdDelay', 'pSTNDialIn_oneClickIdDelay' - The delay duration before Alexa enters the conference ID with dual-tone
+-- multi-frequency (DTMF). Each number on the dial pad corresponds to a
+-- DTMF tone, which is how we send data over the telephone network.
+--
+-- 'oneClickPinDelay', 'pSTNDialIn_oneClickPinDelay' - The delay duration before Alexa enters the conference pin with dual-tone
+-- multi-frequency (DTMF). Each number on the dial pad corresponds to a
+-- DTMF tone, which is how we send data over the telephone network.
+newPSTNDialIn ::
+  -- | 'countryCode'
+  Prelude.Text ->
+  -- | 'phoneNumber'
+  Prelude.Text ->
+  -- | 'oneClickIdDelay'
+  Prelude.Text ->
+  -- | 'oneClickPinDelay'
+  Prelude.Text ->
+  PSTNDialIn
+newPSTNDialIn
+  pCountryCode_
+  pPhoneNumber_
+  pOneClickIdDelay_
+  pOneClickPinDelay_ =
+    PSTNDialIn'
+      { countryCode = pCountryCode_,
+        phoneNumber = pPhoneNumber_,
+        oneClickIdDelay = pOneClickIdDelay_,
+        oneClickPinDelay = pOneClickPinDelay_
+      }
+
+-- | The zip code.
+pSTNDialIn_countryCode :: Lens.Lens' PSTNDialIn Prelude.Text
+pSTNDialIn_countryCode = Lens.lens (\PSTNDialIn' {countryCode} -> countryCode) (\s@PSTNDialIn' {} a -> s {countryCode = a} :: PSTNDialIn)
+
+-- | The phone number to call to join the conference.
+pSTNDialIn_phoneNumber :: Lens.Lens' PSTNDialIn Prelude.Text
+pSTNDialIn_phoneNumber = Lens.lens (\PSTNDialIn' {phoneNumber} -> phoneNumber) (\s@PSTNDialIn' {} a -> s {phoneNumber = a} :: PSTNDialIn)
+
+-- | The delay duration before Alexa enters the conference ID with dual-tone
+-- multi-frequency (DTMF). Each number on the dial pad corresponds to a
+-- DTMF tone, which is how we send data over the telephone network.
+pSTNDialIn_oneClickIdDelay :: Lens.Lens' PSTNDialIn Prelude.Text
+pSTNDialIn_oneClickIdDelay = Lens.lens (\PSTNDialIn' {oneClickIdDelay} -> oneClickIdDelay) (\s@PSTNDialIn' {} a -> s {oneClickIdDelay = a} :: PSTNDialIn)
+
+-- | The delay duration before Alexa enters the conference pin with dual-tone
+-- multi-frequency (DTMF). Each number on the dial pad corresponds to a
+-- DTMF tone, which is how we send data over the telephone network.
+pSTNDialIn_oneClickPinDelay :: Lens.Lens' PSTNDialIn Prelude.Text
+pSTNDialIn_oneClickPinDelay = Lens.lens (\PSTNDialIn' {oneClickPinDelay} -> oneClickPinDelay) (\s@PSTNDialIn' {} a -> s {oneClickPinDelay = a} :: PSTNDialIn)
+
+instance Data.FromJSON PSTNDialIn where
+  parseJSON =
+    Data.withObject
+      "PSTNDialIn"
+      ( \x ->
+          PSTNDialIn'
+            Prelude.<$> (x Data..: "CountryCode")
+            Prelude.<*> (x Data..: "PhoneNumber")
+            Prelude.<*> (x Data..: "OneClickIdDelay")
+            Prelude.<*> (x Data..: "OneClickPinDelay")
+      )
+
+instance Prelude.Hashable PSTNDialIn where
+  hashWithSalt _salt PSTNDialIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` countryCode
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` oneClickIdDelay
+      `Prelude.hashWithSalt` oneClickPinDelay
+
+instance Prelude.NFData PSTNDialIn where
+  rnf PSTNDialIn' {..} =
+    Prelude.rnf countryCode
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf oneClickIdDelay
+      `Prelude.seq` Prelude.rnf oneClickPinDelay
+
+instance Data.ToJSON PSTNDialIn where
+  toJSON PSTNDialIn' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("CountryCode" Data..= countryCode),
+            Prelude.Just ("PhoneNumber" Data..= phoneNumber),
+            Prelude.Just
+              ("OneClickIdDelay" Data..= oneClickIdDelay),
+            Prelude.Just
+              ("OneClickPinDelay" Data..= oneClickPinDelay)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/PhoneNumber.hs b/gen/Amazonka/AlexaBusiness/Types/PhoneNumber.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/PhoneNumber.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.PhoneNumber
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.PhoneNumber where
+
+import Amazonka.AlexaBusiness.Types.PhoneNumberType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The phone number for the contact containing the raw number and phone
+-- number type.
+--
+-- /See:/ 'newPhoneNumber' smart constructor.
+data PhoneNumber = PhoneNumber'
+  { -- | The raw value of the phone number.
+    number :: Data.Sensitive Prelude.Text,
+    -- | The type of the phone number.
+    type' :: Data.Sensitive PhoneNumberType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PhoneNumber' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'number', 'phoneNumber_number' - The raw value of the phone number.
+--
+-- 'type'', 'phoneNumber_type' - The type of the phone number.
+newPhoneNumber ::
+  -- | 'number'
+  Prelude.Text ->
+  -- | 'type''
+  PhoneNumberType ->
+  PhoneNumber
+newPhoneNumber pNumber_ pType_ =
+  PhoneNumber'
+    { number =
+        Data._Sensitive Lens.# pNumber_,
+      type' = Data._Sensitive Lens.# pType_
+    }
+
+-- | The raw value of the phone number.
+phoneNumber_number :: Lens.Lens' PhoneNumber Prelude.Text
+phoneNumber_number = Lens.lens (\PhoneNumber' {number} -> number) (\s@PhoneNumber' {} a -> s {number = a} :: PhoneNumber) Prelude.. Data._Sensitive
+
+-- | The type of the phone number.
+phoneNumber_type :: Lens.Lens' PhoneNumber PhoneNumberType
+phoneNumber_type = Lens.lens (\PhoneNumber' {type'} -> type') (\s@PhoneNumber' {} a -> s {type' = a} :: PhoneNumber) Prelude.. Data._Sensitive
+
+instance Data.FromJSON PhoneNumber where
+  parseJSON =
+    Data.withObject
+      "PhoneNumber"
+      ( \x ->
+          PhoneNumber'
+            Prelude.<$> (x Data..: "Number")
+            Prelude.<*> (x Data..: "Type")
+      )
+
+instance Prelude.Hashable PhoneNumber where
+  hashWithSalt _salt PhoneNumber' {..} =
+    _salt
+      `Prelude.hashWithSalt` number
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData PhoneNumber where
+  rnf PhoneNumber' {..} =
+    Prelude.rnf number `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON PhoneNumber where
+  toJSON PhoneNumber' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Number" Data..= number),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/PhoneNumberType.hs b/gen/Amazonka/AlexaBusiness/Types/PhoneNumberType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/PhoneNumberType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.PhoneNumberType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.PhoneNumberType
+  ( PhoneNumberType
+      ( ..,
+        PhoneNumberType_HOME,
+        PhoneNumberType_MOBILE,
+        PhoneNumberType_WORK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PhoneNumberType = PhoneNumberType'
+  { fromPhoneNumberType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PhoneNumberType_HOME :: PhoneNumberType
+pattern PhoneNumberType_HOME = PhoneNumberType' "HOME"
+
+pattern PhoneNumberType_MOBILE :: PhoneNumberType
+pattern PhoneNumberType_MOBILE = PhoneNumberType' "MOBILE"
+
+pattern PhoneNumberType_WORK :: PhoneNumberType
+pattern PhoneNumberType_WORK = PhoneNumberType' "WORK"
+
+{-# COMPLETE
+  PhoneNumberType_HOME,
+  PhoneNumberType_MOBILE,
+  PhoneNumberType_WORK,
+  PhoneNumberType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/Profile.hs b/gen/Amazonka/AlexaBusiness/Types/Profile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Profile.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Profile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Profile where
+
+import Amazonka.AlexaBusiness.Types.DistanceUnit
+import Amazonka.AlexaBusiness.Types.MeetingRoomConfiguration
+import Amazonka.AlexaBusiness.Types.TemperatureUnit
+import Amazonka.AlexaBusiness.Types.WakeWord
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A room profile with attributes.
+--
+-- /See:/ 'newProfile' smart constructor.
+data Profile = Profile'
+  { -- | The address of a room profile.
+    address :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the address book.
+    addressBookArn :: Prelude.Maybe Prelude.Text,
+    -- | Whether data retention of the profile is enabled.
+    dataRetentionOptIn :: Prelude.Maybe Prelude.Bool,
+    -- | The distance unit of a room profile.
+    distanceUnit :: Prelude.Maybe DistanceUnit,
+    -- | Retrieves if the profile is default or not.
+    isDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The locale of a room profile. (This is currently available only to a
+    -- limited preview audience.)
+    locale :: Prelude.Maybe Prelude.Text,
+    -- | The max volume limit of a room profile.
+    maxVolumeLimit :: Prelude.Maybe Prelude.Int,
+    -- | Meeting room settings of a room profile.
+    meetingRoomConfiguration :: Prelude.Maybe MeetingRoomConfiguration,
+    -- | The PSTN setting of a room profile.
+    pSTNEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The ARN of a room profile.
+    profileArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of a room profile.
+    profileName :: Prelude.Maybe Prelude.Text,
+    -- | The setup mode of a room profile.
+    setupModeDisabled :: Prelude.Maybe Prelude.Bool,
+    -- | The temperature unit of a room profile.
+    temperatureUnit :: Prelude.Maybe TemperatureUnit,
+    -- | The time zone of a room profile.
+    timezone :: Prelude.Maybe Prelude.Text,
+    -- | The wake word of a room profile.
+    wakeWord :: Prelude.Maybe WakeWord
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Profile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'profile_address' - The address of a room profile.
+--
+-- 'addressBookArn', 'profile_addressBookArn' - The ARN of the address book.
+--
+-- 'dataRetentionOptIn', 'profile_dataRetentionOptIn' - Whether data retention of the profile is enabled.
+--
+-- 'distanceUnit', 'profile_distanceUnit' - The distance unit of a room profile.
+--
+-- 'isDefault', 'profile_isDefault' - Retrieves if the profile is default or not.
+--
+-- 'locale', 'profile_locale' - The locale of a room profile. (This is currently available only to a
+-- limited preview audience.)
+--
+-- 'maxVolumeLimit', 'profile_maxVolumeLimit' - The max volume limit of a room profile.
+--
+-- 'meetingRoomConfiguration', 'profile_meetingRoomConfiguration' - Meeting room settings of a room profile.
+--
+-- 'pSTNEnabled', 'profile_pSTNEnabled' - The PSTN setting of a room profile.
+--
+-- 'profileArn', 'profile_profileArn' - The ARN of a room profile.
+--
+-- 'profileName', 'profile_profileName' - The name of a room profile.
+--
+-- 'setupModeDisabled', 'profile_setupModeDisabled' - The setup mode of a room profile.
+--
+-- 'temperatureUnit', 'profile_temperatureUnit' - The temperature unit of a room profile.
+--
+-- 'timezone', 'profile_timezone' - The time zone of a room profile.
+--
+-- 'wakeWord', 'profile_wakeWord' - The wake word of a room profile.
+newProfile ::
+  Profile
+newProfile =
+  Profile'
+    { address = Prelude.Nothing,
+      addressBookArn = Prelude.Nothing,
+      dataRetentionOptIn = Prelude.Nothing,
+      distanceUnit = Prelude.Nothing,
+      isDefault = Prelude.Nothing,
+      locale = Prelude.Nothing,
+      maxVolumeLimit = Prelude.Nothing,
+      meetingRoomConfiguration = Prelude.Nothing,
+      pSTNEnabled = Prelude.Nothing,
+      profileArn = Prelude.Nothing,
+      profileName = Prelude.Nothing,
+      setupModeDisabled = Prelude.Nothing,
+      temperatureUnit = Prelude.Nothing,
+      timezone = Prelude.Nothing,
+      wakeWord = Prelude.Nothing
+    }
+
+-- | The address of a room profile.
+profile_address :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_address = Lens.lens (\Profile' {address} -> address) (\s@Profile' {} a -> s {address = a} :: Profile)
+
+-- | The ARN of the address book.
+profile_addressBookArn :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_addressBookArn = Lens.lens (\Profile' {addressBookArn} -> addressBookArn) (\s@Profile' {} a -> s {addressBookArn = a} :: Profile)
+
+-- | Whether data retention of the profile is enabled.
+profile_dataRetentionOptIn :: Lens.Lens' Profile (Prelude.Maybe Prelude.Bool)
+profile_dataRetentionOptIn = Lens.lens (\Profile' {dataRetentionOptIn} -> dataRetentionOptIn) (\s@Profile' {} a -> s {dataRetentionOptIn = a} :: Profile)
+
+-- | The distance unit of a room profile.
+profile_distanceUnit :: Lens.Lens' Profile (Prelude.Maybe DistanceUnit)
+profile_distanceUnit = Lens.lens (\Profile' {distanceUnit} -> distanceUnit) (\s@Profile' {} a -> s {distanceUnit = a} :: Profile)
+
+-- | Retrieves if the profile is default or not.
+profile_isDefault :: Lens.Lens' Profile (Prelude.Maybe Prelude.Bool)
+profile_isDefault = Lens.lens (\Profile' {isDefault} -> isDefault) (\s@Profile' {} a -> s {isDefault = a} :: Profile)
+
+-- | The locale of a room profile. (This is currently available only to a
+-- limited preview audience.)
+profile_locale :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_locale = Lens.lens (\Profile' {locale} -> locale) (\s@Profile' {} a -> s {locale = a} :: Profile)
+
+-- | The max volume limit of a room profile.
+profile_maxVolumeLimit :: Lens.Lens' Profile (Prelude.Maybe Prelude.Int)
+profile_maxVolumeLimit = Lens.lens (\Profile' {maxVolumeLimit} -> maxVolumeLimit) (\s@Profile' {} a -> s {maxVolumeLimit = a} :: Profile)
+
+-- | Meeting room settings of a room profile.
+profile_meetingRoomConfiguration :: Lens.Lens' Profile (Prelude.Maybe MeetingRoomConfiguration)
+profile_meetingRoomConfiguration = Lens.lens (\Profile' {meetingRoomConfiguration} -> meetingRoomConfiguration) (\s@Profile' {} a -> s {meetingRoomConfiguration = a} :: Profile)
+
+-- | The PSTN setting of a room profile.
+profile_pSTNEnabled :: Lens.Lens' Profile (Prelude.Maybe Prelude.Bool)
+profile_pSTNEnabled = Lens.lens (\Profile' {pSTNEnabled} -> pSTNEnabled) (\s@Profile' {} a -> s {pSTNEnabled = a} :: Profile)
+
+-- | The ARN of a room profile.
+profile_profileArn :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_profileArn = Lens.lens (\Profile' {profileArn} -> profileArn) (\s@Profile' {} a -> s {profileArn = a} :: Profile)
+
+-- | The name of a room profile.
+profile_profileName :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_profileName = Lens.lens (\Profile' {profileName} -> profileName) (\s@Profile' {} a -> s {profileName = a} :: Profile)
+
+-- | The setup mode of a room profile.
+profile_setupModeDisabled :: Lens.Lens' Profile (Prelude.Maybe Prelude.Bool)
+profile_setupModeDisabled = Lens.lens (\Profile' {setupModeDisabled} -> setupModeDisabled) (\s@Profile' {} a -> s {setupModeDisabled = a} :: Profile)
+
+-- | The temperature unit of a room profile.
+profile_temperatureUnit :: Lens.Lens' Profile (Prelude.Maybe TemperatureUnit)
+profile_temperatureUnit = Lens.lens (\Profile' {temperatureUnit} -> temperatureUnit) (\s@Profile' {} a -> s {temperatureUnit = a} :: Profile)
+
+-- | The time zone of a room profile.
+profile_timezone :: Lens.Lens' Profile (Prelude.Maybe Prelude.Text)
+profile_timezone = Lens.lens (\Profile' {timezone} -> timezone) (\s@Profile' {} a -> s {timezone = a} :: Profile)
+
+-- | The wake word of a room profile.
+profile_wakeWord :: Lens.Lens' Profile (Prelude.Maybe WakeWord)
+profile_wakeWord = Lens.lens (\Profile' {wakeWord} -> wakeWord) (\s@Profile' {} a -> s {wakeWord = a} :: Profile)
+
+instance Data.FromJSON Profile where
+  parseJSON =
+    Data.withObject
+      "Profile"
+      ( \x ->
+          Profile'
+            Prelude.<$> (x Data..:? "Address")
+            Prelude.<*> (x Data..:? "AddressBookArn")
+            Prelude.<*> (x Data..:? "DataRetentionOptIn")
+            Prelude.<*> (x Data..:? "DistanceUnit")
+            Prelude.<*> (x Data..:? "IsDefault")
+            Prelude.<*> (x Data..:? "Locale")
+            Prelude.<*> (x Data..:? "MaxVolumeLimit")
+            Prelude.<*> (x Data..:? "MeetingRoomConfiguration")
+            Prelude.<*> (x Data..:? "PSTNEnabled")
+            Prelude.<*> (x Data..:? "ProfileArn")
+            Prelude.<*> (x Data..:? "ProfileName")
+            Prelude.<*> (x Data..:? "SetupModeDisabled")
+            Prelude.<*> (x Data..:? "TemperatureUnit")
+            Prelude.<*> (x Data..:? "Timezone")
+            Prelude.<*> (x Data..:? "WakeWord")
+      )
+
+instance Prelude.Hashable Profile where
+  hashWithSalt _salt Profile' {..} =
+    _salt
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` addressBookArn
+      `Prelude.hashWithSalt` dataRetentionOptIn
+      `Prelude.hashWithSalt` distanceUnit
+      `Prelude.hashWithSalt` isDefault
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` maxVolumeLimit
+      `Prelude.hashWithSalt` meetingRoomConfiguration
+      `Prelude.hashWithSalt` pSTNEnabled
+      `Prelude.hashWithSalt` profileArn
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` setupModeDisabled
+      `Prelude.hashWithSalt` temperatureUnit
+      `Prelude.hashWithSalt` timezone
+      `Prelude.hashWithSalt` wakeWord
+
+instance Prelude.NFData Profile where
+  rnf Profile' {..} =
+    Prelude.rnf address
+      `Prelude.seq` Prelude.rnf addressBookArn
+      `Prelude.seq` Prelude.rnf dataRetentionOptIn
+      `Prelude.seq` Prelude.rnf distanceUnit
+      `Prelude.seq` Prelude.rnf isDefault
+      `Prelude.seq` Prelude.rnf locale
+      `Prelude.seq` Prelude.rnf maxVolumeLimit
+      `Prelude.seq` Prelude.rnf meetingRoomConfiguration
+      `Prelude.seq` Prelude.rnf pSTNEnabled
+      `Prelude.seq` Prelude.rnf profileArn
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf setupModeDisabled
+      `Prelude.seq` Prelude.rnf temperatureUnit
+      `Prelude.seq` Prelude.rnf timezone
+      `Prelude.seq` Prelude.rnf wakeWord
diff --git a/gen/Amazonka/AlexaBusiness/Types/ProfileData.hs b/gen/Amazonka/AlexaBusiness/Types/ProfileData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/ProfileData.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.ProfileData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.ProfileData where
+
+import Amazonka.AlexaBusiness.Types.DistanceUnit
+import Amazonka.AlexaBusiness.Types.TemperatureUnit
+import Amazonka.AlexaBusiness.Types.WakeWord
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The data of a room profile.
+--
+-- /See:/ 'newProfileData' smart constructor.
+data ProfileData = ProfileData'
+  { -- | The address of a room profile.
+    address :: Prelude.Maybe Prelude.Text,
+    -- | The distance unit of a room profile.
+    distanceUnit :: Prelude.Maybe DistanceUnit,
+    -- | Retrieves if the profile data is default or not.
+    isDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The locale of a room profile. (This is currently available only to a
+    -- limited preview audience.)
+    locale :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a room profile.
+    profileArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of a room profile.
+    profileName :: Prelude.Maybe Prelude.Text,
+    -- | The temperature unit of a room profile.
+    temperatureUnit :: Prelude.Maybe TemperatureUnit,
+    -- | The time zone of a room profile.
+    timezone :: Prelude.Maybe Prelude.Text,
+    -- | The wake word of a room profile.
+    wakeWord :: Prelude.Maybe WakeWord
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProfileData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'profileData_address' - The address of a room profile.
+--
+-- 'distanceUnit', 'profileData_distanceUnit' - The distance unit of a room profile.
+--
+-- 'isDefault', 'profileData_isDefault' - Retrieves if the profile data is default or not.
+--
+-- 'locale', 'profileData_locale' - The locale of a room profile. (This is currently available only to a
+-- limited preview audience.)
+--
+-- 'profileArn', 'profileData_profileArn' - The ARN of a room profile.
+--
+-- 'profileName', 'profileData_profileName' - The name of a room profile.
+--
+-- 'temperatureUnit', 'profileData_temperatureUnit' - The temperature unit of a room profile.
+--
+-- 'timezone', 'profileData_timezone' - The time zone of a room profile.
+--
+-- 'wakeWord', 'profileData_wakeWord' - The wake word of a room profile.
+newProfileData ::
+  ProfileData
+newProfileData =
+  ProfileData'
+    { address = Prelude.Nothing,
+      distanceUnit = Prelude.Nothing,
+      isDefault = Prelude.Nothing,
+      locale = Prelude.Nothing,
+      profileArn = Prelude.Nothing,
+      profileName = Prelude.Nothing,
+      temperatureUnit = Prelude.Nothing,
+      timezone = Prelude.Nothing,
+      wakeWord = Prelude.Nothing
+    }
+
+-- | The address of a room profile.
+profileData_address :: Lens.Lens' ProfileData (Prelude.Maybe Prelude.Text)
+profileData_address = Lens.lens (\ProfileData' {address} -> address) (\s@ProfileData' {} a -> s {address = a} :: ProfileData)
+
+-- | The distance unit of a room profile.
+profileData_distanceUnit :: Lens.Lens' ProfileData (Prelude.Maybe DistanceUnit)
+profileData_distanceUnit = Lens.lens (\ProfileData' {distanceUnit} -> distanceUnit) (\s@ProfileData' {} a -> s {distanceUnit = a} :: ProfileData)
+
+-- | Retrieves if the profile data is default or not.
+profileData_isDefault :: Lens.Lens' ProfileData (Prelude.Maybe Prelude.Bool)
+profileData_isDefault = Lens.lens (\ProfileData' {isDefault} -> isDefault) (\s@ProfileData' {} a -> s {isDefault = a} :: ProfileData)
+
+-- | The locale of a room profile. (This is currently available only to a
+-- limited preview audience.)
+profileData_locale :: Lens.Lens' ProfileData (Prelude.Maybe Prelude.Text)
+profileData_locale = Lens.lens (\ProfileData' {locale} -> locale) (\s@ProfileData' {} a -> s {locale = a} :: ProfileData)
+
+-- | The ARN of a room profile.
+profileData_profileArn :: Lens.Lens' ProfileData (Prelude.Maybe Prelude.Text)
+profileData_profileArn = Lens.lens (\ProfileData' {profileArn} -> profileArn) (\s@ProfileData' {} a -> s {profileArn = a} :: ProfileData)
+
+-- | The name of a room profile.
+profileData_profileName :: Lens.Lens' ProfileData (Prelude.Maybe Prelude.Text)
+profileData_profileName = Lens.lens (\ProfileData' {profileName} -> profileName) (\s@ProfileData' {} a -> s {profileName = a} :: ProfileData)
+
+-- | The temperature unit of a room profile.
+profileData_temperatureUnit :: Lens.Lens' ProfileData (Prelude.Maybe TemperatureUnit)
+profileData_temperatureUnit = Lens.lens (\ProfileData' {temperatureUnit} -> temperatureUnit) (\s@ProfileData' {} a -> s {temperatureUnit = a} :: ProfileData)
+
+-- | The time zone of a room profile.
+profileData_timezone :: Lens.Lens' ProfileData (Prelude.Maybe Prelude.Text)
+profileData_timezone = Lens.lens (\ProfileData' {timezone} -> timezone) (\s@ProfileData' {} a -> s {timezone = a} :: ProfileData)
+
+-- | The wake word of a room profile.
+profileData_wakeWord :: Lens.Lens' ProfileData (Prelude.Maybe WakeWord)
+profileData_wakeWord = Lens.lens (\ProfileData' {wakeWord} -> wakeWord) (\s@ProfileData' {} a -> s {wakeWord = a} :: ProfileData)
+
+instance Data.FromJSON ProfileData where
+  parseJSON =
+    Data.withObject
+      "ProfileData"
+      ( \x ->
+          ProfileData'
+            Prelude.<$> (x Data..:? "Address")
+            Prelude.<*> (x Data..:? "DistanceUnit")
+            Prelude.<*> (x Data..:? "IsDefault")
+            Prelude.<*> (x Data..:? "Locale")
+            Prelude.<*> (x Data..:? "ProfileArn")
+            Prelude.<*> (x Data..:? "ProfileName")
+            Prelude.<*> (x Data..:? "TemperatureUnit")
+            Prelude.<*> (x Data..:? "Timezone")
+            Prelude.<*> (x Data..:? "WakeWord")
+      )
+
+instance Prelude.Hashable ProfileData where
+  hashWithSalt _salt ProfileData' {..} =
+    _salt
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` distanceUnit
+      `Prelude.hashWithSalt` isDefault
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` profileArn
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` temperatureUnit
+      `Prelude.hashWithSalt` timezone
+      `Prelude.hashWithSalt` wakeWord
+
+instance Prelude.NFData ProfileData where
+  rnf ProfileData' {..} =
+    Prelude.rnf address
+      `Prelude.seq` Prelude.rnf distanceUnit
+      `Prelude.seq` Prelude.rnf isDefault
+      `Prelude.seq` Prelude.rnf locale
+      `Prelude.seq` Prelude.rnf profileArn
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf temperatureUnit
+      `Prelude.seq` Prelude.rnf timezone
+      `Prelude.seq` Prelude.rnf wakeWord
diff --git a/gen/Amazonka/AlexaBusiness/Types/RequireCheckIn.hs b/gen/Amazonka/AlexaBusiness/Types/RequireCheckIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/RequireCheckIn.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.RequireCheckIn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.RequireCheckIn where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Settings for the require check in feature that are applied to a room
+-- profile. Require check in allows a meeting room’s Alexa or AVS device to
+-- prompt the user to check in; otherwise, the room will be released.
+--
+-- /See:/ 'newRequireCheckIn' smart constructor.
+data RequireCheckIn = RequireCheckIn'
+  { -- | Whether require check in is enabled or not.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | Duration between 5 and 20 minutes to determine when to release the room
+    -- if it\'s not checked into.
+    releaseAfterMinutes :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequireCheckIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'requireCheckIn_enabled' - Whether require check in is enabled or not.
+--
+-- 'releaseAfterMinutes', 'requireCheckIn_releaseAfterMinutes' - Duration between 5 and 20 minutes to determine when to release the room
+-- if it\'s not checked into.
+newRequireCheckIn ::
+  RequireCheckIn
+newRequireCheckIn =
+  RequireCheckIn'
+    { enabled = Prelude.Nothing,
+      releaseAfterMinutes = Prelude.Nothing
+    }
+
+-- | Whether require check in is enabled or not.
+requireCheckIn_enabled :: Lens.Lens' RequireCheckIn (Prelude.Maybe Prelude.Bool)
+requireCheckIn_enabled = Lens.lens (\RequireCheckIn' {enabled} -> enabled) (\s@RequireCheckIn' {} a -> s {enabled = a} :: RequireCheckIn)
+
+-- | Duration between 5 and 20 minutes to determine when to release the room
+-- if it\'s not checked into.
+requireCheckIn_releaseAfterMinutes :: Lens.Lens' RequireCheckIn (Prelude.Maybe Prelude.Int)
+requireCheckIn_releaseAfterMinutes = Lens.lens (\RequireCheckIn' {releaseAfterMinutes} -> releaseAfterMinutes) (\s@RequireCheckIn' {} a -> s {releaseAfterMinutes = a} :: RequireCheckIn)
+
+instance Data.FromJSON RequireCheckIn where
+  parseJSON =
+    Data.withObject
+      "RequireCheckIn"
+      ( \x ->
+          RequireCheckIn'
+            Prelude.<$> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "ReleaseAfterMinutes")
+      )
+
+instance Prelude.Hashable RequireCheckIn where
+  hashWithSalt _salt RequireCheckIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` releaseAfterMinutes
+
+instance Prelude.NFData RequireCheckIn where
+  rnf RequireCheckIn' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf releaseAfterMinutes
diff --git a/gen/Amazonka/AlexaBusiness/Types/RequirePin.hs b/gen/Amazonka/AlexaBusiness/Types/RequirePin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/RequirePin.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.RequirePin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.RequirePin
+  ( RequirePin
+      ( ..,
+        RequirePin_NO,
+        RequirePin_OPTIONAL,
+        RequirePin_YES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RequirePin = RequirePin'
+  { fromRequirePin ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RequirePin_NO :: RequirePin
+pattern RequirePin_NO = RequirePin' "NO"
+
+pattern RequirePin_OPTIONAL :: RequirePin
+pattern RequirePin_OPTIONAL = RequirePin' "OPTIONAL"
+
+pattern RequirePin_YES :: RequirePin
+pattern RequirePin_YES = RequirePin' "YES"
+
+{-# COMPLETE
+  RequirePin_NO,
+  RequirePin_OPTIONAL,
+  RequirePin_YES,
+  RequirePin'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/Room.hs b/gen/Amazonka/AlexaBusiness/Types/Room.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Room.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Room
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Room where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A room with attributes.
+--
+-- /See:/ 'newRoom' smart constructor.
+data Room = Room'
+  { -- | The description of a room.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The profile ARN of a room.
+    profileArn :: Prelude.Maybe Prelude.Text,
+    -- | The provider calendar ARN of a room.
+    providerCalendarId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a room.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of a room.
+    roomName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Room' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'room_description' - The description of a room.
+--
+-- 'profileArn', 'room_profileArn' - The profile ARN of a room.
+--
+-- 'providerCalendarId', 'room_providerCalendarId' - The provider calendar ARN of a room.
+--
+-- 'roomArn', 'room_roomArn' - The ARN of a room.
+--
+-- 'roomName', 'room_roomName' - The name of a room.
+newRoom ::
+  Room
+newRoom =
+  Room'
+    { description = Prelude.Nothing,
+      profileArn = Prelude.Nothing,
+      providerCalendarId = Prelude.Nothing,
+      roomArn = Prelude.Nothing,
+      roomName = Prelude.Nothing
+    }
+
+-- | The description of a room.
+room_description :: Lens.Lens' Room (Prelude.Maybe Prelude.Text)
+room_description = Lens.lens (\Room' {description} -> description) (\s@Room' {} a -> s {description = a} :: Room)
+
+-- | The profile ARN of a room.
+room_profileArn :: Lens.Lens' Room (Prelude.Maybe Prelude.Text)
+room_profileArn = Lens.lens (\Room' {profileArn} -> profileArn) (\s@Room' {} a -> s {profileArn = a} :: Room)
+
+-- | The provider calendar ARN of a room.
+room_providerCalendarId :: Lens.Lens' Room (Prelude.Maybe Prelude.Text)
+room_providerCalendarId = Lens.lens (\Room' {providerCalendarId} -> providerCalendarId) (\s@Room' {} a -> s {providerCalendarId = a} :: Room)
+
+-- | The ARN of a room.
+room_roomArn :: Lens.Lens' Room (Prelude.Maybe Prelude.Text)
+room_roomArn = Lens.lens (\Room' {roomArn} -> roomArn) (\s@Room' {} a -> s {roomArn = a} :: Room)
+
+-- | The name of a room.
+room_roomName :: Lens.Lens' Room (Prelude.Maybe Prelude.Text)
+room_roomName = Lens.lens (\Room' {roomName} -> roomName) (\s@Room' {} a -> s {roomName = a} :: Room)
+
+instance Data.FromJSON Room where
+  parseJSON =
+    Data.withObject
+      "Room"
+      ( \x ->
+          Room'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ProfileArn")
+            Prelude.<*> (x Data..:? "ProviderCalendarId")
+            Prelude.<*> (x Data..:? "RoomArn")
+            Prelude.<*> (x Data..:? "RoomName")
+      )
+
+instance Prelude.Hashable Room where
+  hashWithSalt _salt Room' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` profileArn
+      `Prelude.hashWithSalt` providerCalendarId
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` roomName
+
+instance Prelude.NFData Room where
+  rnf Room' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf profileArn
+      `Prelude.seq` Prelude.rnf providerCalendarId
+      `Prelude.seq` Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf roomName
diff --git a/gen/Amazonka/AlexaBusiness/Types/RoomData.hs b/gen/Amazonka/AlexaBusiness/Types/RoomData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/RoomData.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.RoomData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.RoomData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The data of a room.
+--
+-- /See:/ 'newRoomData' smart constructor.
+data RoomData = RoomData'
+  { -- | The description of a room.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The profile ARN of a room.
+    profileArn :: Prelude.Maybe Prelude.Text,
+    -- | The profile name of a room.
+    profileName :: Prelude.Maybe Prelude.Text,
+    -- | The provider calendar ARN of a room.
+    providerCalendarId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a room.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of a room.
+    roomName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RoomData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'roomData_description' - The description of a room.
+--
+-- 'profileArn', 'roomData_profileArn' - The profile ARN of a room.
+--
+-- 'profileName', 'roomData_profileName' - The profile name of a room.
+--
+-- 'providerCalendarId', 'roomData_providerCalendarId' - The provider calendar ARN of a room.
+--
+-- 'roomArn', 'roomData_roomArn' - The ARN of a room.
+--
+-- 'roomName', 'roomData_roomName' - The name of a room.
+newRoomData ::
+  RoomData
+newRoomData =
+  RoomData'
+    { description = Prelude.Nothing,
+      profileArn = Prelude.Nothing,
+      profileName = Prelude.Nothing,
+      providerCalendarId = Prelude.Nothing,
+      roomArn = Prelude.Nothing,
+      roomName = Prelude.Nothing
+    }
+
+-- | The description of a room.
+roomData_description :: Lens.Lens' RoomData (Prelude.Maybe Prelude.Text)
+roomData_description = Lens.lens (\RoomData' {description} -> description) (\s@RoomData' {} a -> s {description = a} :: RoomData)
+
+-- | The profile ARN of a room.
+roomData_profileArn :: Lens.Lens' RoomData (Prelude.Maybe Prelude.Text)
+roomData_profileArn = Lens.lens (\RoomData' {profileArn} -> profileArn) (\s@RoomData' {} a -> s {profileArn = a} :: RoomData)
+
+-- | The profile name of a room.
+roomData_profileName :: Lens.Lens' RoomData (Prelude.Maybe Prelude.Text)
+roomData_profileName = Lens.lens (\RoomData' {profileName} -> profileName) (\s@RoomData' {} a -> s {profileName = a} :: RoomData)
+
+-- | The provider calendar ARN of a room.
+roomData_providerCalendarId :: Lens.Lens' RoomData (Prelude.Maybe Prelude.Text)
+roomData_providerCalendarId = Lens.lens (\RoomData' {providerCalendarId} -> providerCalendarId) (\s@RoomData' {} a -> s {providerCalendarId = a} :: RoomData)
+
+-- | The ARN of a room.
+roomData_roomArn :: Lens.Lens' RoomData (Prelude.Maybe Prelude.Text)
+roomData_roomArn = Lens.lens (\RoomData' {roomArn} -> roomArn) (\s@RoomData' {} a -> s {roomArn = a} :: RoomData)
+
+-- | The name of a room.
+roomData_roomName :: Lens.Lens' RoomData (Prelude.Maybe Prelude.Text)
+roomData_roomName = Lens.lens (\RoomData' {roomName} -> roomName) (\s@RoomData' {} a -> s {roomName = a} :: RoomData)
+
+instance Data.FromJSON RoomData where
+  parseJSON =
+    Data.withObject
+      "RoomData"
+      ( \x ->
+          RoomData'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ProfileArn")
+            Prelude.<*> (x Data..:? "ProfileName")
+            Prelude.<*> (x Data..:? "ProviderCalendarId")
+            Prelude.<*> (x Data..:? "RoomArn")
+            Prelude.<*> (x Data..:? "RoomName")
+      )
+
+instance Prelude.Hashable RoomData where
+  hashWithSalt _salt RoomData' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` profileArn
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` providerCalendarId
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` roomName
+
+instance Prelude.NFData RoomData where
+  rnf RoomData' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf profileArn
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf providerCalendarId
+      `Prelude.seq` Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf roomName
diff --git a/gen/Amazonka/AlexaBusiness/Types/RoomSkillParameter.hs b/gen/Amazonka/AlexaBusiness/Types/RoomSkillParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/RoomSkillParameter.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.RoomSkillParameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.RoomSkillParameter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A skill parameter associated with a room.
+--
+-- /See:/ 'newRoomSkillParameter' smart constructor.
+data RoomSkillParameter = RoomSkillParameter'
+  { -- | The parameter key of a room skill parameter. ParameterKey is an
+    -- enumerated type that only takes “DEFAULT” or “SCOPE” as valid values.
+    parameterKey :: Prelude.Text,
+    -- | The parameter value of a room skill parameter.
+    parameterValue :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RoomSkillParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'parameterKey', 'roomSkillParameter_parameterKey' - The parameter key of a room skill parameter. ParameterKey is an
+-- enumerated type that only takes “DEFAULT” or “SCOPE” as valid values.
+--
+-- 'parameterValue', 'roomSkillParameter_parameterValue' - The parameter value of a room skill parameter.
+newRoomSkillParameter ::
+  -- | 'parameterKey'
+  Prelude.Text ->
+  -- | 'parameterValue'
+  Prelude.Text ->
+  RoomSkillParameter
+newRoomSkillParameter pParameterKey_ pParameterValue_ =
+  RoomSkillParameter'
+    { parameterKey = pParameterKey_,
+      parameterValue = pParameterValue_
+    }
+
+-- | The parameter key of a room skill parameter. ParameterKey is an
+-- enumerated type that only takes “DEFAULT” or “SCOPE” as valid values.
+roomSkillParameter_parameterKey :: Lens.Lens' RoomSkillParameter Prelude.Text
+roomSkillParameter_parameterKey = Lens.lens (\RoomSkillParameter' {parameterKey} -> parameterKey) (\s@RoomSkillParameter' {} a -> s {parameterKey = a} :: RoomSkillParameter)
+
+-- | The parameter value of a room skill parameter.
+roomSkillParameter_parameterValue :: Lens.Lens' RoomSkillParameter Prelude.Text
+roomSkillParameter_parameterValue = Lens.lens (\RoomSkillParameter' {parameterValue} -> parameterValue) (\s@RoomSkillParameter' {} a -> s {parameterValue = a} :: RoomSkillParameter)
+
+instance Data.FromJSON RoomSkillParameter where
+  parseJSON =
+    Data.withObject
+      "RoomSkillParameter"
+      ( \x ->
+          RoomSkillParameter'
+            Prelude.<$> (x Data..: "ParameterKey")
+            Prelude.<*> (x Data..: "ParameterValue")
+      )
+
+instance Prelude.Hashable RoomSkillParameter where
+  hashWithSalt _salt RoomSkillParameter' {..} =
+    _salt
+      `Prelude.hashWithSalt` parameterKey
+      `Prelude.hashWithSalt` parameterValue
+
+instance Prelude.NFData RoomSkillParameter where
+  rnf RoomSkillParameter' {..} =
+    Prelude.rnf parameterKey
+      `Prelude.seq` Prelude.rnf parameterValue
+
+instance Data.ToJSON RoomSkillParameter where
+  toJSON RoomSkillParameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ParameterKey" Data..= parameterKey),
+            Prelude.Just
+              ("ParameterValue" Data..= parameterValue)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/SipAddress.hs b/gen/Amazonka/AlexaBusiness/Types/SipAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SipAddress.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SipAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SipAddress where
+
+import Amazonka.AlexaBusiness.Types.SipType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The SIP address for the contact containing the URI and SIP address type.
+--
+-- /See:/ 'newSipAddress' smart constructor.
+data SipAddress = SipAddress'
+  { -- | The URI for the SIP address.
+    uri :: Data.Sensitive Prelude.Text,
+    -- | The type of the SIP address.
+    type' :: Data.Sensitive SipType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SipAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'uri', 'sipAddress_uri' - The URI for the SIP address.
+--
+-- 'type'', 'sipAddress_type' - The type of the SIP address.
+newSipAddress ::
+  -- | 'uri'
+  Prelude.Text ->
+  -- | 'type''
+  SipType ->
+  SipAddress
+newSipAddress pUri_ pType_ =
+  SipAddress'
+    { uri = Data._Sensitive Lens.# pUri_,
+      type' = Data._Sensitive Lens.# pType_
+    }
+
+-- | The URI for the SIP address.
+sipAddress_uri :: Lens.Lens' SipAddress Prelude.Text
+sipAddress_uri = Lens.lens (\SipAddress' {uri} -> uri) (\s@SipAddress' {} a -> s {uri = a} :: SipAddress) Prelude.. Data._Sensitive
+
+-- | The type of the SIP address.
+sipAddress_type :: Lens.Lens' SipAddress SipType
+sipAddress_type = Lens.lens (\SipAddress' {type'} -> type') (\s@SipAddress' {} a -> s {type' = a} :: SipAddress) Prelude.. Data._Sensitive
+
+instance Data.FromJSON SipAddress where
+  parseJSON =
+    Data.withObject
+      "SipAddress"
+      ( \x ->
+          SipAddress'
+            Prelude.<$> (x Data..: "Uri")
+            Prelude.<*> (x Data..: "Type")
+      )
+
+instance Prelude.Hashable SipAddress where
+  hashWithSalt _salt SipAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` uri
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SipAddress where
+  rnf SipAddress' {..} =
+    Prelude.rnf uri `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON SipAddress where
+  toJSON SipAddress' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Uri" Data..= uri),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/SipType.hs b/gen/Amazonka/AlexaBusiness/Types/SipType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SipType.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SipType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SipType
+  ( SipType
+      ( ..,
+        SipType_WORK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SipType = SipType' {fromSipType :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SipType_WORK :: SipType
+pattern SipType_WORK = SipType' "WORK"
+
+{-# COMPLETE
+  SipType_WORK,
+  SipType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/SkillDetails.hs b/gen/Amazonka/AlexaBusiness/Types/SkillDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SkillDetails.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SkillDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SkillDetails where
+
+import Amazonka.AlexaBusiness.Types.DeveloperInfo
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Granular information about the skill.
+--
+-- /See:/ 'newSkillDetails' smart constructor.
+data SkillDetails = SkillDetails'
+  { -- | The details about what the skill supports organized as bullet points.
+    bulletPoints :: Prelude.Maybe [Prelude.Text],
+    -- | The details about the developer that published the skill.
+    developerInfo :: Prelude.Maybe DeveloperInfo,
+    -- | The URL of the end user license agreement.
+    endUserLicenseAgreement :: Prelude.Maybe Prelude.Text,
+    -- | The generic keywords associated with the skill that can be used to find
+    -- a skill.
+    genericKeywords :: Prelude.Maybe [Prelude.Text],
+    -- | The phrase used to trigger the skill.
+    invocationPhrase :: Prelude.Maybe Prelude.Text,
+    -- | The updates added in bullet points.
+    newInThisVersionBulletPoints' :: Prelude.Maybe [Prelude.Text],
+    -- | The description of the product.
+    productDescription :: Prelude.Maybe Prelude.Text,
+    -- | The date when the skill was released.
+    releaseDate :: Prelude.Maybe Prelude.Text,
+    -- | /This member has been deprecated./
+    --
+    -- The list of reviews for the skill, including Key and Value pair.
+    reviews :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The types of skills.
+    skillTypes :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SkillDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bulletPoints', 'skillDetails_bulletPoints' - The details about what the skill supports organized as bullet points.
+--
+-- 'developerInfo', 'skillDetails_developerInfo' - The details about the developer that published the skill.
+--
+-- 'endUserLicenseAgreement', 'skillDetails_endUserLicenseAgreement' - The URL of the end user license agreement.
+--
+-- 'genericKeywords', 'skillDetails_genericKeywords' - The generic keywords associated with the skill that can be used to find
+-- a skill.
+--
+-- 'invocationPhrase', 'skillDetails_invocationPhrase' - The phrase used to trigger the skill.
+--
+-- 'newInThisVersionBulletPoints'', 'skillDetails_newInThisVersionBulletPoints' - The updates added in bullet points.
+--
+-- 'productDescription', 'skillDetails_productDescription' - The description of the product.
+--
+-- 'releaseDate', 'skillDetails_releaseDate' - The date when the skill was released.
+--
+-- 'reviews', 'skillDetails_reviews' - /This member has been deprecated./
+--
+-- The list of reviews for the skill, including Key and Value pair.
+--
+-- 'skillTypes', 'skillDetails_skillTypes' - The types of skills.
+newSkillDetails ::
+  SkillDetails
+newSkillDetails =
+  SkillDetails'
+    { bulletPoints = Prelude.Nothing,
+      developerInfo = Prelude.Nothing,
+      endUserLicenseAgreement = Prelude.Nothing,
+      genericKeywords = Prelude.Nothing,
+      invocationPhrase = Prelude.Nothing,
+      newInThisVersionBulletPoints' = Prelude.Nothing,
+      productDescription = Prelude.Nothing,
+      releaseDate = Prelude.Nothing,
+      reviews = Prelude.Nothing,
+      skillTypes = Prelude.Nothing
+    }
+
+-- | The details about what the skill supports organized as bullet points.
+skillDetails_bulletPoints :: Lens.Lens' SkillDetails (Prelude.Maybe [Prelude.Text])
+skillDetails_bulletPoints = Lens.lens (\SkillDetails' {bulletPoints} -> bulletPoints) (\s@SkillDetails' {} a -> s {bulletPoints = a} :: SkillDetails) Prelude.. Lens.mapping Lens.coerced
+
+-- | The details about the developer that published the skill.
+skillDetails_developerInfo :: Lens.Lens' SkillDetails (Prelude.Maybe DeveloperInfo)
+skillDetails_developerInfo = Lens.lens (\SkillDetails' {developerInfo} -> developerInfo) (\s@SkillDetails' {} a -> s {developerInfo = a} :: SkillDetails)
+
+-- | The URL of the end user license agreement.
+skillDetails_endUserLicenseAgreement :: Lens.Lens' SkillDetails (Prelude.Maybe Prelude.Text)
+skillDetails_endUserLicenseAgreement = Lens.lens (\SkillDetails' {endUserLicenseAgreement} -> endUserLicenseAgreement) (\s@SkillDetails' {} a -> s {endUserLicenseAgreement = a} :: SkillDetails)
+
+-- | The generic keywords associated with the skill that can be used to find
+-- a skill.
+skillDetails_genericKeywords :: Lens.Lens' SkillDetails (Prelude.Maybe [Prelude.Text])
+skillDetails_genericKeywords = Lens.lens (\SkillDetails' {genericKeywords} -> genericKeywords) (\s@SkillDetails' {} a -> s {genericKeywords = a} :: SkillDetails) Prelude.. Lens.mapping Lens.coerced
+
+-- | The phrase used to trigger the skill.
+skillDetails_invocationPhrase :: Lens.Lens' SkillDetails (Prelude.Maybe Prelude.Text)
+skillDetails_invocationPhrase = Lens.lens (\SkillDetails' {invocationPhrase} -> invocationPhrase) (\s@SkillDetails' {} a -> s {invocationPhrase = a} :: SkillDetails)
+
+-- | The updates added in bullet points.
+skillDetails_newInThisVersionBulletPoints :: Lens.Lens' SkillDetails (Prelude.Maybe [Prelude.Text])
+skillDetails_newInThisVersionBulletPoints = Lens.lens (\SkillDetails' {newInThisVersionBulletPoints'} -> newInThisVersionBulletPoints') (\s@SkillDetails' {} a -> s {newInThisVersionBulletPoints' = a} :: SkillDetails) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the product.
+skillDetails_productDescription :: Lens.Lens' SkillDetails (Prelude.Maybe Prelude.Text)
+skillDetails_productDescription = Lens.lens (\SkillDetails' {productDescription} -> productDescription) (\s@SkillDetails' {} a -> s {productDescription = a} :: SkillDetails)
+
+-- | The date when the skill was released.
+skillDetails_releaseDate :: Lens.Lens' SkillDetails (Prelude.Maybe Prelude.Text)
+skillDetails_releaseDate = Lens.lens (\SkillDetails' {releaseDate} -> releaseDate) (\s@SkillDetails' {} a -> s {releaseDate = a} :: SkillDetails)
+
+-- | /This member has been deprecated./
+--
+-- The list of reviews for the skill, including Key and Value pair.
+skillDetails_reviews :: Lens.Lens' SkillDetails (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+skillDetails_reviews = Lens.lens (\SkillDetails' {reviews} -> reviews) (\s@SkillDetails' {} a -> s {reviews = a} :: SkillDetails) Prelude.. Lens.mapping Lens.coerced
+
+-- | The types of skills.
+skillDetails_skillTypes :: Lens.Lens' SkillDetails (Prelude.Maybe [Prelude.Text])
+skillDetails_skillTypes = Lens.lens (\SkillDetails' {skillTypes} -> skillTypes) (\s@SkillDetails' {} a -> s {skillTypes = a} :: SkillDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SkillDetails where
+  parseJSON =
+    Data.withObject
+      "SkillDetails"
+      ( \x ->
+          SkillDetails'
+            Prelude.<$> (x Data..:? "BulletPoints" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "DeveloperInfo")
+            Prelude.<*> (x Data..:? "EndUserLicenseAgreement")
+            Prelude.<*> ( x
+                            Data..:? "GenericKeywords"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "InvocationPhrase")
+            Prelude.<*> ( x
+                            Data..:? "NewInThisVersionBulletPoints"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "ProductDescription")
+            Prelude.<*> (x Data..:? "ReleaseDate")
+            Prelude.<*> (x Data..:? "Reviews" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "SkillTypes" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SkillDetails where
+  hashWithSalt _salt SkillDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` bulletPoints
+      `Prelude.hashWithSalt` developerInfo
+      `Prelude.hashWithSalt` endUserLicenseAgreement
+      `Prelude.hashWithSalt` genericKeywords
+      `Prelude.hashWithSalt` invocationPhrase
+      `Prelude.hashWithSalt` newInThisVersionBulletPoints'
+      `Prelude.hashWithSalt` productDescription
+      `Prelude.hashWithSalt` releaseDate
+      `Prelude.hashWithSalt` reviews
+      `Prelude.hashWithSalt` skillTypes
+
+instance Prelude.NFData SkillDetails where
+  rnf SkillDetails' {..} =
+    Prelude.rnf bulletPoints
+      `Prelude.seq` Prelude.rnf developerInfo
+      `Prelude.seq` Prelude.rnf endUserLicenseAgreement
+      `Prelude.seq` Prelude.rnf genericKeywords
+      `Prelude.seq` Prelude.rnf invocationPhrase
+      `Prelude.seq` Prelude.rnf newInThisVersionBulletPoints'
+      `Prelude.seq` Prelude.rnf productDescription
+      `Prelude.seq` Prelude.rnf releaseDate
+      `Prelude.seq` Prelude.rnf reviews
+      `Prelude.seq` Prelude.rnf skillTypes
diff --git a/gen/Amazonka/AlexaBusiness/Types/SkillGroup.hs b/gen/Amazonka/AlexaBusiness/Types/SkillGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SkillGroup.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SkillGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SkillGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A skill group with attributes.
+--
+-- /See:/ 'newSkillGroup' smart constructor.
+data SkillGroup = SkillGroup'
+  { -- | The description of a skill group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a skill group.
+    skillGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of a skill group.
+    skillGroupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SkillGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'skillGroup_description' - The description of a skill group.
+--
+-- 'skillGroupArn', 'skillGroup_skillGroupArn' - The ARN of a skill group.
+--
+-- 'skillGroupName', 'skillGroup_skillGroupName' - The name of a skill group.
+newSkillGroup ::
+  SkillGroup
+newSkillGroup =
+  SkillGroup'
+    { description = Prelude.Nothing,
+      skillGroupArn = Prelude.Nothing,
+      skillGroupName = Prelude.Nothing
+    }
+
+-- | The description of a skill group.
+skillGroup_description :: Lens.Lens' SkillGroup (Prelude.Maybe Prelude.Text)
+skillGroup_description = Lens.lens (\SkillGroup' {description} -> description) (\s@SkillGroup' {} a -> s {description = a} :: SkillGroup)
+
+-- | The ARN of a skill group.
+skillGroup_skillGroupArn :: Lens.Lens' SkillGroup (Prelude.Maybe Prelude.Text)
+skillGroup_skillGroupArn = Lens.lens (\SkillGroup' {skillGroupArn} -> skillGroupArn) (\s@SkillGroup' {} a -> s {skillGroupArn = a} :: SkillGroup)
+
+-- | The name of a skill group.
+skillGroup_skillGroupName :: Lens.Lens' SkillGroup (Prelude.Maybe Prelude.Text)
+skillGroup_skillGroupName = Lens.lens (\SkillGroup' {skillGroupName} -> skillGroupName) (\s@SkillGroup' {} a -> s {skillGroupName = a} :: SkillGroup)
+
+instance Data.FromJSON SkillGroup where
+  parseJSON =
+    Data.withObject
+      "SkillGroup"
+      ( \x ->
+          SkillGroup'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "SkillGroupArn")
+            Prelude.<*> (x Data..:? "SkillGroupName")
+      )
+
+instance Prelude.Hashable SkillGroup where
+  hashWithSalt _salt SkillGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` skillGroupArn
+      `Prelude.hashWithSalt` skillGroupName
+
+instance Prelude.NFData SkillGroup where
+  rnf SkillGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf skillGroupArn
+      `Prelude.seq` Prelude.rnf skillGroupName
diff --git a/gen/Amazonka/AlexaBusiness/Types/SkillGroupData.hs b/gen/Amazonka/AlexaBusiness/Types/SkillGroupData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SkillGroupData.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SkillGroupData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SkillGroupData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The attributes of a skill group.
+--
+-- /See:/ 'newSkillGroupData' smart constructor.
+data SkillGroupData = SkillGroupData'
+  { -- | The description of a skill group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The skill group ARN of a skill group.
+    skillGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The skill group name of a skill group.
+    skillGroupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SkillGroupData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'skillGroupData_description' - The description of a skill group.
+--
+-- 'skillGroupArn', 'skillGroupData_skillGroupArn' - The skill group ARN of a skill group.
+--
+-- 'skillGroupName', 'skillGroupData_skillGroupName' - The skill group name of a skill group.
+newSkillGroupData ::
+  SkillGroupData
+newSkillGroupData =
+  SkillGroupData'
+    { description = Prelude.Nothing,
+      skillGroupArn = Prelude.Nothing,
+      skillGroupName = Prelude.Nothing
+    }
+
+-- | The description of a skill group.
+skillGroupData_description :: Lens.Lens' SkillGroupData (Prelude.Maybe Prelude.Text)
+skillGroupData_description = Lens.lens (\SkillGroupData' {description} -> description) (\s@SkillGroupData' {} a -> s {description = a} :: SkillGroupData)
+
+-- | The skill group ARN of a skill group.
+skillGroupData_skillGroupArn :: Lens.Lens' SkillGroupData (Prelude.Maybe Prelude.Text)
+skillGroupData_skillGroupArn = Lens.lens (\SkillGroupData' {skillGroupArn} -> skillGroupArn) (\s@SkillGroupData' {} a -> s {skillGroupArn = a} :: SkillGroupData)
+
+-- | The skill group name of a skill group.
+skillGroupData_skillGroupName :: Lens.Lens' SkillGroupData (Prelude.Maybe Prelude.Text)
+skillGroupData_skillGroupName = Lens.lens (\SkillGroupData' {skillGroupName} -> skillGroupName) (\s@SkillGroupData' {} a -> s {skillGroupName = a} :: SkillGroupData)
+
+instance Data.FromJSON SkillGroupData where
+  parseJSON =
+    Data.withObject
+      "SkillGroupData"
+      ( \x ->
+          SkillGroupData'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "SkillGroupArn")
+            Prelude.<*> (x Data..:? "SkillGroupName")
+      )
+
+instance Prelude.Hashable SkillGroupData where
+  hashWithSalt _salt SkillGroupData' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` skillGroupArn
+      `Prelude.hashWithSalt` skillGroupName
+
+instance Prelude.NFData SkillGroupData where
+  rnf SkillGroupData' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf skillGroupArn
+      `Prelude.seq` Prelude.rnf skillGroupName
diff --git a/gen/Amazonka/AlexaBusiness/Types/SkillSummary.hs b/gen/Amazonka/AlexaBusiness/Types/SkillSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SkillSummary.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SkillSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SkillSummary where
+
+import Amazonka.AlexaBusiness.Types.EnablementType
+import Amazonka.AlexaBusiness.Types.SkillType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The summary of skills.
+--
+-- /See:/ 'newSkillSummary' smart constructor.
+data SkillSummary = SkillSummary'
+  { -- | Whether the skill is enabled under the user\'s account, or if it
+    -- requires linking to be used.
+    enablementType :: Prelude.Maybe EnablementType,
+    -- | The ARN of the skill summary.
+    skillId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the skill.
+    skillName :: Prelude.Maybe Prelude.Text,
+    -- | Whether the skill is publicly available or is a private skill.
+    skillType :: Prelude.Maybe SkillType,
+    -- | Linking support for a skill.
+    supportsLinking :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SkillSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enablementType', 'skillSummary_enablementType' - Whether the skill is enabled under the user\'s account, or if it
+-- requires linking to be used.
+--
+-- 'skillId', 'skillSummary_skillId' - The ARN of the skill summary.
+--
+-- 'skillName', 'skillSummary_skillName' - The name of the skill.
+--
+-- 'skillType', 'skillSummary_skillType' - Whether the skill is publicly available or is a private skill.
+--
+-- 'supportsLinking', 'skillSummary_supportsLinking' - Linking support for a skill.
+newSkillSummary ::
+  SkillSummary
+newSkillSummary =
+  SkillSummary'
+    { enablementType = Prelude.Nothing,
+      skillId = Prelude.Nothing,
+      skillName = Prelude.Nothing,
+      skillType = Prelude.Nothing,
+      supportsLinking = Prelude.Nothing
+    }
+
+-- | Whether the skill is enabled under the user\'s account, or if it
+-- requires linking to be used.
+skillSummary_enablementType :: Lens.Lens' SkillSummary (Prelude.Maybe EnablementType)
+skillSummary_enablementType = Lens.lens (\SkillSummary' {enablementType} -> enablementType) (\s@SkillSummary' {} a -> s {enablementType = a} :: SkillSummary)
+
+-- | The ARN of the skill summary.
+skillSummary_skillId :: Lens.Lens' SkillSummary (Prelude.Maybe Prelude.Text)
+skillSummary_skillId = Lens.lens (\SkillSummary' {skillId} -> skillId) (\s@SkillSummary' {} a -> s {skillId = a} :: SkillSummary)
+
+-- | The name of the skill.
+skillSummary_skillName :: Lens.Lens' SkillSummary (Prelude.Maybe Prelude.Text)
+skillSummary_skillName = Lens.lens (\SkillSummary' {skillName} -> skillName) (\s@SkillSummary' {} a -> s {skillName = a} :: SkillSummary)
+
+-- | Whether the skill is publicly available or is a private skill.
+skillSummary_skillType :: Lens.Lens' SkillSummary (Prelude.Maybe SkillType)
+skillSummary_skillType = Lens.lens (\SkillSummary' {skillType} -> skillType) (\s@SkillSummary' {} a -> s {skillType = a} :: SkillSummary)
+
+-- | Linking support for a skill.
+skillSummary_supportsLinking :: Lens.Lens' SkillSummary (Prelude.Maybe Prelude.Bool)
+skillSummary_supportsLinking = Lens.lens (\SkillSummary' {supportsLinking} -> supportsLinking) (\s@SkillSummary' {} a -> s {supportsLinking = a} :: SkillSummary)
+
+instance Data.FromJSON SkillSummary where
+  parseJSON =
+    Data.withObject
+      "SkillSummary"
+      ( \x ->
+          SkillSummary'
+            Prelude.<$> (x Data..:? "EnablementType")
+            Prelude.<*> (x Data..:? "SkillId")
+            Prelude.<*> (x Data..:? "SkillName")
+            Prelude.<*> (x Data..:? "SkillType")
+            Prelude.<*> (x Data..:? "SupportsLinking")
+      )
+
+instance Prelude.Hashable SkillSummary where
+  hashWithSalt _salt SkillSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` enablementType
+      `Prelude.hashWithSalt` skillId
+      `Prelude.hashWithSalt` skillName
+      `Prelude.hashWithSalt` skillType
+      `Prelude.hashWithSalt` supportsLinking
+
+instance Prelude.NFData SkillSummary where
+  rnf SkillSummary' {..} =
+    Prelude.rnf enablementType
+      `Prelude.seq` Prelude.rnf skillId
+      `Prelude.seq` Prelude.rnf skillName
+      `Prelude.seq` Prelude.rnf skillType
+      `Prelude.seq` Prelude.rnf supportsLinking
diff --git a/gen/Amazonka/AlexaBusiness/Types/SkillType.hs b/gen/Amazonka/AlexaBusiness/Types/SkillType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SkillType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SkillType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SkillType
+  ( SkillType
+      ( ..,
+        SkillType_PRIVATE,
+        SkillType_PUBLIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SkillType = SkillType'
+  { fromSkillType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SkillType_PRIVATE :: SkillType
+pattern SkillType_PRIVATE = SkillType' "PRIVATE"
+
+pattern SkillType_PUBLIC :: SkillType
+pattern SkillType_PUBLIC = SkillType' "PUBLIC"
+
+{-# COMPLETE
+  SkillType_PRIVATE,
+  SkillType_PUBLIC,
+  SkillType'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/SkillTypeFilter.hs b/gen/Amazonka/AlexaBusiness/Types/SkillTypeFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SkillTypeFilter.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SkillTypeFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SkillTypeFilter
+  ( SkillTypeFilter
+      ( ..,
+        SkillTypeFilter_ALL,
+        SkillTypeFilter_PRIVATE,
+        SkillTypeFilter_PUBLIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SkillTypeFilter = SkillTypeFilter'
+  { fromSkillTypeFilter ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SkillTypeFilter_ALL :: SkillTypeFilter
+pattern SkillTypeFilter_ALL = SkillTypeFilter' "ALL"
+
+pattern SkillTypeFilter_PRIVATE :: SkillTypeFilter
+pattern SkillTypeFilter_PRIVATE = SkillTypeFilter' "PRIVATE"
+
+pattern SkillTypeFilter_PUBLIC :: SkillTypeFilter
+pattern SkillTypeFilter_PUBLIC = SkillTypeFilter' "PUBLIC"
+
+{-# COMPLETE
+  SkillTypeFilter_ALL,
+  SkillTypeFilter_PRIVATE,
+  SkillTypeFilter_PUBLIC,
+  SkillTypeFilter'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/SkillsStoreSkill.hs b/gen/Amazonka/AlexaBusiness/Types/SkillsStoreSkill.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SkillsStoreSkill.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SkillsStoreSkill
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SkillsStoreSkill where
+
+import Amazonka.AlexaBusiness.Types.SkillDetails
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The detailed information about an Alexa skill.
+--
+-- /See:/ 'newSkillsStoreSkill' smart constructor.
+data SkillsStoreSkill = SkillsStoreSkill'
+  { -- | The URL where the skill icon resides.
+    iconUrl :: Prelude.Maybe Prelude.Text,
+    -- | Sample utterances that interact with the skill.
+    sampleUtterances :: Prelude.Maybe [Prelude.Text],
+    -- | Short description about the skill.
+    shortDescription :: Prelude.Maybe Prelude.Text,
+    -- | Information about the skill.
+    skillDetails :: Prelude.Maybe SkillDetails,
+    -- | The ARN of the skill.
+    skillId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the skill.
+    skillName :: Prelude.Maybe Prelude.Text,
+    -- | Linking support for a skill.
+    supportsLinking :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SkillsStoreSkill' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iconUrl', 'skillsStoreSkill_iconUrl' - The URL where the skill icon resides.
+--
+-- 'sampleUtterances', 'skillsStoreSkill_sampleUtterances' - Sample utterances that interact with the skill.
+--
+-- 'shortDescription', 'skillsStoreSkill_shortDescription' - Short description about the skill.
+--
+-- 'skillDetails', 'skillsStoreSkill_skillDetails' - Information about the skill.
+--
+-- 'skillId', 'skillsStoreSkill_skillId' - The ARN of the skill.
+--
+-- 'skillName', 'skillsStoreSkill_skillName' - The name of the skill.
+--
+-- 'supportsLinking', 'skillsStoreSkill_supportsLinking' - Linking support for a skill.
+newSkillsStoreSkill ::
+  SkillsStoreSkill
+newSkillsStoreSkill =
+  SkillsStoreSkill'
+    { iconUrl = Prelude.Nothing,
+      sampleUtterances = Prelude.Nothing,
+      shortDescription = Prelude.Nothing,
+      skillDetails = Prelude.Nothing,
+      skillId = Prelude.Nothing,
+      skillName = Prelude.Nothing,
+      supportsLinking = Prelude.Nothing
+    }
+
+-- | The URL where the skill icon resides.
+skillsStoreSkill_iconUrl :: Lens.Lens' SkillsStoreSkill (Prelude.Maybe Prelude.Text)
+skillsStoreSkill_iconUrl = Lens.lens (\SkillsStoreSkill' {iconUrl} -> iconUrl) (\s@SkillsStoreSkill' {} a -> s {iconUrl = a} :: SkillsStoreSkill)
+
+-- | Sample utterances that interact with the skill.
+skillsStoreSkill_sampleUtterances :: Lens.Lens' SkillsStoreSkill (Prelude.Maybe [Prelude.Text])
+skillsStoreSkill_sampleUtterances = Lens.lens (\SkillsStoreSkill' {sampleUtterances} -> sampleUtterances) (\s@SkillsStoreSkill' {} a -> s {sampleUtterances = a} :: SkillsStoreSkill) Prelude.. Lens.mapping Lens.coerced
+
+-- | Short description about the skill.
+skillsStoreSkill_shortDescription :: Lens.Lens' SkillsStoreSkill (Prelude.Maybe Prelude.Text)
+skillsStoreSkill_shortDescription = Lens.lens (\SkillsStoreSkill' {shortDescription} -> shortDescription) (\s@SkillsStoreSkill' {} a -> s {shortDescription = a} :: SkillsStoreSkill)
+
+-- | Information about the skill.
+skillsStoreSkill_skillDetails :: Lens.Lens' SkillsStoreSkill (Prelude.Maybe SkillDetails)
+skillsStoreSkill_skillDetails = Lens.lens (\SkillsStoreSkill' {skillDetails} -> skillDetails) (\s@SkillsStoreSkill' {} a -> s {skillDetails = a} :: SkillsStoreSkill)
+
+-- | The ARN of the skill.
+skillsStoreSkill_skillId :: Lens.Lens' SkillsStoreSkill (Prelude.Maybe Prelude.Text)
+skillsStoreSkill_skillId = Lens.lens (\SkillsStoreSkill' {skillId} -> skillId) (\s@SkillsStoreSkill' {} a -> s {skillId = a} :: SkillsStoreSkill)
+
+-- | The name of the skill.
+skillsStoreSkill_skillName :: Lens.Lens' SkillsStoreSkill (Prelude.Maybe Prelude.Text)
+skillsStoreSkill_skillName = Lens.lens (\SkillsStoreSkill' {skillName} -> skillName) (\s@SkillsStoreSkill' {} a -> s {skillName = a} :: SkillsStoreSkill)
+
+-- | Linking support for a skill.
+skillsStoreSkill_supportsLinking :: Lens.Lens' SkillsStoreSkill (Prelude.Maybe Prelude.Bool)
+skillsStoreSkill_supportsLinking = Lens.lens (\SkillsStoreSkill' {supportsLinking} -> supportsLinking) (\s@SkillsStoreSkill' {} a -> s {supportsLinking = a} :: SkillsStoreSkill)
+
+instance Data.FromJSON SkillsStoreSkill where
+  parseJSON =
+    Data.withObject
+      "SkillsStoreSkill"
+      ( \x ->
+          SkillsStoreSkill'
+            Prelude.<$> (x Data..:? "IconUrl")
+            Prelude.<*> ( x
+                            Data..:? "SampleUtterances"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "ShortDescription")
+            Prelude.<*> (x Data..:? "SkillDetails")
+            Prelude.<*> (x Data..:? "SkillId")
+            Prelude.<*> (x Data..:? "SkillName")
+            Prelude.<*> (x Data..:? "SupportsLinking")
+      )
+
+instance Prelude.Hashable SkillsStoreSkill where
+  hashWithSalt _salt SkillsStoreSkill' {..} =
+    _salt
+      `Prelude.hashWithSalt` iconUrl
+      `Prelude.hashWithSalt` sampleUtterances
+      `Prelude.hashWithSalt` shortDescription
+      `Prelude.hashWithSalt` skillDetails
+      `Prelude.hashWithSalt` skillId
+      `Prelude.hashWithSalt` skillName
+      `Prelude.hashWithSalt` supportsLinking
+
+instance Prelude.NFData SkillsStoreSkill where
+  rnf SkillsStoreSkill' {..} =
+    Prelude.rnf iconUrl
+      `Prelude.seq` Prelude.rnf sampleUtterances
+      `Prelude.seq` Prelude.rnf shortDescription
+      `Prelude.seq` Prelude.rnf skillDetails
+      `Prelude.seq` Prelude.rnf skillId
+      `Prelude.seq` Prelude.rnf skillName
+      `Prelude.seq` Prelude.rnf supportsLinking
diff --git a/gen/Amazonka/AlexaBusiness/Types/SmartHomeAppliance.hs b/gen/Amazonka/AlexaBusiness/Types/SmartHomeAppliance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SmartHomeAppliance.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SmartHomeAppliance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SmartHomeAppliance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A smart home appliance that can connect to a central system. Any
+-- domestic device can be a smart appliance.
+--
+-- /See:/ 'newSmartHomeAppliance' smart constructor.
+data SmartHomeAppliance = SmartHomeAppliance'
+  { -- | The description of the smart home appliance.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The friendly name of the smart home appliance.
+    friendlyName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the manufacturer of the smart home appliance.
+    manufacturerName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SmartHomeAppliance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'smartHomeAppliance_description' - The description of the smart home appliance.
+--
+-- 'friendlyName', 'smartHomeAppliance_friendlyName' - The friendly name of the smart home appliance.
+--
+-- 'manufacturerName', 'smartHomeAppliance_manufacturerName' - The name of the manufacturer of the smart home appliance.
+newSmartHomeAppliance ::
+  SmartHomeAppliance
+newSmartHomeAppliance =
+  SmartHomeAppliance'
+    { description = Prelude.Nothing,
+      friendlyName = Prelude.Nothing,
+      manufacturerName = Prelude.Nothing
+    }
+
+-- | The description of the smart home appliance.
+smartHomeAppliance_description :: Lens.Lens' SmartHomeAppliance (Prelude.Maybe Prelude.Text)
+smartHomeAppliance_description = Lens.lens (\SmartHomeAppliance' {description} -> description) (\s@SmartHomeAppliance' {} a -> s {description = a} :: SmartHomeAppliance)
+
+-- | The friendly name of the smart home appliance.
+smartHomeAppliance_friendlyName :: Lens.Lens' SmartHomeAppliance (Prelude.Maybe Prelude.Text)
+smartHomeAppliance_friendlyName = Lens.lens (\SmartHomeAppliance' {friendlyName} -> friendlyName) (\s@SmartHomeAppliance' {} a -> s {friendlyName = a} :: SmartHomeAppliance)
+
+-- | The name of the manufacturer of the smart home appliance.
+smartHomeAppliance_manufacturerName :: Lens.Lens' SmartHomeAppliance (Prelude.Maybe Prelude.Text)
+smartHomeAppliance_manufacturerName = Lens.lens (\SmartHomeAppliance' {manufacturerName} -> manufacturerName) (\s@SmartHomeAppliance' {} a -> s {manufacturerName = a} :: SmartHomeAppliance)
+
+instance Data.FromJSON SmartHomeAppliance where
+  parseJSON =
+    Data.withObject
+      "SmartHomeAppliance"
+      ( \x ->
+          SmartHomeAppliance'
+            Prelude.<$> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "FriendlyName")
+            Prelude.<*> (x Data..:? "ManufacturerName")
+      )
+
+instance Prelude.Hashable SmartHomeAppliance where
+  hashWithSalt _salt SmartHomeAppliance' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` friendlyName
+      `Prelude.hashWithSalt` manufacturerName
+
+instance Prelude.NFData SmartHomeAppliance where
+  rnf SmartHomeAppliance' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf friendlyName
+      `Prelude.seq` Prelude.rnf manufacturerName
diff --git a/gen/Amazonka/AlexaBusiness/Types/Sort.hs b/gen/Amazonka/AlexaBusiness/Types/Sort.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Sort.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Sort
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Sort where
+
+import Amazonka.AlexaBusiness.Types.SortValue
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An object representing a sort criteria.
+--
+-- /See:/ 'newSort' smart constructor.
+data Sort = Sort'
+  { -- | The sort key of a sort object.
+    key :: Prelude.Text,
+    -- | The sort value of a sort object.
+    value :: SortValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Sort' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'sort_key' - The sort key of a sort object.
+--
+-- 'value', 'sort_value' - The sort value of a sort object.
+newSort ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  SortValue ->
+  Sort
+newSort pKey_ pValue_ =
+  Sort' {key = pKey_, value = pValue_}
+
+-- | The sort key of a sort object.
+sort_key :: Lens.Lens' Sort Prelude.Text
+sort_key = Lens.lens (\Sort' {key} -> key) (\s@Sort' {} a -> s {key = a} :: Sort)
+
+-- | The sort value of a sort object.
+sort_value :: Lens.Lens' Sort SortValue
+sort_value = Lens.lens (\Sort' {value} -> value) (\s@Sort' {} a -> s {value = a} :: Sort)
+
+instance Prelude.Hashable Sort where
+  hashWithSalt _salt Sort' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Sort where
+  rnf Sort' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Sort where
+  toJSON Sort' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/SortValue.hs b/gen/Amazonka/AlexaBusiness/Types/SortValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/SortValue.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.SortValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.SortValue
+  ( SortValue
+      ( ..,
+        SortValue_ASC,
+        SortValue_DESC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SortValue = SortValue'
+  { fromSortValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SortValue_ASC :: SortValue
+pattern SortValue_ASC = SortValue' "ASC"
+
+pattern SortValue_DESC :: SortValue
+pattern SortValue_DESC = SortValue' "DESC"
+
+{-# COMPLETE
+  SortValue_ASC,
+  SortValue_DESC,
+  SortValue'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/Ssml.hs b/gen/Amazonka/AlexaBusiness/Types/Ssml.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Ssml.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Ssml
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Ssml where
+
+import Amazonka.AlexaBusiness.Types.Locale
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The SSML message. For more information, see
+-- <https://developer.amazon.com/docs/custom-skills/speech-synthesis-markup-language-ssml-reference.html SSML Reference>.
+--
+-- /See:/ 'newSsml' smart constructor.
+data Ssml = Ssml'
+  { -- | The locale of the SSML message. Currently, en-US is supported.
+    locale :: Locale,
+    -- | The value of the SSML message in the correct SSML format. The audio tag
+    -- is not supported.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ssml' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locale', 'ssml_locale' - The locale of the SSML message. Currently, en-US is supported.
+--
+-- 'value', 'ssml_value' - The value of the SSML message in the correct SSML format. The audio tag
+-- is not supported.
+newSsml ::
+  -- | 'locale'
+  Locale ->
+  -- | 'value'
+  Prelude.Text ->
+  Ssml
+newSsml pLocale_ pValue_ =
+  Ssml' {locale = pLocale_, value = pValue_}
+
+-- | The locale of the SSML message. Currently, en-US is supported.
+ssml_locale :: Lens.Lens' Ssml Locale
+ssml_locale = Lens.lens (\Ssml' {locale} -> locale) (\s@Ssml' {} a -> s {locale = a} :: Ssml)
+
+-- | The value of the SSML message in the correct SSML format. The audio tag
+-- is not supported.
+ssml_value :: Lens.Lens' Ssml Prelude.Text
+ssml_value = Lens.lens (\Ssml' {value} -> value) (\s@Ssml' {} a -> s {value = a} :: Ssml)
+
+instance Prelude.Hashable Ssml where
+  hashWithSalt _salt Ssml' {..} =
+    _salt
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Ssml where
+  rnf Ssml' {..} =
+    Prelude.rnf locale `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Ssml where
+  toJSON Ssml' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Locale" Data..= locale),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/Tag.hs b/gen/Amazonka/AlexaBusiness/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/Tag.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A key-value pair that can be associated with a resource.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The key of a tag. Tag keys are case-sensitive.
+    key :: Prelude.Text,
+    -- | The value of a tag. Tag values are case sensitive and can be null.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The key of a tag. Tag keys are case-sensitive.
+--
+-- 'value', 'tag_value' - The value of a tag. Tag values are case sensitive and can be null.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The key of a tag. Tag keys are case-sensitive.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The value of a tag. Tag values are case sensitive and can be null.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/TemperatureUnit.hs b/gen/Amazonka/AlexaBusiness/Types/TemperatureUnit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/TemperatureUnit.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.TemperatureUnit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.TemperatureUnit
+  ( TemperatureUnit
+      ( ..,
+        TemperatureUnit_CELSIUS,
+        TemperatureUnit_FAHRENHEIT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TemperatureUnit = TemperatureUnit'
+  { fromTemperatureUnit ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TemperatureUnit_CELSIUS :: TemperatureUnit
+pattern TemperatureUnit_CELSIUS = TemperatureUnit' "CELSIUS"
+
+pattern TemperatureUnit_FAHRENHEIT :: TemperatureUnit
+pattern TemperatureUnit_FAHRENHEIT = TemperatureUnit' "FAHRENHEIT"
+
+{-# COMPLETE
+  TemperatureUnit_CELSIUS,
+  TemperatureUnit_FAHRENHEIT,
+  TemperatureUnit'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/Types/TextMessage.hs b/gen/Amazonka/AlexaBusiness/Types/TextMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/TextMessage.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.TextMessage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.TextMessage where
+
+import Amazonka.AlexaBusiness.Types.Locale
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The text message.
+--
+-- /See:/ 'newTextMessage' smart constructor.
+data TextMessage = TextMessage'
+  { -- | The locale of the text message. Currently, en-US is supported.
+    locale :: Locale,
+    -- | The value of the text message.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TextMessage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'locale', 'textMessage_locale' - The locale of the text message. Currently, en-US is supported.
+--
+-- 'value', 'textMessage_value' - The value of the text message.
+newTextMessage ::
+  -- | 'locale'
+  Locale ->
+  -- | 'value'
+  Prelude.Text ->
+  TextMessage
+newTextMessage pLocale_ pValue_ =
+  TextMessage' {locale = pLocale_, value = pValue_}
+
+-- | The locale of the text message. Currently, en-US is supported.
+textMessage_locale :: Lens.Lens' TextMessage Locale
+textMessage_locale = Lens.lens (\TextMessage' {locale} -> locale) (\s@TextMessage' {} a -> s {locale = a} :: TextMessage)
+
+-- | The value of the text message.
+textMessage_value :: Lens.Lens' TextMessage Prelude.Text
+textMessage_value = Lens.lens (\TextMessage' {value} -> value) (\s@TextMessage' {} a -> s {value = a} :: TextMessage)
+
+instance Prelude.Hashable TextMessage where
+  hashWithSalt _salt TextMessage' {..} =
+    _salt
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData TextMessage where
+  rnf TextMessage' {..} =
+    Prelude.rnf locale `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON TextMessage where
+  toJSON TextMessage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Locale" Data..= locale),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/UpdateEndOfMeetingReminder.hs b/gen/Amazonka/AlexaBusiness/Types/UpdateEndOfMeetingReminder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/UpdateEndOfMeetingReminder.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.UpdateEndOfMeetingReminder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.UpdateEndOfMeetingReminder where
+
+import Amazonka.AlexaBusiness.Types.EndOfMeetingReminderType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Settings for the end of meeting reminder feature that are applied to a
+-- room profile. The end of meeting reminder enables Alexa to remind users
+-- when a meeting is ending.
+--
+-- /See:/ 'newUpdateEndOfMeetingReminder' smart constructor.
+data UpdateEndOfMeetingReminder = UpdateEndOfMeetingReminder'
+  { -- | Whether an end of meeting reminder is enabled or not.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | Updates settings for the end of meeting reminder feature that are
+    -- applied to a room profile. The end of meeting reminder enables Alexa to
+    -- remind users when a meeting is ending.
+    reminderAtMinutes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Int),
+    -- | The type of sound that users hear during the end of meeting reminder.
+    reminderType :: Prelude.Maybe EndOfMeetingReminderType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEndOfMeetingReminder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'updateEndOfMeetingReminder_enabled' - Whether an end of meeting reminder is enabled or not.
+--
+-- 'reminderAtMinutes', 'updateEndOfMeetingReminder_reminderAtMinutes' - Updates settings for the end of meeting reminder feature that are
+-- applied to a room profile. The end of meeting reminder enables Alexa to
+-- remind users when a meeting is ending.
+--
+-- 'reminderType', 'updateEndOfMeetingReminder_reminderType' - The type of sound that users hear during the end of meeting reminder.
+newUpdateEndOfMeetingReminder ::
+  UpdateEndOfMeetingReminder
+newUpdateEndOfMeetingReminder =
+  UpdateEndOfMeetingReminder'
+    { enabled =
+        Prelude.Nothing,
+      reminderAtMinutes = Prelude.Nothing,
+      reminderType = Prelude.Nothing
+    }
+
+-- | Whether an end of meeting reminder is enabled or not.
+updateEndOfMeetingReminder_enabled :: Lens.Lens' UpdateEndOfMeetingReminder (Prelude.Maybe Prelude.Bool)
+updateEndOfMeetingReminder_enabled = Lens.lens (\UpdateEndOfMeetingReminder' {enabled} -> enabled) (\s@UpdateEndOfMeetingReminder' {} a -> s {enabled = a} :: UpdateEndOfMeetingReminder)
+
+-- | Updates settings for the end of meeting reminder feature that are
+-- applied to a room profile. The end of meeting reminder enables Alexa to
+-- remind users when a meeting is ending.
+updateEndOfMeetingReminder_reminderAtMinutes :: Lens.Lens' UpdateEndOfMeetingReminder (Prelude.Maybe (Prelude.NonEmpty Prelude.Int))
+updateEndOfMeetingReminder_reminderAtMinutes = Lens.lens (\UpdateEndOfMeetingReminder' {reminderAtMinutes} -> reminderAtMinutes) (\s@UpdateEndOfMeetingReminder' {} a -> s {reminderAtMinutes = a} :: UpdateEndOfMeetingReminder) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of sound that users hear during the end of meeting reminder.
+updateEndOfMeetingReminder_reminderType :: Lens.Lens' UpdateEndOfMeetingReminder (Prelude.Maybe EndOfMeetingReminderType)
+updateEndOfMeetingReminder_reminderType = Lens.lens (\UpdateEndOfMeetingReminder' {reminderType} -> reminderType) (\s@UpdateEndOfMeetingReminder' {} a -> s {reminderType = a} :: UpdateEndOfMeetingReminder)
+
+instance Prelude.Hashable UpdateEndOfMeetingReminder where
+  hashWithSalt _salt UpdateEndOfMeetingReminder' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` reminderAtMinutes
+      `Prelude.hashWithSalt` reminderType
+
+instance Prelude.NFData UpdateEndOfMeetingReminder where
+  rnf UpdateEndOfMeetingReminder' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf reminderAtMinutes
+      `Prelude.seq` Prelude.rnf reminderType
+
+instance Data.ToJSON UpdateEndOfMeetingReminder where
+  toJSON UpdateEndOfMeetingReminder' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Enabled" Data..=) Prelude.<$> enabled,
+            ("ReminderAtMinutes" Data..=)
+              Prelude.<$> reminderAtMinutes,
+            ("ReminderType" Data..=) Prelude.<$> reminderType
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/UpdateInstantBooking.hs b/gen/Amazonka/AlexaBusiness/Types/UpdateInstantBooking.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/UpdateInstantBooking.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.UpdateInstantBooking
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.UpdateInstantBooking where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Updates settings for the instant booking feature that are applied to a
+-- room profile. If instant booking is enabled, Alexa automatically
+-- reserves a room if it is free when a user joins a meeting with Alexa.
+--
+-- /See:/ 'newUpdateInstantBooking' smart constructor.
+data UpdateInstantBooking = UpdateInstantBooking'
+  { -- | Duration between 15 and 240 minutes at increments of 15 that determines
+    -- how long to book an available room when a meeting is started with Alexa.
+    durationInMinutes :: Prelude.Maybe Prelude.Int,
+    -- | Whether instant booking is enabled or not.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateInstantBooking' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'durationInMinutes', 'updateInstantBooking_durationInMinutes' - Duration between 15 and 240 minutes at increments of 15 that determines
+-- how long to book an available room when a meeting is started with Alexa.
+--
+-- 'enabled', 'updateInstantBooking_enabled' - Whether instant booking is enabled or not.
+newUpdateInstantBooking ::
+  UpdateInstantBooking
+newUpdateInstantBooking =
+  UpdateInstantBooking'
+    { durationInMinutes =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | Duration between 15 and 240 minutes at increments of 15 that determines
+-- how long to book an available room when a meeting is started with Alexa.
+updateInstantBooking_durationInMinutes :: Lens.Lens' UpdateInstantBooking (Prelude.Maybe Prelude.Int)
+updateInstantBooking_durationInMinutes = Lens.lens (\UpdateInstantBooking' {durationInMinutes} -> durationInMinutes) (\s@UpdateInstantBooking' {} a -> s {durationInMinutes = a} :: UpdateInstantBooking)
+
+-- | Whether instant booking is enabled or not.
+updateInstantBooking_enabled :: Lens.Lens' UpdateInstantBooking (Prelude.Maybe Prelude.Bool)
+updateInstantBooking_enabled = Lens.lens (\UpdateInstantBooking' {enabled} -> enabled) (\s@UpdateInstantBooking' {} a -> s {enabled = a} :: UpdateInstantBooking)
+
+instance Prelude.Hashable UpdateInstantBooking where
+  hashWithSalt _salt UpdateInstantBooking' {..} =
+    _salt
+      `Prelude.hashWithSalt` durationInMinutes
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData UpdateInstantBooking where
+  rnf UpdateInstantBooking' {..} =
+    Prelude.rnf durationInMinutes
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON UpdateInstantBooking where
+  toJSON UpdateInstantBooking' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DurationInMinutes" Data..=)
+              Prelude.<$> durationInMinutes,
+            ("Enabled" Data..=) Prelude.<$> enabled
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/UpdateMeetingRoomConfiguration.hs b/gen/Amazonka/AlexaBusiness/Types/UpdateMeetingRoomConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/UpdateMeetingRoomConfiguration.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.UpdateMeetingRoomConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.UpdateMeetingRoomConfiguration where
+
+import Amazonka.AlexaBusiness.Types.UpdateEndOfMeetingReminder
+import Amazonka.AlexaBusiness.Types.UpdateInstantBooking
+import Amazonka.AlexaBusiness.Types.UpdateRequireCheckIn
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Updates meeting room settings of a room profile.
+--
+-- /See:/ 'newUpdateMeetingRoomConfiguration' smart constructor.
+data UpdateMeetingRoomConfiguration = UpdateMeetingRoomConfiguration'
+  { -- | Settings for the end of meeting reminder feature that are applied to a
+    -- room profile. The end of meeting reminder enables Alexa to remind users
+    -- when a meeting is ending.
+    endOfMeetingReminder :: Prelude.Maybe UpdateEndOfMeetingReminder,
+    -- | Settings to automatically book an available room available for a
+    -- configured duration when joining a meeting with Alexa.
+    instantBooking :: Prelude.Maybe UpdateInstantBooking,
+    -- | Settings for requiring a check in when a room is reserved. Alexa can
+    -- cancel a room reservation if it\'s not checked into to make the room
+    -- available for others. Users can check in by joining the meeting with
+    -- Alexa or an AVS device, or by saying “Alexa, check in.”
+    requireCheckIn :: Prelude.Maybe UpdateRequireCheckIn,
+    -- | Whether room utilization metrics are enabled or not.
+    roomUtilizationMetricsEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMeetingRoomConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endOfMeetingReminder', 'updateMeetingRoomConfiguration_endOfMeetingReminder' - Settings for the end of meeting reminder feature that are applied to a
+-- room profile. The end of meeting reminder enables Alexa to remind users
+-- when a meeting is ending.
+--
+-- 'instantBooking', 'updateMeetingRoomConfiguration_instantBooking' - Settings to automatically book an available room available for a
+-- configured duration when joining a meeting with Alexa.
+--
+-- 'requireCheckIn', 'updateMeetingRoomConfiguration_requireCheckIn' - Settings for requiring a check in when a room is reserved. Alexa can
+-- cancel a room reservation if it\'s not checked into to make the room
+-- available for others. Users can check in by joining the meeting with
+-- Alexa or an AVS device, or by saying “Alexa, check in.”
+--
+-- 'roomUtilizationMetricsEnabled', 'updateMeetingRoomConfiguration_roomUtilizationMetricsEnabled' - Whether room utilization metrics are enabled or not.
+newUpdateMeetingRoomConfiguration ::
+  UpdateMeetingRoomConfiguration
+newUpdateMeetingRoomConfiguration =
+  UpdateMeetingRoomConfiguration'
+    { endOfMeetingReminder =
+        Prelude.Nothing,
+      instantBooking = Prelude.Nothing,
+      requireCheckIn = Prelude.Nothing,
+      roomUtilizationMetricsEnabled =
+        Prelude.Nothing
+    }
+
+-- | Settings for the end of meeting reminder feature that are applied to a
+-- room profile. The end of meeting reminder enables Alexa to remind users
+-- when a meeting is ending.
+updateMeetingRoomConfiguration_endOfMeetingReminder :: Lens.Lens' UpdateMeetingRoomConfiguration (Prelude.Maybe UpdateEndOfMeetingReminder)
+updateMeetingRoomConfiguration_endOfMeetingReminder = Lens.lens (\UpdateMeetingRoomConfiguration' {endOfMeetingReminder} -> endOfMeetingReminder) (\s@UpdateMeetingRoomConfiguration' {} a -> s {endOfMeetingReminder = a} :: UpdateMeetingRoomConfiguration)
+
+-- | Settings to automatically book an available room available for a
+-- configured duration when joining a meeting with Alexa.
+updateMeetingRoomConfiguration_instantBooking :: Lens.Lens' UpdateMeetingRoomConfiguration (Prelude.Maybe UpdateInstantBooking)
+updateMeetingRoomConfiguration_instantBooking = Lens.lens (\UpdateMeetingRoomConfiguration' {instantBooking} -> instantBooking) (\s@UpdateMeetingRoomConfiguration' {} a -> s {instantBooking = a} :: UpdateMeetingRoomConfiguration)
+
+-- | Settings for requiring a check in when a room is reserved. Alexa can
+-- cancel a room reservation if it\'s not checked into to make the room
+-- available for others. Users can check in by joining the meeting with
+-- Alexa or an AVS device, or by saying “Alexa, check in.”
+updateMeetingRoomConfiguration_requireCheckIn :: Lens.Lens' UpdateMeetingRoomConfiguration (Prelude.Maybe UpdateRequireCheckIn)
+updateMeetingRoomConfiguration_requireCheckIn = Lens.lens (\UpdateMeetingRoomConfiguration' {requireCheckIn} -> requireCheckIn) (\s@UpdateMeetingRoomConfiguration' {} a -> s {requireCheckIn = a} :: UpdateMeetingRoomConfiguration)
+
+-- | Whether room utilization metrics are enabled or not.
+updateMeetingRoomConfiguration_roomUtilizationMetricsEnabled :: Lens.Lens' UpdateMeetingRoomConfiguration (Prelude.Maybe Prelude.Bool)
+updateMeetingRoomConfiguration_roomUtilizationMetricsEnabled = Lens.lens (\UpdateMeetingRoomConfiguration' {roomUtilizationMetricsEnabled} -> roomUtilizationMetricsEnabled) (\s@UpdateMeetingRoomConfiguration' {} a -> s {roomUtilizationMetricsEnabled = a} :: UpdateMeetingRoomConfiguration)
+
+instance
+  Prelude.Hashable
+    UpdateMeetingRoomConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateMeetingRoomConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` endOfMeetingReminder
+        `Prelude.hashWithSalt` instantBooking
+        `Prelude.hashWithSalt` requireCheckIn
+        `Prelude.hashWithSalt` roomUtilizationMetricsEnabled
+
+instance
+  Prelude.NFData
+    UpdateMeetingRoomConfiguration
+  where
+  rnf UpdateMeetingRoomConfiguration' {..} =
+    Prelude.rnf endOfMeetingReminder
+      `Prelude.seq` Prelude.rnf instantBooking
+      `Prelude.seq` Prelude.rnf requireCheckIn
+      `Prelude.seq` Prelude.rnf roomUtilizationMetricsEnabled
+
+instance Data.ToJSON UpdateMeetingRoomConfiguration where
+  toJSON UpdateMeetingRoomConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndOfMeetingReminder" Data..=)
+              Prelude.<$> endOfMeetingReminder,
+            ("InstantBooking" Data..=)
+              Prelude.<$> instantBooking,
+            ("RequireCheckIn" Data..=)
+              Prelude.<$> requireCheckIn,
+            ("RoomUtilizationMetricsEnabled" Data..=)
+              Prelude.<$> roomUtilizationMetricsEnabled
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/UpdateRequireCheckIn.hs b/gen/Amazonka/AlexaBusiness/Types/UpdateRequireCheckIn.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/UpdateRequireCheckIn.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.UpdateRequireCheckIn
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.UpdateRequireCheckIn where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Updates settings for the require check in feature that are applied to a
+-- room profile. Require check in allows a meeting room’s Alexa or AVS
+-- device to prompt the user to check in; otherwise, the room will be
+-- released.
+--
+-- /See:/ 'newUpdateRequireCheckIn' smart constructor.
+data UpdateRequireCheckIn = UpdateRequireCheckIn'
+  { -- | Whether require check in is enabled or not.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | Duration between 5 and 20 minutes to determine when to release the room
+    -- if it\'s not checked into.
+    releaseAfterMinutes :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRequireCheckIn' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'updateRequireCheckIn_enabled' - Whether require check in is enabled or not.
+--
+-- 'releaseAfterMinutes', 'updateRequireCheckIn_releaseAfterMinutes' - Duration between 5 and 20 minutes to determine when to release the room
+-- if it\'s not checked into.
+newUpdateRequireCheckIn ::
+  UpdateRequireCheckIn
+newUpdateRequireCheckIn =
+  UpdateRequireCheckIn'
+    { enabled = Prelude.Nothing,
+      releaseAfterMinutes = Prelude.Nothing
+    }
+
+-- | Whether require check in is enabled or not.
+updateRequireCheckIn_enabled :: Lens.Lens' UpdateRequireCheckIn (Prelude.Maybe Prelude.Bool)
+updateRequireCheckIn_enabled = Lens.lens (\UpdateRequireCheckIn' {enabled} -> enabled) (\s@UpdateRequireCheckIn' {} a -> s {enabled = a} :: UpdateRequireCheckIn)
+
+-- | Duration between 5 and 20 minutes to determine when to release the room
+-- if it\'s not checked into.
+updateRequireCheckIn_releaseAfterMinutes :: Lens.Lens' UpdateRequireCheckIn (Prelude.Maybe Prelude.Int)
+updateRequireCheckIn_releaseAfterMinutes = Lens.lens (\UpdateRequireCheckIn' {releaseAfterMinutes} -> releaseAfterMinutes) (\s@UpdateRequireCheckIn' {} a -> s {releaseAfterMinutes = a} :: UpdateRequireCheckIn)
+
+instance Prelude.Hashable UpdateRequireCheckIn where
+  hashWithSalt _salt UpdateRequireCheckIn' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` releaseAfterMinutes
+
+instance Prelude.NFData UpdateRequireCheckIn where
+  rnf UpdateRequireCheckIn' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf releaseAfterMinutes
+
+instance Data.ToJSON UpdateRequireCheckIn where
+  toJSON UpdateRequireCheckIn' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Enabled" Data..=) Prelude.<$> enabled,
+            ("ReleaseAfterMinutes" Data..=)
+              Prelude.<$> releaseAfterMinutes
+          ]
+      )
diff --git a/gen/Amazonka/AlexaBusiness/Types/UserData.hs b/gen/Amazonka/AlexaBusiness/Types/UserData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/UserData.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.UserData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.UserData where
+
+import Amazonka.AlexaBusiness.Types.EnrollmentStatus
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information related to a user.
+--
+-- /See:/ 'newUserData' smart constructor.
+data UserData = UserData'
+  { -- | The email of a user.
+    email :: Prelude.Maybe Prelude.Text,
+    -- | The enrollment ARN of a user.
+    enrollmentId :: Prelude.Maybe Prelude.Text,
+    -- | The enrollment status of a user.
+    enrollmentStatus :: Prelude.Maybe EnrollmentStatus,
+    -- | The first name of a user.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | The last name of a user.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a user.
+    userArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'email', 'userData_email' - The email of a user.
+--
+-- 'enrollmentId', 'userData_enrollmentId' - The enrollment ARN of a user.
+--
+-- 'enrollmentStatus', 'userData_enrollmentStatus' - The enrollment status of a user.
+--
+-- 'firstName', 'userData_firstName' - The first name of a user.
+--
+-- 'lastName', 'userData_lastName' - The last name of a user.
+--
+-- 'userArn', 'userData_userArn' - The ARN of a user.
+newUserData ::
+  UserData
+newUserData =
+  UserData'
+    { email = Prelude.Nothing,
+      enrollmentId = Prelude.Nothing,
+      enrollmentStatus = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      userArn = Prelude.Nothing
+    }
+
+-- | The email of a user.
+userData_email :: Lens.Lens' UserData (Prelude.Maybe Prelude.Text)
+userData_email = Lens.lens (\UserData' {email} -> email) (\s@UserData' {} a -> s {email = a} :: UserData)
+
+-- | The enrollment ARN of a user.
+userData_enrollmentId :: Lens.Lens' UserData (Prelude.Maybe Prelude.Text)
+userData_enrollmentId = Lens.lens (\UserData' {enrollmentId} -> enrollmentId) (\s@UserData' {} a -> s {enrollmentId = a} :: UserData)
+
+-- | The enrollment status of a user.
+userData_enrollmentStatus :: Lens.Lens' UserData (Prelude.Maybe EnrollmentStatus)
+userData_enrollmentStatus = Lens.lens (\UserData' {enrollmentStatus} -> enrollmentStatus) (\s@UserData' {} a -> s {enrollmentStatus = a} :: UserData)
+
+-- | The first name of a user.
+userData_firstName :: Lens.Lens' UserData (Prelude.Maybe Prelude.Text)
+userData_firstName = Lens.lens (\UserData' {firstName} -> firstName) (\s@UserData' {} a -> s {firstName = a} :: UserData)
+
+-- | The last name of a user.
+userData_lastName :: Lens.Lens' UserData (Prelude.Maybe Prelude.Text)
+userData_lastName = Lens.lens (\UserData' {lastName} -> lastName) (\s@UserData' {} a -> s {lastName = a} :: UserData)
+
+-- | The ARN of a user.
+userData_userArn :: Lens.Lens' UserData (Prelude.Maybe Prelude.Text)
+userData_userArn = Lens.lens (\UserData' {userArn} -> userArn) (\s@UserData' {} a -> s {userArn = a} :: UserData)
+
+instance Data.FromJSON UserData where
+  parseJSON =
+    Data.withObject
+      "UserData"
+      ( \x ->
+          UserData'
+            Prelude.<$> (x Data..:? "Email")
+            Prelude.<*> (x Data..:? "EnrollmentId")
+            Prelude.<*> (x Data..:? "EnrollmentStatus")
+            Prelude.<*> (x Data..:? "FirstName")
+            Prelude.<*> (x Data..:? "LastName")
+            Prelude.<*> (x Data..:? "UserArn")
+      )
+
+instance Prelude.Hashable UserData where
+  hashWithSalt _salt UserData' {..} =
+    _salt
+      `Prelude.hashWithSalt` email
+      `Prelude.hashWithSalt` enrollmentId
+      `Prelude.hashWithSalt` enrollmentStatus
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` userArn
+
+instance Prelude.NFData UserData where
+  rnf UserData' {..} =
+    Prelude.rnf email
+      `Prelude.seq` Prelude.rnf enrollmentId
+      `Prelude.seq` Prelude.rnf enrollmentStatus
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf userArn
diff --git a/gen/Amazonka/AlexaBusiness/Types/WakeWord.hs b/gen/Amazonka/AlexaBusiness/Types/WakeWord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Types/WakeWord.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Types.WakeWord
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Types.WakeWord
+  ( WakeWord
+      ( ..,
+        WakeWord_ALEXA,
+        WakeWord_AMAZON,
+        WakeWord_COMPUTER,
+        WakeWord_ECHO
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WakeWord = WakeWord'
+  { fromWakeWord ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern WakeWord_ALEXA :: WakeWord
+pattern WakeWord_ALEXA = WakeWord' "ALEXA"
+
+pattern WakeWord_AMAZON :: WakeWord
+pattern WakeWord_AMAZON = WakeWord' "AMAZON"
+
+pattern WakeWord_COMPUTER :: WakeWord
+pattern WakeWord_COMPUTER = WakeWord' "COMPUTER"
+
+pattern WakeWord_ECHO :: WakeWord
+pattern WakeWord_ECHO = WakeWord' "ECHO"
+
+{-# COMPLETE
+  WakeWord_ALEXA,
+  WakeWord_AMAZON,
+  WakeWord_COMPUTER,
+  WakeWord_ECHO,
+  WakeWord'
+  #-}
diff --git a/gen/Amazonka/AlexaBusiness/UntagResource.hs b/gen/Amazonka/AlexaBusiness/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UntagResource.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes metadata tags from a specified resource.
+module Amazonka.AlexaBusiness.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_arn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The ARN of the resource from which to remove metadata tags. Required.
+    arn :: Prelude.Text,
+    -- | The tags to be removed from the specified resource. Do not provide
+    -- system tags. Required.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'untagResource_arn' - The ARN of the resource from which to remove metadata tags. Required.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tags to be removed from the specified resource. Do not provide
+-- system tags. Required.
+newUntagResource ::
+  -- | 'arn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pArn_ =
+  UntagResource'
+    { arn = pArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The ARN of the resource from which to remove metadata tags. Required.
+untagResource_arn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_arn = Lens.lens (\UntagResource' {arn} -> arn) (\s@UntagResource' {} a -> s {arn = a} :: UntagResource)
+
+-- | The tags to be removed from the specified resource. Do not provide
+-- system tags. Required.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Arn" Data..= arn),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateAddressBook.hs b/gen/Amazonka/AlexaBusiness/UpdateAddressBook.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateAddressBook.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateAddressBook
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates address book details by the address book ARN.
+module Amazonka.AlexaBusiness.UpdateAddressBook
+  ( -- * Creating a Request
+    UpdateAddressBook (..),
+    newUpdateAddressBook,
+
+    -- * Request Lenses
+    updateAddressBook_description,
+    updateAddressBook_name,
+    updateAddressBook_addressBookArn,
+
+    -- * Destructuring the Response
+    UpdateAddressBookResponse (..),
+    newUpdateAddressBookResponse,
+
+    -- * Response Lenses
+    updateAddressBookResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAddressBook' smart constructor.
+data UpdateAddressBook = UpdateAddressBook'
+  { -- | The updated description of the room.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The updated name of the room.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the room to update.
+    addressBookArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAddressBook' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateAddressBook_description' - The updated description of the room.
+--
+-- 'name', 'updateAddressBook_name' - The updated name of the room.
+--
+-- 'addressBookArn', 'updateAddressBook_addressBookArn' - The ARN of the room to update.
+newUpdateAddressBook ::
+  -- | 'addressBookArn'
+  Prelude.Text ->
+  UpdateAddressBook
+newUpdateAddressBook pAddressBookArn_ =
+  UpdateAddressBook'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      addressBookArn = pAddressBookArn_
+    }
+
+-- | The updated description of the room.
+updateAddressBook_description :: Lens.Lens' UpdateAddressBook (Prelude.Maybe Prelude.Text)
+updateAddressBook_description = Lens.lens (\UpdateAddressBook' {description} -> description) (\s@UpdateAddressBook' {} a -> s {description = a} :: UpdateAddressBook)
+
+-- | The updated name of the room.
+updateAddressBook_name :: Lens.Lens' UpdateAddressBook (Prelude.Maybe Prelude.Text)
+updateAddressBook_name = Lens.lens (\UpdateAddressBook' {name} -> name) (\s@UpdateAddressBook' {} a -> s {name = a} :: UpdateAddressBook)
+
+-- | The ARN of the room to update.
+updateAddressBook_addressBookArn :: Lens.Lens' UpdateAddressBook Prelude.Text
+updateAddressBook_addressBookArn = Lens.lens (\UpdateAddressBook' {addressBookArn} -> addressBookArn) (\s@UpdateAddressBook' {} a -> s {addressBookArn = a} :: UpdateAddressBook)
+
+instance Core.AWSRequest UpdateAddressBook where
+  type
+    AWSResponse UpdateAddressBook =
+      UpdateAddressBookResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateAddressBookResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAddressBook where
+  hashWithSalt _salt UpdateAddressBook' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` addressBookArn
+
+instance Prelude.NFData UpdateAddressBook where
+  rnf UpdateAddressBook' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf addressBookArn
+
+instance Data.ToHeaders UpdateAddressBook where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateAddressBook" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAddressBook where
+  toJSON UpdateAddressBook' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            Prelude.Just
+              ("AddressBookArn" Data..= addressBookArn)
+          ]
+      )
+
+instance Data.ToPath UpdateAddressBook where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateAddressBook where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAddressBookResponse' smart constructor.
+data UpdateAddressBookResponse = UpdateAddressBookResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAddressBookResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateAddressBookResponse_httpStatus' - The response's http status code.
+newUpdateAddressBookResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAddressBookResponse
+newUpdateAddressBookResponse pHttpStatus_ =
+  UpdateAddressBookResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateAddressBookResponse_httpStatus :: Lens.Lens' UpdateAddressBookResponse Prelude.Int
+updateAddressBookResponse_httpStatus = Lens.lens (\UpdateAddressBookResponse' {httpStatus} -> httpStatus) (\s@UpdateAddressBookResponse' {} a -> s {httpStatus = a} :: UpdateAddressBookResponse)
+
+instance Prelude.NFData UpdateAddressBookResponse where
+  rnf UpdateAddressBookResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateBusinessReportSchedule.hs b/gen/Amazonka/AlexaBusiness/UpdateBusinessReportSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateBusinessReportSchedule.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateBusinessReportSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the configuration of the report delivery schedule with the
+-- specified schedule ARN.
+module Amazonka.AlexaBusiness.UpdateBusinessReportSchedule
+  ( -- * Creating a Request
+    UpdateBusinessReportSchedule (..),
+    newUpdateBusinessReportSchedule,
+
+    -- * Request Lenses
+    updateBusinessReportSchedule_format,
+    updateBusinessReportSchedule_recurrence,
+    updateBusinessReportSchedule_s3BucketName,
+    updateBusinessReportSchedule_s3KeyPrefix,
+    updateBusinessReportSchedule_scheduleName,
+    updateBusinessReportSchedule_scheduleArn,
+
+    -- * Destructuring the Response
+    UpdateBusinessReportScheduleResponse (..),
+    newUpdateBusinessReportScheduleResponse,
+
+    -- * Response Lenses
+    updateBusinessReportScheduleResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateBusinessReportSchedule' smart constructor.
+data UpdateBusinessReportSchedule = UpdateBusinessReportSchedule'
+  { -- | The format of the generated report (individual CSV files or zipped files
+    -- of individual files).
+    format :: Prelude.Maybe BusinessReportFormat,
+    -- | The recurrence of the reports.
+    recurrence :: Prelude.Maybe BusinessReportRecurrence,
+    -- | The S3 location of the output reports.
+    s3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The S3 key where the report is delivered.
+    s3KeyPrefix :: Prelude.Maybe Prelude.Text,
+    -- | The name identifier of the schedule.
+    scheduleName :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the business report schedule.
+    scheduleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBusinessReportSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'updateBusinessReportSchedule_format' - The format of the generated report (individual CSV files or zipped files
+-- of individual files).
+--
+-- 'recurrence', 'updateBusinessReportSchedule_recurrence' - The recurrence of the reports.
+--
+-- 's3BucketName', 'updateBusinessReportSchedule_s3BucketName' - The S3 location of the output reports.
+--
+-- 's3KeyPrefix', 'updateBusinessReportSchedule_s3KeyPrefix' - The S3 key where the report is delivered.
+--
+-- 'scheduleName', 'updateBusinessReportSchedule_scheduleName' - The name identifier of the schedule.
+--
+-- 'scheduleArn', 'updateBusinessReportSchedule_scheduleArn' - The ARN of the business report schedule.
+newUpdateBusinessReportSchedule ::
+  -- | 'scheduleArn'
+  Prelude.Text ->
+  UpdateBusinessReportSchedule
+newUpdateBusinessReportSchedule pScheduleArn_ =
+  UpdateBusinessReportSchedule'
+    { format =
+        Prelude.Nothing,
+      recurrence = Prelude.Nothing,
+      s3BucketName = Prelude.Nothing,
+      s3KeyPrefix = Prelude.Nothing,
+      scheduleName = Prelude.Nothing,
+      scheduleArn = pScheduleArn_
+    }
+
+-- | The format of the generated report (individual CSV files or zipped files
+-- of individual files).
+updateBusinessReportSchedule_format :: Lens.Lens' UpdateBusinessReportSchedule (Prelude.Maybe BusinessReportFormat)
+updateBusinessReportSchedule_format = Lens.lens (\UpdateBusinessReportSchedule' {format} -> format) (\s@UpdateBusinessReportSchedule' {} a -> s {format = a} :: UpdateBusinessReportSchedule)
+
+-- | The recurrence of the reports.
+updateBusinessReportSchedule_recurrence :: Lens.Lens' UpdateBusinessReportSchedule (Prelude.Maybe BusinessReportRecurrence)
+updateBusinessReportSchedule_recurrence = Lens.lens (\UpdateBusinessReportSchedule' {recurrence} -> recurrence) (\s@UpdateBusinessReportSchedule' {} a -> s {recurrence = a} :: UpdateBusinessReportSchedule)
+
+-- | The S3 location of the output reports.
+updateBusinessReportSchedule_s3BucketName :: Lens.Lens' UpdateBusinessReportSchedule (Prelude.Maybe Prelude.Text)
+updateBusinessReportSchedule_s3BucketName = Lens.lens (\UpdateBusinessReportSchedule' {s3BucketName} -> s3BucketName) (\s@UpdateBusinessReportSchedule' {} a -> s {s3BucketName = a} :: UpdateBusinessReportSchedule)
+
+-- | The S3 key where the report is delivered.
+updateBusinessReportSchedule_s3KeyPrefix :: Lens.Lens' UpdateBusinessReportSchedule (Prelude.Maybe Prelude.Text)
+updateBusinessReportSchedule_s3KeyPrefix = Lens.lens (\UpdateBusinessReportSchedule' {s3KeyPrefix} -> s3KeyPrefix) (\s@UpdateBusinessReportSchedule' {} a -> s {s3KeyPrefix = a} :: UpdateBusinessReportSchedule)
+
+-- | The name identifier of the schedule.
+updateBusinessReportSchedule_scheduleName :: Lens.Lens' UpdateBusinessReportSchedule (Prelude.Maybe Prelude.Text)
+updateBusinessReportSchedule_scheduleName = Lens.lens (\UpdateBusinessReportSchedule' {scheduleName} -> scheduleName) (\s@UpdateBusinessReportSchedule' {} a -> s {scheduleName = a} :: UpdateBusinessReportSchedule)
+
+-- | The ARN of the business report schedule.
+updateBusinessReportSchedule_scheduleArn :: Lens.Lens' UpdateBusinessReportSchedule Prelude.Text
+updateBusinessReportSchedule_scheduleArn = Lens.lens (\UpdateBusinessReportSchedule' {scheduleArn} -> scheduleArn) (\s@UpdateBusinessReportSchedule' {} a -> s {scheduleArn = a} :: UpdateBusinessReportSchedule)
+
+instance Core.AWSRequest UpdateBusinessReportSchedule where
+  type
+    AWSResponse UpdateBusinessReportSchedule =
+      UpdateBusinessReportScheduleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateBusinessReportScheduleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateBusinessReportSchedule
+  where
+  hashWithSalt _salt UpdateBusinessReportSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` recurrence
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` s3KeyPrefix
+      `Prelude.hashWithSalt` scheduleName
+      `Prelude.hashWithSalt` scheduleArn
+
+instance Prelude.NFData UpdateBusinessReportSchedule where
+  rnf UpdateBusinessReportSchedule' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf recurrence
+      `Prelude.seq` Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf s3KeyPrefix
+      `Prelude.seq` Prelude.rnf scheduleName
+      `Prelude.seq` Prelude.rnf scheduleArn
+
+instance Data.ToHeaders UpdateBusinessReportSchedule where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateBusinessReportSchedule" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateBusinessReportSchedule where
+  toJSON UpdateBusinessReportSchedule' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("Recurrence" Data..=) Prelude.<$> recurrence,
+            ("S3BucketName" Data..=) Prelude.<$> s3BucketName,
+            ("S3KeyPrefix" Data..=) Prelude.<$> s3KeyPrefix,
+            ("ScheduleName" Data..=) Prelude.<$> scheduleName,
+            Prelude.Just ("ScheduleArn" Data..= scheduleArn)
+          ]
+      )
+
+instance Data.ToPath UpdateBusinessReportSchedule where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateBusinessReportSchedule where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateBusinessReportScheduleResponse' smart constructor.
+data UpdateBusinessReportScheduleResponse = UpdateBusinessReportScheduleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateBusinessReportScheduleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateBusinessReportScheduleResponse_httpStatus' - The response's http status code.
+newUpdateBusinessReportScheduleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateBusinessReportScheduleResponse
+newUpdateBusinessReportScheduleResponse pHttpStatus_ =
+  UpdateBusinessReportScheduleResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateBusinessReportScheduleResponse_httpStatus :: Lens.Lens' UpdateBusinessReportScheduleResponse Prelude.Int
+updateBusinessReportScheduleResponse_httpStatus = Lens.lens (\UpdateBusinessReportScheduleResponse' {httpStatus} -> httpStatus) (\s@UpdateBusinessReportScheduleResponse' {} a -> s {httpStatus = a} :: UpdateBusinessReportScheduleResponse)
+
+instance
+  Prelude.NFData
+    UpdateBusinessReportScheduleResponse
+  where
+  rnf UpdateBusinessReportScheduleResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateConferenceProvider.hs b/gen/Amazonka/AlexaBusiness/UpdateConferenceProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateConferenceProvider.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateConferenceProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing conference provider\'s settings.
+module Amazonka.AlexaBusiness.UpdateConferenceProvider
+  ( -- * Creating a Request
+    UpdateConferenceProvider (..),
+    newUpdateConferenceProvider,
+
+    -- * Request Lenses
+    updateConferenceProvider_iPDialIn,
+    updateConferenceProvider_pSTNDialIn,
+    updateConferenceProvider_conferenceProviderArn,
+    updateConferenceProvider_conferenceProviderType,
+    updateConferenceProvider_meetingSetting,
+
+    -- * Destructuring the Response
+    UpdateConferenceProviderResponse (..),
+    newUpdateConferenceProviderResponse,
+
+    -- * Response Lenses
+    updateConferenceProviderResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateConferenceProvider' smart constructor.
+data UpdateConferenceProvider = UpdateConferenceProvider'
+  { -- | The IP endpoint and protocol for calling.
+    iPDialIn :: Prelude.Maybe IPDialIn,
+    -- | The information for PSTN conferencing.
+    pSTNDialIn :: Prelude.Maybe PSTNDialIn,
+    -- | The ARN of the conference provider.
+    conferenceProviderArn :: Prelude.Text,
+    -- | The type of the conference provider.
+    conferenceProviderType :: ConferenceProviderType,
+    -- | The meeting settings for the conference provider.
+    meetingSetting :: MeetingSetting
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConferenceProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iPDialIn', 'updateConferenceProvider_iPDialIn' - The IP endpoint and protocol for calling.
+--
+-- 'pSTNDialIn', 'updateConferenceProvider_pSTNDialIn' - The information for PSTN conferencing.
+--
+-- 'conferenceProviderArn', 'updateConferenceProvider_conferenceProviderArn' - The ARN of the conference provider.
+--
+-- 'conferenceProviderType', 'updateConferenceProvider_conferenceProviderType' - The type of the conference provider.
+--
+-- 'meetingSetting', 'updateConferenceProvider_meetingSetting' - The meeting settings for the conference provider.
+newUpdateConferenceProvider ::
+  -- | 'conferenceProviderArn'
+  Prelude.Text ->
+  -- | 'conferenceProviderType'
+  ConferenceProviderType ->
+  -- | 'meetingSetting'
+  MeetingSetting ->
+  UpdateConferenceProvider
+newUpdateConferenceProvider
+  pConferenceProviderArn_
+  pConferenceProviderType_
+  pMeetingSetting_ =
+    UpdateConferenceProvider'
+      { iPDialIn =
+          Prelude.Nothing,
+        pSTNDialIn = Prelude.Nothing,
+        conferenceProviderArn = pConferenceProviderArn_,
+        conferenceProviderType = pConferenceProviderType_,
+        meetingSetting = pMeetingSetting_
+      }
+
+-- | The IP endpoint and protocol for calling.
+updateConferenceProvider_iPDialIn :: Lens.Lens' UpdateConferenceProvider (Prelude.Maybe IPDialIn)
+updateConferenceProvider_iPDialIn = Lens.lens (\UpdateConferenceProvider' {iPDialIn} -> iPDialIn) (\s@UpdateConferenceProvider' {} a -> s {iPDialIn = a} :: UpdateConferenceProvider)
+
+-- | The information for PSTN conferencing.
+updateConferenceProvider_pSTNDialIn :: Lens.Lens' UpdateConferenceProvider (Prelude.Maybe PSTNDialIn)
+updateConferenceProvider_pSTNDialIn = Lens.lens (\UpdateConferenceProvider' {pSTNDialIn} -> pSTNDialIn) (\s@UpdateConferenceProvider' {} a -> s {pSTNDialIn = a} :: UpdateConferenceProvider)
+
+-- | The ARN of the conference provider.
+updateConferenceProvider_conferenceProviderArn :: Lens.Lens' UpdateConferenceProvider Prelude.Text
+updateConferenceProvider_conferenceProviderArn = Lens.lens (\UpdateConferenceProvider' {conferenceProviderArn} -> conferenceProviderArn) (\s@UpdateConferenceProvider' {} a -> s {conferenceProviderArn = a} :: UpdateConferenceProvider)
+
+-- | The type of the conference provider.
+updateConferenceProvider_conferenceProviderType :: Lens.Lens' UpdateConferenceProvider ConferenceProviderType
+updateConferenceProvider_conferenceProviderType = Lens.lens (\UpdateConferenceProvider' {conferenceProviderType} -> conferenceProviderType) (\s@UpdateConferenceProvider' {} a -> s {conferenceProviderType = a} :: UpdateConferenceProvider)
+
+-- | The meeting settings for the conference provider.
+updateConferenceProvider_meetingSetting :: Lens.Lens' UpdateConferenceProvider MeetingSetting
+updateConferenceProvider_meetingSetting = Lens.lens (\UpdateConferenceProvider' {meetingSetting} -> meetingSetting) (\s@UpdateConferenceProvider' {} a -> s {meetingSetting = a} :: UpdateConferenceProvider)
+
+instance Core.AWSRequest UpdateConferenceProvider where
+  type
+    AWSResponse UpdateConferenceProvider =
+      UpdateConferenceProviderResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateConferenceProviderResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateConferenceProvider where
+  hashWithSalt _salt UpdateConferenceProvider' {..} =
+    _salt
+      `Prelude.hashWithSalt` iPDialIn
+      `Prelude.hashWithSalt` pSTNDialIn
+      `Prelude.hashWithSalt` conferenceProviderArn
+      `Prelude.hashWithSalt` conferenceProviderType
+      `Prelude.hashWithSalt` meetingSetting
+
+instance Prelude.NFData UpdateConferenceProvider where
+  rnf UpdateConferenceProvider' {..} =
+    Prelude.rnf iPDialIn
+      `Prelude.seq` Prelude.rnf pSTNDialIn
+      `Prelude.seq` Prelude.rnf conferenceProviderArn
+      `Prelude.seq` Prelude.rnf conferenceProviderType
+      `Prelude.seq` Prelude.rnf meetingSetting
+
+instance Data.ToHeaders UpdateConferenceProvider where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateConferenceProvider" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateConferenceProvider where
+  toJSON UpdateConferenceProvider' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("IPDialIn" Data..=) Prelude.<$> iPDialIn,
+            ("PSTNDialIn" Data..=) Prelude.<$> pSTNDialIn,
+            Prelude.Just
+              ( "ConferenceProviderArn"
+                  Data..= conferenceProviderArn
+              ),
+            Prelude.Just
+              ( "ConferenceProviderType"
+                  Data..= conferenceProviderType
+              ),
+            Prelude.Just
+              ("MeetingSetting" Data..= meetingSetting)
+          ]
+      )
+
+instance Data.ToPath UpdateConferenceProvider where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateConferenceProvider where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateConferenceProviderResponse' smart constructor.
+data UpdateConferenceProviderResponse = UpdateConferenceProviderResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateConferenceProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateConferenceProviderResponse_httpStatus' - The response's http status code.
+newUpdateConferenceProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateConferenceProviderResponse
+newUpdateConferenceProviderResponse pHttpStatus_ =
+  UpdateConferenceProviderResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateConferenceProviderResponse_httpStatus :: Lens.Lens' UpdateConferenceProviderResponse Prelude.Int
+updateConferenceProviderResponse_httpStatus = Lens.lens (\UpdateConferenceProviderResponse' {httpStatus} -> httpStatus) (\s@UpdateConferenceProviderResponse' {} a -> s {httpStatus = a} :: UpdateConferenceProviderResponse)
+
+instance
+  Prelude.NFData
+    UpdateConferenceProviderResponse
+  where
+  rnf UpdateConferenceProviderResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateContact.hs b/gen/Amazonka/AlexaBusiness/UpdateContact.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateContact.hs
@@ -0,0 +1,245 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateContact
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the contact details by the contact ARN.
+module Amazonka.AlexaBusiness.UpdateContact
+  ( -- * Creating a Request
+    UpdateContact (..),
+    newUpdateContact,
+
+    -- * Request Lenses
+    updateContact_displayName,
+    updateContact_firstName,
+    updateContact_lastName,
+    updateContact_phoneNumber,
+    updateContact_phoneNumbers,
+    updateContact_sipAddresses,
+    updateContact_contactArn,
+
+    -- * Destructuring the Response
+    UpdateContactResponse (..),
+    newUpdateContactResponse,
+
+    -- * Response Lenses
+    updateContactResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateContact' smart constructor.
+data UpdateContact = UpdateContact'
+  { -- | The updated display name of the contact.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The updated first name of the contact.
+    firstName :: Prelude.Maybe Prelude.Text,
+    -- | The updated last name of the contact.
+    lastName :: Prelude.Maybe Prelude.Text,
+    -- | The updated phone number of the contact. The phone number type defaults
+    -- to WORK. You can either specify PhoneNumber or PhoneNumbers. We
+    -- recommend that you use PhoneNumbers, which lets you specify the phone
+    -- number type and multiple numbers.
+    phoneNumber :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The list of phone numbers for the contact.
+    phoneNumbers :: Prelude.Maybe [PhoneNumber],
+    -- | The list of SIP addresses for the contact.
+    sipAddresses :: Prelude.Maybe [SipAddress],
+    -- | The ARN of the contact to update.
+    contactArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateContact' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'displayName', 'updateContact_displayName' - The updated display name of the contact.
+--
+-- 'firstName', 'updateContact_firstName' - The updated first name of the contact.
+--
+-- 'lastName', 'updateContact_lastName' - The updated last name of the contact.
+--
+-- 'phoneNumber', 'updateContact_phoneNumber' - The updated phone number of the contact. The phone number type defaults
+-- to WORK. You can either specify PhoneNumber or PhoneNumbers. We
+-- recommend that you use PhoneNumbers, which lets you specify the phone
+-- number type and multiple numbers.
+--
+-- 'phoneNumbers', 'updateContact_phoneNumbers' - The list of phone numbers for the contact.
+--
+-- 'sipAddresses', 'updateContact_sipAddresses' - The list of SIP addresses for the contact.
+--
+-- 'contactArn', 'updateContact_contactArn' - The ARN of the contact to update.
+newUpdateContact ::
+  -- | 'contactArn'
+  Prelude.Text ->
+  UpdateContact
+newUpdateContact pContactArn_ =
+  UpdateContact'
+    { displayName = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      phoneNumbers = Prelude.Nothing,
+      sipAddresses = Prelude.Nothing,
+      contactArn = pContactArn_
+    }
+
+-- | The updated display name of the contact.
+updateContact_displayName :: Lens.Lens' UpdateContact (Prelude.Maybe Prelude.Text)
+updateContact_displayName = Lens.lens (\UpdateContact' {displayName} -> displayName) (\s@UpdateContact' {} a -> s {displayName = a} :: UpdateContact)
+
+-- | The updated first name of the contact.
+updateContact_firstName :: Lens.Lens' UpdateContact (Prelude.Maybe Prelude.Text)
+updateContact_firstName = Lens.lens (\UpdateContact' {firstName} -> firstName) (\s@UpdateContact' {} a -> s {firstName = a} :: UpdateContact)
+
+-- | The updated last name of the contact.
+updateContact_lastName :: Lens.Lens' UpdateContact (Prelude.Maybe Prelude.Text)
+updateContact_lastName = Lens.lens (\UpdateContact' {lastName} -> lastName) (\s@UpdateContact' {} a -> s {lastName = a} :: UpdateContact)
+
+-- | The updated phone number of the contact. The phone number type defaults
+-- to WORK. You can either specify PhoneNumber or PhoneNumbers. We
+-- recommend that you use PhoneNumbers, which lets you specify the phone
+-- number type and multiple numbers.
+updateContact_phoneNumber :: Lens.Lens' UpdateContact (Prelude.Maybe Prelude.Text)
+updateContact_phoneNumber = Lens.lens (\UpdateContact' {phoneNumber} -> phoneNumber) (\s@UpdateContact' {} a -> s {phoneNumber = a} :: UpdateContact) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The list of phone numbers for the contact.
+updateContact_phoneNumbers :: Lens.Lens' UpdateContact (Prelude.Maybe [PhoneNumber])
+updateContact_phoneNumbers = Lens.lens (\UpdateContact' {phoneNumbers} -> phoneNumbers) (\s@UpdateContact' {} a -> s {phoneNumbers = a} :: UpdateContact) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of SIP addresses for the contact.
+updateContact_sipAddresses :: Lens.Lens' UpdateContact (Prelude.Maybe [SipAddress])
+updateContact_sipAddresses = Lens.lens (\UpdateContact' {sipAddresses} -> sipAddresses) (\s@UpdateContact' {} a -> s {sipAddresses = a} :: UpdateContact) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the contact to update.
+updateContact_contactArn :: Lens.Lens' UpdateContact Prelude.Text
+updateContact_contactArn = Lens.lens (\UpdateContact' {contactArn} -> contactArn) (\s@UpdateContact' {} a -> s {contactArn = a} :: UpdateContact)
+
+instance Core.AWSRequest UpdateContact where
+  type
+    AWSResponse UpdateContact =
+      UpdateContactResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateContactResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateContact where
+  hashWithSalt _salt UpdateContact' {..} =
+    _salt
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` phoneNumbers
+      `Prelude.hashWithSalt` sipAddresses
+      `Prelude.hashWithSalt` contactArn
+
+instance Prelude.NFData UpdateContact where
+  rnf UpdateContact' {..} =
+    Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf phoneNumbers
+      `Prelude.seq` Prelude.rnf sipAddresses
+      `Prelude.seq` Prelude.rnf contactArn
+
+instance Data.ToHeaders UpdateContact where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateContact" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateContact where
+  toJSON UpdateContact' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("FirstName" Data..=) Prelude.<$> firstName,
+            ("LastName" Data..=) Prelude.<$> lastName,
+            ("PhoneNumber" Data..=) Prelude.<$> phoneNumber,
+            ("PhoneNumbers" Data..=) Prelude.<$> phoneNumbers,
+            ("SipAddresses" Data..=) Prelude.<$> sipAddresses,
+            Prelude.Just ("ContactArn" Data..= contactArn)
+          ]
+      )
+
+instance Data.ToPath UpdateContact where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateContact where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateContactResponse' smart constructor.
+data UpdateContactResponse = UpdateContactResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateContactResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateContactResponse_httpStatus' - The response's http status code.
+newUpdateContactResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateContactResponse
+newUpdateContactResponse pHttpStatus_ =
+  UpdateContactResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateContactResponse_httpStatus :: Lens.Lens' UpdateContactResponse Prelude.Int
+updateContactResponse_httpStatus = Lens.lens (\UpdateContactResponse' {httpStatus} -> httpStatus) (\s@UpdateContactResponse' {} a -> s {httpStatus = a} :: UpdateContactResponse)
+
+instance Prelude.NFData UpdateContactResponse where
+  rnf UpdateContactResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateDevice.hs b/gen/Amazonka/AlexaBusiness/UpdateDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateDevice.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the device name by device ARN.
+module Amazonka.AlexaBusiness.UpdateDevice
+  ( -- * Creating a Request
+    UpdateDevice (..),
+    newUpdateDevice,
+
+    -- * Request Lenses
+    updateDevice_deviceArn,
+    updateDevice_deviceName,
+
+    -- * Destructuring the Response
+    UpdateDeviceResponse (..),
+    newUpdateDeviceResponse,
+
+    -- * Response Lenses
+    updateDeviceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDevice' smart constructor.
+data UpdateDevice = UpdateDevice'
+  { -- | The ARN of the device to update. Required.
+    deviceArn :: Prelude.Maybe Prelude.Text,
+    -- | The updated device name. Required.
+    deviceName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDevice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceArn', 'updateDevice_deviceArn' - The ARN of the device to update. Required.
+--
+-- 'deviceName', 'updateDevice_deviceName' - The updated device name. Required.
+newUpdateDevice ::
+  UpdateDevice
+newUpdateDevice =
+  UpdateDevice'
+    { deviceArn = Prelude.Nothing,
+      deviceName = Prelude.Nothing
+    }
+
+-- | The ARN of the device to update. Required.
+updateDevice_deviceArn :: Lens.Lens' UpdateDevice (Prelude.Maybe Prelude.Text)
+updateDevice_deviceArn = Lens.lens (\UpdateDevice' {deviceArn} -> deviceArn) (\s@UpdateDevice' {} a -> s {deviceArn = a} :: UpdateDevice)
+
+-- | The updated device name. Required.
+updateDevice_deviceName :: Lens.Lens' UpdateDevice (Prelude.Maybe Prelude.Text)
+updateDevice_deviceName = Lens.lens (\UpdateDevice' {deviceName} -> deviceName) (\s@UpdateDevice' {} a -> s {deviceName = a} :: UpdateDevice)
+
+instance Core.AWSRequest UpdateDevice where
+  type AWSResponse UpdateDevice = UpdateDeviceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateDeviceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDevice where
+  hashWithSalt _salt UpdateDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceArn
+      `Prelude.hashWithSalt` deviceName
+
+instance Prelude.NFData UpdateDevice where
+  rnf UpdateDevice' {..} =
+    Prelude.rnf deviceArn
+      `Prelude.seq` Prelude.rnf deviceName
+
+instance Data.ToHeaders UpdateDevice where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateDevice" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDevice where
+  toJSON UpdateDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DeviceArn" Data..=) Prelude.<$> deviceArn,
+            ("DeviceName" Data..=) Prelude.<$> deviceName
+          ]
+      )
+
+instance Data.ToPath UpdateDevice where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDeviceResponse' smart constructor.
+data UpdateDeviceResponse = UpdateDeviceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDeviceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateDeviceResponse_httpStatus' - The response's http status code.
+newUpdateDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDeviceResponse
+newUpdateDeviceResponse pHttpStatus_ =
+  UpdateDeviceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateDeviceResponse_httpStatus :: Lens.Lens' UpdateDeviceResponse Prelude.Int
+updateDeviceResponse_httpStatus = Lens.lens (\UpdateDeviceResponse' {httpStatus} -> httpStatus) (\s@UpdateDeviceResponse' {} a -> s {httpStatus = a} :: UpdateDeviceResponse)
+
+instance Prelude.NFData UpdateDeviceResponse where
+  rnf UpdateDeviceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateGateway.hs b/gen/Amazonka/AlexaBusiness/UpdateGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateGateway.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the details of a gateway. If any optional field is not provided,
+-- the existing corresponding value is left unmodified.
+module Amazonka.AlexaBusiness.UpdateGateway
+  ( -- * Creating a Request
+    UpdateGateway (..),
+    newUpdateGateway,
+
+    -- * Request Lenses
+    updateGateway_description,
+    updateGateway_name,
+    updateGateway_softwareVersion,
+    updateGateway_gatewayArn,
+
+    -- * Destructuring the Response
+    UpdateGatewayResponse (..),
+    newUpdateGatewayResponse,
+
+    -- * Response Lenses
+    updateGatewayResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateGateway' smart constructor.
+data UpdateGateway = UpdateGateway'
+  { -- | The updated description of the gateway.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The updated name of the gateway.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The updated software version of the gateway. The gateway automatically
+    -- updates its software version during normal operation.
+    softwareVersion :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the gateway to update.
+    gatewayArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateGateway_description' - The updated description of the gateway.
+--
+-- 'name', 'updateGateway_name' - The updated name of the gateway.
+--
+-- 'softwareVersion', 'updateGateway_softwareVersion' - The updated software version of the gateway. The gateway automatically
+-- updates its software version during normal operation.
+--
+-- 'gatewayArn', 'updateGateway_gatewayArn' - The ARN of the gateway to update.
+newUpdateGateway ::
+  -- | 'gatewayArn'
+  Prelude.Text ->
+  UpdateGateway
+newUpdateGateway pGatewayArn_ =
+  UpdateGateway'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      softwareVersion = Prelude.Nothing,
+      gatewayArn = pGatewayArn_
+    }
+
+-- | The updated description of the gateway.
+updateGateway_description :: Lens.Lens' UpdateGateway (Prelude.Maybe Prelude.Text)
+updateGateway_description = Lens.lens (\UpdateGateway' {description} -> description) (\s@UpdateGateway' {} a -> s {description = a} :: UpdateGateway)
+
+-- | The updated name of the gateway.
+updateGateway_name :: Lens.Lens' UpdateGateway (Prelude.Maybe Prelude.Text)
+updateGateway_name = Lens.lens (\UpdateGateway' {name} -> name) (\s@UpdateGateway' {} a -> s {name = a} :: UpdateGateway)
+
+-- | The updated software version of the gateway. The gateway automatically
+-- updates its software version during normal operation.
+updateGateway_softwareVersion :: Lens.Lens' UpdateGateway (Prelude.Maybe Prelude.Text)
+updateGateway_softwareVersion = Lens.lens (\UpdateGateway' {softwareVersion} -> softwareVersion) (\s@UpdateGateway' {} a -> s {softwareVersion = a} :: UpdateGateway)
+
+-- | The ARN of the gateway to update.
+updateGateway_gatewayArn :: Lens.Lens' UpdateGateway Prelude.Text
+updateGateway_gatewayArn = Lens.lens (\UpdateGateway' {gatewayArn} -> gatewayArn) (\s@UpdateGateway' {} a -> s {gatewayArn = a} :: UpdateGateway)
+
+instance Core.AWSRequest UpdateGateway where
+  type
+    AWSResponse UpdateGateway =
+      UpdateGatewayResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateGatewayResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateGateway where
+  hashWithSalt _salt UpdateGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` softwareVersion
+      `Prelude.hashWithSalt` gatewayArn
+
+instance Prelude.NFData UpdateGateway where
+  rnf UpdateGateway' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf softwareVersion
+      `Prelude.seq` Prelude.rnf gatewayArn
+
+instance Data.ToHeaders UpdateGateway where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateGateway" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateGateway where
+  toJSON UpdateGateway' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            ("SoftwareVersion" Data..=)
+              Prelude.<$> softwareVersion,
+            Prelude.Just ("GatewayArn" Data..= gatewayArn)
+          ]
+      )
+
+instance Data.ToPath UpdateGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateGateway where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateGatewayResponse' smart constructor.
+data UpdateGatewayResponse = UpdateGatewayResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateGatewayResponse_httpStatus' - The response's http status code.
+newUpdateGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateGatewayResponse
+newUpdateGatewayResponse pHttpStatus_ =
+  UpdateGatewayResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateGatewayResponse_httpStatus :: Lens.Lens' UpdateGatewayResponse Prelude.Int
+updateGatewayResponse_httpStatus = Lens.lens (\UpdateGatewayResponse' {httpStatus} -> httpStatus) (\s@UpdateGatewayResponse' {} a -> s {httpStatus = a} :: UpdateGatewayResponse)
+
+instance Prelude.NFData UpdateGatewayResponse where
+  rnf UpdateGatewayResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateGatewayGroup.hs b/gen/Amazonka/AlexaBusiness/UpdateGatewayGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateGatewayGroup.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateGatewayGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the details of a gateway group. If any optional field is not
+-- provided, the existing corresponding value is left unmodified.
+module Amazonka.AlexaBusiness.UpdateGatewayGroup
+  ( -- * Creating a Request
+    UpdateGatewayGroup (..),
+    newUpdateGatewayGroup,
+
+    -- * Request Lenses
+    updateGatewayGroup_description,
+    updateGatewayGroup_name,
+    updateGatewayGroup_gatewayGroupArn,
+
+    -- * Destructuring the Response
+    UpdateGatewayGroupResponse (..),
+    newUpdateGatewayGroupResponse,
+
+    -- * Response Lenses
+    updateGatewayGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateGatewayGroup' smart constructor.
+data UpdateGatewayGroup = UpdateGatewayGroup'
+  { -- | The updated description of the gateway group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The updated name of the gateway group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the gateway group to update.
+    gatewayGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGatewayGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateGatewayGroup_description' - The updated description of the gateway group.
+--
+-- 'name', 'updateGatewayGroup_name' - The updated name of the gateway group.
+--
+-- 'gatewayGroupArn', 'updateGatewayGroup_gatewayGroupArn' - The ARN of the gateway group to update.
+newUpdateGatewayGroup ::
+  -- | 'gatewayGroupArn'
+  Prelude.Text ->
+  UpdateGatewayGroup
+newUpdateGatewayGroup pGatewayGroupArn_ =
+  UpdateGatewayGroup'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      gatewayGroupArn = pGatewayGroupArn_
+    }
+
+-- | The updated description of the gateway group.
+updateGatewayGroup_description :: Lens.Lens' UpdateGatewayGroup (Prelude.Maybe Prelude.Text)
+updateGatewayGroup_description = Lens.lens (\UpdateGatewayGroup' {description} -> description) (\s@UpdateGatewayGroup' {} a -> s {description = a} :: UpdateGatewayGroup)
+
+-- | The updated name of the gateway group.
+updateGatewayGroup_name :: Lens.Lens' UpdateGatewayGroup (Prelude.Maybe Prelude.Text)
+updateGatewayGroup_name = Lens.lens (\UpdateGatewayGroup' {name} -> name) (\s@UpdateGatewayGroup' {} a -> s {name = a} :: UpdateGatewayGroup)
+
+-- | The ARN of the gateway group to update.
+updateGatewayGroup_gatewayGroupArn :: Lens.Lens' UpdateGatewayGroup Prelude.Text
+updateGatewayGroup_gatewayGroupArn = Lens.lens (\UpdateGatewayGroup' {gatewayGroupArn} -> gatewayGroupArn) (\s@UpdateGatewayGroup' {} a -> s {gatewayGroupArn = a} :: UpdateGatewayGroup)
+
+instance Core.AWSRequest UpdateGatewayGroup where
+  type
+    AWSResponse UpdateGatewayGroup =
+      UpdateGatewayGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateGatewayGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateGatewayGroup where
+  hashWithSalt _salt UpdateGatewayGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` gatewayGroupArn
+
+instance Prelude.NFData UpdateGatewayGroup where
+  rnf UpdateGatewayGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf gatewayGroupArn
+
+instance Data.ToHeaders UpdateGatewayGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateGatewayGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateGatewayGroup where
+  toJSON UpdateGatewayGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            Prelude.Just
+              ("GatewayGroupArn" Data..= gatewayGroupArn)
+          ]
+      )
+
+instance Data.ToPath UpdateGatewayGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateGatewayGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateGatewayGroupResponse' smart constructor.
+data UpdateGatewayGroupResponse = UpdateGatewayGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGatewayGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateGatewayGroupResponse_httpStatus' - The response's http status code.
+newUpdateGatewayGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateGatewayGroupResponse
+newUpdateGatewayGroupResponse pHttpStatus_ =
+  UpdateGatewayGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateGatewayGroupResponse_httpStatus :: Lens.Lens' UpdateGatewayGroupResponse Prelude.Int
+updateGatewayGroupResponse_httpStatus = Lens.lens (\UpdateGatewayGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateGatewayGroupResponse' {} a -> s {httpStatus = a} :: UpdateGatewayGroupResponse)
+
+instance Prelude.NFData UpdateGatewayGroupResponse where
+  rnf UpdateGatewayGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateNetworkProfile.hs b/gen/Amazonka/AlexaBusiness/UpdateNetworkProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateNetworkProfile.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateNetworkProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a network profile by the network profile ARN.
+module Amazonka.AlexaBusiness.UpdateNetworkProfile
+  ( -- * Creating a Request
+    UpdateNetworkProfile (..),
+    newUpdateNetworkProfile,
+
+    -- * Request Lenses
+    updateNetworkProfile_certificateAuthorityArn,
+    updateNetworkProfile_currentPassword,
+    updateNetworkProfile_description,
+    updateNetworkProfile_networkProfileName,
+    updateNetworkProfile_nextPassword,
+    updateNetworkProfile_trustAnchors,
+    updateNetworkProfile_networkProfileArn,
+
+    -- * Destructuring the Response
+    UpdateNetworkProfileResponse (..),
+    newUpdateNetworkProfileResponse,
+
+    -- * Response Lenses
+    updateNetworkProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateNetworkProfile' smart constructor.
+data UpdateNetworkProfile = UpdateNetworkProfile'
+  { -- | The ARN of the Private Certificate Authority (PCA) created in AWS
+    -- Certificate Manager (ACM). This is used to issue certificates to the
+    -- devices.
+    certificateAuthorityArn :: Prelude.Maybe Prelude.Text,
+    -- | The current password of the Wi-Fi network.
+    currentPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Detailed information about a device\'s network profile.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the network profile associated with a device.
+    networkProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The next, or subsequent, password of the Wi-Fi network. This password is
+    -- asynchronously transmitted to the device and is used when the password
+    -- of the network changes to NextPassword.
+    nextPassword :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The root certificate(s) of your authentication server that will be
+    -- installed on your devices and used to trust your authentication server
+    -- during EAP negotiation.
+    trustAnchors :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ARN of the network profile associated with a device.
+    networkProfileArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNetworkProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateAuthorityArn', 'updateNetworkProfile_certificateAuthorityArn' - The ARN of the Private Certificate Authority (PCA) created in AWS
+-- Certificate Manager (ACM). This is used to issue certificates to the
+-- devices.
+--
+-- 'currentPassword', 'updateNetworkProfile_currentPassword' - The current password of the Wi-Fi network.
+--
+-- 'description', 'updateNetworkProfile_description' - Detailed information about a device\'s network profile.
+--
+-- 'networkProfileName', 'updateNetworkProfile_networkProfileName' - The name of the network profile associated with a device.
+--
+-- 'nextPassword', 'updateNetworkProfile_nextPassword' - The next, or subsequent, password of the Wi-Fi network. This password is
+-- asynchronously transmitted to the device and is used when the password
+-- of the network changes to NextPassword.
+--
+-- 'trustAnchors', 'updateNetworkProfile_trustAnchors' - The root certificate(s) of your authentication server that will be
+-- installed on your devices and used to trust your authentication server
+-- during EAP negotiation.
+--
+-- 'networkProfileArn', 'updateNetworkProfile_networkProfileArn' - The ARN of the network profile associated with a device.
+newUpdateNetworkProfile ::
+  -- | 'networkProfileArn'
+  Prelude.Text ->
+  UpdateNetworkProfile
+newUpdateNetworkProfile pNetworkProfileArn_ =
+  UpdateNetworkProfile'
+    { certificateAuthorityArn =
+        Prelude.Nothing,
+      currentPassword = Prelude.Nothing,
+      description = Prelude.Nothing,
+      networkProfileName = Prelude.Nothing,
+      nextPassword = Prelude.Nothing,
+      trustAnchors = Prelude.Nothing,
+      networkProfileArn = pNetworkProfileArn_
+    }
+
+-- | The ARN of the Private Certificate Authority (PCA) created in AWS
+-- Certificate Manager (ACM). This is used to issue certificates to the
+-- devices.
+updateNetworkProfile_certificateAuthorityArn :: Lens.Lens' UpdateNetworkProfile (Prelude.Maybe Prelude.Text)
+updateNetworkProfile_certificateAuthorityArn = Lens.lens (\UpdateNetworkProfile' {certificateAuthorityArn} -> certificateAuthorityArn) (\s@UpdateNetworkProfile' {} a -> s {certificateAuthorityArn = a} :: UpdateNetworkProfile)
+
+-- | The current password of the Wi-Fi network.
+updateNetworkProfile_currentPassword :: Lens.Lens' UpdateNetworkProfile (Prelude.Maybe Prelude.Text)
+updateNetworkProfile_currentPassword = Lens.lens (\UpdateNetworkProfile' {currentPassword} -> currentPassword) (\s@UpdateNetworkProfile' {} a -> s {currentPassword = a} :: UpdateNetworkProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Detailed information about a device\'s network profile.
+updateNetworkProfile_description :: Lens.Lens' UpdateNetworkProfile (Prelude.Maybe Prelude.Text)
+updateNetworkProfile_description = Lens.lens (\UpdateNetworkProfile' {description} -> description) (\s@UpdateNetworkProfile' {} a -> s {description = a} :: UpdateNetworkProfile)
+
+-- | The name of the network profile associated with a device.
+updateNetworkProfile_networkProfileName :: Lens.Lens' UpdateNetworkProfile (Prelude.Maybe Prelude.Text)
+updateNetworkProfile_networkProfileName = Lens.lens (\UpdateNetworkProfile' {networkProfileName} -> networkProfileName) (\s@UpdateNetworkProfile' {} a -> s {networkProfileName = a} :: UpdateNetworkProfile)
+
+-- | The next, or subsequent, password of the Wi-Fi network. This password is
+-- asynchronously transmitted to the device and is used when the password
+-- of the network changes to NextPassword.
+updateNetworkProfile_nextPassword :: Lens.Lens' UpdateNetworkProfile (Prelude.Maybe Prelude.Text)
+updateNetworkProfile_nextPassword = Lens.lens (\UpdateNetworkProfile' {nextPassword} -> nextPassword) (\s@UpdateNetworkProfile' {} a -> s {nextPassword = a} :: UpdateNetworkProfile) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The root certificate(s) of your authentication server that will be
+-- installed on your devices and used to trust your authentication server
+-- during EAP negotiation.
+updateNetworkProfile_trustAnchors :: Lens.Lens' UpdateNetworkProfile (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateNetworkProfile_trustAnchors = Lens.lens (\UpdateNetworkProfile' {trustAnchors} -> trustAnchors) (\s@UpdateNetworkProfile' {} a -> s {trustAnchors = a} :: UpdateNetworkProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the network profile associated with a device.
+updateNetworkProfile_networkProfileArn :: Lens.Lens' UpdateNetworkProfile Prelude.Text
+updateNetworkProfile_networkProfileArn = Lens.lens (\UpdateNetworkProfile' {networkProfileArn} -> networkProfileArn) (\s@UpdateNetworkProfile' {} a -> s {networkProfileArn = a} :: UpdateNetworkProfile)
+
+instance Core.AWSRequest UpdateNetworkProfile where
+  type
+    AWSResponse UpdateNetworkProfile =
+      UpdateNetworkProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateNetworkProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateNetworkProfile where
+  hashWithSalt _salt UpdateNetworkProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateAuthorityArn
+      `Prelude.hashWithSalt` currentPassword
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` networkProfileName
+      `Prelude.hashWithSalt` nextPassword
+      `Prelude.hashWithSalt` trustAnchors
+      `Prelude.hashWithSalt` networkProfileArn
+
+instance Prelude.NFData UpdateNetworkProfile where
+  rnf UpdateNetworkProfile' {..} =
+    Prelude.rnf certificateAuthorityArn
+      `Prelude.seq` Prelude.rnf currentPassword
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf networkProfileName
+      `Prelude.seq` Prelude.rnf nextPassword
+      `Prelude.seq` Prelude.rnf trustAnchors
+      `Prelude.seq` Prelude.rnf networkProfileArn
+
+instance Data.ToHeaders UpdateNetworkProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateNetworkProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateNetworkProfile where
+  toJSON UpdateNetworkProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CertificateAuthorityArn" Data..=)
+              Prelude.<$> certificateAuthorityArn,
+            ("CurrentPassword" Data..=)
+              Prelude.<$> currentPassword,
+            ("Description" Data..=) Prelude.<$> description,
+            ("NetworkProfileName" Data..=)
+              Prelude.<$> networkProfileName,
+            ("NextPassword" Data..=) Prelude.<$> nextPassword,
+            ("TrustAnchors" Data..=) Prelude.<$> trustAnchors,
+            Prelude.Just
+              ("NetworkProfileArn" Data..= networkProfileArn)
+          ]
+      )
+
+instance Data.ToPath UpdateNetworkProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateNetworkProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateNetworkProfileResponse' smart constructor.
+data UpdateNetworkProfileResponse = UpdateNetworkProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNetworkProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateNetworkProfileResponse_httpStatus' - The response's http status code.
+newUpdateNetworkProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateNetworkProfileResponse
+newUpdateNetworkProfileResponse pHttpStatus_ =
+  UpdateNetworkProfileResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateNetworkProfileResponse_httpStatus :: Lens.Lens' UpdateNetworkProfileResponse Prelude.Int
+updateNetworkProfileResponse_httpStatus = Lens.lens (\UpdateNetworkProfileResponse' {httpStatus} -> httpStatus) (\s@UpdateNetworkProfileResponse' {} a -> s {httpStatus = a} :: UpdateNetworkProfileResponse)
+
+instance Prelude.NFData UpdateNetworkProfileResponse where
+  rnf UpdateNetworkProfileResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateProfile.hs b/gen/Amazonka/AlexaBusiness/UpdateProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateProfile.hs
@@ -0,0 +1,336 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing room profile by room profile ARN.
+module Amazonka.AlexaBusiness.UpdateProfile
+  ( -- * Creating a Request
+    UpdateProfile (..),
+    newUpdateProfile,
+
+    -- * Request Lenses
+    updateProfile_address,
+    updateProfile_dataRetentionOptIn,
+    updateProfile_distanceUnit,
+    updateProfile_isDefault,
+    updateProfile_locale,
+    updateProfile_maxVolumeLimit,
+    updateProfile_meetingRoomConfiguration,
+    updateProfile_pSTNEnabled,
+    updateProfile_profileArn,
+    updateProfile_profileName,
+    updateProfile_setupModeDisabled,
+    updateProfile_temperatureUnit,
+    updateProfile_timezone,
+    updateProfile_wakeWord,
+
+    -- * Destructuring the Response
+    UpdateProfileResponse (..),
+    newUpdateProfileResponse,
+
+    -- * Response Lenses
+    updateProfileResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateProfile' smart constructor.
+data UpdateProfile = UpdateProfile'
+  { -- | The updated address for the room profile.
+    address :: Prelude.Maybe Prelude.Text,
+    -- | Whether data retention of the profile is enabled.
+    dataRetentionOptIn :: Prelude.Maybe Prelude.Bool,
+    -- | The updated distance unit for the room profile.
+    distanceUnit :: Prelude.Maybe DistanceUnit,
+    -- | Sets the profile as default if selected. If this is missing, no update
+    -- is done to the default status.
+    isDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The updated locale for the room profile. (This is currently only
+    -- available to a limited preview audience.)
+    locale :: Prelude.Maybe Prelude.Text,
+    -- | The updated maximum volume limit for the room profile.
+    maxVolumeLimit :: Prelude.Maybe Prelude.Int,
+    -- | The updated meeting room settings of a room profile.
+    meetingRoomConfiguration :: Prelude.Maybe UpdateMeetingRoomConfiguration,
+    -- | Whether the PSTN setting of the room profile is enabled.
+    pSTNEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The ARN of the room profile to update. Required.
+    profileArn :: Prelude.Maybe Prelude.Text,
+    -- | The updated name for the room profile.
+    profileName :: Prelude.Maybe Prelude.Text,
+    -- | Whether the setup mode of the profile is enabled.
+    setupModeDisabled :: Prelude.Maybe Prelude.Bool,
+    -- | The updated temperature unit for the room profile.
+    temperatureUnit :: Prelude.Maybe TemperatureUnit,
+    -- | The updated timezone for the room profile.
+    timezone :: Prelude.Maybe Prelude.Text,
+    -- | The updated wake word for the room profile.
+    wakeWord :: Prelude.Maybe WakeWord
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'updateProfile_address' - The updated address for the room profile.
+--
+-- 'dataRetentionOptIn', 'updateProfile_dataRetentionOptIn' - Whether data retention of the profile is enabled.
+--
+-- 'distanceUnit', 'updateProfile_distanceUnit' - The updated distance unit for the room profile.
+--
+-- 'isDefault', 'updateProfile_isDefault' - Sets the profile as default if selected. If this is missing, no update
+-- is done to the default status.
+--
+-- 'locale', 'updateProfile_locale' - The updated locale for the room profile. (This is currently only
+-- available to a limited preview audience.)
+--
+-- 'maxVolumeLimit', 'updateProfile_maxVolumeLimit' - The updated maximum volume limit for the room profile.
+--
+-- 'meetingRoomConfiguration', 'updateProfile_meetingRoomConfiguration' - The updated meeting room settings of a room profile.
+--
+-- 'pSTNEnabled', 'updateProfile_pSTNEnabled' - Whether the PSTN setting of the room profile is enabled.
+--
+-- 'profileArn', 'updateProfile_profileArn' - The ARN of the room profile to update. Required.
+--
+-- 'profileName', 'updateProfile_profileName' - The updated name for the room profile.
+--
+-- 'setupModeDisabled', 'updateProfile_setupModeDisabled' - Whether the setup mode of the profile is enabled.
+--
+-- 'temperatureUnit', 'updateProfile_temperatureUnit' - The updated temperature unit for the room profile.
+--
+-- 'timezone', 'updateProfile_timezone' - The updated timezone for the room profile.
+--
+-- 'wakeWord', 'updateProfile_wakeWord' - The updated wake word for the room profile.
+newUpdateProfile ::
+  UpdateProfile
+newUpdateProfile =
+  UpdateProfile'
+    { address = Prelude.Nothing,
+      dataRetentionOptIn = Prelude.Nothing,
+      distanceUnit = Prelude.Nothing,
+      isDefault = Prelude.Nothing,
+      locale = Prelude.Nothing,
+      maxVolumeLimit = Prelude.Nothing,
+      meetingRoomConfiguration = Prelude.Nothing,
+      pSTNEnabled = Prelude.Nothing,
+      profileArn = Prelude.Nothing,
+      profileName = Prelude.Nothing,
+      setupModeDisabled = Prelude.Nothing,
+      temperatureUnit = Prelude.Nothing,
+      timezone = Prelude.Nothing,
+      wakeWord = Prelude.Nothing
+    }
+
+-- | The updated address for the room profile.
+updateProfile_address :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_address = Lens.lens (\UpdateProfile' {address} -> address) (\s@UpdateProfile' {} a -> s {address = a} :: UpdateProfile)
+
+-- | Whether data retention of the profile is enabled.
+updateProfile_dataRetentionOptIn :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Bool)
+updateProfile_dataRetentionOptIn = Lens.lens (\UpdateProfile' {dataRetentionOptIn} -> dataRetentionOptIn) (\s@UpdateProfile' {} a -> s {dataRetentionOptIn = a} :: UpdateProfile)
+
+-- | The updated distance unit for the room profile.
+updateProfile_distanceUnit :: Lens.Lens' UpdateProfile (Prelude.Maybe DistanceUnit)
+updateProfile_distanceUnit = Lens.lens (\UpdateProfile' {distanceUnit} -> distanceUnit) (\s@UpdateProfile' {} a -> s {distanceUnit = a} :: UpdateProfile)
+
+-- | Sets the profile as default if selected. If this is missing, no update
+-- is done to the default status.
+updateProfile_isDefault :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Bool)
+updateProfile_isDefault = Lens.lens (\UpdateProfile' {isDefault} -> isDefault) (\s@UpdateProfile' {} a -> s {isDefault = a} :: UpdateProfile)
+
+-- | The updated locale for the room profile. (This is currently only
+-- available to a limited preview audience.)
+updateProfile_locale :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_locale = Lens.lens (\UpdateProfile' {locale} -> locale) (\s@UpdateProfile' {} a -> s {locale = a} :: UpdateProfile)
+
+-- | The updated maximum volume limit for the room profile.
+updateProfile_maxVolumeLimit :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Int)
+updateProfile_maxVolumeLimit = Lens.lens (\UpdateProfile' {maxVolumeLimit} -> maxVolumeLimit) (\s@UpdateProfile' {} a -> s {maxVolumeLimit = a} :: UpdateProfile)
+
+-- | The updated meeting room settings of a room profile.
+updateProfile_meetingRoomConfiguration :: Lens.Lens' UpdateProfile (Prelude.Maybe UpdateMeetingRoomConfiguration)
+updateProfile_meetingRoomConfiguration = Lens.lens (\UpdateProfile' {meetingRoomConfiguration} -> meetingRoomConfiguration) (\s@UpdateProfile' {} a -> s {meetingRoomConfiguration = a} :: UpdateProfile)
+
+-- | Whether the PSTN setting of the room profile is enabled.
+updateProfile_pSTNEnabled :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Bool)
+updateProfile_pSTNEnabled = Lens.lens (\UpdateProfile' {pSTNEnabled} -> pSTNEnabled) (\s@UpdateProfile' {} a -> s {pSTNEnabled = a} :: UpdateProfile)
+
+-- | The ARN of the room profile to update. Required.
+updateProfile_profileArn :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_profileArn = Lens.lens (\UpdateProfile' {profileArn} -> profileArn) (\s@UpdateProfile' {} a -> s {profileArn = a} :: UpdateProfile)
+
+-- | The updated name for the room profile.
+updateProfile_profileName :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_profileName = Lens.lens (\UpdateProfile' {profileName} -> profileName) (\s@UpdateProfile' {} a -> s {profileName = a} :: UpdateProfile)
+
+-- | Whether the setup mode of the profile is enabled.
+updateProfile_setupModeDisabled :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Bool)
+updateProfile_setupModeDisabled = Lens.lens (\UpdateProfile' {setupModeDisabled} -> setupModeDisabled) (\s@UpdateProfile' {} a -> s {setupModeDisabled = a} :: UpdateProfile)
+
+-- | The updated temperature unit for the room profile.
+updateProfile_temperatureUnit :: Lens.Lens' UpdateProfile (Prelude.Maybe TemperatureUnit)
+updateProfile_temperatureUnit = Lens.lens (\UpdateProfile' {temperatureUnit} -> temperatureUnit) (\s@UpdateProfile' {} a -> s {temperatureUnit = a} :: UpdateProfile)
+
+-- | The updated timezone for the room profile.
+updateProfile_timezone :: Lens.Lens' UpdateProfile (Prelude.Maybe Prelude.Text)
+updateProfile_timezone = Lens.lens (\UpdateProfile' {timezone} -> timezone) (\s@UpdateProfile' {} a -> s {timezone = a} :: UpdateProfile)
+
+-- | The updated wake word for the room profile.
+updateProfile_wakeWord :: Lens.Lens' UpdateProfile (Prelude.Maybe WakeWord)
+updateProfile_wakeWord = Lens.lens (\UpdateProfile' {wakeWord} -> wakeWord) (\s@UpdateProfile' {} a -> s {wakeWord = a} :: UpdateProfile)
+
+instance Core.AWSRequest UpdateProfile where
+  type
+    AWSResponse UpdateProfile =
+      UpdateProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateProfile where
+  hashWithSalt _salt UpdateProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` dataRetentionOptIn
+      `Prelude.hashWithSalt` distanceUnit
+      `Prelude.hashWithSalt` isDefault
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` maxVolumeLimit
+      `Prelude.hashWithSalt` meetingRoomConfiguration
+      `Prelude.hashWithSalt` pSTNEnabled
+      `Prelude.hashWithSalt` profileArn
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` setupModeDisabled
+      `Prelude.hashWithSalt` temperatureUnit
+      `Prelude.hashWithSalt` timezone
+      `Prelude.hashWithSalt` wakeWord
+
+instance Prelude.NFData UpdateProfile where
+  rnf UpdateProfile' {..} =
+    Prelude.rnf address
+      `Prelude.seq` Prelude.rnf dataRetentionOptIn
+      `Prelude.seq` Prelude.rnf distanceUnit
+      `Prelude.seq` Prelude.rnf isDefault
+      `Prelude.seq` Prelude.rnf locale
+      `Prelude.seq` Prelude.rnf maxVolumeLimit
+      `Prelude.seq` Prelude.rnf meetingRoomConfiguration
+      `Prelude.seq` Prelude.rnf pSTNEnabled
+      `Prelude.seq` Prelude.rnf profileArn
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf setupModeDisabled
+      `Prelude.seq` Prelude.rnf temperatureUnit
+      `Prelude.seq` Prelude.rnf timezone
+      `Prelude.seq` Prelude.rnf wakeWord
+
+instance Data.ToHeaders UpdateProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateProfile" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateProfile where
+  toJSON UpdateProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Address" Data..=) Prelude.<$> address,
+            ("DataRetentionOptIn" Data..=)
+              Prelude.<$> dataRetentionOptIn,
+            ("DistanceUnit" Data..=) Prelude.<$> distanceUnit,
+            ("IsDefault" Data..=) Prelude.<$> isDefault,
+            ("Locale" Data..=) Prelude.<$> locale,
+            ("MaxVolumeLimit" Data..=)
+              Prelude.<$> maxVolumeLimit,
+            ("MeetingRoomConfiguration" Data..=)
+              Prelude.<$> meetingRoomConfiguration,
+            ("PSTNEnabled" Data..=) Prelude.<$> pSTNEnabled,
+            ("ProfileArn" Data..=) Prelude.<$> profileArn,
+            ("ProfileName" Data..=) Prelude.<$> profileName,
+            ("SetupModeDisabled" Data..=)
+              Prelude.<$> setupModeDisabled,
+            ("TemperatureUnit" Data..=)
+              Prelude.<$> temperatureUnit,
+            ("Timezone" Data..=) Prelude.<$> timezone,
+            ("WakeWord" Data..=) Prelude.<$> wakeWord
+          ]
+      )
+
+instance Data.ToPath UpdateProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateProfileResponse' smart constructor.
+data UpdateProfileResponse = UpdateProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateProfileResponse_httpStatus' - The response's http status code.
+newUpdateProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateProfileResponse
+newUpdateProfileResponse pHttpStatus_ =
+  UpdateProfileResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateProfileResponse_httpStatus :: Lens.Lens' UpdateProfileResponse Prelude.Int
+updateProfileResponse_httpStatus = Lens.lens (\UpdateProfileResponse' {httpStatus} -> httpStatus) (\s@UpdateProfileResponse' {} a -> s {httpStatus = a} :: UpdateProfileResponse)
+
+instance Prelude.NFData UpdateProfileResponse where
+  rnf UpdateProfileResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateRoom.hs b/gen/Amazonka/AlexaBusiness/UpdateRoom.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateRoom.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateRoom
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates room details by room ARN.
+module Amazonka.AlexaBusiness.UpdateRoom
+  ( -- * Creating a Request
+    UpdateRoom (..),
+    newUpdateRoom,
+
+    -- * Request Lenses
+    updateRoom_description,
+    updateRoom_profileArn,
+    updateRoom_providerCalendarId,
+    updateRoom_roomArn,
+    updateRoom_roomName,
+
+    -- * Destructuring the Response
+    UpdateRoomResponse (..),
+    newUpdateRoomResponse,
+
+    -- * Response Lenses
+    updateRoomResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRoom' smart constructor.
+data UpdateRoom = UpdateRoom'
+  { -- | The updated description for the room.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The updated profile ARN for the room.
+    profileArn :: Prelude.Maybe Prelude.Text,
+    -- | The updated provider calendar ARN for the room.
+    providerCalendarId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the room to update.
+    roomArn :: Prelude.Maybe Prelude.Text,
+    -- | The updated name for the room.
+    roomName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRoom' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateRoom_description' - The updated description for the room.
+--
+-- 'profileArn', 'updateRoom_profileArn' - The updated profile ARN for the room.
+--
+-- 'providerCalendarId', 'updateRoom_providerCalendarId' - The updated provider calendar ARN for the room.
+--
+-- 'roomArn', 'updateRoom_roomArn' - The ARN of the room to update.
+--
+-- 'roomName', 'updateRoom_roomName' - The updated name for the room.
+newUpdateRoom ::
+  UpdateRoom
+newUpdateRoom =
+  UpdateRoom'
+    { description = Prelude.Nothing,
+      profileArn = Prelude.Nothing,
+      providerCalendarId = Prelude.Nothing,
+      roomArn = Prelude.Nothing,
+      roomName = Prelude.Nothing
+    }
+
+-- | The updated description for the room.
+updateRoom_description :: Lens.Lens' UpdateRoom (Prelude.Maybe Prelude.Text)
+updateRoom_description = Lens.lens (\UpdateRoom' {description} -> description) (\s@UpdateRoom' {} a -> s {description = a} :: UpdateRoom)
+
+-- | The updated profile ARN for the room.
+updateRoom_profileArn :: Lens.Lens' UpdateRoom (Prelude.Maybe Prelude.Text)
+updateRoom_profileArn = Lens.lens (\UpdateRoom' {profileArn} -> profileArn) (\s@UpdateRoom' {} a -> s {profileArn = a} :: UpdateRoom)
+
+-- | The updated provider calendar ARN for the room.
+updateRoom_providerCalendarId :: Lens.Lens' UpdateRoom (Prelude.Maybe Prelude.Text)
+updateRoom_providerCalendarId = Lens.lens (\UpdateRoom' {providerCalendarId} -> providerCalendarId) (\s@UpdateRoom' {} a -> s {providerCalendarId = a} :: UpdateRoom)
+
+-- | The ARN of the room to update.
+updateRoom_roomArn :: Lens.Lens' UpdateRoom (Prelude.Maybe Prelude.Text)
+updateRoom_roomArn = Lens.lens (\UpdateRoom' {roomArn} -> roomArn) (\s@UpdateRoom' {} a -> s {roomArn = a} :: UpdateRoom)
+
+-- | The updated name for the room.
+updateRoom_roomName :: Lens.Lens' UpdateRoom (Prelude.Maybe Prelude.Text)
+updateRoom_roomName = Lens.lens (\UpdateRoom' {roomName} -> roomName) (\s@UpdateRoom' {} a -> s {roomName = a} :: UpdateRoom)
+
+instance Core.AWSRequest UpdateRoom where
+  type AWSResponse UpdateRoom = UpdateRoomResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateRoomResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRoom where
+  hashWithSalt _salt UpdateRoom' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` profileArn
+      `Prelude.hashWithSalt` providerCalendarId
+      `Prelude.hashWithSalt` roomArn
+      `Prelude.hashWithSalt` roomName
+
+instance Prelude.NFData UpdateRoom where
+  rnf UpdateRoom' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf profileArn
+      `Prelude.seq` Prelude.rnf providerCalendarId
+      `Prelude.seq` Prelude.rnf roomArn
+      `Prelude.seq` Prelude.rnf roomName
+
+instance Data.ToHeaders UpdateRoom where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateRoom" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRoom where
+  toJSON UpdateRoom' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("ProfileArn" Data..=) Prelude.<$> profileArn,
+            ("ProviderCalendarId" Data..=)
+              Prelude.<$> providerCalendarId,
+            ("RoomArn" Data..=) Prelude.<$> roomArn,
+            ("RoomName" Data..=) Prelude.<$> roomName
+          ]
+      )
+
+instance Data.ToPath UpdateRoom where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateRoom where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRoomResponse' smart constructor.
+data UpdateRoomResponse = UpdateRoomResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRoomResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateRoomResponse_httpStatus' - The response's http status code.
+newUpdateRoomResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRoomResponse
+newUpdateRoomResponse pHttpStatus_ =
+  UpdateRoomResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateRoomResponse_httpStatus :: Lens.Lens' UpdateRoomResponse Prelude.Int
+updateRoomResponse_httpStatus = Lens.lens (\UpdateRoomResponse' {httpStatus} -> httpStatus) (\s@UpdateRoomResponse' {} a -> s {httpStatus = a} :: UpdateRoomResponse)
+
+instance Prelude.NFData UpdateRoomResponse where
+  rnf UpdateRoomResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/UpdateSkillGroup.hs b/gen/Amazonka/AlexaBusiness/UpdateSkillGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/UpdateSkillGroup.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.UpdateSkillGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates skill group details by skill group ARN.
+module Amazonka.AlexaBusiness.UpdateSkillGroup
+  ( -- * Creating a Request
+    UpdateSkillGroup (..),
+    newUpdateSkillGroup,
+
+    -- * Request Lenses
+    updateSkillGroup_description,
+    updateSkillGroup_skillGroupArn,
+    updateSkillGroup_skillGroupName,
+
+    -- * Destructuring the Response
+    UpdateSkillGroupResponse (..),
+    newUpdateSkillGroupResponse,
+
+    -- * Response Lenses
+    updateSkillGroupResponse_httpStatus,
+  )
+where
+
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSkillGroup' smart constructor.
+data UpdateSkillGroup = UpdateSkillGroup'
+  { -- | The updated description for the skill group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the skill group to update.
+    skillGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The updated name for the skill group.
+    skillGroupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSkillGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateSkillGroup_description' - The updated description for the skill group.
+--
+-- 'skillGroupArn', 'updateSkillGroup_skillGroupArn' - The ARN of the skill group to update.
+--
+-- 'skillGroupName', 'updateSkillGroup_skillGroupName' - The updated name for the skill group.
+newUpdateSkillGroup ::
+  UpdateSkillGroup
+newUpdateSkillGroup =
+  UpdateSkillGroup'
+    { description = Prelude.Nothing,
+      skillGroupArn = Prelude.Nothing,
+      skillGroupName = Prelude.Nothing
+    }
+
+-- | The updated description for the skill group.
+updateSkillGroup_description :: Lens.Lens' UpdateSkillGroup (Prelude.Maybe Prelude.Text)
+updateSkillGroup_description = Lens.lens (\UpdateSkillGroup' {description} -> description) (\s@UpdateSkillGroup' {} a -> s {description = a} :: UpdateSkillGroup)
+
+-- | The ARN of the skill group to update.
+updateSkillGroup_skillGroupArn :: Lens.Lens' UpdateSkillGroup (Prelude.Maybe Prelude.Text)
+updateSkillGroup_skillGroupArn = Lens.lens (\UpdateSkillGroup' {skillGroupArn} -> skillGroupArn) (\s@UpdateSkillGroup' {} a -> s {skillGroupArn = a} :: UpdateSkillGroup)
+
+-- | The updated name for the skill group.
+updateSkillGroup_skillGroupName :: Lens.Lens' UpdateSkillGroup (Prelude.Maybe Prelude.Text)
+updateSkillGroup_skillGroupName = Lens.lens (\UpdateSkillGroup' {skillGroupName} -> skillGroupName) (\s@UpdateSkillGroup' {} a -> s {skillGroupName = a} :: UpdateSkillGroup)
+
+instance Core.AWSRequest UpdateSkillGroup where
+  type
+    AWSResponse UpdateSkillGroup =
+      UpdateSkillGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateSkillGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateSkillGroup where
+  hashWithSalt _salt UpdateSkillGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` skillGroupArn
+      `Prelude.hashWithSalt` skillGroupName
+
+instance Prelude.NFData UpdateSkillGroup where
+  rnf UpdateSkillGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf skillGroupArn
+      `Prelude.seq` Prelude.rnf skillGroupName
+
+instance Data.ToHeaders UpdateSkillGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AlexaForBusiness.UpdateSkillGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSkillGroup where
+  toJSON UpdateSkillGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("SkillGroupArn" Data..=) Prelude.<$> skillGroupArn,
+            ("SkillGroupName" Data..=)
+              Prelude.<$> skillGroupName
+          ]
+      )
+
+instance Data.ToPath UpdateSkillGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateSkillGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSkillGroupResponse' smart constructor.
+data UpdateSkillGroupResponse = UpdateSkillGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSkillGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateSkillGroupResponse_httpStatus' - The response's http status code.
+newUpdateSkillGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSkillGroupResponse
+newUpdateSkillGroupResponse pHttpStatus_ =
+  UpdateSkillGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateSkillGroupResponse_httpStatus :: Lens.Lens' UpdateSkillGroupResponse Prelude.Int
+updateSkillGroupResponse_httpStatus = Lens.lens (\UpdateSkillGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateSkillGroupResponse' {} a -> s {httpStatus = a} :: UpdateSkillGroupResponse)
+
+instance Prelude.NFData UpdateSkillGroupResponse where
+  rnf UpdateSkillGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AlexaBusiness/Waiters.hs b/gen/Amazonka/AlexaBusiness/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AlexaBusiness/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AlexaBusiness.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AlexaBusiness.Waiters where
+
+import Amazonka.AlexaBusiness.Lens
+import Amazonka.AlexaBusiness.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
diff --git a/gen/Network/AWS/AlexaBusiness.hs b/gen/Network/AWS/AlexaBusiness.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness.hs
+++ /dev/null
@@ -1,485 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AlexaBusiness
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Alexa for Business makes it easy for you to use Alexa in your organization. Alexa for Business gives you the tools you need for managing Alexa devices, enroll your users, and assign skills, at scale. You can build your own context-aware voice skills using the Alexa Skills Kit and the Alexa for Business API operations. You can make also these available as private skills for your organization. Alexa for Business makes it easy to voice-enable your products and services, providing context-aware voice experiences for your customers.
---
---
-module Network.AWS.AlexaBusiness
-    (
-    -- * Service Configuration
-      alexaBusiness
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidUserStatusException
-    , _InvalidUserStatusException
-
-    -- ** NotFoundException
-    , _NotFoundException
-
-    -- ** NameInUseException
-    , _NameInUseException
-
-    -- ** AlreadyExistsException
-    , _AlreadyExistsException
-
-    -- ** LimitExceededException
-    , _LimitExceededException
-
-    -- ** ResourceInUseException
-    , _ResourceInUseException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** SearchUsers (Paginated)
-    , module Network.AWS.AlexaBusiness.SearchUsers
-
-    -- ** AssociateSkillGroupWithRoom
-    , module Network.AWS.AlexaBusiness.AssociateSkillGroupWithRoom
-
-    -- ** DeleteProfile
-    , module Network.AWS.AlexaBusiness.DeleteProfile
-
-    -- ** UpdateProfile
-    , module Network.AWS.AlexaBusiness.UpdateProfile
-
-    -- ** SearchRooms (Paginated)
-    , module Network.AWS.AlexaBusiness.SearchRooms
-
-    -- ** DisassociateContactFromAddressBook
-    , module Network.AWS.AlexaBusiness.DisassociateContactFromAddressBook
-
-    -- ** CreateAddressBook
-    , module Network.AWS.AlexaBusiness.CreateAddressBook
-
-    -- ** DeleteAddressBook
-    , module Network.AWS.AlexaBusiness.DeleteAddressBook
-
-    -- ** UpdateAddressBook
-    , module Network.AWS.AlexaBusiness.UpdateAddressBook
-
-    -- ** UpdateRoom
-    , module Network.AWS.AlexaBusiness.UpdateRoom
-
-    -- ** DeleteRoom
-    , module Network.AWS.AlexaBusiness.DeleteRoom
-
-    -- ** GetDevice
-    , module Network.AWS.AlexaBusiness.GetDevice
-
-    -- ** GetContact
-    , module Network.AWS.AlexaBusiness.GetContact
-
-    -- ** AssociateDeviceWithRoom
-    , module Network.AWS.AlexaBusiness.AssociateDeviceWithRoom
-
-    -- ** GetRoomSkillParameter
-    , module Network.AWS.AlexaBusiness.GetRoomSkillParameter
-
-    -- ** DeleteContact
-    , module Network.AWS.AlexaBusiness.DeleteContact
-
-    -- ** UpdateContact
-    , module Network.AWS.AlexaBusiness.UpdateContact
-
-    -- ** GetAddressBook
-    , module Network.AWS.AlexaBusiness.GetAddressBook
-
-    -- ** CreateContact
-    , module Network.AWS.AlexaBusiness.CreateContact
-
-    -- ** CreateProfile
-    , module Network.AWS.AlexaBusiness.CreateProfile
-
-    -- ** DeleteSkillGroup
-    , module Network.AWS.AlexaBusiness.DeleteSkillGroup
-
-    -- ** UpdateSkillGroup
-    , module Network.AWS.AlexaBusiness.UpdateSkillGroup
-
-    -- ** StartDeviceSync
-    , module Network.AWS.AlexaBusiness.StartDeviceSync
-
-    -- ** SearchAddressBooks
-    , module Network.AWS.AlexaBusiness.SearchAddressBooks
-
-    -- ** CreateSkillGroup
-    , module Network.AWS.AlexaBusiness.CreateSkillGroup
-
-    -- ** GetProfile
-    , module Network.AWS.AlexaBusiness.GetProfile
-
-    -- ** DisassociateSkillGroupFromRoom
-    , module Network.AWS.AlexaBusiness.DisassociateSkillGroupFromRoom
-
-    -- ** SendInvitation
-    , module Network.AWS.AlexaBusiness.SendInvitation
-
-    -- ** ListDeviceEvents
-    , module Network.AWS.AlexaBusiness.ListDeviceEvents
-
-    -- ** CreateUser
-    , module Network.AWS.AlexaBusiness.CreateUser
-
-    -- ** SearchDevices (Paginated)
-    , module Network.AWS.AlexaBusiness.SearchDevices
-
-    -- ** SearchContacts
-    , module Network.AWS.AlexaBusiness.SearchContacts
-
-    -- ** DeleteUser
-    , module Network.AWS.AlexaBusiness.DeleteUser
-
-    -- ** GetSkillGroup
-    , module Network.AWS.AlexaBusiness.GetSkillGroup
-
-    -- ** ListSkills (Paginated)
-    , module Network.AWS.AlexaBusiness.ListSkills
-
-    -- ** TagResource
-    , module Network.AWS.AlexaBusiness.TagResource
-
-    -- ** DisassociateDeviceFromRoom
-    , module Network.AWS.AlexaBusiness.DisassociateDeviceFromRoom
-
-    -- ** SearchSkillGroups (Paginated)
-    , module Network.AWS.AlexaBusiness.SearchSkillGroups
-
-    -- ** ListTags (Paginated)
-    , module Network.AWS.AlexaBusiness.ListTags
-
-    -- ** UntagResource
-    , module Network.AWS.AlexaBusiness.UntagResource
-
-    -- ** ResolveRoom
-    , module Network.AWS.AlexaBusiness.ResolveRoom
-
-    -- ** CreateRoom
-    , module Network.AWS.AlexaBusiness.CreateRoom
-
-    -- ** DeleteRoomSkillParameter
-    , module Network.AWS.AlexaBusiness.DeleteRoomSkillParameter
-
-    -- ** PutRoomSkillParameter
-    , module Network.AWS.AlexaBusiness.PutRoomSkillParameter
-
-    -- ** SearchProfiles (Paginated)
-    , module Network.AWS.AlexaBusiness.SearchProfiles
-
-    -- ** RevokeInvitation
-    , module Network.AWS.AlexaBusiness.RevokeInvitation
-
-    -- ** UpdateDevice
-    , module Network.AWS.AlexaBusiness.UpdateDevice
-
-    -- ** GetRoom
-    , module Network.AWS.AlexaBusiness.GetRoom
-
-    -- ** AssociateContactWithAddressBook
-    , module Network.AWS.AlexaBusiness.AssociateContactWithAddressBook
-
-    -- * Types
-
-    -- ** ConnectionStatus
-    , ConnectionStatus (..)
-
-    -- ** DeviceEventType
-    , DeviceEventType (..)
-
-    -- ** DeviceStatus
-    , DeviceStatus (..)
-
-    -- ** DeviceStatusDetailCode
-    , DeviceStatusDetailCode (..)
-
-    -- ** DistanceUnit
-    , DistanceUnit (..)
-
-    -- ** EnrollmentStatus
-    , EnrollmentStatus (..)
-
-    -- ** Feature
-    , Feature (..)
-
-    -- ** SortValue
-    , SortValue (..)
-
-    -- ** TemperatureUnit
-    , TemperatureUnit (..)
-
-    -- ** WakeWord
-    , WakeWord (..)
-
-    -- ** AddressBook
-    , AddressBook
-    , addressBook
-    , abAddressBookARN
-    , abName
-    , abDescription
-
-    -- ** AddressBookData
-    , AddressBookData
-    , addressBookData
-    , abdAddressBookARN
-    , abdName
-    , abdDescription
-
-    -- ** Contact
-    , Contact
-    , contact
-    , cLastName
-    , cContactARN
-    , cPhoneNumber
-    , cFirstName
-    , cDisplayName
-
-    -- ** ContactData
-    , ContactData
-    , contactData
-    , cdLastName
-    , cdContactARN
-    , cdPhoneNumber
-    , cdFirstName
-    , cdDisplayName
-
-    -- ** Device
-    , Device
-    , device
-    , dDeviceStatus
-    , dDeviceStatusInfo
-    , dDeviceARN
-    , dMACAddress
-    , dDeviceName
-    , dRoomARN
-    , dSoftwareVersion
-    , dDeviceType
-    , dDeviceSerialNumber
-
-    -- ** DeviceData
-    , DeviceData
-    , deviceData
-    , ddDeviceStatus
-    , ddDeviceStatusInfo
-    , ddDeviceARN
-    , ddMACAddress
-    , ddDeviceName
-    , ddRoomARN
-    , ddSoftwareVersion
-    , ddDeviceType
-    , ddRoomName
-    , ddDeviceSerialNumber
-
-    -- ** DeviceEvent
-    , DeviceEvent
-    , deviceEvent
-    , deValue
-    , deType
-    , deTimestamp
-
-    -- ** DeviceStatusDetail
-    , DeviceStatusDetail
-    , deviceStatusDetail
-    , dsdCode
-
-    -- ** DeviceStatusInfo
-    , DeviceStatusInfo
-    , deviceStatusInfo
-    , dsiDeviceStatusDetails
-    , dsiConnectionStatus
-
-    -- ** Filter
-    , Filter
-    , filter'
-    , fKey
-    , fValues
-
-    -- ** Profile
-    , Profile
-    , profile
-    , pSetupModeDisabled
-    , pPSTNEnabled
-    , pDistanceUnit
-    , pAddress
-    , pProfileARN
-    , pWakeWord
-    , pProfileName
-    , pTemperatureUnit
-    , pTimezone
-    , pMaxVolumeLimit
-
-    -- ** ProfileData
-    , ProfileData
-    , profileData
-    , pdDistanceUnit
-    , pdAddress
-    , pdProfileARN
-    , pdWakeWord
-    , pdProfileName
-    , pdTemperatureUnit
-    , pdTimezone
-
-    -- ** Room
-    , Room
-    , room
-    , rProfileARN
-    , rProviderCalendarId
-    , rRoomARN
-    , rRoomName
-    , rDescription
-
-    -- ** RoomData
-    , RoomData
-    , roomData
-    , rdProfileARN
-    , rdProviderCalendarId
-    , rdProfileName
-    , rdRoomARN
-    , rdRoomName
-    , rdDescription
-
-    -- ** RoomSkillParameter
-    , RoomSkillParameter
-    , roomSkillParameter
-    , rspParameterKey
-    , rspParameterValue
-
-    -- ** SkillGroup
-    , SkillGroup
-    , skillGroup
-    , sgSkillGroupARN
-    , sgDescription
-    , sgSkillGroupName
-
-    -- ** SkillGroupData
-    , SkillGroupData
-    , skillGroupData
-    , sgdSkillGroupARN
-    , sgdDescription
-    , sgdSkillGroupName
-
-    -- ** SkillSummary
-    , SkillSummary
-    , skillSummary
-    , ssSkillId
-    , ssSupportsLinking
-    , ssSkillName
-
-    -- ** Sort
-    , Sort
-    , sort
-    , sKey
-    , sValue
-
-    -- ** Tag
-    , Tag
-    , tag
-    , tagValue
-    , tagKey
-
-    -- ** UserData
-    , UserData
-    , userData
-    , udEmail
-    , udLastName
-    , udEnrollmentId
-    , udUserARN
-    , udFirstName
-    , udEnrollmentStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.AssociateContactWithAddressBook
-import Network.AWS.AlexaBusiness.AssociateDeviceWithRoom
-import Network.AWS.AlexaBusiness.AssociateSkillGroupWithRoom
-import Network.AWS.AlexaBusiness.CreateAddressBook
-import Network.AWS.AlexaBusiness.CreateContact
-import Network.AWS.AlexaBusiness.CreateProfile
-import Network.AWS.AlexaBusiness.CreateRoom
-import Network.AWS.AlexaBusiness.CreateSkillGroup
-import Network.AWS.AlexaBusiness.CreateUser
-import Network.AWS.AlexaBusiness.DeleteAddressBook
-import Network.AWS.AlexaBusiness.DeleteContact
-import Network.AWS.AlexaBusiness.DeleteProfile
-import Network.AWS.AlexaBusiness.DeleteRoom
-import Network.AWS.AlexaBusiness.DeleteRoomSkillParameter
-import Network.AWS.AlexaBusiness.DeleteSkillGroup
-import Network.AWS.AlexaBusiness.DeleteUser
-import Network.AWS.AlexaBusiness.DisassociateContactFromAddressBook
-import Network.AWS.AlexaBusiness.DisassociateDeviceFromRoom
-import Network.AWS.AlexaBusiness.DisassociateSkillGroupFromRoom
-import Network.AWS.AlexaBusiness.GetAddressBook
-import Network.AWS.AlexaBusiness.GetContact
-import Network.AWS.AlexaBusiness.GetDevice
-import Network.AWS.AlexaBusiness.GetProfile
-import Network.AWS.AlexaBusiness.GetRoom
-import Network.AWS.AlexaBusiness.GetRoomSkillParameter
-import Network.AWS.AlexaBusiness.GetSkillGroup
-import Network.AWS.AlexaBusiness.ListDeviceEvents
-import Network.AWS.AlexaBusiness.ListSkills
-import Network.AWS.AlexaBusiness.ListTags
-import Network.AWS.AlexaBusiness.PutRoomSkillParameter
-import Network.AWS.AlexaBusiness.ResolveRoom
-import Network.AWS.AlexaBusiness.RevokeInvitation
-import Network.AWS.AlexaBusiness.SearchAddressBooks
-import Network.AWS.AlexaBusiness.SearchContacts
-import Network.AWS.AlexaBusiness.SearchDevices
-import Network.AWS.AlexaBusiness.SearchProfiles
-import Network.AWS.AlexaBusiness.SearchRooms
-import Network.AWS.AlexaBusiness.SearchSkillGroups
-import Network.AWS.AlexaBusiness.SearchUsers
-import Network.AWS.AlexaBusiness.SendInvitation
-import Network.AWS.AlexaBusiness.StartDeviceSync
-import Network.AWS.AlexaBusiness.TagResource
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.UntagResource
-import Network.AWS.AlexaBusiness.UpdateAddressBook
-import Network.AWS.AlexaBusiness.UpdateContact
-import Network.AWS.AlexaBusiness.UpdateDevice
-import Network.AWS.AlexaBusiness.UpdateProfile
-import Network.AWS.AlexaBusiness.UpdateRoom
-import Network.AWS.AlexaBusiness.UpdateSkillGroup
-import Network.AWS.AlexaBusiness.Waiters
-
-{- $errors
-Error matchers are designed for use with the functions provided by
-<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
-This allows catching (and rethrowing) service specific errors returned
-by 'AlexaBusiness'.
--}
-
-{- $operations
-Some AWS operations return results that are incomplete and require subsequent
-requests in order to obtain the entire result set. The process of sending
-subsequent requests to continue where a previous request left off is called
-pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
-1000 objects at a time, and you must send subsequent requests with the
-appropriate Marker in order to retrieve the next page of results.
-
-Operations that have an 'AWSPager' instance can transparently perform subsequent
-requests, correctly setting Markers and other request facets to iterate through
-the entire result set of a truncated API operation. Operations which support
-this have an additional note in the documentation.
-
-Many operations have the ability to filter results on the server side. See the
-individual operation parameters for details.
--}
-
-{- $waiters
-Waiters poll by repeatedly sending a request until some remote success condition
-configured by the 'Wait' specification is fulfilled. The 'Wait' specification
-determines how many attempts should be made, in addition to delay and retry strategies.
--}
diff --git a/gen/Network/AWS/AlexaBusiness/AssociateContactWithAddressBook.hs b/gen/Network/AWS/AlexaBusiness/AssociateContactWithAddressBook.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/AssociateContactWithAddressBook.hs
+++ /dev/null
@@ -1,144 +0,0 @@
-{-# 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.AlexaBusiness.AssociateContactWithAddressBook
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates a contact with a given address book.
---
---
-module Network.AWS.AlexaBusiness.AssociateContactWithAddressBook
-    (
-    -- * Creating a Request
-      associateContactWithAddressBook
-    , AssociateContactWithAddressBook
-    -- * Request Lenses
-    , acwabContactARN
-    , acwabAddressBookARN
-
-    -- * Destructuring the Response
-    , associateContactWithAddressBookResponse
-    , AssociateContactWithAddressBookResponse
-    -- * Response Lenses
-    , acwabrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'associateContactWithAddressBook' smart constructor.
-data AssociateContactWithAddressBook = AssociateContactWithAddressBook'
-  { _acwabContactARN     :: !Text
-  , _acwabAddressBookARN :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateContactWithAddressBook' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acwabContactARN' - The ARN of the contact to associate with an address book.
---
--- * 'acwabAddressBookARN' - The ARN of the address book with which to associate the contact.
-associateContactWithAddressBook
-    :: Text -- ^ 'acwabContactARN'
-    -> Text -- ^ 'acwabAddressBookARN'
-    -> AssociateContactWithAddressBook
-associateContactWithAddressBook pContactARN_ pAddressBookARN_ =
-  AssociateContactWithAddressBook'
-    {_acwabContactARN = pContactARN_, _acwabAddressBookARN = pAddressBookARN_}
-
-
--- | The ARN of the contact to associate with an address book.
-acwabContactARN :: Lens' AssociateContactWithAddressBook Text
-acwabContactARN = lens _acwabContactARN (\ s a -> s{_acwabContactARN = a})
-
--- | The ARN of the address book with which to associate the contact.
-acwabAddressBookARN :: Lens' AssociateContactWithAddressBook Text
-acwabAddressBookARN = lens _acwabAddressBookARN (\ s a -> s{_acwabAddressBookARN = a})
-
-instance AWSRequest AssociateContactWithAddressBook
-         where
-        type Rs AssociateContactWithAddressBook =
-             AssociateContactWithAddressBookResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 AssociateContactWithAddressBookResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable AssociateContactWithAddressBook
-         where
-
-instance NFData AssociateContactWithAddressBook where
-
-instance ToHeaders AssociateContactWithAddressBook
-         where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.AssociateContactWithAddressBook"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON AssociateContactWithAddressBook where
-        toJSON AssociateContactWithAddressBook'{..}
-          = object
-              (catMaybes
-                 [Just ("ContactArn" .= _acwabContactARN),
-                  Just ("AddressBookArn" .= _acwabAddressBookARN)])
-
-instance ToPath AssociateContactWithAddressBook where
-        toPath = const "/"
-
-instance ToQuery AssociateContactWithAddressBook
-         where
-        toQuery = const mempty
-
--- | /See:/ 'associateContactWithAddressBookResponse' smart constructor.
-newtype AssociateContactWithAddressBookResponse = AssociateContactWithAddressBookResponse'
-  { _acwabrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateContactWithAddressBookResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acwabrsResponseStatus' - -- | The response status code.
-associateContactWithAddressBookResponse
-    :: Int -- ^ 'acwabrsResponseStatus'
-    -> AssociateContactWithAddressBookResponse
-associateContactWithAddressBookResponse pResponseStatus_ =
-  AssociateContactWithAddressBookResponse'
-    {_acwabrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-acwabrsResponseStatus :: Lens' AssociateContactWithAddressBookResponse Int
-acwabrsResponseStatus = lens _acwabrsResponseStatus (\ s a -> s{_acwabrsResponseStatus = a})
-
-instance NFData
-           AssociateContactWithAddressBookResponse
-         where
diff --git a/gen/Network/AWS/AlexaBusiness/AssociateDeviceWithRoom.hs b/gen/Network/AWS/AlexaBusiness/AssociateDeviceWithRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/AssociateDeviceWithRoom.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# 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.AlexaBusiness.AssociateDeviceWithRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates a device with a given room. This applies all the settings from the room profile to the device, and all the skills in any skill groups added to that room. This operation requires the device to be online, or else a manual sync is required.
---
---
-module Network.AWS.AlexaBusiness.AssociateDeviceWithRoom
-    (
-    -- * Creating a Request
-      associateDeviceWithRoom
-    , AssociateDeviceWithRoom
-    -- * Request Lenses
-    , adwrDeviceARN
-    , adwrRoomARN
-
-    -- * Destructuring the Response
-    , associateDeviceWithRoomResponse
-    , AssociateDeviceWithRoomResponse
-    -- * Response Lenses
-    , adwrrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'associateDeviceWithRoom' smart constructor.
-data AssociateDeviceWithRoom = AssociateDeviceWithRoom'
-  { _adwrDeviceARN :: !(Maybe Text)
-  , _adwrRoomARN   :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateDeviceWithRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'adwrDeviceARN' - The ARN of the device to associate to a room. Required.
---
--- * 'adwrRoomARN' - The ARN of the room with which to associate the device. Required.
-associateDeviceWithRoom
-    :: AssociateDeviceWithRoom
-associateDeviceWithRoom =
-  AssociateDeviceWithRoom' {_adwrDeviceARN = Nothing, _adwrRoomARN = Nothing}
-
-
--- | The ARN of the device to associate to a room. Required.
-adwrDeviceARN :: Lens' AssociateDeviceWithRoom (Maybe Text)
-adwrDeviceARN = lens _adwrDeviceARN (\ s a -> s{_adwrDeviceARN = a})
-
--- | The ARN of the room with which to associate the device. Required.
-adwrRoomARN :: Lens' AssociateDeviceWithRoom (Maybe Text)
-adwrRoomARN = lens _adwrRoomARN (\ s a -> s{_adwrRoomARN = a})
-
-instance AWSRequest AssociateDeviceWithRoom where
-        type Rs AssociateDeviceWithRoom =
-             AssociateDeviceWithRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 AssociateDeviceWithRoomResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable AssociateDeviceWithRoom where
-
-instance NFData AssociateDeviceWithRoom where
-
-instance ToHeaders AssociateDeviceWithRoom where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.AssociateDeviceWithRoom" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON AssociateDeviceWithRoom where
-        toJSON AssociateDeviceWithRoom'{..}
-          = object
-              (catMaybes
-                 [("DeviceArn" .=) <$> _adwrDeviceARN,
-                  ("RoomArn" .=) <$> _adwrRoomARN])
-
-instance ToPath AssociateDeviceWithRoom where
-        toPath = const "/"
-
-instance ToQuery AssociateDeviceWithRoom where
-        toQuery = const mempty
-
--- | /See:/ 'associateDeviceWithRoomResponse' smart constructor.
-newtype AssociateDeviceWithRoomResponse = AssociateDeviceWithRoomResponse'
-  { _adwrrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateDeviceWithRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'adwrrsResponseStatus' - -- | The response status code.
-associateDeviceWithRoomResponse
-    :: Int -- ^ 'adwrrsResponseStatus'
-    -> AssociateDeviceWithRoomResponse
-associateDeviceWithRoomResponse pResponseStatus_ =
-  AssociateDeviceWithRoomResponse' {_adwrrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-adwrrsResponseStatus :: Lens' AssociateDeviceWithRoomResponse Int
-adwrrsResponseStatus = lens _adwrrsResponseStatus (\ s a -> s{_adwrrsResponseStatus = a})
-
-instance NFData AssociateDeviceWithRoomResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/AssociateSkillGroupWithRoom.hs b/gen/Network/AWS/AlexaBusiness/AssociateSkillGroupWithRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/AssociateSkillGroupWithRoom.hs
+++ /dev/null
@@ -1,137 +0,0 @@
-{-# 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.AlexaBusiness.AssociateSkillGroupWithRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates a skill group with a given room. This enables all skills in the associated skill group on all devices in the room.
---
---
-module Network.AWS.AlexaBusiness.AssociateSkillGroupWithRoom
-    (
-    -- * Creating a Request
-      associateSkillGroupWithRoom
-    , AssociateSkillGroupWithRoom
-    -- * Request Lenses
-    , asgwrSkillGroupARN
-    , asgwrRoomARN
-
-    -- * Destructuring the Response
-    , associateSkillGroupWithRoomResponse
-    , AssociateSkillGroupWithRoomResponse
-    -- * Response Lenses
-    , asgwrrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'associateSkillGroupWithRoom' smart constructor.
-data AssociateSkillGroupWithRoom = AssociateSkillGroupWithRoom'
-  { _asgwrSkillGroupARN :: !(Maybe Text)
-  , _asgwrRoomARN       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateSkillGroupWithRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asgwrSkillGroupARN' - The ARN of the skill group to associate with a room. Required.
---
--- * 'asgwrRoomARN' - The ARN of the room with which to associate the skill group. Required.
-associateSkillGroupWithRoom
-    :: AssociateSkillGroupWithRoom
-associateSkillGroupWithRoom =
-  AssociateSkillGroupWithRoom'
-    {_asgwrSkillGroupARN = Nothing, _asgwrRoomARN = Nothing}
-
-
--- | The ARN of the skill group to associate with a room. Required.
-asgwrSkillGroupARN :: Lens' AssociateSkillGroupWithRoom (Maybe Text)
-asgwrSkillGroupARN = lens _asgwrSkillGroupARN (\ s a -> s{_asgwrSkillGroupARN = a})
-
--- | The ARN of the room with which to associate the skill group. Required.
-asgwrRoomARN :: Lens' AssociateSkillGroupWithRoom (Maybe Text)
-asgwrRoomARN = lens _asgwrRoomARN (\ s a -> s{_asgwrRoomARN = a})
-
-instance AWSRequest AssociateSkillGroupWithRoom where
-        type Rs AssociateSkillGroupWithRoom =
-             AssociateSkillGroupWithRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 AssociateSkillGroupWithRoomResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable AssociateSkillGroupWithRoom where
-
-instance NFData AssociateSkillGroupWithRoom where
-
-instance ToHeaders AssociateSkillGroupWithRoom where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.AssociateSkillGroupWithRoom" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON AssociateSkillGroupWithRoom where
-        toJSON AssociateSkillGroupWithRoom'{..}
-          = object
-              (catMaybes
-                 [("SkillGroupArn" .=) <$> _asgwrSkillGroupARN,
-                  ("RoomArn" .=) <$> _asgwrRoomARN])
-
-instance ToPath AssociateSkillGroupWithRoom where
-        toPath = const "/"
-
-instance ToQuery AssociateSkillGroupWithRoom where
-        toQuery = const mempty
-
--- | /See:/ 'associateSkillGroupWithRoomResponse' smart constructor.
-newtype AssociateSkillGroupWithRoomResponse = AssociateSkillGroupWithRoomResponse'
-  { _asgwrrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateSkillGroupWithRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asgwrrsResponseStatus' - -- | The response status code.
-associateSkillGroupWithRoomResponse
-    :: Int -- ^ 'asgwrrsResponseStatus'
-    -> AssociateSkillGroupWithRoomResponse
-associateSkillGroupWithRoomResponse pResponseStatus_ =
-  AssociateSkillGroupWithRoomResponse'
-    {_asgwrrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-asgwrrsResponseStatus :: Lens' AssociateSkillGroupWithRoomResponse Int
-asgwrrsResponseStatus = lens _asgwrrsResponseStatus (\ s a -> s{_asgwrrsResponseStatus = a})
-
-instance NFData AssociateSkillGroupWithRoomResponse
-         where
diff --git a/gen/Network/AWS/AlexaBusiness/CreateAddressBook.hs b/gen/Network/AWS/AlexaBusiness/CreateAddressBook.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/CreateAddressBook.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# 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.AlexaBusiness.CreateAddressBook
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an address book with the specified details.
---
---
-module Network.AWS.AlexaBusiness.CreateAddressBook
-    (
-    -- * Creating a Request
-      createAddressBook
-    , CreateAddressBook
-    -- * Request Lenses
-    , cabClientRequestToken
-    , cabDescription
-    , cabName
-
-    -- * Destructuring the Response
-    , createAddressBookResponse
-    , CreateAddressBookResponse
-    -- * Response Lenses
-    , cabrsAddressBookARN
-    , cabrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createAddressBook' smart constructor.
-data CreateAddressBook = CreateAddressBook'
-  { _cabClientRequestToken :: !(Maybe Text)
-  , _cabDescription        :: !(Maybe Text)
-  , _cabName               :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateAddressBook' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cabClientRequestToken' - A unique, user-specified identifier for the request that ensures idempotency.
---
--- * 'cabDescription' - The description of the address book.
---
--- * 'cabName' - The name of the address book.
-createAddressBook
-    :: Text -- ^ 'cabName'
-    -> CreateAddressBook
-createAddressBook pName_ =
-  CreateAddressBook'
-    { _cabClientRequestToken = Nothing
-    , _cabDescription = Nothing
-    , _cabName = pName_
-    }
-
-
--- | A unique, user-specified identifier for the request that ensures idempotency.
-cabClientRequestToken :: Lens' CreateAddressBook (Maybe Text)
-cabClientRequestToken = lens _cabClientRequestToken (\ s a -> s{_cabClientRequestToken = a})
-
--- | The description of the address book.
-cabDescription :: Lens' CreateAddressBook (Maybe Text)
-cabDescription = lens _cabDescription (\ s a -> s{_cabDescription = a})
-
--- | The name of the address book.
-cabName :: Lens' CreateAddressBook Text
-cabName = lens _cabName (\ s a -> s{_cabName = a})
-
-instance AWSRequest CreateAddressBook where
-        type Rs CreateAddressBook = CreateAddressBookResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateAddressBookResponse' <$>
-                   (x .?> "AddressBookArn") <*> (pure (fromEnum s)))
-
-instance Hashable CreateAddressBook where
-
-instance NFData CreateAddressBook where
-
-instance ToHeaders CreateAddressBook where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.CreateAddressBook" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateAddressBook where
-        toJSON CreateAddressBook'{..}
-          = object
-              (catMaybes
-                 [("ClientRequestToken" .=) <$>
-                    _cabClientRequestToken,
-                  ("Description" .=) <$> _cabDescription,
-                  Just ("Name" .= _cabName)])
-
-instance ToPath CreateAddressBook where
-        toPath = const "/"
-
-instance ToQuery CreateAddressBook where
-        toQuery = const mempty
-
--- | /See:/ 'createAddressBookResponse' smart constructor.
-data CreateAddressBookResponse = CreateAddressBookResponse'
-  { _cabrsAddressBookARN :: !(Maybe Text)
-  , _cabrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateAddressBookResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cabrsAddressBookARN' - The ARN of the newly created address book.
---
--- * 'cabrsResponseStatus' - -- | The response status code.
-createAddressBookResponse
-    :: Int -- ^ 'cabrsResponseStatus'
-    -> CreateAddressBookResponse
-createAddressBookResponse pResponseStatus_ =
-  CreateAddressBookResponse'
-    {_cabrsAddressBookARN = Nothing, _cabrsResponseStatus = pResponseStatus_}
-
-
--- | The ARN of the newly created address book.
-cabrsAddressBookARN :: Lens' CreateAddressBookResponse (Maybe Text)
-cabrsAddressBookARN = lens _cabrsAddressBookARN (\ s a -> s{_cabrsAddressBookARN = a})
-
--- | -- | The response status code.
-cabrsResponseStatus :: Lens' CreateAddressBookResponse Int
-cabrsResponseStatus = lens _cabrsResponseStatus (\ s a -> s{_cabrsResponseStatus = a})
-
-instance NFData CreateAddressBookResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/CreateContact.hs b/gen/Network/AWS/AlexaBusiness/CreateContact.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/CreateContact.hs
+++ /dev/null
@@ -1,176 +0,0 @@
-{-# 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.AlexaBusiness.CreateContact
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a contact with the specified details.
---
---
-module Network.AWS.AlexaBusiness.CreateContact
-    (
-    -- * Creating a Request
-      createContact
-    , CreateContact
-    -- * Request Lenses
-    , ccLastName
-    , ccDisplayName
-    , ccClientRequestToken
-    , ccFirstName
-    , ccPhoneNumber
-
-    -- * Destructuring the Response
-    , createContactResponse
-    , CreateContactResponse
-    -- * Response Lenses
-    , ccrsContactARN
-    , ccrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createContact' smart constructor.
-data CreateContact = CreateContact'
-  { _ccLastName           :: !(Maybe Text)
-  , _ccDisplayName        :: !(Maybe Text)
-  , _ccClientRequestToken :: !(Maybe Text)
-  , _ccFirstName          :: !Text
-  , _ccPhoneNumber        :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateContact' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccLastName' - The last name of the contact that is used to call the contact on the device.
---
--- * 'ccDisplayName' - The name of the contact to display on the console.
---
--- * 'ccClientRequestToken' - A unique, user-specified identifier for this request that ensures idempotency.
---
--- * 'ccFirstName' - The first name of the contact that is used to call the contact on the device.
---
--- * 'ccPhoneNumber' - The phone number of the contact in E.164 format.
-createContact
-    :: Text -- ^ 'ccFirstName'
-    -> Text -- ^ 'ccPhoneNumber'
-    -> CreateContact
-createContact pFirstName_ pPhoneNumber_ =
-  CreateContact'
-    { _ccLastName = Nothing
-    , _ccDisplayName = Nothing
-    , _ccClientRequestToken = Nothing
-    , _ccFirstName = pFirstName_
-    , _ccPhoneNumber = pPhoneNumber_
-    }
-
-
--- | The last name of the contact that is used to call the contact on the device.
-ccLastName :: Lens' CreateContact (Maybe Text)
-ccLastName = lens _ccLastName (\ s a -> s{_ccLastName = a})
-
--- | The name of the contact to display on the console.
-ccDisplayName :: Lens' CreateContact (Maybe Text)
-ccDisplayName = lens _ccDisplayName (\ s a -> s{_ccDisplayName = a})
-
--- | A unique, user-specified identifier for this request that ensures idempotency.
-ccClientRequestToken :: Lens' CreateContact (Maybe Text)
-ccClientRequestToken = lens _ccClientRequestToken (\ s a -> s{_ccClientRequestToken = a})
-
--- | The first name of the contact that is used to call the contact on the device.
-ccFirstName :: Lens' CreateContact Text
-ccFirstName = lens _ccFirstName (\ s a -> s{_ccFirstName = a})
-
--- | The phone number of the contact in E.164 format.
-ccPhoneNumber :: Lens' CreateContact Text
-ccPhoneNumber = lens _ccPhoneNumber (\ s a -> s{_ccPhoneNumber = a})
-
-instance AWSRequest CreateContact where
-        type Rs CreateContact = CreateContactResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateContactResponse' <$>
-                   (x .?> "ContactArn") <*> (pure (fromEnum s)))
-
-instance Hashable CreateContact where
-
-instance NFData CreateContact where
-
-instance ToHeaders CreateContact where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.CreateContact" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateContact where
-        toJSON CreateContact'{..}
-          = object
-              (catMaybes
-                 [("LastName" .=) <$> _ccLastName,
-                  ("DisplayName" .=) <$> _ccDisplayName,
-                  ("ClientRequestToken" .=) <$> _ccClientRequestToken,
-                  Just ("FirstName" .= _ccFirstName),
-                  Just ("PhoneNumber" .= _ccPhoneNumber)])
-
-instance ToPath CreateContact where
-        toPath = const "/"
-
-instance ToQuery CreateContact where
-        toQuery = const mempty
-
--- | /See:/ 'createContactResponse' smart constructor.
-data CreateContactResponse = CreateContactResponse'
-  { _ccrsContactARN     :: !(Maybe Text)
-  , _ccrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateContactResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccrsContactARN' - The ARN of the newly created address book.
---
--- * 'ccrsResponseStatus' - -- | The response status code.
-createContactResponse
-    :: Int -- ^ 'ccrsResponseStatus'
-    -> CreateContactResponse
-createContactResponse pResponseStatus_ =
-  CreateContactResponse'
-    {_ccrsContactARN = Nothing, _ccrsResponseStatus = pResponseStatus_}
-
-
--- | The ARN of the newly created address book.
-ccrsContactARN :: Lens' CreateContactResponse (Maybe Text)
-ccrsContactARN = lens _ccrsContactARN (\ s a -> s{_ccrsContactARN = a})
-
--- | -- | The response status code.
-ccrsResponseStatus :: Lens' CreateContactResponse Int
-ccrsResponseStatus = lens _ccrsResponseStatus (\ s a -> s{_ccrsResponseStatus = a})
-
-instance NFData CreateContactResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/CreateProfile.hs b/gen/Network/AWS/AlexaBusiness/CreateProfile.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/CreateProfile.hs
+++ /dev/null
@@ -1,230 +0,0 @@
-{-# 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.AlexaBusiness.CreateProfile
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a new room profile with the specified details.
---
---
-module Network.AWS.AlexaBusiness.CreateProfile
-    (
-    -- * Creating a Request
-      createProfile
-    , CreateProfile
-    -- * Request Lenses
-    , cpSetupModeDisabled
-    , cpPSTNEnabled
-    , cpClientRequestToken
-    , cpMaxVolumeLimit
-    , cpProfileName
-    , cpTimezone
-    , cpAddress
-    , cpDistanceUnit
-    , cpTemperatureUnit
-    , cpWakeWord
-
-    -- * Destructuring the Response
-    , createProfileResponse
-    , CreateProfileResponse
-    -- * Response Lenses
-    , cprsProfileARN
-    , cprsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createProfile' smart constructor.
-data CreateProfile = CreateProfile'
-  { _cpSetupModeDisabled  :: !(Maybe Bool)
-  , _cpPSTNEnabled        :: !(Maybe Bool)
-  , _cpClientRequestToken :: !(Maybe Text)
-  , _cpMaxVolumeLimit     :: !(Maybe Int)
-  , _cpProfileName        :: !Text
-  , _cpTimezone           :: !Text
-  , _cpAddress            :: !Text
-  , _cpDistanceUnit       :: !DistanceUnit
-  , _cpTemperatureUnit    :: !TemperatureUnit
-  , _cpWakeWord           :: !WakeWord
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateProfile' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpSetupModeDisabled' - Whether room profile setup is enabled.
---
--- * 'cpPSTNEnabled' - Whether PSTN calling is enabled.
---
--- * 'cpClientRequestToken' - The user-specified token that is used during the creation of a profile.
---
--- * 'cpMaxVolumeLimit' - The maximum volume limit for a room profile.
---
--- * 'cpProfileName' - The name of a room profile.
---
--- * 'cpTimezone' - The time zone used by a room profile.
---
--- * 'cpAddress' - The valid address for the room.
---
--- * 'cpDistanceUnit' - The distance unit to be used by devices in the profile.
---
--- * 'cpTemperatureUnit' - The temperature unit to be used by devices in the profile.
---
--- * 'cpWakeWord' - A wake word for Alexa, Echo, Amazon, or a computer.
-createProfile
-    :: Text -- ^ 'cpProfileName'
-    -> Text -- ^ 'cpTimezone'
-    -> Text -- ^ 'cpAddress'
-    -> DistanceUnit -- ^ 'cpDistanceUnit'
-    -> TemperatureUnit -- ^ 'cpTemperatureUnit'
-    -> WakeWord -- ^ 'cpWakeWord'
-    -> CreateProfile
-createProfile pProfileName_ pTimezone_ pAddress_ pDistanceUnit_ pTemperatureUnit_ pWakeWord_ =
-  CreateProfile'
-    { _cpSetupModeDisabled = Nothing
-    , _cpPSTNEnabled = Nothing
-    , _cpClientRequestToken = Nothing
-    , _cpMaxVolumeLimit = Nothing
-    , _cpProfileName = pProfileName_
-    , _cpTimezone = pTimezone_
-    , _cpAddress = pAddress_
-    , _cpDistanceUnit = pDistanceUnit_
-    , _cpTemperatureUnit = pTemperatureUnit_
-    , _cpWakeWord = pWakeWord_
-    }
-
-
--- | Whether room profile setup is enabled.
-cpSetupModeDisabled :: Lens' CreateProfile (Maybe Bool)
-cpSetupModeDisabled = lens _cpSetupModeDisabled (\ s a -> s{_cpSetupModeDisabled = a})
-
--- | Whether PSTN calling is enabled.
-cpPSTNEnabled :: Lens' CreateProfile (Maybe Bool)
-cpPSTNEnabled = lens _cpPSTNEnabled (\ s a -> s{_cpPSTNEnabled = a})
-
--- | The user-specified token that is used during the creation of a profile.
-cpClientRequestToken :: Lens' CreateProfile (Maybe Text)
-cpClientRequestToken = lens _cpClientRequestToken (\ s a -> s{_cpClientRequestToken = a})
-
--- | The maximum volume limit for a room profile.
-cpMaxVolumeLimit :: Lens' CreateProfile (Maybe Int)
-cpMaxVolumeLimit = lens _cpMaxVolumeLimit (\ s a -> s{_cpMaxVolumeLimit = a})
-
--- | The name of a room profile.
-cpProfileName :: Lens' CreateProfile Text
-cpProfileName = lens _cpProfileName (\ s a -> s{_cpProfileName = a})
-
--- | The time zone used by a room profile.
-cpTimezone :: Lens' CreateProfile Text
-cpTimezone = lens _cpTimezone (\ s a -> s{_cpTimezone = a})
-
--- | The valid address for the room.
-cpAddress :: Lens' CreateProfile Text
-cpAddress = lens _cpAddress (\ s a -> s{_cpAddress = a})
-
--- | The distance unit to be used by devices in the profile.
-cpDistanceUnit :: Lens' CreateProfile DistanceUnit
-cpDistanceUnit = lens _cpDistanceUnit (\ s a -> s{_cpDistanceUnit = a})
-
--- | The temperature unit to be used by devices in the profile.
-cpTemperatureUnit :: Lens' CreateProfile TemperatureUnit
-cpTemperatureUnit = lens _cpTemperatureUnit (\ s a -> s{_cpTemperatureUnit = a})
-
--- | A wake word for Alexa, Echo, Amazon, or a computer.
-cpWakeWord :: Lens' CreateProfile WakeWord
-cpWakeWord = lens _cpWakeWord (\ s a -> s{_cpWakeWord = a})
-
-instance AWSRequest CreateProfile where
-        type Rs CreateProfile = CreateProfileResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateProfileResponse' <$>
-                   (x .?> "ProfileArn") <*> (pure (fromEnum s)))
-
-instance Hashable CreateProfile where
-
-instance NFData CreateProfile where
-
-instance ToHeaders CreateProfile where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.CreateProfile" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateProfile where
-        toJSON CreateProfile'{..}
-          = object
-              (catMaybes
-                 [("SetupModeDisabled" .=) <$> _cpSetupModeDisabled,
-                  ("PSTNEnabled" .=) <$> _cpPSTNEnabled,
-                  ("ClientRequestToken" .=) <$> _cpClientRequestToken,
-                  ("MaxVolumeLimit" .=) <$> _cpMaxVolumeLimit,
-                  Just ("ProfileName" .= _cpProfileName),
-                  Just ("Timezone" .= _cpTimezone),
-                  Just ("Address" .= _cpAddress),
-                  Just ("DistanceUnit" .= _cpDistanceUnit),
-                  Just ("TemperatureUnit" .= _cpTemperatureUnit),
-                  Just ("WakeWord" .= _cpWakeWord)])
-
-instance ToPath CreateProfile where
-        toPath = const "/"
-
-instance ToQuery CreateProfile where
-        toQuery = const mempty
-
--- | /See:/ 'createProfileResponse' smart constructor.
-data CreateProfileResponse = CreateProfileResponse'
-  { _cprsProfileARN     :: !(Maybe Text)
-  , _cprsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateProfileResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cprsProfileARN' - The ARN of the newly created room profile in the response.
---
--- * 'cprsResponseStatus' - -- | The response status code.
-createProfileResponse
-    :: Int -- ^ 'cprsResponseStatus'
-    -> CreateProfileResponse
-createProfileResponse pResponseStatus_ =
-  CreateProfileResponse'
-    {_cprsProfileARN = Nothing, _cprsResponseStatus = pResponseStatus_}
-
-
--- | The ARN of the newly created room profile in the response.
-cprsProfileARN :: Lens' CreateProfileResponse (Maybe Text)
-cprsProfileARN = lens _cprsProfileARN (\ s a -> s{_cprsProfileARN = a})
-
--- | -- | The response status code.
-cprsResponseStatus :: Lens' CreateProfileResponse Int
-cprsResponseStatus = lens _cprsResponseStatus (\ s a -> s{_cprsResponseStatus = a})
-
-instance NFData CreateProfileResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/CreateRoom.hs b/gen/Network/AWS/AlexaBusiness/CreateRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/CreateRoom.hs
+++ /dev/null
@@ -1,185 +0,0 @@
-{-# 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.AlexaBusiness.CreateRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a room with the specified details.
---
---
-module Network.AWS.AlexaBusiness.CreateRoom
-    (
-    -- * Creating a Request
-      createRoom
-    , CreateRoom
-    -- * Request Lenses
-    , crProfileARN
-    , crProviderCalendarId
-    , crClientRequestToken
-    , crDescription
-    , crTags
-    , crRoomName
-
-    -- * Destructuring the Response
-    , createRoomResponse
-    , CreateRoomResponse
-    -- * Response Lenses
-    , crrsRoomARN
-    , crrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createRoom' smart constructor.
-data CreateRoom = CreateRoom'
-  { _crProfileARN         :: !(Maybe Text)
-  , _crProviderCalendarId :: !(Maybe Text)
-  , _crClientRequestToken :: !(Maybe Text)
-  , _crDescription        :: !(Maybe Text)
-  , _crTags               :: !(Maybe [Tag])
-  , _crRoomName           :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crProfileARN' - The profile ARN for the room.
---
--- * 'crProviderCalendarId' - The calendar ARN for the room.
---
--- * 'crClientRequestToken' - A unique, user-specified identifier for this request that ensures idempotency.
---
--- * 'crDescription' - The description for the room.
---
--- * 'crTags' - The tags for the room.
---
--- * 'crRoomName' - The name for the room.
-createRoom
-    :: Text -- ^ 'crRoomName'
-    -> CreateRoom
-createRoom pRoomName_ =
-  CreateRoom'
-    { _crProfileARN = Nothing
-    , _crProviderCalendarId = Nothing
-    , _crClientRequestToken = Nothing
-    , _crDescription = Nothing
-    , _crTags = Nothing
-    , _crRoomName = pRoomName_
-    }
-
-
--- | The profile ARN for the room.
-crProfileARN :: Lens' CreateRoom (Maybe Text)
-crProfileARN = lens _crProfileARN (\ s a -> s{_crProfileARN = a})
-
--- | The calendar ARN for the room.
-crProviderCalendarId :: Lens' CreateRoom (Maybe Text)
-crProviderCalendarId = lens _crProviderCalendarId (\ s a -> s{_crProviderCalendarId = a})
-
--- | A unique, user-specified identifier for this request that ensures idempotency.
-crClientRequestToken :: Lens' CreateRoom (Maybe Text)
-crClientRequestToken = lens _crClientRequestToken (\ s a -> s{_crClientRequestToken = a})
-
--- | The description for the room.
-crDescription :: Lens' CreateRoom (Maybe Text)
-crDescription = lens _crDescription (\ s a -> s{_crDescription = a})
-
--- | The tags for the room.
-crTags :: Lens' CreateRoom [Tag]
-crTags = lens _crTags (\ s a -> s{_crTags = a}) . _Default . _Coerce
-
--- | The name for the room.
-crRoomName :: Lens' CreateRoom Text
-crRoomName = lens _crRoomName (\ s a -> s{_crRoomName = a})
-
-instance AWSRequest CreateRoom where
-        type Rs CreateRoom = CreateRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateRoomResponse' <$>
-                   (x .?> "RoomArn") <*> (pure (fromEnum s)))
-
-instance Hashable CreateRoom where
-
-instance NFData CreateRoom where
-
-instance ToHeaders CreateRoom where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.CreateRoom" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateRoom where
-        toJSON CreateRoom'{..}
-          = object
-              (catMaybes
-                 [("ProfileArn" .=) <$> _crProfileARN,
-                  ("ProviderCalendarId" .=) <$> _crProviderCalendarId,
-                  ("ClientRequestToken" .=) <$> _crClientRequestToken,
-                  ("Description" .=) <$> _crDescription,
-                  ("Tags" .=) <$> _crTags,
-                  Just ("RoomName" .= _crRoomName)])
-
-instance ToPath CreateRoom where
-        toPath = const "/"
-
-instance ToQuery CreateRoom where
-        toQuery = const mempty
-
--- | /See:/ 'createRoomResponse' smart constructor.
-data CreateRoomResponse = CreateRoomResponse'
-  { _crrsRoomARN        :: !(Maybe Text)
-  , _crrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crrsRoomARN' - The ARN of the newly created room in the response.
---
--- * 'crrsResponseStatus' - -- | The response status code.
-createRoomResponse
-    :: Int -- ^ 'crrsResponseStatus'
-    -> CreateRoomResponse
-createRoomResponse pResponseStatus_ =
-  CreateRoomResponse'
-    {_crrsRoomARN = Nothing, _crrsResponseStatus = pResponseStatus_}
-
-
--- | The ARN of the newly created room in the response.
-crrsRoomARN :: Lens' CreateRoomResponse (Maybe Text)
-crrsRoomARN = lens _crrsRoomARN (\ s a -> s{_crrsRoomARN = a})
-
--- | -- | The response status code.
-crrsResponseStatus :: Lens' CreateRoomResponse Int
-crrsResponseStatus = lens _crrsResponseStatus (\ s a -> s{_crrsResponseStatus = a})
-
-instance NFData CreateRoomResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/CreateSkillGroup.hs b/gen/Network/AWS/AlexaBusiness/CreateSkillGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/CreateSkillGroup.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# 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.AlexaBusiness.CreateSkillGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a skill group with a specified name and description.
---
---
-module Network.AWS.AlexaBusiness.CreateSkillGroup
-    (
-    -- * Creating a Request
-      createSkillGroup
-    , CreateSkillGroup
-    -- * Request Lenses
-    , csgClientRequestToken
-    , csgDescription
-    , csgSkillGroupName
-
-    -- * Destructuring the Response
-    , createSkillGroupResponse
-    , CreateSkillGroupResponse
-    -- * Response Lenses
-    , csgrsSkillGroupARN
-    , csgrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createSkillGroup' smart constructor.
-data CreateSkillGroup = CreateSkillGroup'
-  { _csgClientRequestToken :: !(Maybe Text)
-  , _csgDescription        :: !(Maybe Text)
-  , _csgSkillGroupName     :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateSkillGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csgClientRequestToken' - A unique, user-specified identifier for this request that ensures idempotency.
---
--- * 'csgDescription' - The description for the skill group.
---
--- * 'csgSkillGroupName' - The name for the skill group.
-createSkillGroup
-    :: Text -- ^ 'csgSkillGroupName'
-    -> CreateSkillGroup
-createSkillGroup pSkillGroupName_ =
-  CreateSkillGroup'
-    { _csgClientRequestToken = Nothing
-    , _csgDescription = Nothing
-    , _csgSkillGroupName = pSkillGroupName_
-    }
-
-
--- | A unique, user-specified identifier for this request that ensures idempotency.
-csgClientRequestToken :: Lens' CreateSkillGroup (Maybe Text)
-csgClientRequestToken = lens _csgClientRequestToken (\ s a -> s{_csgClientRequestToken = a})
-
--- | The description for the skill group.
-csgDescription :: Lens' CreateSkillGroup (Maybe Text)
-csgDescription = lens _csgDescription (\ s a -> s{_csgDescription = a})
-
--- | The name for the skill group.
-csgSkillGroupName :: Lens' CreateSkillGroup Text
-csgSkillGroupName = lens _csgSkillGroupName (\ s a -> s{_csgSkillGroupName = a})
-
-instance AWSRequest CreateSkillGroup where
-        type Rs CreateSkillGroup = CreateSkillGroupResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateSkillGroupResponse' <$>
-                   (x .?> "SkillGroupArn") <*> (pure (fromEnum s)))
-
-instance Hashable CreateSkillGroup where
-
-instance NFData CreateSkillGroup where
-
-instance ToHeaders CreateSkillGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.CreateSkillGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateSkillGroup where
-        toJSON CreateSkillGroup'{..}
-          = object
-              (catMaybes
-                 [("ClientRequestToken" .=) <$>
-                    _csgClientRequestToken,
-                  ("Description" .=) <$> _csgDescription,
-                  Just ("SkillGroupName" .= _csgSkillGroupName)])
-
-instance ToPath CreateSkillGroup where
-        toPath = const "/"
-
-instance ToQuery CreateSkillGroup where
-        toQuery = const mempty
-
--- | /See:/ 'createSkillGroupResponse' smart constructor.
-data CreateSkillGroupResponse = CreateSkillGroupResponse'
-  { _csgrsSkillGroupARN  :: !(Maybe Text)
-  , _csgrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateSkillGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csgrsSkillGroupARN' - The ARN of the newly created skill group in the response.
---
--- * 'csgrsResponseStatus' - -- | The response status code.
-createSkillGroupResponse
-    :: Int -- ^ 'csgrsResponseStatus'
-    -> CreateSkillGroupResponse
-createSkillGroupResponse pResponseStatus_ =
-  CreateSkillGroupResponse'
-    {_csgrsSkillGroupARN = Nothing, _csgrsResponseStatus = pResponseStatus_}
-
-
--- | The ARN of the newly created skill group in the response.
-csgrsSkillGroupARN :: Lens' CreateSkillGroupResponse (Maybe Text)
-csgrsSkillGroupARN = lens _csgrsSkillGroupARN (\ s a -> s{_csgrsSkillGroupARN = a})
-
--- | -- | The response status code.
-csgrsResponseStatus :: Lens' CreateSkillGroupResponse Int
-csgrsResponseStatus = lens _csgrsResponseStatus (\ s a -> s{_csgrsResponseStatus = a})
-
-instance NFData CreateSkillGroupResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/CreateUser.hs b/gen/Network/AWS/AlexaBusiness/CreateUser.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/CreateUser.hs
+++ /dev/null
@@ -1,185 +0,0 @@
-{-# 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.AlexaBusiness.CreateUser
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a user.
---
---
-module Network.AWS.AlexaBusiness.CreateUser
-    (
-    -- * Creating a Request
-      createUser
-    , CreateUser
-    -- * Request Lenses
-    , cuEmail
-    , cuLastName
-    , cuFirstName
-    , cuClientRequestToken
-    , cuTags
-    , cuUserId
-
-    -- * Destructuring the Response
-    , createUserResponse
-    , CreateUserResponse
-    -- * Response Lenses
-    , cursUserARN
-    , cursResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createUser' smart constructor.
-data CreateUser = CreateUser'
-  { _cuEmail              :: !(Maybe Text)
-  , _cuLastName           :: !(Maybe Text)
-  , _cuFirstName          :: !(Maybe Text)
-  , _cuClientRequestToken :: !(Maybe Text)
-  , _cuTags               :: !(Maybe [Tag])
-  , _cuUserId             :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateUser' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cuEmail' - The email address for the user.
---
--- * 'cuLastName' - The last name for the user.
---
--- * 'cuFirstName' - The first name for the user.
---
--- * 'cuClientRequestToken' - A unique, user-specified identifier for this request that ensures idempotency.
---
--- * 'cuTags' - The tags for the user.
---
--- * 'cuUserId' - The ARN for the user.
-createUser
-    :: Text -- ^ 'cuUserId'
-    -> CreateUser
-createUser pUserId_ =
-  CreateUser'
-    { _cuEmail = Nothing
-    , _cuLastName = Nothing
-    , _cuFirstName = Nothing
-    , _cuClientRequestToken = Nothing
-    , _cuTags = Nothing
-    , _cuUserId = pUserId_
-    }
-
-
--- | The email address for the user.
-cuEmail :: Lens' CreateUser (Maybe Text)
-cuEmail = lens _cuEmail (\ s a -> s{_cuEmail = a})
-
--- | The last name for the user.
-cuLastName :: Lens' CreateUser (Maybe Text)
-cuLastName = lens _cuLastName (\ s a -> s{_cuLastName = a})
-
--- | The first name for the user.
-cuFirstName :: Lens' CreateUser (Maybe Text)
-cuFirstName = lens _cuFirstName (\ s a -> s{_cuFirstName = a})
-
--- | A unique, user-specified identifier for this request that ensures idempotency.
-cuClientRequestToken :: Lens' CreateUser (Maybe Text)
-cuClientRequestToken = lens _cuClientRequestToken (\ s a -> s{_cuClientRequestToken = a})
-
--- | The tags for the user.
-cuTags :: Lens' CreateUser [Tag]
-cuTags = lens _cuTags (\ s a -> s{_cuTags = a}) . _Default . _Coerce
-
--- | The ARN for the user.
-cuUserId :: Lens' CreateUser Text
-cuUserId = lens _cuUserId (\ s a -> s{_cuUserId = a})
-
-instance AWSRequest CreateUser where
-        type Rs CreateUser = CreateUserResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateUserResponse' <$>
-                   (x .?> "UserArn") <*> (pure (fromEnum s)))
-
-instance Hashable CreateUser where
-
-instance NFData CreateUser where
-
-instance ToHeaders CreateUser where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.CreateUser" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateUser where
-        toJSON CreateUser'{..}
-          = object
-              (catMaybes
-                 [("Email" .=) <$> _cuEmail,
-                  ("LastName" .=) <$> _cuLastName,
-                  ("FirstName" .=) <$> _cuFirstName,
-                  ("ClientRequestToken" .=) <$> _cuClientRequestToken,
-                  ("Tags" .=) <$> _cuTags,
-                  Just ("UserId" .= _cuUserId)])
-
-instance ToPath CreateUser where
-        toPath = const "/"
-
-instance ToQuery CreateUser where
-        toQuery = const mempty
-
--- | /See:/ 'createUserResponse' smart constructor.
-data CreateUserResponse = CreateUserResponse'
-  { _cursUserARN        :: !(Maybe Text)
-  , _cursResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateUserResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cursUserARN' - The ARN of the newly created user in the response.
---
--- * 'cursResponseStatus' - -- | The response status code.
-createUserResponse
-    :: Int -- ^ 'cursResponseStatus'
-    -> CreateUserResponse
-createUserResponse pResponseStatus_ =
-  CreateUserResponse'
-    {_cursUserARN = Nothing, _cursResponseStatus = pResponseStatus_}
-
-
--- | The ARN of the newly created user in the response.
-cursUserARN :: Lens' CreateUserResponse (Maybe Text)
-cursUserARN = lens _cursUserARN (\ s a -> s{_cursUserARN = a})
-
--- | -- | The response status code.
-cursResponseStatus :: Lens' CreateUserResponse Int
-cursResponseStatus = lens _cursResponseStatus (\ s a -> s{_cursResponseStatus = a})
-
-instance NFData CreateUserResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/DeleteAddressBook.hs b/gen/Network/AWS/AlexaBusiness/DeleteAddressBook.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DeleteAddressBook.hs
+++ /dev/null
@@ -1,123 +0,0 @@
-{-# 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.AlexaBusiness.DeleteAddressBook
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes an address book by the address book ARN.
---
---
-module Network.AWS.AlexaBusiness.DeleteAddressBook
-    (
-    -- * Creating a Request
-      deleteAddressBook
-    , DeleteAddressBook
-    -- * Request Lenses
-    , dabAddressBookARN
-
-    -- * Destructuring the Response
-    , deleteAddressBookResponse
-    , DeleteAddressBookResponse
-    -- * Response Lenses
-    , dabrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteAddressBook' smart constructor.
-newtype DeleteAddressBook = DeleteAddressBook'
-  { _dabAddressBookARN :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteAddressBook' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dabAddressBookARN' - The ARN of the address book to delete.
-deleteAddressBook
-    :: Text -- ^ 'dabAddressBookARN'
-    -> DeleteAddressBook
-deleteAddressBook pAddressBookARN_ =
-  DeleteAddressBook' {_dabAddressBookARN = pAddressBookARN_}
-
-
--- | The ARN of the address book to delete.
-dabAddressBookARN :: Lens' DeleteAddressBook Text
-dabAddressBookARN = lens _dabAddressBookARN (\ s a -> s{_dabAddressBookARN = a})
-
-instance AWSRequest DeleteAddressBook where
-        type Rs DeleteAddressBook = DeleteAddressBookResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteAddressBookResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteAddressBook where
-
-instance NFData DeleteAddressBook where
-
-instance ToHeaders DeleteAddressBook where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DeleteAddressBook" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteAddressBook where
-        toJSON DeleteAddressBook'{..}
-          = object
-              (catMaybes
-                 [Just ("AddressBookArn" .= _dabAddressBookARN)])
-
-instance ToPath DeleteAddressBook where
-        toPath = const "/"
-
-instance ToQuery DeleteAddressBook where
-        toQuery = const mempty
-
--- | /See:/ 'deleteAddressBookResponse' smart constructor.
-newtype DeleteAddressBookResponse = DeleteAddressBookResponse'
-  { _dabrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteAddressBookResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dabrsResponseStatus' - -- | The response status code.
-deleteAddressBookResponse
-    :: Int -- ^ 'dabrsResponseStatus'
-    -> DeleteAddressBookResponse
-deleteAddressBookResponse pResponseStatus_ =
-  DeleteAddressBookResponse' {_dabrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dabrsResponseStatus :: Lens' DeleteAddressBookResponse Int
-dabrsResponseStatus = lens _dabrsResponseStatus (\ s a -> s{_dabrsResponseStatus = a})
-
-instance NFData DeleteAddressBookResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/DeleteContact.hs b/gen/Network/AWS/AlexaBusiness/DeleteContact.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DeleteContact.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# 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.AlexaBusiness.DeleteContact
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes a contact by the contact ARN.
---
---
-module Network.AWS.AlexaBusiness.DeleteContact
-    (
-    -- * Creating a Request
-      deleteContact
-    , DeleteContact
-    -- * Request Lenses
-    , dcContactARN
-
-    -- * Destructuring the Response
-    , deleteContactResponse
-    , DeleteContactResponse
-    -- * Response Lenses
-    , dcrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteContact' smart constructor.
-newtype DeleteContact = DeleteContact'
-  { _dcContactARN :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteContact' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcContactARN' - The ARN of the contact to delete.
-deleteContact
-    :: Text -- ^ 'dcContactARN'
-    -> DeleteContact
-deleteContact pContactARN_ = DeleteContact' {_dcContactARN = pContactARN_}
-
-
--- | The ARN of the contact to delete.
-dcContactARN :: Lens' DeleteContact Text
-dcContactARN = lens _dcContactARN (\ s a -> s{_dcContactARN = a})
-
-instance AWSRequest DeleteContact where
-        type Rs DeleteContact = DeleteContactResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteContactResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteContact where
-
-instance NFData DeleteContact where
-
-instance ToHeaders DeleteContact where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DeleteContact" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteContact where
-        toJSON DeleteContact'{..}
-          = object
-              (catMaybes [Just ("ContactArn" .= _dcContactARN)])
-
-instance ToPath DeleteContact where
-        toPath = const "/"
-
-instance ToQuery DeleteContact where
-        toQuery = const mempty
-
--- | /See:/ 'deleteContactResponse' smart constructor.
-newtype DeleteContactResponse = DeleteContactResponse'
-  { _dcrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteContactResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcrsResponseStatus' - -- | The response status code.
-deleteContactResponse
-    :: Int -- ^ 'dcrsResponseStatus'
-    -> DeleteContactResponse
-deleteContactResponse pResponseStatus_ =
-  DeleteContactResponse' {_dcrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dcrsResponseStatus :: Lens' DeleteContactResponse Int
-dcrsResponseStatus = lens _dcrsResponseStatus (\ s a -> s{_dcrsResponseStatus = a})
-
-instance NFData DeleteContactResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/DeleteProfile.hs b/gen/Network/AWS/AlexaBusiness/DeleteProfile.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DeleteProfile.hs
+++ /dev/null
@@ -1,120 +0,0 @@
-{-# 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.AlexaBusiness.DeleteProfile
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes a room profile by the profile ARN.
---
---
-module Network.AWS.AlexaBusiness.DeleteProfile
-    (
-    -- * Creating a Request
-      deleteProfile
-    , DeleteProfile
-    -- * Request Lenses
-    , dpProfileARN
-
-    -- * Destructuring the Response
-    , deleteProfileResponse
-    , DeleteProfileResponse
-    -- * Response Lenses
-    , dprsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteProfile' smart constructor.
-newtype DeleteProfile = DeleteProfile'
-  { _dpProfileARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteProfile' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dpProfileARN' - The ARN of the room profile to delete. Required.
-deleteProfile
-    :: DeleteProfile
-deleteProfile = DeleteProfile' {_dpProfileARN = Nothing}
-
-
--- | The ARN of the room profile to delete. Required.
-dpProfileARN :: Lens' DeleteProfile (Maybe Text)
-dpProfileARN = lens _dpProfileARN (\ s a -> s{_dpProfileARN = a})
-
-instance AWSRequest DeleteProfile where
-        type Rs DeleteProfile = DeleteProfileResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteProfileResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteProfile where
-
-instance NFData DeleteProfile where
-
-instance ToHeaders DeleteProfile where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DeleteProfile" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteProfile where
-        toJSON DeleteProfile'{..}
-          = object
-              (catMaybes [("ProfileArn" .=) <$> _dpProfileARN])
-
-instance ToPath DeleteProfile where
-        toPath = const "/"
-
-instance ToQuery DeleteProfile where
-        toQuery = const mempty
-
--- | /See:/ 'deleteProfileResponse' smart constructor.
-newtype DeleteProfileResponse = DeleteProfileResponse'
-  { _dprsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteProfileResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dprsResponseStatus' - -- | The response status code.
-deleteProfileResponse
-    :: Int -- ^ 'dprsResponseStatus'
-    -> DeleteProfileResponse
-deleteProfileResponse pResponseStatus_ =
-  DeleteProfileResponse' {_dprsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dprsResponseStatus :: Lens' DeleteProfileResponse Int
-dprsResponseStatus = lens _dprsResponseStatus (\ s a -> s{_dprsResponseStatus = a})
-
-instance NFData DeleteProfileResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/DeleteRoom.hs b/gen/Network/AWS/AlexaBusiness/DeleteRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DeleteRoom.hs
+++ /dev/null
@@ -1,119 +0,0 @@
-{-# 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.AlexaBusiness.DeleteRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes a room by the room ARN.
---
---
-module Network.AWS.AlexaBusiness.DeleteRoom
-    (
-    -- * Creating a Request
-      deleteRoom
-    , DeleteRoom
-    -- * Request Lenses
-    , drRoomARN
-
-    -- * Destructuring the Response
-    , deleteRoomResponse
-    , DeleteRoomResponse
-    -- * Response Lenses
-    , drrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteRoom' smart constructor.
-newtype DeleteRoom = DeleteRoom'
-  { _drRoomARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drRoomARN' - The ARN of the room to delete. Required.
-deleteRoom
-    :: DeleteRoom
-deleteRoom = DeleteRoom' {_drRoomARN = Nothing}
-
-
--- | The ARN of the room to delete. Required.
-drRoomARN :: Lens' DeleteRoom (Maybe Text)
-drRoomARN = lens _drRoomARN (\ s a -> s{_drRoomARN = a})
-
-instance AWSRequest DeleteRoom where
-        type Rs DeleteRoom = DeleteRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteRoomResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteRoom where
-
-instance NFData DeleteRoom where
-
-instance ToHeaders DeleteRoom where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DeleteRoom" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteRoom where
-        toJSON DeleteRoom'{..}
-          = object (catMaybes [("RoomArn" .=) <$> _drRoomARN])
-
-instance ToPath DeleteRoom where
-        toPath = const "/"
-
-instance ToQuery DeleteRoom where
-        toQuery = const mempty
-
--- | /See:/ 'deleteRoomResponse' smart constructor.
-newtype DeleteRoomResponse = DeleteRoomResponse'
-  { _drrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drrsResponseStatus' - -- | The response status code.
-deleteRoomResponse
-    :: Int -- ^ 'drrsResponseStatus'
-    -> DeleteRoomResponse
-deleteRoomResponse pResponseStatus_ =
-  DeleteRoomResponse' {_drrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-drrsResponseStatus :: Lens' DeleteRoomResponse Int
-drrsResponseStatus = lens _drrsResponseStatus (\ s a -> s{_drrsResponseStatus = a})
-
-instance NFData DeleteRoomResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/DeleteRoomSkillParameter.hs b/gen/Network/AWS/AlexaBusiness/DeleteRoomSkillParameter.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DeleteRoomSkillParameter.hs
+++ /dev/null
@@ -1,150 +0,0 @@
-{-# 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.AlexaBusiness.DeleteRoomSkillParameter
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes room skill parameter details by room, skill, and parameter key ID.
---
---
-module Network.AWS.AlexaBusiness.DeleteRoomSkillParameter
-    (
-    -- * Creating a Request
-      deleteRoomSkillParameter
-    , DeleteRoomSkillParameter
-    -- * Request Lenses
-    , drspRoomARN
-    , drspSkillId
-    , drspParameterKey
-
-    -- * Destructuring the Response
-    , deleteRoomSkillParameterResponse
-    , DeleteRoomSkillParameterResponse
-    -- * Response Lenses
-    , drsprsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteRoomSkillParameter' smart constructor.
-data DeleteRoomSkillParameter = DeleteRoomSkillParameter'
-  { _drspRoomARN      :: !(Maybe Text)
-  , _drspSkillId      :: !Text
-  , _drspParameterKey :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteRoomSkillParameter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drspRoomARN' - The ARN of the room from which to remove the room skill parameter details.
---
--- * 'drspSkillId' - The ID of the skill from which to remove the room skill parameter details.
---
--- * 'drspParameterKey' - The room skill parameter key for which to remove details.
-deleteRoomSkillParameter
-    :: Text -- ^ 'drspSkillId'
-    -> Text -- ^ 'drspParameterKey'
-    -> DeleteRoomSkillParameter
-deleteRoomSkillParameter pSkillId_ pParameterKey_ =
-  DeleteRoomSkillParameter'
-    { _drspRoomARN = Nothing
-    , _drspSkillId = pSkillId_
-    , _drspParameterKey = pParameterKey_
-    }
-
-
--- | The ARN of the room from which to remove the room skill parameter details.
-drspRoomARN :: Lens' DeleteRoomSkillParameter (Maybe Text)
-drspRoomARN = lens _drspRoomARN (\ s a -> s{_drspRoomARN = a})
-
--- | The ID of the skill from which to remove the room skill parameter details.
-drspSkillId :: Lens' DeleteRoomSkillParameter Text
-drspSkillId = lens _drspSkillId (\ s a -> s{_drspSkillId = a})
-
--- | The room skill parameter key for which to remove details.
-drspParameterKey :: Lens' DeleteRoomSkillParameter Text
-drspParameterKey = lens _drspParameterKey (\ s a -> s{_drspParameterKey = a})
-
-instance AWSRequest DeleteRoomSkillParameter where
-        type Rs DeleteRoomSkillParameter =
-             DeleteRoomSkillParameterResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteRoomSkillParameterResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DeleteRoomSkillParameter where
-
-instance NFData DeleteRoomSkillParameter where
-
-instance ToHeaders DeleteRoomSkillParameter where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DeleteRoomSkillParameter" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteRoomSkillParameter where
-        toJSON DeleteRoomSkillParameter'{..}
-          = object
-              (catMaybes
-                 [("RoomArn" .=) <$> _drspRoomARN,
-                  Just ("SkillId" .= _drspSkillId),
-                  Just ("ParameterKey" .= _drspParameterKey)])
-
-instance ToPath DeleteRoomSkillParameter where
-        toPath = const "/"
-
-instance ToQuery DeleteRoomSkillParameter where
-        toQuery = const mempty
-
--- | /See:/ 'deleteRoomSkillParameterResponse' smart constructor.
-newtype DeleteRoomSkillParameterResponse = DeleteRoomSkillParameterResponse'
-  { _drsprsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteRoomSkillParameterResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drsprsResponseStatus' - -- | The response status code.
-deleteRoomSkillParameterResponse
-    :: Int -- ^ 'drsprsResponseStatus'
-    -> DeleteRoomSkillParameterResponse
-deleteRoomSkillParameterResponse pResponseStatus_ =
-  DeleteRoomSkillParameterResponse' {_drsprsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-drsprsResponseStatus :: Lens' DeleteRoomSkillParameterResponse Int
-drsprsResponseStatus = lens _drsprsResponseStatus (\ s a -> s{_drsprsResponseStatus = a})
-
-instance NFData DeleteRoomSkillParameterResponse
-         where
diff --git a/gen/Network/AWS/AlexaBusiness/DeleteSkillGroup.hs b/gen/Network/AWS/AlexaBusiness/DeleteSkillGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DeleteSkillGroup.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# 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.AlexaBusiness.DeleteSkillGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes a skill group by skill group ARN.
---
---
-module Network.AWS.AlexaBusiness.DeleteSkillGroup
-    (
-    -- * Creating a Request
-      deleteSkillGroup
-    , DeleteSkillGroup
-    -- * Request Lenses
-    , dsgSkillGroupARN
-
-    -- * Destructuring the Response
-    , deleteSkillGroupResponse
-    , DeleteSkillGroupResponse
-    -- * Response Lenses
-    , dsgrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteSkillGroup' smart constructor.
-newtype DeleteSkillGroup = DeleteSkillGroup'
-  { _dsgSkillGroupARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteSkillGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgSkillGroupARN' - The ARN of the skill group to delete. Required.
-deleteSkillGroup
-    :: DeleteSkillGroup
-deleteSkillGroup = DeleteSkillGroup' {_dsgSkillGroupARN = Nothing}
-
-
--- | The ARN of the skill group to delete. Required.
-dsgSkillGroupARN :: Lens' DeleteSkillGroup (Maybe Text)
-dsgSkillGroupARN = lens _dsgSkillGroupARN (\ s a -> s{_dsgSkillGroupARN = a})
-
-instance AWSRequest DeleteSkillGroup where
-        type Rs DeleteSkillGroup = DeleteSkillGroupResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteSkillGroupResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteSkillGroup where
-
-instance NFData DeleteSkillGroup where
-
-instance ToHeaders DeleteSkillGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DeleteSkillGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteSkillGroup where
-        toJSON DeleteSkillGroup'{..}
-          = object
-              (catMaybes
-                 [("SkillGroupArn" .=) <$> _dsgSkillGroupARN])
-
-instance ToPath DeleteSkillGroup where
-        toPath = const "/"
-
-instance ToQuery DeleteSkillGroup where
-        toQuery = const mempty
-
--- | /See:/ 'deleteSkillGroupResponse' smart constructor.
-newtype DeleteSkillGroupResponse = DeleteSkillGroupResponse'
-  { _dsgrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteSkillGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgrsResponseStatus' - -- | The response status code.
-deleteSkillGroupResponse
-    :: Int -- ^ 'dsgrsResponseStatus'
-    -> DeleteSkillGroupResponse
-deleteSkillGroupResponse pResponseStatus_ =
-  DeleteSkillGroupResponse' {_dsgrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dsgrsResponseStatus :: Lens' DeleteSkillGroupResponse Int
-dsgrsResponseStatus = lens _dsgrsResponseStatus (\ s a -> s{_dsgrsResponseStatus = a})
-
-instance NFData DeleteSkillGroupResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/DeleteUser.hs b/gen/Network/AWS/AlexaBusiness/DeleteUser.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DeleteUser.hs
+++ /dev/null
@@ -1,132 +0,0 @@
-{-# 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.AlexaBusiness.DeleteUser
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes a specified user by user ARN and enrollment ARN.
---
---
-module Network.AWS.AlexaBusiness.DeleteUser
-    (
-    -- * Creating a Request
-      deleteUser
-    , DeleteUser
-    -- * Request Lenses
-    , duUserARN
-    , duEnrollmentId
-
-    -- * Destructuring the Response
-    , deleteUserResponse
-    , DeleteUserResponse
-    -- * Response Lenses
-    , dursResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteUser' smart constructor.
-data DeleteUser = DeleteUser'
-  { _duUserARN      :: !(Maybe Text)
-  , _duEnrollmentId :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteUser' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'duUserARN' - The ARN of the user to delete in the organization. Required.
---
--- * 'duEnrollmentId' - The ARN of the user's enrollment in the organization. Required.
-deleteUser
-    :: Text -- ^ 'duEnrollmentId'
-    -> DeleteUser
-deleteUser pEnrollmentId_ =
-  DeleteUser' {_duUserARN = Nothing, _duEnrollmentId = pEnrollmentId_}
-
-
--- | The ARN of the user to delete in the organization. Required.
-duUserARN :: Lens' DeleteUser (Maybe Text)
-duUserARN = lens _duUserARN (\ s a -> s{_duUserARN = a})
-
--- | The ARN of the user's enrollment in the organization. Required.
-duEnrollmentId :: Lens' DeleteUser Text
-duEnrollmentId = lens _duEnrollmentId (\ s a -> s{_duEnrollmentId = a})
-
-instance AWSRequest DeleteUser where
-        type Rs DeleteUser = DeleteUserResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteUserResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteUser where
-
-instance NFData DeleteUser where
-
-instance ToHeaders DeleteUser where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DeleteUser" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteUser where
-        toJSON DeleteUser'{..}
-          = object
-              (catMaybes
-                 [("UserArn" .=) <$> _duUserARN,
-                  Just ("EnrollmentId" .= _duEnrollmentId)])
-
-instance ToPath DeleteUser where
-        toPath = const "/"
-
-instance ToQuery DeleteUser where
-        toQuery = const mempty
-
--- | /See:/ 'deleteUserResponse' smart constructor.
-newtype DeleteUserResponse = DeleteUserResponse'
-  { _dursResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteUserResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dursResponseStatus' - -- | The response status code.
-deleteUserResponse
-    :: Int -- ^ 'dursResponseStatus'
-    -> DeleteUserResponse
-deleteUserResponse pResponseStatus_ =
-  DeleteUserResponse' {_dursResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dursResponseStatus :: Lens' DeleteUserResponse Int
-dursResponseStatus = lens _dursResponseStatus (\ s a -> s{_dursResponseStatus = a})
-
-instance NFData DeleteUserResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/DisassociateContactFromAddressBook.hs b/gen/Network/AWS/AlexaBusiness/DisassociateContactFromAddressBook.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DisassociateContactFromAddressBook.hs
+++ /dev/null
@@ -1,148 +0,0 @@
-{-# 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.AlexaBusiness.DisassociateContactFromAddressBook
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates a contact from a given address book.
---
---
-module Network.AWS.AlexaBusiness.DisassociateContactFromAddressBook
-    (
-    -- * Creating a Request
-      disassociateContactFromAddressBook
-    , DisassociateContactFromAddressBook
-    -- * Request Lenses
-    , dcfabContactARN
-    , dcfabAddressBookARN
-
-    -- * Destructuring the Response
-    , disassociateContactFromAddressBookResponse
-    , DisassociateContactFromAddressBookResponse
-    -- * Response Lenses
-    , dcfabrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'disassociateContactFromAddressBook' smart constructor.
-data DisassociateContactFromAddressBook = DisassociateContactFromAddressBook'
-  { _dcfabContactARN     :: !Text
-  , _dcfabAddressBookARN :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateContactFromAddressBook' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcfabContactARN' - The ARN of the contact to disassociate from an address book.
---
--- * 'dcfabAddressBookARN' - The ARN of the address from which to disassociate the contact.
-disassociateContactFromAddressBook
-    :: Text -- ^ 'dcfabContactARN'
-    -> Text -- ^ 'dcfabAddressBookARN'
-    -> DisassociateContactFromAddressBook
-disassociateContactFromAddressBook pContactARN_ pAddressBookARN_ =
-  DisassociateContactFromAddressBook'
-    {_dcfabContactARN = pContactARN_, _dcfabAddressBookARN = pAddressBookARN_}
-
-
--- | The ARN of the contact to disassociate from an address book.
-dcfabContactARN :: Lens' DisassociateContactFromAddressBook Text
-dcfabContactARN = lens _dcfabContactARN (\ s a -> s{_dcfabContactARN = a})
-
--- | The ARN of the address from which to disassociate the contact.
-dcfabAddressBookARN :: Lens' DisassociateContactFromAddressBook Text
-dcfabAddressBookARN = lens _dcfabAddressBookARN (\ s a -> s{_dcfabAddressBookARN = a})
-
-instance AWSRequest
-           DisassociateContactFromAddressBook
-         where
-        type Rs DisassociateContactFromAddressBook =
-             DisassociateContactFromAddressBookResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DisassociateContactFromAddressBookResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DisassociateContactFromAddressBook
-         where
-
-instance NFData DisassociateContactFromAddressBook
-         where
-
-instance ToHeaders DisassociateContactFromAddressBook
-         where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DisassociateContactFromAddressBook"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DisassociateContactFromAddressBook
-         where
-        toJSON DisassociateContactFromAddressBook'{..}
-          = object
-              (catMaybes
-                 [Just ("ContactArn" .= _dcfabContactARN),
-                  Just ("AddressBookArn" .= _dcfabAddressBookARN)])
-
-instance ToPath DisassociateContactFromAddressBook
-         where
-        toPath = const "/"
-
-instance ToQuery DisassociateContactFromAddressBook
-         where
-        toQuery = const mempty
-
--- | /See:/ 'disassociateContactFromAddressBookResponse' smart constructor.
-newtype DisassociateContactFromAddressBookResponse = DisassociateContactFromAddressBookResponse'
-  { _dcfabrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateContactFromAddressBookResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcfabrsResponseStatus' - -- | The response status code.
-disassociateContactFromAddressBookResponse
-    :: Int -- ^ 'dcfabrsResponseStatus'
-    -> DisassociateContactFromAddressBookResponse
-disassociateContactFromAddressBookResponse pResponseStatus_ =
-  DisassociateContactFromAddressBookResponse'
-    {_dcfabrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dcfabrsResponseStatus :: Lens' DisassociateContactFromAddressBookResponse Int
-dcfabrsResponseStatus = lens _dcfabrsResponseStatus (\ s a -> s{_dcfabrsResponseStatus = a})
-
-instance NFData
-           DisassociateContactFromAddressBookResponse
-         where
diff --git a/gen/Network/AWS/AlexaBusiness/DisassociateDeviceFromRoom.hs b/gen/Network/AWS/AlexaBusiness/DisassociateDeviceFromRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DisassociateDeviceFromRoom.hs
+++ /dev/null
@@ -1,125 +0,0 @@
-{-# 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.AlexaBusiness.DisassociateDeviceFromRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates a device from its current room. The device continues to be connected to the Wi-Fi network and is still registered to the account. The device settings and skills are removed from the room.
---
---
-module Network.AWS.AlexaBusiness.DisassociateDeviceFromRoom
-    (
-    -- * Creating a Request
-      disassociateDeviceFromRoom
-    , DisassociateDeviceFromRoom
-    -- * Request Lenses
-    , ddfrDeviceARN
-
-    -- * Destructuring the Response
-    , disassociateDeviceFromRoomResponse
-    , DisassociateDeviceFromRoomResponse
-    -- * Response Lenses
-    , ddfrrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'disassociateDeviceFromRoom' smart constructor.
-newtype DisassociateDeviceFromRoom = DisassociateDeviceFromRoom'
-  { _ddfrDeviceARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateDeviceFromRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddfrDeviceARN' - The ARN of the device to disassociate from a room. Required.
-disassociateDeviceFromRoom
-    :: DisassociateDeviceFromRoom
-disassociateDeviceFromRoom =
-  DisassociateDeviceFromRoom' {_ddfrDeviceARN = Nothing}
-
-
--- | The ARN of the device to disassociate from a room. Required.
-ddfrDeviceARN :: Lens' DisassociateDeviceFromRoom (Maybe Text)
-ddfrDeviceARN = lens _ddfrDeviceARN (\ s a -> s{_ddfrDeviceARN = a})
-
-instance AWSRequest DisassociateDeviceFromRoom where
-        type Rs DisassociateDeviceFromRoom =
-             DisassociateDeviceFromRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DisassociateDeviceFromRoomResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DisassociateDeviceFromRoom where
-
-instance NFData DisassociateDeviceFromRoom where
-
-instance ToHeaders DisassociateDeviceFromRoom where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DisassociateDeviceFromRoom" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DisassociateDeviceFromRoom where
-        toJSON DisassociateDeviceFromRoom'{..}
-          = object
-              (catMaybes [("DeviceArn" .=) <$> _ddfrDeviceARN])
-
-instance ToPath DisassociateDeviceFromRoom where
-        toPath = const "/"
-
-instance ToQuery DisassociateDeviceFromRoom where
-        toQuery = const mempty
-
--- | /See:/ 'disassociateDeviceFromRoomResponse' smart constructor.
-newtype DisassociateDeviceFromRoomResponse = DisassociateDeviceFromRoomResponse'
-  { _ddfrrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateDeviceFromRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddfrrsResponseStatus' - -- | The response status code.
-disassociateDeviceFromRoomResponse
-    :: Int -- ^ 'ddfrrsResponseStatus'
-    -> DisassociateDeviceFromRoomResponse
-disassociateDeviceFromRoomResponse pResponseStatus_ =
-  DisassociateDeviceFromRoomResponse' {_ddfrrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-ddfrrsResponseStatus :: Lens' DisassociateDeviceFromRoomResponse Int
-ddfrrsResponseStatus = lens _ddfrrsResponseStatus (\ s a -> s{_ddfrrsResponseStatus = a})
-
-instance NFData DisassociateDeviceFromRoomResponse
-         where
diff --git a/gen/Network/AWS/AlexaBusiness/DisassociateSkillGroupFromRoom.hs b/gen/Network/AWS/AlexaBusiness/DisassociateSkillGroupFromRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/DisassociateSkillGroupFromRoom.hs
+++ /dev/null
@@ -1,141 +0,0 @@
-{-# 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.AlexaBusiness.DisassociateSkillGroupFromRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates a skill group from a specified room. This disables all skills in the skill group on all devices in the room.
---
---
-module Network.AWS.AlexaBusiness.DisassociateSkillGroupFromRoom
-    (
-    -- * Creating a Request
-      disassociateSkillGroupFromRoom
-    , DisassociateSkillGroupFromRoom
-    -- * Request Lenses
-    , dsgfrSkillGroupARN
-    , dsgfrRoomARN
-
-    -- * Destructuring the Response
-    , disassociateSkillGroupFromRoomResponse
-    , DisassociateSkillGroupFromRoomResponse
-    -- * Response Lenses
-    , dsgfrrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'disassociateSkillGroupFromRoom' smart constructor.
-data DisassociateSkillGroupFromRoom = DisassociateSkillGroupFromRoom'
-  { _dsgfrSkillGroupARN :: !(Maybe Text)
-  , _dsgfrRoomARN       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateSkillGroupFromRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgfrSkillGroupARN' - The ARN of the skill group to disassociate from a room. Required.
---
--- * 'dsgfrRoomARN' - The ARN of the room from which the skill group is to be disassociated. Required.
-disassociateSkillGroupFromRoom
-    :: DisassociateSkillGroupFromRoom
-disassociateSkillGroupFromRoom =
-  DisassociateSkillGroupFromRoom'
-    {_dsgfrSkillGroupARN = Nothing, _dsgfrRoomARN = Nothing}
-
-
--- | The ARN of the skill group to disassociate from a room. Required.
-dsgfrSkillGroupARN :: Lens' DisassociateSkillGroupFromRoom (Maybe Text)
-dsgfrSkillGroupARN = lens _dsgfrSkillGroupARN (\ s a -> s{_dsgfrSkillGroupARN = a})
-
--- | The ARN of the room from which the skill group is to be disassociated. Required.
-dsgfrRoomARN :: Lens' DisassociateSkillGroupFromRoom (Maybe Text)
-dsgfrRoomARN = lens _dsgfrRoomARN (\ s a -> s{_dsgfrRoomARN = a})
-
-instance AWSRequest DisassociateSkillGroupFromRoom
-         where
-        type Rs DisassociateSkillGroupFromRoom =
-             DisassociateSkillGroupFromRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DisassociateSkillGroupFromRoomResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DisassociateSkillGroupFromRoom
-         where
-
-instance NFData DisassociateSkillGroupFromRoom where
-
-instance ToHeaders DisassociateSkillGroupFromRoom
-         where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.DisassociateSkillGroupFromRoom" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DisassociateSkillGroupFromRoom where
-        toJSON DisassociateSkillGroupFromRoom'{..}
-          = object
-              (catMaybes
-                 [("SkillGroupArn" .=) <$> _dsgfrSkillGroupARN,
-                  ("RoomArn" .=) <$> _dsgfrRoomARN])
-
-instance ToPath DisassociateSkillGroupFromRoom where
-        toPath = const "/"
-
-instance ToQuery DisassociateSkillGroupFromRoom where
-        toQuery = const mempty
-
--- | /See:/ 'disassociateSkillGroupFromRoomResponse' smart constructor.
-newtype DisassociateSkillGroupFromRoomResponse = DisassociateSkillGroupFromRoomResponse'
-  { _dsgfrrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateSkillGroupFromRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgfrrsResponseStatus' - -- | The response status code.
-disassociateSkillGroupFromRoomResponse
-    :: Int -- ^ 'dsgfrrsResponseStatus'
-    -> DisassociateSkillGroupFromRoomResponse
-disassociateSkillGroupFromRoomResponse pResponseStatus_ =
-  DisassociateSkillGroupFromRoomResponse'
-    {_dsgfrrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dsgfrrsResponseStatus :: Lens' DisassociateSkillGroupFromRoomResponse Int
-dsgfrrsResponseStatus = lens _dsgfrrsResponseStatus (\ s a -> s{_dsgfrrsResponseStatus = a})
-
-instance NFData
-           DisassociateSkillGroupFromRoomResponse
-         where
diff --git a/gen/Network/AWS/AlexaBusiness/GetAddressBook.hs b/gen/Network/AWS/AlexaBusiness/GetAddressBook.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/GetAddressBook.hs
+++ /dev/null
@@ -1,133 +0,0 @@
-{-# 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.AlexaBusiness.GetAddressBook
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets address the book details by the address book ARN.
---
---
-module Network.AWS.AlexaBusiness.GetAddressBook
-    (
-    -- * Creating a Request
-      getAddressBook
-    , GetAddressBook
-    -- * Request Lenses
-    , gabAddressBookARN
-
-    -- * Destructuring the Response
-    , getAddressBookResponse
-    , GetAddressBookResponse
-    -- * Response Lenses
-    , gabrsAddressBook
-    , gabrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getAddressBook' smart constructor.
-newtype GetAddressBook = GetAddressBook'
-  { _gabAddressBookARN :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetAddressBook' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gabAddressBookARN' - The ARN of the address book for which to request details.
-getAddressBook
-    :: Text -- ^ 'gabAddressBookARN'
-    -> GetAddressBook
-getAddressBook pAddressBookARN_ =
-  GetAddressBook' {_gabAddressBookARN = pAddressBookARN_}
-
-
--- | The ARN of the address book for which to request details.
-gabAddressBookARN :: Lens' GetAddressBook Text
-gabAddressBookARN = lens _gabAddressBookARN (\ s a -> s{_gabAddressBookARN = a})
-
-instance AWSRequest GetAddressBook where
-        type Rs GetAddressBook = GetAddressBookResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetAddressBookResponse' <$>
-                   (x .?> "AddressBook") <*> (pure (fromEnum s)))
-
-instance Hashable GetAddressBook where
-
-instance NFData GetAddressBook where
-
-instance ToHeaders GetAddressBook where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.GetAddressBook" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetAddressBook where
-        toJSON GetAddressBook'{..}
-          = object
-              (catMaybes
-                 [Just ("AddressBookArn" .= _gabAddressBookARN)])
-
-instance ToPath GetAddressBook where
-        toPath = const "/"
-
-instance ToQuery GetAddressBook where
-        toQuery = const mempty
-
--- | /See:/ 'getAddressBookResponse' smart constructor.
-data GetAddressBookResponse = GetAddressBookResponse'
-  { _gabrsAddressBook    :: !(Maybe AddressBook)
-  , _gabrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetAddressBookResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gabrsAddressBook' - The details of the requested address book.
---
--- * 'gabrsResponseStatus' - -- | The response status code.
-getAddressBookResponse
-    :: Int -- ^ 'gabrsResponseStatus'
-    -> GetAddressBookResponse
-getAddressBookResponse pResponseStatus_ =
-  GetAddressBookResponse'
-    {_gabrsAddressBook = Nothing, _gabrsResponseStatus = pResponseStatus_}
-
-
--- | The details of the requested address book.
-gabrsAddressBook :: Lens' GetAddressBookResponse (Maybe AddressBook)
-gabrsAddressBook = lens _gabrsAddressBook (\ s a -> s{_gabrsAddressBook = a})
-
--- | -- | The response status code.
-gabrsResponseStatus :: Lens' GetAddressBookResponse Int
-gabrsResponseStatus = lens _gabrsResponseStatus (\ s a -> s{_gabrsResponseStatus = a})
-
-instance NFData GetAddressBookResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/GetContact.hs b/gen/Network/AWS/AlexaBusiness/GetContact.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/GetContact.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# 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.AlexaBusiness.GetContact
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets the contact details by the contact ARN.
---
---
-module Network.AWS.AlexaBusiness.GetContact
-    (
-    -- * Creating a Request
-      getContact
-    , GetContact
-    -- * Request Lenses
-    , gcContactARN
-
-    -- * Destructuring the Response
-    , getContactResponse
-    , GetContactResponse
-    -- * Response Lenses
-    , gcrsContact
-    , gcrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getContact' smart constructor.
-newtype GetContact = GetContact'
-  { _gcContactARN :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetContact' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcContactARN' - The ARN of the contact for which to request details.
-getContact
-    :: Text -- ^ 'gcContactARN'
-    -> GetContact
-getContact pContactARN_ = GetContact' {_gcContactARN = pContactARN_}
-
-
--- | The ARN of the contact for which to request details.
-gcContactARN :: Lens' GetContact Text
-gcContactARN = lens _gcContactARN (\ s a -> s{_gcContactARN = a})
-
-instance AWSRequest GetContact where
-        type Rs GetContact = GetContactResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetContactResponse' <$>
-                   (x .?> "Contact") <*> (pure (fromEnum s)))
-
-instance Hashable GetContact where
-
-instance NFData GetContact where
-
-instance ToHeaders GetContact where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.GetContact" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetContact where
-        toJSON GetContact'{..}
-          = object
-              (catMaybes [Just ("ContactArn" .= _gcContactARN)])
-
-instance ToPath GetContact where
-        toPath = const "/"
-
-instance ToQuery GetContact where
-        toQuery = const mempty
-
--- | /See:/ 'getContactResponse' smart constructor.
-data GetContactResponse = GetContactResponse'
-  { _gcrsContact        :: !(Maybe Contact)
-  , _gcrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetContactResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcrsContact' - The details of the requested contact.
---
--- * 'gcrsResponseStatus' - -- | The response status code.
-getContactResponse
-    :: Int -- ^ 'gcrsResponseStatus'
-    -> GetContactResponse
-getContactResponse pResponseStatus_ =
-  GetContactResponse'
-    {_gcrsContact = Nothing, _gcrsResponseStatus = pResponseStatus_}
-
-
--- | The details of the requested contact.
-gcrsContact :: Lens' GetContactResponse (Maybe Contact)
-gcrsContact = lens _gcrsContact (\ s a -> s{_gcrsContact = a})
-
--- | -- | The response status code.
-gcrsResponseStatus :: Lens' GetContactResponse Int
-gcrsResponseStatus = lens _gcrsResponseStatus (\ s a -> s{_gcrsResponseStatus = a})
-
-instance NFData GetContactResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/GetDevice.hs b/gen/Network/AWS/AlexaBusiness/GetDevice.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/GetDevice.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# 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.AlexaBusiness.GetDevice
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets the details of a device by device ARN.
---
---
-module Network.AWS.AlexaBusiness.GetDevice
-    (
-    -- * Creating a Request
-      getDevice
-    , GetDevice
-    -- * Request Lenses
-    , gdDeviceARN
-
-    -- * Destructuring the Response
-    , getDeviceResponse
-    , GetDeviceResponse
-    -- * Response Lenses
-    , gdrsDevice
-    , gdrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getDevice' smart constructor.
-newtype GetDevice = GetDevice'
-  { _gdDeviceARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetDevice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdDeviceARN' - The ARN of the device for which to request details. Required.
-getDevice
-    :: GetDevice
-getDevice = GetDevice' {_gdDeviceARN = Nothing}
-
-
--- | The ARN of the device for which to request details. Required.
-gdDeviceARN :: Lens' GetDevice (Maybe Text)
-gdDeviceARN = lens _gdDeviceARN (\ s a -> s{_gdDeviceARN = a})
-
-instance AWSRequest GetDevice where
-        type Rs GetDevice = GetDeviceResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetDeviceResponse' <$>
-                   (x .?> "Device") <*> (pure (fromEnum s)))
-
-instance Hashable GetDevice where
-
-instance NFData GetDevice where
-
-instance ToHeaders GetDevice where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.GetDevice" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetDevice where
-        toJSON GetDevice'{..}
-          = object
-              (catMaybes [("DeviceArn" .=) <$> _gdDeviceARN])
-
-instance ToPath GetDevice where
-        toPath = const "/"
-
-instance ToQuery GetDevice where
-        toQuery = const mempty
-
--- | /See:/ 'getDeviceResponse' smart constructor.
-data GetDeviceResponse = GetDeviceResponse'
-  { _gdrsDevice         :: !(Maybe Device)
-  , _gdrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetDeviceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gdrsDevice' - The details of the device requested. Required.
---
--- * 'gdrsResponseStatus' - -- | The response status code.
-getDeviceResponse
-    :: Int -- ^ 'gdrsResponseStatus'
-    -> GetDeviceResponse
-getDeviceResponse pResponseStatus_ =
-  GetDeviceResponse'
-    {_gdrsDevice = Nothing, _gdrsResponseStatus = pResponseStatus_}
-
-
--- | The details of the device requested. Required.
-gdrsDevice :: Lens' GetDeviceResponse (Maybe Device)
-gdrsDevice = lens _gdrsDevice (\ s a -> s{_gdrsDevice = a})
-
--- | -- | The response status code.
-gdrsResponseStatus :: Lens' GetDeviceResponse Int
-gdrsResponseStatus = lens _gdrsResponseStatus (\ s a -> s{_gdrsResponseStatus = a})
-
-instance NFData GetDeviceResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/GetProfile.hs b/gen/Network/AWS/AlexaBusiness/GetProfile.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/GetProfile.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# 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.AlexaBusiness.GetProfile
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets the details of a room profile by profile ARN.
---
---
-module Network.AWS.AlexaBusiness.GetProfile
-    (
-    -- * Creating a Request
-      getProfile
-    , GetProfile
-    -- * Request Lenses
-    , gpProfileARN
-
-    -- * Destructuring the Response
-    , getProfileResponse
-    , GetProfileResponse
-    -- * Response Lenses
-    , gprsProfile
-    , gprsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getProfile' smart constructor.
-newtype GetProfile = GetProfile'
-  { _gpProfileARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetProfile' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gpProfileARN' - The ARN of the room profile for which to request details. Required.
-getProfile
-    :: GetProfile
-getProfile = GetProfile' {_gpProfileARN = Nothing}
-
-
--- | The ARN of the room profile for which to request details. Required.
-gpProfileARN :: Lens' GetProfile (Maybe Text)
-gpProfileARN = lens _gpProfileARN (\ s a -> s{_gpProfileARN = a})
-
-instance AWSRequest GetProfile where
-        type Rs GetProfile = GetProfileResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetProfileResponse' <$>
-                   (x .?> "Profile") <*> (pure (fromEnum s)))
-
-instance Hashable GetProfile where
-
-instance NFData GetProfile where
-
-instance ToHeaders GetProfile where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.GetProfile" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetProfile where
-        toJSON GetProfile'{..}
-          = object
-              (catMaybes [("ProfileArn" .=) <$> _gpProfileARN])
-
-instance ToPath GetProfile where
-        toPath = const "/"
-
-instance ToQuery GetProfile where
-        toQuery = const mempty
-
--- | /See:/ 'getProfileResponse' smart constructor.
-data GetProfileResponse = GetProfileResponse'
-  { _gprsProfile        :: !(Maybe Profile)
-  , _gprsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetProfileResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gprsProfile' - The details of the room profile requested. Required.
---
--- * 'gprsResponseStatus' - -- | The response status code.
-getProfileResponse
-    :: Int -- ^ 'gprsResponseStatus'
-    -> GetProfileResponse
-getProfileResponse pResponseStatus_ =
-  GetProfileResponse'
-    {_gprsProfile = Nothing, _gprsResponseStatus = pResponseStatus_}
-
-
--- | The details of the room profile requested. Required.
-gprsProfile :: Lens' GetProfileResponse (Maybe Profile)
-gprsProfile = lens _gprsProfile (\ s a -> s{_gprsProfile = a})
-
--- | -- | The response status code.
-gprsResponseStatus :: Lens' GetProfileResponse Int
-gprsResponseStatus = lens _gprsResponseStatus (\ s a -> s{_gprsResponseStatus = a})
-
-instance NFData GetProfileResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/GetRoom.hs b/gen/Network/AWS/AlexaBusiness/GetRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/GetRoom.hs
+++ /dev/null
@@ -1,128 +0,0 @@
-{-# 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.AlexaBusiness.GetRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets room details by room ARN.
---
---
-module Network.AWS.AlexaBusiness.GetRoom
-    (
-    -- * Creating a Request
-      getRoom
-    , GetRoom
-    -- * Request Lenses
-    , grRoomARN
-
-    -- * Destructuring the Response
-    , getRoomResponse
-    , GetRoomResponse
-    -- * Response Lenses
-    , grrsRoom
-    , grrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getRoom' smart constructor.
-newtype GetRoom = GetRoom'
-  { _grRoomARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grRoomARN' - The ARN of the room for which to request details. Required.
-getRoom
-    :: GetRoom
-getRoom = GetRoom' {_grRoomARN = Nothing}
-
-
--- | The ARN of the room for which to request details. Required.
-grRoomARN :: Lens' GetRoom (Maybe Text)
-grRoomARN = lens _grRoomARN (\ s a -> s{_grRoomARN = a})
-
-instance AWSRequest GetRoom where
-        type Rs GetRoom = GetRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetRoomResponse' <$>
-                   (x .?> "Room") <*> (pure (fromEnum s)))
-
-instance Hashable GetRoom where
-
-instance NFData GetRoom where
-
-instance ToHeaders GetRoom where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.GetRoom" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetRoom where
-        toJSON GetRoom'{..}
-          = object (catMaybes [("RoomArn" .=) <$> _grRoomARN])
-
-instance ToPath GetRoom where
-        toPath = const "/"
-
-instance ToQuery GetRoom where
-        toQuery = const mempty
-
--- | /See:/ 'getRoomResponse' smart constructor.
-data GetRoomResponse = GetRoomResponse'
-  { _grrsRoom           :: !(Maybe Room)
-  , _grrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grrsRoom' - The details of the room requested.
---
--- * 'grrsResponseStatus' - -- | The response status code.
-getRoomResponse
-    :: Int -- ^ 'grrsResponseStatus'
-    -> GetRoomResponse
-getRoomResponse pResponseStatus_ =
-  GetRoomResponse' {_grrsRoom = Nothing, _grrsResponseStatus = pResponseStatus_}
-
-
--- | The details of the room requested.
-grrsRoom :: Lens' GetRoomResponse (Maybe Room)
-grrsRoom = lens _grrsRoom (\ s a -> s{_grrsRoom = a})
-
--- | -- | The response status code.
-grrsResponseStatus :: Lens' GetRoomResponse Int
-grrsResponseStatus = lens _grrsResponseStatus (\ s a -> s{_grrsResponseStatus = a})
-
-instance NFData GetRoomResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/GetRoomSkillParameter.hs b/gen/Network/AWS/AlexaBusiness/GetRoomSkillParameter.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/GetRoomSkillParameter.hs
+++ /dev/null
@@ -1,160 +0,0 @@
-{-# 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.AlexaBusiness.GetRoomSkillParameter
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets room skill parameter details by room, skill, and parameter key ARN.
---
---
-module Network.AWS.AlexaBusiness.GetRoomSkillParameter
-    (
-    -- * Creating a Request
-      getRoomSkillParameter
-    , GetRoomSkillParameter
-    -- * Request Lenses
-    , grspRoomARN
-    , grspSkillId
-    , grspParameterKey
-
-    -- * Destructuring the Response
-    , getRoomSkillParameterResponse
-    , GetRoomSkillParameterResponse
-    -- * Response Lenses
-    , grsprsRoomSkillParameter
-    , grsprsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getRoomSkillParameter' smart constructor.
-data GetRoomSkillParameter = GetRoomSkillParameter'
-  { _grspRoomARN      :: !(Maybe Text)
-  , _grspSkillId      :: !Text
-  , _grspParameterKey :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetRoomSkillParameter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grspRoomARN' - The ARN of the room from which to get the room skill parameter details.
---
--- * 'grspSkillId' - The ARN of the skill from which to get the room skill parameter details. Required.
---
--- * 'grspParameterKey' - The room skill parameter key for which to get details. Required.
-getRoomSkillParameter
-    :: Text -- ^ 'grspSkillId'
-    -> Text -- ^ 'grspParameterKey'
-    -> GetRoomSkillParameter
-getRoomSkillParameter pSkillId_ pParameterKey_ =
-  GetRoomSkillParameter'
-    { _grspRoomARN = Nothing
-    , _grspSkillId = pSkillId_
-    , _grspParameterKey = pParameterKey_
-    }
-
-
--- | The ARN of the room from which to get the room skill parameter details.
-grspRoomARN :: Lens' GetRoomSkillParameter (Maybe Text)
-grspRoomARN = lens _grspRoomARN (\ s a -> s{_grspRoomARN = a})
-
--- | The ARN of the skill from which to get the room skill parameter details. Required.
-grspSkillId :: Lens' GetRoomSkillParameter Text
-grspSkillId = lens _grspSkillId (\ s a -> s{_grspSkillId = a})
-
--- | The room skill parameter key for which to get details. Required.
-grspParameterKey :: Lens' GetRoomSkillParameter Text
-grspParameterKey = lens _grspParameterKey (\ s a -> s{_grspParameterKey = a})
-
-instance AWSRequest GetRoomSkillParameter where
-        type Rs GetRoomSkillParameter =
-             GetRoomSkillParameterResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetRoomSkillParameterResponse' <$>
-                   (x .?> "RoomSkillParameter") <*> (pure (fromEnum s)))
-
-instance Hashable GetRoomSkillParameter where
-
-instance NFData GetRoomSkillParameter where
-
-instance ToHeaders GetRoomSkillParameter where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.GetRoomSkillParameter" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetRoomSkillParameter where
-        toJSON GetRoomSkillParameter'{..}
-          = object
-              (catMaybes
-                 [("RoomArn" .=) <$> _grspRoomARN,
-                  Just ("SkillId" .= _grspSkillId),
-                  Just ("ParameterKey" .= _grspParameterKey)])
-
-instance ToPath GetRoomSkillParameter where
-        toPath = const "/"
-
-instance ToQuery GetRoomSkillParameter where
-        toQuery = const mempty
-
--- | /See:/ 'getRoomSkillParameterResponse' smart constructor.
-data GetRoomSkillParameterResponse = GetRoomSkillParameterResponse'
-  { _grsprsRoomSkillParameter :: !(Maybe RoomSkillParameter)
-  , _grsprsResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetRoomSkillParameterResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grsprsRoomSkillParameter' - The details of the room skill parameter requested. Required.
---
--- * 'grsprsResponseStatus' - -- | The response status code.
-getRoomSkillParameterResponse
-    :: Int -- ^ 'grsprsResponseStatus'
-    -> GetRoomSkillParameterResponse
-getRoomSkillParameterResponse pResponseStatus_ =
-  GetRoomSkillParameterResponse'
-    { _grsprsRoomSkillParameter = Nothing
-    , _grsprsResponseStatus = pResponseStatus_
-    }
-
-
--- | The details of the room skill parameter requested. Required.
-grsprsRoomSkillParameter :: Lens' GetRoomSkillParameterResponse (Maybe RoomSkillParameter)
-grsprsRoomSkillParameter = lens _grsprsRoomSkillParameter (\ s a -> s{_grsprsRoomSkillParameter = a})
-
--- | -- | The response status code.
-grsprsResponseStatus :: Lens' GetRoomSkillParameterResponse Int
-grsprsResponseStatus = lens _grsprsResponseStatus (\ s a -> s{_grsprsResponseStatus = a})
-
-instance NFData GetRoomSkillParameterResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/GetSkillGroup.hs b/gen/Network/AWS/AlexaBusiness/GetSkillGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/GetSkillGroup.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# 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.AlexaBusiness.GetSkillGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets skill group details by skill group ARN.
---
---
-module Network.AWS.AlexaBusiness.GetSkillGroup
-    (
-    -- * Creating a Request
-      getSkillGroup
-    , GetSkillGroup
-    -- * Request Lenses
-    , gsgSkillGroupARN
-
-    -- * Destructuring the Response
-    , getSkillGroupResponse
-    , GetSkillGroupResponse
-    -- * Response Lenses
-    , gsgrsSkillGroup
-    , gsgrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'getSkillGroup' smart constructor.
-newtype GetSkillGroup = GetSkillGroup'
-  { _gsgSkillGroupARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetSkillGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gsgSkillGroupARN' - The ARN of the skill group for which to get details. Required.
-getSkillGroup
-    :: GetSkillGroup
-getSkillGroup = GetSkillGroup' {_gsgSkillGroupARN = Nothing}
-
-
--- | The ARN of the skill group for which to get details. Required.
-gsgSkillGroupARN :: Lens' GetSkillGroup (Maybe Text)
-gsgSkillGroupARN = lens _gsgSkillGroupARN (\ s a -> s{_gsgSkillGroupARN = a})
-
-instance AWSRequest GetSkillGroup where
-        type Rs GetSkillGroup = GetSkillGroupResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetSkillGroupResponse' <$>
-                   (x .?> "SkillGroup") <*> (pure (fromEnum s)))
-
-instance Hashable GetSkillGroup where
-
-instance NFData GetSkillGroup where
-
-instance ToHeaders GetSkillGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.GetSkillGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetSkillGroup where
-        toJSON GetSkillGroup'{..}
-          = object
-              (catMaybes
-                 [("SkillGroupArn" .=) <$> _gsgSkillGroupARN])
-
-instance ToPath GetSkillGroup where
-        toPath = const "/"
-
-instance ToQuery GetSkillGroup where
-        toQuery = const mempty
-
--- | /See:/ 'getSkillGroupResponse' smart constructor.
-data GetSkillGroupResponse = GetSkillGroupResponse'
-  { _gsgrsSkillGroup     :: !(Maybe SkillGroup)
-  , _gsgrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetSkillGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gsgrsSkillGroup' - The details of the skill group requested. Required.
---
--- * 'gsgrsResponseStatus' - -- | The response status code.
-getSkillGroupResponse
-    :: Int -- ^ 'gsgrsResponseStatus'
-    -> GetSkillGroupResponse
-getSkillGroupResponse pResponseStatus_ =
-  GetSkillGroupResponse'
-    {_gsgrsSkillGroup = Nothing, _gsgrsResponseStatus = pResponseStatus_}
-
-
--- | The details of the skill group requested. Required.
-gsgrsSkillGroup :: Lens' GetSkillGroupResponse (Maybe SkillGroup)
-gsgrsSkillGroup = lens _gsgrsSkillGroup (\ s a -> s{_gsgrsSkillGroup = a})
-
--- | -- | The response status code.
-gsgrsResponseStatus :: Lens' GetSkillGroupResponse Int
-gsgrsResponseStatus = lens _gsgrsResponseStatus (\ s a -> s{_gsgrsResponseStatus = a})
-
-instance NFData GetSkillGroupResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/ListDeviceEvents.hs b/gen/Network/AWS/AlexaBusiness/ListDeviceEvents.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/ListDeviceEvents.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# 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.AlexaBusiness.ListDeviceEvents
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the Device Event history for up to 30 days. If EventType isn't specified in the request, this returns a list of all device events in reverse chronological order. If EventType is specified, this returns a list of device events for that EventType in reverse chronological order.
---
---
-module Network.AWS.AlexaBusiness.ListDeviceEvents
-    (
-    -- * Creating a Request
-      listDeviceEvents
-    , ListDeviceEvents
-    -- * Request Lenses
-    , ldeNextToken
-    , ldeEventType
-    , ldeMaxResults
-    , ldeDeviceARN
-
-    -- * Destructuring the Response
-    , listDeviceEventsResponse
-    , ListDeviceEventsResponse
-    -- * Response Lenses
-    , ldersNextToken
-    , ldersDeviceEvents
-    , ldersResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listDeviceEvents' smart constructor.
-data ListDeviceEvents = ListDeviceEvents'
-  { _ldeNextToken  :: !(Maybe Text)
-  , _ldeEventType  :: !(Maybe DeviceEventType)
-  , _ldeMaxResults :: !(Maybe Nat)
-  , _ldeDeviceARN  :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListDeviceEvents' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ldeNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response only includes results beyond the token, up to the value specified by MaxResults.
---
--- * 'ldeEventType' - The event type to filter device events.
---
--- * 'ldeMaxResults' - The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. Required.
---
--- * 'ldeDeviceARN' - The ARN of a device.
-listDeviceEvents
-    :: Text -- ^ 'ldeDeviceARN'
-    -> ListDeviceEvents
-listDeviceEvents pDeviceARN_ =
-  ListDeviceEvents'
-    { _ldeNextToken = Nothing
-    , _ldeEventType = Nothing
-    , _ldeMaxResults = Nothing
-    , _ldeDeviceARN = pDeviceARN_
-    }
-
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response only includes results beyond the token, up to the value specified by MaxResults.
-ldeNextToken :: Lens' ListDeviceEvents (Maybe Text)
-ldeNextToken = lens _ldeNextToken (\ s a -> s{_ldeNextToken = a})
-
--- | The event type to filter device events.
-ldeEventType :: Lens' ListDeviceEvents (Maybe DeviceEventType)
-ldeEventType = lens _ldeEventType (\ s a -> s{_ldeEventType = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved. Required.
-ldeMaxResults :: Lens' ListDeviceEvents (Maybe Natural)
-ldeMaxResults = lens _ldeMaxResults (\ s a -> s{_ldeMaxResults = a}) . mapping _Nat
-
--- | The ARN of a device.
-ldeDeviceARN :: Lens' ListDeviceEvents Text
-ldeDeviceARN = lens _ldeDeviceARN (\ s a -> s{_ldeDeviceARN = a})
-
-instance AWSRequest ListDeviceEvents where
-        type Rs ListDeviceEvents = ListDeviceEventsResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListDeviceEventsResponse' <$>
-                   (x .?> "NextToken") <*>
-                     (x .?> "DeviceEvents" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListDeviceEvents where
-
-instance NFData ListDeviceEvents where
-
-instance ToHeaders ListDeviceEvents where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.ListDeviceEvents" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListDeviceEvents where
-        toJSON ListDeviceEvents'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _ldeNextToken,
-                  ("EventType" .=) <$> _ldeEventType,
-                  ("MaxResults" .=) <$> _ldeMaxResults,
-                  Just ("DeviceArn" .= _ldeDeviceARN)])
-
-instance ToPath ListDeviceEvents where
-        toPath = const "/"
-
-instance ToQuery ListDeviceEvents where
-        toQuery = const mempty
-
--- | /See:/ 'listDeviceEventsResponse' smart constructor.
-data ListDeviceEventsResponse = ListDeviceEventsResponse'
-  { _ldersNextToken      :: !(Maybe Text)
-  , _ldersDeviceEvents   :: !(Maybe [DeviceEvent])
-  , _ldersResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListDeviceEventsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ldersNextToken' -
---
--- * 'ldersDeviceEvents' -
---
--- * 'ldersResponseStatus' - -- | The response status code.
-listDeviceEventsResponse
-    :: Int -- ^ 'ldersResponseStatus'
-    -> ListDeviceEventsResponse
-listDeviceEventsResponse pResponseStatus_ =
-  ListDeviceEventsResponse'
-    { _ldersNextToken = Nothing
-    , _ldersDeviceEvents = Nothing
-    , _ldersResponseStatus = pResponseStatus_
-    }
-
-
--- |
-ldersNextToken :: Lens' ListDeviceEventsResponse (Maybe Text)
-ldersNextToken = lens _ldersNextToken (\ s a -> s{_ldersNextToken = a})
-
--- |
-ldersDeviceEvents :: Lens' ListDeviceEventsResponse [DeviceEvent]
-ldersDeviceEvents = lens _ldersDeviceEvents (\ s a -> s{_ldersDeviceEvents = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-ldersResponseStatus :: Lens' ListDeviceEventsResponse Int
-ldersResponseStatus = lens _ldersResponseStatus (\ s a -> s{_ldersResponseStatus = a})
-
-instance NFData ListDeviceEventsResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/ListSkills.hs b/gen/Network/AWS/AlexaBusiness/ListSkills.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/ListSkills.hs
+++ /dev/null
@@ -1,177 +0,0 @@
-{-# 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.AlexaBusiness.ListSkills
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists all enabled skills in a specific skill group.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.AlexaBusiness.ListSkills
-    (
-    -- * Creating a Request
-      listSkills
-    , ListSkills
-    -- * Request Lenses
-    , lsSkillGroupARN
-    , lsNextToken
-    , lsMaxResults
-
-    -- * Destructuring the Response
-    , listSkillsResponse
-    , ListSkillsResponse
-    -- * Response Lenses
-    , lsrsNextToken
-    , lsrsSkillSummaries
-    , lsrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listSkills' smart constructor.
-data ListSkills = ListSkills'
-  { _lsSkillGroupARN :: !(Maybe Text)
-  , _lsNextToken     :: !(Maybe Text)
-  , _lsMaxResults    :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListSkills' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lsSkillGroupARN' - The ARN of the skill group for which to list enabled skills. Required.
---
--- * 'lsNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ . Required.
---
--- * 'lsMaxResults' - The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved. Required.
-listSkills
-    :: ListSkills
-listSkills =
-  ListSkills'
-    { _lsSkillGroupARN = Nothing
-    , _lsNextToken = Nothing
-    , _lsMaxResults = Nothing
-    }
-
-
--- | The ARN of the skill group for which to list enabled skills. Required.
-lsSkillGroupARN :: Lens' ListSkills (Maybe Text)
-lsSkillGroupARN = lens _lsSkillGroupARN (\ s a -> s{_lsSkillGroupARN = a})
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ . Required.
-lsNextToken :: Lens' ListSkills (Maybe Text)
-lsNextToken = lens _lsNextToken (\ s a -> s{_lsNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved. Required.
-lsMaxResults :: Lens' ListSkills (Maybe Natural)
-lsMaxResults = lens _lsMaxResults (\ s a -> s{_lsMaxResults = a}) . mapping _Nat
-
-instance AWSPager ListSkills where
-        page rq rs
-          | stop (rs ^. lsrsNextToken) = Nothing
-          | stop (rs ^. lsrsSkillSummaries) = Nothing
-          | otherwise =
-            Just $ rq & lsNextToken .~ rs ^. lsrsNextToken
-
-instance AWSRequest ListSkills where
-        type Rs ListSkills = ListSkillsResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListSkillsResponse' <$>
-                   (x .?> "NextToken") <*>
-                     (x .?> "SkillSummaries" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListSkills where
-
-instance NFData ListSkills where
-
-instance ToHeaders ListSkills where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.ListSkills" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListSkills where
-        toJSON ListSkills'{..}
-          = object
-              (catMaybes
-                 [("SkillGroupArn" .=) <$> _lsSkillGroupARN,
-                  ("NextToken" .=) <$> _lsNextToken,
-                  ("MaxResults" .=) <$> _lsMaxResults])
-
-instance ToPath ListSkills where
-        toPath = const "/"
-
-instance ToQuery ListSkills where
-        toQuery = const mempty
-
--- | /See:/ 'listSkillsResponse' smart constructor.
-data ListSkillsResponse = ListSkillsResponse'
-  { _lsrsNextToken      :: !(Maybe Text)
-  , _lsrsSkillSummaries :: !(Maybe [SkillSummary])
-  , _lsrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListSkillsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lsrsNextToken' - The token returned to indicate that there is more data available.
---
--- * 'lsrsSkillSummaries' - The list of enabled skills requested. Required.
---
--- * 'lsrsResponseStatus' - -- | The response status code.
-listSkillsResponse
-    :: Int -- ^ 'lsrsResponseStatus'
-    -> ListSkillsResponse
-listSkillsResponse pResponseStatus_ =
-  ListSkillsResponse'
-    { _lsrsNextToken = Nothing
-    , _lsrsSkillSummaries = Nothing
-    , _lsrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The token returned to indicate that there is more data available.
-lsrsNextToken :: Lens' ListSkillsResponse (Maybe Text)
-lsrsNextToken = lens _lsrsNextToken (\ s a -> s{_lsrsNextToken = a})
-
--- | The list of enabled skills requested. Required.
-lsrsSkillSummaries :: Lens' ListSkillsResponse [SkillSummary]
-lsrsSkillSummaries = lens _lsrsSkillSummaries (\ s a -> s{_lsrsSkillSummaries = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-lsrsResponseStatus :: Lens' ListSkillsResponse Int
-lsrsResponseStatus = lens _lsrsResponseStatus (\ s a -> s{_lsrsResponseStatus = a})
-
-instance NFData ListSkillsResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/ListTags.hs b/gen/Network/AWS/AlexaBusiness/ListTags.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/ListTags.hs
+++ /dev/null
@@ -1,173 +0,0 @@
-{-# 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.AlexaBusiness.ListTags
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists all tags for a specific resource.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.AlexaBusiness.ListTags
-    (
-    -- * Creating a Request
-      listTags
-    , ListTags
-    -- * Request Lenses
-    , ltNextToken
-    , ltMaxResults
-    , ltARN
-
-    -- * Destructuring the Response
-    , listTagsResponse
-    , ListTagsResponse
-    -- * Response Lenses
-    , ltrsNextToken
-    , ltrsTags
-    , ltrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listTags' smart constructor.
-data ListTags = ListTags'
-  { _ltNextToken  :: !(Maybe Text)
-  , _ltMaxResults :: !(Maybe Nat)
-  , _ltARN        :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListTags' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ltNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ .
---
--- * 'ltMaxResults' - The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
---
--- * 'ltARN' - The ARN of the specific resource for which to list tags. Required.
-listTags
-    :: Text -- ^ 'ltARN'
-    -> ListTags
-listTags pARN_ =
-  ListTags' {_ltNextToken = Nothing, _ltMaxResults = Nothing, _ltARN = pARN_}
-
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ .
-ltNextToken :: Lens' ListTags (Maybe Text)
-ltNextToken = lens _ltNextToken (\ s a -> s{_ltNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-ltMaxResults :: Lens' ListTags (Maybe Natural)
-ltMaxResults = lens _ltMaxResults (\ s a -> s{_ltMaxResults = a}) . mapping _Nat
-
--- | The ARN of the specific resource for which to list tags. Required.
-ltARN :: Lens' ListTags Text
-ltARN = lens _ltARN (\ s a -> s{_ltARN = a})
-
-instance AWSPager ListTags where
-        page rq rs
-          | stop (rs ^. ltrsNextToken) = Nothing
-          | stop (rs ^. ltrsTags) = Nothing
-          | otherwise =
-            Just $ rq & ltNextToken .~ rs ^. ltrsNextToken
-
-instance AWSRequest ListTags where
-        type Rs ListTags = ListTagsResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListTagsResponse' <$>
-                   (x .?> "NextToken") <*> (x .?> "Tags" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable ListTags where
-
-instance NFData ListTags where
-
-instance ToHeaders ListTags where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.ListTags" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListTags where
-        toJSON ListTags'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _ltNextToken,
-                  ("MaxResults" .=) <$> _ltMaxResults,
-                  Just ("Arn" .= _ltARN)])
-
-instance ToPath ListTags where
-        toPath = const "/"
-
-instance ToQuery ListTags where
-        toQuery = const mempty
-
--- | /See:/ 'listTagsResponse' smart constructor.
-data ListTagsResponse = ListTagsResponse'
-  { _ltrsNextToken      :: !(Maybe Text)
-  , _ltrsTags           :: !(Maybe [Tag])
-  , _ltrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListTagsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ltrsNextToken' - The token returned to indicate that there is more data available.
---
--- * 'ltrsTags' - The list of tags requested for the specific resource.
---
--- * 'ltrsResponseStatus' - -- | The response status code.
-listTagsResponse
-    :: Int -- ^ 'ltrsResponseStatus'
-    -> ListTagsResponse
-listTagsResponse pResponseStatus_ =
-  ListTagsResponse'
-    { _ltrsNextToken = Nothing
-    , _ltrsTags = Nothing
-    , _ltrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The token returned to indicate that there is more data available.
-ltrsNextToken :: Lens' ListTagsResponse (Maybe Text)
-ltrsNextToken = lens _ltrsNextToken (\ s a -> s{_ltrsNextToken = a})
-
--- | The list of tags requested for the specific resource.
-ltrsTags :: Lens' ListTagsResponse [Tag]
-ltrsTags = lens _ltrsTags (\ s a -> s{_ltrsTags = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-ltrsResponseStatus :: Lens' ListTagsResponse Int
-ltrsResponseStatus = lens _ltrsResponseStatus (\ s a -> s{_ltrsResponseStatus = a})
-
-instance NFData ListTagsResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/PutRoomSkillParameter.hs b/gen/Network/AWS/AlexaBusiness/PutRoomSkillParameter.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/PutRoomSkillParameter.hs
+++ /dev/null
@@ -1,150 +0,0 @@
-{-# 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.AlexaBusiness.PutRoomSkillParameter
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates room skill parameter details by room, skill, and parameter key ID. Not all skills have a room skill parameter.
---
---
-module Network.AWS.AlexaBusiness.PutRoomSkillParameter
-    (
-    -- * Creating a Request
-      putRoomSkillParameter
-    , PutRoomSkillParameter
-    -- * Request Lenses
-    , prspRoomARN
-    , prspSkillId
-    , prspRoomSkillParameter
-
-    -- * Destructuring the Response
-    , putRoomSkillParameterResponse
-    , PutRoomSkillParameterResponse
-    -- * Response Lenses
-    , prsprsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'putRoomSkillParameter' smart constructor.
-data PutRoomSkillParameter = PutRoomSkillParameter'
-  { _prspRoomARN            :: !(Maybe Text)
-  , _prspSkillId            :: !Text
-  , _prspRoomSkillParameter :: !RoomSkillParameter
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutRoomSkillParameter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prspRoomARN' - The ARN of the room associated with the room skill parameter. Required.
---
--- * 'prspSkillId' - The ARN of the skill associated with the room skill parameter. Required.
---
--- * 'prspRoomSkillParameter' - The updated room skill parameter. Required.
-putRoomSkillParameter
-    :: Text -- ^ 'prspSkillId'
-    -> RoomSkillParameter -- ^ 'prspRoomSkillParameter'
-    -> PutRoomSkillParameter
-putRoomSkillParameter pSkillId_ pRoomSkillParameter_ =
-  PutRoomSkillParameter'
-    { _prspRoomARN = Nothing
-    , _prspSkillId = pSkillId_
-    , _prspRoomSkillParameter = pRoomSkillParameter_
-    }
-
-
--- | The ARN of the room associated with the room skill parameter. Required.
-prspRoomARN :: Lens' PutRoomSkillParameter (Maybe Text)
-prspRoomARN = lens _prspRoomARN (\ s a -> s{_prspRoomARN = a})
-
--- | The ARN of the skill associated with the room skill parameter. Required.
-prspSkillId :: Lens' PutRoomSkillParameter Text
-prspSkillId = lens _prspSkillId (\ s a -> s{_prspSkillId = a})
-
--- | The updated room skill parameter. Required.
-prspRoomSkillParameter :: Lens' PutRoomSkillParameter RoomSkillParameter
-prspRoomSkillParameter = lens _prspRoomSkillParameter (\ s a -> s{_prspRoomSkillParameter = a})
-
-instance AWSRequest PutRoomSkillParameter where
-        type Rs PutRoomSkillParameter =
-             PutRoomSkillParameterResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 PutRoomSkillParameterResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable PutRoomSkillParameter where
-
-instance NFData PutRoomSkillParameter where
-
-instance ToHeaders PutRoomSkillParameter where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.PutRoomSkillParameter" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON PutRoomSkillParameter where
-        toJSON PutRoomSkillParameter'{..}
-          = object
-              (catMaybes
-                 [("RoomArn" .=) <$> _prspRoomARN,
-                  Just ("SkillId" .= _prspSkillId),
-                  Just
-                    ("RoomSkillParameter" .= _prspRoomSkillParameter)])
-
-instance ToPath PutRoomSkillParameter where
-        toPath = const "/"
-
-instance ToQuery PutRoomSkillParameter where
-        toQuery = const mempty
-
--- | /See:/ 'putRoomSkillParameterResponse' smart constructor.
-newtype PutRoomSkillParameterResponse = PutRoomSkillParameterResponse'
-  { _prsprsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutRoomSkillParameterResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prsprsResponseStatus' - -- | The response status code.
-putRoomSkillParameterResponse
-    :: Int -- ^ 'prsprsResponseStatus'
-    -> PutRoomSkillParameterResponse
-putRoomSkillParameterResponse pResponseStatus_ =
-  PutRoomSkillParameterResponse' {_prsprsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-prsprsResponseStatus :: Lens' PutRoomSkillParameterResponse Int
-prsprsResponseStatus = lens _prsprsResponseStatus (\ s a -> s{_prsprsResponseStatus = a})
-
-instance NFData PutRoomSkillParameterResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/ResolveRoom.hs b/gen/Network/AWS/AlexaBusiness/ResolveRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/ResolveRoom.hs
+++ /dev/null
@@ -1,166 +0,0 @@
-{-# 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.AlexaBusiness.ResolveRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Determines the details for the room from which a skill request was invoked. This operation is used by skill developers.
---
---
-module Network.AWS.AlexaBusiness.ResolveRoom
-    (
-    -- * Creating a Request
-      resolveRoom
-    , ResolveRoom
-    -- * Request Lenses
-    , rrUserId
-    , rrSkillId
-
-    -- * Destructuring the Response
-    , resolveRoomResponse
-    , ResolveRoomResponse
-    -- * Response Lenses
-    , rrrsRoomSkillParameters
-    , rrrsRoomARN
-    , rrrsRoomName
-    , rrrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'resolveRoom' smart constructor.
-data ResolveRoom = ResolveRoom'
-  { _rrUserId  :: !Text
-  , _rrSkillId :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ResolveRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrUserId' - The ARN of the user. Required.
---
--- * 'rrSkillId' - The ARN of the skill that was requested. Required.
-resolveRoom
-    :: Text -- ^ 'rrUserId'
-    -> Text -- ^ 'rrSkillId'
-    -> ResolveRoom
-resolveRoom pUserId_ pSkillId_ =
-  ResolveRoom' {_rrUserId = pUserId_, _rrSkillId = pSkillId_}
-
-
--- | The ARN of the user. Required.
-rrUserId :: Lens' ResolveRoom Text
-rrUserId = lens _rrUserId (\ s a -> s{_rrUserId = a})
-
--- | The ARN of the skill that was requested. Required.
-rrSkillId :: Lens' ResolveRoom Text
-rrSkillId = lens _rrSkillId (\ s a -> s{_rrSkillId = a})
-
-instance AWSRequest ResolveRoom where
-        type Rs ResolveRoom = ResolveRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ResolveRoomResponse' <$>
-                   (x .?> "RoomSkillParameters" .!@ mempty) <*>
-                     (x .?> "RoomArn")
-                     <*> (x .?> "RoomName")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ResolveRoom where
-
-instance NFData ResolveRoom where
-
-instance ToHeaders ResolveRoom where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.ResolveRoom" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ResolveRoom where
-        toJSON ResolveRoom'{..}
-          = object
-              (catMaybes
-                 [Just ("UserId" .= _rrUserId),
-                  Just ("SkillId" .= _rrSkillId)])
-
-instance ToPath ResolveRoom where
-        toPath = const "/"
-
-instance ToQuery ResolveRoom where
-        toQuery = const mempty
-
--- | /See:/ 'resolveRoomResponse' smart constructor.
-data ResolveRoomResponse = ResolveRoomResponse'
-  { _rrrsRoomSkillParameters :: !(Maybe [RoomSkillParameter])
-  , _rrrsRoomARN             :: !(Maybe Text)
-  , _rrrsRoomName            :: !(Maybe Text)
-  , _rrrsResponseStatus      :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ResolveRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrrsRoomSkillParameters' - Response to get the room profile request. Required.
---
--- * 'rrrsRoomARN' - The ARN of the room from which the skill request was invoked.
---
--- * 'rrrsRoomName' - The name of the room from which the skill request was invoked.
---
--- * 'rrrsResponseStatus' - -- | The response status code.
-resolveRoomResponse
-    :: Int -- ^ 'rrrsResponseStatus'
-    -> ResolveRoomResponse
-resolveRoomResponse pResponseStatus_ =
-  ResolveRoomResponse'
-    { _rrrsRoomSkillParameters = Nothing
-    , _rrrsRoomARN = Nothing
-    , _rrrsRoomName = Nothing
-    , _rrrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Response to get the room profile request. Required.
-rrrsRoomSkillParameters :: Lens' ResolveRoomResponse [RoomSkillParameter]
-rrrsRoomSkillParameters = lens _rrrsRoomSkillParameters (\ s a -> s{_rrrsRoomSkillParameters = a}) . _Default . _Coerce
-
--- | The ARN of the room from which the skill request was invoked.
-rrrsRoomARN :: Lens' ResolveRoomResponse (Maybe Text)
-rrrsRoomARN = lens _rrrsRoomARN (\ s a -> s{_rrrsRoomARN = a})
-
--- | The name of the room from which the skill request was invoked.
-rrrsRoomName :: Lens' ResolveRoomResponse (Maybe Text)
-rrrsRoomName = lens _rrrsRoomName (\ s a -> s{_rrrsRoomName = a})
-
--- | -- | The response status code.
-rrrsResponseStatus :: Lens' ResolveRoomResponse Int
-rrrsResponseStatus = lens _rrrsResponseStatus (\ s a -> s{_rrrsResponseStatus = a})
-
-instance NFData ResolveRoomResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/RevokeInvitation.hs b/gen/Network/AWS/AlexaBusiness/RevokeInvitation.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/RevokeInvitation.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# 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.AlexaBusiness.RevokeInvitation
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Revokes an invitation and invalidates the enrollment URL.
---
---
-module Network.AWS.AlexaBusiness.RevokeInvitation
-    (
-    -- * Creating a Request
-      revokeInvitation
-    , RevokeInvitation
-    -- * Request Lenses
-    , riEnrollmentId
-    , riUserARN
-
-    -- * Destructuring the Response
-    , revokeInvitationResponse
-    , RevokeInvitationResponse
-    -- * Response Lenses
-    , rirsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'revokeInvitation' smart constructor.
-data RevokeInvitation = RevokeInvitation'
-  { _riEnrollmentId :: !(Maybe Text)
-  , _riUserARN      :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RevokeInvitation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riEnrollmentId' - The ARN of the enrollment invitation to revoke. Required.
---
--- * 'riUserARN' - The ARN of the user for whom to revoke an enrollment invitation. Required.
-revokeInvitation
-    :: RevokeInvitation
-revokeInvitation =
-  RevokeInvitation' {_riEnrollmentId = Nothing, _riUserARN = Nothing}
-
-
--- | The ARN of the enrollment invitation to revoke. Required.
-riEnrollmentId :: Lens' RevokeInvitation (Maybe Text)
-riEnrollmentId = lens _riEnrollmentId (\ s a -> s{_riEnrollmentId = a})
-
--- | The ARN of the user for whom to revoke an enrollment invitation. Required.
-riUserARN :: Lens' RevokeInvitation (Maybe Text)
-riUserARN = lens _riUserARN (\ s a -> s{_riUserARN = a})
-
-instance AWSRequest RevokeInvitation where
-        type Rs RevokeInvitation = RevokeInvitationResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 RevokeInvitationResponse' <$> (pure (fromEnum s)))
-
-instance Hashable RevokeInvitation where
-
-instance NFData RevokeInvitation where
-
-instance ToHeaders RevokeInvitation where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.RevokeInvitation" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON RevokeInvitation where
-        toJSON RevokeInvitation'{..}
-          = object
-              (catMaybes
-                 [("EnrollmentId" .=) <$> _riEnrollmentId,
-                  ("UserArn" .=) <$> _riUserARN])
-
-instance ToPath RevokeInvitation where
-        toPath = const "/"
-
-instance ToQuery RevokeInvitation where
-        toQuery = const mempty
-
--- | /See:/ 'revokeInvitationResponse' smart constructor.
-newtype RevokeInvitationResponse = RevokeInvitationResponse'
-  { _rirsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RevokeInvitationResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rirsResponseStatus' - -- | The response status code.
-revokeInvitationResponse
-    :: Int -- ^ 'rirsResponseStatus'
-    -> RevokeInvitationResponse
-revokeInvitationResponse pResponseStatus_ =
-  RevokeInvitationResponse' {_rirsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-rirsResponseStatus :: Lens' RevokeInvitationResponse Int
-rirsResponseStatus = lens _rirsResponseStatus (\ s a -> s{_rirsResponseStatus = a})
-
-instance NFData RevokeInvitationResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/SearchAddressBooks.hs b/gen/Network/AWS/AlexaBusiness/SearchAddressBooks.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/SearchAddressBooks.hs
+++ /dev/null
@@ -1,189 +0,0 @@
-{-# 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.AlexaBusiness.SearchAddressBooks
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Searches address books and lists the ones that meet a set of filter and sort criteria.
---
---
-module Network.AWS.AlexaBusiness.SearchAddressBooks
-    (
-    -- * Creating a Request
-      searchAddressBooks
-    , SearchAddressBooks
-    -- * Request Lenses
-    , sabFilters
-    , sabSortCriteria
-    , sabNextToken
-    , sabMaxResults
-
-    -- * Destructuring the Response
-    , searchAddressBooksResponse
-    , SearchAddressBooksResponse
-    -- * Response Lenses
-    , sabrsNextToken
-    , sabrsAddressBooks
-    , sabrsTotalCount
-    , sabrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'searchAddressBooks' smart constructor.
-data SearchAddressBooks = SearchAddressBooks'
-  { _sabFilters      :: !(Maybe [Filter])
-  , _sabSortCriteria :: !(Maybe [Sort])
-  , _sabNextToken    :: !(Maybe Text)
-  , _sabMaxResults   :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchAddressBooks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sabFilters' - The filters to use to list a specified set of address books. The supported filter key is AddressBookName.
---
--- * 'sabSortCriteria' - The sort order to use in listing the specified set of address books. The supported sort key is AddressBookName.
---
--- * 'sabNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response only includes results beyond the token, up to the value specified by MaxResults.
---
--- * 'sabMaxResults' - The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved.
-searchAddressBooks
-    :: SearchAddressBooks
-searchAddressBooks =
-  SearchAddressBooks'
-    { _sabFilters = Nothing
-    , _sabSortCriteria = Nothing
-    , _sabNextToken = Nothing
-    , _sabMaxResults = Nothing
-    }
-
-
--- | The filters to use to list a specified set of address books. The supported filter key is AddressBookName.
-sabFilters :: Lens' SearchAddressBooks [Filter]
-sabFilters = lens _sabFilters (\ s a -> s{_sabFilters = a}) . _Default . _Coerce
-
--- | The sort order to use in listing the specified set of address books. The supported sort key is AddressBookName.
-sabSortCriteria :: Lens' SearchAddressBooks [Sort]
-sabSortCriteria = lens _sabSortCriteria (\ s a -> s{_sabSortCriteria = a}) . _Default . _Coerce
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response only includes results beyond the token, up to the value specified by MaxResults.
-sabNextToken :: Lens' SearchAddressBooks (Maybe Text)
-sabNextToken = lens _sabNextToken (\ s a -> s{_sabNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved.
-sabMaxResults :: Lens' SearchAddressBooks (Maybe Natural)
-sabMaxResults = lens _sabMaxResults (\ s a -> s{_sabMaxResults = a}) . mapping _Nat
-
-instance AWSRequest SearchAddressBooks where
-        type Rs SearchAddressBooks =
-             SearchAddressBooksResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 SearchAddressBooksResponse' <$>
-                   (x .?> "NextToken") <*>
-                     (x .?> "AddressBooks" .!@ mempty)
-                     <*> (x .?> "TotalCount")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable SearchAddressBooks where
-
-instance NFData SearchAddressBooks where
-
-instance ToHeaders SearchAddressBooks where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.SearchAddressBooks" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON SearchAddressBooks where
-        toJSON SearchAddressBooks'{..}
-          = object
-              (catMaybes
-                 [("Filters" .=) <$> _sabFilters,
-                  ("SortCriteria" .=) <$> _sabSortCriteria,
-                  ("NextToken" .=) <$> _sabNextToken,
-                  ("MaxResults" .=) <$> _sabMaxResults])
-
-instance ToPath SearchAddressBooks where
-        toPath = const "/"
-
-instance ToQuery SearchAddressBooks where
-        toQuery = const mempty
-
--- | /See:/ 'searchAddressBooksResponse' smart constructor.
-data SearchAddressBooksResponse = SearchAddressBooksResponse'
-  { _sabrsNextToken      :: !(Maybe Text)
-  , _sabrsAddressBooks   :: !(Maybe [AddressBookData])
-  , _sabrsTotalCount     :: !(Maybe Int)
-  , _sabrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchAddressBooksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sabrsNextToken' - The token returned to indicate that there is more data available.
---
--- * 'sabrsAddressBooks' - The address books that meet the specified set of filter criteria, in sort order.
---
--- * 'sabrsTotalCount' - The total number of address books returned.
---
--- * 'sabrsResponseStatus' - -- | The response status code.
-searchAddressBooksResponse
-    :: Int -- ^ 'sabrsResponseStatus'
-    -> SearchAddressBooksResponse
-searchAddressBooksResponse pResponseStatus_ =
-  SearchAddressBooksResponse'
-    { _sabrsNextToken = Nothing
-    , _sabrsAddressBooks = Nothing
-    , _sabrsTotalCount = Nothing
-    , _sabrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The token returned to indicate that there is more data available.
-sabrsNextToken :: Lens' SearchAddressBooksResponse (Maybe Text)
-sabrsNextToken = lens _sabrsNextToken (\ s a -> s{_sabrsNextToken = a})
-
--- | The address books that meet the specified set of filter criteria, in sort order.
-sabrsAddressBooks :: Lens' SearchAddressBooksResponse [AddressBookData]
-sabrsAddressBooks = lens _sabrsAddressBooks (\ s a -> s{_sabrsAddressBooks = a}) . _Default . _Coerce
-
--- | The total number of address books returned.
-sabrsTotalCount :: Lens' SearchAddressBooksResponse (Maybe Int)
-sabrsTotalCount = lens _sabrsTotalCount (\ s a -> s{_sabrsTotalCount = a})
-
--- | -- | The response status code.
-sabrsResponseStatus :: Lens' SearchAddressBooksResponse Int
-sabrsResponseStatus = lens _sabrsResponseStatus (\ s a -> s{_sabrsResponseStatus = a})
-
-instance NFData SearchAddressBooksResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/SearchContacts.hs b/gen/Network/AWS/AlexaBusiness/SearchContacts.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/SearchContacts.hs
+++ /dev/null
@@ -1,186 +0,0 @@
-{-# 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.AlexaBusiness.SearchContacts
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Searches contacts and lists the ones that meet a set of filter and sort criteria.
---
---
-module Network.AWS.AlexaBusiness.SearchContacts
-    (
-    -- * Creating a Request
-      searchContacts
-    , SearchContacts
-    -- * Request Lenses
-    , scFilters
-    , scSortCriteria
-    , scNextToken
-    , scMaxResults
-
-    -- * Destructuring the Response
-    , searchContactsResponse
-    , SearchContactsResponse
-    -- * Response Lenses
-    , scrsNextToken
-    , scrsContacts
-    , scrsTotalCount
-    , scrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'searchContacts' smart constructor.
-data SearchContacts = SearchContacts'
-  { _scFilters      :: !(Maybe [Filter])
-  , _scSortCriteria :: !(Maybe [Sort])
-  , _scNextToken    :: !(Maybe Text)
-  , _scMaxResults   :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchContacts' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scFilters' - The filters to use to list a specified set of address books. The supported filter keys are DisplayName, FirstName, LastName, and AddressBookArns.
---
--- * 'scSortCriteria' - The sort order to use in listing the specified set of contacts. The supported sort keys are DisplayName, FirstName, and LastName.
---
--- * 'scNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response only includes results beyond the token, up to the value specified by MaxResults.
---
--- * 'scMaxResults' - The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved.
-searchContacts
-    :: SearchContacts
-searchContacts =
-  SearchContacts'
-    { _scFilters = Nothing
-    , _scSortCriteria = Nothing
-    , _scNextToken = Nothing
-    , _scMaxResults = Nothing
-    }
-
-
--- | The filters to use to list a specified set of address books. The supported filter keys are DisplayName, FirstName, LastName, and AddressBookArns.
-scFilters :: Lens' SearchContacts [Filter]
-scFilters = lens _scFilters (\ s a -> s{_scFilters = a}) . _Default . _Coerce
-
--- | The sort order to use in listing the specified set of contacts. The supported sort keys are DisplayName, FirstName, and LastName.
-scSortCriteria :: Lens' SearchContacts [Sort]
-scSortCriteria = lens _scSortCriteria (\ s a -> s{_scSortCriteria = a}) . _Default . _Coerce
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response only includes results beyond the token, up to the value specified by MaxResults.
-scNextToken :: Lens' SearchContacts (Maybe Text)
-scNextToken = lens _scNextToken (\ s a -> s{_scNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified MaxResults value, a token is included in the response so that the remaining results can be retrieved.
-scMaxResults :: Lens' SearchContacts (Maybe Natural)
-scMaxResults = lens _scMaxResults (\ s a -> s{_scMaxResults = a}) . mapping _Nat
-
-instance AWSRequest SearchContacts where
-        type Rs SearchContacts = SearchContactsResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 SearchContactsResponse' <$>
-                   (x .?> "NextToken") <*> (x .?> "Contacts" .!@ mempty)
-                     <*> (x .?> "TotalCount")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable SearchContacts where
-
-instance NFData SearchContacts where
-
-instance ToHeaders SearchContacts where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.SearchContacts" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON SearchContacts where
-        toJSON SearchContacts'{..}
-          = object
-              (catMaybes
-                 [("Filters" .=) <$> _scFilters,
-                  ("SortCriteria" .=) <$> _scSortCriteria,
-                  ("NextToken" .=) <$> _scNextToken,
-                  ("MaxResults" .=) <$> _scMaxResults])
-
-instance ToPath SearchContacts where
-        toPath = const "/"
-
-instance ToQuery SearchContacts where
-        toQuery = const mempty
-
--- | /See:/ 'searchContactsResponse' smart constructor.
-data SearchContactsResponse = SearchContactsResponse'
-  { _scrsNextToken      :: !(Maybe Text)
-  , _scrsContacts       :: !(Maybe [ContactData])
-  , _scrsTotalCount     :: !(Maybe Int)
-  , _scrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchContactsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scrsNextToken' - The token returned to indicate that there is more data available.
---
--- * 'scrsContacts' - The contacts that meet the specified set of filter criteria, in sort order.
---
--- * 'scrsTotalCount' - The total number of contacts returned.
---
--- * 'scrsResponseStatus' - -- | The response status code.
-searchContactsResponse
-    :: Int -- ^ 'scrsResponseStatus'
-    -> SearchContactsResponse
-searchContactsResponse pResponseStatus_ =
-  SearchContactsResponse'
-    { _scrsNextToken = Nothing
-    , _scrsContacts = Nothing
-    , _scrsTotalCount = Nothing
-    , _scrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The token returned to indicate that there is more data available.
-scrsNextToken :: Lens' SearchContactsResponse (Maybe Text)
-scrsNextToken = lens _scrsNextToken (\ s a -> s{_scrsNextToken = a})
-
--- | The contacts that meet the specified set of filter criteria, in sort order.
-scrsContacts :: Lens' SearchContactsResponse [ContactData]
-scrsContacts = lens _scrsContacts (\ s a -> s{_scrsContacts = a}) . _Default . _Coerce
-
--- | The total number of contacts returned.
-scrsTotalCount :: Lens' SearchContactsResponse (Maybe Int)
-scrsTotalCount = lens _scrsTotalCount (\ s a -> s{_scrsTotalCount = a})
-
--- | -- | The response status code.
-scrsResponseStatus :: Lens' SearchContactsResponse Int
-scrsResponseStatus = lens _scrsResponseStatus (\ s a -> s{_scrsResponseStatus = a})
-
-instance NFData SearchContactsResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/SearchDevices.hs b/gen/Network/AWS/AlexaBusiness/SearchDevices.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/SearchDevices.hs
+++ /dev/null
@@ -1,196 +0,0 @@
-{-# 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.AlexaBusiness.SearchDevices
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Searches devices and lists the ones that meet a set of filter criteria.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.AlexaBusiness.SearchDevices
-    (
-    -- * Creating a Request
-      searchDevices
-    , SearchDevices
-    -- * Request Lenses
-    , sdFilters
-    , sdSortCriteria
-    , sdNextToken
-    , sdMaxResults
-
-    -- * Destructuring the Response
-    , searchDevicesResponse
-    , SearchDevicesResponse
-    -- * Response Lenses
-    , sdrsNextToken
-    , sdrsDevices
-    , sdrsTotalCount
-    , sdrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'searchDevices' smart constructor.
-data SearchDevices = SearchDevices'
-  { _sdFilters      :: !(Maybe [Filter])
-  , _sdSortCriteria :: !(Maybe [Sort])
-  , _sdNextToken    :: !(Maybe Text)
-  , _sdMaxResults   :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchDevices' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdFilters' - The filters to use to list a specified set of devices. Supported filter keys are DeviceName, DeviceStatus, DeviceStatusDetailCode, RoomName, DeviceType, DeviceSerialNumber, UnassociatedOnly, and ConnectionStatus (ONLINE and OFFLINE).
---
--- * 'sdSortCriteria' - The sort order to use in listing the specified set of devices. Supported sort keys are DeviceName, DeviceStatus, RoomName, DeviceType, DeviceSerialNumber, and ConnectionStatus.
---
--- * 'sdNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ .
---
--- * 'sdMaxResults' - The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-searchDevices
-    :: SearchDevices
-searchDevices =
-  SearchDevices'
-    { _sdFilters = Nothing
-    , _sdSortCriteria = Nothing
-    , _sdNextToken = Nothing
-    , _sdMaxResults = Nothing
-    }
-
-
--- | The filters to use to list a specified set of devices. Supported filter keys are DeviceName, DeviceStatus, DeviceStatusDetailCode, RoomName, DeviceType, DeviceSerialNumber, UnassociatedOnly, and ConnectionStatus (ONLINE and OFFLINE).
-sdFilters :: Lens' SearchDevices [Filter]
-sdFilters = lens _sdFilters (\ s a -> s{_sdFilters = a}) . _Default . _Coerce
-
--- | The sort order to use in listing the specified set of devices. Supported sort keys are DeviceName, DeviceStatus, RoomName, DeviceType, DeviceSerialNumber, and ConnectionStatus.
-sdSortCriteria :: Lens' SearchDevices [Sort]
-sdSortCriteria = lens _sdSortCriteria (\ s a -> s{_sdSortCriteria = a}) . _Default . _Coerce
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ .
-sdNextToken :: Lens' SearchDevices (Maybe Text)
-sdNextToken = lens _sdNextToken (\ s a -> s{_sdNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-sdMaxResults :: Lens' SearchDevices (Maybe Natural)
-sdMaxResults = lens _sdMaxResults (\ s a -> s{_sdMaxResults = a}) . mapping _Nat
-
-instance AWSPager SearchDevices where
-        page rq rs
-          | stop (rs ^. sdrsNextToken) = Nothing
-          | stop (rs ^. sdrsDevices) = Nothing
-          | otherwise =
-            Just $ rq & sdNextToken .~ rs ^. sdrsNextToken
-
-instance AWSRequest SearchDevices where
-        type Rs SearchDevices = SearchDevicesResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 SearchDevicesResponse' <$>
-                   (x .?> "NextToken") <*> (x .?> "Devices" .!@ mempty)
-                     <*> (x .?> "TotalCount")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable SearchDevices where
-
-instance NFData SearchDevices where
-
-instance ToHeaders SearchDevices where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.SearchDevices" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON SearchDevices where
-        toJSON SearchDevices'{..}
-          = object
-              (catMaybes
-                 [("Filters" .=) <$> _sdFilters,
-                  ("SortCriteria" .=) <$> _sdSortCriteria,
-                  ("NextToken" .=) <$> _sdNextToken,
-                  ("MaxResults" .=) <$> _sdMaxResults])
-
-instance ToPath SearchDevices where
-        toPath = const "/"
-
-instance ToQuery SearchDevices where
-        toQuery = const mempty
-
--- | /See:/ 'searchDevicesResponse' smart constructor.
-data SearchDevicesResponse = SearchDevicesResponse'
-  { _sdrsNextToken      :: !(Maybe Text)
-  , _sdrsDevices        :: !(Maybe [DeviceData])
-  , _sdrsTotalCount     :: !(Maybe Int)
-  , _sdrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchDevicesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdrsNextToken' - The token returned to indicate that there is more data available.
---
--- * 'sdrsDevices' - The devices that meet the specified set of filter criteria, in sort order.
---
--- * 'sdrsTotalCount' - The total number of devices returned.
---
--- * 'sdrsResponseStatus' - -- | The response status code.
-searchDevicesResponse
-    :: Int -- ^ 'sdrsResponseStatus'
-    -> SearchDevicesResponse
-searchDevicesResponse pResponseStatus_ =
-  SearchDevicesResponse'
-    { _sdrsNextToken = Nothing
-    , _sdrsDevices = Nothing
-    , _sdrsTotalCount = Nothing
-    , _sdrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The token returned to indicate that there is more data available.
-sdrsNextToken :: Lens' SearchDevicesResponse (Maybe Text)
-sdrsNextToken = lens _sdrsNextToken (\ s a -> s{_sdrsNextToken = a})
-
--- | The devices that meet the specified set of filter criteria, in sort order.
-sdrsDevices :: Lens' SearchDevicesResponse [DeviceData]
-sdrsDevices = lens _sdrsDevices (\ s a -> s{_sdrsDevices = a}) . _Default . _Coerce
-
--- | The total number of devices returned.
-sdrsTotalCount :: Lens' SearchDevicesResponse (Maybe Int)
-sdrsTotalCount = lens _sdrsTotalCount (\ s a -> s{_sdrsTotalCount = a})
-
--- | -- | The response status code.
-sdrsResponseStatus :: Lens' SearchDevicesResponse Int
-sdrsResponseStatus = lens _sdrsResponseStatus (\ s a -> s{_sdrsResponseStatus = a})
-
-instance NFData SearchDevicesResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/SearchProfiles.hs b/gen/Network/AWS/AlexaBusiness/SearchProfiles.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/SearchProfiles.hs
+++ /dev/null
@@ -1,196 +0,0 @@
-{-# 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.AlexaBusiness.SearchProfiles
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Searches room profiles and lists the ones that meet a set of filter criteria.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.AlexaBusiness.SearchProfiles
-    (
-    -- * Creating a Request
-      searchProfiles
-    , SearchProfiles
-    -- * Request Lenses
-    , spFilters
-    , spSortCriteria
-    , spNextToken
-    , spMaxResults
-
-    -- * Destructuring the Response
-    , searchProfilesResponse
-    , SearchProfilesResponse
-    -- * Response Lenses
-    , sprsProfiles
-    , sprsNextToken
-    , sprsTotalCount
-    , sprsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'searchProfiles' smart constructor.
-data SearchProfiles = SearchProfiles'
-  { _spFilters      :: !(Maybe [Filter])
-  , _spSortCriteria :: !(Maybe [Sort])
-  , _spNextToken    :: !(Maybe Text)
-  , _spMaxResults   :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchProfiles' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'spFilters' - The filters to use to list a specified set of room profiles. Supported filter keys are ProfileName and Address. Required.
---
--- * 'spSortCriteria' - The sort order to use in listing the specified set of room profiles. Supported sort keys are ProfileName and Address.
---
--- * 'spNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ .
---
--- * 'spMaxResults' - The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-searchProfiles
-    :: SearchProfiles
-searchProfiles =
-  SearchProfiles'
-    { _spFilters = Nothing
-    , _spSortCriteria = Nothing
-    , _spNextToken = Nothing
-    , _spMaxResults = Nothing
-    }
-
-
--- | The filters to use to list a specified set of room profiles. Supported filter keys are ProfileName and Address. Required.
-spFilters :: Lens' SearchProfiles [Filter]
-spFilters = lens _spFilters (\ s a -> s{_spFilters = a}) . _Default . _Coerce
-
--- | The sort order to use in listing the specified set of room profiles. Supported sort keys are ProfileName and Address.
-spSortCriteria :: Lens' SearchProfiles [Sort]
-spSortCriteria = lens _spSortCriteria (\ s a -> s{_spSortCriteria = a}) . _Default . _Coerce
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ .
-spNextToken :: Lens' SearchProfiles (Maybe Text)
-spNextToken = lens _spNextToken (\ s a -> s{_spNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-spMaxResults :: Lens' SearchProfiles (Maybe Natural)
-spMaxResults = lens _spMaxResults (\ s a -> s{_spMaxResults = a}) . mapping _Nat
-
-instance AWSPager SearchProfiles where
-        page rq rs
-          | stop (rs ^. sprsNextToken) = Nothing
-          | stop (rs ^. sprsProfiles) = Nothing
-          | otherwise =
-            Just $ rq & spNextToken .~ rs ^. sprsNextToken
-
-instance AWSRequest SearchProfiles where
-        type Rs SearchProfiles = SearchProfilesResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 SearchProfilesResponse' <$>
-                   (x .?> "Profiles" .!@ mempty) <*> (x .?> "NextToken")
-                     <*> (x .?> "TotalCount")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable SearchProfiles where
-
-instance NFData SearchProfiles where
-
-instance ToHeaders SearchProfiles where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.SearchProfiles" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON SearchProfiles where
-        toJSON SearchProfiles'{..}
-          = object
-              (catMaybes
-                 [("Filters" .=) <$> _spFilters,
-                  ("SortCriteria" .=) <$> _spSortCriteria,
-                  ("NextToken" .=) <$> _spNextToken,
-                  ("MaxResults" .=) <$> _spMaxResults])
-
-instance ToPath SearchProfiles where
-        toPath = const "/"
-
-instance ToQuery SearchProfiles where
-        toQuery = const mempty
-
--- | /See:/ 'searchProfilesResponse' smart constructor.
-data SearchProfilesResponse = SearchProfilesResponse'
-  { _sprsProfiles       :: !(Maybe [ProfileData])
-  , _sprsNextToken      :: !(Maybe Text)
-  , _sprsTotalCount     :: !(Maybe Int)
-  , _sprsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchProfilesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sprsProfiles' - The profiles that meet the specified set of filter criteria, in sort order.
---
--- * 'sprsNextToken' - The token returned to indicate that there is more data available.
---
--- * 'sprsTotalCount' - The total number of room profiles returned.
---
--- * 'sprsResponseStatus' - -- | The response status code.
-searchProfilesResponse
-    :: Int -- ^ 'sprsResponseStatus'
-    -> SearchProfilesResponse
-searchProfilesResponse pResponseStatus_ =
-  SearchProfilesResponse'
-    { _sprsProfiles = Nothing
-    , _sprsNextToken = Nothing
-    , _sprsTotalCount = Nothing
-    , _sprsResponseStatus = pResponseStatus_
-    }
-
-
--- | The profiles that meet the specified set of filter criteria, in sort order.
-sprsProfiles :: Lens' SearchProfilesResponse [ProfileData]
-sprsProfiles = lens _sprsProfiles (\ s a -> s{_sprsProfiles = a}) . _Default . _Coerce
-
--- | The token returned to indicate that there is more data available.
-sprsNextToken :: Lens' SearchProfilesResponse (Maybe Text)
-sprsNextToken = lens _sprsNextToken (\ s a -> s{_sprsNextToken = a})
-
--- | The total number of room profiles returned.
-sprsTotalCount :: Lens' SearchProfilesResponse (Maybe Int)
-sprsTotalCount = lens _sprsTotalCount (\ s a -> s{_sprsTotalCount = a})
-
--- | -- | The response status code.
-sprsResponseStatus :: Lens' SearchProfilesResponse Int
-sprsResponseStatus = lens _sprsResponseStatus (\ s a -> s{_sprsResponseStatus = a})
-
-instance NFData SearchProfilesResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/SearchRooms.hs b/gen/Network/AWS/AlexaBusiness/SearchRooms.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/SearchRooms.hs
+++ /dev/null
@@ -1,196 +0,0 @@
-{-# 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.AlexaBusiness.SearchRooms
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Searches rooms and lists the ones that meet a set of filter and sort criteria.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.AlexaBusiness.SearchRooms
-    (
-    -- * Creating a Request
-      searchRooms
-    , SearchRooms
-    -- * Request Lenses
-    , srFilters
-    , srSortCriteria
-    , srNextToken
-    , srMaxResults
-
-    -- * Destructuring the Response
-    , searchRoomsResponse
-    , SearchRoomsResponse
-    -- * Response Lenses
-    , srrsRooms
-    , srrsNextToken
-    , srrsTotalCount
-    , srrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'searchRooms' smart constructor.
-data SearchRooms = SearchRooms'
-  { _srFilters      :: !(Maybe [Filter])
-  , _srSortCriteria :: !(Maybe [Sort])
-  , _srNextToken    :: !(Maybe Text)
-  , _srMaxResults   :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchRooms' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srFilters' - The filters to use to list a specified set of rooms. The supported filter keys are RoomName and ProfileName.
---
--- * 'srSortCriteria' - The sort order to use in listing the specified set of rooms. The supported sort keys are RoomName and ProfileName.
---
--- * 'srNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ .
---
--- * 'srMaxResults' - The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-searchRooms
-    :: SearchRooms
-searchRooms =
-  SearchRooms'
-    { _srFilters = Nothing
-    , _srSortCriteria = Nothing
-    , _srNextToken = Nothing
-    , _srMaxResults = Nothing
-    }
-
-
--- | The filters to use to list a specified set of rooms. The supported filter keys are RoomName and ProfileName.
-srFilters :: Lens' SearchRooms [Filter]
-srFilters = lens _srFilters (\ s a -> s{_srFilters = a}) . _Default . _Coerce
-
--- | The sort order to use in listing the specified set of rooms. The supported sort keys are RoomName and ProfileName.
-srSortCriteria :: Lens' SearchRooms [Sort]
-srSortCriteria = lens _srSortCriteria (\ s a -> s{_srSortCriteria = a}) . _Default . _Coerce
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ .
-srNextToken :: Lens' SearchRooms (Maybe Text)
-srNextToken = lens _srNextToken (\ s a -> s{_srNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-srMaxResults :: Lens' SearchRooms (Maybe Natural)
-srMaxResults = lens _srMaxResults (\ s a -> s{_srMaxResults = a}) . mapping _Nat
-
-instance AWSPager SearchRooms where
-        page rq rs
-          | stop (rs ^. srrsNextToken) = Nothing
-          | stop (rs ^. srrsRooms) = Nothing
-          | otherwise =
-            Just $ rq & srNextToken .~ rs ^. srrsNextToken
-
-instance AWSRequest SearchRooms where
-        type Rs SearchRooms = SearchRoomsResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 SearchRoomsResponse' <$>
-                   (x .?> "Rooms" .!@ mempty) <*> (x .?> "NextToken")
-                     <*> (x .?> "TotalCount")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable SearchRooms where
-
-instance NFData SearchRooms where
-
-instance ToHeaders SearchRooms where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.SearchRooms" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON SearchRooms where
-        toJSON SearchRooms'{..}
-          = object
-              (catMaybes
-                 [("Filters" .=) <$> _srFilters,
-                  ("SortCriteria" .=) <$> _srSortCriteria,
-                  ("NextToken" .=) <$> _srNextToken,
-                  ("MaxResults" .=) <$> _srMaxResults])
-
-instance ToPath SearchRooms where
-        toPath = const "/"
-
-instance ToQuery SearchRooms where
-        toQuery = const mempty
-
--- | /See:/ 'searchRoomsResponse' smart constructor.
-data SearchRoomsResponse = SearchRoomsResponse'
-  { _srrsRooms          :: !(Maybe [RoomData])
-  , _srrsNextToken      :: !(Maybe Text)
-  , _srrsTotalCount     :: !(Maybe Int)
-  , _srrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchRoomsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srrsRooms' - The rooms that meet the specified set of filter criteria, in sort order.
---
--- * 'srrsNextToken' - The token returned to indicate that there is more data available.
---
--- * 'srrsTotalCount' - The total number of rooms returned.
---
--- * 'srrsResponseStatus' - -- | The response status code.
-searchRoomsResponse
-    :: Int -- ^ 'srrsResponseStatus'
-    -> SearchRoomsResponse
-searchRoomsResponse pResponseStatus_ =
-  SearchRoomsResponse'
-    { _srrsRooms = Nothing
-    , _srrsNextToken = Nothing
-    , _srrsTotalCount = Nothing
-    , _srrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The rooms that meet the specified set of filter criteria, in sort order.
-srrsRooms :: Lens' SearchRoomsResponse [RoomData]
-srrsRooms = lens _srrsRooms (\ s a -> s{_srrsRooms = a}) . _Default . _Coerce
-
--- | The token returned to indicate that there is more data available.
-srrsNextToken :: Lens' SearchRoomsResponse (Maybe Text)
-srrsNextToken = lens _srrsNextToken (\ s a -> s{_srrsNextToken = a})
-
--- | The total number of rooms returned.
-srrsTotalCount :: Lens' SearchRoomsResponse (Maybe Int)
-srrsTotalCount = lens _srrsTotalCount (\ s a -> s{_srrsTotalCount = a})
-
--- | -- | The response status code.
-srrsResponseStatus :: Lens' SearchRoomsResponse Int
-srrsResponseStatus = lens _srrsResponseStatus (\ s a -> s{_srrsResponseStatus = a})
-
-instance NFData SearchRoomsResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/SearchSkillGroups.hs b/gen/Network/AWS/AlexaBusiness/SearchSkillGroups.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/SearchSkillGroups.hs
+++ /dev/null
@@ -1,197 +0,0 @@
-{-# 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.AlexaBusiness.SearchSkillGroups
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Searches skill groups and lists the ones that meet a set of filter and sort criteria.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.AlexaBusiness.SearchSkillGroups
-    (
-    -- * Creating a Request
-      searchSkillGroups
-    , SearchSkillGroups
-    -- * Request Lenses
-    , ssgFilters
-    , ssgSortCriteria
-    , ssgNextToken
-    , ssgMaxResults
-
-    -- * Destructuring the Response
-    , searchSkillGroupsResponse
-    , SearchSkillGroupsResponse
-    -- * Response Lenses
-    , ssgrsNextToken
-    , ssgrsSkillGroups
-    , ssgrsTotalCount
-    , ssgrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'searchSkillGroups' smart constructor.
-data SearchSkillGroups = SearchSkillGroups'
-  { _ssgFilters      :: !(Maybe [Filter])
-  , _ssgSortCriteria :: !(Maybe [Sort])
-  , _ssgNextToken    :: !(Maybe Text)
-  , _ssgMaxResults   :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchSkillGroups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssgFilters' - The filters to use to list a specified set of skill groups. The supported filter key is SkillGroupName.
---
--- * 'ssgSortCriteria' - The sort order to use in listing the specified set of skill groups. The supported sort key is SkillGroupName.
---
--- * 'ssgNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ . Required.
---
--- * 'ssgMaxResults' - The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-searchSkillGroups
-    :: SearchSkillGroups
-searchSkillGroups =
-  SearchSkillGroups'
-    { _ssgFilters = Nothing
-    , _ssgSortCriteria = Nothing
-    , _ssgNextToken = Nothing
-    , _ssgMaxResults = Nothing
-    }
-
-
--- | The filters to use to list a specified set of skill groups. The supported filter key is SkillGroupName.
-ssgFilters :: Lens' SearchSkillGroups [Filter]
-ssgFilters = lens _ssgFilters (\ s a -> s{_ssgFilters = a}) . _Default . _Coerce
-
--- | The sort order to use in listing the specified set of skill groups. The supported sort key is SkillGroupName.
-ssgSortCriteria :: Lens' SearchSkillGroups [Sort]
-ssgSortCriteria = lens _ssgSortCriteria (\ s a -> s{_ssgSortCriteria = a}) . _Default . _Coerce
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ . Required.
-ssgNextToken :: Lens' SearchSkillGroups (Maybe Text)
-ssgNextToken = lens _ssgNextToken (\ s a -> s{_ssgNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved.
-ssgMaxResults :: Lens' SearchSkillGroups (Maybe Natural)
-ssgMaxResults = lens _ssgMaxResults (\ s a -> s{_ssgMaxResults = a}) . mapping _Nat
-
-instance AWSPager SearchSkillGroups where
-        page rq rs
-          | stop (rs ^. ssgrsNextToken) = Nothing
-          | stop (rs ^. ssgrsSkillGroups) = Nothing
-          | otherwise =
-            Just $ rq & ssgNextToken .~ rs ^. ssgrsNextToken
-
-instance AWSRequest SearchSkillGroups where
-        type Rs SearchSkillGroups = SearchSkillGroupsResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 SearchSkillGroupsResponse' <$>
-                   (x .?> "NextToken") <*>
-                     (x .?> "SkillGroups" .!@ mempty)
-                     <*> (x .?> "TotalCount")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable SearchSkillGroups where
-
-instance NFData SearchSkillGroups where
-
-instance ToHeaders SearchSkillGroups where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.SearchSkillGroups" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON SearchSkillGroups where
-        toJSON SearchSkillGroups'{..}
-          = object
-              (catMaybes
-                 [("Filters" .=) <$> _ssgFilters,
-                  ("SortCriteria" .=) <$> _ssgSortCriteria,
-                  ("NextToken" .=) <$> _ssgNextToken,
-                  ("MaxResults" .=) <$> _ssgMaxResults])
-
-instance ToPath SearchSkillGroups where
-        toPath = const "/"
-
-instance ToQuery SearchSkillGroups where
-        toQuery = const mempty
-
--- | /See:/ 'searchSkillGroupsResponse' smart constructor.
-data SearchSkillGroupsResponse = SearchSkillGroupsResponse'
-  { _ssgrsNextToken      :: !(Maybe Text)
-  , _ssgrsSkillGroups    :: !(Maybe [SkillGroupData])
-  , _ssgrsTotalCount     :: !(Maybe Int)
-  , _ssgrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchSkillGroupsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssgrsNextToken' - The token returned to indicate that there is more data available.
---
--- * 'ssgrsSkillGroups' - The skill groups that meet the filter criteria, in sort order.
---
--- * 'ssgrsTotalCount' - The total number of skill groups returned.
---
--- * 'ssgrsResponseStatus' - -- | The response status code.
-searchSkillGroupsResponse
-    :: Int -- ^ 'ssgrsResponseStatus'
-    -> SearchSkillGroupsResponse
-searchSkillGroupsResponse pResponseStatus_ =
-  SearchSkillGroupsResponse'
-    { _ssgrsNextToken = Nothing
-    , _ssgrsSkillGroups = Nothing
-    , _ssgrsTotalCount = Nothing
-    , _ssgrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The token returned to indicate that there is more data available.
-ssgrsNextToken :: Lens' SearchSkillGroupsResponse (Maybe Text)
-ssgrsNextToken = lens _ssgrsNextToken (\ s a -> s{_ssgrsNextToken = a})
-
--- | The skill groups that meet the filter criteria, in sort order.
-ssgrsSkillGroups :: Lens' SearchSkillGroupsResponse [SkillGroupData]
-ssgrsSkillGroups = lens _ssgrsSkillGroups (\ s a -> s{_ssgrsSkillGroups = a}) . _Default . _Coerce
-
--- | The total number of skill groups returned.
-ssgrsTotalCount :: Lens' SearchSkillGroupsResponse (Maybe Int)
-ssgrsTotalCount = lens _ssgrsTotalCount (\ s a -> s{_ssgrsTotalCount = a})
-
--- | -- | The response status code.
-ssgrsResponseStatus :: Lens' SearchSkillGroupsResponse Int
-ssgrsResponseStatus = lens _ssgrsResponseStatus (\ s a -> s{_ssgrsResponseStatus = a})
-
-instance NFData SearchSkillGroupsResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/SearchUsers.hs b/gen/Network/AWS/AlexaBusiness/SearchUsers.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/SearchUsers.hs
+++ /dev/null
@@ -1,196 +0,0 @@
-{-# 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.AlexaBusiness.SearchUsers
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Searches users and lists the ones that meet a set of filter and sort criteria.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.AlexaBusiness.SearchUsers
-    (
-    -- * Creating a Request
-      searchUsers
-    , SearchUsers
-    -- * Request Lenses
-    , suFilters
-    , suSortCriteria
-    , suNextToken
-    , suMaxResults
-
-    -- * Destructuring the Response
-    , searchUsersResponse
-    , SearchUsersResponse
-    -- * Response Lenses
-    , sursUsers
-    , sursNextToken
-    , sursTotalCount
-    , sursResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'searchUsers' smart constructor.
-data SearchUsers = SearchUsers'
-  { _suFilters      :: !(Maybe [Filter])
-  , _suSortCriteria :: !(Maybe [Sort])
-  , _suNextToken    :: !(Maybe Text)
-  , _suMaxResults   :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchUsers' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'suFilters' - The filters to use for listing a specific set of users. Required. Supported filter keys are UserId, FirstName, LastName, Email, and EnrollmentStatus.
---
--- * 'suSortCriteria' - The sort order to use in listing the filtered set of users. Required. Supported sort keys are UserId, FirstName, LastName, Email, and EnrollmentStatus.
---
--- * 'suNextToken' - An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ . Required.
---
--- * 'suMaxResults' - The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved. Required.
-searchUsers
-    :: SearchUsers
-searchUsers =
-  SearchUsers'
-    { _suFilters = Nothing
-    , _suSortCriteria = Nothing
-    , _suNextToken = Nothing
-    , _suMaxResults = Nothing
-    }
-
-
--- | The filters to use for listing a specific set of users. Required. Supported filter keys are UserId, FirstName, LastName, Email, and EnrollmentStatus.
-suFilters :: Lens' SearchUsers [Filter]
-suFilters = lens _suFilters (\ s a -> s{_suFilters = a}) . _Default . _Coerce
-
--- | The sort order to use in listing the filtered set of users. Required. Supported sort keys are UserId, FirstName, LastName, Email, and EnrollmentStatus.
-suSortCriteria :: Lens' SearchUsers [Sort]
-suSortCriteria = lens _suSortCriteria (\ s a -> s{_suSortCriteria = a}) . _Default . _Coerce
-
--- | An optional token returned from a prior request. Use this token for pagination of results from this action. If this parameter is specified, the response includes only results beyond the token, up to the value specified by @MaxResults@ . Required.
-suNextToken :: Lens' SearchUsers (Maybe Text)
-suNextToken = lens _suNextToken (\ s a -> s{_suNextToken = a})
-
--- | The maximum number of results to include in the response. If more results exist than the specified @MaxResults@ value, a token is included in the response so that the remaining results can be retrieved. Required.
-suMaxResults :: Lens' SearchUsers (Maybe Natural)
-suMaxResults = lens _suMaxResults (\ s a -> s{_suMaxResults = a}) . mapping _Nat
-
-instance AWSPager SearchUsers where
-        page rq rs
-          | stop (rs ^. sursNextToken) = Nothing
-          | stop (rs ^. sursUsers) = Nothing
-          | otherwise =
-            Just $ rq & suNextToken .~ rs ^. sursNextToken
-
-instance AWSRequest SearchUsers where
-        type Rs SearchUsers = SearchUsersResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveJSON
-              (\ s h x ->
-                 SearchUsersResponse' <$>
-                   (x .?> "Users" .!@ mempty) <*> (x .?> "NextToken")
-                     <*> (x .?> "TotalCount")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable SearchUsers where
-
-instance NFData SearchUsers where
-
-instance ToHeaders SearchUsers where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.SearchUsers" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON SearchUsers where
-        toJSON SearchUsers'{..}
-          = object
-              (catMaybes
-                 [("Filters" .=) <$> _suFilters,
-                  ("SortCriteria" .=) <$> _suSortCriteria,
-                  ("NextToken" .=) <$> _suNextToken,
-                  ("MaxResults" .=) <$> _suMaxResults])
-
-instance ToPath SearchUsers where
-        toPath = const "/"
-
-instance ToQuery SearchUsers where
-        toQuery = const mempty
-
--- | /See:/ 'searchUsersResponse' smart constructor.
-data SearchUsersResponse = SearchUsersResponse'
-  { _sursUsers          :: !(Maybe [UserData])
-  , _sursNextToken      :: !(Maybe Text)
-  , _sursTotalCount     :: !(Maybe Int)
-  , _sursResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SearchUsersResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sursUsers' - The users that meet the specified set of filter criteria, in sort order.
---
--- * 'sursNextToken' - The token returned to indicate that there is more data available.
---
--- * 'sursTotalCount' - The total number of users returned.
---
--- * 'sursResponseStatus' - -- | The response status code.
-searchUsersResponse
-    :: Int -- ^ 'sursResponseStatus'
-    -> SearchUsersResponse
-searchUsersResponse pResponseStatus_ =
-  SearchUsersResponse'
-    { _sursUsers = Nothing
-    , _sursNextToken = Nothing
-    , _sursTotalCount = Nothing
-    , _sursResponseStatus = pResponseStatus_
-    }
-
-
--- | The users that meet the specified set of filter criteria, in sort order.
-sursUsers :: Lens' SearchUsersResponse [UserData]
-sursUsers = lens _sursUsers (\ s a -> s{_sursUsers = a}) . _Default . _Coerce
-
--- | The token returned to indicate that there is more data available.
-sursNextToken :: Lens' SearchUsersResponse (Maybe Text)
-sursNextToken = lens _sursNextToken (\ s a -> s{_sursNextToken = a})
-
--- | The total number of users returned.
-sursTotalCount :: Lens' SearchUsersResponse (Maybe Int)
-sursTotalCount = lens _sursTotalCount (\ s a -> s{_sursTotalCount = a})
-
--- | -- | The response status code.
-sursResponseStatus :: Lens' SearchUsersResponse Int
-sursResponseStatus = lens _sursResponseStatus (\ s a -> s{_sursResponseStatus = a})
-
-instance NFData SearchUsersResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/SendInvitation.hs b/gen/Network/AWS/AlexaBusiness/SendInvitation.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/SendInvitation.hs
+++ /dev/null
@@ -1,119 +0,0 @@
-{-# 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.AlexaBusiness.SendInvitation
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Sends an enrollment invitation email with a URL to a user. The URL is valid for 72 hours or until you call this operation again, whichever comes first.
---
---
-module Network.AWS.AlexaBusiness.SendInvitation
-    (
-    -- * Creating a Request
-      sendInvitation
-    , SendInvitation
-    -- * Request Lenses
-    , siUserARN
-
-    -- * Destructuring the Response
-    , sendInvitationResponse
-    , SendInvitationResponse
-    -- * Response Lenses
-    , sirsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'sendInvitation' smart constructor.
-newtype SendInvitation = SendInvitation'
-  { _siUserARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SendInvitation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'siUserARN' - The ARN of the user to whom to send an invitation. Required.
-sendInvitation
-    :: SendInvitation
-sendInvitation = SendInvitation' {_siUserARN = Nothing}
-
-
--- | The ARN of the user to whom to send an invitation. Required.
-siUserARN :: Lens' SendInvitation (Maybe Text)
-siUserARN = lens _siUserARN (\ s a -> s{_siUserARN = a})
-
-instance AWSRequest SendInvitation where
-        type Rs SendInvitation = SendInvitationResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 SendInvitationResponse' <$> (pure (fromEnum s)))
-
-instance Hashable SendInvitation where
-
-instance NFData SendInvitation where
-
-instance ToHeaders SendInvitation where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.SendInvitation" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON SendInvitation where
-        toJSON SendInvitation'{..}
-          = object (catMaybes [("UserArn" .=) <$> _siUserARN])
-
-instance ToPath SendInvitation where
-        toPath = const "/"
-
-instance ToQuery SendInvitation where
-        toQuery = const mempty
-
--- | /See:/ 'sendInvitationResponse' smart constructor.
-newtype SendInvitationResponse = SendInvitationResponse'
-  { _sirsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SendInvitationResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sirsResponseStatus' - -- | The response status code.
-sendInvitationResponse
-    :: Int -- ^ 'sirsResponseStatus'
-    -> SendInvitationResponse
-sendInvitationResponse pResponseStatus_ =
-  SendInvitationResponse' {_sirsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-sirsResponseStatus :: Lens' SendInvitationResponse Int
-sirsResponseStatus = lens _sirsResponseStatus (\ s a -> s{_sirsResponseStatus = a})
-
-instance NFData SendInvitationResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/StartDeviceSync.hs b/gen/Network/AWS/AlexaBusiness/StartDeviceSync.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/StartDeviceSync.hs
+++ /dev/null
@@ -1,141 +0,0 @@
-{-# 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.AlexaBusiness.StartDeviceSync
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Resets a device and its account to the known default settings, by clearing all information and settings set by previous users.
---
---
-module Network.AWS.AlexaBusiness.StartDeviceSync
-    (
-    -- * Creating a Request
-      startDeviceSync
-    , StartDeviceSync
-    -- * Request Lenses
-    , sdsDeviceARN
-    , sdsRoomARN
-    , sdsFeatures
-
-    -- * Destructuring the Response
-    , startDeviceSyncResponse
-    , StartDeviceSyncResponse
-    -- * Response Lenses
-    , sdsrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'startDeviceSync' smart constructor.
-data StartDeviceSync = StartDeviceSync'
-  { _sdsDeviceARN :: !(Maybe Text)
-  , _sdsRoomARN   :: !(Maybe Text)
-  , _sdsFeatures  :: ![Feature]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartDeviceSync' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdsDeviceARN' - The ARN of the device to sync. Required.
---
--- * 'sdsRoomARN' - The ARN of the room with which the device to sync is associated. Required.
---
--- * 'sdsFeatures' - Request structure to start the device sync. Required.
-startDeviceSync
-    :: StartDeviceSync
-startDeviceSync =
-  StartDeviceSync'
-    {_sdsDeviceARN = Nothing, _sdsRoomARN = Nothing, _sdsFeatures = mempty}
-
-
--- | The ARN of the device to sync. Required.
-sdsDeviceARN :: Lens' StartDeviceSync (Maybe Text)
-sdsDeviceARN = lens _sdsDeviceARN (\ s a -> s{_sdsDeviceARN = a})
-
--- | The ARN of the room with which the device to sync is associated. Required.
-sdsRoomARN :: Lens' StartDeviceSync (Maybe Text)
-sdsRoomARN = lens _sdsRoomARN (\ s a -> s{_sdsRoomARN = a})
-
--- | Request structure to start the device sync. Required.
-sdsFeatures :: Lens' StartDeviceSync [Feature]
-sdsFeatures = lens _sdsFeatures (\ s a -> s{_sdsFeatures = a}) . _Coerce
-
-instance AWSRequest StartDeviceSync where
-        type Rs StartDeviceSync = StartDeviceSyncResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 StartDeviceSyncResponse' <$> (pure (fromEnum s)))
-
-instance Hashable StartDeviceSync where
-
-instance NFData StartDeviceSync where
-
-instance ToHeaders StartDeviceSync where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.StartDeviceSync" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON StartDeviceSync where
-        toJSON StartDeviceSync'{..}
-          = object
-              (catMaybes
-                 [("DeviceArn" .=) <$> _sdsDeviceARN,
-                  ("RoomArn" .=) <$> _sdsRoomARN,
-                  Just ("Features" .= _sdsFeatures)])
-
-instance ToPath StartDeviceSync where
-        toPath = const "/"
-
-instance ToQuery StartDeviceSync where
-        toQuery = const mempty
-
--- | /See:/ 'startDeviceSyncResponse' smart constructor.
-newtype StartDeviceSyncResponse = StartDeviceSyncResponse'
-  { _sdsrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartDeviceSyncResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdsrsResponseStatus' - -- | The response status code.
-startDeviceSyncResponse
-    :: Int -- ^ 'sdsrsResponseStatus'
-    -> StartDeviceSyncResponse
-startDeviceSyncResponse pResponseStatus_ =
-  StartDeviceSyncResponse' {_sdsrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-sdsrsResponseStatus :: Lens' StartDeviceSyncResponse Int
-sdsrsResponseStatus = lens _sdsrsResponseStatus (\ s a -> s{_sdsrsResponseStatus = a})
-
-instance NFData StartDeviceSyncResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/TagResource.hs b/gen/Network/AWS/AlexaBusiness/TagResource.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/TagResource.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# 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.AlexaBusiness.TagResource
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Adds metadata tags to a specified resource.
---
---
-module Network.AWS.AlexaBusiness.TagResource
-    (
-    -- * Creating a Request
-      tagResource
-    , TagResource
-    -- * Request Lenses
-    , trARN
-    , trTags
-
-    -- * Destructuring the Response
-    , tagResourceResponse
-    , TagResourceResponse
-    -- * Response Lenses
-    , trrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'tagResource' smart constructor.
-data TagResource = TagResource'
-  { _trARN  :: !Text
-  , _trTags :: ![Tag]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trARN' - The ARN of the resource to which to add metadata tags. Required.
---
--- * 'trTags' - The tags to be added to the specified resource. Do not provide system tags. Required.
-tagResource
-    :: Text -- ^ 'trARN'
-    -> TagResource
-tagResource pARN_ = TagResource' {_trARN = pARN_, _trTags = mempty}
-
-
--- | The ARN of the resource to which to add metadata tags. Required.
-trARN :: Lens' TagResource Text
-trARN = lens _trARN (\ s a -> s{_trARN = a})
-
--- | The tags to be added to the specified resource. Do not provide system tags. Required.
-trTags :: Lens' TagResource [Tag]
-trTags = lens _trTags (\ s a -> s{_trTags = a}) . _Coerce
-
-instance AWSRequest TagResource where
-        type Rs TagResource = TagResourceResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 TagResourceResponse' <$> (pure (fromEnum s)))
-
-instance Hashable TagResource where
-
-instance NFData TagResource where
-
-instance ToHeaders TagResource where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.TagResource" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON TagResource where
-        toJSON TagResource'{..}
-          = object
-              (catMaybes
-                 [Just ("Arn" .= _trARN), Just ("Tags" .= _trTags)])
-
-instance ToPath TagResource where
-        toPath = const "/"
-
-instance ToQuery TagResource where
-        toQuery = const mempty
-
--- | /See:/ 'tagResourceResponse' smart constructor.
-newtype TagResourceResponse = TagResourceResponse'
-  { _trrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagResourceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trrsResponseStatus' - -- | The response status code.
-tagResourceResponse
-    :: Int -- ^ 'trrsResponseStatus'
-    -> TagResourceResponse
-tagResourceResponse pResponseStatus_ =
-  TagResourceResponse' {_trrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-trrsResponseStatus :: Lens' TagResourceResponse Int
-trrsResponseStatus = lens _trrsResponseStatus (\ s a -> s{_trrsResponseStatus = a})
-
-instance NFData TagResourceResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/Types.hs b/gen/Network/AWS/AlexaBusiness/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/Types.hs
+++ /dev/null
@@ -1,322 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AlexaBusiness.Types
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.AlexaBusiness.Types
-    (
-    -- * Service Configuration
-      alexaBusiness
-
-    -- * Errors
-    , _InvalidUserStatusException
-    , _NotFoundException
-    , _NameInUseException
-    , _AlreadyExistsException
-    , _LimitExceededException
-    , _ResourceInUseException
-
-    -- * ConnectionStatus
-    , ConnectionStatus (..)
-
-    -- * DeviceEventType
-    , DeviceEventType (..)
-
-    -- * DeviceStatus
-    , DeviceStatus (..)
-
-    -- * DeviceStatusDetailCode
-    , DeviceStatusDetailCode (..)
-
-    -- * DistanceUnit
-    , DistanceUnit (..)
-
-    -- * EnrollmentStatus
-    , EnrollmentStatus (..)
-
-    -- * Feature
-    , Feature (..)
-
-    -- * SortValue
-    , SortValue (..)
-
-    -- * TemperatureUnit
-    , TemperatureUnit (..)
-
-    -- * WakeWord
-    , WakeWord (..)
-
-    -- * AddressBook
-    , AddressBook
-    , addressBook
-    , abAddressBookARN
-    , abName
-    , abDescription
-
-    -- * AddressBookData
-    , AddressBookData
-    , addressBookData
-    , abdAddressBookARN
-    , abdName
-    , abdDescription
-
-    -- * Contact
-    , Contact
-    , contact
-    , cLastName
-    , cContactARN
-    , cPhoneNumber
-    , cFirstName
-    , cDisplayName
-
-    -- * ContactData
-    , ContactData
-    , contactData
-    , cdLastName
-    , cdContactARN
-    , cdPhoneNumber
-    , cdFirstName
-    , cdDisplayName
-
-    -- * Device
-    , Device
-    , device
-    , dDeviceStatus
-    , dDeviceStatusInfo
-    , dDeviceARN
-    , dMACAddress
-    , dDeviceName
-    , dRoomARN
-    , dSoftwareVersion
-    , dDeviceType
-    , dDeviceSerialNumber
-
-    -- * DeviceData
-    , DeviceData
-    , deviceData
-    , ddDeviceStatus
-    , ddDeviceStatusInfo
-    , ddDeviceARN
-    , ddMACAddress
-    , ddDeviceName
-    , ddRoomARN
-    , ddSoftwareVersion
-    , ddDeviceType
-    , ddRoomName
-    , ddDeviceSerialNumber
-
-    -- * DeviceEvent
-    , DeviceEvent
-    , deviceEvent
-    , deValue
-    , deType
-    , deTimestamp
-
-    -- * DeviceStatusDetail
-    , DeviceStatusDetail
-    , deviceStatusDetail
-    , dsdCode
-
-    -- * DeviceStatusInfo
-    , DeviceStatusInfo
-    , deviceStatusInfo
-    , dsiDeviceStatusDetails
-    , dsiConnectionStatus
-
-    -- * Filter
-    , Filter
-    , filter'
-    , fKey
-    , fValues
-
-    -- * Profile
-    , Profile
-    , profile
-    , pSetupModeDisabled
-    , pPSTNEnabled
-    , pDistanceUnit
-    , pAddress
-    , pProfileARN
-    , pWakeWord
-    , pProfileName
-    , pTemperatureUnit
-    , pTimezone
-    , pMaxVolumeLimit
-
-    -- * ProfileData
-    , ProfileData
-    , profileData
-    , pdDistanceUnit
-    , pdAddress
-    , pdProfileARN
-    , pdWakeWord
-    , pdProfileName
-    , pdTemperatureUnit
-    , pdTimezone
-
-    -- * Room
-    , Room
-    , room
-    , rProfileARN
-    , rProviderCalendarId
-    , rRoomARN
-    , rRoomName
-    , rDescription
-
-    -- * RoomData
-    , RoomData
-    , roomData
-    , rdProfileARN
-    , rdProviderCalendarId
-    , rdProfileName
-    , rdRoomARN
-    , rdRoomName
-    , rdDescription
-
-    -- * RoomSkillParameter
-    , RoomSkillParameter
-    , roomSkillParameter
-    , rspParameterKey
-    , rspParameterValue
-
-    -- * SkillGroup
-    , SkillGroup
-    , skillGroup
-    , sgSkillGroupARN
-    , sgDescription
-    , sgSkillGroupName
-
-    -- * SkillGroupData
-    , SkillGroupData
-    , skillGroupData
-    , sgdSkillGroupARN
-    , sgdDescription
-    , sgdSkillGroupName
-
-    -- * SkillSummary
-    , SkillSummary
-    , skillSummary
-    , ssSkillId
-    , ssSupportsLinking
-    , ssSkillName
-
-    -- * Sort
-    , Sort
-    , sort
-    , sKey
-    , sValue
-
-    -- * Tag
-    , Tag
-    , tag
-    , tagValue
-    , tagKey
-
-    -- * UserData
-    , UserData
-    , userData
-    , udEmail
-    , udLastName
-    , udEnrollmentId
-    , udUserARN
-    , udFirstName
-    , udEnrollmentStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.AlexaBusiness.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2017-11-09@ of the Amazon Alexa For Business SDK configuration.
-alexaBusiness :: Service
-alexaBusiness =
-  Service
-    { _svcAbbrev = "AlexaBusiness"
-    , _svcSigner = v4
-    , _svcPrefix = "a4b"
-    , _svcVersion = "2017-11-09"
-    , _svcEndpoint = defaultEndpoint alexaBusiness
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "AlexaBusiness"
-    , _svcRetry = retry
-    }
-  where
-    retry =
-      Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
-    check e
-      | has (hasCode "ThrottledException" . hasStatus 400) e =
-        Just "throttled_exception"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-        Just "throttling_exception"
-      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-      | has (hasStatus 504) e = Just "gateway_timeout"
-      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
-        Just "request_throttled_exception"
-      | has (hasStatus 502) e = Just "bad_gateway"
-      | has (hasStatus 503) e = Just "service_unavailable"
-      | has (hasStatus 500) e = Just "general_server_error"
-      | has (hasStatus 509) e = Just "limit_exceeded"
-      | otherwise = Nothing
-
-
--- | The attempt to update a user is invalid due to the user's current status. HTTP Status Code: 400
---
---
-_InvalidUserStatusException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidUserStatusException =
-  _MatchServiceError alexaBusiness "InvalidUserStatusException"
-
-
--- | The resource is not found. HTTP Status Code: 400
---
---
-_NotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_NotFoundException = _MatchServiceError alexaBusiness "NotFoundException"
-
-
--- | The name sent in the request is already in use. HTTP Status Code: 400
---
---
-_NameInUseException :: AsError a => Getting (First ServiceError) a ServiceError
-_NameInUseException = _MatchServiceError alexaBusiness "NameInUseException"
-
-
--- | The resource being created already exists. HTTP Status Code: 400
---
---
-_AlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
-_AlreadyExistsException =
-  _MatchServiceError alexaBusiness "AlreadyExistsException"
-
-
--- | You are performing an action that would put you beyond your account's limits. HTTP Status Code: 400
---
---
-_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_LimitExceededException =
-  _MatchServiceError alexaBusiness "LimitExceededException"
-
-
--- | The resource in the request is already in use. HTTP Status Code: 400
---
---
-_ResourceInUseException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceInUseException =
-  _MatchServiceError alexaBusiness "ResourceInUseException"
-
diff --git a/gen/Network/AWS/AlexaBusiness/Types/Product.hs b/gen/Network/AWS/AlexaBusiness/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/Types/Product.hs
+++ /dev/null
@@ -1,1423 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AlexaBusiness.Types.Product
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.AlexaBusiness.Types.Product where
-
-import Network.AWS.AlexaBusiness.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-
--- | An address book with attributes.
---
---
---
--- /See:/ 'addressBook' smart constructor.
-data AddressBook = AddressBook'
-  { _abAddressBookARN :: !(Maybe Text)
-  , _abName           :: !(Maybe Text)
-  , _abDescription    :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AddressBook' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'abAddressBookARN' - The ARN of the address book.
---
--- * 'abName' - The name of the address book.
---
--- * 'abDescription' - The description of the address book.
-addressBook
-    :: AddressBook
-addressBook =
-  AddressBook'
-    {_abAddressBookARN = Nothing, _abName = Nothing, _abDescription = Nothing}
-
-
--- | The ARN of the address book.
-abAddressBookARN :: Lens' AddressBook (Maybe Text)
-abAddressBookARN = lens _abAddressBookARN (\ s a -> s{_abAddressBookARN = a})
-
--- | The name of the address book.
-abName :: Lens' AddressBook (Maybe Text)
-abName = lens _abName (\ s a -> s{_abName = a})
-
--- | The description of the address book.
-abDescription :: Lens' AddressBook (Maybe Text)
-abDescription = lens _abDescription (\ s a -> s{_abDescription = a})
-
-instance FromJSON AddressBook where
-        parseJSON
-          = withObject "AddressBook"
-              (\ x ->
-                 AddressBook' <$>
-                   (x .:? "AddressBookArn") <*> (x .:? "Name") <*>
-                     (x .:? "Description"))
-
-instance Hashable AddressBook where
-
-instance NFData AddressBook where
-
--- | Information related to an address book.
---
---
---
--- /See:/ 'addressBookData' smart constructor.
-data AddressBookData = AddressBookData'
-  { _abdAddressBookARN :: !(Maybe Text)
-  , _abdName           :: !(Maybe Text)
-  , _abdDescription    :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AddressBookData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'abdAddressBookARN' - The ARN of the address book.
---
--- * 'abdName' - The name of the address book.
---
--- * 'abdDescription' - The description of the address book.
-addressBookData
-    :: AddressBookData
-addressBookData =
-  AddressBookData'
-    { _abdAddressBookARN = Nothing
-    , _abdName = Nothing
-    , _abdDescription = Nothing
-    }
-
-
--- | The ARN of the address book.
-abdAddressBookARN :: Lens' AddressBookData (Maybe Text)
-abdAddressBookARN = lens _abdAddressBookARN (\ s a -> s{_abdAddressBookARN = a})
-
--- | The name of the address book.
-abdName :: Lens' AddressBookData (Maybe Text)
-abdName = lens _abdName (\ s a -> s{_abdName = a})
-
--- | The description of the address book.
-abdDescription :: Lens' AddressBookData (Maybe Text)
-abdDescription = lens _abdDescription (\ s a -> s{_abdDescription = a})
-
-instance FromJSON AddressBookData where
-        parseJSON
-          = withObject "AddressBookData"
-              (\ x ->
-                 AddressBookData' <$>
-                   (x .:? "AddressBookArn") <*> (x .:? "Name") <*>
-                     (x .:? "Description"))
-
-instance Hashable AddressBookData where
-
-instance NFData AddressBookData where
-
--- | A contact with attributes.
---
---
---
--- /See:/ 'contact' smart constructor.
-data Contact = Contact'
-  { _cLastName    :: !(Maybe Text)
-  , _cContactARN  :: !(Maybe Text)
-  , _cPhoneNumber :: !(Maybe Text)
-  , _cFirstName   :: !(Maybe Text)
-  , _cDisplayName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Contact' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cLastName' - The last name of the contact, used to call the contact on the device.
---
--- * 'cContactARN' - The ARN of the contact.
---
--- * 'cPhoneNumber' - The phone number of the contact.
---
--- * 'cFirstName' - The first name of the contact, used to call the contact on the device.
---
--- * 'cDisplayName' - The name of the contact to display on the console.
-contact
-    :: Contact
-contact =
-  Contact'
-    { _cLastName = Nothing
-    , _cContactARN = Nothing
-    , _cPhoneNumber = Nothing
-    , _cFirstName = Nothing
-    , _cDisplayName = Nothing
-    }
-
-
--- | The last name of the contact, used to call the contact on the device.
-cLastName :: Lens' Contact (Maybe Text)
-cLastName = lens _cLastName (\ s a -> s{_cLastName = a})
-
--- | The ARN of the contact.
-cContactARN :: Lens' Contact (Maybe Text)
-cContactARN = lens _cContactARN (\ s a -> s{_cContactARN = a})
-
--- | The phone number of the contact.
-cPhoneNumber :: Lens' Contact (Maybe Text)
-cPhoneNumber = lens _cPhoneNumber (\ s a -> s{_cPhoneNumber = a})
-
--- | The first name of the contact, used to call the contact on the device.
-cFirstName :: Lens' Contact (Maybe Text)
-cFirstName = lens _cFirstName (\ s a -> s{_cFirstName = a})
-
--- | The name of the contact to display on the console.
-cDisplayName :: Lens' Contact (Maybe Text)
-cDisplayName = lens _cDisplayName (\ s a -> s{_cDisplayName = a})
-
-instance FromJSON Contact where
-        parseJSON
-          = withObject "Contact"
-              (\ x ->
-                 Contact' <$>
-                   (x .:? "LastName") <*> (x .:? "ContactArn") <*>
-                     (x .:? "PhoneNumber")
-                     <*> (x .:? "FirstName")
-                     <*> (x .:? "DisplayName"))
-
-instance Hashable Contact where
-
-instance NFData Contact where
-
--- | Information related to a contact.
---
---
---
--- /See:/ 'contactData' smart constructor.
-data ContactData = ContactData'
-  { _cdLastName    :: !(Maybe Text)
-  , _cdContactARN  :: !(Maybe Text)
-  , _cdPhoneNumber :: !(Maybe Text)
-  , _cdFirstName   :: !(Maybe Text)
-  , _cdDisplayName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ContactData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdLastName' - The last name of the contact, used to call the contact on the device.
---
--- * 'cdContactARN' - The ARN of the contact.
---
--- * 'cdPhoneNumber' - The phone number of the contact.
---
--- * 'cdFirstName' - The first name of the contact, used to call the contact on the device.
---
--- * 'cdDisplayName' - The name of the contact to display on the console.
-contactData
-    :: ContactData
-contactData =
-  ContactData'
-    { _cdLastName = Nothing
-    , _cdContactARN = Nothing
-    , _cdPhoneNumber = Nothing
-    , _cdFirstName = Nothing
-    , _cdDisplayName = Nothing
-    }
-
-
--- | The last name of the contact, used to call the contact on the device.
-cdLastName :: Lens' ContactData (Maybe Text)
-cdLastName = lens _cdLastName (\ s a -> s{_cdLastName = a})
-
--- | The ARN of the contact.
-cdContactARN :: Lens' ContactData (Maybe Text)
-cdContactARN = lens _cdContactARN (\ s a -> s{_cdContactARN = a})
-
--- | The phone number of the contact.
-cdPhoneNumber :: Lens' ContactData (Maybe Text)
-cdPhoneNumber = lens _cdPhoneNumber (\ s a -> s{_cdPhoneNumber = a})
-
--- | The first name of the contact, used to call the contact on the device.
-cdFirstName :: Lens' ContactData (Maybe Text)
-cdFirstName = lens _cdFirstName (\ s a -> s{_cdFirstName = a})
-
--- | The name of the contact to display on the console.
-cdDisplayName :: Lens' ContactData (Maybe Text)
-cdDisplayName = lens _cdDisplayName (\ s a -> s{_cdDisplayName = a})
-
-instance FromJSON ContactData where
-        parseJSON
-          = withObject "ContactData"
-              (\ x ->
-                 ContactData' <$>
-                   (x .:? "LastName") <*> (x .:? "ContactArn") <*>
-                     (x .:? "PhoneNumber")
-                     <*> (x .:? "FirstName")
-                     <*> (x .:? "DisplayName"))
-
-instance Hashable ContactData where
-
-instance NFData ContactData where
-
--- | A device with attributes.
---
---
---
--- /See:/ 'device' smart constructor.
-data Device = Device'
-  { _dDeviceStatus       :: !(Maybe DeviceStatus)
-  , _dDeviceStatusInfo   :: !(Maybe DeviceStatusInfo)
-  , _dDeviceARN          :: !(Maybe Text)
-  , _dMACAddress         :: !(Maybe Text)
-  , _dDeviceName         :: !(Maybe Text)
-  , _dRoomARN            :: !(Maybe Text)
-  , _dSoftwareVersion    :: !(Maybe Text)
-  , _dDeviceType         :: !(Maybe Text)
-  , _dDeviceSerialNumber :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Device' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dDeviceStatus' - The status of a device. If the status is not READY, check the DeviceStatusInfo value for details.
---
--- * 'dDeviceStatusInfo' - Detailed information about a device's status.
---
--- * 'dDeviceARN' - The ARN of a device.
---
--- * 'dMACAddress' - The MAC address of a device.
---
--- * 'dDeviceName' - The name of a device.
---
--- * 'dRoomARN' - The room ARN of a device.
---
--- * 'dSoftwareVersion' - The software version of a device.
---
--- * 'dDeviceType' - The type of a device.
---
--- * 'dDeviceSerialNumber' - The serial number of a device.
-device
-    :: Device
-device =
-  Device'
-    { _dDeviceStatus = Nothing
-    , _dDeviceStatusInfo = Nothing
-    , _dDeviceARN = Nothing
-    , _dMACAddress = Nothing
-    , _dDeviceName = Nothing
-    , _dRoomARN = Nothing
-    , _dSoftwareVersion = Nothing
-    , _dDeviceType = Nothing
-    , _dDeviceSerialNumber = Nothing
-    }
-
-
--- | The status of a device. If the status is not READY, check the DeviceStatusInfo value for details.
-dDeviceStatus :: Lens' Device (Maybe DeviceStatus)
-dDeviceStatus = lens _dDeviceStatus (\ s a -> s{_dDeviceStatus = a})
-
--- | Detailed information about a device's status.
-dDeviceStatusInfo :: Lens' Device (Maybe DeviceStatusInfo)
-dDeviceStatusInfo = lens _dDeviceStatusInfo (\ s a -> s{_dDeviceStatusInfo = a})
-
--- | The ARN of a device.
-dDeviceARN :: Lens' Device (Maybe Text)
-dDeviceARN = lens _dDeviceARN (\ s a -> s{_dDeviceARN = a})
-
--- | The MAC address of a device.
-dMACAddress :: Lens' Device (Maybe Text)
-dMACAddress = lens _dMACAddress (\ s a -> s{_dMACAddress = a})
-
--- | The name of a device.
-dDeviceName :: Lens' Device (Maybe Text)
-dDeviceName = lens _dDeviceName (\ s a -> s{_dDeviceName = a})
-
--- | The room ARN of a device.
-dRoomARN :: Lens' Device (Maybe Text)
-dRoomARN = lens _dRoomARN (\ s a -> s{_dRoomARN = a})
-
--- | The software version of a device.
-dSoftwareVersion :: Lens' Device (Maybe Text)
-dSoftwareVersion = lens _dSoftwareVersion (\ s a -> s{_dSoftwareVersion = a})
-
--- | The type of a device.
-dDeviceType :: Lens' Device (Maybe Text)
-dDeviceType = lens _dDeviceType (\ s a -> s{_dDeviceType = a})
-
--- | The serial number of a device.
-dDeviceSerialNumber :: Lens' Device (Maybe Text)
-dDeviceSerialNumber = lens _dDeviceSerialNumber (\ s a -> s{_dDeviceSerialNumber = a})
-
-instance FromJSON Device where
-        parseJSON
-          = withObject "Device"
-              (\ x ->
-                 Device' <$>
-                   (x .:? "DeviceStatus") <*> (x .:? "DeviceStatusInfo")
-                     <*> (x .:? "DeviceArn")
-                     <*> (x .:? "MacAddress")
-                     <*> (x .:? "DeviceName")
-                     <*> (x .:? "RoomArn")
-                     <*> (x .:? "SoftwareVersion")
-                     <*> (x .:? "DeviceType")
-                     <*> (x .:? "DeviceSerialNumber"))
-
-instance Hashable Device where
-
-instance NFData Device where
-
--- | Device attributes.
---
---
---
--- /See:/ 'deviceData' smart constructor.
-data DeviceData = DeviceData'
-  { _ddDeviceStatus       :: !(Maybe DeviceStatus)
-  , _ddDeviceStatusInfo   :: !(Maybe DeviceStatusInfo)
-  , _ddDeviceARN          :: !(Maybe Text)
-  , _ddMACAddress         :: !(Maybe Text)
-  , _ddDeviceName         :: !(Maybe Text)
-  , _ddRoomARN            :: !(Maybe Text)
-  , _ddSoftwareVersion    :: !(Maybe Text)
-  , _ddDeviceType         :: !(Maybe Text)
-  , _ddRoomName           :: !(Maybe Text)
-  , _ddDeviceSerialNumber :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeviceData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddDeviceStatus' - The status of a device.
---
--- * 'ddDeviceStatusInfo' - Detailed information about a device's status.
---
--- * 'ddDeviceARN' - The ARN of a device.
---
--- * 'ddMACAddress' - The MAC address of a device.
---
--- * 'ddDeviceName' - The name of a device.
---
--- * 'ddRoomARN' - The room ARN associated with a device.
---
--- * 'ddSoftwareVersion' - The software version of a device.
---
--- * 'ddDeviceType' - The type of a device.
---
--- * 'ddRoomName' - The name of the room associated with a device.
---
--- * 'ddDeviceSerialNumber' - The serial number of a device.
-deviceData
-    :: DeviceData
-deviceData =
-  DeviceData'
-    { _ddDeviceStatus = Nothing
-    , _ddDeviceStatusInfo = Nothing
-    , _ddDeviceARN = Nothing
-    , _ddMACAddress = Nothing
-    , _ddDeviceName = Nothing
-    , _ddRoomARN = Nothing
-    , _ddSoftwareVersion = Nothing
-    , _ddDeviceType = Nothing
-    , _ddRoomName = Nothing
-    , _ddDeviceSerialNumber = Nothing
-    }
-
-
--- | The status of a device.
-ddDeviceStatus :: Lens' DeviceData (Maybe DeviceStatus)
-ddDeviceStatus = lens _ddDeviceStatus (\ s a -> s{_ddDeviceStatus = a})
-
--- | Detailed information about a device's status.
-ddDeviceStatusInfo :: Lens' DeviceData (Maybe DeviceStatusInfo)
-ddDeviceStatusInfo = lens _ddDeviceStatusInfo (\ s a -> s{_ddDeviceStatusInfo = a})
-
--- | The ARN of a device.
-ddDeviceARN :: Lens' DeviceData (Maybe Text)
-ddDeviceARN = lens _ddDeviceARN (\ s a -> s{_ddDeviceARN = a})
-
--- | The MAC address of a device.
-ddMACAddress :: Lens' DeviceData (Maybe Text)
-ddMACAddress = lens _ddMACAddress (\ s a -> s{_ddMACAddress = a})
-
--- | The name of a device.
-ddDeviceName :: Lens' DeviceData (Maybe Text)
-ddDeviceName = lens _ddDeviceName (\ s a -> s{_ddDeviceName = a})
-
--- | The room ARN associated with a device.
-ddRoomARN :: Lens' DeviceData (Maybe Text)
-ddRoomARN = lens _ddRoomARN (\ s a -> s{_ddRoomARN = a})
-
--- | The software version of a device.
-ddSoftwareVersion :: Lens' DeviceData (Maybe Text)
-ddSoftwareVersion = lens _ddSoftwareVersion (\ s a -> s{_ddSoftwareVersion = a})
-
--- | The type of a device.
-ddDeviceType :: Lens' DeviceData (Maybe Text)
-ddDeviceType = lens _ddDeviceType (\ s a -> s{_ddDeviceType = a})
-
--- | The name of the room associated with a device.
-ddRoomName :: Lens' DeviceData (Maybe Text)
-ddRoomName = lens _ddRoomName (\ s a -> s{_ddRoomName = a})
-
--- | The serial number of a device.
-ddDeviceSerialNumber :: Lens' DeviceData (Maybe Text)
-ddDeviceSerialNumber = lens _ddDeviceSerialNumber (\ s a -> s{_ddDeviceSerialNumber = a})
-
-instance FromJSON DeviceData where
-        parseJSON
-          = withObject "DeviceData"
-              (\ x ->
-                 DeviceData' <$>
-                   (x .:? "DeviceStatus") <*> (x .:? "DeviceStatusInfo")
-                     <*> (x .:? "DeviceArn")
-                     <*> (x .:? "MacAddress")
-                     <*> (x .:? "DeviceName")
-                     <*> (x .:? "RoomArn")
-                     <*> (x .:? "SoftwareVersion")
-                     <*> (x .:? "DeviceType")
-                     <*> (x .:? "RoomName")
-                     <*> (x .:? "DeviceSerialNumber"))
-
-instance Hashable DeviceData where
-
-instance NFData DeviceData where
-
--- | The list of device events.
---
---
---
--- /See:/ 'deviceEvent' smart constructor.
-data DeviceEvent = DeviceEvent'
-  { _deValue     :: !(Maybe Text)
-  , _deType      :: !(Maybe DeviceEventType)
-  , _deTimestamp :: !(Maybe POSIX)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeviceEvent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deValue' - The value of the event.
---
--- * 'deType' - The type of device event.
---
--- * 'deTimestamp' - The time (in epoch) when the event occurred.
-deviceEvent
-    :: DeviceEvent
-deviceEvent =
-  DeviceEvent' {_deValue = Nothing, _deType = Nothing, _deTimestamp = Nothing}
-
-
--- | The value of the event.
-deValue :: Lens' DeviceEvent (Maybe Text)
-deValue = lens _deValue (\ s a -> s{_deValue = a})
-
--- | The type of device event.
-deType :: Lens' DeviceEvent (Maybe DeviceEventType)
-deType = lens _deType (\ s a -> s{_deType = a})
-
--- | The time (in epoch) when the event occurred.
-deTimestamp :: Lens' DeviceEvent (Maybe UTCTime)
-deTimestamp = lens _deTimestamp (\ s a -> s{_deTimestamp = a}) . mapping _Time
-
-instance FromJSON DeviceEvent where
-        parseJSON
-          = withObject "DeviceEvent"
-              (\ x ->
-                 DeviceEvent' <$>
-                   (x .:? "Value") <*> (x .:? "Type") <*>
-                     (x .:? "Timestamp"))
-
-instance Hashable DeviceEvent where
-
-instance NFData DeviceEvent where
-
--- | Details of a device’s status.
---
---
---
--- /See:/ 'deviceStatusDetail' smart constructor.
-newtype DeviceStatusDetail = DeviceStatusDetail'
-  { _dsdCode :: Maybe DeviceStatusDetailCode
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeviceStatusDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsdCode' - The device status detail code.
-deviceStatusDetail
-    :: DeviceStatusDetail
-deviceStatusDetail = DeviceStatusDetail' {_dsdCode = Nothing}
-
-
--- | The device status detail code.
-dsdCode :: Lens' DeviceStatusDetail (Maybe DeviceStatusDetailCode)
-dsdCode = lens _dsdCode (\ s a -> s{_dsdCode = a})
-
-instance FromJSON DeviceStatusDetail where
-        parseJSON
-          = withObject "DeviceStatusDetail"
-              (\ x -> DeviceStatusDetail' <$> (x .:? "Code"))
-
-instance Hashable DeviceStatusDetail where
-
-instance NFData DeviceStatusDetail where
-
--- | Detailed information about a device's status.
---
---
---
--- /See:/ 'deviceStatusInfo' smart constructor.
-data DeviceStatusInfo = DeviceStatusInfo'
-  { _dsiDeviceStatusDetails :: !(Maybe [DeviceStatusDetail])
-  , _dsiConnectionStatus    :: !(Maybe ConnectionStatus)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeviceStatusInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsiDeviceStatusDetails' - One or more device status detail descriptions.
---
--- * 'dsiConnectionStatus' - The latest available information about the connection status of a device.
-deviceStatusInfo
-    :: DeviceStatusInfo
-deviceStatusInfo =
-  DeviceStatusInfo'
-    {_dsiDeviceStatusDetails = Nothing, _dsiConnectionStatus = Nothing}
-
-
--- | One or more device status detail descriptions.
-dsiDeviceStatusDetails :: Lens' DeviceStatusInfo [DeviceStatusDetail]
-dsiDeviceStatusDetails = lens _dsiDeviceStatusDetails (\ s a -> s{_dsiDeviceStatusDetails = a}) . _Default . _Coerce
-
--- | The latest available information about the connection status of a device.
-dsiConnectionStatus :: Lens' DeviceStatusInfo (Maybe ConnectionStatus)
-dsiConnectionStatus = lens _dsiConnectionStatus (\ s a -> s{_dsiConnectionStatus = a})
-
-instance FromJSON DeviceStatusInfo where
-        parseJSON
-          = withObject "DeviceStatusInfo"
-              (\ x ->
-                 DeviceStatusInfo' <$>
-                   (x .:? "DeviceStatusDetails" .!= mempty) <*>
-                     (x .:? "ConnectionStatus"))
-
-instance Hashable DeviceStatusInfo where
-
-instance NFData DeviceStatusInfo where
-
--- | A filter name and value pair that is used to return a more specific list of results. Filters can be used to match a set of resources by various criteria.
---
---
---
--- /See:/ 'filter'' smart constructor.
-data Filter = Filter'
-  { _fKey    :: !Text
-  , _fValues :: ![Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Filter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fKey' - The key of a filter.
---
--- * 'fValues' - The values of a filter.
-filter'
-    :: Text -- ^ 'fKey'
-    -> Filter
-filter' pKey_ = Filter' {_fKey = pKey_, _fValues = mempty}
-
-
--- | The key of a filter.
-fKey :: Lens' Filter Text
-fKey = lens _fKey (\ s a -> s{_fKey = a})
-
--- | The values of a filter.
-fValues :: Lens' Filter [Text]
-fValues = lens _fValues (\ s a -> s{_fValues = a}) . _Coerce
-
-instance Hashable Filter where
-
-instance NFData Filter where
-
-instance ToJSON Filter where
-        toJSON Filter'{..}
-          = object
-              (catMaybes
-                 [Just ("Key" .= _fKey), Just ("Values" .= _fValues)])
-
--- | A room profile with attributes.
---
---
---
--- /See:/ 'profile' smart constructor.
-data Profile = Profile'
-  { _pSetupModeDisabled :: !(Maybe Bool)
-  , _pPSTNEnabled       :: !(Maybe Bool)
-  , _pDistanceUnit      :: !(Maybe DistanceUnit)
-  , _pAddress           :: !(Maybe Text)
-  , _pProfileARN        :: !(Maybe Text)
-  , _pWakeWord          :: !(Maybe WakeWord)
-  , _pProfileName       :: !(Maybe Text)
-  , _pTemperatureUnit   :: !(Maybe TemperatureUnit)
-  , _pTimezone          :: !(Maybe Text)
-  , _pMaxVolumeLimit    :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Profile' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pSetupModeDisabled' - The setup mode of a room profile.
---
--- * 'pPSTNEnabled' - The PSTN setting of a room profile.
---
--- * 'pDistanceUnit' - The distance unit of a room profile.
---
--- * 'pAddress' - The address of a room profile.
---
--- * 'pProfileARN' - The ARN of a room profile.
---
--- * 'pWakeWord' - The wake word of a room profile.
---
--- * 'pProfileName' - The name of a room profile.
---
--- * 'pTemperatureUnit' - The temperature unit of a room profile.
---
--- * 'pTimezone' - The time zone of a room profile.
---
--- * 'pMaxVolumeLimit' - The max volume limit of a room profile.
-profile
-    :: Profile
-profile =
-  Profile'
-    { _pSetupModeDisabled = Nothing
-    , _pPSTNEnabled = Nothing
-    , _pDistanceUnit = Nothing
-    , _pAddress = Nothing
-    , _pProfileARN = Nothing
-    , _pWakeWord = Nothing
-    , _pProfileName = Nothing
-    , _pTemperatureUnit = Nothing
-    , _pTimezone = Nothing
-    , _pMaxVolumeLimit = Nothing
-    }
-
-
--- | The setup mode of a room profile.
-pSetupModeDisabled :: Lens' Profile (Maybe Bool)
-pSetupModeDisabled = lens _pSetupModeDisabled (\ s a -> s{_pSetupModeDisabled = a})
-
--- | The PSTN setting of a room profile.
-pPSTNEnabled :: Lens' Profile (Maybe Bool)
-pPSTNEnabled = lens _pPSTNEnabled (\ s a -> s{_pPSTNEnabled = a})
-
--- | The distance unit of a room profile.
-pDistanceUnit :: Lens' Profile (Maybe DistanceUnit)
-pDistanceUnit = lens _pDistanceUnit (\ s a -> s{_pDistanceUnit = a})
-
--- | The address of a room profile.
-pAddress :: Lens' Profile (Maybe Text)
-pAddress = lens _pAddress (\ s a -> s{_pAddress = a})
-
--- | The ARN of a room profile.
-pProfileARN :: Lens' Profile (Maybe Text)
-pProfileARN = lens _pProfileARN (\ s a -> s{_pProfileARN = a})
-
--- | The wake word of a room profile.
-pWakeWord :: Lens' Profile (Maybe WakeWord)
-pWakeWord = lens _pWakeWord (\ s a -> s{_pWakeWord = a})
-
--- | The name of a room profile.
-pProfileName :: Lens' Profile (Maybe Text)
-pProfileName = lens _pProfileName (\ s a -> s{_pProfileName = a})
-
--- | The temperature unit of a room profile.
-pTemperatureUnit :: Lens' Profile (Maybe TemperatureUnit)
-pTemperatureUnit = lens _pTemperatureUnit (\ s a -> s{_pTemperatureUnit = a})
-
--- | The time zone of a room profile.
-pTimezone :: Lens' Profile (Maybe Text)
-pTimezone = lens _pTimezone (\ s a -> s{_pTimezone = a})
-
--- | The max volume limit of a room profile.
-pMaxVolumeLimit :: Lens' Profile (Maybe Int)
-pMaxVolumeLimit = lens _pMaxVolumeLimit (\ s a -> s{_pMaxVolumeLimit = a})
-
-instance FromJSON Profile where
-        parseJSON
-          = withObject "Profile"
-              (\ x ->
-                 Profile' <$>
-                   (x .:? "SetupModeDisabled") <*> (x .:? "PSTNEnabled")
-                     <*> (x .:? "DistanceUnit")
-                     <*> (x .:? "Address")
-                     <*> (x .:? "ProfileArn")
-                     <*> (x .:? "WakeWord")
-                     <*> (x .:? "ProfileName")
-                     <*> (x .:? "TemperatureUnit")
-                     <*> (x .:? "Timezone")
-                     <*> (x .:? "MaxVolumeLimit"))
-
-instance Hashable Profile where
-
-instance NFData Profile where
-
--- | The data of a room profile.
---
---
---
--- /See:/ 'profileData' smart constructor.
-data ProfileData = ProfileData'
-  { _pdDistanceUnit    :: !(Maybe DistanceUnit)
-  , _pdAddress         :: !(Maybe Text)
-  , _pdProfileARN      :: !(Maybe Text)
-  , _pdWakeWord        :: !(Maybe WakeWord)
-  , _pdProfileName     :: !(Maybe Text)
-  , _pdTemperatureUnit :: !(Maybe TemperatureUnit)
-  , _pdTimezone        :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ProfileData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdDistanceUnit' - The distance unit of a room profile.
---
--- * 'pdAddress' - The address of a room profile.
---
--- * 'pdProfileARN' - The ARN of a room profile.
---
--- * 'pdWakeWord' - The wake word of a room profile.
---
--- * 'pdProfileName' - The name of a room profile.
---
--- * 'pdTemperatureUnit' - The temperature unit of a room profile.
---
--- * 'pdTimezone' - The timezone of a room profile.
-profileData
-    :: ProfileData
-profileData =
-  ProfileData'
-    { _pdDistanceUnit = Nothing
-    , _pdAddress = Nothing
-    , _pdProfileARN = Nothing
-    , _pdWakeWord = Nothing
-    , _pdProfileName = Nothing
-    , _pdTemperatureUnit = Nothing
-    , _pdTimezone = Nothing
-    }
-
-
--- | The distance unit of a room profile.
-pdDistanceUnit :: Lens' ProfileData (Maybe DistanceUnit)
-pdDistanceUnit = lens _pdDistanceUnit (\ s a -> s{_pdDistanceUnit = a})
-
--- | The address of a room profile.
-pdAddress :: Lens' ProfileData (Maybe Text)
-pdAddress = lens _pdAddress (\ s a -> s{_pdAddress = a})
-
--- | The ARN of a room profile.
-pdProfileARN :: Lens' ProfileData (Maybe Text)
-pdProfileARN = lens _pdProfileARN (\ s a -> s{_pdProfileARN = a})
-
--- | The wake word of a room profile.
-pdWakeWord :: Lens' ProfileData (Maybe WakeWord)
-pdWakeWord = lens _pdWakeWord (\ s a -> s{_pdWakeWord = a})
-
--- | The name of a room profile.
-pdProfileName :: Lens' ProfileData (Maybe Text)
-pdProfileName = lens _pdProfileName (\ s a -> s{_pdProfileName = a})
-
--- | The temperature unit of a room profile.
-pdTemperatureUnit :: Lens' ProfileData (Maybe TemperatureUnit)
-pdTemperatureUnit = lens _pdTemperatureUnit (\ s a -> s{_pdTemperatureUnit = a})
-
--- | The timezone of a room profile.
-pdTimezone :: Lens' ProfileData (Maybe Text)
-pdTimezone = lens _pdTimezone (\ s a -> s{_pdTimezone = a})
-
-instance FromJSON ProfileData where
-        parseJSON
-          = withObject "ProfileData"
-              (\ x ->
-                 ProfileData' <$>
-                   (x .:? "DistanceUnit") <*> (x .:? "Address") <*>
-                     (x .:? "ProfileArn")
-                     <*> (x .:? "WakeWord")
-                     <*> (x .:? "ProfileName")
-                     <*> (x .:? "TemperatureUnit")
-                     <*> (x .:? "Timezone"))
-
-instance Hashable ProfileData where
-
-instance NFData ProfileData where
-
--- | A room with attributes.
---
---
---
--- /See:/ 'room' smart constructor.
-data Room = Room'
-  { _rProfileARN         :: !(Maybe Text)
-  , _rProviderCalendarId :: !(Maybe Text)
-  , _rRoomARN            :: !(Maybe Text)
-  , _rRoomName           :: !(Maybe Text)
-  , _rDescription        :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Room' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rProfileARN' - The profile ARN of a room.
---
--- * 'rProviderCalendarId' - The provider calendar ARN of a room.
---
--- * 'rRoomARN' - The ARN of a room.
---
--- * 'rRoomName' - The name of a room.
---
--- * 'rDescription' - The description of a room.
-room
-    :: Room
-room =
-  Room'
-    { _rProfileARN = Nothing
-    , _rProviderCalendarId = Nothing
-    , _rRoomARN = Nothing
-    , _rRoomName = Nothing
-    , _rDescription = Nothing
-    }
-
-
--- | The profile ARN of a room.
-rProfileARN :: Lens' Room (Maybe Text)
-rProfileARN = lens _rProfileARN (\ s a -> s{_rProfileARN = a})
-
--- | The provider calendar ARN of a room.
-rProviderCalendarId :: Lens' Room (Maybe Text)
-rProviderCalendarId = lens _rProviderCalendarId (\ s a -> s{_rProviderCalendarId = a})
-
--- | The ARN of a room.
-rRoomARN :: Lens' Room (Maybe Text)
-rRoomARN = lens _rRoomARN (\ s a -> s{_rRoomARN = a})
-
--- | The name of a room.
-rRoomName :: Lens' Room (Maybe Text)
-rRoomName = lens _rRoomName (\ s a -> s{_rRoomName = a})
-
--- | The description of a room.
-rDescription :: Lens' Room (Maybe Text)
-rDescription = lens _rDescription (\ s a -> s{_rDescription = a})
-
-instance FromJSON Room where
-        parseJSON
-          = withObject "Room"
-              (\ x ->
-                 Room' <$>
-                   (x .:? "ProfileArn") <*> (x .:? "ProviderCalendarId")
-                     <*> (x .:? "RoomArn")
-                     <*> (x .:? "RoomName")
-                     <*> (x .:? "Description"))
-
-instance Hashable Room where
-
-instance NFData Room where
-
--- | The data of a room.
---
---
---
--- /See:/ 'roomData' smart constructor.
-data RoomData = RoomData'
-  { _rdProfileARN         :: !(Maybe Text)
-  , _rdProviderCalendarId :: !(Maybe Text)
-  , _rdProfileName        :: !(Maybe Text)
-  , _rdRoomARN            :: !(Maybe Text)
-  , _rdRoomName           :: !(Maybe Text)
-  , _rdDescription        :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RoomData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rdProfileARN' - The profile ARN of a room.
---
--- * 'rdProviderCalendarId' - The provider calendar ARN of a room.
---
--- * 'rdProfileName' - The profile name of a room.
---
--- * 'rdRoomARN' - The ARN of a room.
---
--- * 'rdRoomName' - The name of a room.
---
--- * 'rdDescription' - The description of a room.
-roomData
-    :: RoomData
-roomData =
-  RoomData'
-    { _rdProfileARN = Nothing
-    , _rdProviderCalendarId = Nothing
-    , _rdProfileName = Nothing
-    , _rdRoomARN = Nothing
-    , _rdRoomName = Nothing
-    , _rdDescription = Nothing
-    }
-
-
--- | The profile ARN of a room.
-rdProfileARN :: Lens' RoomData (Maybe Text)
-rdProfileARN = lens _rdProfileARN (\ s a -> s{_rdProfileARN = a})
-
--- | The provider calendar ARN of a room.
-rdProviderCalendarId :: Lens' RoomData (Maybe Text)
-rdProviderCalendarId = lens _rdProviderCalendarId (\ s a -> s{_rdProviderCalendarId = a})
-
--- | The profile name of a room.
-rdProfileName :: Lens' RoomData (Maybe Text)
-rdProfileName = lens _rdProfileName (\ s a -> s{_rdProfileName = a})
-
--- | The ARN of a room.
-rdRoomARN :: Lens' RoomData (Maybe Text)
-rdRoomARN = lens _rdRoomARN (\ s a -> s{_rdRoomARN = a})
-
--- | The name of a room.
-rdRoomName :: Lens' RoomData (Maybe Text)
-rdRoomName = lens _rdRoomName (\ s a -> s{_rdRoomName = a})
-
--- | The description of a room.
-rdDescription :: Lens' RoomData (Maybe Text)
-rdDescription = lens _rdDescription (\ s a -> s{_rdDescription = a})
-
-instance FromJSON RoomData where
-        parseJSON
-          = withObject "RoomData"
-              (\ x ->
-                 RoomData' <$>
-                   (x .:? "ProfileArn") <*> (x .:? "ProviderCalendarId")
-                     <*> (x .:? "ProfileName")
-                     <*> (x .:? "RoomArn")
-                     <*> (x .:? "RoomName")
-                     <*> (x .:? "Description"))
-
-instance Hashable RoomData where
-
-instance NFData RoomData where
-
--- | A skill parameter associated with a room.
---
---
---
--- /See:/ 'roomSkillParameter' smart constructor.
-data RoomSkillParameter = RoomSkillParameter'
-  { _rspParameterKey   :: !Text
-  , _rspParameterValue :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RoomSkillParameter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rspParameterKey' - The parameter key of a room skill parameter. ParameterKey is an enumerated type that only takes “DEFAULT” or “SCOPE” as valid values.
---
--- * 'rspParameterValue' - The parameter value of a room skill parameter.
-roomSkillParameter
-    :: Text -- ^ 'rspParameterKey'
-    -> Text -- ^ 'rspParameterValue'
-    -> RoomSkillParameter
-roomSkillParameter pParameterKey_ pParameterValue_ =
-  RoomSkillParameter'
-    {_rspParameterKey = pParameterKey_, _rspParameterValue = pParameterValue_}
-
-
--- | The parameter key of a room skill parameter. ParameterKey is an enumerated type that only takes “DEFAULT” or “SCOPE” as valid values.
-rspParameterKey :: Lens' RoomSkillParameter Text
-rspParameterKey = lens _rspParameterKey (\ s a -> s{_rspParameterKey = a})
-
--- | The parameter value of a room skill parameter.
-rspParameterValue :: Lens' RoomSkillParameter Text
-rspParameterValue = lens _rspParameterValue (\ s a -> s{_rspParameterValue = a})
-
-instance FromJSON RoomSkillParameter where
-        parseJSON
-          = withObject "RoomSkillParameter"
-              (\ x ->
-                 RoomSkillParameter' <$>
-                   (x .: "ParameterKey") <*> (x .: "ParameterValue"))
-
-instance Hashable RoomSkillParameter where
-
-instance NFData RoomSkillParameter where
-
-instance ToJSON RoomSkillParameter where
-        toJSON RoomSkillParameter'{..}
-          = object
-              (catMaybes
-                 [Just ("ParameterKey" .= _rspParameterKey),
-                  Just ("ParameterValue" .= _rspParameterValue)])
-
--- | A skill group with attributes.
---
---
---
--- /See:/ 'skillGroup' smart constructor.
-data SkillGroup = SkillGroup'
-  { _sgSkillGroupARN  :: !(Maybe Text)
-  , _sgDescription    :: !(Maybe Text)
-  , _sgSkillGroupName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SkillGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sgSkillGroupARN' - The ARN of a skill group.
---
--- * 'sgDescription' - The description of a skill group.
---
--- * 'sgSkillGroupName' - The name of a skill group.
-skillGroup
-    :: SkillGroup
-skillGroup =
-  SkillGroup'
-    { _sgSkillGroupARN = Nothing
-    , _sgDescription = Nothing
-    , _sgSkillGroupName = Nothing
-    }
-
-
--- | The ARN of a skill group.
-sgSkillGroupARN :: Lens' SkillGroup (Maybe Text)
-sgSkillGroupARN = lens _sgSkillGroupARN (\ s a -> s{_sgSkillGroupARN = a})
-
--- | The description of a skill group.
-sgDescription :: Lens' SkillGroup (Maybe Text)
-sgDescription = lens _sgDescription (\ s a -> s{_sgDescription = a})
-
--- | The name of a skill group.
-sgSkillGroupName :: Lens' SkillGroup (Maybe Text)
-sgSkillGroupName = lens _sgSkillGroupName (\ s a -> s{_sgSkillGroupName = a})
-
-instance FromJSON SkillGroup where
-        parseJSON
-          = withObject "SkillGroup"
-              (\ x ->
-                 SkillGroup' <$>
-                   (x .:? "SkillGroupArn") <*> (x .:? "Description") <*>
-                     (x .:? "SkillGroupName"))
-
-instance Hashable SkillGroup where
-
-instance NFData SkillGroup where
-
--- | The attributes of a skill group.
---
---
---
--- /See:/ 'skillGroupData' smart constructor.
-data SkillGroupData = SkillGroupData'
-  { _sgdSkillGroupARN  :: !(Maybe Text)
-  , _sgdDescription    :: !(Maybe Text)
-  , _sgdSkillGroupName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SkillGroupData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sgdSkillGroupARN' - The skill group ARN of a skill group.
---
--- * 'sgdDescription' - The description of a skill group.
---
--- * 'sgdSkillGroupName' - The skill group name of a skill group.
-skillGroupData
-    :: SkillGroupData
-skillGroupData =
-  SkillGroupData'
-    { _sgdSkillGroupARN = Nothing
-    , _sgdDescription = Nothing
-    , _sgdSkillGroupName = Nothing
-    }
-
-
--- | The skill group ARN of a skill group.
-sgdSkillGroupARN :: Lens' SkillGroupData (Maybe Text)
-sgdSkillGroupARN = lens _sgdSkillGroupARN (\ s a -> s{_sgdSkillGroupARN = a})
-
--- | The description of a skill group.
-sgdDescription :: Lens' SkillGroupData (Maybe Text)
-sgdDescription = lens _sgdDescription (\ s a -> s{_sgdDescription = a})
-
--- | The skill group name of a skill group.
-sgdSkillGroupName :: Lens' SkillGroupData (Maybe Text)
-sgdSkillGroupName = lens _sgdSkillGroupName (\ s a -> s{_sgdSkillGroupName = a})
-
-instance FromJSON SkillGroupData where
-        parseJSON
-          = withObject "SkillGroupData"
-              (\ x ->
-                 SkillGroupData' <$>
-                   (x .:? "SkillGroupArn") <*> (x .:? "Description") <*>
-                     (x .:? "SkillGroupName"))
-
-instance Hashable SkillGroupData where
-
-instance NFData SkillGroupData where
-
--- | The summary of skills.
---
---
---
--- /See:/ 'skillSummary' smart constructor.
-data SkillSummary = SkillSummary'
-  { _ssSkillId         :: !(Maybe Text)
-  , _ssSupportsLinking :: !(Maybe Bool)
-  , _ssSkillName       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SkillSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssSkillId' - The ARN of the skill summary.
---
--- * 'ssSupportsLinking' - Linking support for a skill.
---
--- * 'ssSkillName' - The name of the skill.
-skillSummary
-    :: SkillSummary
-skillSummary =
-  SkillSummary'
-    {_ssSkillId = Nothing, _ssSupportsLinking = Nothing, _ssSkillName = Nothing}
-
-
--- | The ARN of the skill summary.
-ssSkillId :: Lens' SkillSummary (Maybe Text)
-ssSkillId = lens _ssSkillId (\ s a -> s{_ssSkillId = a})
-
--- | Linking support for a skill.
-ssSupportsLinking :: Lens' SkillSummary (Maybe Bool)
-ssSupportsLinking = lens _ssSupportsLinking (\ s a -> s{_ssSupportsLinking = a})
-
--- | The name of the skill.
-ssSkillName :: Lens' SkillSummary (Maybe Text)
-ssSkillName = lens _ssSkillName (\ s a -> s{_ssSkillName = a})
-
-instance FromJSON SkillSummary where
-        parseJSON
-          = withObject "SkillSummary"
-              (\ x ->
-                 SkillSummary' <$>
-                   (x .:? "SkillId") <*> (x .:? "SupportsLinking") <*>
-                     (x .:? "SkillName"))
-
-instance Hashable SkillSummary where
-
-instance NFData SkillSummary where
-
--- | An object representing a sort criteria.
---
---
---
--- /See:/ 'sort' smart constructor.
-data Sort = Sort'
-  { _sKey   :: !Text
-  , _sValue :: !SortValue
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Sort' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sKey' - The sort key of a sort object.
---
--- * 'sValue' - The sort value of a sort object.
-sort
-    :: Text -- ^ 'sKey'
-    -> SortValue -- ^ 'sValue'
-    -> Sort
-sort pKey_ pValue_ = Sort' {_sKey = pKey_, _sValue = pValue_}
-
-
--- | The sort key of a sort object.
-sKey :: Lens' Sort Text
-sKey = lens _sKey (\ s a -> s{_sKey = a})
-
--- | The sort value of a sort object.
-sValue :: Lens' Sort SortValue
-sValue = lens _sValue (\ s a -> s{_sValue = a})
-
-instance Hashable Sort where
-
-instance NFData Sort where
-
-instance ToJSON Sort where
-        toJSON Sort'{..}
-          = object
-              (catMaybes
-                 [Just ("Key" .= _sKey), Just ("Value" .= _sValue)])
-
--- | A key-value pair that can be associated with a resource.
---
---
---
--- /See:/ 'tag' smart constructor.
-data Tag = Tag'
-  { _tagValue :: !(Maybe Text)
-  , _tagKey   :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Tag' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tagValue' - The value of a tag. Tag values are case-sensitive and can be null.
---
--- * 'tagKey' - The key of a tag. Tag keys are case-sensitive.
-tag
-    :: Tag
-tag = Tag' {_tagValue = Nothing, _tagKey = Nothing}
-
-
--- | The value of a tag. Tag values are case-sensitive and can be null.
-tagValue :: Lens' Tag (Maybe Text)
-tagValue = lens _tagValue (\ s a -> s{_tagValue = a})
-
--- | The key of a tag. Tag keys are case-sensitive.
-tagKey :: Lens' Tag (Maybe Text)
-tagKey = lens _tagKey (\ s a -> s{_tagKey = a})
-
-instance FromJSON Tag where
-        parseJSON
-          = withObject "Tag"
-              (\ x -> Tag' <$> (x .:? "Value") <*> (x .:? "Key"))
-
-instance Hashable Tag where
-
-instance NFData Tag where
-
-instance ToJSON Tag where
-        toJSON Tag'{..}
-          = object
-              (catMaybes
-                 [("Value" .=) <$> _tagValue, ("Key" .=) <$> _tagKey])
-
--- | Information related to a user.
---
---
---
--- /See:/ 'userData' smart constructor.
-data UserData = UserData'
-  { _udEmail            :: !(Maybe Text)
-  , _udLastName         :: !(Maybe Text)
-  , _udEnrollmentId     :: !(Maybe Text)
-  , _udUserARN          :: !(Maybe Text)
-  , _udFirstName        :: !(Maybe Text)
-  , _udEnrollmentStatus :: !(Maybe EnrollmentStatus)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UserData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udEmail' - The email of a user.
---
--- * 'udLastName' - The last name of a user.
---
--- * 'udEnrollmentId' - The enrollment ARN of a user.
---
--- * 'udUserARN' - The ARN of a user.
---
--- * 'udFirstName' - The first name of a user.
---
--- * 'udEnrollmentStatus' - The enrollment status of a user.
-userData
-    :: UserData
-userData =
-  UserData'
-    { _udEmail = Nothing
-    , _udLastName = Nothing
-    , _udEnrollmentId = Nothing
-    , _udUserARN = Nothing
-    , _udFirstName = Nothing
-    , _udEnrollmentStatus = Nothing
-    }
-
-
--- | The email of a user.
-udEmail :: Lens' UserData (Maybe Text)
-udEmail = lens _udEmail (\ s a -> s{_udEmail = a})
-
--- | The last name of a user.
-udLastName :: Lens' UserData (Maybe Text)
-udLastName = lens _udLastName (\ s a -> s{_udLastName = a})
-
--- | The enrollment ARN of a user.
-udEnrollmentId :: Lens' UserData (Maybe Text)
-udEnrollmentId = lens _udEnrollmentId (\ s a -> s{_udEnrollmentId = a})
-
--- | The ARN of a user.
-udUserARN :: Lens' UserData (Maybe Text)
-udUserARN = lens _udUserARN (\ s a -> s{_udUserARN = a})
-
--- | The first name of a user.
-udFirstName :: Lens' UserData (Maybe Text)
-udFirstName = lens _udFirstName (\ s a -> s{_udFirstName = a})
-
--- | The enrollment status of a user.
-udEnrollmentStatus :: Lens' UserData (Maybe EnrollmentStatus)
-udEnrollmentStatus = lens _udEnrollmentStatus (\ s a -> s{_udEnrollmentStatus = a})
-
-instance FromJSON UserData where
-        parseJSON
-          = withObject "UserData"
-              (\ x ->
-                 UserData' <$>
-                   (x .:? "Email") <*> (x .:? "LastName") <*>
-                     (x .:? "EnrollmentId")
-                     <*> (x .:? "UserArn")
-                     <*> (x .:? "FirstName")
-                     <*> (x .:? "EnrollmentStatus"))
-
-instance Hashable UserData where
-
-instance NFData UserData where
diff --git a/gen/Network/AWS/AlexaBusiness/Types/Sum.hs b/gen/Network/AWS/AlexaBusiness/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/Types/Sum.hs
+++ /dev/null
@@ -1,335 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AlexaBusiness.Types.Sum
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.AlexaBusiness.Types.Sum where
-
-import Network.AWS.Prelude
-
-data ConnectionStatus
-  = Offline
-  | Online
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ConnectionStatus where
-    parser = takeLowerText >>= \case
-        "offline" -> pure Offline
-        "online" -> pure Online
-        e -> fromTextError $ "Failure parsing ConnectionStatus from value: '" <> e
-           <> "'. Accepted values: offline, online"
-
-instance ToText ConnectionStatus where
-    toText = \case
-        Offline -> "OFFLINE"
-        Online -> "ONLINE"
-
-instance Hashable     ConnectionStatus
-instance NFData       ConnectionStatus
-instance ToByteString ConnectionStatus
-instance ToQuery      ConnectionStatus
-instance ToHeader     ConnectionStatus
-
-instance FromJSON ConnectionStatus where
-    parseJSON = parseJSONText "ConnectionStatus"
-
-data DeviceEventType
-  = ConnectionStatus
-  | DeviceStatus
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText DeviceEventType where
-    parser = takeLowerText >>= \case
-        "connection_status" -> pure ConnectionStatus
-        "device_status" -> pure DeviceStatus
-        e -> fromTextError $ "Failure parsing DeviceEventType from value: '" <> e
-           <> "'. Accepted values: connection_status, device_status"
-
-instance ToText DeviceEventType where
-    toText = \case
-        ConnectionStatus -> "CONNECTION_STATUS"
-        DeviceStatus -> "DEVICE_STATUS"
-
-instance Hashable     DeviceEventType
-instance NFData       DeviceEventType
-instance ToByteString DeviceEventType
-instance ToQuery      DeviceEventType
-instance ToHeader     DeviceEventType
-
-instance ToJSON DeviceEventType where
-    toJSON = toJSONText
-
-instance FromJSON DeviceEventType where
-    parseJSON = parseJSONText "DeviceEventType"
-
-data DeviceStatus
-  = Deregistered
-  | Pending
-  | Ready
-  | WasOffline
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText DeviceStatus where
-    parser = takeLowerText >>= \case
-        "deregistered" -> pure Deregistered
-        "pending" -> pure Pending
-        "ready" -> pure Ready
-        "was_offline" -> pure WasOffline
-        e -> fromTextError $ "Failure parsing DeviceStatus from value: '" <> e
-           <> "'. Accepted values: deregistered, pending, ready, was_offline"
-
-instance ToText DeviceStatus where
-    toText = \case
-        Deregistered -> "DEREGISTERED"
-        Pending -> "PENDING"
-        Ready -> "READY"
-        WasOffline -> "WAS_OFFLINE"
-
-instance Hashable     DeviceStatus
-instance NFData       DeviceStatus
-instance ToByteString DeviceStatus
-instance ToQuery      DeviceStatus
-instance ToHeader     DeviceStatus
-
-instance FromJSON DeviceStatus where
-    parseJSON = parseJSONText "DeviceStatus"
-
-data DeviceStatusDetailCode
-  = DeviceSoftwareUpdateNeeded
-  | DeviceWasOffline
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText DeviceStatusDetailCode where
-    parser = takeLowerText >>= \case
-        "device_software_update_needed" -> pure DeviceSoftwareUpdateNeeded
-        "device_was_offline" -> pure DeviceWasOffline
-        e -> fromTextError $ "Failure parsing DeviceStatusDetailCode from value: '" <> e
-           <> "'. Accepted values: device_software_update_needed, device_was_offline"
-
-instance ToText DeviceStatusDetailCode where
-    toText = \case
-        DeviceSoftwareUpdateNeeded -> "DEVICE_SOFTWARE_UPDATE_NEEDED"
-        DeviceWasOffline -> "DEVICE_WAS_OFFLINE"
-
-instance Hashable     DeviceStatusDetailCode
-instance NFData       DeviceStatusDetailCode
-instance ToByteString DeviceStatusDetailCode
-instance ToQuery      DeviceStatusDetailCode
-instance ToHeader     DeviceStatusDetailCode
-
-instance FromJSON DeviceStatusDetailCode where
-    parseJSON = parseJSONText "DeviceStatusDetailCode"
-
-data DistanceUnit
-  = Imperial
-  | Metric
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText DistanceUnit where
-    parser = takeLowerText >>= \case
-        "imperial" -> pure Imperial
-        "metric" -> pure Metric
-        e -> fromTextError $ "Failure parsing DistanceUnit from value: '" <> e
-           <> "'. Accepted values: imperial, metric"
-
-instance ToText DistanceUnit where
-    toText = \case
-        Imperial -> "IMPERIAL"
-        Metric -> "METRIC"
-
-instance Hashable     DistanceUnit
-instance NFData       DistanceUnit
-instance ToByteString DistanceUnit
-instance ToQuery      DistanceUnit
-instance ToHeader     DistanceUnit
-
-instance ToJSON DistanceUnit where
-    toJSON = toJSONText
-
-instance FromJSON DistanceUnit where
-    parseJSON = parseJSONText "DistanceUnit"
-
-data EnrollmentStatus
-  = ESDeregistering
-  | ESDisassociating
-  | ESInitialized
-  | ESPending
-  | ESRegistered
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText EnrollmentStatus where
-    parser = takeLowerText >>= \case
-        "deregistering" -> pure ESDeregistering
-        "disassociating" -> pure ESDisassociating
-        "initialized" -> pure ESInitialized
-        "pending" -> pure ESPending
-        "registered" -> pure ESRegistered
-        e -> fromTextError $ "Failure parsing EnrollmentStatus from value: '" <> e
-           <> "'. Accepted values: deregistering, disassociating, initialized, pending, registered"
-
-instance ToText EnrollmentStatus where
-    toText = \case
-        ESDeregistering -> "DEREGISTERING"
-        ESDisassociating -> "DISASSOCIATING"
-        ESInitialized -> "INITIALIZED"
-        ESPending -> "PENDING"
-        ESRegistered -> "REGISTERED"
-
-instance Hashable     EnrollmentStatus
-instance NFData       EnrollmentStatus
-instance ToByteString EnrollmentStatus
-instance ToQuery      EnrollmentStatus
-instance ToHeader     EnrollmentStatus
-
-instance FromJSON EnrollmentStatus where
-    parseJSON = parseJSONText "EnrollmentStatus"
-
-data Feature
-  = All
-  | Bluetooth
-  | Lists
-  | Notifications
-  | Skills
-  | Volume
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText Feature where
-    parser = takeLowerText >>= \case
-        "all" -> pure All
-        "bluetooth" -> pure Bluetooth
-        "lists" -> pure Lists
-        "notifications" -> pure Notifications
-        "skills" -> pure Skills
-        "volume" -> pure Volume
-        e -> fromTextError $ "Failure parsing Feature from value: '" <> e
-           <> "'. Accepted values: all, bluetooth, lists, notifications, skills, volume"
-
-instance ToText Feature where
-    toText = \case
-        All -> "ALL"
-        Bluetooth -> "BLUETOOTH"
-        Lists -> "LISTS"
-        Notifications -> "NOTIFICATIONS"
-        Skills -> "SKILLS"
-        Volume -> "VOLUME"
-
-instance Hashable     Feature
-instance NFData       Feature
-instance ToByteString Feature
-instance ToQuery      Feature
-instance ToHeader     Feature
-
-instance ToJSON Feature where
-    toJSON = toJSONText
-
-data SortValue
-  = Asc
-  | Desc
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText SortValue where
-    parser = takeLowerText >>= \case
-        "asc" -> pure Asc
-        "desc" -> pure Desc
-        e -> fromTextError $ "Failure parsing SortValue from value: '" <> e
-           <> "'. Accepted values: asc, desc"
-
-instance ToText SortValue where
-    toText = \case
-        Asc -> "ASC"
-        Desc -> "DESC"
-
-instance Hashable     SortValue
-instance NFData       SortValue
-instance ToByteString SortValue
-instance ToQuery      SortValue
-instance ToHeader     SortValue
-
-instance ToJSON SortValue where
-    toJSON = toJSONText
-
-data TemperatureUnit
-  = Celsius
-  | Fahrenheit
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText TemperatureUnit where
-    parser = takeLowerText >>= \case
-        "celsius" -> pure Celsius
-        "fahrenheit" -> pure Fahrenheit
-        e -> fromTextError $ "Failure parsing TemperatureUnit from value: '" <> e
-           <> "'. Accepted values: celsius, fahrenheit"
-
-instance ToText TemperatureUnit where
-    toText = \case
-        Celsius -> "CELSIUS"
-        Fahrenheit -> "FAHRENHEIT"
-
-instance Hashable     TemperatureUnit
-instance NFData       TemperatureUnit
-instance ToByteString TemperatureUnit
-instance ToQuery      TemperatureUnit
-instance ToHeader     TemperatureUnit
-
-instance ToJSON TemperatureUnit where
-    toJSON = toJSONText
-
-instance FromJSON TemperatureUnit where
-    parseJSON = parseJSONText "TemperatureUnit"
-
-data WakeWord
-  = Alexa
-  | Amazon
-  | Computer
-  | Echo
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText WakeWord where
-    parser = takeLowerText >>= \case
-        "alexa" -> pure Alexa
-        "amazon" -> pure Amazon
-        "computer" -> pure Computer
-        "echo" -> pure Echo
-        e -> fromTextError $ "Failure parsing WakeWord from value: '" <> e
-           <> "'. Accepted values: alexa, amazon, computer, echo"
-
-instance ToText WakeWord where
-    toText = \case
-        Alexa -> "ALEXA"
-        Amazon -> "AMAZON"
-        Computer -> "COMPUTER"
-        Echo -> "ECHO"
-
-instance Hashable     WakeWord
-instance NFData       WakeWord
-instance ToByteString WakeWord
-instance ToQuery      WakeWord
-instance ToHeader     WakeWord
-
-instance ToJSON WakeWord where
-    toJSON = toJSONText
-
-instance FromJSON WakeWord where
-    parseJSON = parseJSONText "WakeWord"
diff --git a/gen/Network/AWS/AlexaBusiness/UntagResource.hs b/gen/Network/AWS/AlexaBusiness/UntagResource.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/UntagResource.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# 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.AlexaBusiness.UntagResource
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Removes metadata tags from a specified resource.
---
---
-module Network.AWS.AlexaBusiness.UntagResource
-    (
-    -- * Creating a Request
-      untagResource
-    , UntagResource
-    -- * Request Lenses
-    , urARN
-    , urTagKeys
-
-    -- * Destructuring the Response
-    , untagResourceResponse
-    , UntagResourceResponse
-    -- * Response Lenses
-    , ursResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'untagResource' smart constructor.
-data UntagResource = UntagResource'
-  { _urARN     :: !Text
-  , _urTagKeys :: ![Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UntagResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urARN' - The ARN of the resource from which to remove metadata tags. Required.
---
--- * 'urTagKeys' - The tags to be removed from the specified resource. Do not provide system tags. Required.
-untagResource
-    :: Text -- ^ 'urARN'
-    -> UntagResource
-untagResource pARN_ = UntagResource' {_urARN = pARN_, _urTagKeys = mempty}
-
-
--- | The ARN of the resource from which to remove metadata tags. Required.
-urARN :: Lens' UntagResource Text
-urARN = lens _urARN (\ s a -> s{_urARN = a})
-
--- | The tags to be removed from the specified resource. Do not provide system tags. Required.
-urTagKeys :: Lens' UntagResource [Text]
-urTagKeys = lens _urTagKeys (\ s a -> s{_urTagKeys = a}) . _Coerce
-
-instance AWSRequest UntagResource where
-        type Rs UntagResource = UntagResourceResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UntagResourceResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UntagResource where
-
-instance NFData UntagResource where
-
-instance ToHeaders UntagResource where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.UntagResource" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UntagResource where
-        toJSON UntagResource'{..}
-          = object
-              (catMaybes
-                 [Just ("Arn" .= _urARN),
-                  Just ("TagKeys" .= _urTagKeys)])
-
-instance ToPath UntagResource where
-        toPath = const "/"
-
-instance ToQuery UntagResource where
-        toQuery = const mempty
-
--- | /See:/ 'untagResourceResponse' smart constructor.
-newtype UntagResourceResponse = UntagResourceResponse'
-  { _ursResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UntagResourceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ursResponseStatus' - -- | The response status code.
-untagResourceResponse
-    :: Int -- ^ 'ursResponseStatus'
-    -> UntagResourceResponse
-untagResourceResponse pResponseStatus_ =
-  UntagResourceResponse' {_ursResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-ursResponseStatus :: Lens' UntagResourceResponse Int
-ursResponseStatus = lens _ursResponseStatus (\ s a -> s{_ursResponseStatus = a})
-
-instance NFData UntagResourceResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/UpdateAddressBook.hs b/gen/Network/AWS/AlexaBusiness/UpdateAddressBook.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/UpdateAddressBook.hs
+++ /dev/null
@@ -1,145 +0,0 @@
-{-# 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.AlexaBusiness.UpdateAddressBook
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates address book details by the address book ARN.
---
---
-module Network.AWS.AlexaBusiness.UpdateAddressBook
-    (
-    -- * Creating a Request
-      updateAddressBook
-    , UpdateAddressBook
-    -- * Request Lenses
-    , uabName
-    , uabDescription
-    , uabAddressBookARN
-
-    -- * Destructuring the Response
-    , updateAddressBookResponse
-    , UpdateAddressBookResponse
-    -- * Response Lenses
-    , uabrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateAddressBook' smart constructor.
-data UpdateAddressBook = UpdateAddressBook'
-  { _uabName           :: !(Maybe Text)
-  , _uabDescription    :: !(Maybe Text)
-  , _uabAddressBookARN :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateAddressBook' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uabName' - The updated name of the room.
---
--- * 'uabDescription' - The updated description of the room.
---
--- * 'uabAddressBookARN' - The ARN of the room to update.
-updateAddressBook
-    :: Text -- ^ 'uabAddressBookARN'
-    -> UpdateAddressBook
-updateAddressBook pAddressBookARN_ =
-  UpdateAddressBook'
-    { _uabName = Nothing
-    , _uabDescription = Nothing
-    , _uabAddressBookARN = pAddressBookARN_
-    }
-
-
--- | The updated name of the room.
-uabName :: Lens' UpdateAddressBook (Maybe Text)
-uabName = lens _uabName (\ s a -> s{_uabName = a})
-
--- | The updated description of the room.
-uabDescription :: Lens' UpdateAddressBook (Maybe Text)
-uabDescription = lens _uabDescription (\ s a -> s{_uabDescription = a})
-
--- | The ARN of the room to update.
-uabAddressBookARN :: Lens' UpdateAddressBook Text
-uabAddressBookARN = lens _uabAddressBookARN (\ s a -> s{_uabAddressBookARN = a})
-
-instance AWSRequest UpdateAddressBook where
-        type Rs UpdateAddressBook = UpdateAddressBookResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateAddressBookResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateAddressBook where
-
-instance NFData UpdateAddressBook where
-
-instance ToHeaders UpdateAddressBook where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.UpdateAddressBook" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateAddressBook where
-        toJSON UpdateAddressBook'{..}
-          = object
-              (catMaybes
-                 [("Name" .=) <$> _uabName,
-                  ("Description" .=) <$> _uabDescription,
-                  Just ("AddressBookArn" .= _uabAddressBookARN)])
-
-instance ToPath UpdateAddressBook where
-        toPath = const "/"
-
-instance ToQuery UpdateAddressBook where
-        toQuery = const mempty
-
--- | /See:/ 'updateAddressBookResponse' smart constructor.
-newtype UpdateAddressBookResponse = UpdateAddressBookResponse'
-  { _uabrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateAddressBookResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uabrsResponseStatus' - -- | The response status code.
-updateAddressBookResponse
-    :: Int -- ^ 'uabrsResponseStatus'
-    -> UpdateAddressBookResponse
-updateAddressBookResponse pResponseStatus_ =
-  UpdateAddressBookResponse' {_uabrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-uabrsResponseStatus :: Lens' UpdateAddressBookResponse Int
-uabrsResponseStatus = lens _uabrsResponseStatus (\ s a -> s{_uabrsResponseStatus = a})
-
-instance NFData UpdateAddressBookResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/UpdateContact.hs b/gen/Network/AWS/AlexaBusiness/UpdateContact.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/UpdateContact.hs
+++ /dev/null
@@ -1,165 +0,0 @@
-{-# 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.AlexaBusiness.UpdateContact
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates the contact details by the contact ARN.
---
---
-module Network.AWS.AlexaBusiness.UpdateContact
-    (
-    -- * Creating a Request
-      updateContact
-    , UpdateContact
-    -- * Request Lenses
-    , ucLastName
-    , ucPhoneNumber
-    , ucFirstName
-    , ucDisplayName
-    , ucContactARN
-
-    -- * Destructuring the Response
-    , updateContactResponse
-    , UpdateContactResponse
-    -- * Response Lenses
-    , ucrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateContact' smart constructor.
-data UpdateContact = UpdateContact'
-  { _ucLastName    :: !(Maybe Text)
-  , _ucPhoneNumber :: !(Maybe Text)
-  , _ucFirstName   :: !(Maybe Text)
-  , _ucDisplayName :: !(Maybe Text)
-  , _ucContactARN  :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateContact' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucLastName' - The updated last name of the contact.
---
--- * 'ucPhoneNumber' - The updated phone number of the contact.
---
--- * 'ucFirstName' - The updated first name of the contact.
---
--- * 'ucDisplayName' - The updated display name of the contact.
---
--- * 'ucContactARN' - The ARN of the contact to update.
-updateContact
-    :: Text -- ^ 'ucContactARN'
-    -> UpdateContact
-updateContact pContactARN_ =
-  UpdateContact'
-    { _ucLastName = Nothing
-    , _ucPhoneNumber = Nothing
-    , _ucFirstName = Nothing
-    , _ucDisplayName = Nothing
-    , _ucContactARN = pContactARN_
-    }
-
-
--- | The updated last name of the contact.
-ucLastName :: Lens' UpdateContact (Maybe Text)
-ucLastName = lens _ucLastName (\ s a -> s{_ucLastName = a})
-
--- | The updated phone number of the contact.
-ucPhoneNumber :: Lens' UpdateContact (Maybe Text)
-ucPhoneNumber = lens _ucPhoneNumber (\ s a -> s{_ucPhoneNumber = a})
-
--- | The updated first name of the contact.
-ucFirstName :: Lens' UpdateContact (Maybe Text)
-ucFirstName = lens _ucFirstName (\ s a -> s{_ucFirstName = a})
-
--- | The updated display name of the contact.
-ucDisplayName :: Lens' UpdateContact (Maybe Text)
-ucDisplayName = lens _ucDisplayName (\ s a -> s{_ucDisplayName = a})
-
--- | The ARN of the contact to update.
-ucContactARN :: Lens' UpdateContact Text
-ucContactARN = lens _ucContactARN (\ s a -> s{_ucContactARN = a})
-
-instance AWSRequest UpdateContact where
-        type Rs UpdateContact = UpdateContactResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateContactResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateContact where
-
-instance NFData UpdateContact where
-
-instance ToHeaders UpdateContact where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.UpdateContact" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateContact where
-        toJSON UpdateContact'{..}
-          = object
-              (catMaybes
-                 [("LastName" .=) <$> _ucLastName,
-                  ("PhoneNumber" .=) <$> _ucPhoneNumber,
-                  ("FirstName" .=) <$> _ucFirstName,
-                  ("DisplayName" .=) <$> _ucDisplayName,
-                  Just ("ContactArn" .= _ucContactARN)])
-
-instance ToPath UpdateContact where
-        toPath = const "/"
-
-instance ToQuery UpdateContact where
-        toQuery = const mempty
-
--- | /See:/ 'updateContactResponse' smart constructor.
-newtype UpdateContactResponse = UpdateContactResponse'
-  { _ucrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateContactResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucrsResponseStatus' - -- | The response status code.
-updateContactResponse
-    :: Int -- ^ 'ucrsResponseStatus'
-    -> UpdateContactResponse
-updateContactResponse pResponseStatus_ =
-  UpdateContactResponse' {_ucrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-ucrsResponseStatus :: Lens' UpdateContactResponse Int
-ucrsResponseStatus = lens _ucrsResponseStatus (\ s a -> s{_ucrsResponseStatus = a})
-
-instance NFData UpdateContactResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/UpdateDevice.hs b/gen/Network/AWS/AlexaBusiness/UpdateDevice.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/UpdateDevice.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# 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.AlexaBusiness.UpdateDevice
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates the device name by device ARN.
---
---
-module Network.AWS.AlexaBusiness.UpdateDevice
-    (
-    -- * Creating a Request
-      updateDevice
-    , UpdateDevice
-    -- * Request Lenses
-    , udDeviceARN
-    , udDeviceName
-
-    -- * Destructuring the Response
-    , updateDeviceResponse
-    , UpdateDeviceResponse
-    -- * Response Lenses
-    , udrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateDevice' smart constructor.
-data UpdateDevice = UpdateDevice'
-  { _udDeviceARN  :: !(Maybe Text)
-  , _udDeviceName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateDevice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udDeviceARN' - The ARN of the device to update. Required.
---
--- * 'udDeviceName' - The updated device name. Required.
-updateDevice
-    :: UpdateDevice
-updateDevice = UpdateDevice' {_udDeviceARN = Nothing, _udDeviceName = Nothing}
-
-
--- | The ARN of the device to update. Required.
-udDeviceARN :: Lens' UpdateDevice (Maybe Text)
-udDeviceARN = lens _udDeviceARN (\ s a -> s{_udDeviceARN = a})
-
--- | The updated device name. Required.
-udDeviceName :: Lens' UpdateDevice (Maybe Text)
-udDeviceName = lens _udDeviceName (\ s a -> s{_udDeviceName = a})
-
-instance AWSRequest UpdateDevice where
-        type Rs UpdateDevice = UpdateDeviceResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateDeviceResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateDevice where
-
-instance NFData UpdateDevice where
-
-instance ToHeaders UpdateDevice where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.UpdateDevice" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateDevice where
-        toJSON UpdateDevice'{..}
-          = object
-              (catMaybes
-                 [("DeviceArn" .=) <$> _udDeviceARN,
-                  ("DeviceName" .=) <$> _udDeviceName])
-
-instance ToPath UpdateDevice where
-        toPath = const "/"
-
-instance ToQuery UpdateDevice where
-        toQuery = const mempty
-
--- | /See:/ 'updateDeviceResponse' smart constructor.
-newtype UpdateDeviceResponse = UpdateDeviceResponse'
-  { _udrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateDeviceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udrsResponseStatus' - -- | The response status code.
-updateDeviceResponse
-    :: Int -- ^ 'udrsResponseStatus'
-    -> UpdateDeviceResponse
-updateDeviceResponse pResponseStatus_ =
-  UpdateDeviceResponse' {_udrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-udrsResponseStatus :: Lens' UpdateDeviceResponse Int
-udrsResponseStatus = lens _udrsResponseStatus (\ s a -> s{_udrsResponseStatus = a})
-
-instance NFData UpdateDeviceResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/UpdateProfile.hs b/gen/Network/AWS/AlexaBusiness/UpdateProfile.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/UpdateProfile.hs
+++ /dev/null
@@ -1,214 +0,0 @@
-{-# 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.AlexaBusiness.UpdateProfile
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates an existing room profile by room profile ARN.
---
---
-module Network.AWS.AlexaBusiness.UpdateProfile
-    (
-    -- * Creating a Request
-      updateProfile
-    , UpdateProfile
-    -- * Request Lenses
-    , upSetupModeDisabled
-    , upPSTNEnabled
-    , upDistanceUnit
-    , upAddress
-    , upProfileARN
-    , upWakeWord
-    , upProfileName
-    , upTemperatureUnit
-    , upTimezone
-    , upMaxVolumeLimit
-
-    -- * Destructuring the Response
-    , updateProfileResponse
-    , UpdateProfileResponse
-    -- * Response Lenses
-    , uprsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateProfile' smart constructor.
-data UpdateProfile = UpdateProfile'
-  { _upSetupModeDisabled :: !(Maybe Bool)
-  , _upPSTNEnabled       :: !(Maybe Bool)
-  , _upDistanceUnit      :: !(Maybe DistanceUnit)
-  , _upAddress           :: !(Maybe Text)
-  , _upProfileARN        :: !(Maybe Text)
-  , _upWakeWord          :: !(Maybe WakeWord)
-  , _upProfileName       :: !(Maybe Text)
-  , _upTemperatureUnit   :: !(Maybe TemperatureUnit)
-  , _upTimezone          :: !(Maybe Text)
-  , _upMaxVolumeLimit    :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateProfile' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'upSetupModeDisabled' - Whether the setup mode of the profile is enabled.
---
--- * 'upPSTNEnabled' - Whether the PSTN setting of the room profile is enabled.
---
--- * 'upDistanceUnit' - The updated distance unit for the room profile.
---
--- * 'upAddress' - The updated address for the room profile.
---
--- * 'upProfileARN' - The ARN of the room profile to update. Required.
---
--- * 'upWakeWord' - The updated wake word for the room profile.
---
--- * 'upProfileName' - The updated name for the room profile.
---
--- * 'upTemperatureUnit' - The updated temperature unit for the room profile.
---
--- * 'upTimezone' - The updated timezone for the room profile.
---
--- * 'upMaxVolumeLimit' - The updated maximum volume limit for the room profile.
-updateProfile
-    :: UpdateProfile
-updateProfile =
-  UpdateProfile'
-    { _upSetupModeDisabled = Nothing
-    , _upPSTNEnabled = Nothing
-    , _upDistanceUnit = Nothing
-    , _upAddress = Nothing
-    , _upProfileARN = Nothing
-    , _upWakeWord = Nothing
-    , _upProfileName = Nothing
-    , _upTemperatureUnit = Nothing
-    , _upTimezone = Nothing
-    , _upMaxVolumeLimit = Nothing
-    }
-
-
--- | Whether the setup mode of the profile is enabled.
-upSetupModeDisabled :: Lens' UpdateProfile (Maybe Bool)
-upSetupModeDisabled = lens _upSetupModeDisabled (\ s a -> s{_upSetupModeDisabled = a})
-
--- | Whether the PSTN setting of the room profile is enabled.
-upPSTNEnabled :: Lens' UpdateProfile (Maybe Bool)
-upPSTNEnabled = lens _upPSTNEnabled (\ s a -> s{_upPSTNEnabled = a})
-
--- | The updated distance unit for the room profile.
-upDistanceUnit :: Lens' UpdateProfile (Maybe DistanceUnit)
-upDistanceUnit = lens _upDistanceUnit (\ s a -> s{_upDistanceUnit = a})
-
--- | The updated address for the room profile.
-upAddress :: Lens' UpdateProfile (Maybe Text)
-upAddress = lens _upAddress (\ s a -> s{_upAddress = a})
-
--- | The ARN of the room profile to update. Required.
-upProfileARN :: Lens' UpdateProfile (Maybe Text)
-upProfileARN = lens _upProfileARN (\ s a -> s{_upProfileARN = a})
-
--- | The updated wake word for the room profile.
-upWakeWord :: Lens' UpdateProfile (Maybe WakeWord)
-upWakeWord = lens _upWakeWord (\ s a -> s{_upWakeWord = a})
-
--- | The updated name for the room profile.
-upProfileName :: Lens' UpdateProfile (Maybe Text)
-upProfileName = lens _upProfileName (\ s a -> s{_upProfileName = a})
-
--- | The updated temperature unit for the room profile.
-upTemperatureUnit :: Lens' UpdateProfile (Maybe TemperatureUnit)
-upTemperatureUnit = lens _upTemperatureUnit (\ s a -> s{_upTemperatureUnit = a})
-
--- | The updated timezone for the room profile.
-upTimezone :: Lens' UpdateProfile (Maybe Text)
-upTimezone = lens _upTimezone (\ s a -> s{_upTimezone = a})
-
--- | The updated maximum volume limit for the room profile.
-upMaxVolumeLimit :: Lens' UpdateProfile (Maybe Int)
-upMaxVolumeLimit = lens _upMaxVolumeLimit (\ s a -> s{_upMaxVolumeLimit = a})
-
-instance AWSRequest UpdateProfile where
-        type Rs UpdateProfile = UpdateProfileResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateProfileResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateProfile where
-
-instance NFData UpdateProfile where
-
-instance ToHeaders UpdateProfile where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.UpdateProfile" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateProfile where
-        toJSON UpdateProfile'{..}
-          = object
-              (catMaybes
-                 [("SetupModeDisabled" .=) <$> _upSetupModeDisabled,
-                  ("PSTNEnabled" .=) <$> _upPSTNEnabled,
-                  ("DistanceUnit" .=) <$> _upDistanceUnit,
-                  ("Address" .=) <$> _upAddress,
-                  ("ProfileArn" .=) <$> _upProfileARN,
-                  ("WakeWord" .=) <$> _upWakeWord,
-                  ("ProfileName" .=) <$> _upProfileName,
-                  ("TemperatureUnit" .=) <$> _upTemperatureUnit,
-                  ("Timezone" .=) <$> _upTimezone,
-                  ("MaxVolumeLimit" .=) <$> _upMaxVolumeLimit])
-
-instance ToPath UpdateProfile where
-        toPath = const "/"
-
-instance ToQuery UpdateProfile where
-        toQuery = const mempty
-
--- | /See:/ 'updateProfileResponse' smart constructor.
-newtype UpdateProfileResponse = UpdateProfileResponse'
-  { _uprsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateProfileResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uprsResponseStatus' - -- | The response status code.
-updateProfileResponse
-    :: Int -- ^ 'uprsResponseStatus'
-    -> UpdateProfileResponse
-updateProfileResponse pResponseStatus_ =
-  UpdateProfileResponse' {_uprsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-uprsResponseStatus :: Lens' UpdateProfileResponse Int
-uprsResponseStatus = lens _uprsResponseStatus (\ s a -> s{_uprsResponseStatus = a})
-
-instance NFData UpdateProfileResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/UpdateRoom.hs b/gen/Network/AWS/AlexaBusiness/UpdateRoom.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/UpdateRoom.hs
+++ /dev/null
@@ -1,164 +0,0 @@
-{-# 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.AlexaBusiness.UpdateRoom
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates room details by room ARN.
---
---
-module Network.AWS.AlexaBusiness.UpdateRoom
-    (
-    -- * Creating a Request
-      updateRoom
-    , UpdateRoom
-    -- * Request Lenses
-    , urProfileARN
-    , urProviderCalendarId
-    , urRoomARN
-    , urRoomName
-    , urDescription
-
-    -- * Destructuring the Response
-    , updateRoomResponse
-    , UpdateRoomResponse
-    -- * Response Lenses
-    , urrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateRoom' smart constructor.
-data UpdateRoom = UpdateRoom'
-  { _urProfileARN         :: !(Maybe Text)
-  , _urProviderCalendarId :: !(Maybe Text)
-  , _urRoomARN            :: !(Maybe Text)
-  , _urRoomName           :: !(Maybe Text)
-  , _urDescription        :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateRoom' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urProfileARN' - The updated profile ARN for the room.
---
--- * 'urProviderCalendarId' - The updated provider calendar ARN for the room.
---
--- * 'urRoomARN' - The ARN of the room to update.
---
--- * 'urRoomName' - The updated name for the room.
---
--- * 'urDescription' - The updated description for the room.
-updateRoom
-    :: UpdateRoom
-updateRoom =
-  UpdateRoom'
-    { _urProfileARN = Nothing
-    , _urProviderCalendarId = Nothing
-    , _urRoomARN = Nothing
-    , _urRoomName = Nothing
-    , _urDescription = Nothing
-    }
-
-
--- | The updated profile ARN for the room.
-urProfileARN :: Lens' UpdateRoom (Maybe Text)
-urProfileARN = lens _urProfileARN (\ s a -> s{_urProfileARN = a})
-
--- | The updated provider calendar ARN for the room.
-urProviderCalendarId :: Lens' UpdateRoom (Maybe Text)
-urProviderCalendarId = lens _urProviderCalendarId (\ s a -> s{_urProviderCalendarId = a})
-
--- | The ARN of the room to update.
-urRoomARN :: Lens' UpdateRoom (Maybe Text)
-urRoomARN = lens _urRoomARN (\ s a -> s{_urRoomARN = a})
-
--- | The updated name for the room.
-urRoomName :: Lens' UpdateRoom (Maybe Text)
-urRoomName = lens _urRoomName (\ s a -> s{_urRoomName = a})
-
--- | The updated description for the room.
-urDescription :: Lens' UpdateRoom (Maybe Text)
-urDescription = lens _urDescription (\ s a -> s{_urDescription = a})
-
-instance AWSRequest UpdateRoom where
-        type Rs UpdateRoom = UpdateRoomResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateRoomResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateRoom where
-
-instance NFData UpdateRoom where
-
-instance ToHeaders UpdateRoom where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.UpdateRoom" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateRoom where
-        toJSON UpdateRoom'{..}
-          = object
-              (catMaybes
-                 [("ProfileArn" .=) <$> _urProfileARN,
-                  ("ProviderCalendarId" .=) <$> _urProviderCalendarId,
-                  ("RoomArn" .=) <$> _urRoomARN,
-                  ("RoomName" .=) <$> _urRoomName,
-                  ("Description" .=) <$> _urDescription])
-
-instance ToPath UpdateRoom where
-        toPath = const "/"
-
-instance ToQuery UpdateRoom where
-        toQuery = const mempty
-
--- | /See:/ 'updateRoomResponse' smart constructor.
-newtype UpdateRoomResponse = UpdateRoomResponse'
-  { _urrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateRoomResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urrsResponseStatus' - -- | The response status code.
-updateRoomResponse
-    :: Int -- ^ 'urrsResponseStatus'
-    -> UpdateRoomResponse
-updateRoomResponse pResponseStatus_ =
-  UpdateRoomResponse' {_urrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-urrsResponseStatus :: Lens' UpdateRoomResponse Int
-urrsResponseStatus = lens _urrsResponseStatus (\ s a -> s{_urrsResponseStatus = a})
-
-instance NFData UpdateRoomResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/UpdateSkillGroup.hs b/gen/Network/AWS/AlexaBusiness/UpdateSkillGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/UpdateSkillGroup.hs
+++ /dev/null
@@ -1,144 +0,0 @@
-{-# 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.AlexaBusiness.UpdateSkillGroup
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates skill group details by skill group ARN.
---
---
-module Network.AWS.AlexaBusiness.UpdateSkillGroup
-    (
-    -- * Creating a Request
-      updateSkillGroup
-    , UpdateSkillGroup
-    -- * Request Lenses
-    , usgSkillGroupARN
-    , usgDescription
-    , usgSkillGroupName
-
-    -- * Destructuring the Response
-    , updateSkillGroupResponse
-    , UpdateSkillGroupResponse
-    -- * Response Lenses
-    , usgrsResponseStatus
-    ) where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.AlexaBusiness.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateSkillGroup' smart constructor.
-data UpdateSkillGroup = UpdateSkillGroup'
-  { _usgSkillGroupARN  :: !(Maybe Text)
-  , _usgDescription    :: !(Maybe Text)
-  , _usgSkillGroupName :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateSkillGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usgSkillGroupARN' - The ARN of the skill group to update.
---
--- * 'usgDescription' - The updated description for the skill group.
---
--- * 'usgSkillGroupName' - The updated name for the skill group.
-updateSkillGroup
-    :: UpdateSkillGroup
-updateSkillGroup =
-  UpdateSkillGroup'
-    { _usgSkillGroupARN = Nothing
-    , _usgDescription = Nothing
-    , _usgSkillGroupName = Nothing
-    }
-
-
--- | The ARN of the skill group to update.
-usgSkillGroupARN :: Lens' UpdateSkillGroup (Maybe Text)
-usgSkillGroupARN = lens _usgSkillGroupARN (\ s a -> s{_usgSkillGroupARN = a})
-
--- | The updated description for the skill group.
-usgDescription :: Lens' UpdateSkillGroup (Maybe Text)
-usgDescription = lens _usgDescription (\ s a -> s{_usgDescription = a})
-
--- | The updated name for the skill group.
-usgSkillGroupName :: Lens' UpdateSkillGroup (Maybe Text)
-usgSkillGroupName = lens _usgSkillGroupName (\ s a -> s{_usgSkillGroupName = a})
-
-instance AWSRequest UpdateSkillGroup where
-        type Rs UpdateSkillGroup = UpdateSkillGroupResponse
-        request = postJSON alexaBusiness
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateSkillGroupResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateSkillGroup where
-
-instance NFData UpdateSkillGroup where
-
-instance ToHeaders UpdateSkillGroup where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AlexaForBusiness.UpdateSkillGroup" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateSkillGroup where
-        toJSON UpdateSkillGroup'{..}
-          = object
-              (catMaybes
-                 [("SkillGroupArn" .=) <$> _usgSkillGroupARN,
-                  ("Description" .=) <$> _usgDescription,
-                  ("SkillGroupName" .=) <$> _usgSkillGroupName])
-
-instance ToPath UpdateSkillGroup where
-        toPath = const "/"
-
-instance ToQuery UpdateSkillGroup where
-        toQuery = const mempty
-
--- | /See:/ 'updateSkillGroupResponse' smart constructor.
-newtype UpdateSkillGroupResponse = UpdateSkillGroupResponse'
-  { _usgrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateSkillGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usgrsResponseStatus' - -- | The response status code.
-updateSkillGroupResponse
-    :: Int -- ^ 'usgrsResponseStatus'
-    -> UpdateSkillGroupResponse
-updateSkillGroupResponse pResponseStatus_ =
-  UpdateSkillGroupResponse' {_usgrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-usgrsResponseStatus :: Lens' UpdateSkillGroupResponse Int
-usgrsResponseStatus = lens _usgrsResponseStatus (\ s a -> s{_usgrsResponseStatus = a})
-
-instance NFData UpdateSkillGroupResponse where
diff --git a/gen/Network/AWS/AlexaBusiness/Waiters.hs b/gen/Network/AWS/AlexaBusiness/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/AlexaBusiness/Waiters.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AlexaBusiness.Waiters
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.AlexaBusiness.Waiters where
-
-import Network.AWS.AlexaBusiness.Types
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,20 +2,22 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2018 Brendan Hay
+-- Copyright   : (c) 2013-2023 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Maintainer  : Brendan Hay
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
---
 module Main (main) where
 
+import Test.Amazonka.AlexaBusiness
+import Test.Amazonka.AlexaBusiness.Internal
 import Test.Tasty
-import Test.AWS.AlexaBusiness
-import Test.AWS.AlexaBusiness.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "AlexaBusiness"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "AlexaBusiness"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/AlexaBusiness.hs b/test/Test/AWS/AlexaBusiness.hs
deleted file mode 100644
--- a/test/Test/AWS/AlexaBusiness.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- |
--- Module      : Test.AWS.AlexaBusiness
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.AlexaBusiness
-    ( tests
-    , fixtures
-    ) where
-
-import Test.Tasty (TestTree)
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/AlexaBusiness/Internal.hs b/test/Test/AWS/AlexaBusiness/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/AlexaBusiness/Internal.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- |
--- Module      : Test.AWS.AlexaBusiness.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.AlexaBusiness.Internal where
diff --git a/test/Test/AWS/Gen/AlexaBusiness.hs b/test/Test/AWS/Gen/AlexaBusiness.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/AlexaBusiness.hs
+++ /dev/null
@@ -1,921 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-orphans        #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Test.AWS.Gen.AlexaBusiness
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Gen.AlexaBusiness where
-
-import Data.Proxy
-import Network.AWS.AlexaBusiness
-import Test.AWS.AlexaBusiness.Internal
-import Test.AWS.Fixture
-import Test.AWS.Prelude
-import Test.Tasty
-
--- Auto-generated: the actual test selection needs to be manually placed into
--- the top-level so that real test data can be incrementally added.
---
--- This commented snippet is what the entire set should look like:
-
--- fixtures :: TestTree
--- fixtures =
---     [ testGroup "request"
---         [ requestSearchUsers $
---             searchUsers
---
---         , requestAssociateSkillGroupWithRoom $
---             associateSkillGroupWithRoom
---
---         , requestDeleteProfile $
---             deleteProfile
---
---         , requestUpdateProfile $
---             updateProfile
---
---         , requestSearchRooms $
---             searchRooms
---
---         , requestDisassociateContactFromAddressBook $
---             disassociateContactFromAddressBook
---
---         , requestCreateAddressBook $
---             createAddressBook
---
---         , requestDeleteAddressBook $
---             deleteAddressBook
---
---         , requestUpdateAddressBook $
---             updateAddressBook
---
---         , requestUpdateRoom $
---             updateRoom
---
---         , requestDeleteRoom $
---             deleteRoom
---
---         , requestGetDevice $
---             getDevice
---
---         , requestGetContact $
---             getContact
---
---         , requestAssociateDeviceWithRoom $
---             associateDeviceWithRoom
---
---         , requestGetRoomSkillParameter $
---             getRoomSkillParameter
---
---         , requestDeleteContact $
---             deleteContact
---
---         , requestUpdateContact $
---             updateContact
---
---         , requestGetAddressBook $
---             getAddressBook
---
---         , requestCreateContact $
---             createContact
---
---         , requestCreateProfile $
---             createProfile
---
---         , requestDeleteSkillGroup $
---             deleteSkillGroup
---
---         , requestUpdateSkillGroup $
---             updateSkillGroup
---
---         , requestStartDeviceSync $
---             startDeviceSync
---
---         , requestSearchAddressBooks $
---             searchAddressBooks
---
---         , requestCreateSkillGroup $
---             createSkillGroup
---
---         , requestGetProfile $
---             getProfile
---
---         , requestDisassociateSkillGroupFromRoom $
---             disassociateSkillGroupFromRoom
---
---         , requestSendInvitation $
---             sendInvitation
---
---         , requestListDeviceEvents $
---             listDeviceEvents
---
---         , requestCreateUser $
---             createUser
---
---         , requestSearchDevices $
---             searchDevices
---
---         , requestSearchContacts $
---             searchContacts
---
---         , requestDeleteUser $
---             deleteUser
---
---         , requestGetSkillGroup $
---             getSkillGroup
---
---         , requestListSkills $
---             listSkills
---
---         , requestTagResource $
---             tagResource
---
---         , requestDisassociateDeviceFromRoom $
---             disassociateDeviceFromRoom
---
---         , requestSearchSkillGroups $
---             searchSkillGroups
---
---         , requestListTags $
---             listTags
---
---         , requestUntagResource $
---             untagResource
---
---         , requestResolveRoom $
---             resolveRoom
---
---         , requestCreateRoom $
---             createRoom
---
---         , requestDeleteRoomSkillParameter $
---             deleteRoomSkillParameter
---
---         , requestPutRoomSkillParameter $
---             putRoomSkillParameter
---
---         , requestSearchProfiles $
---             searchProfiles
---
---         , requestRevokeInvitation $
---             revokeInvitation
---
---         , requestUpdateDevice $
---             updateDevice
---
---         , requestGetRoom $
---             getRoom
---
---         , requestAssociateContactWithAddressBook $
---             associateContactWithAddressBook
---
---           ]
-
---     , testGroup "response"
---         [ responseSearchUsers $
---             searchUsersResponse
---
---         , responseAssociateSkillGroupWithRoom $
---             associateSkillGroupWithRoomResponse
---
---         , responseDeleteProfile $
---             deleteProfileResponse
---
---         , responseUpdateProfile $
---             updateProfileResponse
---
---         , responseSearchRooms $
---             searchRoomsResponse
---
---         , responseDisassociateContactFromAddressBook $
---             disassociateContactFromAddressBookResponse
---
---         , responseCreateAddressBook $
---             createAddressBookResponse
---
---         , responseDeleteAddressBook $
---             deleteAddressBookResponse
---
---         , responseUpdateAddressBook $
---             updateAddressBookResponse
---
---         , responseUpdateRoom $
---             updateRoomResponse
---
---         , responseDeleteRoom $
---             deleteRoomResponse
---
---         , responseGetDevice $
---             getDeviceResponse
---
---         , responseGetContact $
---             getContactResponse
---
---         , responseAssociateDeviceWithRoom $
---             associateDeviceWithRoomResponse
---
---         , responseGetRoomSkillParameter $
---             getRoomSkillParameterResponse
---
---         , responseDeleteContact $
---             deleteContactResponse
---
---         , responseUpdateContact $
---             updateContactResponse
---
---         , responseGetAddressBook $
---             getAddressBookResponse
---
---         , responseCreateContact $
---             createContactResponse
---
---         , responseCreateProfile $
---             createProfileResponse
---
---         , responseDeleteSkillGroup $
---             deleteSkillGroupResponse
---
---         , responseUpdateSkillGroup $
---             updateSkillGroupResponse
---
---         , responseStartDeviceSync $
---             startDeviceSyncResponse
---
---         , responseSearchAddressBooks $
---             searchAddressBooksResponse
---
---         , responseCreateSkillGroup $
---             createSkillGroupResponse
---
---         , responseGetProfile $
---             getProfileResponse
---
---         , responseDisassociateSkillGroupFromRoom $
---             disassociateSkillGroupFromRoomResponse
---
---         , responseSendInvitation $
---             sendInvitationResponse
---
---         , responseListDeviceEvents $
---             listDeviceEventsResponse
---
---         , responseCreateUser $
---             createUserResponse
---
---         , responseSearchDevices $
---             searchDevicesResponse
---
---         , responseSearchContacts $
---             searchContactsResponse
---
---         , responseDeleteUser $
---             deleteUserResponse
---
---         , responseGetSkillGroup $
---             getSkillGroupResponse
---
---         , responseListSkills $
---             listSkillsResponse
---
---         , responseTagResource $
---             tagResourceResponse
---
---         , responseDisassociateDeviceFromRoom $
---             disassociateDeviceFromRoomResponse
---
---         , responseSearchSkillGroups $
---             searchSkillGroupsResponse
---
---         , responseListTags $
---             listTagsResponse
---
---         , responseUntagResource $
---             untagResourceResponse
---
---         , responseResolveRoom $
---             resolveRoomResponse
---
---         , responseCreateRoom $
---             createRoomResponse
---
---         , responseDeleteRoomSkillParameter $
---             deleteRoomSkillParameterResponse
---
---         , responsePutRoomSkillParameter $
---             putRoomSkillParameterResponse
---
---         , responseSearchProfiles $
---             searchProfilesResponse
---
---         , responseRevokeInvitation $
---             revokeInvitationResponse
---
---         , responseUpdateDevice $
---             updateDeviceResponse
---
---         , responseGetRoom $
---             getRoomResponse
---
---         , responseAssociateContactWithAddressBook $
---             associateContactWithAddressBookResponse
---
---           ]
---     ]
-
--- Requests
-
-requestSearchUsers :: SearchUsers -> TestTree
-requestSearchUsers = req
-    "SearchUsers"
-    "fixture/SearchUsers.yaml"
-
-requestAssociateSkillGroupWithRoom :: AssociateSkillGroupWithRoom -> TestTree
-requestAssociateSkillGroupWithRoom = req
-    "AssociateSkillGroupWithRoom"
-    "fixture/AssociateSkillGroupWithRoom.yaml"
-
-requestDeleteProfile :: DeleteProfile -> TestTree
-requestDeleteProfile = req
-    "DeleteProfile"
-    "fixture/DeleteProfile.yaml"
-
-requestUpdateProfile :: UpdateProfile -> TestTree
-requestUpdateProfile = req
-    "UpdateProfile"
-    "fixture/UpdateProfile.yaml"
-
-requestSearchRooms :: SearchRooms -> TestTree
-requestSearchRooms = req
-    "SearchRooms"
-    "fixture/SearchRooms.yaml"
-
-requestDisassociateContactFromAddressBook :: DisassociateContactFromAddressBook -> TestTree
-requestDisassociateContactFromAddressBook = req
-    "DisassociateContactFromAddressBook"
-    "fixture/DisassociateContactFromAddressBook.yaml"
-
-requestCreateAddressBook :: CreateAddressBook -> TestTree
-requestCreateAddressBook = req
-    "CreateAddressBook"
-    "fixture/CreateAddressBook.yaml"
-
-requestDeleteAddressBook :: DeleteAddressBook -> TestTree
-requestDeleteAddressBook = req
-    "DeleteAddressBook"
-    "fixture/DeleteAddressBook.yaml"
-
-requestUpdateAddressBook :: UpdateAddressBook -> TestTree
-requestUpdateAddressBook = req
-    "UpdateAddressBook"
-    "fixture/UpdateAddressBook.yaml"
-
-requestUpdateRoom :: UpdateRoom -> TestTree
-requestUpdateRoom = req
-    "UpdateRoom"
-    "fixture/UpdateRoom.yaml"
-
-requestDeleteRoom :: DeleteRoom -> TestTree
-requestDeleteRoom = req
-    "DeleteRoom"
-    "fixture/DeleteRoom.yaml"
-
-requestGetDevice :: GetDevice -> TestTree
-requestGetDevice = req
-    "GetDevice"
-    "fixture/GetDevice.yaml"
-
-requestGetContact :: GetContact -> TestTree
-requestGetContact = req
-    "GetContact"
-    "fixture/GetContact.yaml"
-
-requestAssociateDeviceWithRoom :: AssociateDeviceWithRoom -> TestTree
-requestAssociateDeviceWithRoom = req
-    "AssociateDeviceWithRoom"
-    "fixture/AssociateDeviceWithRoom.yaml"
-
-requestGetRoomSkillParameter :: GetRoomSkillParameter -> TestTree
-requestGetRoomSkillParameter = req
-    "GetRoomSkillParameter"
-    "fixture/GetRoomSkillParameter.yaml"
-
-requestDeleteContact :: DeleteContact -> TestTree
-requestDeleteContact = req
-    "DeleteContact"
-    "fixture/DeleteContact.yaml"
-
-requestUpdateContact :: UpdateContact -> TestTree
-requestUpdateContact = req
-    "UpdateContact"
-    "fixture/UpdateContact.yaml"
-
-requestGetAddressBook :: GetAddressBook -> TestTree
-requestGetAddressBook = req
-    "GetAddressBook"
-    "fixture/GetAddressBook.yaml"
-
-requestCreateContact :: CreateContact -> TestTree
-requestCreateContact = req
-    "CreateContact"
-    "fixture/CreateContact.yaml"
-
-requestCreateProfile :: CreateProfile -> TestTree
-requestCreateProfile = req
-    "CreateProfile"
-    "fixture/CreateProfile.yaml"
-
-requestDeleteSkillGroup :: DeleteSkillGroup -> TestTree
-requestDeleteSkillGroup = req
-    "DeleteSkillGroup"
-    "fixture/DeleteSkillGroup.yaml"
-
-requestUpdateSkillGroup :: UpdateSkillGroup -> TestTree
-requestUpdateSkillGroup = req
-    "UpdateSkillGroup"
-    "fixture/UpdateSkillGroup.yaml"
-
-requestStartDeviceSync :: StartDeviceSync -> TestTree
-requestStartDeviceSync = req
-    "StartDeviceSync"
-    "fixture/StartDeviceSync.yaml"
-
-requestSearchAddressBooks :: SearchAddressBooks -> TestTree
-requestSearchAddressBooks = req
-    "SearchAddressBooks"
-    "fixture/SearchAddressBooks.yaml"
-
-requestCreateSkillGroup :: CreateSkillGroup -> TestTree
-requestCreateSkillGroup = req
-    "CreateSkillGroup"
-    "fixture/CreateSkillGroup.yaml"
-
-requestGetProfile :: GetProfile -> TestTree
-requestGetProfile = req
-    "GetProfile"
-    "fixture/GetProfile.yaml"
-
-requestDisassociateSkillGroupFromRoom :: DisassociateSkillGroupFromRoom -> TestTree
-requestDisassociateSkillGroupFromRoom = req
-    "DisassociateSkillGroupFromRoom"
-    "fixture/DisassociateSkillGroupFromRoom.yaml"
-
-requestSendInvitation :: SendInvitation -> TestTree
-requestSendInvitation = req
-    "SendInvitation"
-    "fixture/SendInvitation.yaml"
-
-requestListDeviceEvents :: ListDeviceEvents -> TestTree
-requestListDeviceEvents = req
-    "ListDeviceEvents"
-    "fixture/ListDeviceEvents.yaml"
-
-requestCreateUser :: CreateUser -> TestTree
-requestCreateUser = req
-    "CreateUser"
-    "fixture/CreateUser.yaml"
-
-requestSearchDevices :: SearchDevices -> TestTree
-requestSearchDevices = req
-    "SearchDevices"
-    "fixture/SearchDevices.yaml"
-
-requestSearchContacts :: SearchContacts -> TestTree
-requestSearchContacts = req
-    "SearchContacts"
-    "fixture/SearchContacts.yaml"
-
-requestDeleteUser :: DeleteUser -> TestTree
-requestDeleteUser = req
-    "DeleteUser"
-    "fixture/DeleteUser.yaml"
-
-requestGetSkillGroup :: GetSkillGroup -> TestTree
-requestGetSkillGroup = req
-    "GetSkillGroup"
-    "fixture/GetSkillGroup.yaml"
-
-requestListSkills :: ListSkills -> TestTree
-requestListSkills = req
-    "ListSkills"
-    "fixture/ListSkills.yaml"
-
-requestTagResource :: TagResource -> TestTree
-requestTagResource = req
-    "TagResource"
-    "fixture/TagResource.yaml"
-
-requestDisassociateDeviceFromRoom :: DisassociateDeviceFromRoom -> TestTree
-requestDisassociateDeviceFromRoom = req
-    "DisassociateDeviceFromRoom"
-    "fixture/DisassociateDeviceFromRoom.yaml"
-
-requestSearchSkillGroups :: SearchSkillGroups -> TestTree
-requestSearchSkillGroups = req
-    "SearchSkillGroups"
-    "fixture/SearchSkillGroups.yaml"
-
-requestListTags :: ListTags -> TestTree
-requestListTags = req
-    "ListTags"
-    "fixture/ListTags.yaml"
-
-requestUntagResource :: UntagResource -> TestTree
-requestUntagResource = req
-    "UntagResource"
-    "fixture/UntagResource.yaml"
-
-requestResolveRoom :: ResolveRoom -> TestTree
-requestResolveRoom = req
-    "ResolveRoom"
-    "fixture/ResolveRoom.yaml"
-
-requestCreateRoom :: CreateRoom -> TestTree
-requestCreateRoom = req
-    "CreateRoom"
-    "fixture/CreateRoom.yaml"
-
-requestDeleteRoomSkillParameter :: DeleteRoomSkillParameter -> TestTree
-requestDeleteRoomSkillParameter = req
-    "DeleteRoomSkillParameter"
-    "fixture/DeleteRoomSkillParameter.yaml"
-
-requestPutRoomSkillParameter :: PutRoomSkillParameter -> TestTree
-requestPutRoomSkillParameter = req
-    "PutRoomSkillParameter"
-    "fixture/PutRoomSkillParameter.yaml"
-
-requestSearchProfiles :: SearchProfiles -> TestTree
-requestSearchProfiles = req
-    "SearchProfiles"
-    "fixture/SearchProfiles.yaml"
-
-requestRevokeInvitation :: RevokeInvitation -> TestTree
-requestRevokeInvitation = req
-    "RevokeInvitation"
-    "fixture/RevokeInvitation.yaml"
-
-requestUpdateDevice :: UpdateDevice -> TestTree
-requestUpdateDevice = req
-    "UpdateDevice"
-    "fixture/UpdateDevice.yaml"
-
-requestGetRoom :: GetRoom -> TestTree
-requestGetRoom = req
-    "GetRoom"
-    "fixture/GetRoom.yaml"
-
-requestAssociateContactWithAddressBook :: AssociateContactWithAddressBook -> TestTree
-requestAssociateContactWithAddressBook = req
-    "AssociateContactWithAddressBook"
-    "fixture/AssociateContactWithAddressBook.yaml"
-
--- Responses
-
-responseSearchUsers :: SearchUsersResponse -> TestTree
-responseSearchUsers = res
-    "SearchUsersResponse"
-    "fixture/SearchUsersResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy SearchUsers)
-
-responseAssociateSkillGroupWithRoom :: AssociateSkillGroupWithRoomResponse -> TestTree
-responseAssociateSkillGroupWithRoom = res
-    "AssociateSkillGroupWithRoomResponse"
-    "fixture/AssociateSkillGroupWithRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy AssociateSkillGroupWithRoom)
-
-responseDeleteProfile :: DeleteProfileResponse -> TestTree
-responseDeleteProfile = res
-    "DeleteProfileResponse"
-    "fixture/DeleteProfileResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DeleteProfile)
-
-responseUpdateProfile :: UpdateProfileResponse -> TestTree
-responseUpdateProfile = res
-    "UpdateProfileResponse"
-    "fixture/UpdateProfileResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy UpdateProfile)
-
-responseSearchRooms :: SearchRoomsResponse -> TestTree
-responseSearchRooms = res
-    "SearchRoomsResponse"
-    "fixture/SearchRoomsResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy SearchRooms)
-
-responseDisassociateContactFromAddressBook :: DisassociateContactFromAddressBookResponse -> TestTree
-responseDisassociateContactFromAddressBook = res
-    "DisassociateContactFromAddressBookResponse"
-    "fixture/DisassociateContactFromAddressBookResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DisassociateContactFromAddressBook)
-
-responseCreateAddressBook :: CreateAddressBookResponse -> TestTree
-responseCreateAddressBook = res
-    "CreateAddressBookResponse"
-    "fixture/CreateAddressBookResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy CreateAddressBook)
-
-responseDeleteAddressBook :: DeleteAddressBookResponse -> TestTree
-responseDeleteAddressBook = res
-    "DeleteAddressBookResponse"
-    "fixture/DeleteAddressBookResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DeleteAddressBook)
-
-responseUpdateAddressBook :: UpdateAddressBookResponse -> TestTree
-responseUpdateAddressBook = res
-    "UpdateAddressBookResponse"
-    "fixture/UpdateAddressBookResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy UpdateAddressBook)
-
-responseUpdateRoom :: UpdateRoomResponse -> TestTree
-responseUpdateRoom = res
-    "UpdateRoomResponse"
-    "fixture/UpdateRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy UpdateRoom)
-
-responseDeleteRoom :: DeleteRoomResponse -> TestTree
-responseDeleteRoom = res
-    "DeleteRoomResponse"
-    "fixture/DeleteRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DeleteRoom)
-
-responseGetDevice :: GetDeviceResponse -> TestTree
-responseGetDevice = res
-    "GetDeviceResponse"
-    "fixture/GetDeviceResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy GetDevice)
-
-responseGetContact :: GetContactResponse -> TestTree
-responseGetContact = res
-    "GetContactResponse"
-    "fixture/GetContactResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy GetContact)
-
-responseAssociateDeviceWithRoom :: AssociateDeviceWithRoomResponse -> TestTree
-responseAssociateDeviceWithRoom = res
-    "AssociateDeviceWithRoomResponse"
-    "fixture/AssociateDeviceWithRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy AssociateDeviceWithRoom)
-
-responseGetRoomSkillParameter :: GetRoomSkillParameterResponse -> TestTree
-responseGetRoomSkillParameter = res
-    "GetRoomSkillParameterResponse"
-    "fixture/GetRoomSkillParameterResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy GetRoomSkillParameter)
-
-responseDeleteContact :: DeleteContactResponse -> TestTree
-responseDeleteContact = res
-    "DeleteContactResponse"
-    "fixture/DeleteContactResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DeleteContact)
-
-responseUpdateContact :: UpdateContactResponse -> TestTree
-responseUpdateContact = res
-    "UpdateContactResponse"
-    "fixture/UpdateContactResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy UpdateContact)
-
-responseGetAddressBook :: GetAddressBookResponse -> TestTree
-responseGetAddressBook = res
-    "GetAddressBookResponse"
-    "fixture/GetAddressBookResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy GetAddressBook)
-
-responseCreateContact :: CreateContactResponse -> TestTree
-responseCreateContact = res
-    "CreateContactResponse"
-    "fixture/CreateContactResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy CreateContact)
-
-responseCreateProfile :: CreateProfileResponse -> TestTree
-responseCreateProfile = res
-    "CreateProfileResponse"
-    "fixture/CreateProfileResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy CreateProfile)
-
-responseDeleteSkillGroup :: DeleteSkillGroupResponse -> TestTree
-responseDeleteSkillGroup = res
-    "DeleteSkillGroupResponse"
-    "fixture/DeleteSkillGroupResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DeleteSkillGroup)
-
-responseUpdateSkillGroup :: UpdateSkillGroupResponse -> TestTree
-responseUpdateSkillGroup = res
-    "UpdateSkillGroupResponse"
-    "fixture/UpdateSkillGroupResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy UpdateSkillGroup)
-
-responseStartDeviceSync :: StartDeviceSyncResponse -> TestTree
-responseStartDeviceSync = res
-    "StartDeviceSyncResponse"
-    "fixture/StartDeviceSyncResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy StartDeviceSync)
-
-responseSearchAddressBooks :: SearchAddressBooksResponse -> TestTree
-responseSearchAddressBooks = res
-    "SearchAddressBooksResponse"
-    "fixture/SearchAddressBooksResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy SearchAddressBooks)
-
-responseCreateSkillGroup :: CreateSkillGroupResponse -> TestTree
-responseCreateSkillGroup = res
-    "CreateSkillGroupResponse"
-    "fixture/CreateSkillGroupResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy CreateSkillGroup)
-
-responseGetProfile :: GetProfileResponse -> TestTree
-responseGetProfile = res
-    "GetProfileResponse"
-    "fixture/GetProfileResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy GetProfile)
-
-responseDisassociateSkillGroupFromRoom :: DisassociateSkillGroupFromRoomResponse -> TestTree
-responseDisassociateSkillGroupFromRoom = res
-    "DisassociateSkillGroupFromRoomResponse"
-    "fixture/DisassociateSkillGroupFromRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DisassociateSkillGroupFromRoom)
-
-responseSendInvitation :: SendInvitationResponse -> TestTree
-responseSendInvitation = res
-    "SendInvitationResponse"
-    "fixture/SendInvitationResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy SendInvitation)
-
-responseListDeviceEvents :: ListDeviceEventsResponse -> TestTree
-responseListDeviceEvents = res
-    "ListDeviceEventsResponse"
-    "fixture/ListDeviceEventsResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy ListDeviceEvents)
-
-responseCreateUser :: CreateUserResponse -> TestTree
-responseCreateUser = res
-    "CreateUserResponse"
-    "fixture/CreateUserResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy CreateUser)
-
-responseSearchDevices :: SearchDevicesResponse -> TestTree
-responseSearchDevices = res
-    "SearchDevicesResponse"
-    "fixture/SearchDevicesResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy SearchDevices)
-
-responseSearchContacts :: SearchContactsResponse -> TestTree
-responseSearchContacts = res
-    "SearchContactsResponse"
-    "fixture/SearchContactsResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy SearchContacts)
-
-responseDeleteUser :: DeleteUserResponse -> TestTree
-responseDeleteUser = res
-    "DeleteUserResponse"
-    "fixture/DeleteUserResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DeleteUser)
-
-responseGetSkillGroup :: GetSkillGroupResponse -> TestTree
-responseGetSkillGroup = res
-    "GetSkillGroupResponse"
-    "fixture/GetSkillGroupResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy GetSkillGroup)
-
-responseListSkills :: ListSkillsResponse -> TestTree
-responseListSkills = res
-    "ListSkillsResponse"
-    "fixture/ListSkillsResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy ListSkills)
-
-responseTagResource :: TagResourceResponse -> TestTree
-responseTagResource = res
-    "TagResourceResponse"
-    "fixture/TagResourceResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy TagResource)
-
-responseDisassociateDeviceFromRoom :: DisassociateDeviceFromRoomResponse -> TestTree
-responseDisassociateDeviceFromRoom = res
-    "DisassociateDeviceFromRoomResponse"
-    "fixture/DisassociateDeviceFromRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DisassociateDeviceFromRoom)
-
-responseSearchSkillGroups :: SearchSkillGroupsResponse -> TestTree
-responseSearchSkillGroups = res
-    "SearchSkillGroupsResponse"
-    "fixture/SearchSkillGroupsResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy SearchSkillGroups)
-
-responseListTags :: ListTagsResponse -> TestTree
-responseListTags = res
-    "ListTagsResponse"
-    "fixture/ListTagsResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy ListTags)
-
-responseUntagResource :: UntagResourceResponse -> TestTree
-responseUntagResource = res
-    "UntagResourceResponse"
-    "fixture/UntagResourceResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy UntagResource)
-
-responseResolveRoom :: ResolveRoomResponse -> TestTree
-responseResolveRoom = res
-    "ResolveRoomResponse"
-    "fixture/ResolveRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy ResolveRoom)
-
-responseCreateRoom :: CreateRoomResponse -> TestTree
-responseCreateRoom = res
-    "CreateRoomResponse"
-    "fixture/CreateRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy CreateRoom)
-
-responseDeleteRoomSkillParameter :: DeleteRoomSkillParameterResponse -> TestTree
-responseDeleteRoomSkillParameter = res
-    "DeleteRoomSkillParameterResponse"
-    "fixture/DeleteRoomSkillParameterResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy DeleteRoomSkillParameter)
-
-responsePutRoomSkillParameter :: PutRoomSkillParameterResponse -> TestTree
-responsePutRoomSkillParameter = res
-    "PutRoomSkillParameterResponse"
-    "fixture/PutRoomSkillParameterResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy PutRoomSkillParameter)
-
-responseSearchProfiles :: SearchProfilesResponse -> TestTree
-responseSearchProfiles = res
-    "SearchProfilesResponse"
-    "fixture/SearchProfilesResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy SearchProfiles)
-
-responseRevokeInvitation :: RevokeInvitationResponse -> TestTree
-responseRevokeInvitation = res
-    "RevokeInvitationResponse"
-    "fixture/RevokeInvitationResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy RevokeInvitation)
-
-responseUpdateDevice :: UpdateDeviceResponse -> TestTree
-responseUpdateDevice = res
-    "UpdateDeviceResponse"
-    "fixture/UpdateDeviceResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy UpdateDevice)
-
-responseGetRoom :: GetRoomResponse -> TestTree
-responseGetRoom = res
-    "GetRoomResponse"
-    "fixture/GetRoomResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy GetRoom)
-
-responseAssociateContactWithAddressBook :: AssociateContactWithAddressBookResponse -> TestTree
-responseAssociateContactWithAddressBook = res
-    "AssociateContactWithAddressBookResponse"
-    "fixture/AssociateContactWithAddressBookResponse.proto"
-    alexaBusiness
-    (Proxy :: Proxy AssociateContactWithAddressBook)
diff --git a/test/Test/Amazonka/AlexaBusiness.hs b/test/Test/Amazonka/AlexaBusiness.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AlexaBusiness.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.AlexaBusiness
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.AlexaBusiness
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/AlexaBusiness/Internal.hs b/test/Test/Amazonka/AlexaBusiness/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AlexaBusiness/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.AlexaBusiness.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.AlexaBusiness.Internal where
diff --git a/test/Test/Amazonka/Gen/AlexaBusiness.hs b/test/Test/Amazonka/Gen/AlexaBusiness.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/AlexaBusiness.hs
@@ -0,0 +1,1898 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.AlexaBusiness
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.AlexaBusiness where
+
+import Amazonka.AlexaBusiness
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.AlexaBusiness.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestApproveSkill $
+--             newApproveSkill
+--
+--         , requestAssociateContactWithAddressBook $
+--             newAssociateContactWithAddressBook
+--
+--         , requestAssociateDeviceWithNetworkProfile $
+--             newAssociateDeviceWithNetworkProfile
+--
+--         , requestAssociateDeviceWithRoom $
+--             newAssociateDeviceWithRoom
+--
+--         , requestAssociateSkillGroupWithRoom $
+--             newAssociateSkillGroupWithRoom
+--
+--         , requestAssociateSkillWithSkillGroup $
+--             newAssociateSkillWithSkillGroup
+--
+--         , requestAssociateSkillWithUsers $
+--             newAssociateSkillWithUsers
+--
+--         , requestCreateAddressBook $
+--             newCreateAddressBook
+--
+--         , requestCreateBusinessReportSchedule $
+--             newCreateBusinessReportSchedule
+--
+--         , requestCreateConferenceProvider $
+--             newCreateConferenceProvider
+--
+--         , requestCreateContact $
+--             newCreateContact
+--
+--         , requestCreateGatewayGroup $
+--             newCreateGatewayGroup
+--
+--         , requestCreateNetworkProfile $
+--             newCreateNetworkProfile
+--
+--         , requestCreateProfile $
+--             newCreateProfile
+--
+--         , requestCreateRoom $
+--             newCreateRoom
+--
+--         , requestCreateSkillGroup $
+--             newCreateSkillGroup
+--
+--         , requestCreateUser $
+--             newCreateUser
+--
+--         , requestDeleteAddressBook $
+--             newDeleteAddressBook
+--
+--         , requestDeleteBusinessReportSchedule $
+--             newDeleteBusinessReportSchedule
+--
+--         , requestDeleteConferenceProvider $
+--             newDeleteConferenceProvider
+--
+--         , requestDeleteContact $
+--             newDeleteContact
+--
+--         , requestDeleteDevice $
+--             newDeleteDevice
+--
+--         , requestDeleteDeviceUsageData $
+--             newDeleteDeviceUsageData
+--
+--         , requestDeleteGatewayGroup $
+--             newDeleteGatewayGroup
+--
+--         , requestDeleteNetworkProfile $
+--             newDeleteNetworkProfile
+--
+--         , requestDeleteProfile $
+--             newDeleteProfile
+--
+--         , requestDeleteRoom $
+--             newDeleteRoom
+--
+--         , requestDeleteRoomSkillParameter $
+--             newDeleteRoomSkillParameter
+--
+--         , requestDeleteSkillAuthorization $
+--             newDeleteSkillAuthorization
+--
+--         , requestDeleteSkillGroup $
+--             newDeleteSkillGroup
+--
+--         , requestDeleteUser $
+--             newDeleteUser
+--
+--         , requestDisassociateContactFromAddressBook $
+--             newDisassociateContactFromAddressBook
+--
+--         , requestDisassociateDeviceFromRoom $
+--             newDisassociateDeviceFromRoom
+--
+--         , requestDisassociateSkillFromSkillGroup $
+--             newDisassociateSkillFromSkillGroup
+--
+--         , requestDisassociateSkillFromUsers $
+--             newDisassociateSkillFromUsers
+--
+--         , requestDisassociateSkillGroupFromRoom $
+--             newDisassociateSkillGroupFromRoom
+--
+--         , requestForgetSmartHomeAppliances $
+--             newForgetSmartHomeAppliances
+--
+--         , requestGetAddressBook $
+--             newGetAddressBook
+--
+--         , requestGetConferencePreference $
+--             newGetConferencePreference
+--
+--         , requestGetConferenceProvider $
+--             newGetConferenceProvider
+--
+--         , requestGetContact $
+--             newGetContact
+--
+--         , requestGetDevice $
+--             newGetDevice
+--
+--         , requestGetGateway $
+--             newGetGateway
+--
+--         , requestGetGatewayGroup $
+--             newGetGatewayGroup
+--
+--         , requestGetInvitationConfiguration $
+--             newGetInvitationConfiguration
+--
+--         , requestGetNetworkProfile $
+--             newGetNetworkProfile
+--
+--         , requestGetProfile $
+--             newGetProfile
+--
+--         , requestGetRoom $
+--             newGetRoom
+--
+--         , requestGetRoomSkillParameter $
+--             newGetRoomSkillParameter
+--
+--         , requestGetSkillGroup $
+--             newGetSkillGroup
+--
+--         , requestListBusinessReportSchedules $
+--             newListBusinessReportSchedules
+--
+--         , requestListConferenceProviders $
+--             newListConferenceProviders
+--
+--         , requestListDeviceEvents $
+--             newListDeviceEvents
+--
+--         , requestListGatewayGroups $
+--             newListGatewayGroups
+--
+--         , requestListGateways $
+--             newListGateways
+--
+--         , requestListSkills $
+--             newListSkills
+--
+--         , requestListSkillsStoreCategories $
+--             newListSkillsStoreCategories
+--
+--         , requestListSkillsStoreSkillsByCategory $
+--             newListSkillsStoreSkillsByCategory
+--
+--         , requestListSmartHomeAppliances $
+--             newListSmartHomeAppliances
+--
+--         , requestListTags $
+--             newListTags
+--
+--         , requestPutConferencePreference $
+--             newPutConferencePreference
+--
+--         , requestPutInvitationConfiguration $
+--             newPutInvitationConfiguration
+--
+--         , requestPutRoomSkillParameter $
+--             newPutRoomSkillParameter
+--
+--         , requestPutSkillAuthorization $
+--             newPutSkillAuthorization
+--
+--         , requestRegisterAVSDevice $
+--             newRegisterAVSDevice
+--
+--         , requestRejectSkill $
+--             newRejectSkill
+--
+--         , requestResolveRoom $
+--             newResolveRoom
+--
+--         , requestRevokeInvitation $
+--             newRevokeInvitation
+--
+--         , requestSearchAddressBooks $
+--             newSearchAddressBooks
+--
+--         , requestSearchContacts $
+--             newSearchContacts
+--
+--         , requestSearchDevices $
+--             newSearchDevices
+--
+--         , requestSearchNetworkProfiles $
+--             newSearchNetworkProfiles
+--
+--         , requestSearchProfiles $
+--             newSearchProfiles
+--
+--         , requestSearchRooms $
+--             newSearchRooms
+--
+--         , requestSearchSkillGroups $
+--             newSearchSkillGroups
+--
+--         , requestSearchUsers $
+--             newSearchUsers
+--
+--         , requestSendAnnouncement $
+--             newSendAnnouncement
+--
+--         , requestSendInvitation $
+--             newSendInvitation
+--
+--         , requestStartDeviceSync $
+--             newStartDeviceSync
+--
+--         , requestStartSmartHomeApplianceDiscovery $
+--             newStartSmartHomeApplianceDiscovery
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAddressBook $
+--             newUpdateAddressBook
+--
+--         , requestUpdateBusinessReportSchedule $
+--             newUpdateBusinessReportSchedule
+--
+--         , requestUpdateConferenceProvider $
+--             newUpdateConferenceProvider
+--
+--         , requestUpdateContact $
+--             newUpdateContact
+--
+--         , requestUpdateDevice $
+--             newUpdateDevice
+--
+--         , requestUpdateGateway $
+--             newUpdateGateway
+--
+--         , requestUpdateGatewayGroup $
+--             newUpdateGatewayGroup
+--
+--         , requestUpdateNetworkProfile $
+--             newUpdateNetworkProfile
+--
+--         , requestUpdateProfile $
+--             newUpdateProfile
+--
+--         , requestUpdateRoom $
+--             newUpdateRoom
+--
+--         , requestUpdateSkillGroup $
+--             newUpdateSkillGroup
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseApproveSkill $
+--             newApproveSkillResponse
+--
+--         , responseAssociateContactWithAddressBook $
+--             newAssociateContactWithAddressBookResponse
+--
+--         , responseAssociateDeviceWithNetworkProfile $
+--             newAssociateDeviceWithNetworkProfileResponse
+--
+--         , responseAssociateDeviceWithRoom $
+--             newAssociateDeviceWithRoomResponse
+--
+--         , responseAssociateSkillGroupWithRoom $
+--             newAssociateSkillGroupWithRoomResponse
+--
+--         , responseAssociateSkillWithSkillGroup $
+--             newAssociateSkillWithSkillGroupResponse
+--
+--         , responseAssociateSkillWithUsers $
+--             newAssociateSkillWithUsersResponse
+--
+--         , responseCreateAddressBook $
+--             newCreateAddressBookResponse
+--
+--         , responseCreateBusinessReportSchedule $
+--             newCreateBusinessReportScheduleResponse
+--
+--         , responseCreateConferenceProvider $
+--             newCreateConferenceProviderResponse
+--
+--         , responseCreateContact $
+--             newCreateContactResponse
+--
+--         , responseCreateGatewayGroup $
+--             newCreateGatewayGroupResponse
+--
+--         , responseCreateNetworkProfile $
+--             newCreateNetworkProfileResponse
+--
+--         , responseCreateProfile $
+--             newCreateProfileResponse
+--
+--         , responseCreateRoom $
+--             newCreateRoomResponse
+--
+--         , responseCreateSkillGroup $
+--             newCreateSkillGroupResponse
+--
+--         , responseCreateUser $
+--             newCreateUserResponse
+--
+--         , responseDeleteAddressBook $
+--             newDeleteAddressBookResponse
+--
+--         , responseDeleteBusinessReportSchedule $
+--             newDeleteBusinessReportScheduleResponse
+--
+--         , responseDeleteConferenceProvider $
+--             newDeleteConferenceProviderResponse
+--
+--         , responseDeleteContact $
+--             newDeleteContactResponse
+--
+--         , responseDeleteDevice $
+--             newDeleteDeviceResponse
+--
+--         , responseDeleteDeviceUsageData $
+--             newDeleteDeviceUsageDataResponse
+--
+--         , responseDeleteGatewayGroup $
+--             newDeleteGatewayGroupResponse
+--
+--         , responseDeleteNetworkProfile $
+--             newDeleteNetworkProfileResponse
+--
+--         , responseDeleteProfile $
+--             newDeleteProfileResponse
+--
+--         , responseDeleteRoom $
+--             newDeleteRoomResponse
+--
+--         , responseDeleteRoomSkillParameter $
+--             newDeleteRoomSkillParameterResponse
+--
+--         , responseDeleteSkillAuthorization $
+--             newDeleteSkillAuthorizationResponse
+--
+--         , responseDeleteSkillGroup $
+--             newDeleteSkillGroupResponse
+--
+--         , responseDeleteUser $
+--             newDeleteUserResponse
+--
+--         , responseDisassociateContactFromAddressBook $
+--             newDisassociateContactFromAddressBookResponse
+--
+--         , responseDisassociateDeviceFromRoom $
+--             newDisassociateDeviceFromRoomResponse
+--
+--         , responseDisassociateSkillFromSkillGroup $
+--             newDisassociateSkillFromSkillGroupResponse
+--
+--         , responseDisassociateSkillFromUsers $
+--             newDisassociateSkillFromUsersResponse
+--
+--         , responseDisassociateSkillGroupFromRoom $
+--             newDisassociateSkillGroupFromRoomResponse
+--
+--         , responseForgetSmartHomeAppliances $
+--             newForgetSmartHomeAppliancesResponse
+--
+--         , responseGetAddressBook $
+--             newGetAddressBookResponse
+--
+--         , responseGetConferencePreference $
+--             newGetConferencePreferenceResponse
+--
+--         , responseGetConferenceProvider $
+--             newGetConferenceProviderResponse
+--
+--         , responseGetContact $
+--             newGetContactResponse
+--
+--         , responseGetDevice $
+--             newGetDeviceResponse
+--
+--         , responseGetGateway $
+--             newGetGatewayResponse
+--
+--         , responseGetGatewayGroup $
+--             newGetGatewayGroupResponse
+--
+--         , responseGetInvitationConfiguration $
+--             newGetInvitationConfigurationResponse
+--
+--         , responseGetNetworkProfile $
+--             newGetNetworkProfileResponse
+--
+--         , responseGetProfile $
+--             newGetProfileResponse
+--
+--         , responseGetRoom $
+--             newGetRoomResponse
+--
+--         , responseGetRoomSkillParameter $
+--             newGetRoomSkillParameterResponse
+--
+--         , responseGetSkillGroup $
+--             newGetSkillGroupResponse
+--
+--         , responseListBusinessReportSchedules $
+--             newListBusinessReportSchedulesResponse
+--
+--         , responseListConferenceProviders $
+--             newListConferenceProvidersResponse
+--
+--         , responseListDeviceEvents $
+--             newListDeviceEventsResponse
+--
+--         , responseListGatewayGroups $
+--             newListGatewayGroupsResponse
+--
+--         , responseListGateways $
+--             newListGatewaysResponse
+--
+--         , responseListSkills $
+--             newListSkillsResponse
+--
+--         , responseListSkillsStoreCategories $
+--             newListSkillsStoreCategoriesResponse
+--
+--         , responseListSkillsStoreSkillsByCategory $
+--             newListSkillsStoreSkillsByCategoryResponse
+--
+--         , responseListSmartHomeAppliances $
+--             newListSmartHomeAppliancesResponse
+--
+--         , responseListTags $
+--             newListTagsResponse
+--
+--         , responsePutConferencePreference $
+--             newPutConferencePreferenceResponse
+--
+--         , responsePutInvitationConfiguration $
+--             newPutInvitationConfigurationResponse
+--
+--         , responsePutRoomSkillParameter $
+--             newPutRoomSkillParameterResponse
+--
+--         , responsePutSkillAuthorization $
+--             newPutSkillAuthorizationResponse
+--
+--         , responseRegisterAVSDevice $
+--             newRegisterAVSDeviceResponse
+--
+--         , responseRejectSkill $
+--             newRejectSkillResponse
+--
+--         , responseResolveRoom $
+--             newResolveRoomResponse
+--
+--         , responseRevokeInvitation $
+--             newRevokeInvitationResponse
+--
+--         , responseSearchAddressBooks $
+--             newSearchAddressBooksResponse
+--
+--         , responseSearchContacts $
+--             newSearchContactsResponse
+--
+--         , responseSearchDevices $
+--             newSearchDevicesResponse
+--
+--         , responseSearchNetworkProfiles $
+--             newSearchNetworkProfilesResponse
+--
+--         , responseSearchProfiles $
+--             newSearchProfilesResponse
+--
+--         , responseSearchRooms $
+--             newSearchRoomsResponse
+--
+--         , responseSearchSkillGroups $
+--             newSearchSkillGroupsResponse
+--
+--         , responseSearchUsers $
+--             newSearchUsersResponse
+--
+--         , responseSendAnnouncement $
+--             newSendAnnouncementResponse
+--
+--         , responseSendInvitation $
+--             newSendInvitationResponse
+--
+--         , responseStartDeviceSync $
+--             newStartDeviceSyncResponse
+--
+--         , responseStartSmartHomeApplianceDiscovery $
+--             newStartSmartHomeApplianceDiscoveryResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAddressBook $
+--             newUpdateAddressBookResponse
+--
+--         , responseUpdateBusinessReportSchedule $
+--             newUpdateBusinessReportScheduleResponse
+--
+--         , responseUpdateConferenceProvider $
+--             newUpdateConferenceProviderResponse
+--
+--         , responseUpdateContact $
+--             newUpdateContactResponse
+--
+--         , responseUpdateDevice $
+--             newUpdateDeviceResponse
+--
+--         , responseUpdateGateway $
+--             newUpdateGatewayResponse
+--
+--         , responseUpdateGatewayGroup $
+--             newUpdateGatewayGroupResponse
+--
+--         , responseUpdateNetworkProfile $
+--             newUpdateNetworkProfileResponse
+--
+--         , responseUpdateProfile $
+--             newUpdateProfileResponse
+--
+--         , responseUpdateRoom $
+--             newUpdateRoomResponse
+--
+--         , responseUpdateSkillGroup $
+--             newUpdateSkillGroupResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestApproveSkill :: ApproveSkill -> TestTree
+requestApproveSkill =
+  req
+    "ApproveSkill"
+    "fixture/ApproveSkill.yaml"
+
+requestAssociateContactWithAddressBook :: AssociateContactWithAddressBook -> TestTree
+requestAssociateContactWithAddressBook =
+  req
+    "AssociateContactWithAddressBook"
+    "fixture/AssociateContactWithAddressBook.yaml"
+
+requestAssociateDeviceWithNetworkProfile :: AssociateDeviceWithNetworkProfile -> TestTree
+requestAssociateDeviceWithNetworkProfile =
+  req
+    "AssociateDeviceWithNetworkProfile"
+    "fixture/AssociateDeviceWithNetworkProfile.yaml"
+
+requestAssociateDeviceWithRoom :: AssociateDeviceWithRoom -> TestTree
+requestAssociateDeviceWithRoom =
+  req
+    "AssociateDeviceWithRoom"
+    "fixture/AssociateDeviceWithRoom.yaml"
+
+requestAssociateSkillGroupWithRoom :: AssociateSkillGroupWithRoom -> TestTree
+requestAssociateSkillGroupWithRoom =
+  req
+    "AssociateSkillGroupWithRoom"
+    "fixture/AssociateSkillGroupWithRoom.yaml"
+
+requestAssociateSkillWithSkillGroup :: AssociateSkillWithSkillGroup -> TestTree
+requestAssociateSkillWithSkillGroup =
+  req
+    "AssociateSkillWithSkillGroup"
+    "fixture/AssociateSkillWithSkillGroup.yaml"
+
+requestAssociateSkillWithUsers :: AssociateSkillWithUsers -> TestTree
+requestAssociateSkillWithUsers =
+  req
+    "AssociateSkillWithUsers"
+    "fixture/AssociateSkillWithUsers.yaml"
+
+requestCreateAddressBook :: CreateAddressBook -> TestTree
+requestCreateAddressBook =
+  req
+    "CreateAddressBook"
+    "fixture/CreateAddressBook.yaml"
+
+requestCreateBusinessReportSchedule :: CreateBusinessReportSchedule -> TestTree
+requestCreateBusinessReportSchedule =
+  req
+    "CreateBusinessReportSchedule"
+    "fixture/CreateBusinessReportSchedule.yaml"
+
+requestCreateConferenceProvider :: CreateConferenceProvider -> TestTree
+requestCreateConferenceProvider =
+  req
+    "CreateConferenceProvider"
+    "fixture/CreateConferenceProvider.yaml"
+
+requestCreateContact :: CreateContact -> TestTree
+requestCreateContact =
+  req
+    "CreateContact"
+    "fixture/CreateContact.yaml"
+
+requestCreateGatewayGroup :: CreateGatewayGroup -> TestTree
+requestCreateGatewayGroup =
+  req
+    "CreateGatewayGroup"
+    "fixture/CreateGatewayGroup.yaml"
+
+requestCreateNetworkProfile :: CreateNetworkProfile -> TestTree
+requestCreateNetworkProfile =
+  req
+    "CreateNetworkProfile"
+    "fixture/CreateNetworkProfile.yaml"
+
+requestCreateProfile :: CreateProfile -> TestTree
+requestCreateProfile =
+  req
+    "CreateProfile"
+    "fixture/CreateProfile.yaml"
+
+requestCreateRoom :: CreateRoom -> TestTree
+requestCreateRoom =
+  req
+    "CreateRoom"
+    "fixture/CreateRoom.yaml"
+
+requestCreateSkillGroup :: CreateSkillGroup -> TestTree
+requestCreateSkillGroup =
+  req
+    "CreateSkillGroup"
+    "fixture/CreateSkillGroup.yaml"
+
+requestCreateUser :: CreateUser -> TestTree
+requestCreateUser =
+  req
+    "CreateUser"
+    "fixture/CreateUser.yaml"
+
+requestDeleteAddressBook :: DeleteAddressBook -> TestTree
+requestDeleteAddressBook =
+  req
+    "DeleteAddressBook"
+    "fixture/DeleteAddressBook.yaml"
+
+requestDeleteBusinessReportSchedule :: DeleteBusinessReportSchedule -> TestTree
+requestDeleteBusinessReportSchedule =
+  req
+    "DeleteBusinessReportSchedule"
+    "fixture/DeleteBusinessReportSchedule.yaml"
+
+requestDeleteConferenceProvider :: DeleteConferenceProvider -> TestTree
+requestDeleteConferenceProvider =
+  req
+    "DeleteConferenceProvider"
+    "fixture/DeleteConferenceProvider.yaml"
+
+requestDeleteContact :: DeleteContact -> TestTree
+requestDeleteContact =
+  req
+    "DeleteContact"
+    "fixture/DeleteContact.yaml"
+
+requestDeleteDevice :: DeleteDevice -> TestTree
+requestDeleteDevice =
+  req
+    "DeleteDevice"
+    "fixture/DeleteDevice.yaml"
+
+requestDeleteDeviceUsageData :: DeleteDeviceUsageData -> TestTree
+requestDeleteDeviceUsageData =
+  req
+    "DeleteDeviceUsageData"
+    "fixture/DeleteDeviceUsageData.yaml"
+
+requestDeleteGatewayGroup :: DeleteGatewayGroup -> TestTree
+requestDeleteGatewayGroup =
+  req
+    "DeleteGatewayGroup"
+    "fixture/DeleteGatewayGroup.yaml"
+
+requestDeleteNetworkProfile :: DeleteNetworkProfile -> TestTree
+requestDeleteNetworkProfile =
+  req
+    "DeleteNetworkProfile"
+    "fixture/DeleteNetworkProfile.yaml"
+
+requestDeleteProfile :: DeleteProfile -> TestTree
+requestDeleteProfile =
+  req
+    "DeleteProfile"
+    "fixture/DeleteProfile.yaml"
+
+requestDeleteRoom :: DeleteRoom -> TestTree
+requestDeleteRoom =
+  req
+    "DeleteRoom"
+    "fixture/DeleteRoom.yaml"
+
+requestDeleteRoomSkillParameter :: DeleteRoomSkillParameter -> TestTree
+requestDeleteRoomSkillParameter =
+  req
+    "DeleteRoomSkillParameter"
+    "fixture/DeleteRoomSkillParameter.yaml"
+
+requestDeleteSkillAuthorization :: DeleteSkillAuthorization -> TestTree
+requestDeleteSkillAuthorization =
+  req
+    "DeleteSkillAuthorization"
+    "fixture/DeleteSkillAuthorization.yaml"
+
+requestDeleteSkillGroup :: DeleteSkillGroup -> TestTree
+requestDeleteSkillGroup =
+  req
+    "DeleteSkillGroup"
+    "fixture/DeleteSkillGroup.yaml"
+
+requestDeleteUser :: DeleteUser -> TestTree
+requestDeleteUser =
+  req
+    "DeleteUser"
+    "fixture/DeleteUser.yaml"
+
+requestDisassociateContactFromAddressBook :: DisassociateContactFromAddressBook -> TestTree
+requestDisassociateContactFromAddressBook =
+  req
+    "DisassociateContactFromAddressBook"
+    "fixture/DisassociateContactFromAddressBook.yaml"
+
+requestDisassociateDeviceFromRoom :: DisassociateDeviceFromRoom -> TestTree
+requestDisassociateDeviceFromRoom =
+  req
+    "DisassociateDeviceFromRoom"
+    "fixture/DisassociateDeviceFromRoom.yaml"
+
+requestDisassociateSkillFromSkillGroup :: DisassociateSkillFromSkillGroup -> TestTree
+requestDisassociateSkillFromSkillGroup =
+  req
+    "DisassociateSkillFromSkillGroup"
+    "fixture/DisassociateSkillFromSkillGroup.yaml"
+
+requestDisassociateSkillFromUsers :: DisassociateSkillFromUsers -> TestTree
+requestDisassociateSkillFromUsers =
+  req
+    "DisassociateSkillFromUsers"
+    "fixture/DisassociateSkillFromUsers.yaml"
+
+requestDisassociateSkillGroupFromRoom :: DisassociateSkillGroupFromRoom -> TestTree
+requestDisassociateSkillGroupFromRoom =
+  req
+    "DisassociateSkillGroupFromRoom"
+    "fixture/DisassociateSkillGroupFromRoom.yaml"
+
+requestForgetSmartHomeAppliances :: ForgetSmartHomeAppliances -> TestTree
+requestForgetSmartHomeAppliances =
+  req
+    "ForgetSmartHomeAppliances"
+    "fixture/ForgetSmartHomeAppliances.yaml"
+
+requestGetAddressBook :: GetAddressBook -> TestTree
+requestGetAddressBook =
+  req
+    "GetAddressBook"
+    "fixture/GetAddressBook.yaml"
+
+requestGetConferencePreference :: GetConferencePreference -> TestTree
+requestGetConferencePreference =
+  req
+    "GetConferencePreference"
+    "fixture/GetConferencePreference.yaml"
+
+requestGetConferenceProvider :: GetConferenceProvider -> TestTree
+requestGetConferenceProvider =
+  req
+    "GetConferenceProvider"
+    "fixture/GetConferenceProvider.yaml"
+
+requestGetContact :: GetContact -> TestTree
+requestGetContact =
+  req
+    "GetContact"
+    "fixture/GetContact.yaml"
+
+requestGetDevice :: GetDevice -> TestTree
+requestGetDevice =
+  req
+    "GetDevice"
+    "fixture/GetDevice.yaml"
+
+requestGetGateway :: GetGateway -> TestTree
+requestGetGateway =
+  req
+    "GetGateway"
+    "fixture/GetGateway.yaml"
+
+requestGetGatewayGroup :: GetGatewayGroup -> TestTree
+requestGetGatewayGroup =
+  req
+    "GetGatewayGroup"
+    "fixture/GetGatewayGroup.yaml"
+
+requestGetInvitationConfiguration :: GetInvitationConfiguration -> TestTree
+requestGetInvitationConfiguration =
+  req
+    "GetInvitationConfiguration"
+    "fixture/GetInvitationConfiguration.yaml"
+
+requestGetNetworkProfile :: GetNetworkProfile -> TestTree
+requestGetNetworkProfile =
+  req
+    "GetNetworkProfile"
+    "fixture/GetNetworkProfile.yaml"
+
+requestGetProfile :: GetProfile -> TestTree
+requestGetProfile =
+  req
+    "GetProfile"
+    "fixture/GetProfile.yaml"
+
+requestGetRoom :: GetRoom -> TestTree
+requestGetRoom =
+  req
+    "GetRoom"
+    "fixture/GetRoom.yaml"
+
+requestGetRoomSkillParameter :: GetRoomSkillParameter -> TestTree
+requestGetRoomSkillParameter =
+  req
+    "GetRoomSkillParameter"
+    "fixture/GetRoomSkillParameter.yaml"
+
+requestGetSkillGroup :: GetSkillGroup -> TestTree
+requestGetSkillGroup =
+  req
+    "GetSkillGroup"
+    "fixture/GetSkillGroup.yaml"
+
+requestListBusinessReportSchedules :: ListBusinessReportSchedules -> TestTree
+requestListBusinessReportSchedules =
+  req
+    "ListBusinessReportSchedules"
+    "fixture/ListBusinessReportSchedules.yaml"
+
+requestListConferenceProviders :: ListConferenceProviders -> TestTree
+requestListConferenceProviders =
+  req
+    "ListConferenceProviders"
+    "fixture/ListConferenceProviders.yaml"
+
+requestListDeviceEvents :: ListDeviceEvents -> TestTree
+requestListDeviceEvents =
+  req
+    "ListDeviceEvents"
+    "fixture/ListDeviceEvents.yaml"
+
+requestListGatewayGroups :: ListGatewayGroups -> TestTree
+requestListGatewayGroups =
+  req
+    "ListGatewayGroups"
+    "fixture/ListGatewayGroups.yaml"
+
+requestListGateways :: ListGateways -> TestTree
+requestListGateways =
+  req
+    "ListGateways"
+    "fixture/ListGateways.yaml"
+
+requestListSkills :: ListSkills -> TestTree
+requestListSkills =
+  req
+    "ListSkills"
+    "fixture/ListSkills.yaml"
+
+requestListSkillsStoreCategories :: ListSkillsStoreCategories -> TestTree
+requestListSkillsStoreCategories =
+  req
+    "ListSkillsStoreCategories"
+    "fixture/ListSkillsStoreCategories.yaml"
+
+requestListSkillsStoreSkillsByCategory :: ListSkillsStoreSkillsByCategory -> TestTree
+requestListSkillsStoreSkillsByCategory =
+  req
+    "ListSkillsStoreSkillsByCategory"
+    "fixture/ListSkillsStoreSkillsByCategory.yaml"
+
+requestListSmartHomeAppliances :: ListSmartHomeAppliances -> TestTree
+requestListSmartHomeAppliances =
+  req
+    "ListSmartHomeAppliances"
+    "fixture/ListSmartHomeAppliances.yaml"
+
+requestListTags :: ListTags -> TestTree
+requestListTags =
+  req
+    "ListTags"
+    "fixture/ListTags.yaml"
+
+requestPutConferencePreference :: PutConferencePreference -> TestTree
+requestPutConferencePreference =
+  req
+    "PutConferencePreference"
+    "fixture/PutConferencePreference.yaml"
+
+requestPutInvitationConfiguration :: PutInvitationConfiguration -> TestTree
+requestPutInvitationConfiguration =
+  req
+    "PutInvitationConfiguration"
+    "fixture/PutInvitationConfiguration.yaml"
+
+requestPutRoomSkillParameter :: PutRoomSkillParameter -> TestTree
+requestPutRoomSkillParameter =
+  req
+    "PutRoomSkillParameter"
+    "fixture/PutRoomSkillParameter.yaml"
+
+requestPutSkillAuthorization :: PutSkillAuthorization -> TestTree
+requestPutSkillAuthorization =
+  req
+    "PutSkillAuthorization"
+    "fixture/PutSkillAuthorization.yaml"
+
+requestRegisterAVSDevice :: RegisterAVSDevice -> TestTree
+requestRegisterAVSDevice =
+  req
+    "RegisterAVSDevice"
+    "fixture/RegisterAVSDevice.yaml"
+
+requestRejectSkill :: RejectSkill -> TestTree
+requestRejectSkill =
+  req
+    "RejectSkill"
+    "fixture/RejectSkill.yaml"
+
+requestResolveRoom :: ResolveRoom -> TestTree
+requestResolveRoom =
+  req
+    "ResolveRoom"
+    "fixture/ResolveRoom.yaml"
+
+requestRevokeInvitation :: RevokeInvitation -> TestTree
+requestRevokeInvitation =
+  req
+    "RevokeInvitation"
+    "fixture/RevokeInvitation.yaml"
+
+requestSearchAddressBooks :: SearchAddressBooks -> TestTree
+requestSearchAddressBooks =
+  req
+    "SearchAddressBooks"
+    "fixture/SearchAddressBooks.yaml"
+
+requestSearchContacts :: SearchContacts -> TestTree
+requestSearchContacts =
+  req
+    "SearchContacts"
+    "fixture/SearchContacts.yaml"
+
+requestSearchDevices :: SearchDevices -> TestTree
+requestSearchDevices =
+  req
+    "SearchDevices"
+    "fixture/SearchDevices.yaml"
+
+requestSearchNetworkProfiles :: SearchNetworkProfiles -> TestTree
+requestSearchNetworkProfiles =
+  req
+    "SearchNetworkProfiles"
+    "fixture/SearchNetworkProfiles.yaml"
+
+requestSearchProfiles :: SearchProfiles -> TestTree
+requestSearchProfiles =
+  req
+    "SearchProfiles"
+    "fixture/SearchProfiles.yaml"
+
+requestSearchRooms :: SearchRooms -> TestTree
+requestSearchRooms =
+  req
+    "SearchRooms"
+    "fixture/SearchRooms.yaml"
+
+requestSearchSkillGroups :: SearchSkillGroups -> TestTree
+requestSearchSkillGroups =
+  req
+    "SearchSkillGroups"
+    "fixture/SearchSkillGroups.yaml"
+
+requestSearchUsers :: SearchUsers -> TestTree
+requestSearchUsers =
+  req
+    "SearchUsers"
+    "fixture/SearchUsers.yaml"
+
+requestSendAnnouncement :: SendAnnouncement -> TestTree
+requestSendAnnouncement =
+  req
+    "SendAnnouncement"
+    "fixture/SendAnnouncement.yaml"
+
+requestSendInvitation :: SendInvitation -> TestTree
+requestSendInvitation =
+  req
+    "SendInvitation"
+    "fixture/SendInvitation.yaml"
+
+requestStartDeviceSync :: StartDeviceSync -> TestTree
+requestStartDeviceSync =
+  req
+    "StartDeviceSync"
+    "fixture/StartDeviceSync.yaml"
+
+requestStartSmartHomeApplianceDiscovery :: StartSmartHomeApplianceDiscovery -> TestTree
+requestStartSmartHomeApplianceDiscovery =
+  req
+    "StartSmartHomeApplianceDiscovery"
+    "fixture/StartSmartHomeApplianceDiscovery.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAddressBook :: UpdateAddressBook -> TestTree
+requestUpdateAddressBook =
+  req
+    "UpdateAddressBook"
+    "fixture/UpdateAddressBook.yaml"
+
+requestUpdateBusinessReportSchedule :: UpdateBusinessReportSchedule -> TestTree
+requestUpdateBusinessReportSchedule =
+  req
+    "UpdateBusinessReportSchedule"
+    "fixture/UpdateBusinessReportSchedule.yaml"
+
+requestUpdateConferenceProvider :: UpdateConferenceProvider -> TestTree
+requestUpdateConferenceProvider =
+  req
+    "UpdateConferenceProvider"
+    "fixture/UpdateConferenceProvider.yaml"
+
+requestUpdateContact :: UpdateContact -> TestTree
+requestUpdateContact =
+  req
+    "UpdateContact"
+    "fixture/UpdateContact.yaml"
+
+requestUpdateDevice :: UpdateDevice -> TestTree
+requestUpdateDevice =
+  req
+    "UpdateDevice"
+    "fixture/UpdateDevice.yaml"
+
+requestUpdateGateway :: UpdateGateway -> TestTree
+requestUpdateGateway =
+  req
+    "UpdateGateway"
+    "fixture/UpdateGateway.yaml"
+
+requestUpdateGatewayGroup :: UpdateGatewayGroup -> TestTree
+requestUpdateGatewayGroup =
+  req
+    "UpdateGatewayGroup"
+    "fixture/UpdateGatewayGroup.yaml"
+
+requestUpdateNetworkProfile :: UpdateNetworkProfile -> TestTree
+requestUpdateNetworkProfile =
+  req
+    "UpdateNetworkProfile"
+    "fixture/UpdateNetworkProfile.yaml"
+
+requestUpdateProfile :: UpdateProfile -> TestTree
+requestUpdateProfile =
+  req
+    "UpdateProfile"
+    "fixture/UpdateProfile.yaml"
+
+requestUpdateRoom :: UpdateRoom -> TestTree
+requestUpdateRoom =
+  req
+    "UpdateRoom"
+    "fixture/UpdateRoom.yaml"
+
+requestUpdateSkillGroup :: UpdateSkillGroup -> TestTree
+requestUpdateSkillGroup =
+  req
+    "UpdateSkillGroup"
+    "fixture/UpdateSkillGroup.yaml"
+
+-- Responses
+
+responseApproveSkill :: ApproveSkillResponse -> TestTree
+responseApproveSkill =
+  res
+    "ApproveSkillResponse"
+    "fixture/ApproveSkillResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ApproveSkill)
+
+responseAssociateContactWithAddressBook :: AssociateContactWithAddressBookResponse -> TestTree
+responseAssociateContactWithAddressBook =
+  res
+    "AssociateContactWithAddressBookResponse"
+    "fixture/AssociateContactWithAddressBookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateContactWithAddressBook)
+
+responseAssociateDeviceWithNetworkProfile :: AssociateDeviceWithNetworkProfileResponse -> TestTree
+responseAssociateDeviceWithNetworkProfile =
+  res
+    "AssociateDeviceWithNetworkProfileResponse"
+    "fixture/AssociateDeviceWithNetworkProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateDeviceWithNetworkProfile)
+
+responseAssociateDeviceWithRoom :: AssociateDeviceWithRoomResponse -> TestTree
+responseAssociateDeviceWithRoom =
+  res
+    "AssociateDeviceWithRoomResponse"
+    "fixture/AssociateDeviceWithRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateDeviceWithRoom)
+
+responseAssociateSkillGroupWithRoom :: AssociateSkillGroupWithRoomResponse -> TestTree
+responseAssociateSkillGroupWithRoom =
+  res
+    "AssociateSkillGroupWithRoomResponse"
+    "fixture/AssociateSkillGroupWithRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateSkillGroupWithRoom)
+
+responseAssociateSkillWithSkillGroup :: AssociateSkillWithSkillGroupResponse -> TestTree
+responseAssociateSkillWithSkillGroup =
+  res
+    "AssociateSkillWithSkillGroupResponse"
+    "fixture/AssociateSkillWithSkillGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateSkillWithSkillGroup)
+
+responseAssociateSkillWithUsers :: AssociateSkillWithUsersResponse -> TestTree
+responseAssociateSkillWithUsers =
+  res
+    "AssociateSkillWithUsersResponse"
+    "fixture/AssociateSkillWithUsersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateSkillWithUsers)
+
+responseCreateAddressBook :: CreateAddressBookResponse -> TestTree
+responseCreateAddressBook =
+  res
+    "CreateAddressBookResponse"
+    "fixture/CreateAddressBookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAddressBook)
+
+responseCreateBusinessReportSchedule :: CreateBusinessReportScheduleResponse -> TestTree
+responseCreateBusinessReportSchedule =
+  res
+    "CreateBusinessReportScheduleResponse"
+    "fixture/CreateBusinessReportScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateBusinessReportSchedule)
+
+responseCreateConferenceProvider :: CreateConferenceProviderResponse -> TestTree
+responseCreateConferenceProvider =
+  res
+    "CreateConferenceProviderResponse"
+    "fixture/CreateConferenceProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateConferenceProvider)
+
+responseCreateContact :: CreateContactResponse -> TestTree
+responseCreateContact =
+  res
+    "CreateContactResponse"
+    "fixture/CreateContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateContact)
+
+responseCreateGatewayGroup :: CreateGatewayGroupResponse -> TestTree
+responseCreateGatewayGroup =
+  res
+    "CreateGatewayGroupResponse"
+    "fixture/CreateGatewayGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateGatewayGroup)
+
+responseCreateNetworkProfile :: CreateNetworkProfileResponse -> TestTree
+responseCreateNetworkProfile =
+  res
+    "CreateNetworkProfileResponse"
+    "fixture/CreateNetworkProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetworkProfile)
+
+responseCreateProfile :: CreateProfileResponse -> TestTree
+responseCreateProfile =
+  res
+    "CreateProfileResponse"
+    "fixture/CreateProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateProfile)
+
+responseCreateRoom :: CreateRoomResponse -> TestTree
+responseCreateRoom =
+  res
+    "CreateRoomResponse"
+    "fixture/CreateRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRoom)
+
+responseCreateSkillGroup :: CreateSkillGroupResponse -> TestTree
+responseCreateSkillGroup =
+  res
+    "CreateSkillGroupResponse"
+    "fixture/CreateSkillGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSkillGroup)
+
+responseCreateUser :: CreateUserResponse -> TestTree
+responseCreateUser =
+  res
+    "CreateUserResponse"
+    "fixture/CreateUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateUser)
+
+responseDeleteAddressBook :: DeleteAddressBookResponse -> TestTree
+responseDeleteAddressBook =
+  res
+    "DeleteAddressBookResponse"
+    "fixture/DeleteAddressBookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAddressBook)
+
+responseDeleteBusinessReportSchedule :: DeleteBusinessReportScheduleResponse -> TestTree
+responseDeleteBusinessReportSchedule =
+  res
+    "DeleteBusinessReportScheduleResponse"
+    "fixture/DeleteBusinessReportScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteBusinessReportSchedule)
+
+responseDeleteConferenceProvider :: DeleteConferenceProviderResponse -> TestTree
+responseDeleteConferenceProvider =
+  res
+    "DeleteConferenceProviderResponse"
+    "fixture/DeleteConferenceProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteConferenceProvider)
+
+responseDeleteContact :: DeleteContactResponse -> TestTree
+responseDeleteContact =
+  res
+    "DeleteContactResponse"
+    "fixture/DeleteContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteContact)
+
+responseDeleteDevice :: DeleteDeviceResponse -> TestTree
+responseDeleteDevice =
+  res
+    "DeleteDeviceResponse"
+    "fixture/DeleteDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDevice)
+
+responseDeleteDeviceUsageData :: DeleteDeviceUsageDataResponse -> TestTree
+responseDeleteDeviceUsageData =
+  res
+    "DeleteDeviceUsageDataResponse"
+    "fixture/DeleteDeviceUsageDataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDeviceUsageData)
+
+responseDeleteGatewayGroup :: DeleteGatewayGroupResponse -> TestTree
+responseDeleteGatewayGroup =
+  res
+    "DeleteGatewayGroupResponse"
+    "fixture/DeleteGatewayGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteGatewayGroup)
+
+responseDeleteNetworkProfile :: DeleteNetworkProfileResponse -> TestTree
+responseDeleteNetworkProfile =
+  res
+    "DeleteNetworkProfileResponse"
+    "fixture/DeleteNetworkProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkProfile)
+
+responseDeleteProfile :: DeleteProfileResponse -> TestTree
+responseDeleteProfile =
+  res
+    "DeleteProfileResponse"
+    "fixture/DeleteProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteProfile)
+
+responseDeleteRoom :: DeleteRoomResponse -> TestTree
+responseDeleteRoom =
+  res
+    "DeleteRoomResponse"
+    "fixture/DeleteRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRoom)
+
+responseDeleteRoomSkillParameter :: DeleteRoomSkillParameterResponse -> TestTree
+responseDeleteRoomSkillParameter =
+  res
+    "DeleteRoomSkillParameterResponse"
+    "fixture/DeleteRoomSkillParameterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRoomSkillParameter)
+
+responseDeleteSkillAuthorization :: DeleteSkillAuthorizationResponse -> TestTree
+responseDeleteSkillAuthorization =
+  res
+    "DeleteSkillAuthorizationResponse"
+    "fixture/DeleteSkillAuthorizationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSkillAuthorization)
+
+responseDeleteSkillGroup :: DeleteSkillGroupResponse -> TestTree
+responseDeleteSkillGroup =
+  res
+    "DeleteSkillGroupResponse"
+    "fixture/DeleteSkillGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSkillGroup)
+
+responseDeleteUser :: DeleteUserResponse -> TestTree
+responseDeleteUser =
+  res
+    "DeleteUserResponse"
+    "fixture/DeleteUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteUser)
+
+responseDisassociateContactFromAddressBook :: DisassociateContactFromAddressBookResponse -> TestTree
+responseDisassociateContactFromAddressBook =
+  res
+    "DisassociateContactFromAddressBookResponse"
+    "fixture/DisassociateContactFromAddressBookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateContactFromAddressBook)
+
+responseDisassociateDeviceFromRoom :: DisassociateDeviceFromRoomResponse -> TestTree
+responseDisassociateDeviceFromRoom =
+  res
+    "DisassociateDeviceFromRoomResponse"
+    "fixture/DisassociateDeviceFromRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateDeviceFromRoom)
+
+responseDisassociateSkillFromSkillGroup :: DisassociateSkillFromSkillGroupResponse -> TestTree
+responseDisassociateSkillFromSkillGroup =
+  res
+    "DisassociateSkillFromSkillGroupResponse"
+    "fixture/DisassociateSkillFromSkillGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateSkillFromSkillGroup)
+
+responseDisassociateSkillFromUsers :: DisassociateSkillFromUsersResponse -> TestTree
+responseDisassociateSkillFromUsers =
+  res
+    "DisassociateSkillFromUsersResponse"
+    "fixture/DisassociateSkillFromUsersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateSkillFromUsers)
+
+responseDisassociateSkillGroupFromRoom :: DisassociateSkillGroupFromRoomResponse -> TestTree
+responseDisassociateSkillGroupFromRoom =
+  res
+    "DisassociateSkillGroupFromRoomResponse"
+    "fixture/DisassociateSkillGroupFromRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateSkillGroupFromRoom)
+
+responseForgetSmartHomeAppliances :: ForgetSmartHomeAppliancesResponse -> TestTree
+responseForgetSmartHomeAppliances =
+  res
+    "ForgetSmartHomeAppliancesResponse"
+    "fixture/ForgetSmartHomeAppliancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ForgetSmartHomeAppliances)
+
+responseGetAddressBook :: GetAddressBookResponse -> TestTree
+responseGetAddressBook =
+  res
+    "GetAddressBookResponse"
+    "fixture/GetAddressBookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAddressBook)
+
+responseGetConferencePreference :: GetConferencePreferenceResponse -> TestTree
+responseGetConferencePreference =
+  res
+    "GetConferencePreferenceResponse"
+    "fixture/GetConferencePreferenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConferencePreference)
+
+responseGetConferenceProvider :: GetConferenceProviderResponse -> TestTree
+responseGetConferenceProvider =
+  res
+    "GetConferenceProviderResponse"
+    "fixture/GetConferenceProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConferenceProvider)
+
+responseGetContact :: GetContactResponse -> TestTree
+responseGetContact =
+  res
+    "GetContactResponse"
+    "fixture/GetContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetContact)
+
+responseGetDevice :: GetDeviceResponse -> TestTree
+responseGetDevice =
+  res
+    "GetDeviceResponse"
+    "fixture/GetDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDevice)
+
+responseGetGateway :: GetGatewayResponse -> TestTree
+responseGetGateway =
+  res
+    "GetGatewayResponse"
+    "fixture/GetGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetGateway)
+
+responseGetGatewayGroup :: GetGatewayGroupResponse -> TestTree
+responseGetGatewayGroup =
+  res
+    "GetGatewayGroupResponse"
+    "fixture/GetGatewayGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetGatewayGroup)
+
+responseGetInvitationConfiguration :: GetInvitationConfigurationResponse -> TestTree
+responseGetInvitationConfiguration =
+  res
+    "GetInvitationConfigurationResponse"
+    "fixture/GetInvitationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetInvitationConfiguration)
+
+responseGetNetworkProfile :: GetNetworkProfileResponse -> TestTree
+responseGetNetworkProfile =
+  res
+    "GetNetworkProfileResponse"
+    "fixture/GetNetworkProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetNetworkProfile)
+
+responseGetProfile :: GetProfileResponse -> TestTree
+responseGetProfile =
+  res
+    "GetProfileResponse"
+    "fixture/GetProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetProfile)
+
+responseGetRoom :: GetRoomResponse -> TestTree
+responseGetRoom =
+  res
+    "GetRoomResponse"
+    "fixture/GetRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRoom)
+
+responseGetRoomSkillParameter :: GetRoomSkillParameterResponse -> TestTree
+responseGetRoomSkillParameter =
+  res
+    "GetRoomSkillParameterResponse"
+    "fixture/GetRoomSkillParameterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRoomSkillParameter)
+
+responseGetSkillGroup :: GetSkillGroupResponse -> TestTree
+responseGetSkillGroup =
+  res
+    "GetSkillGroupResponse"
+    "fixture/GetSkillGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSkillGroup)
+
+responseListBusinessReportSchedules :: ListBusinessReportSchedulesResponse -> TestTree
+responseListBusinessReportSchedules =
+  res
+    "ListBusinessReportSchedulesResponse"
+    "fixture/ListBusinessReportSchedulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListBusinessReportSchedules)
+
+responseListConferenceProviders :: ListConferenceProvidersResponse -> TestTree
+responseListConferenceProviders =
+  res
+    "ListConferenceProvidersResponse"
+    "fixture/ListConferenceProvidersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListConferenceProviders)
+
+responseListDeviceEvents :: ListDeviceEventsResponse -> TestTree
+responseListDeviceEvents =
+  res
+    "ListDeviceEventsResponse"
+    "fixture/ListDeviceEventsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDeviceEvents)
+
+responseListGatewayGroups :: ListGatewayGroupsResponse -> TestTree
+responseListGatewayGroups =
+  res
+    "ListGatewayGroupsResponse"
+    "fixture/ListGatewayGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListGatewayGroups)
+
+responseListGateways :: ListGatewaysResponse -> TestTree
+responseListGateways =
+  res
+    "ListGatewaysResponse"
+    "fixture/ListGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListGateways)
+
+responseListSkills :: ListSkillsResponse -> TestTree
+responseListSkills =
+  res
+    "ListSkillsResponse"
+    "fixture/ListSkillsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSkills)
+
+responseListSkillsStoreCategories :: ListSkillsStoreCategoriesResponse -> TestTree
+responseListSkillsStoreCategories =
+  res
+    "ListSkillsStoreCategoriesResponse"
+    "fixture/ListSkillsStoreCategoriesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSkillsStoreCategories)
+
+responseListSkillsStoreSkillsByCategory :: ListSkillsStoreSkillsByCategoryResponse -> TestTree
+responseListSkillsStoreSkillsByCategory =
+  res
+    "ListSkillsStoreSkillsByCategoryResponse"
+    "fixture/ListSkillsStoreSkillsByCategoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSkillsStoreSkillsByCategory)
+
+responseListSmartHomeAppliances :: ListSmartHomeAppliancesResponse -> TestTree
+responseListSmartHomeAppliances =
+  res
+    "ListSmartHomeAppliancesResponse"
+    "fixture/ListSmartHomeAppliancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSmartHomeAppliances)
+
+responseListTags :: ListTagsResponse -> TestTree
+responseListTags =
+  res
+    "ListTagsResponse"
+    "fixture/ListTagsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTags)
+
+responsePutConferencePreference :: PutConferencePreferenceResponse -> TestTree
+responsePutConferencePreference =
+  res
+    "PutConferencePreferenceResponse"
+    "fixture/PutConferencePreferenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutConferencePreference)
+
+responsePutInvitationConfiguration :: PutInvitationConfigurationResponse -> TestTree
+responsePutInvitationConfiguration =
+  res
+    "PutInvitationConfigurationResponse"
+    "fixture/PutInvitationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutInvitationConfiguration)
+
+responsePutRoomSkillParameter :: PutRoomSkillParameterResponse -> TestTree
+responsePutRoomSkillParameter =
+  res
+    "PutRoomSkillParameterResponse"
+    "fixture/PutRoomSkillParameterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutRoomSkillParameter)
+
+responsePutSkillAuthorization :: PutSkillAuthorizationResponse -> TestTree
+responsePutSkillAuthorization =
+  res
+    "PutSkillAuthorizationResponse"
+    "fixture/PutSkillAuthorizationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutSkillAuthorization)
+
+responseRegisterAVSDevice :: RegisterAVSDeviceResponse -> TestTree
+responseRegisterAVSDevice =
+  res
+    "RegisterAVSDeviceResponse"
+    "fixture/RegisterAVSDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterAVSDevice)
+
+responseRejectSkill :: RejectSkillResponse -> TestTree
+responseRejectSkill =
+  res
+    "RejectSkillResponse"
+    "fixture/RejectSkillResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RejectSkill)
+
+responseResolveRoom :: ResolveRoomResponse -> TestTree
+responseResolveRoom =
+  res
+    "ResolveRoomResponse"
+    "fixture/ResolveRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResolveRoom)
+
+responseRevokeInvitation :: RevokeInvitationResponse -> TestTree
+responseRevokeInvitation =
+  res
+    "RevokeInvitationResponse"
+    "fixture/RevokeInvitationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeInvitation)
+
+responseSearchAddressBooks :: SearchAddressBooksResponse -> TestTree
+responseSearchAddressBooks =
+  res
+    "SearchAddressBooksResponse"
+    "fixture/SearchAddressBooksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchAddressBooks)
+
+responseSearchContacts :: SearchContactsResponse -> TestTree
+responseSearchContacts =
+  res
+    "SearchContactsResponse"
+    "fixture/SearchContactsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchContacts)
+
+responseSearchDevices :: SearchDevicesResponse -> TestTree
+responseSearchDevices =
+  res
+    "SearchDevicesResponse"
+    "fixture/SearchDevicesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchDevices)
+
+responseSearchNetworkProfiles :: SearchNetworkProfilesResponse -> TestTree
+responseSearchNetworkProfiles =
+  res
+    "SearchNetworkProfilesResponse"
+    "fixture/SearchNetworkProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchNetworkProfiles)
+
+responseSearchProfiles :: SearchProfilesResponse -> TestTree
+responseSearchProfiles =
+  res
+    "SearchProfilesResponse"
+    "fixture/SearchProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchProfiles)
+
+responseSearchRooms :: SearchRoomsResponse -> TestTree
+responseSearchRooms =
+  res
+    "SearchRoomsResponse"
+    "fixture/SearchRoomsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchRooms)
+
+responseSearchSkillGroups :: SearchSkillGroupsResponse -> TestTree
+responseSearchSkillGroups =
+  res
+    "SearchSkillGroupsResponse"
+    "fixture/SearchSkillGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchSkillGroups)
+
+responseSearchUsers :: SearchUsersResponse -> TestTree
+responseSearchUsers =
+  res
+    "SearchUsersResponse"
+    "fixture/SearchUsersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchUsers)
+
+responseSendAnnouncement :: SendAnnouncementResponse -> TestTree
+responseSendAnnouncement =
+  res
+    "SendAnnouncementResponse"
+    "fixture/SendAnnouncementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendAnnouncement)
+
+responseSendInvitation :: SendInvitationResponse -> TestTree
+responseSendInvitation =
+  res
+    "SendInvitationResponse"
+    "fixture/SendInvitationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendInvitation)
+
+responseStartDeviceSync :: StartDeviceSyncResponse -> TestTree
+responseStartDeviceSync =
+  res
+    "StartDeviceSyncResponse"
+    "fixture/StartDeviceSyncResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartDeviceSync)
+
+responseStartSmartHomeApplianceDiscovery :: StartSmartHomeApplianceDiscoveryResponse -> TestTree
+responseStartSmartHomeApplianceDiscovery =
+  res
+    "StartSmartHomeApplianceDiscoveryResponse"
+    "fixture/StartSmartHomeApplianceDiscoveryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartSmartHomeApplianceDiscovery)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateAddressBook :: UpdateAddressBookResponse -> TestTree
+responseUpdateAddressBook =
+  res
+    "UpdateAddressBookResponse"
+    "fixture/UpdateAddressBookResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAddressBook)
+
+responseUpdateBusinessReportSchedule :: UpdateBusinessReportScheduleResponse -> TestTree
+responseUpdateBusinessReportSchedule =
+  res
+    "UpdateBusinessReportScheduleResponse"
+    "fixture/UpdateBusinessReportScheduleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateBusinessReportSchedule)
+
+responseUpdateConferenceProvider :: UpdateConferenceProviderResponse -> TestTree
+responseUpdateConferenceProvider =
+  res
+    "UpdateConferenceProviderResponse"
+    "fixture/UpdateConferenceProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateConferenceProvider)
+
+responseUpdateContact :: UpdateContactResponse -> TestTree
+responseUpdateContact =
+  res
+    "UpdateContactResponse"
+    "fixture/UpdateContactResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateContact)
+
+responseUpdateDevice :: UpdateDeviceResponse -> TestTree
+responseUpdateDevice =
+  res
+    "UpdateDeviceResponse"
+    "fixture/UpdateDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDevice)
+
+responseUpdateGateway :: UpdateGatewayResponse -> TestTree
+responseUpdateGateway =
+  res
+    "UpdateGatewayResponse"
+    "fixture/UpdateGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateGateway)
+
+responseUpdateGatewayGroup :: UpdateGatewayGroupResponse -> TestTree
+responseUpdateGatewayGroup =
+  res
+    "UpdateGatewayGroupResponse"
+    "fixture/UpdateGatewayGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateGatewayGroup)
+
+responseUpdateNetworkProfile :: UpdateNetworkProfileResponse -> TestTree
+responseUpdateNetworkProfile =
+  res
+    "UpdateNetworkProfileResponse"
+    "fixture/UpdateNetworkProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateNetworkProfile)
+
+responseUpdateProfile :: UpdateProfileResponse -> TestTree
+responseUpdateProfile =
+  res
+    "UpdateProfileResponse"
+    "fixture/UpdateProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateProfile)
+
+responseUpdateRoom :: UpdateRoomResponse -> TestTree
+responseUpdateRoom =
+  res
+    "UpdateRoomResponse"
+    "fixture/UpdateRoomResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRoom)
+
+responseUpdateSkillGroup :: UpdateSkillGroupResponse -> TestTree
+responseUpdateSkillGroup =
+  res
+    "UpdateSkillGroupResponse"
+    "fixture/UpdateSkillGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSkillGroup)
