diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon IoT Wireless SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-11-22@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-iotwireless)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/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
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.IoTWireless](http://hackage.haskell.org/package/amazonka-iotwireless/docs/Amazonka-IoTWireless.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-iotwireless` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-iotwireless.cabal b/amazonka-iotwireless.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-iotwireless.cabal
@@ -0,0 +1,312 @@
+cabal-version:      2.2
+name:               amazonka-iotwireless
+version:            2.0
+synopsis:           Amazon IoT Wireless 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:
+  Derived from API version @2020-11-22@ 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.IoTWireless.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.IoTWireless" 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-iotwireless
+
+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:
+    Amazonka.IoTWireless
+    Amazonka.IoTWireless.AssociateAwsAccountWithPartnerAccount
+    Amazonka.IoTWireless.AssociateMulticastGroupWithFuotaTask
+    Amazonka.IoTWireless.AssociateWirelessDeviceWithFuotaTask
+    Amazonka.IoTWireless.AssociateWirelessDeviceWithMulticastGroup
+    Amazonka.IoTWireless.AssociateWirelessDeviceWithThing
+    Amazonka.IoTWireless.AssociateWirelessGatewayWithCertificate
+    Amazonka.IoTWireless.AssociateWirelessGatewayWithThing
+    Amazonka.IoTWireless.CancelMulticastGroupSession
+    Amazonka.IoTWireless.CreateDestination
+    Amazonka.IoTWireless.CreateDeviceProfile
+    Amazonka.IoTWireless.CreateFuotaTask
+    Amazonka.IoTWireless.CreateMulticastGroup
+    Amazonka.IoTWireless.CreateNetworkAnalyzerConfiguration
+    Amazonka.IoTWireless.CreateServiceProfile
+    Amazonka.IoTWireless.CreateWirelessDevice
+    Amazonka.IoTWireless.CreateWirelessGateway
+    Amazonka.IoTWireless.CreateWirelessGatewayTask
+    Amazonka.IoTWireless.CreateWirelessGatewayTaskDefinition
+    Amazonka.IoTWireless.DeleteDestination
+    Amazonka.IoTWireless.DeleteDeviceProfile
+    Amazonka.IoTWireless.DeleteFuotaTask
+    Amazonka.IoTWireless.DeleteMulticastGroup
+    Amazonka.IoTWireless.DeleteNetworkAnalyzerConfiguration
+    Amazonka.IoTWireless.DeleteQueuedMessages
+    Amazonka.IoTWireless.DeleteServiceProfile
+    Amazonka.IoTWireless.DeleteWirelessDevice
+    Amazonka.IoTWireless.DeleteWirelessGateway
+    Amazonka.IoTWireless.DeleteWirelessGatewayTask
+    Amazonka.IoTWireless.DeleteWirelessGatewayTaskDefinition
+    Amazonka.IoTWireless.DisassociateAwsAccountFromPartnerAccount
+    Amazonka.IoTWireless.DisassociateMulticastGroupFromFuotaTask
+    Amazonka.IoTWireless.DisassociateWirelessDeviceFromFuotaTask
+    Amazonka.IoTWireless.DisassociateWirelessDeviceFromMulticastGroup
+    Amazonka.IoTWireless.DisassociateWirelessDeviceFromThing
+    Amazonka.IoTWireless.DisassociateWirelessGatewayFromCertificate
+    Amazonka.IoTWireless.DisassociateWirelessGatewayFromThing
+    Amazonka.IoTWireless.GetDestination
+    Amazonka.IoTWireless.GetDeviceProfile
+    Amazonka.IoTWireless.GetEventConfigurationByResourceTypes
+    Amazonka.IoTWireless.GetFuotaTask
+    Amazonka.IoTWireless.GetLogLevelsByResourceTypes
+    Amazonka.IoTWireless.GetMulticastGroup
+    Amazonka.IoTWireless.GetMulticastGroupSession
+    Amazonka.IoTWireless.GetNetworkAnalyzerConfiguration
+    Amazonka.IoTWireless.GetPartnerAccount
+    Amazonka.IoTWireless.GetPositionEstimate
+    Amazonka.IoTWireless.GetResourceEventConfiguration
+    Amazonka.IoTWireless.GetResourceLogLevel
+    Amazonka.IoTWireless.GetResourcePosition
+    Amazonka.IoTWireless.GetServiceEndpoint
+    Amazonka.IoTWireless.GetServiceProfile
+    Amazonka.IoTWireless.GetWirelessDevice
+    Amazonka.IoTWireless.GetWirelessDeviceStatistics
+    Amazonka.IoTWireless.GetWirelessGateway
+    Amazonka.IoTWireless.GetWirelessGatewayCertificate
+    Amazonka.IoTWireless.GetWirelessGatewayFirmwareInformation
+    Amazonka.IoTWireless.GetWirelessGatewayStatistics
+    Amazonka.IoTWireless.GetWirelessGatewayTask
+    Amazonka.IoTWireless.GetWirelessGatewayTaskDefinition
+    Amazonka.IoTWireless.Lens
+    Amazonka.IoTWireless.ListDestinations
+    Amazonka.IoTWireless.ListDeviceProfiles
+    Amazonka.IoTWireless.ListEventConfigurations
+    Amazonka.IoTWireless.ListFuotaTasks
+    Amazonka.IoTWireless.ListMulticastGroups
+    Amazonka.IoTWireless.ListMulticastGroupsByFuotaTask
+    Amazonka.IoTWireless.ListNetworkAnalyzerConfigurations
+    Amazonka.IoTWireless.ListPartnerAccounts
+    Amazonka.IoTWireless.ListQueuedMessages
+    Amazonka.IoTWireless.ListServiceProfiles
+    Amazonka.IoTWireless.ListTagsForResource
+    Amazonka.IoTWireless.ListWirelessDevices
+    Amazonka.IoTWireless.ListWirelessGateways
+    Amazonka.IoTWireless.ListWirelessGatewayTaskDefinitions
+    Amazonka.IoTWireless.PutResourceLogLevel
+    Amazonka.IoTWireless.ResetAllResourceLogLevels
+    Amazonka.IoTWireless.ResetResourceLogLevel
+    Amazonka.IoTWireless.SendDataToMulticastGroup
+    Amazonka.IoTWireless.SendDataToWirelessDevice
+    Amazonka.IoTWireless.StartBulkAssociateWirelessDeviceWithMulticastGroup
+    Amazonka.IoTWireless.StartBulkDisassociateWirelessDeviceFromMulticastGroup
+    Amazonka.IoTWireless.StartFuotaTask
+    Amazonka.IoTWireless.StartMulticastGroupSession
+    Amazonka.IoTWireless.TagResource
+    Amazonka.IoTWireless.TestWirelessDevice
+    Amazonka.IoTWireless.Types
+    Amazonka.IoTWireless.Types.AbpV1_0_x
+    Amazonka.IoTWireless.Types.AbpV1_1
+    Amazonka.IoTWireless.Types.ApplicationConfig
+    Amazonka.IoTWireless.Types.ApplicationConfigType
+    Amazonka.IoTWireless.Types.BatteryLevel
+    Amazonka.IoTWireless.Types.Beaconing
+    Amazonka.IoTWireless.Types.CdmaLocalId
+    Amazonka.IoTWireless.Types.CdmaNmrObj
+    Amazonka.IoTWireless.Types.CdmaObj
+    Amazonka.IoTWireless.Types.CellTowers
+    Amazonka.IoTWireless.Types.CertificateList
+    Amazonka.IoTWireless.Types.ConnectionStatus
+    Amazonka.IoTWireless.Types.ConnectionStatusEventConfiguration
+    Amazonka.IoTWireless.Types.ConnectionStatusResourceTypeEventConfiguration
+    Amazonka.IoTWireless.Types.Destinations
+    Amazonka.IoTWireless.Types.DeviceProfile
+    Amazonka.IoTWireless.Types.DeviceRegistrationStateEventConfiguration
+    Amazonka.IoTWireless.Types.DeviceRegistrationStateResourceTypeEventConfiguration
+    Amazonka.IoTWireless.Types.DeviceState
+    Amazonka.IoTWireless.Types.DlClass
+    Amazonka.IoTWireless.Types.DownlinkMode
+    Amazonka.IoTWireless.Types.DownlinkQueueMessage
+    Amazonka.IoTWireless.Types.Event
+    Amazonka.IoTWireless.Types.EventConfigurationItem
+    Amazonka.IoTWireless.Types.EventNotificationItemConfigurations
+    Amazonka.IoTWireless.Types.EventNotificationPartnerType
+    Amazonka.IoTWireless.Types.EventNotificationResourceType
+    Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+    Amazonka.IoTWireless.Types.ExpressionType
+    Amazonka.IoTWireless.Types.FPorts
+    Amazonka.IoTWireless.Types.FuotaDeviceStatus
+    Amazonka.IoTWireless.Types.FuotaTask
+    Amazonka.IoTWireless.Types.FuotaTaskStatus
+    Amazonka.IoTWireless.Types.GatewayListItem
+    Amazonka.IoTWireless.Types.GlobalIdentity
+    Amazonka.IoTWireless.Types.Gnss
+    Amazonka.IoTWireless.Types.GsmLocalId
+    Amazonka.IoTWireless.Types.GsmNmrObj
+    Amazonka.IoTWireless.Types.GsmObj
+    Amazonka.IoTWireless.Types.IdentifierType
+    Amazonka.IoTWireless.Types.Ip
+    Amazonka.IoTWireless.Types.JoinEventConfiguration
+    Amazonka.IoTWireless.Types.JoinResourceTypeEventConfiguration
+    Amazonka.IoTWireless.Types.LogLevel
+    Amazonka.IoTWireless.Types.LoRaWANConnectionStatusEventNotificationConfigurations
+    Amazonka.IoTWireless.Types.LoRaWANConnectionStatusResourceTypeEventConfiguration
+    Amazonka.IoTWireless.Types.LoRaWANDevice
+    Amazonka.IoTWireless.Types.LoRaWANDeviceMetadata
+    Amazonka.IoTWireless.Types.LoRaWANDeviceProfile
+    Amazonka.IoTWireless.Types.LoRaWANFuotaTask
+    Amazonka.IoTWireless.Types.LoRaWANFuotaTaskGetInfo
+    Amazonka.IoTWireless.Types.LoRaWANGateway
+    Amazonka.IoTWireless.Types.LoRaWANGatewayCurrentVersion
+    Amazonka.IoTWireless.Types.LoRaWANGatewayMetadata
+    Amazonka.IoTWireless.Types.LoRaWANGatewayVersion
+    Amazonka.IoTWireless.Types.LoRaWANGetServiceProfileInfo
+    Amazonka.IoTWireless.Types.LoRaWANJoinEventNotificationConfigurations
+    Amazonka.IoTWireless.Types.LoRaWANJoinResourceTypeEventConfiguration
+    Amazonka.IoTWireless.Types.LoRaWANListDevice
+    Amazonka.IoTWireless.Types.LoRaWANMulticast
+    Amazonka.IoTWireless.Types.LoRaWANMulticastGet
+    Amazonka.IoTWireless.Types.LoRaWANMulticastMetadata
+    Amazonka.IoTWireless.Types.LoRaWANMulticastSession
+    Amazonka.IoTWireless.Types.LoRaWANSendDataToDevice
+    Amazonka.IoTWireless.Types.LoRaWANServiceProfile
+    Amazonka.IoTWireless.Types.LoRaWANStartFuotaTask
+    Amazonka.IoTWireless.Types.LoRaWANUpdateDevice
+    Amazonka.IoTWireless.Types.LoRaWANUpdateGatewayTaskCreate
+    Amazonka.IoTWireless.Types.LoRaWANUpdateGatewayTaskEntry
+    Amazonka.IoTWireless.Types.LteLocalId
+    Amazonka.IoTWireless.Types.LteNmrObj
+    Amazonka.IoTWireless.Types.LteObj
+    Amazonka.IoTWireless.Types.MessageDeliveryStatusEventConfiguration
+    Amazonka.IoTWireless.Types.MessageDeliveryStatusResourceTypeEventConfiguration
+    Amazonka.IoTWireless.Types.MessageType
+    Amazonka.IoTWireless.Types.MulticastGroup
+    Amazonka.IoTWireless.Types.MulticastGroupByFuotaTask
+    Amazonka.IoTWireless.Types.MulticastWirelessMetadata
+    Amazonka.IoTWireless.Types.NetworkAnalyzerConfigurations
+    Amazonka.IoTWireless.Types.OtaaV1_0_x
+    Amazonka.IoTWireless.Types.OtaaV1_1
+    Amazonka.IoTWireless.Types.ParticipatingGateways
+    Amazonka.IoTWireless.Types.PartnerType
+    Amazonka.IoTWireless.Types.Positioning
+    Amazonka.IoTWireless.Types.PositioningConfigStatus
+    Amazonka.IoTWireless.Types.PositionResourceType
+    Amazonka.IoTWireless.Types.ProximityEventConfiguration
+    Amazonka.IoTWireless.Types.ProximityResourceTypeEventConfiguration
+    Amazonka.IoTWireless.Types.ServiceProfile
+    Amazonka.IoTWireless.Types.SessionKeysAbpV1_0_x
+    Amazonka.IoTWireless.Types.SessionKeysAbpV1_1
+    Amazonka.IoTWireless.Types.SidewalkAccountInfo
+    Amazonka.IoTWireless.Types.SidewalkAccountInfoWithFingerprint
+    Amazonka.IoTWireless.Types.SidewalkDevice
+    Amazonka.IoTWireless.Types.SidewalkDeviceMetadata
+    Amazonka.IoTWireless.Types.SidewalkEventNotificationConfigurations
+    Amazonka.IoTWireless.Types.SidewalkListDevice
+    Amazonka.IoTWireless.Types.SidewalkResourceTypeEventConfiguration
+    Amazonka.IoTWireless.Types.SidewalkSendDataToDevice
+    Amazonka.IoTWireless.Types.SidewalkUpdateAccount
+    Amazonka.IoTWireless.Types.SigningAlg
+    Amazonka.IoTWireless.Types.SupportedRfRegion
+    Amazonka.IoTWireless.Types.Tag
+    Amazonka.IoTWireless.Types.TdscdmaLocalId
+    Amazonka.IoTWireless.Types.TdscdmaNmrObj
+    Amazonka.IoTWireless.Types.TdscdmaObj
+    Amazonka.IoTWireless.Types.TraceContent
+    Amazonka.IoTWireless.Types.UpdateAbpV1_0_x
+    Amazonka.IoTWireless.Types.UpdateAbpV1_1
+    Amazonka.IoTWireless.Types.UpdateFPorts
+    Amazonka.IoTWireless.Types.UpdateWirelessGatewayTaskCreate
+    Amazonka.IoTWireless.Types.UpdateWirelessGatewayTaskEntry
+    Amazonka.IoTWireless.Types.WcdmaLocalId
+    Amazonka.IoTWireless.Types.WcdmaNmrObj
+    Amazonka.IoTWireless.Types.WcdmaObj
+    Amazonka.IoTWireless.Types.WiFiAccessPoint
+    Amazonka.IoTWireless.Types.WirelessDeviceEvent
+    Amazonka.IoTWireless.Types.WirelessDeviceEventLogOption
+    Amazonka.IoTWireless.Types.WirelessDeviceFrameInfo
+    Amazonka.IoTWireless.Types.WirelessDeviceIdType
+    Amazonka.IoTWireless.Types.WirelessDeviceLogOption
+    Amazonka.IoTWireless.Types.WirelessDeviceStatistics
+    Amazonka.IoTWireless.Types.WirelessDeviceType
+    Amazonka.IoTWireless.Types.WirelessGatewayEvent
+    Amazonka.IoTWireless.Types.WirelessGatewayEventLogOption
+    Amazonka.IoTWireless.Types.WirelessGatewayIdType
+    Amazonka.IoTWireless.Types.WirelessGatewayLogOption
+    Amazonka.IoTWireless.Types.WirelessGatewayServiceType
+    Amazonka.IoTWireless.Types.WirelessGatewayStatistics
+    Amazonka.IoTWireless.Types.WirelessGatewayTaskDefinitionType
+    Amazonka.IoTWireless.Types.WirelessGatewayTaskStatus
+    Amazonka.IoTWireless.Types.WirelessGatewayType
+    Amazonka.IoTWireless.Types.WirelessMetadata
+    Amazonka.IoTWireless.UntagResource
+    Amazonka.IoTWireless.UpdateDestination
+    Amazonka.IoTWireless.UpdateEventConfigurationByResourceTypes
+    Amazonka.IoTWireless.UpdateFuotaTask
+    Amazonka.IoTWireless.UpdateLogLevelsByResourceTypes
+    Amazonka.IoTWireless.UpdateMulticastGroup
+    Amazonka.IoTWireless.UpdateNetworkAnalyzerConfiguration
+    Amazonka.IoTWireless.UpdatePartnerAccount
+    Amazonka.IoTWireless.UpdateResourceEventConfiguration
+    Amazonka.IoTWireless.UpdateResourcePosition
+    Amazonka.IoTWireless.UpdateWirelessDevice
+    Amazonka.IoTWireless.UpdateWirelessGateway
+    Amazonka.IoTWireless.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-iotwireless-test
+  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.Amazonka.Gen.IoTWireless
+    Test.Amazonka.IoTWireless
+    Test.Amazonka.IoTWireless.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-iotwireless
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateAwsAccountWithPartnerAccount.yaml b/fixture/AssociateAwsAccountWithPartnerAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateAwsAccountWithPartnerAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/AssociateAwsAccountWithPartnerAccountResponse.proto b/fixture/AssociateAwsAccountWithPartnerAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateAwsAccountWithPartnerAccountResponse.proto
diff --git a/fixture/AssociateMulticastGroupWithFuotaTask.yaml b/fixture/AssociateMulticastGroupWithFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateMulticastGroupWithFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/AssociateMulticastGroupWithFuotaTaskResponse.proto b/fixture/AssociateMulticastGroupWithFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateMulticastGroupWithFuotaTaskResponse.proto
diff --git a/fixture/AssociateWirelessDeviceWithFuotaTask.yaml b/fixture/AssociateWirelessDeviceWithFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessDeviceWithFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/AssociateWirelessDeviceWithFuotaTaskResponse.proto b/fixture/AssociateWirelessDeviceWithFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessDeviceWithFuotaTaskResponse.proto
diff --git a/fixture/AssociateWirelessDeviceWithMulticastGroup.yaml b/fixture/AssociateWirelessDeviceWithMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessDeviceWithMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/AssociateWirelessDeviceWithMulticastGroupResponse.proto b/fixture/AssociateWirelessDeviceWithMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessDeviceWithMulticastGroupResponse.proto
diff --git a/fixture/AssociateWirelessDeviceWithThing.yaml b/fixture/AssociateWirelessDeviceWithThing.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessDeviceWithThing.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/AssociateWirelessDeviceWithThingResponse.proto b/fixture/AssociateWirelessDeviceWithThingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessDeviceWithThingResponse.proto
diff --git a/fixture/AssociateWirelessGatewayWithCertificate.yaml b/fixture/AssociateWirelessGatewayWithCertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessGatewayWithCertificate.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/AssociateWirelessGatewayWithCertificateResponse.proto b/fixture/AssociateWirelessGatewayWithCertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessGatewayWithCertificateResponse.proto
diff --git a/fixture/AssociateWirelessGatewayWithThing.yaml b/fixture/AssociateWirelessGatewayWithThing.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessGatewayWithThing.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/AssociateWirelessGatewayWithThingResponse.proto b/fixture/AssociateWirelessGatewayWithThingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateWirelessGatewayWithThingResponse.proto
diff --git a/fixture/CancelMulticastGroupSession.yaml b/fixture/CancelMulticastGroupSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelMulticastGroupSession.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CancelMulticastGroupSessionResponse.proto b/fixture/CancelMulticastGroupSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelMulticastGroupSessionResponse.proto
diff --git a/fixture/CreateDestination.yaml b/fixture/CreateDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateDestinationResponse.proto b/fixture/CreateDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDestinationResponse.proto
diff --git a/fixture/CreateDeviceProfile.yaml b/fixture/CreateDeviceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeviceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateDeviceProfileResponse.proto b/fixture/CreateDeviceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDeviceProfileResponse.proto
diff --git a/fixture/CreateFuotaTask.yaml b/fixture/CreateFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateFuotaTaskResponse.proto b/fixture/CreateFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFuotaTaskResponse.proto
diff --git a/fixture/CreateMulticastGroup.yaml b/fixture/CreateMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateMulticastGroupResponse.proto b/fixture/CreateMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMulticastGroupResponse.proto
diff --git a/fixture/CreateNetworkAnalyzerConfiguration.yaml b/fixture/CreateNetworkAnalyzerConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkAnalyzerConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateNetworkAnalyzerConfigurationResponse.proto b/fixture/CreateNetworkAnalyzerConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkAnalyzerConfigurationResponse.proto
diff --git a/fixture/CreateServiceProfile.yaml b/fixture/CreateServiceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateServiceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateServiceProfileResponse.proto b/fixture/CreateServiceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateServiceProfileResponse.proto
diff --git a/fixture/CreateWirelessDevice.yaml b/fixture/CreateWirelessDevice.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWirelessDevice.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateWirelessDeviceResponse.proto b/fixture/CreateWirelessDeviceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWirelessDeviceResponse.proto
diff --git a/fixture/CreateWirelessGateway.yaml b/fixture/CreateWirelessGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWirelessGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateWirelessGatewayResponse.proto b/fixture/CreateWirelessGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWirelessGatewayResponse.proto
diff --git a/fixture/CreateWirelessGatewayTask.yaml b/fixture/CreateWirelessGatewayTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWirelessGatewayTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateWirelessGatewayTaskDefinition.yaml b/fixture/CreateWirelessGatewayTaskDefinition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWirelessGatewayTaskDefinition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/CreateWirelessGatewayTaskDefinitionResponse.proto b/fixture/CreateWirelessGatewayTaskDefinitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWirelessGatewayTaskDefinitionResponse.proto
diff --git a/fixture/CreateWirelessGatewayTaskResponse.proto b/fixture/CreateWirelessGatewayTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWirelessGatewayTaskResponse.proto
diff --git a/fixture/DeleteDestination.yaml b/fixture/DeleteDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteDestinationResponse.proto b/fixture/DeleteDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDestinationResponse.proto
diff --git a/fixture/DeleteDeviceProfile.yaml b/fixture/DeleteDeviceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeviceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteDeviceProfileResponse.proto b/fixture/DeleteDeviceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDeviceProfileResponse.proto
diff --git a/fixture/DeleteFuotaTask.yaml b/fixture/DeleteFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteFuotaTaskResponse.proto b/fixture/DeleteFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFuotaTaskResponse.proto
diff --git a/fixture/DeleteMulticastGroup.yaml b/fixture/DeleteMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteMulticastGroupResponse.proto b/fixture/DeleteMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMulticastGroupResponse.proto
diff --git a/fixture/DeleteNetworkAnalyzerConfiguration.yaml b/fixture/DeleteNetworkAnalyzerConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkAnalyzerConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteNetworkAnalyzerConfigurationResponse.proto b/fixture/DeleteNetworkAnalyzerConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkAnalyzerConfigurationResponse.proto
diff --git a/fixture/DeleteQueuedMessages.yaml b/fixture/DeleteQueuedMessages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteQueuedMessages.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteQueuedMessagesResponse.proto b/fixture/DeleteQueuedMessagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteQueuedMessagesResponse.proto
diff --git a/fixture/DeleteServiceProfile.yaml b/fixture/DeleteServiceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteServiceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteServiceProfileResponse.proto b/fixture/DeleteServiceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteServiceProfileResponse.proto
diff --git a/fixture/DeleteWirelessDevice.yaml b/fixture/DeleteWirelessDevice.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWirelessDevice.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteWirelessDeviceResponse.proto b/fixture/DeleteWirelessDeviceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWirelessDeviceResponse.proto
diff --git a/fixture/DeleteWirelessGateway.yaml b/fixture/DeleteWirelessGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWirelessGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteWirelessGatewayResponse.proto b/fixture/DeleteWirelessGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWirelessGatewayResponse.proto
diff --git a/fixture/DeleteWirelessGatewayTask.yaml b/fixture/DeleteWirelessGatewayTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWirelessGatewayTask.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteWirelessGatewayTaskDefinition.yaml b/fixture/DeleteWirelessGatewayTaskDefinition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWirelessGatewayTaskDefinition.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DeleteWirelessGatewayTaskDefinitionResponse.proto b/fixture/DeleteWirelessGatewayTaskDefinitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWirelessGatewayTaskDefinitionResponse.proto
diff --git a/fixture/DeleteWirelessGatewayTaskResponse.proto b/fixture/DeleteWirelessGatewayTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWirelessGatewayTaskResponse.proto
diff --git a/fixture/DisassociateAwsAccountFromPartnerAccount.yaml b/fixture/DisassociateAwsAccountFromPartnerAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateAwsAccountFromPartnerAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DisassociateAwsAccountFromPartnerAccountResponse.proto b/fixture/DisassociateAwsAccountFromPartnerAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateAwsAccountFromPartnerAccountResponse.proto
diff --git a/fixture/DisassociateMulticastGroupFromFuotaTask.yaml b/fixture/DisassociateMulticastGroupFromFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateMulticastGroupFromFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DisassociateMulticastGroupFromFuotaTaskResponse.proto b/fixture/DisassociateMulticastGroupFromFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateMulticastGroupFromFuotaTaskResponse.proto
diff --git a/fixture/DisassociateWirelessDeviceFromFuotaTask.yaml b/fixture/DisassociateWirelessDeviceFromFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessDeviceFromFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DisassociateWirelessDeviceFromFuotaTaskResponse.proto b/fixture/DisassociateWirelessDeviceFromFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessDeviceFromFuotaTaskResponse.proto
diff --git a/fixture/DisassociateWirelessDeviceFromMulticastGroup.yaml b/fixture/DisassociateWirelessDeviceFromMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessDeviceFromMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DisassociateWirelessDeviceFromMulticastGroupResponse.proto b/fixture/DisassociateWirelessDeviceFromMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessDeviceFromMulticastGroupResponse.proto
diff --git a/fixture/DisassociateWirelessDeviceFromThing.yaml b/fixture/DisassociateWirelessDeviceFromThing.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessDeviceFromThing.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DisassociateWirelessDeviceFromThingResponse.proto b/fixture/DisassociateWirelessDeviceFromThingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessDeviceFromThingResponse.proto
diff --git a/fixture/DisassociateWirelessGatewayFromCertificate.yaml b/fixture/DisassociateWirelessGatewayFromCertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessGatewayFromCertificate.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DisassociateWirelessGatewayFromCertificateResponse.proto b/fixture/DisassociateWirelessGatewayFromCertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessGatewayFromCertificateResponse.proto
diff --git a/fixture/DisassociateWirelessGatewayFromThing.yaml b/fixture/DisassociateWirelessGatewayFromThing.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessGatewayFromThing.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/DisassociateWirelessGatewayFromThingResponse.proto b/fixture/DisassociateWirelessGatewayFromThingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateWirelessGatewayFromThingResponse.proto
diff --git a/fixture/GetDestination.yaml b/fixture/GetDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetDestinationResponse.proto b/fixture/GetDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDestinationResponse.proto
diff --git a/fixture/GetDeviceProfile.yaml b/fixture/GetDeviceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeviceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetDeviceProfileResponse.proto b/fixture/GetDeviceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDeviceProfileResponse.proto
diff --git a/fixture/GetEventConfigurationByResourceTypes.yaml b/fixture/GetEventConfigurationByResourceTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventConfigurationByResourceTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetEventConfigurationByResourceTypesResponse.proto b/fixture/GetEventConfigurationByResourceTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventConfigurationByResourceTypesResponse.proto
diff --git a/fixture/GetFuotaTask.yaml b/fixture/GetFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetFuotaTaskResponse.proto b/fixture/GetFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFuotaTaskResponse.proto
diff --git a/fixture/GetLogLevelsByResourceTypes.yaml b/fixture/GetLogLevelsByResourceTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLogLevelsByResourceTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetLogLevelsByResourceTypesResponse.proto b/fixture/GetLogLevelsByResourceTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLogLevelsByResourceTypesResponse.proto
diff --git a/fixture/GetMulticastGroup.yaml b/fixture/GetMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetMulticastGroupResponse.proto b/fixture/GetMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMulticastGroupResponse.proto
diff --git a/fixture/GetMulticastGroupSession.yaml b/fixture/GetMulticastGroupSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMulticastGroupSession.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetMulticastGroupSessionResponse.proto b/fixture/GetMulticastGroupSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMulticastGroupSessionResponse.proto
diff --git a/fixture/GetNetworkAnalyzerConfiguration.yaml b/fixture/GetNetworkAnalyzerConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkAnalyzerConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetNetworkAnalyzerConfigurationResponse.proto b/fixture/GetNetworkAnalyzerConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkAnalyzerConfigurationResponse.proto
diff --git a/fixture/GetPartnerAccount.yaml b/fixture/GetPartnerAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPartnerAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetPartnerAccountResponse.proto b/fixture/GetPartnerAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPartnerAccountResponse.proto
diff --git a/fixture/GetPosition.yaml b/fixture/GetPosition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPosition.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetPositionConfiguration.yaml b/fixture/GetPositionConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPositionConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetPositionConfigurationResponse.proto b/fixture/GetPositionConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPositionConfigurationResponse.proto
diff --git a/fixture/GetPositionEstimate.yaml b/fixture/GetPositionEstimate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPositionEstimate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetPositionEstimateResponse.proto b/fixture/GetPositionEstimateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPositionEstimateResponse.proto
diff --git a/fixture/GetPositionResponse.proto b/fixture/GetPositionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPositionResponse.proto
diff --git a/fixture/GetResourceEventConfiguration.yaml b/fixture/GetResourceEventConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceEventConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetResourceEventConfigurationResponse.proto b/fixture/GetResourceEventConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceEventConfigurationResponse.proto
diff --git a/fixture/GetResourceLogLevel.yaml b/fixture/GetResourceLogLevel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceLogLevel.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetResourceLogLevelResponse.proto b/fixture/GetResourceLogLevelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourceLogLevelResponse.proto
diff --git a/fixture/GetResourcePosition.yaml b/fixture/GetResourcePosition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourcePosition.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetResourcePositionResponse.proto b/fixture/GetResourcePositionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetResourcePositionResponse.proto
diff --git a/fixture/GetServiceEndpoint.yaml b/fixture/GetServiceEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetServiceEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetServiceEndpointResponse.proto b/fixture/GetServiceEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetServiceEndpointResponse.proto
diff --git a/fixture/GetServiceProfile.yaml b/fixture/GetServiceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetServiceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetServiceProfileResponse.proto b/fixture/GetServiceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetServiceProfileResponse.proto
diff --git a/fixture/GetWirelessDevice.yaml b/fixture/GetWirelessDevice.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessDevice.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetWirelessDeviceResponse.proto b/fixture/GetWirelessDeviceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessDeviceResponse.proto
diff --git a/fixture/GetWirelessDeviceStatistics.yaml b/fixture/GetWirelessDeviceStatistics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessDeviceStatistics.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetWirelessDeviceStatisticsResponse.proto b/fixture/GetWirelessDeviceStatisticsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessDeviceStatisticsResponse.proto
diff --git a/fixture/GetWirelessGateway.yaml b/fixture/GetWirelessGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetWirelessGatewayCertificate.yaml b/fixture/GetWirelessGatewayCertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayCertificate.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetWirelessGatewayCertificateResponse.proto b/fixture/GetWirelessGatewayCertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayCertificateResponse.proto
diff --git a/fixture/GetWirelessGatewayFirmwareInformation.yaml b/fixture/GetWirelessGatewayFirmwareInformation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayFirmwareInformation.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetWirelessGatewayFirmwareInformationResponse.proto b/fixture/GetWirelessGatewayFirmwareInformationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayFirmwareInformationResponse.proto
diff --git a/fixture/GetWirelessGatewayResponse.proto b/fixture/GetWirelessGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayResponse.proto
diff --git a/fixture/GetWirelessGatewayStatistics.yaml b/fixture/GetWirelessGatewayStatistics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayStatistics.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetWirelessGatewayStatisticsResponse.proto b/fixture/GetWirelessGatewayStatisticsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayStatisticsResponse.proto
diff --git a/fixture/GetWirelessGatewayTask.yaml b/fixture/GetWirelessGatewayTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayTask.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetWirelessGatewayTaskDefinition.yaml b/fixture/GetWirelessGatewayTaskDefinition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayTaskDefinition.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/GetWirelessGatewayTaskDefinitionResponse.proto b/fixture/GetWirelessGatewayTaskDefinitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayTaskDefinitionResponse.proto
diff --git a/fixture/GetWirelessGatewayTaskResponse.proto b/fixture/GetWirelessGatewayTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetWirelessGatewayTaskResponse.proto
diff --git a/fixture/ListDestinations.yaml b/fixture/ListDestinations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDestinations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListDestinationsResponse.proto b/fixture/ListDestinationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDestinationsResponse.proto
diff --git a/fixture/ListDeviceProfiles.yaml b/fixture/ListDeviceProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeviceProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListDeviceProfilesResponse.proto b/fixture/ListDeviceProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDeviceProfilesResponse.proto
diff --git a/fixture/ListEventConfigurations.yaml b/fixture/ListEventConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListEventConfigurationsResponse.proto b/fixture/ListEventConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventConfigurationsResponse.proto
diff --git a/fixture/ListFuotaTasks.yaml b/fixture/ListFuotaTasks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFuotaTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListFuotaTasksResponse.proto b/fixture/ListFuotaTasksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFuotaTasksResponse.proto
diff --git a/fixture/ListMulticastGroups.yaml b/fixture/ListMulticastGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMulticastGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListMulticastGroupsByFuotaTask.yaml b/fixture/ListMulticastGroupsByFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMulticastGroupsByFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListMulticastGroupsByFuotaTaskResponse.proto b/fixture/ListMulticastGroupsByFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMulticastGroupsByFuotaTaskResponse.proto
diff --git a/fixture/ListMulticastGroupsResponse.proto b/fixture/ListMulticastGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMulticastGroupsResponse.proto
diff --git a/fixture/ListNetworkAnalyzerConfigurations.yaml b/fixture/ListNetworkAnalyzerConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListNetworkAnalyzerConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListNetworkAnalyzerConfigurationsResponse.proto b/fixture/ListNetworkAnalyzerConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListNetworkAnalyzerConfigurationsResponse.proto
diff --git a/fixture/ListPartnerAccounts.yaml b/fixture/ListPartnerAccounts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPartnerAccounts.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListPartnerAccountsResponse.proto b/fixture/ListPartnerAccountsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPartnerAccountsResponse.proto
diff --git a/fixture/ListPositionConfigurations.yaml b/fixture/ListPositionConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPositionConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListPositionConfigurationsResponse.proto b/fixture/ListPositionConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPositionConfigurationsResponse.proto
diff --git a/fixture/ListQueuedMessages.yaml b/fixture/ListQueuedMessages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListQueuedMessages.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListQueuedMessagesResponse.proto b/fixture/ListQueuedMessagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListQueuedMessagesResponse.proto
diff --git a/fixture/ListServiceProfiles.yaml b/fixture/ListServiceProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListServiceProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListServiceProfilesResponse.proto b/fixture/ListServiceProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListServiceProfilesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/ListWirelessDevices.yaml b/fixture/ListWirelessDevices.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWirelessDevices.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListWirelessDevicesResponse.proto b/fixture/ListWirelessDevicesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWirelessDevicesResponse.proto
diff --git a/fixture/ListWirelessGatewayTaskDefinitions.yaml b/fixture/ListWirelessGatewayTaskDefinitions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWirelessGatewayTaskDefinitions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListWirelessGatewayTaskDefinitionsResponse.proto b/fixture/ListWirelessGatewayTaskDefinitionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWirelessGatewayTaskDefinitionsResponse.proto
diff --git a/fixture/ListWirelessGateways.yaml b/fixture/ListWirelessGateways.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWirelessGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ListWirelessGatewaysResponse.proto b/fixture/ListWirelessGatewaysResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWirelessGatewaysResponse.proto
diff --git a/fixture/PutPositionConfiguration.yaml b/fixture/PutPositionConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutPositionConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/PutPositionConfigurationResponse.proto b/fixture/PutPositionConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutPositionConfigurationResponse.proto
diff --git a/fixture/PutResourceLogLevel.yaml b/fixture/PutResourceLogLevel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutResourceLogLevel.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/PutResourceLogLevelResponse.proto b/fixture/PutResourceLogLevelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutResourceLogLevelResponse.proto
diff --git a/fixture/ResetAllResourceLogLevels.yaml b/fixture/ResetAllResourceLogLevels.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResetAllResourceLogLevels.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ResetAllResourceLogLevelsResponse.proto b/fixture/ResetAllResourceLogLevelsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResetAllResourceLogLevelsResponse.proto
diff --git a/fixture/ResetResourceLogLevel.yaml b/fixture/ResetResourceLogLevel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResetResourceLogLevel.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/ResetResourceLogLevelResponse.proto b/fixture/ResetResourceLogLevelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResetResourceLogLevelResponse.proto
diff --git a/fixture/SendDataToMulticastGroup.yaml b/fixture/SendDataToMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendDataToMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/SendDataToMulticastGroupResponse.proto b/fixture/SendDataToMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendDataToMulticastGroupResponse.proto
diff --git a/fixture/SendDataToWirelessDevice.yaml b/fixture/SendDataToWirelessDevice.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendDataToWirelessDevice.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/SendDataToWirelessDeviceResponse.proto b/fixture/SendDataToWirelessDeviceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendDataToWirelessDeviceResponse.proto
diff --git a/fixture/StartBulkAssociateWirelessDeviceWithMulticastGroup.yaml b/fixture/StartBulkAssociateWirelessDeviceWithMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartBulkAssociateWirelessDeviceWithMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/StartBulkAssociateWirelessDeviceWithMulticastGroupResponse.proto b/fixture/StartBulkAssociateWirelessDeviceWithMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartBulkAssociateWirelessDeviceWithMulticastGroupResponse.proto
diff --git a/fixture/StartBulkDisassociateWirelessDeviceFromMulticastGroup.yaml b/fixture/StartBulkDisassociateWirelessDeviceFromMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartBulkDisassociateWirelessDeviceFromMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse.proto b/fixture/StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse.proto
diff --git a/fixture/StartFuotaTask.yaml b/fixture/StartFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/StartFuotaTaskResponse.proto b/fixture/StartFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartFuotaTaskResponse.proto
diff --git a/fixture/StartMulticastGroupSession.yaml b/fixture/StartMulticastGroupSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartMulticastGroupSession.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/StartMulticastGroupSessionResponse.proto b/fixture/StartMulticastGroupSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartMulticastGroupSessionResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/TestWirelessDevice.yaml b/fixture/TestWirelessDevice.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TestWirelessDevice.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/TestWirelessDeviceResponse.proto b/fixture/TestWirelessDeviceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TestWirelessDeviceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdateDestination.yaml b/fixture/UpdateDestination.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDestination.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateDestinationResponse.proto b/fixture/UpdateDestinationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDestinationResponse.proto
diff --git a/fixture/UpdateEventConfigurationByResourceTypes.yaml b/fixture/UpdateEventConfigurationByResourceTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventConfigurationByResourceTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateEventConfigurationByResourceTypesResponse.proto b/fixture/UpdateEventConfigurationByResourceTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventConfigurationByResourceTypesResponse.proto
diff --git a/fixture/UpdateFuotaTask.yaml b/fixture/UpdateFuotaTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFuotaTask.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateFuotaTaskResponse.proto b/fixture/UpdateFuotaTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFuotaTaskResponse.proto
diff --git a/fixture/UpdateLogLevelsByResourceTypes.yaml b/fixture/UpdateLogLevelsByResourceTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLogLevelsByResourceTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateLogLevelsByResourceTypesResponse.proto b/fixture/UpdateLogLevelsByResourceTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLogLevelsByResourceTypesResponse.proto
diff --git a/fixture/UpdateMulticastGroup.yaml b/fixture/UpdateMulticastGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMulticastGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateMulticastGroupResponse.proto b/fixture/UpdateMulticastGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMulticastGroupResponse.proto
diff --git a/fixture/UpdateNetworkAnalyzerConfiguration.yaml b/fixture/UpdateNetworkAnalyzerConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNetworkAnalyzerConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateNetworkAnalyzerConfigurationResponse.proto b/fixture/UpdateNetworkAnalyzerConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateNetworkAnalyzerConfigurationResponse.proto
diff --git a/fixture/UpdatePartnerAccount.yaml b/fixture/UpdatePartnerAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePartnerAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdatePartnerAccountResponse.proto b/fixture/UpdatePartnerAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePartnerAccountResponse.proto
diff --git a/fixture/UpdatePosition.yaml b/fixture/UpdatePosition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePosition.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdatePositionResponse.proto b/fixture/UpdatePositionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePositionResponse.proto
diff --git a/fixture/UpdateResourceEventConfiguration.yaml b/fixture/UpdateResourceEventConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceEventConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateResourceEventConfigurationResponse.proto b/fixture/UpdateResourceEventConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourceEventConfigurationResponse.proto
diff --git a/fixture/UpdateResourcePosition.yaml b/fixture/UpdateResourcePosition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourcePosition.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateResourcePositionResponse.proto b/fixture/UpdateResourcePositionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateResourcePositionResponse.proto
diff --git a/fixture/UpdateWirelessDevice.yaml b/fixture/UpdateWirelessDevice.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWirelessDevice.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateWirelessDeviceResponse.proto b/fixture/UpdateWirelessDeviceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWirelessDeviceResponse.proto
diff --git a/fixture/UpdateWirelessGateway.yaml b/fixture/UpdateWirelessGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWirelessGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/api.iotwireless/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  api.iotwireless.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/UpdateWirelessGatewayResponse.proto b/fixture/UpdateWirelessGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateWirelessGatewayResponse.proto
diff --git a/gen/Amazonka/IoTWireless.hs b/gen/Amazonka/IoTWireless.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless.hs
@@ -0,0 +1,1271 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.IoTWireless
+-- 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 @2020-11-22@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS IoT Wireless provides bi-directional communication between
+-- internet-connected wireless devices and the AWS Cloud. To onboard both
+-- LoRaWAN and Sidewalk devices to AWS IoT, use the IoT Wireless API. These
+-- wireless devices use the Low Power Wide Area Networking (LPWAN)
+-- communication protocol to communicate with AWS IoT.
+--
+-- Using the API, you can perform create, read, update, and delete
+-- operations for your wireless devices, gateways, destinations, and
+-- profiles. After onboarding your devices, you can use the API operations
+-- to set log levels and monitor your devices with CloudWatch.
+--
+-- You can also use the API operations to create multicast groups and
+-- schedule a multicast session for sending a downlink message to devices
+-- in the group. By using Firmware Updates Over-The-Air (FUOTA) API
+-- operations, you can create a FUOTA task and schedule a session to update
+-- the firmware of individual devices or an entire group of devices in a
+-- multicast group.
+module Amazonka.IoTWireless
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** TooManyTagsException
+    _TooManyTagsException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateAwsAccountWithPartnerAccount
+    AssociateAwsAccountWithPartnerAccount (AssociateAwsAccountWithPartnerAccount'),
+    newAssociateAwsAccountWithPartnerAccount,
+    AssociateAwsAccountWithPartnerAccountResponse (AssociateAwsAccountWithPartnerAccountResponse'),
+    newAssociateAwsAccountWithPartnerAccountResponse,
+
+    -- ** AssociateMulticastGroupWithFuotaTask
+    AssociateMulticastGroupWithFuotaTask (AssociateMulticastGroupWithFuotaTask'),
+    newAssociateMulticastGroupWithFuotaTask,
+    AssociateMulticastGroupWithFuotaTaskResponse (AssociateMulticastGroupWithFuotaTaskResponse'),
+    newAssociateMulticastGroupWithFuotaTaskResponse,
+
+    -- ** AssociateWirelessDeviceWithFuotaTask
+    AssociateWirelessDeviceWithFuotaTask (AssociateWirelessDeviceWithFuotaTask'),
+    newAssociateWirelessDeviceWithFuotaTask,
+    AssociateWirelessDeviceWithFuotaTaskResponse (AssociateWirelessDeviceWithFuotaTaskResponse'),
+    newAssociateWirelessDeviceWithFuotaTaskResponse,
+
+    -- ** AssociateWirelessDeviceWithMulticastGroup
+    AssociateWirelessDeviceWithMulticastGroup (AssociateWirelessDeviceWithMulticastGroup'),
+    newAssociateWirelessDeviceWithMulticastGroup,
+    AssociateWirelessDeviceWithMulticastGroupResponse (AssociateWirelessDeviceWithMulticastGroupResponse'),
+    newAssociateWirelessDeviceWithMulticastGroupResponse,
+
+    -- ** AssociateWirelessDeviceWithThing
+    AssociateWirelessDeviceWithThing (AssociateWirelessDeviceWithThing'),
+    newAssociateWirelessDeviceWithThing,
+    AssociateWirelessDeviceWithThingResponse (AssociateWirelessDeviceWithThingResponse'),
+    newAssociateWirelessDeviceWithThingResponse,
+
+    -- ** AssociateWirelessGatewayWithCertificate
+    AssociateWirelessGatewayWithCertificate (AssociateWirelessGatewayWithCertificate'),
+    newAssociateWirelessGatewayWithCertificate,
+    AssociateWirelessGatewayWithCertificateResponse (AssociateWirelessGatewayWithCertificateResponse'),
+    newAssociateWirelessGatewayWithCertificateResponse,
+
+    -- ** AssociateWirelessGatewayWithThing
+    AssociateWirelessGatewayWithThing (AssociateWirelessGatewayWithThing'),
+    newAssociateWirelessGatewayWithThing,
+    AssociateWirelessGatewayWithThingResponse (AssociateWirelessGatewayWithThingResponse'),
+    newAssociateWirelessGatewayWithThingResponse,
+
+    -- ** CancelMulticastGroupSession
+    CancelMulticastGroupSession (CancelMulticastGroupSession'),
+    newCancelMulticastGroupSession,
+    CancelMulticastGroupSessionResponse (CancelMulticastGroupSessionResponse'),
+    newCancelMulticastGroupSessionResponse,
+
+    -- ** CreateDestination
+    CreateDestination (CreateDestination'),
+    newCreateDestination,
+    CreateDestinationResponse (CreateDestinationResponse'),
+    newCreateDestinationResponse,
+
+    -- ** CreateDeviceProfile
+    CreateDeviceProfile (CreateDeviceProfile'),
+    newCreateDeviceProfile,
+    CreateDeviceProfileResponse (CreateDeviceProfileResponse'),
+    newCreateDeviceProfileResponse,
+
+    -- ** CreateFuotaTask
+    CreateFuotaTask (CreateFuotaTask'),
+    newCreateFuotaTask,
+    CreateFuotaTaskResponse (CreateFuotaTaskResponse'),
+    newCreateFuotaTaskResponse,
+
+    -- ** CreateMulticastGroup
+    CreateMulticastGroup (CreateMulticastGroup'),
+    newCreateMulticastGroup,
+    CreateMulticastGroupResponse (CreateMulticastGroupResponse'),
+    newCreateMulticastGroupResponse,
+
+    -- ** CreateNetworkAnalyzerConfiguration
+    CreateNetworkAnalyzerConfiguration (CreateNetworkAnalyzerConfiguration'),
+    newCreateNetworkAnalyzerConfiguration,
+    CreateNetworkAnalyzerConfigurationResponse (CreateNetworkAnalyzerConfigurationResponse'),
+    newCreateNetworkAnalyzerConfigurationResponse,
+
+    -- ** CreateServiceProfile
+    CreateServiceProfile (CreateServiceProfile'),
+    newCreateServiceProfile,
+    CreateServiceProfileResponse (CreateServiceProfileResponse'),
+    newCreateServiceProfileResponse,
+
+    -- ** CreateWirelessDevice
+    CreateWirelessDevice (CreateWirelessDevice'),
+    newCreateWirelessDevice,
+    CreateWirelessDeviceResponse (CreateWirelessDeviceResponse'),
+    newCreateWirelessDeviceResponse,
+
+    -- ** CreateWirelessGateway
+    CreateWirelessGateway (CreateWirelessGateway'),
+    newCreateWirelessGateway,
+    CreateWirelessGatewayResponse (CreateWirelessGatewayResponse'),
+    newCreateWirelessGatewayResponse,
+
+    -- ** CreateWirelessGatewayTask
+    CreateWirelessGatewayTask (CreateWirelessGatewayTask'),
+    newCreateWirelessGatewayTask,
+    CreateWirelessGatewayTaskResponse (CreateWirelessGatewayTaskResponse'),
+    newCreateWirelessGatewayTaskResponse,
+
+    -- ** CreateWirelessGatewayTaskDefinition
+    CreateWirelessGatewayTaskDefinition (CreateWirelessGatewayTaskDefinition'),
+    newCreateWirelessGatewayTaskDefinition,
+    CreateWirelessGatewayTaskDefinitionResponse (CreateWirelessGatewayTaskDefinitionResponse'),
+    newCreateWirelessGatewayTaskDefinitionResponse,
+
+    -- ** DeleteDestination
+    DeleteDestination (DeleteDestination'),
+    newDeleteDestination,
+    DeleteDestinationResponse (DeleteDestinationResponse'),
+    newDeleteDestinationResponse,
+
+    -- ** DeleteDeviceProfile
+    DeleteDeviceProfile (DeleteDeviceProfile'),
+    newDeleteDeviceProfile,
+    DeleteDeviceProfileResponse (DeleteDeviceProfileResponse'),
+    newDeleteDeviceProfileResponse,
+
+    -- ** DeleteFuotaTask
+    DeleteFuotaTask (DeleteFuotaTask'),
+    newDeleteFuotaTask,
+    DeleteFuotaTaskResponse (DeleteFuotaTaskResponse'),
+    newDeleteFuotaTaskResponse,
+
+    -- ** DeleteMulticastGroup
+    DeleteMulticastGroup (DeleteMulticastGroup'),
+    newDeleteMulticastGroup,
+    DeleteMulticastGroupResponse (DeleteMulticastGroupResponse'),
+    newDeleteMulticastGroupResponse,
+
+    -- ** DeleteNetworkAnalyzerConfiguration
+    DeleteNetworkAnalyzerConfiguration (DeleteNetworkAnalyzerConfiguration'),
+    newDeleteNetworkAnalyzerConfiguration,
+    DeleteNetworkAnalyzerConfigurationResponse (DeleteNetworkAnalyzerConfigurationResponse'),
+    newDeleteNetworkAnalyzerConfigurationResponse,
+
+    -- ** DeleteQueuedMessages
+    DeleteQueuedMessages (DeleteQueuedMessages'),
+    newDeleteQueuedMessages,
+    DeleteQueuedMessagesResponse (DeleteQueuedMessagesResponse'),
+    newDeleteQueuedMessagesResponse,
+
+    -- ** DeleteServiceProfile
+    DeleteServiceProfile (DeleteServiceProfile'),
+    newDeleteServiceProfile,
+    DeleteServiceProfileResponse (DeleteServiceProfileResponse'),
+    newDeleteServiceProfileResponse,
+
+    -- ** DeleteWirelessDevice
+    DeleteWirelessDevice (DeleteWirelessDevice'),
+    newDeleteWirelessDevice,
+    DeleteWirelessDeviceResponse (DeleteWirelessDeviceResponse'),
+    newDeleteWirelessDeviceResponse,
+
+    -- ** DeleteWirelessGateway
+    DeleteWirelessGateway (DeleteWirelessGateway'),
+    newDeleteWirelessGateway,
+    DeleteWirelessGatewayResponse (DeleteWirelessGatewayResponse'),
+    newDeleteWirelessGatewayResponse,
+
+    -- ** DeleteWirelessGatewayTask
+    DeleteWirelessGatewayTask (DeleteWirelessGatewayTask'),
+    newDeleteWirelessGatewayTask,
+    DeleteWirelessGatewayTaskResponse (DeleteWirelessGatewayTaskResponse'),
+    newDeleteWirelessGatewayTaskResponse,
+
+    -- ** DeleteWirelessGatewayTaskDefinition
+    DeleteWirelessGatewayTaskDefinition (DeleteWirelessGatewayTaskDefinition'),
+    newDeleteWirelessGatewayTaskDefinition,
+    DeleteWirelessGatewayTaskDefinitionResponse (DeleteWirelessGatewayTaskDefinitionResponse'),
+    newDeleteWirelessGatewayTaskDefinitionResponse,
+
+    -- ** DisassociateAwsAccountFromPartnerAccount
+    DisassociateAwsAccountFromPartnerAccount (DisassociateAwsAccountFromPartnerAccount'),
+    newDisassociateAwsAccountFromPartnerAccount,
+    DisassociateAwsAccountFromPartnerAccountResponse (DisassociateAwsAccountFromPartnerAccountResponse'),
+    newDisassociateAwsAccountFromPartnerAccountResponse,
+
+    -- ** DisassociateMulticastGroupFromFuotaTask
+    DisassociateMulticastGroupFromFuotaTask (DisassociateMulticastGroupFromFuotaTask'),
+    newDisassociateMulticastGroupFromFuotaTask,
+    DisassociateMulticastGroupFromFuotaTaskResponse (DisassociateMulticastGroupFromFuotaTaskResponse'),
+    newDisassociateMulticastGroupFromFuotaTaskResponse,
+
+    -- ** DisassociateWirelessDeviceFromFuotaTask
+    DisassociateWirelessDeviceFromFuotaTask (DisassociateWirelessDeviceFromFuotaTask'),
+    newDisassociateWirelessDeviceFromFuotaTask,
+    DisassociateWirelessDeviceFromFuotaTaskResponse (DisassociateWirelessDeviceFromFuotaTaskResponse'),
+    newDisassociateWirelessDeviceFromFuotaTaskResponse,
+
+    -- ** DisassociateWirelessDeviceFromMulticastGroup
+    DisassociateWirelessDeviceFromMulticastGroup (DisassociateWirelessDeviceFromMulticastGroup'),
+    newDisassociateWirelessDeviceFromMulticastGroup,
+    DisassociateWirelessDeviceFromMulticastGroupResponse (DisassociateWirelessDeviceFromMulticastGroupResponse'),
+    newDisassociateWirelessDeviceFromMulticastGroupResponse,
+
+    -- ** DisassociateWirelessDeviceFromThing
+    DisassociateWirelessDeviceFromThing (DisassociateWirelessDeviceFromThing'),
+    newDisassociateWirelessDeviceFromThing,
+    DisassociateWirelessDeviceFromThingResponse (DisassociateWirelessDeviceFromThingResponse'),
+    newDisassociateWirelessDeviceFromThingResponse,
+
+    -- ** DisassociateWirelessGatewayFromCertificate
+    DisassociateWirelessGatewayFromCertificate (DisassociateWirelessGatewayFromCertificate'),
+    newDisassociateWirelessGatewayFromCertificate,
+    DisassociateWirelessGatewayFromCertificateResponse (DisassociateWirelessGatewayFromCertificateResponse'),
+    newDisassociateWirelessGatewayFromCertificateResponse,
+
+    -- ** DisassociateWirelessGatewayFromThing
+    DisassociateWirelessGatewayFromThing (DisassociateWirelessGatewayFromThing'),
+    newDisassociateWirelessGatewayFromThing,
+    DisassociateWirelessGatewayFromThingResponse (DisassociateWirelessGatewayFromThingResponse'),
+    newDisassociateWirelessGatewayFromThingResponse,
+
+    -- ** GetDestination
+    GetDestination (GetDestination'),
+    newGetDestination,
+    GetDestinationResponse (GetDestinationResponse'),
+    newGetDestinationResponse,
+
+    -- ** GetDeviceProfile
+    GetDeviceProfile (GetDeviceProfile'),
+    newGetDeviceProfile,
+    GetDeviceProfileResponse (GetDeviceProfileResponse'),
+    newGetDeviceProfileResponse,
+
+    -- ** GetEventConfigurationByResourceTypes
+    GetEventConfigurationByResourceTypes (GetEventConfigurationByResourceTypes'),
+    newGetEventConfigurationByResourceTypes,
+    GetEventConfigurationByResourceTypesResponse (GetEventConfigurationByResourceTypesResponse'),
+    newGetEventConfigurationByResourceTypesResponse,
+
+    -- ** GetFuotaTask
+    GetFuotaTask (GetFuotaTask'),
+    newGetFuotaTask,
+    GetFuotaTaskResponse (GetFuotaTaskResponse'),
+    newGetFuotaTaskResponse,
+
+    -- ** GetLogLevelsByResourceTypes
+    GetLogLevelsByResourceTypes (GetLogLevelsByResourceTypes'),
+    newGetLogLevelsByResourceTypes,
+    GetLogLevelsByResourceTypesResponse (GetLogLevelsByResourceTypesResponse'),
+    newGetLogLevelsByResourceTypesResponse,
+
+    -- ** GetMulticastGroup
+    GetMulticastGroup (GetMulticastGroup'),
+    newGetMulticastGroup,
+    GetMulticastGroupResponse (GetMulticastGroupResponse'),
+    newGetMulticastGroupResponse,
+
+    -- ** GetMulticastGroupSession
+    GetMulticastGroupSession (GetMulticastGroupSession'),
+    newGetMulticastGroupSession,
+    GetMulticastGroupSessionResponse (GetMulticastGroupSessionResponse'),
+    newGetMulticastGroupSessionResponse,
+
+    -- ** GetNetworkAnalyzerConfiguration
+    GetNetworkAnalyzerConfiguration (GetNetworkAnalyzerConfiguration'),
+    newGetNetworkAnalyzerConfiguration,
+    GetNetworkAnalyzerConfigurationResponse (GetNetworkAnalyzerConfigurationResponse'),
+    newGetNetworkAnalyzerConfigurationResponse,
+
+    -- ** GetPartnerAccount
+    GetPartnerAccount (GetPartnerAccount'),
+    newGetPartnerAccount,
+    GetPartnerAccountResponse (GetPartnerAccountResponse'),
+    newGetPartnerAccountResponse,
+
+    -- ** GetPositionEstimate
+    GetPositionEstimate (GetPositionEstimate'),
+    newGetPositionEstimate,
+    GetPositionEstimateResponse (GetPositionEstimateResponse'),
+    newGetPositionEstimateResponse,
+
+    -- ** GetResourceEventConfiguration
+    GetResourceEventConfiguration (GetResourceEventConfiguration'),
+    newGetResourceEventConfiguration,
+    GetResourceEventConfigurationResponse (GetResourceEventConfigurationResponse'),
+    newGetResourceEventConfigurationResponse,
+
+    -- ** GetResourceLogLevel
+    GetResourceLogLevel (GetResourceLogLevel'),
+    newGetResourceLogLevel,
+    GetResourceLogLevelResponse (GetResourceLogLevelResponse'),
+    newGetResourceLogLevelResponse,
+
+    -- ** GetResourcePosition
+    GetResourcePosition (GetResourcePosition'),
+    newGetResourcePosition,
+    GetResourcePositionResponse (GetResourcePositionResponse'),
+    newGetResourcePositionResponse,
+
+    -- ** GetServiceEndpoint
+    GetServiceEndpoint (GetServiceEndpoint'),
+    newGetServiceEndpoint,
+    GetServiceEndpointResponse (GetServiceEndpointResponse'),
+    newGetServiceEndpointResponse,
+
+    -- ** GetServiceProfile
+    GetServiceProfile (GetServiceProfile'),
+    newGetServiceProfile,
+    GetServiceProfileResponse (GetServiceProfileResponse'),
+    newGetServiceProfileResponse,
+
+    -- ** GetWirelessDevice
+    GetWirelessDevice (GetWirelessDevice'),
+    newGetWirelessDevice,
+    GetWirelessDeviceResponse (GetWirelessDeviceResponse'),
+    newGetWirelessDeviceResponse,
+
+    -- ** GetWirelessDeviceStatistics
+    GetWirelessDeviceStatistics (GetWirelessDeviceStatistics'),
+    newGetWirelessDeviceStatistics,
+    GetWirelessDeviceStatisticsResponse (GetWirelessDeviceStatisticsResponse'),
+    newGetWirelessDeviceStatisticsResponse,
+
+    -- ** GetWirelessGateway
+    GetWirelessGateway (GetWirelessGateway'),
+    newGetWirelessGateway,
+    GetWirelessGatewayResponse (GetWirelessGatewayResponse'),
+    newGetWirelessGatewayResponse,
+
+    -- ** GetWirelessGatewayCertificate
+    GetWirelessGatewayCertificate (GetWirelessGatewayCertificate'),
+    newGetWirelessGatewayCertificate,
+    GetWirelessGatewayCertificateResponse (GetWirelessGatewayCertificateResponse'),
+    newGetWirelessGatewayCertificateResponse,
+
+    -- ** GetWirelessGatewayFirmwareInformation
+    GetWirelessGatewayFirmwareInformation (GetWirelessGatewayFirmwareInformation'),
+    newGetWirelessGatewayFirmwareInformation,
+    GetWirelessGatewayFirmwareInformationResponse (GetWirelessGatewayFirmwareInformationResponse'),
+    newGetWirelessGatewayFirmwareInformationResponse,
+
+    -- ** GetWirelessGatewayStatistics
+    GetWirelessGatewayStatistics (GetWirelessGatewayStatistics'),
+    newGetWirelessGatewayStatistics,
+    GetWirelessGatewayStatisticsResponse (GetWirelessGatewayStatisticsResponse'),
+    newGetWirelessGatewayStatisticsResponse,
+
+    -- ** GetWirelessGatewayTask
+    GetWirelessGatewayTask (GetWirelessGatewayTask'),
+    newGetWirelessGatewayTask,
+    GetWirelessGatewayTaskResponse (GetWirelessGatewayTaskResponse'),
+    newGetWirelessGatewayTaskResponse,
+
+    -- ** GetWirelessGatewayTaskDefinition
+    GetWirelessGatewayTaskDefinition (GetWirelessGatewayTaskDefinition'),
+    newGetWirelessGatewayTaskDefinition,
+    GetWirelessGatewayTaskDefinitionResponse (GetWirelessGatewayTaskDefinitionResponse'),
+    newGetWirelessGatewayTaskDefinitionResponse,
+
+    -- ** ListDestinations
+    ListDestinations (ListDestinations'),
+    newListDestinations,
+    ListDestinationsResponse (ListDestinationsResponse'),
+    newListDestinationsResponse,
+
+    -- ** ListDeviceProfiles
+    ListDeviceProfiles (ListDeviceProfiles'),
+    newListDeviceProfiles,
+    ListDeviceProfilesResponse (ListDeviceProfilesResponse'),
+    newListDeviceProfilesResponse,
+
+    -- ** ListEventConfigurations
+    ListEventConfigurations (ListEventConfigurations'),
+    newListEventConfigurations,
+    ListEventConfigurationsResponse (ListEventConfigurationsResponse'),
+    newListEventConfigurationsResponse,
+
+    -- ** ListFuotaTasks
+    ListFuotaTasks (ListFuotaTasks'),
+    newListFuotaTasks,
+    ListFuotaTasksResponse (ListFuotaTasksResponse'),
+    newListFuotaTasksResponse,
+
+    -- ** ListMulticastGroups
+    ListMulticastGroups (ListMulticastGroups'),
+    newListMulticastGroups,
+    ListMulticastGroupsResponse (ListMulticastGroupsResponse'),
+    newListMulticastGroupsResponse,
+
+    -- ** ListMulticastGroupsByFuotaTask
+    ListMulticastGroupsByFuotaTask (ListMulticastGroupsByFuotaTask'),
+    newListMulticastGroupsByFuotaTask,
+    ListMulticastGroupsByFuotaTaskResponse (ListMulticastGroupsByFuotaTaskResponse'),
+    newListMulticastGroupsByFuotaTaskResponse,
+
+    -- ** ListNetworkAnalyzerConfigurations
+    ListNetworkAnalyzerConfigurations (ListNetworkAnalyzerConfigurations'),
+    newListNetworkAnalyzerConfigurations,
+    ListNetworkAnalyzerConfigurationsResponse (ListNetworkAnalyzerConfigurationsResponse'),
+    newListNetworkAnalyzerConfigurationsResponse,
+
+    -- ** ListPartnerAccounts
+    ListPartnerAccounts (ListPartnerAccounts'),
+    newListPartnerAccounts,
+    ListPartnerAccountsResponse (ListPartnerAccountsResponse'),
+    newListPartnerAccountsResponse,
+
+    -- ** ListQueuedMessages
+    ListQueuedMessages (ListQueuedMessages'),
+    newListQueuedMessages,
+    ListQueuedMessagesResponse (ListQueuedMessagesResponse'),
+    newListQueuedMessagesResponse,
+
+    -- ** ListServiceProfiles
+    ListServiceProfiles (ListServiceProfiles'),
+    newListServiceProfiles,
+    ListServiceProfilesResponse (ListServiceProfilesResponse'),
+    newListServiceProfilesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListWirelessDevices
+    ListWirelessDevices (ListWirelessDevices'),
+    newListWirelessDevices,
+    ListWirelessDevicesResponse (ListWirelessDevicesResponse'),
+    newListWirelessDevicesResponse,
+
+    -- ** ListWirelessGatewayTaskDefinitions
+    ListWirelessGatewayTaskDefinitions (ListWirelessGatewayTaskDefinitions'),
+    newListWirelessGatewayTaskDefinitions,
+    ListWirelessGatewayTaskDefinitionsResponse (ListWirelessGatewayTaskDefinitionsResponse'),
+    newListWirelessGatewayTaskDefinitionsResponse,
+
+    -- ** ListWirelessGateways
+    ListWirelessGateways (ListWirelessGateways'),
+    newListWirelessGateways,
+    ListWirelessGatewaysResponse (ListWirelessGatewaysResponse'),
+    newListWirelessGatewaysResponse,
+
+    -- ** PutResourceLogLevel
+    PutResourceLogLevel (PutResourceLogLevel'),
+    newPutResourceLogLevel,
+    PutResourceLogLevelResponse (PutResourceLogLevelResponse'),
+    newPutResourceLogLevelResponse,
+
+    -- ** ResetAllResourceLogLevels
+    ResetAllResourceLogLevels (ResetAllResourceLogLevels'),
+    newResetAllResourceLogLevels,
+    ResetAllResourceLogLevelsResponse (ResetAllResourceLogLevelsResponse'),
+    newResetAllResourceLogLevelsResponse,
+
+    -- ** ResetResourceLogLevel
+    ResetResourceLogLevel (ResetResourceLogLevel'),
+    newResetResourceLogLevel,
+    ResetResourceLogLevelResponse (ResetResourceLogLevelResponse'),
+    newResetResourceLogLevelResponse,
+
+    -- ** SendDataToMulticastGroup
+    SendDataToMulticastGroup (SendDataToMulticastGroup'),
+    newSendDataToMulticastGroup,
+    SendDataToMulticastGroupResponse (SendDataToMulticastGroupResponse'),
+    newSendDataToMulticastGroupResponse,
+
+    -- ** SendDataToWirelessDevice
+    SendDataToWirelessDevice (SendDataToWirelessDevice'),
+    newSendDataToWirelessDevice,
+    SendDataToWirelessDeviceResponse (SendDataToWirelessDeviceResponse'),
+    newSendDataToWirelessDeviceResponse,
+
+    -- ** StartBulkAssociateWirelessDeviceWithMulticastGroup
+    StartBulkAssociateWirelessDeviceWithMulticastGroup (StartBulkAssociateWirelessDeviceWithMulticastGroup'),
+    newStartBulkAssociateWirelessDeviceWithMulticastGroup,
+    StartBulkAssociateWirelessDeviceWithMulticastGroupResponse (StartBulkAssociateWirelessDeviceWithMulticastGroupResponse'),
+    newStartBulkAssociateWirelessDeviceWithMulticastGroupResponse,
+
+    -- ** StartBulkDisassociateWirelessDeviceFromMulticastGroup
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup (StartBulkDisassociateWirelessDeviceFromMulticastGroup'),
+    newStartBulkDisassociateWirelessDeviceFromMulticastGroup,
+    StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse (StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse'),
+    newStartBulkDisassociateWirelessDeviceFromMulticastGroupResponse,
+
+    -- ** StartFuotaTask
+    StartFuotaTask (StartFuotaTask'),
+    newStartFuotaTask,
+    StartFuotaTaskResponse (StartFuotaTaskResponse'),
+    newStartFuotaTaskResponse,
+
+    -- ** StartMulticastGroupSession
+    StartMulticastGroupSession (StartMulticastGroupSession'),
+    newStartMulticastGroupSession,
+    StartMulticastGroupSessionResponse (StartMulticastGroupSessionResponse'),
+    newStartMulticastGroupSessionResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** TestWirelessDevice
+    TestWirelessDevice (TestWirelessDevice'),
+    newTestWirelessDevice,
+    TestWirelessDeviceResponse (TestWirelessDeviceResponse'),
+    newTestWirelessDeviceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateDestination
+    UpdateDestination (UpdateDestination'),
+    newUpdateDestination,
+    UpdateDestinationResponse (UpdateDestinationResponse'),
+    newUpdateDestinationResponse,
+
+    -- ** UpdateEventConfigurationByResourceTypes
+    UpdateEventConfigurationByResourceTypes (UpdateEventConfigurationByResourceTypes'),
+    newUpdateEventConfigurationByResourceTypes,
+    UpdateEventConfigurationByResourceTypesResponse (UpdateEventConfigurationByResourceTypesResponse'),
+    newUpdateEventConfigurationByResourceTypesResponse,
+
+    -- ** UpdateFuotaTask
+    UpdateFuotaTask (UpdateFuotaTask'),
+    newUpdateFuotaTask,
+    UpdateFuotaTaskResponse (UpdateFuotaTaskResponse'),
+    newUpdateFuotaTaskResponse,
+
+    -- ** UpdateLogLevelsByResourceTypes
+    UpdateLogLevelsByResourceTypes (UpdateLogLevelsByResourceTypes'),
+    newUpdateLogLevelsByResourceTypes,
+    UpdateLogLevelsByResourceTypesResponse (UpdateLogLevelsByResourceTypesResponse'),
+    newUpdateLogLevelsByResourceTypesResponse,
+
+    -- ** UpdateMulticastGroup
+    UpdateMulticastGroup (UpdateMulticastGroup'),
+    newUpdateMulticastGroup,
+    UpdateMulticastGroupResponse (UpdateMulticastGroupResponse'),
+    newUpdateMulticastGroupResponse,
+
+    -- ** UpdateNetworkAnalyzerConfiguration
+    UpdateNetworkAnalyzerConfiguration (UpdateNetworkAnalyzerConfiguration'),
+    newUpdateNetworkAnalyzerConfiguration,
+    UpdateNetworkAnalyzerConfigurationResponse (UpdateNetworkAnalyzerConfigurationResponse'),
+    newUpdateNetworkAnalyzerConfigurationResponse,
+
+    -- ** UpdatePartnerAccount
+    UpdatePartnerAccount (UpdatePartnerAccount'),
+    newUpdatePartnerAccount,
+    UpdatePartnerAccountResponse (UpdatePartnerAccountResponse'),
+    newUpdatePartnerAccountResponse,
+
+    -- ** UpdateResourceEventConfiguration
+    UpdateResourceEventConfiguration (UpdateResourceEventConfiguration'),
+    newUpdateResourceEventConfiguration,
+    UpdateResourceEventConfigurationResponse (UpdateResourceEventConfigurationResponse'),
+    newUpdateResourceEventConfigurationResponse,
+
+    -- ** UpdateResourcePosition
+    UpdateResourcePosition (UpdateResourcePosition'),
+    newUpdateResourcePosition,
+    UpdateResourcePositionResponse (UpdateResourcePositionResponse'),
+    newUpdateResourcePositionResponse,
+
+    -- ** UpdateWirelessDevice
+    UpdateWirelessDevice (UpdateWirelessDevice'),
+    newUpdateWirelessDevice,
+    UpdateWirelessDeviceResponse (UpdateWirelessDeviceResponse'),
+    newUpdateWirelessDeviceResponse,
+
+    -- ** UpdateWirelessGateway
+    UpdateWirelessGateway (UpdateWirelessGateway'),
+    newUpdateWirelessGateway,
+    UpdateWirelessGatewayResponse (UpdateWirelessGatewayResponse'),
+    newUpdateWirelessGatewayResponse,
+
+    -- * Types
+
+    -- ** ApplicationConfigType
+    ApplicationConfigType (..),
+
+    -- ** BatteryLevel
+    BatteryLevel (..),
+
+    -- ** ConnectionStatus
+    ConnectionStatus (..),
+
+    -- ** DeviceState
+    DeviceState (..),
+
+    -- ** DlClass
+    DlClass (..),
+
+    -- ** DownlinkMode
+    DownlinkMode (..),
+
+    -- ** Event
+    Event (..),
+
+    -- ** EventNotificationPartnerType
+    EventNotificationPartnerType (..),
+
+    -- ** EventNotificationResourceType
+    EventNotificationResourceType (..),
+
+    -- ** EventNotificationTopicStatus
+    EventNotificationTopicStatus (..),
+
+    -- ** ExpressionType
+    ExpressionType (..),
+
+    -- ** FuotaDeviceStatus
+    FuotaDeviceStatus (..),
+
+    -- ** FuotaTaskStatus
+    FuotaTaskStatus (..),
+
+    -- ** IdentifierType
+    IdentifierType (..),
+
+    -- ** LogLevel
+    LogLevel (..),
+
+    -- ** MessageType
+    MessageType (..),
+
+    -- ** PartnerType
+    PartnerType (..),
+
+    -- ** PositionResourceType
+    PositionResourceType (..),
+
+    -- ** PositioningConfigStatus
+    PositioningConfigStatus (..),
+
+    -- ** SigningAlg
+    SigningAlg (..),
+
+    -- ** SupportedRfRegion
+    SupportedRfRegion (..),
+
+    -- ** WirelessDeviceEvent
+    WirelessDeviceEvent (..),
+
+    -- ** WirelessDeviceFrameInfo
+    WirelessDeviceFrameInfo (..),
+
+    -- ** WirelessDeviceIdType
+    WirelessDeviceIdType (..),
+
+    -- ** WirelessDeviceType
+    WirelessDeviceType (..),
+
+    -- ** WirelessGatewayEvent
+    WirelessGatewayEvent (..),
+
+    -- ** WirelessGatewayIdType
+    WirelessGatewayIdType (..),
+
+    -- ** WirelessGatewayServiceType
+    WirelessGatewayServiceType (..),
+
+    -- ** WirelessGatewayTaskDefinitionType
+    WirelessGatewayTaskDefinitionType (..),
+
+    -- ** WirelessGatewayTaskStatus
+    WirelessGatewayTaskStatus (..),
+
+    -- ** WirelessGatewayType
+    WirelessGatewayType (..),
+
+    -- ** AbpV1_0_x
+    AbpV1_0_x (AbpV1_0_x'),
+    newAbpV1_0_x,
+
+    -- ** AbpV1_1
+    AbpV1_1 (AbpV1_1'),
+    newAbpV1_1,
+
+    -- ** ApplicationConfig
+    ApplicationConfig (ApplicationConfig'),
+    newApplicationConfig,
+
+    -- ** Beaconing
+    Beaconing (Beaconing'),
+    newBeaconing,
+
+    -- ** CdmaLocalId
+    CdmaLocalId (CdmaLocalId'),
+    newCdmaLocalId,
+
+    -- ** CdmaNmrObj
+    CdmaNmrObj (CdmaNmrObj'),
+    newCdmaNmrObj,
+
+    -- ** CdmaObj
+    CdmaObj (CdmaObj'),
+    newCdmaObj,
+
+    -- ** CellTowers
+    CellTowers (CellTowers'),
+    newCellTowers,
+
+    -- ** CertificateList
+    CertificateList (CertificateList'),
+    newCertificateList,
+
+    -- ** ConnectionStatusEventConfiguration
+    ConnectionStatusEventConfiguration (ConnectionStatusEventConfiguration'),
+    newConnectionStatusEventConfiguration,
+
+    -- ** ConnectionStatusResourceTypeEventConfiguration
+    ConnectionStatusResourceTypeEventConfiguration (ConnectionStatusResourceTypeEventConfiguration'),
+    newConnectionStatusResourceTypeEventConfiguration,
+
+    -- ** Destinations
+    Destinations (Destinations'),
+    newDestinations,
+
+    -- ** DeviceProfile
+    DeviceProfile (DeviceProfile'),
+    newDeviceProfile,
+
+    -- ** DeviceRegistrationStateEventConfiguration
+    DeviceRegistrationStateEventConfiguration (DeviceRegistrationStateEventConfiguration'),
+    newDeviceRegistrationStateEventConfiguration,
+
+    -- ** DeviceRegistrationStateResourceTypeEventConfiguration
+    DeviceRegistrationStateResourceTypeEventConfiguration (DeviceRegistrationStateResourceTypeEventConfiguration'),
+    newDeviceRegistrationStateResourceTypeEventConfiguration,
+
+    -- ** DownlinkQueueMessage
+    DownlinkQueueMessage (DownlinkQueueMessage'),
+    newDownlinkQueueMessage,
+
+    -- ** EventConfigurationItem
+    EventConfigurationItem (EventConfigurationItem'),
+    newEventConfigurationItem,
+
+    -- ** EventNotificationItemConfigurations
+    EventNotificationItemConfigurations (EventNotificationItemConfigurations'),
+    newEventNotificationItemConfigurations,
+
+    -- ** FPorts
+    FPorts (FPorts'),
+    newFPorts,
+
+    -- ** FuotaTask
+    FuotaTask (FuotaTask'),
+    newFuotaTask,
+
+    -- ** GatewayListItem
+    GatewayListItem (GatewayListItem'),
+    newGatewayListItem,
+
+    -- ** GlobalIdentity
+    GlobalIdentity (GlobalIdentity'),
+    newGlobalIdentity,
+
+    -- ** Gnss
+    Gnss (Gnss'),
+    newGnss,
+
+    -- ** GsmLocalId
+    GsmLocalId (GsmLocalId'),
+    newGsmLocalId,
+
+    -- ** GsmNmrObj
+    GsmNmrObj (GsmNmrObj'),
+    newGsmNmrObj,
+
+    -- ** GsmObj
+    GsmObj (GsmObj'),
+    newGsmObj,
+
+    -- ** Ip
+    Ip (Ip'),
+    newIp,
+
+    -- ** JoinEventConfiguration
+    JoinEventConfiguration (JoinEventConfiguration'),
+    newJoinEventConfiguration,
+
+    -- ** JoinResourceTypeEventConfiguration
+    JoinResourceTypeEventConfiguration (JoinResourceTypeEventConfiguration'),
+    newJoinResourceTypeEventConfiguration,
+
+    -- ** LoRaWANConnectionStatusEventNotificationConfigurations
+    LoRaWANConnectionStatusEventNotificationConfigurations (LoRaWANConnectionStatusEventNotificationConfigurations'),
+    newLoRaWANConnectionStatusEventNotificationConfigurations,
+
+    -- ** LoRaWANConnectionStatusResourceTypeEventConfiguration
+    LoRaWANConnectionStatusResourceTypeEventConfiguration (LoRaWANConnectionStatusResourceTypeEventConfiguration'),
+    newLoRaWANConnectionStatusResourceTypeEventConfiguration,
+
+    -- ** LoRaWANDevice
+    LoRaWANDevice (LoRaWANDevice'),
+    newLoRaWANDevice,
+
+    -- ** LoRaWANDeviceMetadata
+    LoRaWANDeviceMetadata (LoRaWANDeviceMetadata'),
+    newLoRaWANDeviceMetadata,
+
+    -- ** LoRaWANDeviceProfile
+    LoRaWANDeviceProfile (LoRaWANDeviceProfile'),
+    newLoRaWANDeviceProfile,
+
+    -- ** LoRaWANFuotaTask
+    LoRaWANFuotaTask (LoRaWANFuotaTask'),
+    newLoRaWANFuotaTask,
+
+    -- ** LoRaWANFuotaTaskGetInfo
+    LoRaWANFuotaTaskGetInfo (LoRaWANFuotaTaskGetInfo'),
+    newLoRaWANFuotaTaskGetInfo,
+
+    -- ** LoRaWANGateway
+    LoRaWANGateway (LoRaWANGateway'),
+    newLoRaWANGateway,
+
+    -- ** LoRaWANGatewayCurrentVersion
+    LoRaWANGatewayCurrentVersion (LoRaWANGatewayCurrentVersion'),
+    newLoRaWANGatewayCurrentVersion,
+
+    -- ** LoRaWANGatewayMetadata
+    LoRaWANGatewayMetadata (LoRaWANGatewayMetadata'),
+    newLoRaWANGatewayMetadata,
+
+    -- ** LoRaWANGatewayVersion
+    LoRaWANGatewayVersion (LoRaWANGatewayVersion'),
+    newLoRaWANGatewayVersion,
+
+    -- ** LoRaWANGetServiceProfileInfo
+    LoRaWANGetServiceProfileInfo (LoRaWANGetServiceProfileInfo'),
+    newLoRaWANGetServiceProfileInfo,
+
+    -- ** LoRaWANJoinEventNotificationConfigurations
+    LoRaWANJoinEventNotificationConfigurations (LoRaWANJoinEventNotificationConfigurations'),
+    newLoRaWANJoinEventNotificationConfigurations,
+
+    -- ** LoRaWANJoinResourceTypeEventConfiguration
+    LoRaWANJoinResourceTypeEventConfiguration (LoRaWANJoinResourceTypeEventConfiguration'),
+    newLoRaWANJoinResourceTypeEventConfiguration,
+
+    -- ** LoRaWANListDevice
+    LoRaWANListDevice (LoRaWANListDevice'),
+    newLoRaWANListDevice,
+
+    -- ** LoRaWANMulticast
+    LoRaWANMulticast (LoRaWANMulticast'),
+    newLoRaWANMulticast,
+
+    -- ** LoRaWANMulticastGet
+    LoRaWANMulticastGet (LoRaWANMulticastGet'),
+    newLoRaWANMulticastGet,
+
+    -- ** LoRaWANMulticastMetadata
+    LoRaWANMulticastMetadata (LoRaWANMulticastMetadata'),
+    newLoRaWANMulticastMetadata,
+
+    -- ** LoRaWANMulticastSession
+    LoRaWANMulticastSession (LoRaWANMulticastSession'),
+    newLoRaWANMulticastSession,
+
+    -- ** LoRaWANSendDataToDevice
+    LoRaWANSendDataToDevice (LoRaWANSendDataToDevice'),
+    newLoRaWANSendDataToDevice,
+
+    -- ** LoRaWANServiceProfile
+    LoRaWANServiceProfile (LoRaWANServiceProfile'),
+    newLoRaWANServiceProfile,
+
+    -- ** LoRaWANStartFuotaTask
+    LoRaWANStartFuotaTask (LoRaWANStartFuotaTask'),
+    newLoRaWANStartFuotaTask,
+
+    -- ** LoRaWANUpdateDevice
+    LoRaWANUpdateDevice (LoRaWANUpdateDevice'),
+    newLoRaWANUpdateDevice,
+
+    -- ** LoRaWANUpdateGatewayTaskCreate
+    LoRaWANUpdateGatewayTaskCreate (LoRaWANUpdateGatewayTaskCreate'),
+    newLoRaWANUpdateGatewayTaskCreate,
+
+    -- ** LoRaWANUpdateGatewayTaskEntry
+    LoRaWANUpdateGatewayTaskEntry (LoRaWANUpdateGatewayTaskEntry'),
+    newLoRaWANUpdateGatewayTaskEntry,
+
+    -- ** LteLocalId
+    LteLocalId (LteLocalId'),
+    newLteLocalId,
+
+    -- ** LteNmrObj
+    LteNmrObj (LteNmrObj'),
+    newLteNmrObj,
+
+    -- ** LteObj
+    LteObj (LteObj'),
+    newLteObj,
+
+    -- ** MessageDeliveryStatusEventConfiguration
+    MessageDeliveryStatusEventConfiguration (MessageDeliveryStatusEventConfiguration'),
+    newMessageDeliveryStatusEventConfiguration,
+
+    -- ** MessageDeliveryStatusResourceTypeEventConfiguration
+    MessageDeliveryStatusResourceTypeEventConfiguration (MessageDeliveryStatusResourceTypeEventConfiguration'),
+    newMessageDeliveryStatusResourceTypeEventConfiguration,
+
+    -- ** MulticastGroup
+    MulticastGroup (MulticastGroup'),
+    newMulticastGroup,
+
+    -- ** MulticastGroupByFuotaTask
+    MulticastGroupByFuotaTask (MulticastGroupByFuotaTask'),
+    newMulticastGroupByFuotaTask,
+
+    -- ** MulticastWirelessMetadata
+    MulticastWirelessMetadata (MulticastWirelessMetadata'),
+    newMulticastWirelessMetadata,
+
+    -- ** NetworkAnalyzerConfigurations
+    NetworkAnalyzerConfigurations (NetworkAnalyzerConfigurations'),
+    newNetworkAnalyzerConfigurations,
+
+    -- ** OtaaV1_0_x
+    OtaaV1_0_x (OtaaV1_0_x'),
+    newOtaaV1_0_x,
+
+    -- ** OtaaV1_1
+    OtaaV1_1 (OtaaV1_1'),
+    newOtaaV1_1,
+
+    -- ** ParticipatingGateways
+    ParticipatingGateways (ParticipatingGateways'),
+    newParticipatingGateways,
+
+    -- ** Positioning
+    Positioning (Positioning'),
+    newPositioning,
+
+    -- ** ProximityEventConfiguration
+    ProximityEventConfiguration (ProximityEventConfiguration'),
+    newProximityEventConfiguration,
+
+    -- ** ProximityResourceTypeEventConfiguration
+    ProximityResourceTypeEventConfiguration (ProximityResourceTypeEventConfiguration'),
+    newProximityResourceTypeEventConfiguration,
+
+    -- ** ServiceProfile
+    ServiceProfile (ServiceProfile'),
+    newServiceProfile,
+
+    -- ** SessionKeysAbpV1_0_x
+    SessionKeysAbpV1_0_x (SessionKeysAbpV1_0_x'),
+    newSessionKeysAbpV1_0_x,
+
+    -- ** SessionKeysAbpV1_1
+    SessionKeysAbpV1_1 (SessionKeysAbpV1_1'),
+    newSessionKeysAbpV1_1,
+
+    -- ** SidewalkAccountInfo
+    SidewalkAccountInfo (SidewalkAccountInfo'),
+    newSidewalkAccountInfo,
+
+    -- ** SidewalkAccountInfoWithFingerprint
+    SidewalkAccountInfoWithFingerprint (SidewalkAccountInfoWithFingerprint'),
+    newSidewalkAccountInfoWithFingerprint,
+
+    -- ** SidewalkDevice
+    SidewalkDevice (SidewalkDevice'),
+    newSidewalkDevice,
+
+    -- ** SidewalkDeviceMetadata
+    SidewalkDeviceMetadata (SidewalkDeviceMetadata'),
+    newSidewalkDeviceMetadata,
+
+    -- ** SidewalkEventNotificationConfigurations
+    SidewalkEventNotificationConfigurations (SidewalkEventNotificationConfigurations'),
+    newSidewalkEventNotificationConfigurations,
+
+    -- ** SidewalkListDevice
+    SidewalkListDevice (SidewalkListDevice'),
+    newSidewalkListDevice,
+
+    -- ** SidewalkResourceTypeEventConfiguration
+    SidewalkResourceTypeEventConfiguration (SidewalkResourceTypeEventConfiguration'),
+    newSidewalkResourceTypeEventConfiguration,
+
+    -- ** SidewalkSendDataToDevice
+    SidewalkSendDataToDevice (SidewalkSendDataToDevice'),
+    newSidewalkSendDataToDevice,
+
+    -- ** SidewalkUpdateAccount
+    SidewalkUpdateAccount (SidewalkUpdateAccount'),
+    newSidewalkUpdateAccount,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TdscdmaLocalId
+    TdscdmaLocalId (TdscdmaLocalId'),
+    newTdscdmaLocalId,
+
+    -- ** TdscdmaNmrObj
+    TdscdmaNmrObj (TdscdmaNmrObj'),
+    newTdscdmaNmrObj,
+
+    -- ** TdscdmaObj
+    TdscdmaObj (TdscdmaObj'),
+    newTdscdmaObj,
+
+    -- ** TraceContent
+    TraceContent (TraceContent'),
+    newTraceContent,
+
+    -- ** UpdateAbpV1_0_x
+    UpdateAbpV1_0_x (UpdateAbpV1_0_x'),
+    newUpdateAbpV1_0_x,
+
+    -- ** UpdateAbpV1_1
+    UpdateAbpV1_1 (UpdateAbpV1_1'),
+    newUpdateAbpV1_1,
+
+    -- ** UpdateFPorts
+    UpdateFPorts (UpdateFPorts'),
+    newUpdateFPorts,
+
+    -- ** UpdateWirelessGatewayTaskCreate
+    UpdateWirelessGatewayTaskCreate (UpdateWirelessGatewayTaskCreate'),
+    newUpdateWirelessGatewayTaskCreate,
+
+    -- ** UpdateWirelessGatewayTaskEntry
+    UpdateWirelessGatewayTaskEntry (UpdateWirelessGatewayTaskEntry'),
+    newUpdateWirelessGatewayTaskEntry,
+
+    -- ** WcdmaLocalId
+    WcdmaLocalId (WcdmaLocalId'),
+    newWcdmaLocalId,
+
+    -- ** WcdmaNmrObj
+    WcdmaNmrObj (WcdmaNmrObj'),
+    newWcdmaNmrObj,
+
+    -- ** WcdmaObj
+    WcdmaObj (WcdmaObj'),
+    newWcdmaObj,
+
+    -- ** WiFiAccessPoint
+    WiFiAccessPoint (WiFiAccessPoint'),
+    newWiFiAccessPoint,
+
+    -- ** WirelessDeviceEventLogOption
+    WirelessDeviceEventLogOption (WirelessDeviceEventLogOption'),
+    newWirelessDeviceEventLogOption,
+
+    -- ** WirelessDeviceLogOption
+    WirelessDeviceLogOption (WirelessDeviceLogOption'),
+    newWirelessDeviceLogOption,
+
+    -- ** WirelessDeviceStatistics
+    WirelessDeviceStatistics (WirelessDeviceStatistics'),
+    newWirelessDeviceStatistics,
+
+    -- ** WirelessGatewayEventLogOption
+    WirelessGatewayEventLogOption (WirelessGatewayEventLogOption'),
+    newWirelessGatewayEventLogOption,
+
+    -- ** WirelessGatewayLogOption
+    WirelessGatewayLogOption (WirelessGatewayLogOption'),
+    newWirelessGatewayLogOption,
+
+    -- ** WirelessGatewayStatistics
+    WirelessGatewayStatistics (WirelessGatewayStatistics'),
+    newWirelessGatewayStatistics,
+
+    -- ** WirelessMetadata
+    WirelessMetadata (WirelessMetadata'),
+    newWirelessMetadata,
+  )
+where
+
+import Amazonka.IoTWireless.AssociateAwsAccountWithPartnerAccount
+import Amazonka.IoTWireless.AssociateMulticastGroupWithFuotaTask
+import Amazonka.IoTWireless.AssociateWirelessDeviceWithFuotaTask
+import Amazonka.IoTWireless.AssociateWirelessDeviceWithMulticastGroup
+import Amazonka.IoTWireless.AssociateWirelessDeviceWithThing
+import Amazonka.IoTWireless.AssociateWirelessGatewayWithCertificate
+import Amazonka.IoTWireless.AssociateWirelessGatewayWithThing
+import Amazonka.IoTWireless.CancelMulticastGroupSession
+import Amazonka.IoTWireless.CreateDestination
+import Amazonka.IoTWireless.CreateDeviceProfile
+import Amazonka.IoTWireless.CreateFuotaTask
+import Amazonka.IoTWireless.CreateMulticastGroup
+import Amazonka.IoTWireless.CreateNetworkAnalyzerConfiguration
+import Amazonka.IoTWireless.CreateServiceProfile
+import Amazonka.IoTWireless.CreateWirelessDevice
+import Amazonka.IoTWireless.CreateWirelessGateway
+import Amazonka.IoTWireless.CreateWirelessGatewayTask
+import Amazonka.IoTWireless.CreateWirelessGatewayTaskDefinition
+import Amazonka.IoTWireless.DeleteDestination
+import Amazonka.IoTWireless.DeleteDeviceProfile
+import Amazonka.IoTWireless.DeleteFuotaTask
+import Amazonka.IoTWireless.DeleteMulticastGroup
+import Amazonka.IoTWireless.DeleteNetworkAnalyzerConfiguration
+import Amazonka.IoTWireless.DeleteQueuedMessages
+import Amazonka.IoTWireless.DeleteServiceProfile
+import Amazonka.IoTWireless.DeleteWirelessDevice
+import Amazonka.IoTWireless.DeleteWirelessGateway
+import Amazonka.IoTWireless.DeleteWirelessGatewayTask
+import Amazonka.IoTWireless.DeleteWirelessGatewayTaskDefinition
+import Amazonka.IoTWireless.DisassociateAwsAccountFromPartnerAccount
+import Amazonka.IoTWireless.DisassociateMulticastGroupFromFuotaTask
+import Amazonka.IoTWireless.DisassociateWirelessDeviceFromFuotaTask
+import Amazonka.IoTWireless.DisassociateWirelessDeviceFromMulticastGroup
+import Amazonka.IoTWireless.DisassociateWirelessDeviceFromThing
+import Amazonka.IoTWireless.DisassociateWirelessGatewayFromCertificate
+import Amazonka.IoTWireless.DisassociateWirelessGatewayFromThing
+import Amazonka.IoTWireless.GetDestination
+import Amazonka.IoTWireless.GetDeviceProfile
+import Amazonka.IoTWireless.GetEventConfigurationByResourceTypes
+import Amazonka.IoTWireless.GetFuotaTask
+import Amazonka.IoTWireless.GetLogLevelsByResourceTypes
+import Amazonka.IoTWireless.GetMulticastGroup
+import Amazonka.IoTWireless.GetMulticastGroupSession
+import Amazonka.IoTWireless.GetNetworkAnalyzerConfiguration
+import Amazonka.IoTWireless.GetPartnerAccount
+import Amazonka.IoTWireless.GetPositionEstimate
+import Amazonka.IoTWireless.GetResourceEventConfiguration
+import Amazonka.IoTWireless.GetResourceLogLevel
+import Amazonka.IoTWireless.GetResourcePosition
+import Amazonka.IoTWireless.GetServiceEndpoint
+import Amazonka.IoTWireless.GetServiceProfile
+import Amazonka.IoTWireless.GetWirelessDevice
+import Amazonka.IoTWireless.GetWirelessDeviceStatistics
+import Amazonka.IoTWireless.GetWirelessGateway
+import Amazonka.IoTWireless.GetWirelessGatewayCertificate
+import Amazonka.IoTWireless.GetWirelessGatewayFirmwareInformation
+import Amazonka.IoTWireless.GetWirelessGatewayStatistics
+import Amazonka.IoTWireless.GetWirelessGatewayTask
+import Amazonka.IoTWireless.GetWirelessGatewayTaskDefinition
+import Amazonka.IoTWireless.Lens
+import Amazonka.IoTWireless.ListDestinations
+import Amazonka.IoTWireless.ListDeviceProfiles
+import Amazonka.IoTWireless.ListEventConfigurations
+import Amazonka.IoTWireless.ListFuotaTasks
+import Amazonka.IoTWireless.ListMulticastGroups
+import Amazonka.IoTWireless.ListMulticastGroupsByFuotaTask
+import Amazonka.IoTWireless.ListNetworkAnalyzerConfigurations
+import Amazonka.IoTWireless.ListPartnerAccounts
+import Amazonka.IoTWireless.ListQueuedMessages
+import Amazonka.IoTWireless.ListServiceProfiles
+import Amazonka.IoTWireless.ListTagsForResource
+import Amazonka.IoTWireless.ListWirelessDevices
+import Amazonka.IoTWireless.ListWirelessGatewayTaskDefinitions
+import Amazonka.IoTWireless.ListWirelessGateways
+import Amazonka.IoTWireless.PutResourceLogLevel
+import Amazonka.IoTWireless.ResetAllResourceLogLevels
+import Amazonka.IoTWireless.ResetResourceLogLevel
+import Amazonka.IoTWireless.SendDataToMulticastGroup
+import Amazonka.IoTWireless.SendDataToWirelessDevice
+import Amazonka.IoTWireless.StartBulkAssociateWirelessDeviceWithMulticastGroup
+import Amazonka.IoTWireless.StartBulkDisassociateWirelessDeviceFromMulticastGroup
+import Amazonka.IoTWireless.StartFuotaTask
+import Amazonka.IoTWireless.StartMulticastGroupSession
+import Amazonka.IoTWireless.TagResource
+import Amazonka.IoTWireless.TestWirelessDevice
+import Amazonka.IoTWireless.Types
+import Amazonka.IoTWireless.UntagResource
+import Amazonka.IoTWireless.UpdateDestination
+import Amazonka.IoTWireless.UpdateEventConfigurationByResourceTypes
+import Amazonka.IoTWireless.UpdateFuotaTask
+import Amazonka.IoTWireless.UpdateLogLevelsByResourceTypes
+import Amazonka.IoTWireless.UpdateMulticastGroup
+import Amazonka.IoTWireless.UpdateNetworkAnalyzerConfiguration
+import Amazonka.IoTWireless.UpdatePartnerAccount
+import Amazonka.IoTWireless.UpdateResourceEventConfiguration
+import Amazonka.IoTWireless.UpdateResourcePosition
+import Amazonka.IoTWireless.UpdateWirelessDevice
+import Amazonka.IoTWireless.UpdateWirelessGateway
+import Amazonka.IoTWireless.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 'IoTWireless'.
+
+-- $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/IoTWireless/AssociateAwsAccountWithPartnerAccount.hs b/gen/Amazonka/IoTWireless/AssociateAwsAccountWithPartnerAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/AssociateAwsAccountWithPartnerAccount.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.IoTWireless.AssociateAwsAccountWithPartnerAccount
+-- 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 partner account with your AWS account.
+module Amazonka.IoTWireless.AssociateAwsAccountWithPartnerAccount
+  ( -- * Creating a Request
+    AssociateAwsAccountWithPartnerAccount (..),
+    newAssociateAwsAccountWithPartnerAccount,
+
+    -- * Request Lenses
+    associateAwsAccountWithPartnerAccount_clientRequestToken,
+    associateAwsAccountWithPartnerAccount_tags,
+    associateAwsAccountWithPartnerAccount_sidewalk,
+
+    -- * Destructuring the Response
+    AssociateAwsAccountWithPartnerAccountResponse (..),
+    newAssociateAwsAccountWithPartnerAccountResponse,
+
+    -- * Response Lenses
+    associateAwsAccountWithPartnerAccountResponse_arn,
+    associateAwsAccountWithPartnerAccountResponse_sidewalk,
+    associateAwsAccountWithPartnerAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateAwsAccountWithPartnerAccount' smart constructor.
+data AssociateAwsAccountWithPartnerAccount = AssociateAwsAccountWithPartnerAccount'
+  { -- | Each resource must have a unique client request token. If you try to
+    -- create a new resource with the same token as a resource that already
+    -- exists, an exception occurs. If you omit this value, AWS SDKs will
+    -- automatically generate a unique client request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The tags to attach to the specified resource. Tags are metadata that you
+    -- can use to manage a resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The Sidewalk account credentials.
+    sidewalk :: SidewalkAccountInfo
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateAwsAccountWithPartnerAccount' 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', 'associateAwsAccountWithPartnerAccount_clientRequestToken' - Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+--
+-- 'tags', 'associateAwsAccountWithPartnerAccount_tags' - The tags to attach to the specified resource. Tags are metadata that you
+-- can use to manage a resource.
+--
+-- 'sidewalk', 'associateAwsAccountWithPartnerAccount_sidewalk' - The Sidewalk account credentials.
+newAssociateAwsAccountWithPartnerAccount ::
+  -- | 'sidewalk'
+  SidewalkAccountInfo ->
+  AssociateAwsAccountWithPartnerAccount
+newAssociateAwsAccountWithPartnerAccount pSidewalk_ =
+  AssociateAwsAccountWithPartnerAccount'
+    { clientRequestToken =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      sidewalk = pSidewalk_
+    }
+
+-- | Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+associateAwsAccountWithPartnerAccount_clientRequestToken :: Lens.Lens' AssociateAwsAccountWithPartnerAccount (Prelude.Maybe Prelude.Text)
+associateAwsAccountWithPartnerAccount_clientRequestToken = Lens.lens (\AssociateAwsAccountWithPartnerAccount' {clientRequestToken} -> clientRequestToken) (\s@AssociateAwsAccountWithPartnerAccount' {} a -> s {clientRequestToken = a} :: AssociateAwsAccountWithPartnerAccount)
+
+-- | The tags to attach to the specified resource. Tags are metadata that you
+-- can use to manage a resource.
+associateAwsAccountWithPartnerAccount_tags :: Lens.Lens' AssociateAwsAccountWithPartnerAccount (Prelude.Maybe [Tag])
+associateAwsAccountWithPartnerAccount_tags = Lens.lens (\AssociateAwsAccountWithPartnerAccount' {tags} -> tags) (\s@AssociateAwsAccountWithPartnerAccount' {} a -> s {tags = a} :: AssociateAwsAccountWithPartnerAccount) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Sidewalk account credentials.
+associateAwsAccountWithPartnerAccount_sidewalk :: Lens.Lens' AssociateAwsAccountWithPartnerAccount SidewalkAccountInfo
+associateAwsAccountWithPartnerAccount_sidewalk = Lens.lens (\AssociateAwsAccountWithPartnerAccount' {sidewalk} -> sidewalk) (\s@AssociateAwsAccountWithPartnerAccount' {} a -> s {sidewalk = a} :: AssociateAwsAccountWithPartnerAccount)
+
+instance
+  Core.AWSRequest
+    AssociateAwsAccountWithPartnerAccount
+  where
+  type
+    AWSResponse
+      AssociateAwsAccountWithPartnerAccount =
+      AssociateAwsAccountWithPartnerAccountResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateAwsAccountWithPartnerAccountResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Sidewalk")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateAwsAccountWithPartnerAccount
+  where
+  hashWithSalt
+    _salt
+    AssociateAwsAccountWithPartnerAccount' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientRequestToken
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` sidewalk
+
+instance
+  Prelude.NFData
+    AssociateAwsAccountWithPartnerAccount
+  where
+  rnf AssociateAwsAccountWithPartnerAccount' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf sidewalk
+
+instance
+  Data.ToHeaders
+    AssociateAwsAccountWithPartnerAccount
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    AssociateAwsAccountWithPartnerAccount
+  where
+  toJSON AssociateAwsAccountWithPartnerAccount' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Sidewalk" Data..= sidewalk)
+          ]
+      )
+
+instance
+  Data.ToPath
+    AssociateAwsAccountWithPartnerAccount
+  where
+  toPath = Prelude.const "/partner-accounts"
+
+instance
+  Data.ToQuery
+    AssociateAwsAccountWithPartnerAccount
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateAwsAccountWithPartnerAccountResponse' smart constructor.
+data AssociateAwsAccountWithPartnerAccountResponse = AssociateAwsAccountWithPartnerAccountResponse'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The Sidewalk account credentials.
+    sidewalk :: Prelude.Maybe SidewalkAccountInfo,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateAwsAccountWithPartnerAccountResponse' 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', 'associateAwsAccountWithPartnerAccountResponse_arn' - The Amazon Resource Name of the resource.
+--
+-- 'sidewalk', 'associateAwsAccountWithPartnerAccountResponse_sidewalk' - The Sidewalk account credentials.
+--
+-- 'httpStatus', 'associateAwsAccountWithPartnerAccountResponse_httpStatus' - The response's http status code.
+newAssociateAwsAccountWithPartnerAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateAwsAccountWithPartnerAccountResponse
+newAssociateAwsAccountWithPartnerAccountResponse
+  pHttpStatus_ =
+    AssociateAwsAccountWithPartnerAccountResponse'
+      { arn =
+          Prelude.Nothing,
+        sidewalk = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name of the resource.
+associateAwsAccountWithPartnerAccountResponse_arn :: Lens.Lens' AssociateAwsAccountWithPartnerAccountResponse (Prelude.Maybe Prelude.Text)
+associateAwsAccountWithPartnerAccountResponse_arn = Lens.lens (\AssociateAwsAccountWithPartnerAccountResponse' {arn} -> arn) (\s@AssociateAwsAccountWithPartnerAccountResponse' {} a -> s {arn = a} :: AssociateAwsAccountWithPartnerAccountResponse)
+
+-- | The Sidewalk account credentials.
+associateAwsAccountWithPartnerAccountResponse_sidewalk :: Lens.Lens' AssociateAwsAccountWithPartnerAccountResponse (Prelude.Maybe SidewalkAccountInfo)
+associateAwsAccountWithPartnerAccountResponse_sidewalk = Lens.lens (\AssociateAwsAccountWithPartnerAccountResponse' {sidewalk} -> sidewalk) (\s@AssociateAwsAccountWithPartnerAccountResponse' {} a -> s {sidewalk = a} :: AssociateAwsAccountWithPartnerAccountResponse)
+
+-- | The response's http status code.
+associateAwsAccountWithPartnerAccountResponse_httpStatus :: Lens.Lens' AssociateAwsAccountWithPartnerAccountResponse Prelude.Int
+associateAwsAccountWithPartnerAccountResponse_httpStatus = Lens.lens (\AssociateAwsAccountWithPartnerAccountResponse' {httpStatus} -> httpStatus) (\s@AssociateAwsAccountWithPartnerAccountResponse' {} a -> s {httpStatus = a} :: AssociateAwsAccountWithPartnerAccountResponse)
+
+instance
+  Prelude.NFData
+    AssociateAwsAccountWithPartnerAccountResponse
+  where
+  rnf
+    AssociateAwsAccountWithPartnerAccountResponse' {..} =
+      Prelude.rnf arn
+        `Prelude.seq` Prelude.rnf sidewalk
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/AssociateMulticastGroupWithFuotaTask.hs b/gen/Amazonka/IoTWireless/AssociateMulticastGroupWithFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/AssociateMulticastGroupWithFuotaTask.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.IoTWireless.AssociateMulticastGroupWithFuotaTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associate a multicast group with a FUOTA task.
+module Amazonka.IoTWireless.AssociateMulticastGroupWithFuotaTask
+  ( -- * Creating a Request
+    AssociateMulticastGroupWithFuotaTask (..),
+    newAssociateMulticastGroupWithFuotaTask,
+
+    -- * Request Lenses
+    associateMulticastGroupWithFuotaTask_id,
+    associateMulticastGroupWithFuotaTask_multicastGroupId,
+
+    -- * Destructuring the Response
+    AssociateMulticastGroupWithFuotaTaskResponse (..),
+    newAssociateMulticastGroupWithFuotaTaskResponse,
+
+    -- * Response Lenses
+    associateMulticastGroupWithFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateMulticastGroupWithFuotaTask' smart constructor.
+data AssociateMulticastGroupWithFuotaTask = AssociateMulticastGroupWithFuotaTask'
+  { id :: Prelude.Text,
+    multicastGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateMulticastGroupWithFuotaTask' 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:
+--
+-- 'id', 'associateMulticastGroupWithFuotaTask_id' - Undocumented member.
+--
+-- 'multicastGroupId', 'associateMulticastGroupWithFuotaTask_multicastGroupId' - Undocumented member.
+newAssociateMulticastGroupWithFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'multicastGroupId'
+  Prelude.Text ->
+  AssociateMulticastGroupWithFuotaTask
+newAssociateMulticastGroupWithFuotaTask
+  pId_
+  pMulticastGroupId_ =
+    AssociateMulticastGroupWithFuotaTask'
+      { id = pId_,
+        multicastGroupId = pMulticastGroupId_
+      }
+
+-- | Undocumented member.
+associateMulticastGroupWithFuotaTask_id :: Lens.Lens' AssociateMulticastGroupWithFuotaTask Prelude.Text
+associateMulticastGroupWithFuotaTask_id = Lens.lens (\AssociateMulticastGroupWithFuotaTask' {id} -> id) (\s@AssociateMulticastGroupWithFuotaTask' {} a -> s {id = a} :: AssociateMulticastGroupWithFuotaTask)
+
+-- | Undocumented member.
+associateMulticastGroupWithFuotaTask_multicastGroupId :: Lens.Lens' AssociateMulticastGroupWithFuotaTask Prelude.Text
+associateMulticastGroupWithFuotaTask_multicastGroupId = Lens.lens (\AssociateMulticastGroupWithFuotaTask' {multicastGroupId} -> multicastGroupId) (\s@AssociateMulticastGroupWithFuotaTask' {} a -> s {multicastGroupId = a} :: AssociateMulticastGroupWithFuotaTask)
+
+instance
+  Core.AWSRequest
+    AssociateMulticastGroupWithFuotaTask
+  where
+  type
+    AWSResponse AssociateMulticastGroupWithFuotaTask =
+      AssociateMulticastGroupWithFuotaTaskResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateMulticastGroupWithFuotaTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateMulticastGroupWithFuotaTask
+  where
+  hashWithSalt
+    _salt
+    AssociateMulticastGroupWithFuotaTask' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` multicastGroupId
+
+instance
+  Prelude.NFData
+    AssociateMulticastGroupWithFuotaTask
+  where
+  rnf AssociateMulticastGroupWithFuotaTask' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf multicastGroupId
+
+instance
+  Data.ToHeaders
+    AssociateMulticastGroupWithFuotaTask
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    AssociateMulticastGroupWithFuotaTask
+  where
+  toJSON AssociateMulticastGroupWithFuotaTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("MulticastGroupId" Data..= multicastGroupId)
+          ]
+      )
+
+instance
+  Data.ToPath
+    AssociateMulticastGroupWithFuotaTask
+  where
+  toPath AssociateMulticastGroupWithFuotaTask' {..} =
+    Prelude.mconcat
+      ["/fuota-tasks/", Data.toBS id, "/multicast-group"]
+
+instance
+  Data.ToQuery
+    AssociateMulticastGroupWithFuotaTask
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateMulticastGroupWithFuotaTaskResponse' smart constructor.
+data AssociateMulticastGroupWithFuotaTaskResponse = AssociateMulticastGroupWithFuotaTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateMulticastGroupWithFuotaTaskResponse' 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', 'associateMulticastGroupWithFuotaTaskResponse_httpStatus' - The response's http status code.
+newAssociateMulticastGroupWithFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateMulticastGroupWithFuotaTaskResponse
+newAssociateMulticastGroupWithFuotaTaskResponse
+  pHttpStatus_ =
+    AssociateMulticastGroupWithFuotaTaskResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+associateMulticastGroupWithFuotaTaskResponse_httpStatus :: Lens.Lens' AssociateMulticastGroupWithFuotaTaskResponse Prelude.Int
+associateMulticastGroupWithFuotaTaskResponse_httpStatus = Lens.lens (\AssociateMulticastGroupWithFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@AssociateMulticastGroupWithFuotaTaskResponse' {} a -> s {httpStatus = a} :: AssociateMulticastGroupWithFuotaTaskResponse)
+
+instance
+  Prelude.NFData
+    AssociateMulticastGroupWithFuotaTaskResponse
+  where
+  rnf AssociateMulticastGroupWithFuotaTaskResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithFuotaTask.hs b/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithFuotaTask.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.IoTWireless.AssociateWirelessDeviceWithFuotaTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associate a wireless device with a FUOTA task.
+module Amazonka.IoTWireless.AssociateWirelessDeviceWithFuotaTask
+  ( -- * Creating a Request
+    AssociateWirelessDeviceWithFuotaTask (..),
+    newAssociateWirelessDeviceWithFuotaTask,
+
+    -- * Request Lenses
+    associateWirelessDeviceWithFuotaTask_id,
+    associateWirelessDeviceWithFuotaTask_wirelessDeviceId,
+
+    -- * Destructuring the Response
+    AssociateWirelessDeviceWithFuotaTaskResponse (..),
+    newAssociateWirelessDeviceWithFuotaTaskResponse,
+
+    -- * Response Lenses
+    associateWirelessDeviceWithFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateWirelessDeviceWithFuotaTask' smart constructor.
+data AssociateWirelessDeviceWithFuotaTask = AssociateWirelessDeviceWithFuotaTask'
+  { id :: Prelude.Text,
+    wirelessDeviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessDeviceWithFuotaTask' 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:
+--
+-- 'id', 'associateWirelessDeviceWithFuotaTask_id' - Undocumented member.
+--
+-- 'wirelessDeviceId', 'associateWirelessDeviceWithFuotaTask_wirelessDeviceId' - Undocumented member.
+newAssociateWirelessDeviceWithFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'wirelessDeviceId'
+  Prelude.Text ->
+  AssociateWirelessDeviceWithFuotaTask
+newAssociateWirelessDeviceWithFuotaTask
+  pId_
+  pWirelessDeviceId_ =
+    AssociateWirelessDeviceWithFuotaTask'
+      { id = pId_,
+        wirelessDeviceId = pWirelessDeviceId_
+      }
+
+-- | Undocumented member.
+associateWirelessDeviceWithFuotaTask_id :: Lens.Lens' AssociateWirelessDeviceWithFuotaTask Prelude.Text
+associateWirelessDeviceWithFuotaTask_id = Lens.lens (\AssociateWirelessDeviceWithFuotaTask' {id} -> id) (\s@AssociateWirelessDeviceWithFuotaTask' {} a -> s {id = a} :: AssociateWirelessDeviceWithFuotaTask)
+
+-- | Undocumented member.
+associateWirelessDeviceWithFuotaTask_wirelessDeviceId :: Lens.Lens' AssociateWirelessDeviceWithFuotaTask Prelude.Text
+associateWirelessDeviceWithFuotaTask_wirelessDeviceId = Lens.lens (\AssociateWirelessDeviceWithFuotaTask' {wirelessDeviceId} -> wirelessDeviceId) (\s@AssociateWirelessDeviceWithFuotaTask' {} a -> s {wirelessDeviceId = a} :: AssociateWirelessDeviceWithFuotaTask)
+
+instance
+  Core.AWSRequest
+    AssociateWirelessDeviceWithFuotaTask
+  where
+  type
+    AWSResponse AssociateWirelessDeviceWithFuotaTask =
+      AssociateWirelessDeviceWithFuotaTaskResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateWirelessDeviceWithFuotaTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateWirelessDeviceWithFuotaTask
+  where
+  hashWithSalt
+    _salt
+    AssociateWirelessDeviceWithFuotaTask' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` wirelessDeviceId
+
+instance
+  Prelude.NFData
+    AssociateWirelessDeviceWithFuotaTask
+  where
+  rnf AssociateWirelessDeviceWithFuotaTask' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf wirelessDeviceId
+
+instance
+  Data.ToHeaders
+    AssociateWirelessDeviceWithFuotaTask
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    AssociateWirelessDeviceWithFuotaTask
+  where
+  toJSON AssociateWirelessDeviceWithFuotaTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("WirelessDeviceId" Data..= wirelessDeviceId)
+          ]
+      )
+
+instance
+  Data.ToPath
+    AssociateWirelessDeviceWithFuotaTask
+  where
+  toPath AssociateWirelessDeviceWithFuotaTask' {..} =
+    Prelude.mconcat
+      ["/fuota-tasks/", Data.toBS id, "/wireless-device"]
+
+instance
+  Data.ToQuery
+    AssociateWirelessDeviceWithFuotaTask
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateWirelessDeviceWithFuotaTaskResponse' smart constructor.
+data AssociateWirelessDeviceWithFuotaTaskResponse = AssociateWirelessDeviceWithFuotaTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessDeviceWithFuotaTaskResponse' 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', 'associateWirelessDeviceWithFuotaTaskResponse_httpStatus' - The response's http status code.
+newAssociateWirelessDeviceWithFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateWirelessDeviceWithFuotaTaskResponse
+newAssociateWirelessDeviceWithFuotaTaskResponse
+  pHttpStatus_ =
+    AssociateWirelessDeviceWithFuotaTaskResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+associateWirelessDeviceWithFuotaTaskResponse_httpStatus :: Lens.Lens' AssociateWirelessDeviceWithFuotaTaskResponse Prelude.Int
+associateWirelessDeviceWithFuotaTaskResponse_httpStatus = Lens.lens (\AssociateWirelessDeviceWithFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@AssociateWirelessDeviceWithFuotaTaskResponse' {} a -> s {httpStatus = a} :: AssociateWirelessDeviceWithFuotaTaskResponse)
+
+instance
+  Prelude.NFData
+    AssociateWirelessDeviceWithFuotaTaskResponse
+  where
+  rnf AssociateWirelessDeviceWithFuotaTaskResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithMulticastGroup.hs b/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithMulticastGroup.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.IoTWireless.AssociateWirelessDeviceWithMulticastGroup
+-- 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 wireless device with a multicast group.
+module Amazonka.IoTWireless.AssociateWirelessDeviceWithMulticastGroup
+  ( -- * Creating a Request
+    AssociateWirelessDeviceWithMulticastGroup (..),
+    newAssociateWirelessDeviceWithMulticastGroup,
+
+    -- * Request Lenses
+    associateWirelessDeviceWithMulticastGroup_id,
+    associateWirelessDeviceWithMulticastGroup_wirelessDeviceId,
+
+    -- * Destructuring the Response
+    AssociateWirelessDeviceWithMulticastGroupResponse (..),
+    newAssociateWirelessDeviceWithMulticastGroupResponse,
+
+    -- * Response Lenses
+    associateWirelessDeviceWithMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateWirelessDeviceWithMulticastGroup' smart constructor.
+data AssociateWirelessDeviceWithMulticastGroup = AssociateWirelessDeviceWithMulticastGroup'
+  { id :: Prelude.Text,
+    wirelessDeviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessDeviceWithMulticastGroup' 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:
+--
+-- 'id', 'associateWirelessDeviceWithMulticastGroup_id' - Undocumented member.
+--
+-- 'wirelessDeviceId', 'associateWirelessDeviceWithMulticastGroup_wirelessDeviceId' - Undocumented member.
+newAssociateWirelessDeviceWithMulticastGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'wirelessDeviceId'
+  Prelude.Text ->
+  AssociateWirelessDeviceWithMulticastGroup
+newAssociateWirelessDeviceWithMulticastGroup
+  pId_
+  pWirelessDeviceId_ =
+    AssociateWirelessDeviceWithMulticastGroup'
+      { id =
+          pId_,
+        wirelessDeviceId =
+          pWirelessDeviceId_
+      }
+
+-- | Undocumented member.
+associateWirelessDeviceWithMulticastGroup_id :: Lens.Lens' AssociateWirelessDeviceWithMulticastGroup Prelude.Text
+associateWirelessDeviceWithMulticastGroup_id = Lens.lens (\AssociateWirelessDeviceWithMulticastGroup' {id} -> id) (\s@AssociateWirelessDeviceWithMulticastGroup' {} a -> s {id = a} :: AssociateWirelessDeviceWithMulticastGroup)
+
+-- | Undocumented member.
+associateWirelessDeviceWithMulticastGroup_wirelessDeviceId :: Lens.Lens' AssociateWirelessDeviceWithMulticastGroup Prelude.Text
+associateWirelessDeviceWithMulticastGroup_wirelessDeviceId = Lens.lens (\AssociateWirelessDeviceWithMulticastGroup' {wirelessDeviceId} -> wirelessDeviceId) (\s@AssociateWirelessDeviceWithMulticastGroup' {} a -> s {wirelessDeviceId = a} :: AssociateWirelessDeviceWithMulticastGroup)
+
+instance
+  Core.AWSRequest
+    AssociateWirelessDeviceWithMulticastGroup
+  where
+  type
+    AWSResponse
+      AssociateWirelessDeviceWithMulticastGroup =
+      AssociateWirelessDeviceWithMulticastGroupResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateWirelessDeviceWithMulticastGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateWirelessDeviceWithMulticastGroup
+  where
+  hashWithSalt
+    _salt
+    AssociateWirelessDeviceWithMulticastGroup' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` wirelessDeviceId
+
+instance
+  Prelude.NFData
+    AssociateWirelessDeviceWithMulticastGroup
+  where
+  rnf AssociateWirelessDeviceWithMulticastGroup' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf wirelessDeviceId
+
+instance
+  Data.ToHeaders
+    AssociateWirelessDeviceWithMulticastGroup
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    AssociateWirelessDeviceWithMulticastGroup
+  where
+  toJSON AssociateWirelessDeviceWithMulticastGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("WirelessDeviceId" Data..= wirelessDeviceId)
+          ]
+      )
+
+instance
+  Data.ToPath
+    AssociateWirelessDeviceWithMulticastGroup
+  where
+  toPath AssociateWirelessDeviceWithMulticastGroup' {..} =
+    Prelude.mconcat
+      [ "/multicast-groups/",
+        Data.toBS id,
+        "/wireless-device"
+      ]
+
+instance
+  Data.ToQuery
+    AssociateWirelessDeviceWithMulticastGroup
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateWirelessDeviceWithMulticastGroupResponse' smart constructor.
+data AssociateWirelessDeviceWithMulticastGroupResponse = AssociateWirelessDeviceWithMulticastGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessDeviceWithMulticastGroupResponse' 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', 'associateWirelessDeviceWithMulticastGroupResponse_httpStatus' - The response's http status code.
+newAssociateWirelessDeviceWithMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateWirelessDeviceWithMulticastGroupResponse
+newAssociateWirelessDeviceWithMulticastGroupResponse
+  pHttpStatus_ =
+    AssociateWirelessDeviceWithMulticastGroupResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+associateWirelessDeviceWithMulticastGroupResponse_httpStatus :: Lens.Lens' AssociateWirelessDeviceWithMulticastGroupResponse Prelude.Int
+associateWirelessDeviceWithMulticastGroupResponse_httpStatus = Lens.lens (\AssociateWirelessDeviceWithMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@AssociateWirelessDeviceWithMulticastGroupResponse' {} a -> s {httpStatus = a} :: AssociateWirelessDeviceWithMulticastGroupResponse)
+
+instance
+  Prelude.NFData
+    AssociateWirelessDeviceWithMulticastGroupResponse
+  where
+  rnf
+    AssociateWirelessDeviceWithMulticastGroupResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithThing.hs b/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithThing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/AssociateWirelessDeviceWithThing.hs
@@ -0,0 +1,184 @@
+{-# 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.IoTWireless.AssociateWirelessDeviceWithThing
+-- 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 wireless device with a thing.
+module Amazonka.IoTWireless.AssociateWirelessDeviceWithThing
+  ( -- * Creating a Request
+    AssociateWirelessDeviceWithThing (..),
+    newAssociateWirelessDeviceWithThing,
+
+    -- * Request Lenses
+    associateWirelessDeviceWithThing_id,
+    associateWirelessDeviceWithThing_thingArn,
+
+    -- * Destructuring the Response
+    AssociateWirelessDeviceWithThingResponse (..),
+    newAssociateWirelessDeviceWithThingResponse,
+
+    -- * Response Lenses
+    associateWirelessDeviceWithThingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateWirelessDeviceWithThing' smart constructor.
+data AssociateWirelessDeviceWithThing = AssociateWirelessDeviceWithThing'
+  { -- | The ID of the resource to update.
+    id :: Prelude.Text,
+    -- | The ARN of the thing to associate with the wireless device.
+    thingArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessDeviceWithThing' 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:
+--
+-- 'id', 'associateWirelessDeviceWithThing_id' - The ID of the resource to update.
+--
+-- 'thingArn', 'associateWirelessDeviceWithThing_thingArn' - The ARN of the thing to associate with the wireless device.
+newAssociateWirelessDeviceWithThing ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'thingArn'
+  Prelude.Text ->
+  AssociateWirelessDeviceWithThing
+newAssociateWirelessDeviceWithThing pId_ pThingArn_ =
+  AssociateWirelessDeviceWithThing'
+    { id = pId_,
+      thingArn = pThingArn_
+    }
+
+-- | The ID of the resource to update.
+associateWirelessDeviceWithThing_id :: Lens.Lens' AssociateWirelessDeviceWithThing Prelude.Text
+associateWirelessDeviceWithThing_id = Lens.lens (\AssociateWirelessDeviceWithThing' {id} -> id) (\s@AssociateWirelessDeviceWithThing' {} a -> s {id = a} :: AssociateWirelessDeviceWithThing)
+
+-- | The ARN of the thing to associate with the wireless device.
+associateWirelessDeviceWithThing_thingArn :: Lens.Lens' AssociateWirelessDeviceWithThing Prelude.Text
+associateWirelessDeviceWithThing_thingArn = Lens.lens (\AssociateWirelessDeviceWithThing' {thingArn} -> thingArn) (\s@AssociateWirelessDeviceWithThing' {} a -> s {thingArn = a} :: AssociateWirelessDeviceWithThing)
+
+instance
+  Core.AWSRequest
+    AssociateWirelessDeviceWithThing
+  where
+  type
+    AWSResponse AssociateWirelessDeviceWithThing =
+      AssociateWirelessDeviceWithThingResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateWirelessDeviceWithThingResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateWirelessDeviceWithThing
+  where
+  hashWithSalt
+    _salt
+    AssociateWirelessDeviceWithThing' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` thingArn
+
+instance
+  Prelude.NFData
+    AssociateWirelessDeviceWithThing
+  where
+  rnf AssociateWirelessDeviceWithThing' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf thingArn
+
+instance
+  Data.ToHeaders
+    AssociateWirelessDeviceWithThing
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON AssociateWirelessDeviceWithThing where
+  toJSON AssociateWirelessDeviceWithThing' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ThingArn" Data..= thingArn)]
+      )
+
+instance Data.ToPath AssociateWirelessDeviceWithThing where
+  toPath AssociateWirelessDeviceWithThing' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS id, "/thing"]
+
+instance
+  Data.ToQuery
+    AssociateWirelessDeviceWithThing
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateWirelessDeviceWithThingResponse' smart constructor.
+data AssociateWirelessDeviceWithThingResponse = AssociateWirelessDeviceWithThingResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessDeviceWithThingResponse' 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', 'associateWirelessDeviceWithThingResponse_httpStatus' - The response's http status code.
+newAssociateWirelessDeviceWithThingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateWirelessDeviceWithThingResponse
+newAssociateWirelessDeviceWithThingResponse
+  pHttpStatus_ =
+    AssociateWirelessDeviceWithThingResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+associateWirelessDeviceWithThingResponse_httpStatus :: Lens.Lens' AssociateWirelessDeviceWithThingResponse Prelude.Int
+associateWirelessDeviceWithThingResponse_httpStatus = Lens.lens (\AssociateWirelessDeviceWithThingResponse' {httpStatus} -> httpStatus) (\s@AssociateWirelessDeviceWithThingResponse' {} a -> s {httpStatus = a} :: AssociateWirelessDeviceWithThingResponse)
+
+instance
+  Prelude.NFData
+    AssociateWirelessDeviceWithThingResponse
+  where
+  rnf AssociateWirelessDeviceWithThingResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/AssociateWirelessGatewayWithCertificate.hs b/gen/Amazonka/IoTWireless/AssociateWirelessGatewayWithCertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/AssociateWirelessGatewayWithCertificate.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.IoTWireless.AssociateWirelessGatewayWithCertificate
+-- 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 wireless gateway with a certificate.
+module Amazonka.IoTWireless.AssociateWirelessGatewayWithCertificate
+  ( -- * Creating a Request
+    AssociateWirelessGatewayWithCertificate (..),
+    newAssociateWirelessGatewayWithCertificate,
+
+    -- * Request Lenses
+    associateWirelessGatewayWithCertificate_id,
+    associateWirelessGatewayWithCertificate_iotCertificateId,
+
+    -- * Destructuring the Response
+    AssociateWirelessGatewayWithCertificateResponse (..),
+    newAssociateWirelessGatewayWithCertificateResponse,
+
+    -- * Response Lenses
+    associateWirelessGatewayWithCertificateResponse_iotCertificateId,
+    associateWirelessGatewayWithCertificateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateWirelessGatewayWithCertificate' smart constructor.
+data AssociateWirelessGatewayWithCertificate = AssociateWirelessGatewayWithCertificate'
+  { -- | The ID of the resource to update.
+    id :: Prelude.Text,
+    -- | The ID of the certificate to associate with the wireless gateway.
+    iotCertificateId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessGatewayWithCertificate' 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:
+--
+-- 'id', 'associateWirelessGatewayWithCertificate_id' - The ID of the resource to update.
+--
+-- 'iotCertificateId', 'associateWirelessGatewayWithCertificate_iotCertificateId' - The ID of the certificate to associate with the wireless gateway.
+newAssociateWirelessGatewayWithCertificate ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'iotCertificateId'
+  Prelude.Text ->
+  AssociateWirelessGatewayWithCertificate
+newAssociateWirelessGatewayWithCertificate
+  pId_
+  pIotCertificateId_ =
+    AssociateWirelessGatewayWithCertificate'
+      { id = pId_,
+        iotCertificateId =
+          pIotCertificateId_
+      }
+
+-- | The ID of the resource to update.
+associateWirelessGatewayWithCertificate_id :: Lens.Lens' AssociateWirelessGatewayWithCertificate Prelude.Text
+associateWirelessGatewayWithCertificate_id = Lens.lens (\AssociateWirelessGatewayWithCertificate' {id} -> id) (\s@AssociateWirelessGatewayWithCertificate' {} a -> s {id = a} :: AssociateWirelessGatewayWithCertificate)
+
+-- | The ID of the certificate to associate with the wireless gateway.
+associateWirelessGatewayWithCertificate_iotCertificateId :: Lens.Lens' AssociateWirelessGatewayWithCertificate Prelude.Text
+associateWirelessGatewayWithCertificate_iotCertificateId = Lens.lens (\AssociateWirelessGatewayWithCertificate' {iotCertificateId} -> iotCertificateId) (\s@AssociateWirelessGatewayWithCertificate' {} a -> s {iotCertificateId = a} :: AssociateWirelessGatewayWithCertificate)
+
+instance
+  Core.AWSRequest
+    AssociateWirelessGatewayWithCertificate
+  where
+  type
+    AWSResponse
+      AssociateWirelessGatewayWithCertificate =
+      AssociateWirelessGatewayWithCertificateResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateWirelessGatewayWithCertificateResponse'
+            Prelude.<$> (x Data..?> "IotCertificateId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateWirelessGatewayWithCertificate
+  where
+  hashWithSalt
+    _salt
+    AssociateWirelessGatewayWithCertificate' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` iotCertificateId
+
+instance
+  Prelude.NFData
+    AssociateWirelessGatewayWithCertificate
+  where
+  rnf AssociateWirelessGatewayWithCertificate' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf iotCertificateId
+
+instance
+  Data.ToHeaders
+    AssociateWirelessGatewayWithCertificate
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    AssociateWirelessGatewayWithCertificate
+  where
+  toJSON AssociateWirelessGatewayWithCertificate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("IotCertificateId" Data..= iotCertificateId)
+          ]
+      )
+
+instance
+  Data.ToPath
+    AssociateWirelessGatewayWithCertificate
+  where
+  toPath AssociateWirelessGatewayWithCertificate' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id, "/certificate"]
+
+instance
+  Data.ToQuery
+    AssociateWirelessGatewayWithCertificate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateWirelessGatewayWithCertificateResponse' smart constructor.
+data AssociateWirelessGatewayWithCertificateResponse = AssociateWirelessGatewayWithCertificateResponse'
+  { -- | The ID of the certificate associated with the wireless gateway.
+    iotCertificateId :: 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 'AssociateWirelessGatewayWithCertificateResponse' 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:
+--
+-- 'iotCertificateId', 'associateWirelessGatewayWithCertificateResponse_iotCertificateId' - The ID of the certificate associated with the wireless gateway.
+--
+-- 'httpStatus', 'associateWirelessGatewayWithCertificateResponse_httpStatus' - The response's http status code.
+newAssociateWirelessGatewayWithCertificateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateWirelessGatewayWithCertificateResponse
+newAssociateWirelessGatewayWithCertificateResponse
+  pHttpStatus_ =
+    AssociateWirelessGatewayWithCertificateResponse'
+      { iotCertificateId =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the certificate associated with the wireless gateway.
+associateWirelessGatewayWithCertificateResponse_iotCertificateId :: Lens.Lens' AssociateWirelessGatewayWithCertificateResponse (Prelude.Maybe Prelude.Text)
+associateWirelessGatewayWithCertificateResponse_iotCertificateId = Lens.lens (\AssociateWirelessGatewayWithCertificateResponse' {iotCertificateId} -> iotCertificateId) (\s@AssociateWirelessGatewayWithCertificateResponse' {} a -> s {iotCertificateId = a} :: AssociateWirelessGatewayWithCertificateResponse)
+
+-- | The response's http status code.
+associateWirelessGatewayWithCertificateResponse_httpStatus :: Lens.Lens' AssociateWirelessGatewayWithCertificateResponse Prelude.Int
+associateWirelessGatewayWithCertificateResponse_httpStatus = Lens.lens (\AssociateWirelessGatewayWithCertificateResponse' {httpStatus} -> httpStatus) (\s@AssociateWirelessGatewayWithCertificateResponse' {} a -> s {httpStatus = a} :: AssociateWirelessGatewayWithCertificateResponse)
+
+instance
+  Prelude.NFData
+    AssociateWirelessGatewayWithCertificateResponse
+  where
+  rnf
+    AssociateWirelessGatewayWithCertificateResponse' {..} =
+      Prelude.rnf iotCertificateId
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/AssociateWirelessGatewayWithThing.hs b/gen/Amazonka/IoTWireless/AssociateWirelessGatewayWithThing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/AssociateWirelessGatewayWithThing.hs
@@ -0,0 +1,190 @@
+{-# 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.IoTWireless.AssociateWirelessGatewayWithThing
+-- 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 wireless gateway with a thing.
+module Amazonka.IoTWireless.AssociateWirelessGatewayWithThing
+  ( -- * Creating a Request
+    AssociateWirelessGatewayWithThing (..),
+    newAssociateWirelessGatewayWithThing,
+
+    -- * Request Lenses
+    associateWirelessGatewayWithThing_id,
+    associateWirelessGatewayWithThing_thingArn,
+
+    -- * Destructuring the Response
+    AssociateWirelessGatewayWithThingResponse (..),
+    newAssociateWirelessGatewayWithThingResponse,
+
+    -- * Response Lenses
+    associateWirelessGatewayWithThingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateWirelessGatewayWithThing' smart constructor.
+data AssociateWirelessGatewayWithThing = AssociateWirelessGatewayWithThing'
+  { -- | The ID of the resource to update.
+    id :: Prelude.Text,
+    -- | The ARN of the thing to associate with the wireless gateway.
+    thingArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessGatewayWithThing' 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:
+--
+-- 'id', 'associateWirelessGatewayWithThing_id' - The ID of the resource to update.
+--
+-- 'thingArn', 'associateWirelessGatewayWithThing_thingArn' - The ARN of the thing to associate with the wireless gateway.
+newAssociateWirelessGatewayWithThing ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'thingArn'
+  Prelude.Text ->
+  AssociateWirelessGatewayWithThing
+newAssociateWirelessGatewayWithThing pId_ pThingArn_ =
+  AssociateWirelessGatewayWithThing'
+    { id = pId_,
+      thingArn = pThingArn_
+    }
+
+-- | The ID of the resource to update.
+associateWirelessGatewayWithThing_id :: Lens.Lens' AssociateWirelessGatewayWithThing Prelude.Text
+associateWirelessGatewayWithThing_id = Lens.lens (\AssociateWirelessGatewayWithThing' {id} -> id) (\s@AssociateWirelessGatewayWithThing' {} a -> s {id = a} :: AssociateWirelessGatewayWithThing)
+
+-- | The ARN of the thing to associate with the wireless gateway.
+associateWirelessGatewayWithThing_thingArn :: Lens.Lens' AssociateWirelessGatewayWithThing Prelude.Text
+associateWirelessGatewayWithThing_thingArn = Lens.lens (\AssociateWirelessGatewayWithThing' {thingArn} -> thingArn) (\s@AssociateWirelessGatewayWithThing' {} a -> s {thingArn = a} :: AssociateWirelessGatewayWithThing)
+
+instance
+  Core.AWSRequest
+    AssociateWirelessGatewayWithThing
+  where
+  type
+    AWSResponse AssociateWirelessGatewayWithThing =
+      AssociateWirelessGatewayWithThingResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateWirelessGatewayWithThingResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateWirelessGatewayWithThing
+  where
+  hashWithSalt
+    _salt
+    AssociateWirelessGatewayWithThing' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` thingArn
+
+instance
+  Prelude.NFData
+    AssociateWirelessGatewayWithThing
+  where
+  rnf AssociateWirelessGatewayWithThing' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf thingArn
+
+instance
+  Data.ToHeaders
+    AssociateWirelessGatewayWithThing
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    AssociateWirelessGatewayWithThing
+  where
+  toJSON AssociateWirelessGatewayWithThing' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ThingArn" Data..= thingArn)]
+      )
+
+instance
+  Data.ToPath
+    AssociateWirelessGatewayWithThing
+  where
+  toPath AssociateWirelessGatewayWithThing' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id, "/thing"]
+
+instance
+  Data.ToQuery
+    AssociateWirelessGatewayWithThing
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateWirelessGatewayWithThingResponse' smart constructor.
+data AssociateWirelessGatewayWithThingResponse = AssociateWirelessGatewayWithThingResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateWirelessGatewayWithThingResponse' 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', 'associateWirelessGatewayWithThingResponse_httpStatus' - The response's http status code.
+newAssociateWirelessGatewayWithThingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateWirelessGatewayWithThingResponse
+newAssociateWirelessGatewayWithThingResponse
+  pHttpStatus_ =
+    AssociateWirelessGatewayWithThingResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+associateWirelessGatewayWithThingResponse_httpStatus :: Lens.Lens' AssociateWirelessGatewayWithThingResponse Prelude.Int
+associateWirelessGatewayWithThingResponse_httpStatus = Lens.lens (\AssociateWirelessGatewayWithThingResponse' {httpStatus} -> httpStatus) (\s@AssociateWirelessGatewayWithThingResponse' {} a -> s {httpStatus = a} :: AssociateWirelessGatewayWithThingResponse)
+
+instance
+  Prelude.NFData
+    AssociateWirelessGatewayWithThingResponse
+  where
+  rnf AssociateWirelessGatewayWithThingResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CancelMulticastGroupSession.hs b/gen/Amazonka/IoTWireless/CancelMulticastGroupSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CancelMulticastGroupSession.hs
@@ -0,0 +1,141 @@
+{-# 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.IoTWireless.CancelMulticastGroupSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels an existing multicast group session.
+module Amazonka.IoTWireless.CancelMulticastGroupSession
+  ( -- * Creating a Request
+    CancelMulticastGroupSession (..),
+    newCancelMulticastGroupSession,
+
+    -- * Request Lenses
+    cancelMulticastGroupSession_id,
+
+    -- * Destructuring the Response
+    CancelMulticastGroupSessionResponse (..),
+    newCancelMulticastGroupSessionResponse,
+
+    -- * Response Lenses
+    cancelMulticastGroupSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelMulticastGroupSession' smart constructor.
+data CancelMulticastGroupSession = CancelMulticastGroupSession'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelMulticastGroupSession' 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:
+--
+-- 'id', 'cancelMulticastGroupSession_id' - Undocumented member.
+newCancelMulticastGroupSession ::
+  -- | 'id'
+  Prelude.Text ->
+  CancelMulticastGroupSession
+newCancelMulticastGroupSession pId_ =
+  CancelMulticastGroupSession' {id = pId_}
+
+-- | Undocumented member.
+cancelMulticastGroupSession_id :: Lens.Lens' CancelMulticastGroupSession Prelude.Text
+cancelMulticastGroupSession_id = Lens.lens (\CancelMulticastGroupSession' {id} -> id) (\s@CancelMulticastGroupSession' {} a -> s {id = a} :: CancelMulticastGroupSession)
+
+instance Core.AWSRequest CancelMulticastGroupSession where
+  type
+    AWSResponse CancelMulticastGroupSession =
+      CancelMulticastGroupSessionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelMulticastGroupSessionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelMulticastGroupSession where
+  hashWithSalt _salt CancelMulticastGroupSession' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData CancelMulticastGroupSession where
+  rnf CancelMulticastGroupSession' {..} = Prelude.rnf id
+
+instance Data.ToHeaders CancelMulticastGroupSession where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelMulticastGroupSession where
+  toPath CancelMulticastGroupSession' {..} =
+    Prelude.mconcat
+      ["/multicast-groups/", Data.toBS id, "/session"]
+
+instance Data.ToQuery CancelMulticastGroupSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelMulticastGroupSessionResponse' smart constructor.
+data CancelMulticastGroupSessionResponse = CancelMulticastGroupSessionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelMulticastGroupSessionResponse' 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', 'cancelMulticastGroupSessionResponse_httpStatus' - The response's http status code.
+newCancelMulticastGroupSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelMulticastGroupSessionResponse
+newCancelMulticastGroupSessionResponse pHttpStatus_ =
+  CancelMulticastGroupSessionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+cancelMulticastGroupSessionResponse_httpStatus :: Lens.Lens' CancelMulticastGroupSessionResponse Prelude.Int
+cancelMulticastGroupSessionResponse_httpStatus = Lens.lens (\CancelMulticastGroupSessionResponse' {httpStatus} -> httpStatus) (\s@CancelMulticastGroupSessionResponse' {} a -> s {httpStatus = a} :: CancelMulticastGroupSessionResponse)
+
+instance
+  Prelude.NFData
+    CancelMulticastGroupSessionResponse
+  where
+  rnf CancelMulticastGroupSessionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateDestination.hs b/gen/Amazonka/IoTWireless/CreateDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateDestination.hs
@@ -0,0 +1,275 @@
+{-# 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.IoTWireless.CreateDestination
+-- 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 destination that maps a device message to an AWS IoT rule.
+module Amazonka.IoTWireless.CreateDestination
+  ( -- * Creating a Request
+    CreateDestination (..),
+    newCreateDestination,
+
+    -- * Request Lenses
+    createDestination_clientRequestToken,
+    createDestination_description,
+    createDestination_tags,
+    createDestination_name,
+    createDestination_expressionType,
+    createDestination_expression,
+    createDestination_roleArn,
+
+    -- * Destructuring the Response
+    CreateDestinationResponse (..),
+    newCreateDestinationResponse,
+
+    -- * Response Lenses
+    createDestinationResponse_arn,
+    createDestinationResponse_name,
+    createDestinationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDestination' smart constructor.
+data CreateDestination = CreateDestination'
+  { -- | Each resource must have a unique client request token. If you try to
+    -- create a new resource with the same token as a resource that already
+    -- exists, an exception occurs. If you omit this value, AWS SDKs will
+    -- automatically generate a unique client request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the new resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags to attach to the new destination. Tags are metadata that you
+    -- can use to manage a resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the new resource.
+    name :: Prelude.Text,
+    -- | The type of value in @Expression@.
+    expressionType :: ExpressionType,
+    -- | The rule name or topic rule to send messages to.
+    expression :: Prelude.Text,
+    -- | The ARN of the IAM Role that authorizes the destination.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDestination' 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', 'createDestination_clientRequestToken' - Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+--
+-- 'description', 'createDestination_description' - The description of the new resource.
+--
+-- 'tags', 'createDestination_tags' - The tags to attach to the new destination. Tags are metadata that you
+-- can use to manage a resource.
+--
+-- 'name', 'createDestination_name' - The name of the new resource.
+--
+-- 'expressionType', 'createDestination_expressionType' - The type of value in @Expression@.
+--
+-- 'expression', 'createDestination_expression' - The rule name or topic rule to send messages to.
+--
+-- 'roleArn', 'createDestination_roleArn' - The ARN of the IAM Role that authorizes the destination.
+newCreateDestination ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'expressionType'
+  ExpressionType ->
+  -- | 'expression'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  CreateDestination
+newCreateDestination
+  pName_
+  pExpressionType_
+  pExpression_
+  pRoleArn_ =
+    CreateDestination'
+      { clientRequestToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        expressionType = pExpressionType_,
+        expression = pExpression_,
+        roleArn = pRoleArn_
+      }
+
+-- | Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+createDestination_clientRequestToken :: Lens.Lens' CreateDestination (Prelude.Maybe Prelude.Text)
+createDestination_clientRequestToken = Lens.lens (\CreateDestination' {clientRequestToken} -> clientRequestToken) (\s@CreateDestination' {} a -> s {clientRequestToken = a} :: CreateDestination)
+
+-- | The description of the new resource.
+createDestination_description :: Lens.Lens' CreateDestination (Prelude.Maybe Prelude.Text)
+createDestination_description = Lens.lens (\CreateDestination' {description} -> description) (\s@CreateDestination' {} a -> s {description = a} :: CreateDestination)
+
+-- | The tags to attach to the new destination. Tags are metadata that you
+-- can use to manage a resource.
+createDestination_tags :: Lens.Lens' CreateDestination (Prelude.Maybe [Tag])
+createDestination_tags = Lens.lens (\CreateDestination' {tags} -> tags) (\s@CreateDestination' {} a -> s {tags = a} :: CreateDestination) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the new resource.
+createDestination_name :: Lens.Lens' CreateDestination Prelude.Text
+createDestination_name = Lens.lens (\CreateDestination' {name} -> name) (\s@CreateDestination' {} a -> s {name = a} :: CreateDestination)
+
+-- | The type of value in @Expression@.
+createDestination_expressionType :: Lens.Lens' CreateDestination ExpressionType
+createDestination_expressionType = Lens.lens (\CreateDestination' {expressionType} -> expressionType) (\s@CreateDestination' {} a -> s {expressionType = a} :: CreateDestination)
+
+-- | The rule name or topic rule to send messages to.
+createDestination_expression :: Lens.Lens' CreateDestination Prelude.Text
+createDestination_expression = Lens.lens (\CreateDestination' {expression} -> expression) (\s@CreateDestination' {} a -> s {expression = a} :: CreateDestination)
+
+-- | The ARN of the IAM Role that authorizes the destination.
+createDestination_roleArn :: Lens.Lens' CreateDestination Prelude.Text
+createDestination_roleArn = Lens.lens (\CreateDestination' {roleArn} -> roleArn) (\s@CreateDestination' {} a -> s {roleArn = a} :: CreateDestination)
+
+instance Core.AWSRequest CreateDestination where
+  type
+    AWSResponse CreateDestination =
+      CreateDestinationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDestinationResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDestination where
+  hashWithSalt _salt CreateDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` expressionType
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData CreateDestination where
+  rnf CreateDestination' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf expressionType
+      `Prelude.seq` Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToHeaders CreateDestination where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateDestination where
+  toJSON CreateDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("ExpressionType" Data..= expressionType),
+            Prelude.Just ("Expression" Data..= expression),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
+
+instance Data.ToPath CreateDestination where
+  toPath = Prelude.const "/destinations"
+
+instance Data.ToQuery CreateDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDestinationResponse' smart constructor.
+data CreateDestinationResponse = CreateDestinationResponse'
+  { -- | The Amazon Resource Name of the new resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the new resource.
+    name :: 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 'CreateDestinationResponse' 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', 'createDestinationResponse_arn' - The Amazon Resource Name of the new resource.
+--
+-- 'name', 'createDestinationResponse_name' - The name of the new resource.
+--
+-- 'httpStatus', 'createDestinationResponse_httpStatus' - The response's http status code.
+newCreateDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDestinationResponse
+newCreateDestinationResponse pHttpStatus_ =
+  CreateDestinationResponse'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the new resource.
+createDestinationResponse_arn :: Lens.Lens' CreateDestinationResponse (Prelude.Maybe Prelude.Text)
+createDestinationResponse_arn = Lens.lens (\CreateDestinationResponse' {arn} -> arn) (\s@CreateDestinationResponse' {} a -> s {arn = a} :: CreateDestinationResponse)
+
+-- | The name of the new resource.
+createDestinationResponse_name :: Lens.Lens' CreateDestinationResponse (Prelude.Maybe Prelude.Text)
+createDestinationResponse_name = Lens.lens (\CreateDestinationResponse' {name} -> name) (\s@CreateDestinationResponse' {} a -> s {name = a} :: CreateDestinationResponse)
+
+-- | The response's http status code.
+createDestinationResponse_httpStatus :: Lens.Lens' CreateDestinationResponse Prelude.Int
+createDestinationResponse_httpStatus = Lens.lens (\CreateDestinationResponse' {httpStatus} -> httpStatus) (\s@CreateDestinationResponse' {} a -> s {httpStatus = a} :: CreateDestinationResponse)
+
+instance Prelude.NFData CreateDestinationResponse where
+  rnf CreateDestinationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateDeviceProfile.hs b/gen/Amazonka/IoTWireless/CreateDeviceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateDeviceProfile.hs
@@ -0,0 +1,223 @@
+{-# 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.IoTWireless.CreateDeviceProfile
+-- 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 device profile.
+module Amazonka.IoTWireless.CreateDeviceProfile
+  ( -- * Creating a Request
+    CreateDeviceProfile (..),
+    newCreateDeviceProfile,
+
+    -- * Request Lenses
+    createDeviceProfile_clientRequestToken,
+    createDeviceProfile_loRaWAN,
+    createDeviceProfile_name,
+    createDeviceProfile_tags,
+
+    -- * Destructuring the Response
+    CreateDeviceProfileResponse (..),
+    newCreateDeviceProfileResponse,
+
+    -- * Response Lenses
+    createDeviceProfileResponse_arn,
+    createDeviceProfileResponse_id,
+    createDeviceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDeviceProfile' smart constructor.
+data CreateDeviceProfile = CreateDeviceProfile'
+  { -- | Each resource must have a unique client request token. If you try to
+    -- create a new resource with the same token as a resource that already
+    -- exists, an exception occurs. If you omit this value, AWS SDKs will
+    -- automatically generate a unique client request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The device profile information to use to create the device profile.
+    loRaWAN :: Prelude.Maybe LoRaWANDeviceProfile,
+    -- | The name of the new resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags to attach to the new device profile. Tags are metadata that you
+    -- can use to manage a resource.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDeviceProfile' 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', 'createDeviceProfile_clientRequestToken' - Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+--
+-- 'loRaWAN', 'createDeviceProfile_loRaWAN' - The device profile information to use to create the device profile.
+--
+-- 'name', 'createDeviceProfile_name' - The name of the new resource.
+--
+-- 'tags', 'createDeviceProfile_tags' - The tags to attach to the new device profile. Tags are metadata that you
+-- can use to manage a resource.
+newCreateDeviceProfile ::
+  CreateDeviceProfile
+newCreateDeviceProfile =
+  CreateDeviceProfile'
+    { clientRequestToken =
+        Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+createDeviceProfile_clientRequestToken :: Lens.Lens' CreateDeviceProfile (Prelude.Maybe Prelude.Text)
+createDeviceProfile_clientRequestToken = Lens.lens (\CreateDeviceProfile' {clientRequestToken} -> clientRequestToken) (\s@CreateDeviceProfile' {} a -> s {clientRequestToken = a} :: CreateDeviceProfile)
+
+-- | The device profile information to use to create the device profile.
+createDeviceProfile_loRaWAN :: Lens.Lens' CreateDeviceProfile (Prelude.Maybe LoRaWANDeviceProfile)
+createDeviceProfile_loRaWAN = Lens.lens (\CreateDeviceProfile' {loRaWAN} -> loRaWAN) (\s@CreateDeviceProfile' {} a -> s {loRaWAN = a} :: CreateDeviceProfile)
+
+-- | The name of the new resource.
+createDeviceProfile_name :: Lens.Lens' CreateDeviceProfile (Prelude.Maybe Prelude.Text)
+createDeviceProfile_name = Lens.lens (\CreateDeviceProfile' {name} -> name) (\s@CreateDeviceProfile' {} a -> s {name = a} :: CreateDeviceProfile)
+
+-- | The tags to attach to the new device profile. Tags are metadata that you
+-- can use to manage a resource.
+createDeviceProfile_tags :: Lens.Lens' CreateDeviceProfile (Prelude.Maybe [Tag])
+createDeviceProfile_tags = Lens.lens (\CreateDeviceProfile' {tags} -> tags) (\s@CreateDeviceProfile' {} a -> s {tags = a} :: CreateDeviceProfile) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateDeviceProfile where
+  type
+    AWSResponse CreateDeviceProfile =
+      CreateDeviceProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDeviceProfileResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDeviceProfile where
+  hashWithSalt _salt CreateDeviceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData CreateDeviceProfile where
+  rnf CreateDeviceProfile' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders CreateDeviceProfile where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateDeviceProfile where
+  toJSON CreateDeviceProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Tags" Data..=) Prelude.<$> tags
+          ]
+      )
+
+instance Data.ToPath CreateDeviceProfile where
+  toPath = Prelude.const "/device-profiles"
+
+instance Data.ToQuery CreateDeviceProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDeviceProfileResponse' smart constructor.
+data CreateDeviceProfileResponse = CreateDeviceProfileResponse'
+  { -- | The Amazon Resource Name of the new resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the new device profile.
+    id :: 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 'CreateDeviceProfileResponse' 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', 'createDeviceProfileResponse_arn' - The Amazon Resource Name of the new resource.
+--
+-- 'id', 'createDeviceProfileResponse_id' - The ID of the new device profile.
+--
+-- 'httpStatus', 'createDeviceProfileResponse_httpStatus' - The response's http status code.
+newCreateDeviceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDeviceProfileResponse
+newCreateDeviceProfileResponse pHttpStatus_ =
+  CreateDeviceProfileResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the new resource.
+createDeviceProfileResponse_arn :: Lens.Lens' CreateDeviceProfileResponse (Prelude.Maybe Prelude.Text)
+createDeviceProfileResponse_arn = Lens.lens (\CreateDeviceProfileResponse' {arn} -> arn) (\s@CreateDeviceProfileResponse' {} a -> s {arn = a} :: CreateDeviceProfileResponse)
+
+-- | The ID of the new device profile.
+createDeviceProfileResponse_id :: Lens.Lens' CreateDeviceProfileResponse (Prelude.Maybe Prelude.Text)
+createDeviceProfileResponse_id = Lens.lens (\CreateDeviceProfileResponse' {id} -> id) (\s@CreateDeviceProfileResponse' {} a -> s {id = a} :: CreateDeviceProfileResponse)
+
+-- | The response's http status code.
+createDeviceProfileResponse_httpStatus :: Lens.Lens' CreateDeviceProfileResponse Prelude.Int
+createDeviceProfileResponse_httpStatus = Lens.lens (\CreateDeviceProfileResponse' {httpStatus} -> httpStatus) (\s@CreateDeviceProfileResponse' {} a -> s {httpStatus = a} :: CreateDeviceProfileResponse)
+
+instance Prelude.NFData CreateDeviceProfileResponse where
+  rnf CreateDeviceProfileResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateFuotaTask.hs b/gen/Amazonka/IoTWireless/CreateFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateFuotaTask.hs
@@ -0,0 +1,249 @@
+{-# 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.IoTWireless.CreateFuotaTask
+-- 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 FUOTA task.
+module Amazonka.IoTWireless.CreateFuotaTask
+  ( -- * Creating a Request
+    CreateFuotaTask (..),
+    newCreateFuotaTask,
+
+    -- * Request Lenses
+    createFuotaTask_clientRequestToken,
+    createFuotaTask_description,
+    createFuotaTask_loRaWAN,
+    createFuotaTask_name,
+    createFuotaTask_tags,
+    createFuotaTask_firmwareUpdateImage,
+    createFuotaTask_firmwareUpdateRole,
+
+    -- * Destructuring the Response
+    CreateFuotaTaskResponse (..),
+    newCreateFuotaTaskResponse,
+
+    -- * Response Lenses
+    createFuotaTaskResponse_arn,
+    createFuotaTaskResponse_id,
+    createFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFuotaTask' smart constructor.
+data CreateFuotaTask = CreateFuotaTask'
+  { clientRequestToken :: Prelude.Maybe Prelude.Text,
+    description :: Prelude.Maybe Prelude.Text,
+    loRaWAN :: Prelude.Maybe LoRaWANFuotaTask,
+    name :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe [Tag],
+    firmwareUpdateImage :: Prelude.Text,
+    firmwareUpdateRole :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFuotaTask' 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', 'createFuotaTask_clientRequestToken' - Undocumented member.
+--
+-- 'description', 'createFuotaTask_description' - Undocumented member.
+--
+-- 'loRaWAN', 'createFuotaTask_loRaWAN' - Undocumented member.
+--
+-- 'name', 'createFuotaTask_name' - Undocumented member.
+--
+-- 'tags', 'createFuotaTask_tags' - Undocumented member.
+--
+-- 'firmwareUpdateImage', 'createFuotaTask_firmwareUpdateImage' - Undocumented member.
+--
+-- 'firmwareUpdateRole', 'createFuotaTask_firmwareUpdateRole' - Undocumented member.
+newCreateFuotaTask ::
+  -- | 'firmwareUpdateImage'
+  Prelude.Text ->
+  -- | 'firmwareUpdateRole'
+  Prelude.Text ->
+  CreateFuotaTask
+newCreateFuotaTask
+  pFirmwareUpdateImage_
+  pFirmwareUpdateRole_ =
+    CreateFuotaTask'
+      { clientRequestToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        loRaWAN = Prelude.Nothing,
+        name = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        firmwareUpdateImage = pFirmwareUpdateImage_,
+        firmwareUpdateRole = pFirmwareUpdateRole_
+      }
+
+-- | Undocumented member.
+createFuotaTask_clientRequestToken :: Lens.Lens' CreateFuotaTask (Prelude.Maybe Prelude.Text)
+createFuotaTask_clientRequestToken = Lens.lens (\CreateFuotaTask' {clientRequestToken} -> clientRequestToken) (\s@CreateFuotaTask' {} a -> s {clientRequestToken = a} :: CreateFuotaTask)
+
+-- | Undocumented member.
+createFuotaTask_description :: Lens.Lens' CreateFuotaTask (Prelude.Maybe Prelude.Text)
+createFuotaTask_description = Lens.lens (\CreateFuotaTask' {description} -> description) (\s@CreateFuotaTask' {} a -> s {description = a} :: CreateFuotaTask)
+
+-- | Undocumented member.
+createFuotaTask_loRaWAN :: Lens.Lens' CreateFuotaTask (Prelude.Maybe LoRaWANFuotaTask)
+createFuotaTask_loRaWAN = Lens.lens (\CreateFuotaTask' {loRaWAN} -> loRaWAN) (\s@CreateFuotaTask' {} a -> s {loRaWAN = a} :: CreateFuotaTask)
+
+-- | Undocumented member.
+createFuotaTask_name :: Lens.Lens' CreateFuotaTask (Prelude.Maybe Prelude.Text)
+createFuotaTask_name = Lens.lens (\CreateFuotaTask' {name} -> name) (\s@CreateFuotaTask' {} a -> s {name = a} :: CreateFuotaTask)
+
+-- | Undocumented member.
+createFuotaTask_tags :: Lens.Lens' CreateFuotaTask (Prelude.Maybe [Tag])
+createFuotaTask_tags = Lens.lens (\CreateFuotaTask' {tags} -> tags) (\s@CreateFuotaTask' {} a -> s {tags = a} :: CreateFuotaTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createFuotaTask_firmwareUpdateImage :: Lens.Lens' CreateFuotaTask Prelude.Text
+createFuotaTask_firmwareUpdateImage = Lens.lens (\CreateFuotaTask' {firmwareUpdateImage} -> firmwareUpdateImage) (\s@CreateFuotaTask' {} a -> s {firmwareUpdateImage = a} :: CreateFuotaTask)
+
+-- | Undocumented member.
+createFuotaTask_firmwareUpdateRole :: Lens.Lens' CreateFuotaTask Prelude.Text
+createFuotaTask_firmwareUpdateRole = Lens.lens (\CreateFuotaTask' {firmwareUpdateRole} -> firmwareUpdateRole) (\s@CreateFuotaTask' {} a -> s {firmwareUpdateRole = a} :: CreateFuotaTask)
+
+instance Core.AWSRequest CreateFuotaTask where
+  type
+    AWSResponse CreateFuotaTask =
+      CreateFuotaTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFuotaTaskResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFuotaTask where
+  hashWithSalt _salt CreateFuotaTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` firmwareUpdateImage
+      `Prelude.hashWithSalt` firmwareUpdateRole
+
+instance Prelude.NFData CreateFuotaTask where
+  rnf CreateFuotaTask' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf firmwareUpdateImage
+      `Prelude.seq` Prelude.rnf firmwareUpdateRole
+
+instance Data.ToHeaders CreateFuotaTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateFuotaTask where
+  toJSON CreateFuotaTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("FirmwareUpdateImage" Data..= firmwareUpdateImage),
+            Prelude.Just
+              ("FirmwareUpdateRole" Data..= firmwareUpdateRole)
+          ]
+      )
+
+instance Data.ToPath CreateFuotaTask where
+  toPath = Prelude.const "/fuota-tasks"
+
+instance Data.ToQuery CreateFuotaTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateFuotaTaskResponse' smart constructor.
+data CreateFuotaTaskResponse = CreateFuotaTaskResponse'
+  { arn :: Prelude.Maybe Prelude.Text,
+    id :: 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 'CreateFuotaTaskResponse' 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', 'createFuotaTaskResponse_arn' - Undocumented member.
+--
+-- 'id', 'createFuotaTaskResponse_id' - Undocumented member.
+--
+-- 'httpStatus', 'createFuotaTaskResponse_httpStatus' - The response's http status code.
+newCreateFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFuotaTaskResponse
+newCreateFuotaTaskResponse pHttpStatus_ =
+  CreateFuotaTaskResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+createFuotaTaskResponse_arn :: Lens.Lens' CreateFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+createFuotaTaskResponse_arn = Lens.lens (\CreateFuotaTaskResponse' {arn} -> arn) (\s@CreateFuotaTaskResponse' {} a -> s {arn = a} :: CreateFuotaTaskResponse)
+
+-- | Undocumented member.
+createFuotaTaskResponse_id :: Lens.Lens' CreateFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+createFuotaTaskResponse_id = Lens.lens (\CreateFuotaTaskResponse' {id} -> id) (\s@CreateFuotaTaskResponse' {} a -> s {id = a} :: CreateFuotaTaskResponse)
+
+-- | The response's http status code.
+createFuotaTaskResponse_httpStatus :: Lens.Lens' CreateFuotaTaskResponse Prelude.Int
+createFuotaTaskResponse_httpStatus = Lens.lens (\CreateFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@CreateFuotaTaskResponse' {} a -> s {httpStatus = a} :: CreateFuotaTaskResponse)
+
+instance Prelude.NFData CreateFuotaTaskResponse where
+  rnf CreateFuotaTaskResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateMulticastGroup.hs b/gen/Amazonka/IoTWireless/CreateMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateMulticastGroup.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.IoTWireless.CreateMulticastGroup
+-- 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 multicast group.
+module Amazonka.IoTWireless.CreateMulticastGroup
+  ( -- * Creating a Request
+    CreateMulticastGroup (..),
+    newCreateMulticastGroup,
+
+    -- * Request Lenses
+    createMulticastGroup_clientRequestToken,
+    createMulticastGroup_description,
+    createMulticastGroup_name,
+    createMulticastGroup_tags,
+    createMulticastGroup_loRaWAN,
+
+    -- * Destructuring the Response
+    CreateMulticastGroupResponse (..),
+    newCreateMulticastGroupResponse,
+
+    -- * Response Lenses
+    createMulticastGroupResponse_arn,
+    createMulticastGroupResponse_id,
+    createMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateMulticastGroup' smart constructor.
+data CreateMulticastGroup = CreateMulticastGroup'
+  { -- | Each resource must have a unique client request token. If you try to
+    -- create a new resource with the same token as a resource that already
+    -- exists, an exception occurs. If you omit this value, AWS SDKs will
+    -- automatically generate a unique client request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the multicast group.
+    description :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe [Tag],
+    loRaWAN :: LoRaWANMulticast
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMulticastGroup' 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', 'createMulticastGroup_clientRequestToken' - Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+--
+-- 'description', 'createMulticastGroup_description' - The description of the multicast group.
+--
+-- 'name', 'createMulticastGroup_name' - Undocumented member.
+--
+-- 'tags', 'createMulticastGroup_tags' - Undocumented member.
+--
+-- 'loRaWAN', 'createMulticastGroup_loRaWAN' - Undocumented member.
+newCreateMulticastGroup ::
+  -- | 'loRaWAN'
+  LoRaWANMulticast ->
+  CreateMulticastGroup
+newCreateMulticastGroup pLoRaWAN_ =
+  CreateMulticastGroup'
+    { clientRequestToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      loRaWAN = pLoRaWAN_
+    }
+
+-- | Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+createMulticastGroup_clientRequestToken :: Lens.Lens' CreateMulticastGroup (Prelude.Maybe Prelude.Text)
+createMulticastGroup_clientRequestToken = Lens.lens (\CreateMulticastGroup' {clientRequestToken} -> clientRequestToken) (\s@CreateMulticastGroup' {} a -> s {clientRequestToken = a} :: CreateMulticastGroup)
+
+-- | The description of the multicast group.
+createMulticastGroup_description :: Lens.Lens' CreateMulticastGroup (Prelude.Maybe Prelude.Text)
+createMulticastGroup_description = Lens.lens (\CreateMulticastGroup' {description} -> description) (\s@CreateMulticastGroup' {} a -> s {description = a} :: CreateMulticastGroup)
+
+-- | Undocumented member.
+createMulticastGroup_name :: Lens.Lens' CreateMulticastGroup (Prelude.Maybe Prelude.Text)
+createMulticastGroup_name = Lens.lens (\CreateMulticastGroup' {name} -> name) (\s@CreateMulticastGroup' {} a -> s {name = a} :: CreateMulticastGroup)
+
+-- | Undocumented member.
+createMulticastGroup_tags :: Lens.Lens' CreateMulticastGroup (Prelude.Maybe [Tag])
+createMulticastGroup_tags = Lens.lens (\CreateMulticastGroup' {tags} -> tags) (\s@CreateMulticastGroup' {} a -> s {tags = a} :: CreateMulticastGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createMulticastGroup_loRaWAN :: Lens.Lens' CreateMulticastGroup LoRaWANMulticast
+createMulticastGroup_loRaWAN = Lens.lens (\CreateMulticastGroup' {loRaWAN} -> loRaWAN) (\s@CreateMulticastGroup' {} a -> s {loRaWAN = a} :: CreateMulticastGroup)
+
+instance Core.AWSRequest CreateMulticastGroup where
+  type
+    AWSResponse CreateMulticastGroup =
+      CreateMulticastGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateMulticastGroupResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateMulticastGroup where
+  hashWithSalt _salt CreateMulticastGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` loRaWAN
+
+instance Prelude.NFData CreateMulticastGroup where
+  rnf CreateMulticastGroup' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf loRaWAN
+
+instance Data.ToHeaders CreateMulticastGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateMulticastGroup where
+  toJSON CreateMulticastGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("LoRaWAN" Data..= loRaWAN)
+          ]
+      )
+
+instance Data.ToPath CreateMulticastGroup where
+  toPath = Prelude.const "/multicast-groups"
+
+instance Data.ToQuery CreateMulticastGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateMulticastGroupResponse' smart constructor.
+data CreateMulticastGroupResponse = CreateMulticastGroupResponse'
+  { arn :: Prelude.Maybe Prelude.Text,
+    id :: 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 'CreateMulticastGroupResponse' 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', 'createMulticastGroupResponse_arn' - Undocumented member.
+--
+-- 'id', 'createMulticastGroupResponse_id' - Undocumented member.
+--
+-- 'httpStatus', 'createMulticastGroupResponse_httpStatus' - The response's http status code.
+newCreateMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateMulticastGroupResponse
+newCreateMulticastGroupResponse pHttpStatus_ =
+  CreateMulticastGroupResponse'
+    { arn =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+createMulticastGroupResponse_arn :: Lens.Lens' CreateMulticastGroupResponse (Prelude.Maybe Prelude.Text)
+createMulticastGroupResponse_arn = Lens.lens (\CreateMulticastGroupResponse' {arn} -> arn) (\s@CreateMulticastGroupResponse' {} a -> s {arn = a} :: CreateMulticastGroupResponse)
+
+-- | Undocumented member.
+createMulticastGroupResponse_id :: Lens.Lens' CreateMulticastGroupResponse (Prelude.Maybe Prelude.Text)
+createMulticastGroupResponse_id = Lens.lens (\CreateMulticastGroupResponse' {id} -> id) (\s@CreateMulticastGroupResponse' {} a -> s {id = a} :: CreateMulticastGroupResponse)
+
+-- | The response's http status code.
+createMulticastGroupResponse_httpStatus :: Lens.Lens' CreateMulticastGroupResponse Prelude.Int
+createMulticastGroupResponse_httpStatus = Lens.lens (\CreateMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@CreateMulticastGroupResponse' {} a -> s {httpStatus = a} :: CreateMulticastGroupResponse)
+
+instance Prelude.NFData CreateMulticastGroupResponse where
+  rnf CreateMulticastGroupResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateNetworkAnalyzerConfiguration.hs b/gen/Amazonka/IoTWireless/CreateNetworkAnalyzerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateNetworkAnalyzerConfiguration.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.IoTWireless.CreateNetworkAnalyzerConfiguration
+-- 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 network analyzer configuration.
+module Amazonka.IoTWireless.CreateNetworkAnalyzerConfiguration
+  ( -- * Creating a Request
+    CreateNetworkAnalyzerConfiguration (..),
+    newCreateNetworkAnalyzerConfiguration,
+
+    -- * Request Lenses
+    createNetworkAnalyzerConfiguration_clientRequestToken,
+    createNetworkAnalyzerConfiguration_description,
+    createNetworkAnalyzerConfiguration_tags,
+    createNetworkAnalyzerConfiguration_traceContent,
+    createNetworkAnalyzerConfiguration_wirelessDevices,
+    createNetworkAnalyzerConfiguration_wirelessGateways,
+    createNetworkAnalyzerConfiguration_name,
+
+    -- * Destructuring the Response
+    CreateNetworkAnalyzerConfigurationResponse (..),
+    newCreateNetworkAnalyzerConfigurationResponse,
+
+    -- * Response Lenses
+    createNetworkAnalyzerConfigurationResponse_arn,
+    createNetworkAnalyzerConfigurationResponse_name,
+    createNetworkAnalyzerConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNetworkAnalyzerConfiguration' smart constructor.
+data CreateNetworkAnalyzerConfiguration = CreateNetworkAnalyzerConfiguration'
+  { clientRequestToken :: Prelude.Maybe Prelude.Text,
+    description :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe [Tag],
+    traceContent :: Prelude.Maybe TraceContent,
+    -- | Wireless device resources to add to the network analyzer configuration.
+    -- Provide the @WirelessDeviceId@ of the resource to add in the input
+    -- array.
+    wirelessDevices :: Prelude.Maybe [Prelude.Text],
+    -- | Wireless gateway resources to add to the network analyzer configuration.
+    -- Provide the @WirelessGatewayId@ of the resource to add in the input
+    -- array.
+    wirelessGateways :: Prelude.Maybe [Prelude.Text],
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkAnalyzerConfiguration' 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', 'createNetworkAnalyzerConfiguration_clientRequestToken' - Undocumented member.
+--
+-- 'description', 'createNetworkAnalyzerConfiguration_description' - Undocumented member.
+--
+-- 'tags', 'createNetworkAnalyzerConfiguration_tags' - Undocumented member.
+--
+-- 'traceContent', 'createNetworkAnalyzerConfiguration_traceContent' - Undocumented member.
+--
+-- 'wirelessDevices', 'createNetworkAnalyzerConfiguration_wirelessDevices' - Wireless device resources to add to the network analyzer configuration.
+-- Provide the @WirelessDeviceId@ of the resource to add in the input
+-- array.
+--
+-- 'wirelessGateways', 'createNetworkAnalyzerConfiguration_wirelessGateways' - Wireless gateway resources to add to the network analyzer configuration.
+-- Provide the @WirelessGatewayId@ of the resource to add in the input
+-- array.
+--
+-- 'name', 'createNetworkAnalyzerConfiguration_name' - Undocumented member.
+newCreateNetworkAnalyzerConfiguration ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateNetworkAnalyzerConfiguration
+newCreateNetworkAnalyzerConfiguration pName_ =
+  CreateNetworkAnalyzerConfiguration'
+    { clientRequestToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      traceContent = Prelude.Nothing,
+      wirelessDevices = Prelude.Nothing,
+      wirelessGateways = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | Undocumented member.
+createNetworkAnalyzerConfiguration_clientRequestToken :: Lens.Lens' CreateNetworkAnalyzerConfiguration (Prelude.Maybe Prelude.Text)
+createNetworkAnalyzerConfiguration_clientRequestToken = Lens.lens (\CreateNetworkAnalyzerConfiguration' {clientRequestToken} -> clientRequestToken) (\s@CreateNetworkAnalyzerConfiguration' {} a -> s {clientRequestToken = a} :: CreateNetworkAnalyzerConfiguration)
+
+-- | Undocumented member.
+createNetworkAnalyzerConfiguration_description :: Lens.Lens' CreateNetworkAnalyzerConfiguration (Prelude.Maybe Prelude.Text)
+createNetworkAnalyzerConfiguration_description = Lens.lens (\CreateNetworkAnalyzerConfiguration' {description} -> description) (\s@CreateNetworkAnalyzerConfiguration' {} a -> s {description = a} :: CreateNetworkAnalyzerConfiguration)
+
+-- | Undocumented member.
+createNetworkAnalyzerConfiguration_tags :: Lens.Lens' CreateNetworkAnalyzerConfiguration (Prelude.Maybe [Tag])
+createNetworkAnalyzerConfiguration_tags = Lens.lens (\CreateNetworkAnalyzerConfiguration' {tags} -> tags) (\s@CreateNetworkAnalyzerConfiguration' {} a -> s {tags = a} :: CreateNetworkAnalyzerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createNetworkAnalyzerConfiguration_traceContent :: Lens.Lens' CreateNetworkAnalyzerConfiguration (Prelude.Maybe TraceContent)
+createNetworkAnalyzerConfiguration_traceContent = Lens.lens (\CreateNetworkAnalyzerConfiguration' {traceContent} -> traceContent) (\s@CreateNetworkAnalyzerConfiguration' {} a -> s {traceContent = a} :: CreateNetworkAnalyzerConfiguration)
+
+-- | Wireless device resources to add to the network analyzer configuration.
+-- Provide the @WirelessDeviceId@ of the resource to add in the input
+-- array.
+createNetworkAnalyzerConfiguration_wirelessDevices :: Lens.Lens' CreateNetworkAnalyzerConfiguration (Prelude.Maybe [Prelude.Text])
+createNetworkAnalyzerConfiguration_wirelessDevices = Lens.lens (\CreateNetworkAnalyzerConfiguration' {wirelessDevices} -> wirelessDevices) (\s@CreateNetworkAnalyzerConfiguration' {} a -> s {wirelessDevices = a} :: CreateNetworkAnalyzerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Wireless gateway resources to add to the network analyzer configuration.
+-- Provide the @WirelessGatewayId@ of the resource to add in the input
+-- array.
+createNetworkAnalyzerConfiguration_wirelessGateways :: Lens.Lens' CreateNetworkAnalyzerConfiguration (Prelude.Maybe [Prelude.Text])
+createNetworkAnalyzerConfiguration_wirelessGateways = Lens.lens (\CreateNetworkAnalyzerConfiguration' {wirelessGateways} -> wirelessGateways) (\s@CreateNetworkAnalyzerConfiguration' {} a -> s {wirelessGateways = a} :: CreateNetworkAnalyzerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+createNetworkAnalyzerConfiguration_name :: Lens.Lens' CreateNetworkAnalyzerConfiguration Prelude.Text
+createNetworkAnalyzerConfiguration_name = Lens.lens (\CreateNetworkAnalyzerConfiguration' {name} -> name) (\s@CreateNetworkAnalyzerConfiguration' {} a -> s {name = a} :: CreateNetworkAnalyzerConfiguration)
+
+instance
+  Core.AWSRequest
+    CreateNetworkAnalyzerConfiguration
+  where
+  type
+    AWSResponse CreateNetworkAnalyzerConfiguration =
+      CreateNetworkAnalyzerConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateNetworkAnalyzerConfigurationResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateNetworkAnalyzerConfiguration
+  where
+  hashWithSalt
+    _salt
+    CreateNetworkAnalyzerConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientRequestToken
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` traceContent
+        `Prelude.hashWithSalt` wirelessDevices
+        `Prelude.hashWithSalt` wirelessGateways
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    CreateNetworkAnalyzerConfiguration
+  where
+  rnf CreateNetworkAnalyzerConfiguration' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf traceContent
+      `Prelude.seq` Prelude.rnf wirelessDevices
+      `Prelude.seq` Prelude.rnf wirelessGateways
+      `Prelude.seq` Prelude.rnf name
+
+instance
+  Data.ToHeaders
+    CreateNetworkAnalyzerConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    CreateNetworkAnalyzerConfiguration
+  where
+  toJSON CreateNetworkAnalyzerConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TraceContent" Data..=) Prelude.<$> traceContent,
+            ("WirelessDevices" Data..=)
+              Prelude.<$> wirelessDevices,
+            ("WirelessGateways" Data..=)
+              Prelude.<$> wirelessGateways,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance
+  Data.ToPath
+    CreateNetworkAnalyzerConfiguration
+  where
+  toPath =
+    Prelude.const "/network-analyzer-configurations"
+
+instance
+  Data.ToQuery
+    CreateNetworkAnalyzerConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateNetworkAnalyzerConfigurationResponse' smart constructor.
+data CreateNetworkAnalyzerConfigurationResponse = CreateNetworkAnalyzerConfigurationResponse'
+  { -- | The Amazon Resource Name of the new resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    name :: 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 'CreateNetworkAnalyzerConfigurationResponse' 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', 'createNetworkAnalyzerConfigurationResponse_arn' - The Amazon Resource Name of the new resource.
+--
+-- 'name', 'createNetworkAnalyzerConfigurationResponse_name' - Undocumented member.
+--
+-- 'httpStatus', 'createNetworkAnalyzerConfigurationResponse_httpStatus' - The response's http status code.
+newCreateNetworkAnalyzerConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNetworkAnalyzerConfigurationResponse
+newCreateNetworkAnalyzerConfigurationResponse
+  pHttpStatus_ =
+    CreateNetworkAnalyzerConfigurationResponse'
+      { arn =
+          Prelude.Nothing,
+        name = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name of the new resource.
+createNetworkAnalyzerConfigurationResponse_arn :: Lens.Lens' CreateNetworkAnalyzerConfigurationResponse (Prelude.Maybe Prelude.Text)
+createNetworkAnalyzerConfigurationResponse_arn = Lens.lens (\CreateNetworkAnalyzerConfigurationResponse' {arn} -> arn) (\s@CreateNetworkAnalyzerConfigurationResponse' {} a -> s {arn = a} :: CreateNetworkAnalyzerConfigurationResponse)
+
+-- | Undocumented member.
+createNetworkAnalyzerConfigurationResponse_name :: Lens.Lens' CreateNetworkAnalyzerConfigurationResponse (Prelude.Maybe Prelude.Text)
+createNetworkAnalyzerConfigurationResponse_name = Lens.lens (\CreateNetworkAnalyzerConfigurationResponse' {name} -> name) (\s@CreateNetworkAnalyzerConfigurationResponse' {} a -> s {name = a} :: CreateNetworkAnalyzerConfigurationResponse)
+
+-- | The response's http status code.
+createNetworkAnalyzerConfigurationResponse_httpStatus :: Lens.Lens' CreateNetworkAnalyzerConfigurationResponse Prelude.Int
+createNetworkAnalyzerConfigurationResponse_httpStatus = Lens.lens (\CreateNetworkAnalyzerConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreateNetworkAnalyzerConfigurationResponse' {} a -> s {httpStatus = a} :: CreateNetworkAnalyzerConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreateNetworkAnalyzerConfigurationResponse
+  where
+  rnf CreateNetworkAnalyzerConfigurationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateServiceProfile.hs b/gen/Amazonka/IoTWireless/CreateServiceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateServiceProfile.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.IoTWireless.CreateServiceProfile
+-- 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 service profile.
+module Amazonka.IoTWireless.CreateServiceProfile
+  ( -- * Creating a Request
+    CreateServiceProfile (..),
+    newCreateServiceProfile,
+
+    -- * Request Lenses
+    createServiceProfile_clientRequestToken,
+    createServiceProfile_loRaWAN,
+    createServiceProfile_name,
+    createServiceProfile_tags,
+
+    -- * Destructuring the Response
+    CreateServiceProfileResponse (..),
+    newCreateServiceProfileResponse,
+
+    -- * Response Lenses
+    createServiceProfileResponse_arn,
+    createServiceProfileResponse_id,
+    createServiceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateServiceProfile' smart constructor.
+data CreateServiceProfile = CreateServiceProfile'
+  { -- | Each resource must have a unique client request token. If you try to
+    -- create a new resource with the same token as a resource that already
+    -- exists, an exception occurs. If you omit this value, AWS SDKs will
+    -- automatically generate a unique client request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The service profile information to use to create the service profile.
+    loRaWAN :: Prelude.Maybe LoRaWANServiceProfile,
+    -- | The name of the new resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags to attach to the new service profile. Tags are metadata that
+    -- you can use to manage a resource.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateServiceProfile' 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', 'createServiceProfile_clientRequestToken' - Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+--
+-- 'loRaWAN', 'createServiceProfile_loRaWAN' - The service profile information to use to create the service profile.
+--
+-- 'name', 'createServiceProfile_name' - The name of the new resource.
+--
+-- 'tags', 'createServiceProfile_tags' - The tags to attach to the new service profile. Tags are metadata that
+-- you can use to manage a resource.
+newCreateServiceProfile ::
+  CreateServiceProfile
+newCreateServiceProfile =
+  CreateServiceProfile'
+    { clientRequestToken =
+        Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+createServiceProfile_clientRequestToken :: Lens.Lens' CreateServiceProfile (Prelude.Maybe Prelude.Text)
+createServiceProfile_clientRequestToken = Lens.lens (\CreateServiceProfile' {clientRequestToken} -> clientRequestToken) (\s@CreateServiceProfile' {} a -> s {clientRequestToken = a} :: CreateServiceProfile)
+
+-- | The service profile information to use to create the service profile.
+createServiceProfile_loRaWAN :: Lens.Lens' CreateServiceProfile (Prelude.Maybe LoRaWANServiceProfile)
+createServiceProfile_loRaWAN = Lens.lens (\CreateServiceProfile' {loRaWAN} -> loRaWAN) (\s@CreateServiceProfile' {} a -> s {loRaWAN = a} :: CreateServiceProfile)
+
+-- | The name of the new resource.
+createServiceProfile_name :: Lens.Lens' CreateServiceProfile (Prelude.Maybe Prelude.Text)
+createServiceProfile_name = Lens.lens (\CreateServiceProfile' {name} -> name) (\s@CreateServiceProfile' {} a -> s {name = a} :: CreateServiceProfile)
+
+-- | The tags to attach to the new service profile. Tags are metadata that
+-- you can use to manage a resource.
+createServiceProfile_tags :: Lens.Lens' CreateServiceProfile (Prelude.Maybe [Tag])
+createServiceProfile_tags = Lens.lens (\CreateServiceProfile' {tags} -> tags) (\s@CreateServiceProfile' {} a -> s {tags = a} :: CreateServiceProfile) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateServiceProfile where
+  type
+    AWSResponse CreateServiceProfile =
+      CreateServiceProfileResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateServiceProfileResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateServiceProfile where
+  hashWithSalt _salt CreateServiceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData CreateServiceProfile where
+  rnf CreateServiceProfile' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders CreateServiceProfile where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateServiceProfile where
+  toJSON CreateServiceProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Tags" Data..=) Prelude.<$> tags
+          ]
+      )
+
+instance Data.ToPath CreateServiceProfile where
+  toPath = Prelude.const "/service-profiles"
+
+instance Data.ToQuery CreateServiceProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateServiceProfileResponse' smart constructor.
+data CreateServiceProfileResponse = CreateServiceProfileResponse'
+  { -- | The Amazon Resource Name of the new resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the new service profile.
+    id :: 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 'CreateServiceProfileResponse' 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', 'createServiceProfileResponse_arn' - The Amazon Resource Name of the new resource.
+--
+-- 'id', 'createServiceProfileResponse_id' - The ID of the new service profile.
+--
+-- 'httpStatus', 'createServiceProfileResponse_httpStatus' - The response's http status code.
+newCreateServiceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateServiceProfileResponse
+newCreateServiceProfileResponse pHttpStatus_ =
+  CreateServiceProfileResponse'
+    { arn =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the new resource.
+createServiceProfileResponse_arn :: Lens.Lens' CreateServiceProfileResponse (Prelude.Maybe Prelude.Text)
+createServiceProfileResponse_arn = Lens.lens (\CreateServiceProfileResponse' {arn} -> arn) (\s@CreateServiceProfileResponse' {} a -> s {arn = a} :: CreateServiceProfileResponse)
+
+-- | The ID of the new service profile.
+createServiceProfileResponse_id :: Lens.Lens' CreateServiceProfileResponse (Prelude.Maybe Prelude.Text)
+createServiceProfileResponse_id = Lens.lens (\CreateServiceProfileResponse' {id} -> id) (\s@CreateServiceProfileResponse' {} a -> s {id = a} :: CreateServiceProfileResponse)
+
+-- | The response's http status code.
+createServiceProfileResponse_httpStatus :: Lens.Lens' CreateServiceProfileResponse Prelude.Int
+createServiceProfileResponse_httpStatus = Lens.lens (\CreateServiceProfileResponse' {httpStatus} -> httpStatus) (\s@CreateServiceProfileResponse' {} a -> s {httpStatus = a} :: CreateServiceProfileResponse)
+
+instance Prelude.NFData CreateServiceProfileResponse where
+  rnf CreateServiceProfileResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateWirelessDevice.hs b/gen/Amazonka/IoTWireless/CreateWirelessDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateWirelessDevice.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.IoTWireless.CreateWirelessDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provisions a wireless device.
+module Amazonka.IoTWireless.CreateWirelessDevice
+  ( -- * Creating a Request
+    CreateWirelessDevice (..),
+    newCreateWirelessDevice,
+
+    -- * Request Lenses
+    createWirelessDevice_clientRequestToken,
+    createWirelessDevice_description,
+    createWirelessDevice_loRaWAN,
+    createWirelessDevice_name,
+    createWirelessDevice_positioning,
+    createWirelessDevice_tags,
+    createWirelessDevice_type,
+    createWirelessDevice_destinationName,
+
+    -- * Destructuring the Response
+    CreateWirelessDeviceResponse (..),
+    newCreateWirelessDeviceResponse,
+
+    -- * Response Lenses
+    createWirelessDeviceResponse_arn,
+    createWirelessDeviceResponse_id,
+    createWirelessDeviceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWirelessDevice' smart constructor.
+data CreateWirelessDevice = CreateWirelessDevice'
+  { -- | Each resource must have a unique client request token. If you try to
+    -- create a new resource with the same token as a resource that already
+    -- exists, an exception occurs. If you omit this value, AWS SDKs will
+    -- automatically generate a unique client request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the new resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The device configuration information to use to create the wireless
+    -- device.
+    loRaWAN :: Prelude.Maybe LoRaWANDevice,
+    -- | The name of the new resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | FPort values for the GNSS, stream, and ClockSync functions of the
+    -- positioning information.
+    positioning :: Prelude.Maybe PositioningConfigStatus,
+    -- | The tags to attach to the new wireless device. Tags are metadata that
+    -- you can use to manage a resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The wireless device type.
+    type' :: WirelessDeviceType,
+    -- | The name of the destination to assign to the new wireless device.
+    destinationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWirelessDevice' 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', 'createWirelessDevice_clientRequestToken' - Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+--
+-- 'description', 'createWirelessDevice_description' - The description of the new resource.
+--
+-- 'loRaWAN', 'createWirelessDevice_loRaWAN' - The device configuration information to use to create the wireless
+-- device.
+--
+-- 'name', 'createWirelessDevice_name' - The name of the new resource.
+--
+-- 'positioning', 'createWirelessDevice_positioning' - FPort values for the GNSS, stream, and ClockSync functions of the
+-- positioning information.
+--
+-- 'tags', 'createWirelessDevice_tags' - The tags to attach to the new wireless device. Tags are metadata that
+-- you can use to manage a resource.
+--
+-- 'type'', 'createWirelessDevice_type' - The wireless device type.
+--
+-- 'destinationName', 'createWirelessDevice_destinationName' - The name of the destination to assign to the new wireless device.
+newCreateWirelessDevice ::
+  -- | 'type''
+  WirelessDeviceType ->
+  -- | 'destinationName'
+  Prelude.Text ->
+  CreateWirelessDevice
+newCreateWirelessDevice pType_ pDestinationName_ =
+  CreateWirelessDevice'
+    { clientRequestToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      positioning = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = pType_,
+      destinationName = pDestinationName_
+    }
+
+-- | Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+createWirelessDevice_clientRequestToken :: Lens.Lens' CreateWirelessDevice (Prelude.Maybe Prelude.Text)
+createWirelessDevice_clientRequestToken = Lens.lens (\CreateWirelessDevice' {clientRequestToken} -> clientRequestToken) (\s@CreateWirelessDevice' {} a -> s {clientRequestToken = a} :: CreateWirelessDevice)
+
+-- | The description of the new resource.
+createWirelessDevice_description :: Lens.Lens' CreateWirelessDevice (Prelude.Maybe Prelude.Text)
+createWirelessDevice_description = Lens.lens (\CreateWirelessDevice' {description} -> description) (\s@CreateWirelessDevice' {} a -> s {description = a} :: CreateWirelessDevice)
+
+-- | The device configuration information to use to create the wireless
+-- device.
+createWirelessDevice_loRaWAN :: Lens.Lens' CreateWirelessDevice (Prelude.Maybe LoRaWANDevice)
+createWirelessDevice_loRaWAN = Lens.lens (\CreateWirelessDevice' {loRaWAN} -> loRaWAN) (\s@CreateWirelessDevice' {} a -> s {loRaWAN = a} :: CreateWirelessDevice)
+
+-- | The name of the new resource.
+createWirelessDevice_name :: Lens.Lens' CreateWirelessDevice (Prelude.Maybe Prelude.Text)
+createWirelessDevice_name = Lens.lens (\CreateWirelessDevice' {name} -> name) (\s@CreateWirelessDevice' {} a -> s {name = a} :: CreateWirelessDevice)
+
+-- | FPort values for the GNSS, stream, and ClockSync functions of the
+-- positioning information.
+createWirelessDevice_positioning :: Lens.Lens' CreateWirelessDevice (Prelude.Maybe PositioningConfigStatus)
+createWirelessDevice_positioning = Lens.lens (\CreateWirelessDevice' {positioning} -> positioning) (\s@CreateWirelessDevice' {} a -> s {positioning = a} :: CreateWirelessDevice)
+
+-- | The tags to attach to the new wireless device. Tags are metadata that
+-- you can use to manage a resource.
+createWirelessDevice_tags :: Lens.Lens' CreateWirelessDevice (Prelude.Maybe [Tag])
+createWirelessDevice_tags = Lens.lens (\CreateWirelessDevice' {tags} -> tags) (\s@CreateWirelessDevice' {} a -> s {tags = a} :: CreateWirelessDevice) Prelude.. Lens.mapping Lens.coerced
+
+-- | The wireless device type.
+createWirelessDevice_type :: Lens.Lens' CreateWirelessDevice WirelessDeviceType
+createWirelessDevice_type = Lens.lens (\CreateWirelessDevice' {type'} -> type') (\s@CreateWirelessDevice' {} a -> s {type' = a} :: CreateWirelessDevice)
+
+-- | The name of the destination to assign to the new wireless device.
+createWirelessDevice_destinationName :: Lens.Lens' CreateWirelessDevice Prelude.Text
+createWirelessDevice_destinationName = Lens.lens (\CreateWirelessDevice' {destinationName} -> destinationName) (\s@CreateWirelessDevice' {} a -> s {destinationName = a} :: CreateWirelessDevice)
+
+instance Core.AWSRequest CreateWirelessDevice where
+  type
+    AWSResponse CreateWirelessDevice =
+      CreateWirelessDeviceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWirelessDeviceResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWirelessDevice where
+  hashWithSalt _salt CreateWirelessDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` positioning
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` destinationName
+
+instance Prelude.NFData CreateWirelessDevice where
+  rnf CreateWirelessDevice' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf positioning
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf destinationName
+
+instance Data.ToHeaders CreateWirelessDevice where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateWirelessDevice where
+  toJSON CreateWirelessDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Positioning" Data..=) Prelude.<$> positioning,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Type" Data..= type'),
+            Prelude.Just
+              ("DestinationName" Data..= destinationName)
+          ]
+      )
+
+instance Data.ToPath CreateWirelessDevice where
+  toPath = Prelude.const "/wireless-devices"
+
+instance Data.ToQuery CreateWirelessDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWirelessDeviceResponse' smart constructor.
+data CreateWirelessDeviceResponse = CreateWirelessDeviceResponse'
+  { -- | The Amazon Resource Name of the new resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the new wireless device.
+    id :: 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 'CreateWirelessDeviceResponse' 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', 'createWirelessDeviceResponse_arn' - The Amazon Resource Name of the new resource.
+--
+-- 'id', 'createWirelessDeviceResponse_id' - The ID of the new wireless device.
+--
+-- 'httpStatus', 'createWirelessDeviceResponse_httpStatus' - The response's http status code.
+newCreateWirelessDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWirelessDeviceResponse
+newCreateWirelessDeviceResponse pHttpStatus_ =
+  CreateWirelessDeviceResponse'
+    { arn =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the new resource.
+createWirelessDeviceResponse_arn :: Lens.Lens' CreateWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+createWirelessDeviceResponse_arn = Lens.lens (\CreateWirelessDeviceResponse' {arn} -> arn) (\s@CreateWirelessDeviceResponse' {} a -> s {arn = a} :: CreateWirelessDeviceResponse)
+
+-- | The ID of the new wireless device.
+createWirelessDeviceResponse_id :: Lens.Lens' CreateWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+createWirelessDeviceResponse_id = Lens.lens (\CreateWirelessDeviceResponse' {id} -> id) (\s@CreateWirelessDeviceResponse' {} a -> s {id = a} :: CreateWirelessDeviceResponse)
+
+-- | The response's http status code.
+createWirelessDeviceResponse_httpStatus :: Lens.Lens' CreateWirelessDeviceResponse Prelude.Int
+createWirelessDeviceResponse_httpStatus = Lens.lens (\CreateWirelessDeviceResponse' {httpStatus} -> httpStatus) (\s@CreateWirelessDeviceResponse' {} a -> s {httpStatus = a} :: CreateWirelessDeviceResponse)
+
+instance Prelude.NFData CreateWirelessDeviceResponse where
+  rnf CreateWirelessDeviceResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateWirelessGateway.hs b/gen/Amazonka/IoTWireless/CreateWirelessGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateWirelessGateway.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.IoTWireless.CreateWirelessGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provisions a wireless gateway.
+module Amazonka.IoTWireless.CreateWirelessGateway
+  ( -- * Creating a Request
+    CreateWirelessGateway (..),
+    newCreateWirelessGateway,
+
+    -- * Request Lenses
+    createWirelessGateway_clientRequestToken,
+    createWirelessGateway_description,
+    createWirelessGateway_name,
+    createWirelessGateway_tags,
+    createWirelessGateway_loRaWAN,
+
+    -- * Destructuring the Response
+    CreateWirelessGatewayResponse (..),
+    newCreateWirelessGatewayResponse,
+
+    -- * Response Lenses
+    createWirelessGatewayResponse_arn,
+    createWirelessGatewayResponse_id,
+    createWirelessGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWirelessGateway' smart constructor.
+data CreateWirelessGateway = CreateWirelessGateway'
+  { -- | Each resource must have a unique client request token. If you try to
+    -- create a new resource with the same token as a resource that already
+    -- exists, an exception occurs. If you omit this value, AWS SDKs will
+    -- automatically generate a unique client request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the new resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the new resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags to attach to the new wireless gateway. Tags are metadata that
+    -- you can use to manage a resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The gateway configuration information to use to create the wireless
+    -- gateway.
+    loRaWAN :: LoRaWANGateway
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWirelessGateway' 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', 'createWirelessGateway_clientRequestToken' - Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+--
+-- 'description', 'createWirelessGateway_description' - The description of the new resource.
+--
+-- 'name', 'createWirelessGateway_name' - The name of the new resource.
+--
+-- 'tags', 'createWirelessGateway_tags' - The tags to attach to the new wireless gateway. Tags are metadata that
+-- you can use to manage a resource.
+--
+-- 'loRaWAN', 'createWirelessGateway_loRaWAN' - The gateway configuration information to use to create the wireless
+-- gateway.
+newCreateWirelessGateway ::
+  -- | 'loRaWAN'
+  LoRaWANGateway ->
+  CreateWirelessGateway
+newCreateWirelessGateway pLoRaWAN_ =
+  CreateWirelessGateway'
+    { clientRequestToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      loRaWAN = pLoRaWAN_
+    }
+
+-- | Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+createWirelessGateway_clientRequestToken :: Lens.Lens' CreateWirelessGateway (Prelude.Maybe Prelude.Text)
+createWirelessGateway_clientRequestToken = Lens.lens (\CreateWirelessGateway' {clientRequestToken} -> clientRequestToken) (\s@CreateWirelessGateway' {} a -> s {clientRequestToken = a} :: CreateWirelessGateway)
+
+-- | The description of the new resource.
+createWirelessGateway_description :: Lens.Lens' CreateWirelessGateway (Prelude.Maybe Prelude.Text)
+createWirelessGateway_description = Lens.lens (\CreateWirelessGateway' {description} -> description) (\s@CreateWirelessGateway' {} a -> s {description = a} :: CreateWirelessGateway)
+
+-- | The name of the new resource.
+createWirelessGateway_name :: Lens.Lens' CreateWirelessGateway (Prelude.Maybe Prelude.Text)
+createWirelessGateway_name = Lens.lens (\CreateWirelessGateway' {name} -> name) (\s@CreateWirelessGateway' {} a -> s {name = a} :: CreateWirelessGateway)
+
+-- | The tags to attach to the new wireless gateway. Tags are metadata that
+-- you can use to manage a resource.
+createWirelessGateway_tags :: Lens.Lens' CreateWirelessGateway (Prelude.Maybe [Tag])
+createWirelessGateway_tags = Lens.lens (\CreateWirelessGateway' {tags} -> tags) (\s@CreateWirelessGateway' {} a -> s {tags = a} :: CreateWirelessGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The gateway configuration information to use to create the wireless
+-- gateway.
+createWirelessGateway_loRaWAN :: Lens.Lens' CreateWirelessGateway LoRaWANGateway
+createWirelessGateway_loRaWAN = Lens.lens (\CreateWirelessGateway' {loRaWAN} -> loRaWAN) (\s@CreateWirelessGateway' {} a -> s {loRaWAN = a} :: CreateWirelessGateway)
+
+instance Core.AWSRequest CreateWirelessGateway where
+  type
+    AWSResponse CreateWirelessGateway =
+      CreateWirelessGatewayResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWirelessGatewayResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWirelessGateway where
+  hashWithSalt _salt CreateWirelessGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` loRaWAN
+
+instance Prelude.NFData CreateWirelessGateway where
+  rnf CreateWirelessGateway' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf loRaWAN
+
+instance Data.ToHeaders CreateWirelessGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateWirelessGateway where
+  toJSON CreateWirelessGateway' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("LoRaWAN" Data..= loRaWAN)
+          ]
+      )
+
+instance Data.ToPath CreateWirelessGateway where
+  toPath = Prelude.const "/wireless-gateways"
+
+instance Data.ToQuery CreateWirelessGateway where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWirelessGatewayResponse' smart constructor.
+data CreateWirelessGatewayResponse = CreateWirelessGatewayResponse'
+  { -- | The Amazon Resource Name of the new resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the new wireless gateway.
+    id :: 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 'CreateWirelessGatewayResponse' 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', 'createWirelessGatewayResponse_arn' - The Amazon Resource Name of the new resource.
+--
+-- 'id', 'createWirelessGatewayResponse_id' - The ID of the new wireless gateway.
+--
+-- 'httpStatus', 'createWirelessGatewayResponse_httpStatus' - The response's http status code.
+newCreateWirelessGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWirelessGatewayResponse
+newCreateWirelessGatewayResponse pHttpStatus_ =
+  CreateWirelessGatewayResponse'
+    { arn =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the new resource.
+createWirelessGatewayResponse_arn :: Lens.Lens' CreateWirelessGatewayResponse (Prelude.Maybe Prelude.Text)
+createWirelessGatewayResponse_arn = Lens.lens (\CreateWirelessGatewayResponse' {arn} -> arn) (\s@CreateWirelessGatewayResponse' {} a -> s {arn = a} :: CreateWirelessGatewayResponse)
+
+-- | The ID of the new wireless gateway.
+createWirelessGatewayResponse_id :: Lens.Lens' CreateWirelessGatewayResponse (Prelude.Maybe Prelude.Text)
+createWirelessGatewayResponse_id = Lens.lens (\CreateWirelessGatewayResponse' {id} -> id) (\s@CreateWirelessGatewayResponse' {} a -> s {id = a} :: CreateWirelessGatewayResponse)
+
+-- | The response's http status code.
+createWirelessGatewayResponse_httpStatus :: Lens.Lens' CreateWirelessGatewayResponse Prelude.Int
+createWirelessGatewayResponse_httpStatus = Lens.lens (\CreateWirelessGatewayResponse' {httpStatus} -> httpStatus) (\s@CreateWirelessGatewayResponse' {} a -> s {httpStatus = a} :: CreateWirelessGatewayResponse)
+
+instance Prelude.NFData CreateWirelessGatewayResponse where
+  rnf CreateWirelessGatewayResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateWirelessGatewayTask.hs b/gen/Amazonka/IoTWireless/CreateWirelessGatewayTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateWirelessGatewayTask.hs
@@ -0,0 +1,199 @@
+{-# 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.IoTWireless.CreateWirelessGatewayTask
+-- 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 task for a wireless gateway.
+module Amazonka.IoTWireless.CreateWirelessGatewayTask
+  ( -- * Creating a Request
+    CreateWirelessGatewayTask (..),
+    newCreateWirelessGatewayTask,
+
+    -- * Request Lenses
+    createWirelessGatewayTask_id,
+    createWirelessGatewayTask_wirelessGatewayTaskDefinitionId,
+
+    -- * Destructuring the Response
+    CreateWirelessGatewayTaskResponse (..),
+    newCreateWirelessGatewayTaskResponse,
+
+    -- * Response Lenses
+    createWirelessGatewayTaskResponse_status,
+    createWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId,
+    createWirelessGatewayTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWirelessGatewayTask' smart constructor.
+data CreateWirelessGatewayTask = CreateWirelessGatewayTask'
+  { -- | The ID of the resource to update.
+    id :: Prelude.Text,
+    -- | The ID of the WirelessGatewayTaskDefinition.
+    wirelessGatewayTaskDefinitionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWirelessGatewayTask' 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:
+--
+-- 'id', 'createWirelessGatewayTask_id' - The ID of the resource to update.
+--
+-- 'wirelessGatewayTaskDefinitionId', 'createWirelessGatewayTask_wirelessGatewayTaskDefinitionId' - The ID of the WirelessGatewayTaskDefinition.
+newCreateWirelessGatewayTask ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'wirelessGatewayTaskDefinitionId'
+  Prelude.Text ->
+  CreateWirelessGatewayTask
+newCreateWirelessGatewayTask
+  pId_
+  pWirelessGatewayTaskDefinitionId_ =
+    CreateWirelessGatewayTask'
+      { id = pId_,
+        wirelessGatewayTaskDefinitionId =
+          pWirelessGatewayTaskDefinitionId_
+      }
+
+-- | The ID of the resource to update.
+createWirelessGatewayTask_id :: Lens.Lens' CreateWirelessGatewayTask Prelude.Text
+createWirelessGatewayTask_id = Lens.lens (\CreateWirelessGatewayTask' {id} -> id) (\s@CreateWirelessGatewayTask' {} a -> s {id = a} :: CreateWirelessGatewayTask)
+
+-- | The ID of the WirelessGatewayTaskDefinition.
+createWirelessGatewayTask_wirelessGatewayTaskDefinitionId :: Lens.Lens' CreateWirelessGatewayTask Prelude.Text
+createWirelessGatewayTask_wirelessGatewayTaskDefinitionId = Lens.lens (\CreateWirelessGatewayTask' {wirelessGatewayTaskDefinitionId} -> wirelessGatewayTaskDefinitionId) (\s@CreateWirelessGatewayTask' {} a -> s {wirelessGatewayTaskDefinitionId = a} :: CreateWirelessGatewayTask)
+
+instance Core.AWSRequest CreateWirelessGatewayTask where
+  type
+    AWSResponse CreateWirelessGatewayTask =
+      CreateWirelessGatewayTaskResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWirelessGatewayTaskResponse'
+            Prelude.<$> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "WirelessGatewayTaskDefinitionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWirelessGatewayTask where
+  hashWithSalt _salt CreateWirelessGatewayTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` wirelessGatewayTaskDefinitionId
+
+instance Prelude.NFData CreateWirelessGatewayTask where
+  rnf CreateWirelessGatewayTask' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf wirelessGatewayTaskDefinitionId
+
+instance Data.ToHeaders CreateWirelessGatewayTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON CreateWirelessGatewayTask where
+  toJSON CreateWirelessGatewayTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "WirelessGatewayTaskDefinitionId"
+                  Data..= wirelessGatewayTaskDefinitionId
+              )
+          ]
+      )
+
+instance Data.ToPath CreateWirelessGatewayTask where
+  toPath CreateWirelessGatewayTask' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id, "/tasks"]
+
+instance Data.ToQuery CreateWirelessGatewayTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWirelessGatewayTaskResponse' smart constructor.
+data CreateWirelessGatewayTaskResponse = CreateWirelessGatewayTaskResponse'
+  { -- | The status of the request.
+    status :: Prelude.Maybe WirelessGatewayTaskStatus,
+    -- | The ID of the WirelessGatewayTaskDefinition.
+    wirelessGatewayTaskDefinitionId :: 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 'CreateWirelessGatewayTaskResponse' 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:
+--
+-- 'status', 'createWirelessGatewayTaskResponse_status' - The status of the request.
+--
+-- 'wirelessGatewayTaskDefinitionId', 'createWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId' - The ID of the WirelessGatewayTaskDefinition.
+--
+-- 'httpStatus', 'createWirelessGatewayTaskResponse_httpStatus' - The response's http status code.
+newCreateWirelessGatewayTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWirelessGatewayTaskResponse
+newCreateWirelessGatewayTaskResponse pHttpStatus_ =
+  CreateWirelessGatewayTaskResponse'
+    { status =
+        Prelude.Nothing,
+      wirelessGatewayTaskDefinitionId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The status of the request.
+createWirelessGatewayTaskResponse_status :: Lens.Lens' CreateWirelessGatewayTaskResponse (Prelude.Maybe WirelessGatewayTaskStatus)
+createWirelessGatewayTaskResponse_status = Lens.lens (\CreateWirelessGatewayTaskResponse' {status} -> status) (\s@CreateWirelessGatewayTaskResponse' {} a -> s {status = a} :: CreateWirelessGatewayTaskResponse)
+
+-- | The ID of the WirelessGatewayTaskDefinition.
+createWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId :: Lens.Lens' CreateWirelessGatewayTaskResponse (Prelude.Maybe Prelude.Text)
+createWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId = Lens.lens (\CreateWirelessGatewayTaskResponse' {wirelessGatewayTaskDefinitionId} -> wirelessGatewayTaskDefinitionId) (\s@CreateWirelessGatewayTaskResponse' {} a -> s {wirelessGatewayTaskDefinitionId = a} :: CreateWirelessGatewayTaskResponse)
+
+-- | The response's http status code.
+createWirelessGatewayTaskResponse_httpStatus :: Lens.Lens' CreateWirelessGatewayTaskResponse Prelude.Int
+createWirelessGatewayTaskResponse_httpStatus = Lens.lens (\CreateWirelessGatewayTaskResponse' {httpStatus} -> httpStatus) (\s@CreateWirelessGatewayTaskResponse' {} a -> s {httpStatus = a} :: CreateWirelessGatewayTaskResponse)
+
+instance
+  Prelude.NFData
+    CreateWirelessGatewayTaskResponse
+  where
+  rnf CreateWirelessGatewayTaskResponse' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf wirelessGatewayTaskDefinitionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/CreateWirelessGatewayTaskDefinition.hs b/gen/Amazonka/IoTWireless/CreateWirelessGatewayTaskDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/CreateWirelessGatewayTaskDefinition.hs
@@ -0,0 +1,275 @@
+{-# 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.IoTWireless.CreateWirelessGatewayTaskDefinition
+-- 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 task definition.
+module Amazonka.IoTWireless.CreateWirelessGatewayTaskDefinition
+  ( -- * Creating a Request
+    CreateWirelessGatewayTaskDefinition (..),
+    newCreateWirelessGatewayTaskDefinition,
+
+    -- * Request Lenses
+    createWirelessGatewayTaskDefinition_clientRequestToken,
+    createWirelessGatewayTaskDefinition_name,
+    createWirelessGatewayTaskDefinition_tags,
+    createWirelessGatewayTaskDefinition_update,
+    createWirelessGatewayTaskDefinition_autoCreateTasks,
+
+    -- * Destructuring the Response
+    CreateWirelessGatewayTaskDefinitionResponse (..),
+    newCreateWirelessGatewayTaskDefinitionResponse,
+
+    -- * Response Lenses
+    createWirelessGatewayTaskDefinitionResponse_arn,
+    createWirelessGatewayTaskDefinitionResponse_id,
+    createWirelessGatewayTaskDefinitionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWirelessGatewayTaskDefinition' smart constructor.
+data CreateWirelessGatewayTaskDefinition = CreateWirelessGatewayTaskDefinition'
+  { -- | Each resource must have a unique client request token. If you try to
+    -- create a new resource with the same token as a resource that already
+    -- exists, an exception occurs. If you omit this value, AWS SDKs will
+    -- automatically generate a unique client request.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the new resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags to attach to the specified resource. Tags are metadata that you
+    -- can use to manage a resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | Information about the gateways to update.
+    update :: Prelude.Maybe UpdateWirelessGatewayTaskCreate,
+    -- | Whether to automatically create tasks using this task definition for all
+    -- gateways with the specified current version. If @false@, the task must
+    -- me created by calling @CreateWirelessGatewayTask@.
+    autoCreateTasks :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWirelessGatewayTaskDefinition' 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', 'createWirelessGatewayTaskDefinition_clientRequestToken' - Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+--
+-- 'name', 'createWirelessGatewayTaskDefinition_name' - The name of the new resource.
+--
+-- 'tags', 'createWirelessGatewayTaskDefinition_tags' - The tags to attach to the specified resource. Tags are metadata that you
+-- can use to manage a resource.
+--
+-- 'update', 'createWirelessGatewayTaskDefinition_update' - Information about the gateways to update.
+--
+-- 'autoCreateTasks', 'createWirelessGatewayTaskDefinition_autoCreateTasks' - Whether to automatically create tasks using this task definition for all
+-- gateways with the specified current version. If @false@, the task must
+-- me created by calling @CreateWirelessGatewayTask@.
+newCreateWirelessGatewayTaskDefinition ::
+  -- | 'autoCreateTasks'
+  Prelude.Bool ->
+  CreateWirelessGatewayTaskDefinition
+newCreateWirelessGatewayTaskDefinition
+  pAutoCreateTasks_ =
+    CreateWirelessGatewayTaskDefinition'
+      { clientRequestToken =
+          Prelude.Nothing,
+        name = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        update = Prelude.Nothing,
+        autoCreateTasks = pAutoCreateTasks_
+      }
+
+-- | Each resource must have a unique client request token. If you try to
+-- create a new resource with the same token as a resource that already
+-- exists, an exception occurs. If you omit this value, AWS SDKs will
+-- automatically generate a unique client request.
+createWirelessGatewayTaskDefinition_clientRequestToken :: Lens.Lens' CreateWirelessGatewayTaskDefinition (Prelude.Maybe Prelude.Text)
+createWirelessGatewayTaskDefinition_clientRequestToken = Lens.lens (\CreateWirelessGatewayTaskDefinition' {clientRequestToken} -> clientRequestToken) (\s@CreateWirelessGatewayTaskDefinition' {} a -> s {clientRequestToken = a} :: CreateWirelessGatewayTaskDefinition)
+
+-- | The name of the new resource.
+createWirelessGatewayTaskDefinition_name :: Lens.Lens' CreateWirelessGatewayTaskDefinition (Prelude.Maybe Prelude.Text)
+createWirelessGatewayTaskDefinition_name = Lens.lens (\CreateWirelessGatewayTaskDefinition' {name} -> name) (\s@CreateWirelessGatewayTaskDefinition' {} a -> s {name = a} :: CreateWirelessGatewayTaskDefinition)
+
+-- | The tags to attach to the specified resource. Tags are metadata that you
+-- can use to manage a resource.
+createWirelessGatewayTaskDefinition_tags :: Lens.Lens' CreateWirelessGatewayTaskDefinition (Prelude.Maybe [Tag])
+createWirelessGatewayTaskDefinition_tags = Lens.lens (\CreateWirelessGatewayTaskDefinition' {tags} -> tags) (\s@CreateWirelessGatewayTaskDefinition' {} a -> s {tags = a} :: CreateWirelessGatewayTaskDefinition) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the gateways to update.
+createWirelessGatewayTaskDefinition_update :: Lens.Lens' CreateWirelessGatewayTaskDefinition (Prelude.Maybe UpdateWirelessGatewayTaskCreate)
+createWirelessGatewayTaskDefinition_update = Lens.lens (\CreateWirelessGatewayTaskDefinition' {update} -> update) (\s@CreateWirelessGatewayTaskDefinition' {} a -> s {update = a} :: CreateWirelessGatewayTaskDefinition)
+
+-- | Whether to automatically create tasks using this task definition for all
+-- gateways with the specified current version. If @false@, the task must
+-- me created by calling @CreateWirelessGatewayTask@.
+createWirelessGatewayTaskDefinition_autoCreateTasks :: Lens.Lens' CreateWirelessGatewayTaskDefinition Prelude.Bool
+createWirelessGatewayTaskDefinition_autoCreateTasks = Lens.lens (\CreateWirelessGatewayTaskDefinition' {autoCreateTasks} -> autoCreateTasks) (\s@CreateWirelessGatewayTaskDefinition' {} a -> s {autoCreateTasks = a} :: CreateWirelessGatewayTaskDefinition)
+
+instance
+  Core.AWSRequest
+    CreateWirelessGatewayTaskDefinition
+  where
+  type
+    AWSResponse CreateWirelessGatewayTaskDefinition =
+      CreateWirelessGatewayTaskDefinitionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWirelessGatewayTaskDefinitionResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateWirelessGatewayTaskDefinition
+  where
+  hashWithSalt
+    _salt
+    CreateWirelessGatewayTaskDefinition' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientRequestToken
+        `Prelude.hashWithSalt` name
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` update
+        `Prelude.hashWithSalt` autoCreateTasks
+
+instance
+  Prelude.NFData
+    CreateWirelessGatewayTaskDefinition
+  where
+  rnf CreateWirelessGatewayTaskDefinition' {..} =
+    Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf update
+      `Prelude.seq` Prelude.rnf autoCreateTasks
+
+instance
+  Data.ToHeaders
+    CreateWirelessGatewayTaskDefinition
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    CreateWirelessGatewayTaskDefinition
+  where
+  toJSON CreateWirelessGatewayTaskDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("Update" Data..=) Prelude.<$> update,
+            Prelude.Just
+              ("AutoCreateTasks" Data..= autoCreateTasks)
+          ]
+      )
+
+instance
+  Data.ToPath
+    CreateWirelessGatewayTaskDefinition
+  where
+  toPath =
+    Prelude.const "/wireless-gateway-task-definitions"
+
+instance
+  Data.ToQuery
+    CreateWirelessGatewayTaskDefinition
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWirelessGatewayTaskDefinitionResponse' smart constructor.
+data CreateWirelessGatewayTaskDefinitionResponse = CreateWirelessGatewayTaskDefinitionResponse'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the new wireless gateway task definition.
+    id :: 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 'CreateWirelessGatewayTaskDefinitionResponse' 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', 'createWirelessGatewayTaskDefinitionResponse_arn' - The Amazon Resource Name of the resource.
+--
+-- 'id', 'createWirelessGatewayTaskDefinitionResponse_id' - The ID of the new wireless gateway task definition.
+--
+-- 'httpStatus', 'createWirelessGatewayTaskDefinitionResponse_httpStatus' - The response's http status code.
+newCreateWirelessGatewayTaskDefinitionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWirelessGatewayTaskDefinitionResponse
+newCreateWirelessGatewayTaskDefinitionResponse
+  pHttpStatus_ =
+    CreateWirelessGatewayTaskDefinitionResponse'
+      { arn =
+          Prelude.Nothing,
+        id = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name of the resource.
+createWirelessGatewayTaskDefinitionResponse_arn :: Lens.Lens' CreateWirelessGatewayTaskDefinitionResponse (Prelude.Maybe Prelude.Text)
+createWirelessGatewayTaskDefinitionResponse_arn = Lens.lens (\CreateWirelessGatewayTaskDefinitionResponse' {arn} -> arn) (\s@CreateWirelessGatewayTaskDefinitionResponse' {} a -> s {arn = a} :: CreateWirelessGatewayTaskDefinitionResponse)
+
+-- | The ID of the new wireless gateway task definition.
+createWirelessGatewayTaskDefinitionResponse_id :: Lens.Lens' CreateWirelessGatewayTaskDefinitionResponse (Prelude.Maybe Prelude.Text)
+createWirelessGatewayTaskDefinitionResponse_id = Lens.lens (\CreateWirelessGatewayTaskDefinitionResponse' {id} -> id) (\s@CreateWirelessGatewayTaskDefinitionResponse' {} a -> s {id = a} :: CreateWirelessGatewayTaskDefinitionResponse)
+
+-- | The response's http status code.
+createWirelessGatewayTaskDefinitionResponse_httpStatus :: Lens.Lens' CreateWirelessGatewayTaskDefinitionResponse Prelude.Int
+createWirelessGatewayTaskDefinitionResponse_httpStatus = Lens.lens (\CreateWirelessGatewayTaskDefinitionResponse' {httpStatus} -> httpStatus) (\s@CreateWirelessGatewayTaskDefinitionResponse' {} a -> s {httpStatus = a} :: CreateWirelessGatewayTaskDefinitionResponse)
+
+instance
+  Prelude.NFData
+    CreateWirelessGatewayTaskDefinitionResponse
+  where
+  rnf CreateWirelessGatewayTaskDefinitionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteDestination.hs b/gen/Amazonka/IoTWireless/DeleteDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteDestination.hs
@@ -0,0 +1,138 @@
+{-# 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.IoTWireless.DeleteDestination
+-- 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 destination.
+module Amazonka.IoTWireless.DeleteDestination
+  ( -- * Creating a Request
+    DeleteDestination (..),
+    newDeleteDestination,
+
+    -- * Request Lenses
+    deleteDestination_name,
+
+    -- * Destructuring the Response
+    DeleteDestinationResponse (..),
+    newDeleteDestinationResponse,
+
+    -- * Response Lenses
+    deleteDestinationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDestination' smart constructor.
+data DeleteDestination = DeleteDestination'
+  { -- | The name of the resource to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDestination' 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:
+--
+-- 'name', 'deleteDestination_name' - The name of the resource to delete.
+newDeleteDestination ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteDestination
+newDeleteDestination pName_ =
+  DeleteDestination' {name = pName_}
+
+-- | The name of the resource to delete.
+deleteDestination_name :: Lens.Lens' DeleteDestination Prelude.Text
+deleteDestination_name = Lens.lens (\DeleteDestination' {name} -> name) (\s@DeleteDestination' {} a -> s {name = a} :: DeleteDestination)
+
+instance Core.AWSRequest DeleteDestination where
+  type
+    AWSResponse DeleteDestination =
+      DeleteDestinationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDestination where
+  hashWithSalt _salt DeleteDestination' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteDestination where
+  rnf DeleteDestination' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteDestination where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteDestination where
+  toPath DeleteDestination' {..} =
+    Prelude.mconcat ["/destinations/", Data.toBS name]
+
+instance Data.ToQuery DeleteDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDestinationResponse' smart constructor.
+data DeleteDestinationResponse = DeleteDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDestinationResponse' 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', 'deleteDestinationResponse_httpStatus' - The response's http status code.
+newDeleteDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDestinationResponse
+newDeleteDestinationResponse pHttpStatus_ =
+  DeleteDestinationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDestinationResponse_httpStatus :: Lens.Lens' DeleteDestinationResponse Prelude.Int
+deleteDestinationResponse_httpStatus = Lens.lens (\DeleteDestinationResponse' {httpStatus} -> httpStatus) (\s@DeleteDestinationResponse' {} a -> s {httpStatus = a} :: DeleteDestinationResponse)
+
+instance Prelude.NFData DeleteDestinationResponse where
+  rnf DeleteDestinationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteDeviceProfile.hs b/gen/Amazonka/IoTWireless/DeleteDeviceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteDeviceProfile.hs
@@ -0,0 +1,138 @@
+{-# 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.IoTWireless.DeleteDeviceProfile
+-- 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 device profile.
+module Amazonka.IoTWireless.DeleteDeviceProfile
+  ( -- * Creating a Request
+    DeleteDeviceProfile (..),
+    newDeleteDeviceProfile,
+
+    -- * Request Lenses
+    deleteDeviceProfile_id,
+
+    -- * Destructuring the Response
+    DeleteDeviceProfileResponse (..),
+    newDeleteDeviceProfileResponse,
+
+    -- * Response Lenses
+    deleteDeviceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDeviceProfile' smart constructor.
+data DeleteDeviceProfile = DeleteDeviceProfile'
+  { -- | The ID of the resource to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeviceProfile' 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:
+--
+-- 'id', 'deleteDeviceProfile_id' - The ID of the resource to delete.
+newDeleteDeviceProfile ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteDeviceProfile
+newDeleteDeviceProfile pId_ =
+  DeleteDeviceProfile' {id = pId_}
+
+-- | The ID of the resource to delete.
+deleteDeviceProfile_id :: Lens.Lens' DeleteDeviceProfile Prelude.Text
+deleteDeviceProfile_id = Lens.lens (\DeleteDeviceProfile' {id} -> id) (\s@DeleteDeviceProfile' {} a -> s {id = a} :: DeleteDeviceProfile)
+
+instance Core.AWSRequest DeleteDeviceProfile where
+  type
+    AWSResponse DeleteDeviceProfile =
+      DeleteDeviceProfileResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDeviceProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDeviceProfile where
+  hashWithSalt _salt DeleteDeviceProfile' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteDeviceProfile where
+  rnf DeleteDeviceProfile' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteDeviceProfile where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteDeviceProfile where
+  toPath DeleteDeviceProfile' {..} =
+    Prelude.mconcat ["/device-profiles/", Data.toBS id]
+
+instance Data.ToQuery DeleteDeviceProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDeviceProfileResponse' smart constructor.
+data DeleteDeviceProfileResponse = DeleteDeviceProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDeviceProfileResponse' 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', 'deleteDeviceProfileResponse_httpStatus' - The response's http status code.
+newDeleteDeviceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDeviceProfileResponse
+newDeleteDeviceProfileResponse pHttpStatus_ =
+  DeleteDeviceProfileResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDeviceProfileResponse_httpStatus :: Lens.Lens' DeleteDeviceProfileResponse Prelude.Int
+deleteDeviceProfileResponse_httpStatus = Lens.lens (\DeleteDeviceProfileResponse' {httpStatus} -> httpStatus) (\s@DeleteDeviceProfileResponse' {} a -> s {httpStatus = a} :: DeleteDeviceProfileResponse)
+
+instance Prelude.NFData DeleteDeviceProfileResponse where
+  rnf DeleteDeviceProfileResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteFuotaTask.hs b/gen/Amazonka/IoTWireless/DeleteFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteFuotaTask.hs
@@ -0,0 +1,133 @@
+{-# 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.IoTWireless.DeleteFuotaTask
+-- 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 FUOTA task.
+module Amazonka.IoTWireless.DeleteFuotaTask
+  ( -- * Creating a Request
+    DeleteFuotaTask (..),
+    newDeleteFuotaTask,
+
+    -- * Request Lenses
+    deleteFuotaTask_id,
+
+    -- * Destructuring the Response
+    DeleteFuotaTaskResponse (..),
+    newDeleteFuotaTaskResponse,
+
+    -- * Response Lenses
+    deleteFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFuotaTask' smart constructor.
+data DeleteFuotaTask = DeleteFuotaTask'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFuotaTask' 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:
+--
+-- 'id', 'deleteFuotaTask_id' - Undocumented member.
+newDeleteFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteFuotaTask
+newDeleteFuotaTask pId_ = DeleteFuotaTask' {id = pId_}
+
+-- | Undocumented member.
+deleteFuotaTask_id :: Lens.Lens' DeleteFuotaTask Prelude.Text
+deleteFuotaTask_id = Lens.lens (\DeleteFuotaTask' {id} -> id) (\s@DeleteFuotaTask' {} a -> s {id = a} :: DeleteFuotaTask)
+
+instance Core.AWSRequest DeleteFuotaTask where
+  type
+    AWSResponse DeleteFuotaTask =
+      DeleteFuotaTaskResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteFuotaTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFuotaTask where
+  hashWithSalt _salt DeleteFuotaTask' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteFuotaTask where
+  rnf DeleteFuotaTask' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteFuotaTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteFuotaTask where
+  toPath DeleteFuotaTask' {..} =
+    Prelude.mconcat ["/fuota-tasks/", Data.toBS id]
+
+instance Data.ToQuery DeleteFuotaTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteFuotaTaskResponse' smart constructor.
+data DeleteFuotaTaskResponse = DeleteFuotaTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFuotaTaskResponse' 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', 'deleteFuotaTaskResponse_httpStatus' - The response's http status code.
+newDeleteFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFuotaTaskResponse
+newDeleteFuotaTaskResponse pHttpStatus_ =
+  DeleteFuotaTaskResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteFuotaTaskResponse_httpStatus :: Lens.Lens' DeleteFuotaTaskResponse Prelude.Int
+deleteFuotaTaskResponse_httpStatus = Lens.lens (\DeleteFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@DeleteFuotaTaskResponse' {} a -> s {httpStatus = a} :: DeleteFuotaTaskResponse)
+
+instance Prelude.NFData DeleteFuotaTaskResponse where
+  rnf DeleteFuotaTaskResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteMulticastGroup.hs b/gen/Amazonka/IoTWireless/DeleteMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteMulticastGroup.hs
@@ -0,0 +1,138 @@
+{-# 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.IoTWireless.DeleteMulticastGroup
+-- 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 multicast group if it is not in use by a fuota task.
+module Amazonka.IoTWireless.DeleteMulticastGroup
+  ( -- * Creating a Request
+    DeleteMulticastGroup (..),
+    newDeleteMulticastGroup,
+
+    -- * Request Lenses
+    deleteMulticastGroup_id,
+
+    -- * Destructuring the Response
+    DeleteMulticastGroupResponse (..),
+    newDeleteMulticastGroupResponse,
+
+    -- * Response Lenses
+    deleteMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteMulticastGroup' smart constructor.
+data DeleteMulticastGroup = DeleteMulticastGroup'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMulticastGroup' 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:
+--
+-- 'id', 'deleteMulticastGroup_id' - Undocumented member.
+newDeleteMulticastGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteMulticastGroup
+newDeleteMulticastGroup pId_ =
+  DeleteMulticastGroup' {id = pId_}
+
+-- | Undocumented member.
+deleteMulticastGroup_id :: Lens.Lens' DeleteMulticastGroup Prelude.Text
+deleteMulticastGroup_id = Lens.lens (\DeleteMulticastGroup' {id} -> id) (\s@DeleteMulticastGroup' {} a -> s {id = a} :: DeleteMulticastGroup)
+
+instance Core.AWSRequest DeleteMulticastGroup where
+  type
+    AWSResponse DeleteMulticastGroup =
+      DeleteMulticastGroupResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteMulticastGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteMulticastGroup where
+  hashWithSalt _salt DeleteMulticastGroup' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteMulticastGroup where
+  rnf DeleteMulticastGroup' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteMulticastGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteMulticastGroup where
+  toPath DeleteMulticastGroup' {..} =
+    Prelude.mconcat
+      ["/multicast-groups/", Data.toBS id]
+
+instance Data.ToQuery DeleteMulticastGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteMulticastGroupResponse' smart constructor.
+data DeleteMulticastGroupResponse = DeleteMulticastGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMulticastGroupResponse' 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', 'deleteMulticastGroupResponse_httpStatus' - The response's http status code.
+newDeleteMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteMulticastGroupResponse
+newDeleteMulticastGroupResponse pHttpStatus_ =
+  DeleteMulticastGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteMulticastGroupResponse_httpStatus :: Lens.Lens' DeleteMulticastGroupResponse Prelude.Int
+deleteMulticastGroupResponse_httpStatus = Lens.lens (\DeleteMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@DeleteMulticastGroupResponse' {} a -> s {httpStatus = a} :: DeleteMulticastGroupResponse)
+
+instance Prelude.NFData DeleteMulticastGroupResponse where
+  rnf DeleteMulticastGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteNetworkAnalyzerConfiguration.hs b/gen/Amazonka/IoTWireless/DeleteNetworkAnalyzerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteNetworkAnalyzerConfiguration.hs
@@ -0,0 +1,169 @@
+{-# 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.IoTWireless.DeleteNetworkAnalyzerConfiguration
+-- 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 analyzer configuration.
+module Amazonka.IoTWireless.DeleteNetworkAnalyzerConfiguration
+  ( -- * Creating a Request
+    DeleteNetworkAnalyzerConfiguration (..),
+    newDeleteNetworkAnalyzerConfiguration,
+
+    -- * Request Lenses
+    deleteNetworkAnalyzerConfiguration_configurationName,
+
+    -- * Destructuring the Response
+    DeleteNetworkAnalyzerConfigurationResponse (..),
+    newDeleteNetworkAnalyzerConfigurationResponse,
+
+    -- * Response Lenses
+    deleteNetworkAnalyzerConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNetworkAnalyzerConfiguration' smart constructor.
+data DeleteNetworkAnalyzerConfiguration = DeleteNetworkAnalyzerConfiguration'
+  { configurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkAnalyzerConfiguration' 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:
+--
+-- 'configurationName', 'deleteNetworkAnalyzerConfiguration_configurationName' - Undocumented member.
+newDeleteNetworkAnalyzerConfiguration ::
+  -- | 'configurationName'
+  Prelude.Text ->
+  DeleteNetworkAnalyzerConfiguration
+newDeleteNetworkAnalyzerConfiguration
+  pConfigurationName_ =
+    DeleteNetworkAnalyzerConfiguration'
+      { configurationName =
+          pConfigurationName_
+      }
+
+-- | Undocumented member.
+deleteNetworkAnalyzerConfiguration_configurationName :: Lens.Lens' DeleteNetworkAnalyzerConfiguration Prelude.Text
+deleteNetworkAnalyzerConfiguration_configurationName = Lens.lens (\DeleteNetworkAnalyzerConfiguration' {configurationName} -> configurationName) (\s@DeleteNetworkAnalyzerConfiguration' {} a -> s {configurationName = a} :: DeleteNetworkAnalyzerConfiguration)
+
+instance
+  Core.AWSRequest
+    DeleteNetworkAnalyzerConfiguration
+  where
+  type
+    AWSResponse DeleteNetworkAnalyzerConfiguration =
+      DeleteNetworkAnalyzerConfigurationResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteNetworkAnalyzerConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteNetworkAnalyzerConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeleteNetworkAnalyzerConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` configurationName
+
+instance
+  Prelude.NFData
+    DeleteNetworkAnalyzerConfiguration
+  where
+  rnf DeleteNetworkAnalyzerConfiguration' {..} =
+    Prelude.rnf configurationName
+
+instance
+  Data.ToHeaders
+    DeleteNetworkAnalyzerConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteNetworkAnalyzerConfiguration
+  where
+  toPath DeleteNetworkAnalyzerConfiguration' {..} =
+    Prelude.mconcat
+      [ "/network-analyzer-configurations/",
+        Data.toBS configurationName
+      ]
+
+instance
+  Data.ToQuery
+    DeleteNetworkAnalyzerConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteNetworkAnalyzerConfigurationResponse' smart constructor.
+data DeleteNetworkAnalyzerConfigurationResponse = DeleteNetworkAnalyzerConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkAnalyzerConfigurationResponse' 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', 'deleteNetworkAnalyzerConfigurationResponse_httpStatus' - The response's http status code.
+newDeleteNetworkAnalyzerConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNetworkAnalyzerConfigurationResponse
+newDeleteNetworkAnalyzerConfigurationResponse
+  pHttpStatus_ =
+    DeleteNetworkAnalyzerConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteNetworkAnalyzerConfigurationResponse_httpStatus :: Lens.Lens' DeleteNetworkAnalyzerConfigurationResponse Prelude.Int
+deleteNetworkAnalyzerConfigurationResponse_httpStatus = Lens.lens (\DeleteNetworkAnalyzerConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteNetworkAnalyzerConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteNetworkAnalyzerConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteNetworkAnalyzerConfigurationResponse
+  where
+  rnf DeleteNetworkAnalyzerConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteQueuedMessages.hs b/gen/Amazonka/IoTWireless/DeleteQueuedMessages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteQueuedMessages.hs
@@ -0,0 +1,183 @@
+{-# 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.IoTWireless.DeleteQueuedMessages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Remove queued messages from the downlink queue.
+module Amazonka.IoTWireless.DeleteQueuedMessages
+  ( -- * Creating a Request
+    DeleteQueuedMessages (..),
+    newDeleteQueuedMessages,
+
+    -- * Request Lenses
+    deleteQueuedMessages_wirelessDeviceType,
+    deleteQueuedMessages_id,
+    deleteQueuedMessages_messageId,
+
+    -- * Destructuring the Response
+    DeleteQueuedMessagesResponse (..),
+    newDeleteQueuedMessagesResponse,
+
+    -- * Response Lenses
+    deleteQueuedMessagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteQueuedMessages' smart constructor.
+data DeleteQueuedMessages = DeleteQueuedMessages'
+  { -- | The wireless device type, which can be either Sidewalk or LoRaWAN.
+    wirelessDeviceType :: Prelude.Maybe WirelessDeviceType,
+    -- | The ID of a given wireless device for which downlink messages will be
+    -- deleted.
+    id :: Prelude.Text,
+    -- | If message ID is @\"*\"@, it cleares the entire downlink queue for a
+    -- given device, specified by the wireless device ID. Otherwise, the
+    -- downlink message with the specified message ID will be deleted.
+    messageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQueuedMessages' 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:
+--
+-- 'wirelessDeviceType', 'deleteQueuedMessages_wirelessDeviceType' - The wireless device type, which can be either Sidewalk or LoRaWAN.
+--
+-- 'id', 'deleteQueuedMessages_id' - The ID of a given wireless device for which downlink messages will be
+-- deleted.
+--
+-- 'messageId', 'deleteQueuedMessages_messageId' - If message ID is @\"*\"@, it cleares the entire downlink queue for a
+-- given device, specified by the wireless device ID. Otherwise, the
+-- downlink message with the specified message ID will be deleted.
+newDeleteQueuedMessages ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'messageId'
+  Prelude.Text ->
+  DeleteQueuedMessages
+newDeleteQueuedMessages pId_ pMessageId_ =
+  DeleteQueuedMessages'
+    { wirelessDeviceType =
+        Prelude.Nothing,
+      id = pId_,
+      messageId = pMessageId_
+    }
+
+-- | The wireless device type, which can be either Sidewalk or LoRaWAN.
+deleteQueuedMessages_wirelessDeviceType :: Lens.Lens' DeleteQueuedMessages (Prelude.Maybe WirelessDeviceType)
+deleteQueuedMessages_wirelessDeviceType = Lens.lens (\DeleteQueuedMessages' {wirelessDeviceType} -> wirelessDeviceType) (\s@DeleteQueuedMessages' {} a -> s {wirelessDeviceType = a} :: DeleteQueuedMessages)
+
+-- | The ID of a given wireless device for which downlink messages will be
+-- deleted.
+deleteQueuedMessages_id :: Lens.Lens' DeleteQueuedMessages Prelude.Text
+deleteQueuedMessages_id = Lens.lens (\DeleteQueuedMessages' {id} -> id) (\s@DeleteQueuedMessages' {} a -> s {id = a} :: DeleteQueuedMessages)
+
+-- | If message ID is @\"*\"@, it cleares the entire downlink queue for a
+-- given device, specified by the wireless device ID. Otherwise, the
+-- downlink message with the specified message ID will be deleted.
+deleteQueuedMessages_messageId :: Lens.Lens' DeleteQueuedMessages Prelude.Text
+deleteQueuedMessages_messageId = Lens.lens (\DeleteQueuedMessages' {messageId} -> messageId) (\s@DeleteQueuedMessages' {} a -> s {messageId = a} :: DeleteQueuedMessages)
+
+instance Core.AWSRequest DeleteQueuedMessages where
+  type
+    AWSResponse DeleteQueuedMessages =
+      DeleteQueuedMessagesResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteQueuedMessagesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteQueuedMessages where
+  hashWithSalt _salt DeleteQueuedMessages' {..} =
+    _salt
+      `Prelude.hashWithSalt` wirelessDeviceType
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` messageId
+
+instance Prelude.NFData DeleteQueuedMessages where
+  rnf DeleteQueuedMessages' {..} =
+    Prelude.rnf wirelessDeviceType
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf messageId
+
+instance Data.ToHeaders DeleteQueuedMessages where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteQueuedMessages where
+  toPath DeleteQueuedMessages' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS id, "/data"]
+
+instance Data.ToQuery DeleteQueuedMessages where
+  toQuery DeleteQueuedMessages' {..} =
+    Prelude.mconcat
+      [ "WirelessDeviceType" Data.=: wirelessDeviceType,
+        "messageId" Data.=: messageId
+      ]
+
+-- | /See:/ 'newDeleteQueuedMessagesResponse' smart constructor.
+data DeleteQueuedMessagesResponse = DeleteQueuedMessagesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQueuedMessagesResponse' 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', 'deleteQueuedMessagesResponse_httpStatus' - The response's http status code.
+newDeleteQueuedMessagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteQueuedMessagesResponse
+newDeleteQueuedMessagesResponse pHttpStatus_ =
+  DeleteQueuedMessagesResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteQueuedMessagesResponse_httpStatus :: Lens.Lens' DeleteQueuedMessagesResponse Prelude.Int
+deleteQueuedMessagesResponse_httpStatus = Lens.lens (\DeleteQueuedMessagesResponse' {httpStatus} -> httpStatus) (\s@DeleteQueuedMessagesResponse' {} a -> s {httpStatus = a} :: DeleteQueuedMessagesResponse)
+
+instance Prelude.NFData DeleteQueuedMessagesResponse where
+  rnf DeleteQueuedMessagesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteServiceProfile.hs b/gen/Amazonka/IoTWireless/DeleteServiceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteServiceProfile.hs
@@ -0,0 +1,139 @@
+{-# 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.IoTWireless.DeleteServiceProfile
+-- 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 service profile.
+module Amazonka.IoTWireless.DeleteServiceProfile
+  ( -- * Creating a Request
+    DeleteServiceProfile (..),
+    newDeleteServiceProfile,
+
+    -- * Request Lenses
+    deleteServiceProfile_id,
+
+    -- * Destructuring the Response
+    DeleteServiceProfileResponse (..),
+    newDeleteServiceProfileResponse,
+
+    -- * Response Lenses
+    deleteServiceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteServiceProfile' smart constructor.
+data DeleteServiceProfile = DeleteServiceProfile'
+  { -- | The ID of the resource to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteServiceProfile' 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:
+--
+-- 'id', 'deleteServiceProfile_id' - The ID of the resource to delete.
+newDeleteServiceProfile ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteServiceProfile
+newDeleteServiceProfile pId_ =
+  DeleteServiceProfile' {id = pId_}
+
+-- | The ID of the resource to delete.
+deleteServiceProfile_id :: Lens.Lens' DeleteServiceProfile Prelude.Text
+deleteServiceProfile_id = Lens.lens (\DeleteServiceProfile' {id} -> id) (\s@DeleteServiceProfile' {} a -> s {id = a} :: DeleteServiceProfile)
+
+instance Core.AWSRequest DeleteServiceProfile where
+  type
+    AWSResponse DeleteServiceProfile =
+      DeleteServiceProfileResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteServiceProfileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteServiceProfile where
+  hashWithSalt _salt DeleteServiceProfile' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteServiceProfile where
+  rnf DeleteServiceProfile' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteServiceProfile where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteServiceProfile where
+  toPath DeleteServiceProfile' {..} =
+    Prelude.mconcat
+      ["/service-profiles/", Data.toBS id]
+
+instance Data.ToQuery DeleteServiceProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteServiceProfileResponse' smart constructor.
+data DeleteServiceProfileResponse = DeleteServiceProfileResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteServiceProfileResponse' 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', 'deleteServiceProfileResponse_httpStatus' - The response's http status code.
+newDeleteServiceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteServiceProfileResponse
+newDeleteServiceProfileResponse pHttpStatus_ =
+  DeleteServiceProfileResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteServiceProfileResponse_httpStatus :: Lens.Lens' DeleteServiceProfileResponse Prelude.Int
+deleteServiceProfileResponse_httpStatus = Lens.lens (\DeleteServiceProfileResponse' {httpStatus} -> httpStatus) (\s@DeleteServiceProfileResponse' {} a -> s {httpStatus = a} :: DeleteServiceProfileResponse)
+
+instance Prelude.NFData DeleteServiceProfileResponse where
+  rnf DeleteServiceProfileResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteWirelessDevice.hs b/gen/Amazonka/IoTWireless/DeleteWirelessDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteWirelessDevice.hs
@@ -0,0 +1,139 @@
+{-# 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.IoTWireless.DeleteWirelessDevice
+-- 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 wireless device.
+module Amazonka.IoTWireless.DeleteWirelessDevice
+  ( -- * Creating a Request
+    DeleteWirelessDevice (..),
+    newDeleteWirelessDevice,
+
+    -- * Request Lenses
+    deleteWirelessDevice_id,
+
+    -- * Destructuring the Response
+    DeleteWirelessDeviceResponse (..),
+    newDeleteWirelessDeviceResponse,
+
+    -- * Response Lenses
+    deleteWirelessDeviceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWirelessDevice' smart constructor.
+data DeleteWirelessDevice = DeleteWirelessDevice'
+  { -- | The ID of the resource to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWirelessDevice' 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:
+--
+-- 'id', 'deleteWirelessDevice_id' - The ID of the resource to delete.
+newDeleteWirelessDevice ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteWirelessDevice
+newDeleteWirelessDevice pId_ =
+  DeleteWirelessDevice' {id = pId_}
+
+-- | The ID of the resource to delete.
+deleteWirelessDevice_id :: Lens.Lens' DeleteWirelessDevice Prelude.Text
+deleteWirelessDevice_id = Lens.lens (\DeleteWirelessDevice' {id} -> id) (\s@DeleteWirelessDevice' {} a -> s {id = a} :: DeleteWirelessDevice)
+
+instance Core.AWSRequest DeleteWirelessDevice where
+  type
+    AWSResponse DeleteWirelessDevice =
+      DeleteWirelessDeviceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWirelessDeviceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWirelessDevice where
+  hashWithSalt _salt DeleteWirelessDevice' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteWirelessDevice where
+  rnf DeleteWirelessDevice' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteWirelessDevice where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteWirelessDevice where
+  toPath DeleteWirelessDevice' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS id]
+
+instance Data.ToQuery DeleteWirelessDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWirelessDeviceResponse' smart constructor.
+data DeleteWirelessDeviceResponse = DeleteWirelessDeviceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWirelessDeviceResponse' 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', 'deleteWirelessDeviceResponse_httpStatus' - The response's http status code.
+newDeleteWirelessDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWirelessDeviceResponse
+newDeleteWirelessDeviceResponse pHttpStatus_ =
+  DeleteWirelessDeviceResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWirelessDeviceResponse_httpStatus :: Lens.Lens' DeleteWirelessDeviceResponse Prelude.Int
+deleteWirelessDeviceResponse_httpStatus = Lens.lens (\DeleteWirelessDeviceResponse' {httpStatus} -> httpStatus) (\s@DeleteWirelessDeviceResponse' {} a -> s {httpStatus = a} :: DeleteWirelessDeviceResponse)
+
+instance Prelude.NFData DeleteWirelessDeviceResponse where
+  rnf DeleteWirelessDeviceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteWirelessGateway.hs b/gen/Amazonka/IoTWireless/DeleteWirelessGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteWirelessGateway.hs
@@ -0,0 +1,139 @@
+{-# 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.IoTWireless.DeleteWirelessGateway
+-- 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 wireless gateway.
+module Amazonka.IoTWireless.DeleteWirelessGateway
+  ( -- * Creating a Request
+    DeleteWirelessGateway (..),
+    newDeleteWirelessGateway,
+
+    -- * Request Lenses
+    deleteWirelessGateway_id,
+
+    -- * Destructuring the Response
+    DeleteWirelessGatewayResponse (..),
+    newDeleteWirelessGatewayResponse,
+
+    -- * Response Lenses
+    deleteWirelessGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWirelessGateway' smart constructor.
+data DeleteWirelessGateway = DeleteWirelessGateway'
+  { -- | The ID of the resource to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWirelessGateway' 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:
+--
+-- 'id', 'deleteWirelessGateway_id' - The ID of the resource to delete.
+newDeleteWirelessGateway ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteWirelessGateway
+newDeleteWirelessGateway pId_ =
+  DeleteWirelessGateway' {id = pId_}
+
+-- | The ID of the resource to delete.
+deleteWirelessGateway_id :: Lens.Lens' DeleteWirelessGateway Prelude.Text
+deleteWirelessGateway_id = Lens.lens (\DeleteWirelessGateway' {id} -> id) (\s@DeleteWirelessGateway' {} a -> s {id = a} :: DeleteWirelessGateway)
+
+instance Core.AWSRequest DeleteWirelessGateway where
+  type
+    AWSResponse DeleteWirelessGateway =
+      DeleteWirelessGatewayResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWirelessGatewayResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWirelessGateway where
+  hashWithSalt _salt DeleteWirelessGateway' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteWirelessGateway where
+  rnf DeleteWirelessGateway' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteWirelessGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteWirelessGateway where
+  toPath DeleteWirelessGateway' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id]
+
+instance Data.ToQuery DeleteWirelessGateway where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWirelessGatewayResponse' smart constructor.
+data DeleteWirelessGatewayResponse = DeleteWirelessGatewayResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWirelessGatewayResponse' 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', 'deleteWirelessGatewayResponse_httpStatus' - The response's http status code.
+newDeleteWirelessGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWirelessGatewayResponse
+newDeleteWirelessGatewayResponse pHttpStatus_ =
+  DeleteWirelessGatewayResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWirelessGatewayResponse_httpStatus :: Lens.Lens' DeleteWirelessGatewayResponse Prelude.Int
+deleteWirelessGatewayResponse_httpStatus = Lens.lens (\DeleteWirelessGatewayResponse' {httpStatus} -> httpStatus) (\s@DeleteWirelessGatewayResponse' {} a -> s {httpStatus = a} :: DeleteWirelessGatewayResponse)
+
+instance Prelude.NFData DeleteWirelessGatewayResponse where
+  rnf DeleteWirelessGatewayResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteWirelessGatewayTask.hs b/gen/Amazonka/IoTWireless/DeleteWirelessGatewayTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteWirelessGatewayTask.hs
@@ -0,0 +1,142 @@
+{-# 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.IoTWireless.DeleteWirelessGatewayTask
+-- 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 wireless gateway task.
+module Amazonka.IoTWireless.DeleteWirelessGatewayTask
+  ( -- * Creating a Request
+    DeleteWirelessGatewayTask (..),
+    newDeleteWirelessGatewayTask,
+
+    -- * Request Lenses
+    deleteWirelessGatewayTask_id,
+
+    -- * Destructuring the Response
+    DeleteWirelessGatewayTaskResponse (..),
+    newDeleteWirelessGatewayTaskResponse,
+
+    -- * Response Lenses
+    deleteWirelessGatewayTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWirelessGatewayTask' smart constructor.
+data DeleteWirelessGatewayTask = DeleteWirelessGatewayTask'
+  { -- | The ID of the resource to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWirelessGatewayTask' 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:
+--
+-- 'id', 'deleteWirelessGatewayTask_id' - The ID of the resource to delete.
+newDeleteWirelessGatewayTask ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteWirelessGatewayTask
+newDeleteWirelessGatewayTask pId_ =
+  DeleteWirelessGatewayTask' {id = pId_}
+
+-- | The ID of the resource to delete.
+deleteWirelessGatewayTask_id :: Lens.Lens' DeleteWirelessGatewayTask Prelude.Text
+deleteWirelessGatewayTask_id = Lens.lens (\DeleteWirelessGatewayTask' {id} -> id) (\s@DeleteWirelessGatewayTask' {} a -> s {id = a} :: DeleteWirelessGatewayTask)
+
+instance Core.AWSRequest DeleteWirelessGatewayTask where
+  type
+    AWSResponse DeleteWirelessGatewayTask =
+      DeleteWirelessGatewayTaskResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWirelessGatewayTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteWirelessGatewayTask where
+  hashWithSalt _salt DeleteWirelessGatewayTask' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteWirelessGatewayTask where
+  rnf DeleteWirelessGatewayTask' {..} = Prelude.rnf id
+
+instance Data.ToHeaders DeleteWirelessGatewayTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteWirelessGatewayTask where
+  toPath DeleteWirelessGatewayTask' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id, "/tasks"]
+
+instance Data.ToQuery DeleteWirelessGatewayTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWirelessGatewayTaskResponse' smart constructor.
+data DeleteWirelessGatewayTaskResponse = DeleteWirelessGatewayTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWirelessGatewayTaskResponse' 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', 'deleteWirelessGatewayTaskResponse_httpStatus' - The response's http status code.
+newDeleteWirelessGatewayTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWirelessGatewayTaskResponse
+newDeleteWirelessGatewayTaskResponse pHttpStatus_ =
+  DeleteWirelessGatewayTaskResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteWirelessGatewayTaskResponse_httpStatus :: Lens.Lens' DeleteWirelessGatewayTaskResponse Prelude.Int
+deleteWirelessGatewayTaskResponse_httpStatus = Lens.lens (\DeleteWirelessGatewayTaskResponse' {httpStatus} -> httpStatus) (\s@DeleteWirelessGatewayTaskResponse' {} a -> s {httpStatus = a} :: DeleteWirelessGatewayTaskResponse)
+
+instance
+  Prelude.NFData
+    DeleteWirelessGatewayTaskResponse
+  where
+  rnf DeleteWirelessGatewayTaskResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DeleteWirelessGatewayTaskDefinition.hs b/gen/Amazonka/IoTWireless/DeleteWirelessGatewayTaskDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DeleteWirelessGatewayTaskDefinition.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.IoTWireless.DeleteWirelessGatewayTaskDefinition
+-- 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 wireless gateway task definition. Deleting this task
+-- definition does not affect tasks that are currently in progress.
+module Amazonka.IoTWireless.DeleteWirelessGatewayTaskDefinition
+  ( -- * Creating a Request
+    DeleteWirelessGatewayTaskDefinition (..),
+    newDeleteWirelessGatewayTaskDefinition,
+
+    -- * Request Lenses
+    deleteWirelessGatewayTaskDefinition_id,
+
+    -- * Destructuring the Response
+    DeleteWirelessGatewayTaskDefinitionResponse (..),
+    newDeleteWirelessGatewayTaskDefinitionResponse,
+
+    -- * Response Lenses
+    deleteWirelessGatewayTaskDefinitionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWirelessGatewayTaskDefinition' smart constructor.
+data DeleteWirelessGatewayTaskDefinition = DeleteWirelessGatewayTaskDefinition'
+  { -- | The ID of the resource to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWirelessGatewayTaskDefinition' 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:
+--
+-- 'id', 'deleteWirelessGatewayTaskDefinition_id' - The ID of the resource to delete.
+newDeleteWirelessGatewayTaskDefinition ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteWirelessGatewayTaskDefinition
+newDeleteWirelessGatewayTaskDefinition pId_ =
+  DeleteWirelessGatewayTaskDefinition' {id = pId_}
+
+-- | The ID of the resource to delete.
+deleteWirelessGatewayTaskDefinition_id :: Lens.Lens' DeleteWirelessGatewayTaskDefinition Prelude.Text
+deleteWirelessGatewayTaskDefinition_id = Lens.lens (\DeleteWirelessGatewayTaskDefinition' {id} -> id) (\s@DeleteWirelessGatewayTaskDefinition' {} a -> s {id = a} :: DeleteWirelessGatewayTaskDefinition)
+
+instance
+  Core.AWSRequest
+    DeleteWirelessGatewayTaskDefinition
+  where
+  type
+    AWSResponse DeleteWirelessGatewayTaskDefinition =
+      DeleteWirelessGatewayTaskDefinitionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteWirelessGatewayTaskDefinitionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteWirelessGatewayTaskDefinition
+  where
+  hashWithSalt
+    _salt
+    DeleteWirelessGatewayTaskDefinition' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DeleteWirelessGatewayTaskDefinition
+  where
+  rnf DeleteWirelessGatewayTaskDefinition' {..} =
+    Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DeleteWirelessGatewayTaskDefinition
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteWirelessGatewayTaskDefinition
+  where
+  toPath DeleteWirelessGatewayTaskDefinition' {..} =
+    Prelude.mconcat
+      ["/wireless-gateway-task-definitions/", Data.toBS id]
+
+instance
+  Data.ToQuery
+    DeleteWirelessGatewayTaskDefinition
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWirelessGatewayTaskDefinitionResponse' smart constructor.
+data DeleteWirelessGatewayTaskDefinitionResponse = DeleteWirelessGatewayTaskDefinitionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWirelessGatewayTaskDefinitionResponse' 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', 'deleteWirelessGatewayTaskDefinitionResponse_httpStatus' - The response's http status code.
+newDeleteWirelessGatewayTaskDefinitionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteWirelessGatewayTaskDefinitionResponse
+newDeleteWirelessGatewayTaskDefinitionResponse
+  pHttpStatus_ =
+    DeleteWirelessGatewayTaskDefinitionResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteWirelessGatewayTaskDefinitionResponse_httpStatus :: Lens.Lens' DeleteWirelessGatewayTaskDefinitionResponse Prelude.Int
+deleteWirelessGatewayTaskDefinitionResponse_httpStatus = Lens.lens (\DeleteWirelessGatewayTaskDefinitionResponse' {httpStatus} -> httpStatus) (\s@DeleteWirelessGatewayTaskDefinitionResponse' {} a -> s {httpStatus = a} :: DeleteWirelessGatewayTaskDefinitionResponse)
+
+instance
+  Prelude.NFData
+    DeleteWirelessGatewayTaskDefinitionResponse
+  where
+  rnf DeleteWirelessGatewayTaskDefinitionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DisassociateAwsAccountFromPartnerAccount.hs b/gen/Amazonka/IoTWireless/DisassociateAwsAccountFromPartnerAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DisassociateAwsAccountFromPartnerAccount.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.IoTWireless.DisassociateAwsAccountFromPartnerAccount
+-- 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 your AWS account from a partner account. If
+-- @PartnerAccountId@ and @PartnerType@ are @null@, disassociates your AWS
+-- account from all partner accounts.
+module Amazonka.IoTWireless.DisassociateAwsAccountFromPartnerAccount
+  ( -- * Creating a Request
+    DisassociateAwsAccountFromPartnerAccount (..),
+    newDisassociateAwsAccountFromPartnerAccount,
+
+    -- * Request Lenses
+    disassociateAwsAccountFromPartnerAccount_partnerAccountId,
+    disassociateAwsAccountFromPartnerAccount_partnerType,
+
+    -- * Destructuring the Response
+    DisassociateAwsAccountFromPartnerAccountResponse (..),
+    newDisassociateAwsAccountFromPartnerAccountResponse,
+
+    -- * Response Lenses
+    disassociateAwsAccountFromPartnerAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateAwsAccountFromPartnerAccount' smart constructor.
+data DisassociateAwsAccountFromPartnerAccount = DisassociateAwsAccountFromPartnerAccount'
+  { -- | The partner account ID to disassociate from the AWS account.
+    partnerAccountId :: Prelude.Text,
+    -- | The partner type.
+    partnerType :: PartnerType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateAwsAccountFromPartnerAccount' 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:
+--
+-- 'partnerAccountId', 'disassociateAwsAccountFromPartnerAccount_partnerAccountId' - The partner account ID to disassociate from the AWS account.
+--
+-- 'partnerType', 'disassociateAwsAccountFromPartnerAccount_partnerType' - The partner type.
+newDisassociateAwsAccountFromPartnerAccount ::
+  -- | 'partnerAccountId'
+  Prelude.Text ->
+  -- | 'partnerType'
+  PartnerType ->
+  DisassociateAwsAccountFromPartnerAccount
+newDisassociateAwsAccountFromPartnerAccount
+  pPartnerAccountId_
+  pPartnerType_ =
+    DisassociateAwsAccountFromPartnerAccount'
+      { partnerAccountId =
+          pPartnerAccountId_,
+        partnerType = pPartnerType_
+      }
+
+-- | The partner account ID to disassociate from the AWS account.
+disassociateAwsAccountFromPartnerAccount_partnerAccountId :: Lens.Lens' DisassociateAwsAccountFromPartnerAccount Prelude.Text
+disassociateAwsAccountFromPartnerAccount_partnerAccountId = Lens.lens (\DisassociateAwsAccountFromPartnerAccount' {partnerAccountId} -> partnerAccountId) (\s@DisassociateAwsAccountFromPartnerAccount' {} a -> s {partnerAccountId = a} :: DisassociateAwsAccountFromPartnerAccount)
+
+-- | The partner type.
+disassociateAwsAccountFromPartnerAccount_partnerType :: Lens.Lens' DisassociateAwsAccountFromPartnerAccount PartnerType
+disassociateAwsAccountFromPartnerAccount_partnerType = Lens.lens (\DisassociateAwsAccountFromPartnerAccount' {partnerType} -> partnerType) (\s@DisassociateAwsAccountFromPartnerAccount' {} a -> s {partnerType = a} :: DisassociateAwsAccountFromPartnerAccount)
+
+instance
+  Core.AWSRequest
+    DisassociateAwsAccountFromPartnerAccount
+  where
+  type
+    AWSResponse
+      DisassociateAwsAccountFromPartnerAccount =
+      DisassociateAwsAccountFromPartnerAccountResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateAwsAccountFromPartnerAccountResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateAwsAccountFromPartnerAccount
+  where
+  hashWithSalt
+    _salt
+    DisassociateAwsAccountFromPartnerAccount' {..} =
+      _salt
+        `Prelude.hashWithSalt` partnerAccountId
+        `Prelude.hashWithSalt` partnerType
+
+instance
+  Prelude.NFData
+    DisassociateAwsAccountFromPartnerAccount
+  where
+  rnf DisassociateAwsAccountFromPartnerAccount' {..} =
+    Prelude.rnf partnerAccountId
+      `Prelude.seq` Prelude.rnf partnerType
+
+instance
+  Data.ToHeaders
+    DisassociateAwsAccountFromPartnerAccount
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateAwsAccountFromPartnerAccount
+  where
+  toPath DisassociateAwsAccountFromPartnerAccount' {..} =
+    Prelude.mconcat
+      ["/partner-accounts/", Data.toBS partnerAccountId]
+
+instance
+  Data.ToQuery
+    DisassociateAwsAccountFromPartnerAccount
+  where
+  toQuery DisassociateAwsAccountFromPartnerAccount' {..} =
+    Prelude.mconcat ["partnerType" Data.=: partnerType]
+
+-- | /See:/ 'newDisassociateAwsAccountFromPartnerAccountResponse' smart constructor.
+data DisassociateAwsAccountFromPartnerAccountResponse = DisassociateAwsAccountFromPartnerAccountResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateAwsAccountFromPartnerAccountResponse' 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', 'disassociateAwsAccountFromPartnerAccountResponse_httpStatus' - The response's http status code.
+newDisassociateAwsAccountFromPartnerAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateAwsAccountFromPartnerAccountResponse
+newDisassociateAwsAccountFromPartnerAccountResponse
+  pHttpStatus_ =
+    DisassociateAwsAccountFromPartnerAccountResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateAwsAccountFromPartnerAccountResponse_httpStatus :: Lens.Lens' DisassociateAwsAccountFromPartnerAccountResponse Prelude.Int
+disassociateAwsAccountFromPartnerAccountResponse_httpStatus = Lens.lens (\DisassociateAwsAccountFromPartnerAccountResponse' {httpStatus} -> httpStatus) (\s@DisassociateAwsAccountFromPartnerAccountResponse' {} a -> s {httpStatus = a} :: DisassociateAwsAccountFromPartnerAccountResponse)
+
+instance
+  Prelude.NFData
+    DisassociateAwsAccountFromPartnerAccountResponse
+  where
+  rnf
+    DisassociateAwsAccountFromPartnerAccountResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DisassociateMulticastGroupFromFuotaTask.hs b/gen/Amazonka/IoTWireless/DisassociateMulticastGroupFromFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DisassociateMulticastGroupFromFuotaTask.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.IoTWireless.DisassociateMulticastGroupFromFuotaTask
+-- 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 multicast group from a fuota task.
+module Amazonka.IoTWireless.DisassociateMulticastGroupFromFuotaTask
+  ( -- * Creating a Request
+    DisassociateMulticastGroupFromFuotaTask (..),
+    newDisassociateMulticastGroupFromFuotaTask,
+
+    -- * Request Lenses
+    disassociateMulticastGroupFromFuotaTask_id,
+    disassociateMulticastGroupFromFuotaTask_multicastGroupId,
+
+    -- * Destructuring the Response
+    DisassociateMulticastGroupFromFuotaTaskResponse (..),
+    newDisassociateMulticastGroupFromFuotaTaskResponse,
+
+    -- * Response Lenses
+    disassociateMulticastGroupFromFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateMulticastGroupFromFuotaTask' smart constructor.
+data DisassociateMulticastGroupFromFuotaTask = DisassociateMulticastGroupFromFuotaTask'
+  { id :: Prelude.Text,
+    multicastGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateMulticastGroupFromFuotaTask' 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:
+--
+-- 'id', 'disassociateMulticastGroupFromFuotaTask_id' - Undocumented member.
+--
+-- 'multicastGroupId', 'disassociateMulticastGroupFromFuotaTask_multicastGroupId' - Undocumented member.
+newDisassociateMulticastGroupFromFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'multicastGroupId'
+  Prelude.Text ->
+  DisassociateMulticastGroupFromFuotaTask
+newDisassociateMulticastGroupFromFuotaTask
+  pId_
+  pMulticastGroupId_ =
+    DisassociateMulticastGroupFromFuotaTask'
+      { id = pId_,
+        multicastGroupId =
+          pMulticastGroupId_
+      }
+
+-- | Undocumented member.
+disassociateMulticastGroupFromFuotaTask_id :: Lens.Lens' DisassociateMulticastGroupFromFuotaTask Prelude.Text
+disassociateMulticastGroupFromFuotaTask_id = Lens.lens (\DisassociateMulticastGroupFromFuotaTask' {id} -> id) (\s@DisassociateMulticastGroupFromFuotaTask' {} a -> s {id = a} :: DisassociateMulticastGroupFromFuotaTask)
+
+-- | Undocumented member.
+disassociateMulticastGroupFromFuotaTask_multicastGroupId :: Lens.Lens' DisassociateMulticastGroupFromFuotaTask Prelude.Text
+disassociateMulticastGroupFromFuotaTask_multicastGroupId = Lens.lens (\DisassociateMulticastGroupFromFuotaTask' {multicastGroupId} -> multicastGroupId) (\s@DisassociateMulticastGroupFromFuotaTask' {} a -> s {multicastGroupId = a} :: DisassociateMulticastGroupFromFuotaTask)
+
+instance
+  Core.AWSRequest
+    DisassociateMulticastGroupFromFuotaTask
+  where
+  type
+    AWSResponse
+      DisassociateMulticastGroupFromFuotaTask =
+      DisassociateMulticastGroupFromFuotaTaskResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateMulticastGroupFromFuotaTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateMulticastGroupFromFuotaTask
+  where
+  hashWithSalt
+    _salt
+    DisassociateMulticastGroupFromFuotaTask' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` multicastGroupId
+
+instance
+  Prelude.NFData
+    DisassociateMulticastGroupFromFuotaTask
+  where
+  rnf DisassociateMulticastGroupFromFuotaTask' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf multicastGroupId
+
+instance
+  Data.ToHeaders
+    DisassociateMulticastGroupFromFuotaTask
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateMulticastGroupFromFuotaTask
+  where
+  toPath DisassociateMulticastGroupFromFuotaTask' {..} =
+    Prelude.mconcat
+      [ "/fuota-tasks/",
+        Data.toBS id,
+        "/multicast-groups/",
+        Data.toBS multicastGroupId
+      ]
+
+instance
+  Data.ToQuery
+    DisassociateMulticastGroupFromFuotaTask
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateMulticastGroupFromFuotaTaskResponse' smart constructor.
+data DisassociateMulticastGroupFromFuotaTaskResponse = DisassociateMulticastGroupFromFuotaTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateMulticastGroupFromFuotaTaskResponse' 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', 'disassociateMulticastGroupFromFuotaTaskResponse_httpStatus' - The response's http status code.
+newDisassociateMulticastGroupFromFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateMulticastGroupFromFuotaTaskResponse
+newDisassociateMulticastGroupFromFuotaTaskResponse
+  pHttpStatus_ =
+    DisassociateMulticastGroupFromFuotaTaskResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateMulticastGroupFromFuotaTaskResponse_httpStatus :: Lens.Lens' DisassociateMulticastGroupFromFuotaTaskResponse Prelude.Int
+disassociateMulticastGroupFromFuotaTaskResponse_httpStatus = Lens.lens (\DisassociateMulticastGroupFromFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@DisassociateMulticastGroupFromFuotaTaskResponse' {} a -> s {httpStatus = a} :: DisassociateMulticastGroupFromFuotaTaskResponse)
+
+instance
+  Prelude.NFData
+    DisassociateMulticastGroupFromFuotaTaskResponse
+  where
+  rnf
+    DisassociateMulticastGroupFromFuotaTaskResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromFuotaTask.hs b/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromFuotaTask.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.IoTWireless.DisassociateWirelessDeviceFromFuotaTask
+-- 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 wireless device from a FUOTA task.
+module Amazonka.IoTWireless.DisassociateWirelessDeviceFromFuotaTask
+  ( -- * Creating a Request
+    DisassociateWirelessDeviceFromFuotaTask (..),
+    newDisassociateWirelessDeviceFromFuotaTask,
+
+    -- * Request Lenses
+    disassociateWirelessDeviceFromFuotaTask_id,
+    disassociateWirelessDeviceFromFuotaTask_wirelessDeviceId,
+
+    -- * Destructuring the Response
+    DisassociateWirelessDeviceFromFuotaTaskResponse (..),
+    newDisassociateWirelessDeviceFromFuotaTaskResponse,
+
+    -- * Response Lenses
+    disassociateWirelessDeviceFromFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateWirelessDeviceFromFuotaTask' smart constructor.
+data DisassociateWirelessDeviceFromFuotaTask = DisassociateWirelessDeviceFromFuotaTask'
+  { id :: Prelude.Text,
+    wirelessDeviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessDeviceFromFuotaTask' 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:
+--
+-- 'id', 'disassociateWirelessDeviceFromFuotaTask_id' - Undocumented member.
+--
+-- 'wirelessDeviceId', 'disassociateWirelessDeviceFromFuotaTask_wirelessDeviceId' - Undocumented member.
+newDisassociateWirelessDeviceFromFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'wirelessDeviceId'
+  Prelude.Text ->
+  DisassociateWirelessDeviceFromFuotaTask
+newDisassociateWirelessDeviceFromFuotaTask
+  pId_
+  pWirelessDeviceId_ =
+    DisassociateWirelessDeviceFromFuotaTask'
+      { id = pId_,
+        wirelessDeviceId =
+          pWirelessDeviceId_
+      }
+
+-- | Undocumented member.
+disassociateWirelessDeviceFromFuotaTask_id :: Lens.Lens' DisassociateWirelessDeviceFromFuotaTask Prelude.Text
+disassociateWirelessDeviceFromFuotaTask_id = Lens.lens (\DisassociateWirelessDeviceFromFuotaTask' {id} -> id) (\s@DisassociateWirelessDeviceFromFuotaTask' {} a -> s {id = a} :: DisassociateWirelessDeviceFromFuotaTask)
+
+-- | Undocumented member.
+disassociateWirelessDeviceFromFuotaTask_wirelessDeviceId :: Lens.Lens' DisassociateWirelessDeviceFromFuotaTask Prelude.Text
+disassociateWirelessDeviceFromFuotaTask_wirelessDeviceId = Lens.lens (\DisassociateWirelessDeviceFromFuotaTask' {wirelessDeviceId} -> wirelessDeviceId) (\s@DisassociateWirelessDeviceFromFuotaTask' {} a -> s {wirelessDeviceId = a} :: DisassociateWirelessDeviceFromFuotaTask)
+
+instance
+  Core.AWSRequest
+    DisassociateWirelessDeviceFromFuotaTask
+  where
+  type
+    AWSResponse
+      DisassociateWirelessDeviceFromFuotaTask =
+      DisassociateWirelessDeviceFromFuotaTaskResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateWirelessDeviceFromFuotaTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateWirelessDeviceFromFuotaTask
+  where
+  hashWithSalt
+    _salt
+    DisassociateWirelessDeviceFromFuotaTask' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` wirelessDeviceId
+
+instance
+  Prelude.NFData
+    DisassociateWirelessDeviceFromFuotaTask
+  where
+  rnf DisassociateWirelessDeviceFromFuotaTask' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf wirelessDeviceId
+
+instance
+  Data.ToHeaders
+    DisassociateWirelessDeviceFromFuotaTask
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateWirelessDeviceFromFuotaTask
+  where
+  toPath DisassociateWirelessDeviceFromFuotaTask' {..} =
+    Prelude.mconcat
+      [ "/fuota-tasks/",
+        Data.toBS id,
+        "/wireless-devices/",
+        Data.toBS wirelessDeviceId
+      ]
+
+instance
+  Data.ToQuery
+    DisassociateWirelessDeviceFromFuotaTask
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateWirelessDeviceFromFuotaTaskResponse' smart constructor.
+data DisassociateWirelessDeviceFromFuotaTaskResponse = DisassociateWirelessDeviceFromFuotaTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessDeviceFromFuotaTaskResponse' 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', 'disassociateWirelessDeviceFromFuotaTaskResponse_httpStatus' - The response's http status code.
+newDisassociateWirelessDeviceFromFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateWirelessDeviceFromFuotaTaskResponse
+newDisassociateWirelessDeviceFromFuotaTaskResponse
+  pHttpStatus_ =
+    DisassociateWirelessDeviceFromFuotaTaskResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateWirelessDeviceFromFuotaTaskResponse_httpStatus :: Lens.Lens' DisassociateWirelessDeviceFromFuotaTaskResponse Prelude.Int
+disassociateWirelessDeviceFromFuotaTaskResponse_httpStatus = Lens.lens (\DisassociateWirelessDeviceFromFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@DisassociateWirelessDeviceFromFuotaTaskResponse' {} a -> s {httpStatus = a} :: DisassociateWirelessDeviceFromFuotaTaskResponse)
+
+instance
+  Prelude.NFData
+    DisassociateWirelessDeviceFromFuotaTaskResponse
+  where
+  rnf
+    DisassociateWirelessDeviceFromFuotaTaskResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromMulticastGroup.hs b/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromMulticastGroup.hs
@@ -0,0 +1,190 @@
+{-# 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.IoTWireless.DisassociateWirelessDeviceFromMulticastGroup
+-- 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 wireless device from a multicast group.
+module Amazonka.IoTWireless.DisassociateWirelessDeviceFromMulticastGroup
+  ( -- * Creating a Request
+    DisassociateWirelessDeviceFromMulticastGroup (..),
+    newDisassociateWirelessDeviceFromMulticastGroup,
+
+    -- * Request Lenses
+    disassociateWirelessDeviceFromMulticastGroup_id,
+    disassociateWirelessDeviceFromMulticastGroup_wirelessDeviceId,
+
+    -- * Destructuring the Response
+    DisassociateWirelessDeviceFromMulticastGroupResponse (..),
+    newDisassociateWirelessDeviceFromMulticastGroupResponse,
+
+    -- * Response Lenses
+    disassociateWirelessDeviceFromMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateWirelessDeviceFromMulticastGroup' smart constructor.
+data DisassociateWirelessDeviceFromMulticastGroup = DisassociateWirelessDeviceFromMulticastGroup'
+  { id :: Prelude.Text,
+    wirelessDeviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessDeviceFromMulticastGroup' 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:
+--
+-- 'id', 'disassociateWirelessDeviceFromMulticastGroup_id' - Undocumented member.
+--
+-- 'wirelessDeviceId', 'disassociateWirelessDeviceFromMulticastGroup_wirelessDeviceId' - Undocumented member.
+newDisassociateWirelessDeviceFromMulticastGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'wirelessDeviceId'
+  Prelude.Text ->
+  DisassociateWirelessDeviceFromMulticastGroup
+newDisassociateWirelessDeviceFromMulticastGroup
+  pId_
+  pWirelessDeviceId_ =
+    DisassociateWirelessDeviceFromMulticastGroup'
+      { id =
+          pId_,
+        wirelessDeviceId =
+          pWirelessDeviceId_
+      }
+
+-- | Undocumented member.
+disassociateWirelessDeviceFromMulticastGroup_id :: Lens.Lens' DisassociateWirelessDeviceFromMulticastGroup Prelude.Text
+disassociateWirelessDeviceFromMulticastGroup_id = Lens.lens (\DisassociateWirelessDeviceFromMulticastGroup' {id} -> id) (\s@DisassociateWirelessDeviceFromMulticastGroup' {} a -> s {id = a} :: DisassociateWirelessDeviceFromMulticastGroup)
+
+-- | Undocumented member.
+disassociateWirelessDeviceFromMulticastGroup_wirelessDeviceId :: Lens.Lens' DisassociateWirelessDeviceFromMulticastGroup Prelude.Text
+disassociateWirelessDeviceFromMulticastGroup_wirelessDeviceId = Lens.lens (\DisassociateWirelessDeviceFromMulticastGroup' {wirelessDeviceId} -> wirelessDeviceId) (\s@DisassociateWirelessDeviceFromMulticastGroup' {} a -> s {wirelessDeviceId = a} :: DisassociateWirelessDeviceFromMulticastGroup)
+
+instance
+  Core.AWSRequest
+    DisassociateWirelessDeviceFromMulticastGroup
+  where
+  type
+    AWSResponse
+      DisassociateWirelessDeviceFromMulticastGroup =
+      DisassociateWirelessDeviceFromMulticastGroupResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateWirelessDeviceFromMulticastGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateWirelessDeviceFromMulticastGroup
+  where
+  hashWithSalt
+    _salt
+    DisassociateWirelessDeviceFromMulticastGroup' {..} =
+      _salt
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` wirelessDeviceId
+
+instance
+  Prelude.NFData
+    DisassociateWirelessDeviceFromMulticastGroup
+  where
+  rnf DisassociateWirelessDeviceFromMulticastGroup' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf wirelessDeviceId
+
+instance
+  Data.ToHeaders
+    DisassociateWirelessDeviceFromMulticastGroup
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateWirelessDeviceFromMulticastGroup
+  where
+  toPath
+    DisassociateWirelessDeviceFromMulticastGroup' {..} =
+      Prelude.mconcat
+        [ "/multicast-groups/",
+          Data.toBS id,
+          "/wireless-devices/",
+          Data.toBS wirelessDeviceId
+        ]
+
+instance
+  Data.ToQuery
+    DisassociateWirelessDeviceFromMulticastGroup
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateWirelessDeviceFromMulticastGroupResponse' smart constructor.
+data DisassociateWirelessDeviceFromMulticastGroupResponse = DisassociateWirelessDeviceFromMulticastGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessDeviceFromMulticastGroupResponse' 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', 'disassociateWirelessDeviceFromMulticastGroupResponse_httpStatus' - The response's http status code.
+newDisassociateWirelessDeviceFromMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateWirelessDeviceFromMulticastGroupResponse
+newDisassociateWirelessDeviceFromMulticastGroupResponse
+  pHttpStatus_ =
+    DisassociateWirelessDeviceFromMulticastGroupResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateWirelessDeviceFromMulticastGroupResponse_httpStatus :: Lens.Lens' DisassociateWirelessDeviceFromMulticastGroupResponse Prelude.Int
+disassociateWirelessDeviceFromMulticastGroupResponse_httpStatus = Lens.lens (\DisassociateWirelessDeviceFromMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@DisassociateWirelessDeviceFromMulticastGroupResponse' {} a -> s {httpStatus = a} :: DisassociateWirelessDeviceFromMulticastGroupResponse)
+
+instance
+  Prelude.NFData
+    DisassociateWirelessDeviceFromMulticastGroupResponse
+  where
+  rnf
+    DisassociateWirelessDeviceFromMulticastGroupResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromThing.hs b/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromThing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DisassociateWirelessDeviceFromThing.hs
@@ -0,0 +1,164 @@
+{-# 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.IoTWireless.DisassociateWirelessDeviceFromThing
+-- 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 wireless device from its currently associated thing.
+module Amazonka.IoTWireless.DisassociateWirelessDeviceFromThing
+  ( -- * Creating a Request
+    DisassociateWirelessDeviceFromThing (..),
+    newDisassociateWirelessDeviceFromThing,
+
+    -- * Request Lenses
+    disassociateWirelessDeviceFromThing_id,
+
+    -- * Destructuring the Response
+    DisassociateWirelessDeviceFromThingResponse (..),
+    newDisassociateWirelessDeviceFromThingResponse,
+
+    -- * Response Lenses
+    disassociateWirelessDeviceFromThingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateWirelessDeviceFromThing' smart constructor.
+data DisassociateWirelessDeviceFromThing = DisassociateWirelessDeviceFromThing'
+  { -- | The ID of the resource to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessDeviceFromThing' 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:
+--
+-- 'id', 'disassociateWirelessDeviceFromThing_id' - The ID of the resource to update.
+newDisassociateWirelessDeviceFromThing ::
+  -- | 'id'
+  Prelude.Text ->
+  DisassociateWirelessDeviceFromThing
+newDisassociateWirelessDeviceFromThing pId_ =
+  DisassociateWirelessDeviceFromThing' {id = pId_}
+
+-- | The ID of the resource to update.
+disassociateWirelessDeviceFromThing_id :: Lens.Lens' DisassociateWirelessDeviceFromThing Prelude.Text
+disassociateWirelessDeviceFromThing_id = Lens.lens (\DisassociateWirelessDeviceFromThing' {id} -> id) (\s@DisassociateWirelessDeviceFromThing' {} a -> s {id = a} :: DisassociateWirelessDeviceFromThing)
+
+instance
+  Core.AWSRequest
+    DisassociateWirelessDeviceFromThing
+  where
+  type
+    AWSResponse DisassociateWirelessDeviceFromThing =
+      DisassociateWirelessDeviceFromThingResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateWirelessDeviceFromThingResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateWirelessDeviceFromThing
+  where
+  hashWithSalt
+    _salt
+    DisassociateWirelessDeviceFromThing' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DisassociateWirelessDeviceFromThing
+  where
+  rnf DisassociateWirelessDeviceFromThing' {..} =
+    Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DisassociateWirelessDeviceFromThing
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateWirelessDeviceFromThing
+  where
+  toPath DisassociateWirelessDeviceFromThing' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS id, "/thing"]
+
+instance
+  Data.ToQuery
+    DisassociateWirelessDeviceFromThing
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateWirelessDeviceFromThingResponse' smart constructor.
+data DisassociateWirelessDeviceFromThingResponse = DisassociateWirelessDeviceFromThingResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessDeviceFromThingResponse' 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', 'disassociateWirelessDeviceFromThingResponse_httpStatus' - The response's http status code.
+newDisassociateWirelessDeviceFromThingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateWirelessDeviceFromThingResponse
+newDisassociateWirelessDeviceFromThingResponse
+  pHttpStatus_ =
+    DisassociateWirelessDeviceFromThingResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateWirelessDeviceFromThingResponse_httpStatus :: Lens.Lens' DisassociateWirelessDeviceFromThingResponse Prelude.Int
+disassociateWirelessDeviceFromThingResponse_httpStatus = Lens.lens (\DisassociateWirelessDeviceFromThingResponse' {httpStatus} -> httpStatus) (\s@DisassociateWirelessDeviceFromThingResponse' {} a -> s {httpStatus = a} :: DisassociateWirelessDeviceFromThingResponse)
+
+instance
+  Prelude.NFData
+    DisassociateWirelessDeviceFromThingResponse
+  where
+  rnf DisassociateWirelessDeviceFromThingResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DisassociateWirelessGatewayFromCertificate.hs b/gen/Amazonka/IoTWireless/DisassociateWirelessGatewayFromCertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DisassociateWirelessGatewayFromCertificate.hs
@@ -0,0 +1,171 @@
+{-# 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.IoTWireless.DisassociateWirelessGatewayFromCertificate
+-- 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 wireless gateway from its currently associated
+-- certificate.
+module Amazonka.IoTWireless.DisassociateWirelessGatewayFromCertificate
+  ( -- * Creating a Request
+    DisassociateWirelessGatewayFromCertificate (..),
+    newDisassociateWirelessGatewayFromCertificate,
+
+    -- * Request Lenses
+    disassociateWirelessGatewayFromCertificate_id,
+
+    -- * Destructuring the Response
+    DisassociateWirelessGatewayFromCertificateResponse (..),
+    newDisassociateWirelessGatewayFromCertificateResponse,
+
+    -- * Response Lenses
+    disassociateWirelessGatewayFromCertificateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateWirelessGatewayFromCertificate' smart constructor.
+data DisassociateWirelessGatewayFromCertificate = DisassociateWirelessGatewayFromCertificate'
+  { -- | The ID of the resource to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessGatewayFromCertificate' 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:
+--
+-- 'id', 'disassociateWirelessGatewayFromCertificate_id' - The ID of the resource to update.
+newDisassociateWirelessGatewayFromCertificate ::
+  -- | 'id'
+  Prelude.Text ->
+  DisassociateWirelessGatewayFromCertificate
+newDisassociateWirelessGatewayFromCertificate pId_ =
+  DisassociateWirelessGatewayFromCertificate'
+    { id =
+        pId_
+    }
+
+-- | The ID of the resource to update.
+disassociateWirelessGatewayFromCertificate_id :: Lens.Lens' DisassociateWirelessGatewayFromCertificate Prelude.Text
+disassociateWirelessGatewayFromCertificate_id = Lens.lens (\DisassociateWirelessGatewayFromCertificate' {id} -> id) (\s@DisassociateWirelessGatewayFromCertificate' {} a -> s {id = a} :: DisassociateWirelessGatewayFromCertificate)
+
+instance
+  Core.AWSRequest
+    DisassociateWirelessGatewayFromCertificate
+  where
+  type
+    AWSResponse
+      DisassociateWirelessGatewayFromCertificate =
+      DisassociateWirelessGatewayFromCertificateResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateWirelessGatewayFromCertificateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateWirelessGatewayFromCertificate
+  where
+  hashWithSalt
+    _salt
+    DisassociateWirelessGatewayFromCertificate' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DisassociateWirelessGatewayFromCertificate
+  where
+  rnf DisassociateWirelessGatewayFromCertificate' {..} =
+    Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DisassociateWirelessGatewayFromCertificate
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateWirelessGatewayFromCertificate
+  where
+  toPath
+    DisassociateWirelessGatewayFromCertificate' {..} =
+      Prelude.mconcat
+        ["/wireless-gateways/", Data.toBS id, "/certificate"]
+
+instance
+  Data.ToQuery
+    DisassociateWirelessGatewayFromCertificate
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateWirelessGatewayFromCertificateResponse' smart constructor.
+data DisassociateWirelessGatewayFromCertificateResponse = DisassociateWirelessGatewayFromCertificateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessGatewayFromCertificateResponse' 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', 'disassociateWirelessGatewayFromCertificateResponse_httpStatus' - The response's http status code.
+newDisassociateWirelessGatewayFromCertificateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateWirelessGatewayFromCertificateResponse
+newDisassociateWirelessGatewayFromCertificateResponse
+  pHttpStatus_ =
+    DisassociateWirelessGatewayFromCertificateResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateWirelessGatewayFromCertificateResponse_httpStatus :: Lens.Lens' DisassociateWirelessGatewayFromCertificateResponse Prelude.Int
+disassociateWirelessGatewayFromCertificateResponse_httpStatus = Lens.lens (\DisassociateWirelessGatewayFromCertificateResponse' {httpStatus} -> httpStatus) (\s@DisassociateWirelessGatewayFromCertificateResponse' {} a -> s {httpStatus = a} :: DisassociateWirelessGatewayFromCertificateResponse)
+
+instance
+  Prelude.NFData
+    DisassociateWirelessGatewayFromCertificateResponse
+  where
+  rnf
+    DisassociateWirelessGatewayFromCertificateResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/DisassociateWirelessGatewayFromThing.hs b/gen/Amazonka/IoTWireless/DisassociateWirelessGatewayFromThing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/DisassociateWirelessGatewayFromThing.hs
@@ -0,0 +1,164 @@
+{-# 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.IoTWireless.DisassociateWirelessGatewayFromThing
+-- 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 wireless gateway from its currently associated thing.
+module Amazonka.IoTWireless.DisassociateWirelessGatewayFromThing
+  ( -- * Creating a Request
+    DisassociateWirelessGatewayFromThing (..),
+    newDisassociateWirelessGatewayFromThing,
+
+    -- * Request Lenses
+    disassociateWirelessGatewayFromThing_id,
+
+    -- * Destructuring the Response
+    DisassociateWirelessGatewayFromThingResponse (..),
+    newDisassociateWirelessGatewayFromThingResponse,
+
+    -- * Response Lenses
+    disassociateWirelessGatewayFromThingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateWirelessGatewayFromThing' smart constructor.
+data DisassociateWirelessGatewayFromThing = DisassociateWirelessGatewayFromThing'
+  { -- | The ID of the resource to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessGatewayFromThing' 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:
+--
+-- 'id', 'disassociateWirelessGatewayFromThing_id' - The ID of the resource to update.
+newDisassociateWirelessGatewayFromThing ::
+  -- | 'id'
+  Prelude.Text ->
+  DisassociateWirelessGatewayFromThing
+newDisassociateWirelessGatewayFromThing pId_ =
+  DisassociateWirelessGatewayFromThing' {id = pId_}
+
+-- | The ID of the resource to update.
+disassociateWirelessGatewayFromThing_id :: Lens.Lens' DisassociateWirelessGatewayFromThing Prelude.Text
+disassociateWirelessGatewayFromThing_id = Lens.lens (\DisassociateWirelessGatewayFromThing' {id} -> id) (\s@DisassociateWirelessGatewayFromThing' {} a -> s {id = a} :: DisassociateWirelessGatewayFromThing)
+
+instance
+  Core.AWSRequest
+    DisassociateWirelessGatewayFromThing
+  where
+  type
+    AWSResponse DisassociateWirelessGatewayFromThing =
+      DisassociateWirelessGatewayFromThingResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateWirelessGatewayFromThingResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateWirelessGatewayFromThing
+  where
+  hashWithSalt
+    _salt
+    DisassociateWirelessGatewayFromThing' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    DisassociateWirelessGatewayFromThing
+  where
+  rnf DisassociateWirelessGatewayFromThing' {..} =
+    Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    DisassociateWirelessGatewayFromThing
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateWirelessGatewayFromThing
+  where
+  toPath DisassociateWirelessGatewayFromThing' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id, "/thing"]
+
+instance
+  Data.ToQuery
+    DisassociateWirelessGatewayFromThing
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateWirelessGatewayFromThingResponse' smart constructor.
+data DisassociateWirelessGatewayFromThingResponse = DisassociateWirelessGatewayFromThingResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateWirelessGatewayFromThingResponse' 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', 'disassociateWirelessGatewayFromThingResponse_httpStatus' - The response's http status code.
+newDisassociateWirelessGatewayFromThingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateWirelessGatewayFromThingResponse
+newDisassociateWirelessGatewayFromThingResponse
+  pHttpStatus_ =
+    DisassociateWirelessGatewayFromThingResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateWirelessGatewayFromThingResponse_httpStatus :: Lens.Lens' DisassociateWirelessGatewayFromThingResponse Prelude.Int
+disassociateWirelessGatewayFromThingResponse_httpStatus = Lens.lens (\DisassociateWirelessGatewayFromThingResponse' {httpStatus} -> httpStatus) (\s@DisassociateWirelessGatewayFromThingResponse' {} a -> s {httpStatus = a} :: DisassociateWirelessGatewayFromThingResponse)
+
+instance
+  Prelude.NFData
+    DisassociateWirelessGatewayFromThingResponse
+  where
+  rnf DisassociateWirelessGatewayFromThingResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetDestination.hs b/gen/Amazonka/IoTWireless/GetDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetDestination.hs
@@ -0,0 +1,209 @@
+{-# 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.IoTWireless.GetDestination
+-- 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 information about a destination.
+module Amazonka.IoTWireless.GetDestination
+  ( -- * Creating a Request
+    GetDestination (..),
+    newGetDestination,
+
+    -- * Request Lenses
+    getDestination_name,
+
+    -- * Destructuring the Response
+    GetDestinationResponse (..),
+    newGetDestinationResponse,
+
+    -- * Response Lenses
+    getDestinationResponse_arn,
+    getDestinationResponse_description,
+    getDestinationResponse_expression,
+    getDestinationResponse_expressionType,
+    getDestinationResponse_name,
+    getDestinationResponse_roleArn,
+    getDestinationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDestination' smart constructor.
+data GetDestination = GetDestination'
+  { -- | The name of the resource to get.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDestination' 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:
+--
+-- 'name', 'getDestination_name' - The name of the resource to get.
+newGetDestination ::
+  -- | 'name'
+  Prelude.Text ->
+  GetDestination
+newGetDestination pName_ =
+  GetDestination' {name = pName_}
+
+-- | The name of the resource to get.
+getDestination_name :: Lens.Lens' GetDestination Prelude.Text
+getDestination_name = Lens.lens (\GetDestination' {name} -> name) (\s@GetDestination' {} a -> s {name = a} :: GetDestination)
+
+instance Core.AWSRequest GetDestination where
+  type
+    AWSResponse GetDestination =
+      GetDestinationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDestinationResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Expression")
+            Prelude.<*> (x Data..?> "ExpressionType")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RoleArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDestination where
+  hashWithSalt _salt GetDestination' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GetDestination where
+  rnf GetDestination' {..} = Prelude.rnf name
+
+instance Data.ToHeaders GetDestination where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetDestination where
+  toPath GetDestination' {..} =
+    Prelude.mconcat ["/destinations/", Data.toBS name]
+
+instance Data.ToQuery GetDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDestinationResponse' smart constructor.
+data GetDestinationResponse = GetDestinationResponse'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The rule name or topic rule to send messages to.
+    expression :: Prelude.Maybe Prelude.Text,
+    -- | The type of value in @Expression@.
+    expressionType :: Prelude.Maybe ExpressionType,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IAM Role that authorizes the destination.
+    roleArn :: 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 'GetDestinationResponse' 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', 'getDestinationResponse_arn' - The Amazon Resource Name of the resource.
+--
+-- 'description', 'getDestinationResponse_description' - The description of the resource.
+--
+-- 'expression', 'getDestinationResponse_expression' - The rule name or topic rule to send messages to.
+--
+-- 'expressionType', 'getDestinationResponse_expressionType' - The type of value in @Expression@.
+--
+-- 'name', 'getDestinationResponse_name' - The name of the resource.
+--
+-- 'roleArn', 'getDestinationResponse_roleArn' - The ARN of the IAM Role that authorizes the destination.
+--
+-- 'httpStatus', 'getDestinationResponse_httpStatus' - The response's http status code.
+newGetDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDestinationResponse
+newGetDestinationResponse pHttpStatus_ =
+  GetDestinationResponse'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      expression = Prelude.Nothing,
+      expressionType = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the resource.
+getDestinationResponse_arn :: Lens.Lens' GetDestinationResponse (Prelude.Maybe Prelude.Text)
+getDestinationResponse_arn = Lens.lens (\GetDestinationResponse' {arn} -> arn) (\s@GetDestinationResponse' {} a -> s {arn = a} :: GetDestinationResponse)
+
+-- | The description of the resource.
+getDestinationResponse_description :: Lens.Lens' GetDestinationResponse (Prelude.Maybe Prelude.Text)
+getDestinationResponse_description = Lens.lens (\GetDestinationResponse' {description} -> description) (\s@GetDestinationResponse' {} a -> s {description = a} :: GetDestinationResponse)
+
+-- | The rule name or topic rule to send messages to.
+getDestinationResponse_expression :: Lens.Lens' GetDestinationResponse (Prelude.Maybe Prelude.Text)
+getDestinationResponse_expression = Lens.lens (\GetDestinationResponse' {expression} -> expression) (\s@GetDestinationResponse' {} a -> s {expression = a} :: GetDestinationResponse)
+
+-- | The type of value in @Expression@.
+getDestinationResponse_expressionType :: Lens.Lens' GetDestinationResponse (Prelude.Maybe ExpressionType)
+getDestinationResponse_expressionType = Lens.lens (\GetDestinationResponse' {expressionType} -> expressionType) (\s@GetDestinationResponse' {} a -> s {expressionType = a} :: GetDestinationResponse)
+
+-- | The name of the resource.
+getDestinationResponse_name :: Lens.Lens' GetDestinationResponse (Prelude.Maybe Prelude.Text)
+getDestinationResponse_name = Lens.lens (\GetDestinationResponse' {name} -> name) (\s@GetDestinationResponse' {} a -> s {name = a} :: GetDestinationResponse)
+
+-- | The ARN of the IAM Role that authorizes the destination.
+getDestinationResponse_roleArn :: Lens.Lens' GetDestinationResponse (Prelude.Maybe Prelude.Text)
+getDestinationResponse_roleArn = Lens.lens (\GetDestinationResponse' {roleArn} -> roleArn) (\s@GetDestinationResponse' {} a -> s {roleArn = a} :: GetDestinationResponse)
+
+-- | The response's http status code.
+getDestinationResponse_httpStatus :: Lens.Lens' GetDestinationResponse Prelude.Int
+getDestinationResponse_httpStatus = Lens.lens (\GetDestinationResponse' {httpStatus} -> httpStatus) (\s@GetDestinationResponse' {} a -> s {httpStatus = a} :: GetDestinationResponse)
+
+instance Prelude.NFData GetDestinationResponse where
+  rnf GetDestinationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf expressionType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetDeviceProfile.hs b/gen/Amazonka/IoTWireless/GetDeviceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetDeviceProfile.hs
@@ -0,0 +1,185 @@
+{-# 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.IoTWireless.GetDeviceProfile
+-- 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 information about a device profile.
+module Amazonka.IoTWireless.GetDeviceProfile
+  ( -- * Creating a Request
+    GetDeviceProfile (..),
+    newGetDeviceProfile,
+
+    -- * Request Lenses
+    getDeviceProfile_id,
+
+    -- * Destructuring the Response
+    GetDeviceProfileResponse (..),
+    newGetDeviceProfileResponse,
+
+    -- * Response Lenses
+    getDeviceProfileResponse_arn,
+    getDeviceProfileResponse_id,
+    getDeviceProfileResponse_loRaWAN,
+    getDeviceProfileResponse_name,
+    getDeviceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDeviceProfile' smart constructor.
+data GetDeviceProfile = GetDeviceProfile'
+  { -- | The ID of the resource to get.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDeviceProfile' 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:
+--
+-- 'id', 'getDeviceProfile_id' - The ID of the resource to get.
+newGetDeviceProfile ::
+  -- | 'id'
+  Prelude.Text ->
+  GetDeviceProfile
+newGetDeviceProfile pId_ =
+  GetDeviceProfile' {id = pId_}
+
+-- | The ID of the resource to get.
+getDeviceProfile_id :: Lens.Lens' GetDeviceProfile Prelude.Text
+getDeviceProfile_id = Lens.lens (\GetDeviceProfile' {id} -> id) (\s@GetDeviceProfile' {} a -> s {id = a} :: GetDeviceProfile)
+
+instance Core.AWSRequest GetDeviceProfile where
+  type
+    AWSResponse GetDeviceProfile =
+      GetDeviceProfileResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDeviceProfileResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "LoRaWAN")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDeviceProfile where
+  hashWithSalt _salt GetDeviceProfile' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetDeviceProfile where
+  rnf GetDeviceProfile' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetDeviceProfile where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetDeviceProfile where
+  toPath GetDeviceProfile' {..} =
+    Prelude.mconcat ["/device-profiles/", Data.toBS id]
+
+instance Data.ToQuery GetDeviceProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDeviceProfileResponse' smart constructor.
+data GetDeviceProfileResponse = GetDeviceProfileResponse'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the device profile.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Information about the device profile.
+    loRaWAN :: Prelude.Maybe LoRaWANDeviceProfile,
+    -- | The name of the resource.
+    name :: 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 'GetDeviceProfileResponse' 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', 'getDeviceProfileResponse_arn' - The Amazon Resource Name of the resource.
+--
+-- 'id', 'getDeviceProfileResponse_id' - The ID of the device profile.
+--
+-- 'loRaWAN', 'getDeviceProfileResponse_loRaWAN' - Information about the device profile.
+--
+-- 'name', 'getDeviceProfileResponse_name' - The name of the resource.
+--
+-- 'httpStatus', 'getDeviceProfileResponse_httpStatus' - The response's http status code.
+newGetDeviceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDeviceProfileResponse
+newGetDeviceProfileResponse pHttpStatus_ =
+  GetDeviceProfileResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the resource.
+getDeviceProfileResponse_arn :: Lens.Lens' GetDeviceProfileResponse (Prelude.Maybe Prelude.Text)
+getDeviceProfileResponse_arn = Lens.lens (\GetDeviceProfileResponse' {arn} -> arn) (\s@GetDeviceProfileResponse' {} a -> s {arn = a} :: GetDeviceProfileResponse)
+
+-- | The ID of the device profile.
+getDeviceProfileResponse_id :: Lens.Lens' GetDeviceProfileResponse (Prelude.Maybe Prelude.Text)
+getDeviceProfileResponse_id = Lens.lens (\GetDeviceProfileResponse' {id} -> id) (\s@GetDeviceProfileResponse' {} a -> s {id = a} :: GetDeviceProfileResponse)
+
+-- | Information about the device profile.
+getDeviceProfileResponse_loRaWAN :: Lens.Lens' GetDeviceProfileResponse (Prelude.Maybe LoRaWANDeviceProfile)
+getDeviceProfileResponse_loRaWAN = Lens.lens (\GetDeviceProfileResponse' {loRaWAN} -> loRaWAN) (\s@GetDeviceProfileResponse' {} a -> s {loRaWAN = a} :: GetDeviceProfileResponse)
+
+-- | The name of the resource.
+getDeviceProfileResponse_name :: Lens.Lens' GetDeviceProfileResponse (Prelude.Maybe Prelude.Text)
+getDeviceProfileResponse_name = Lens.lens (\GetDeviceProfileResponse' {name} -> name) (\s@GetDeviceProfileResponse' {} a -> s {name = a} :: GetDeviceProfileResponse)
+
+-- | The response's http status code.
+getDeviceProfileResponse_httpStatus :: Lens.Lens' GetDeviceProfileResponse Prelude.Int
+getDeviceProfileResponse_httpStatus = Lens.lens (\GetDeviceProfileResponse' {httpStatus} -> httpStatus) (\s@GetDeviceProfileResponse' {} a -> s {httpStatus = a} :: GetDeviceProfileResponse)
+
+instance Prelude.NFData GetDeviceProfileResponse where
+  rnf GetDeviceProfileResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetEventConfigurationByResourceTypes.hs b/gen/Amazonka/IoTWireless/GetEventConfigurationByResourceTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetEventConfigurationByResourceTypes.hs
@@ -0,0 +1,214 @@
+{-# 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.IoTWireless.GetEventConfigurationByResourceTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get the event configuration based on resource types.
+module Amazonka.IoTWireless.GetEventConfigurationByResourceTypes
+  ( -- * Creating a Request
+    GetEventConfigurationByResourceTypes (..),
+    newGetEventConfigurationByResourceTypes,
+
+    -- * Destructuring the Response
+    GetEventConfigurationByResourceTypesResponse (..),
+    newGetEventConfigurationByResourceTypesResponse,
+
+    -- * Response Lenses
+    getEventConfigurationByResourceTypesResponse_connectionStatus,
+    getEventConfigurationByResourceTypesResponse_deviceRegistrationState,
+    getEventConfigurationByResourceTypesResponse_join,
+    getEventConfigurationByResourceTypesResponse_messageDeliveryStatus,
+    getEventConfigurationByResourceTypesResponse_proximity,
+    getEventConfigurationByResourceTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEventConfigurationByResourceTypes' smart constructor.
+data GetEventConfigurationByResourceTypes = GetEventConfigurationByResourceTypes'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventConfigurationByResourceTypes' 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.
+newGetEventConfigurationByResourceTypes ::
+  GetEventConfigurationByResourceTypes
+newGetEventConfigurationByResourceTypes =
+  GetEventConfigurationByResourceTypes'
+
+instance
+  Core.AWSRequest
+    GetEventConfigurationByResourceTypes
+  where
+  type
+    AWSResponse GetEventConfigurationByResourceTypes =
+      GetEventConfigurationByResourceTypesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEventConfigurationByResourceTypesResponse'
+            Prelude.<$> (x Data..?> "ConnectionStatus")
+            Prelude.<*> (x Data..?> "DeviceRegistrationState")
+            Prelude.<*> (x Data..?> "Join")
+            Prelude.<*> (x Data..?> "MessageDeliveryStatus")
+            Prelude.<*> (x Data..?> "Proximity")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetEventConfigurationByResourceTypes
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance
+  Prelude.NFData
+    GetEventConfigurationByResourceTypes
+  where
+  rnf _ = ()
+
+instance
+  Data.ToHeaders
+    GetEventConfigurationByResourceTypes
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetEventConfigurationByResourceTypes
+  where
+  toPath =
+    Prelude.const
+      "/event-configurations-resource-types"
+
+instance
+  Data.ToQuery
+    GetEventConfigurationByResourceTypes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEventConfigurationByResourceTypesResponse' smart constructor.
+data GetEventConfigurationByResourceTypesResponse = GetEventConfigurationByResourceTypesResponse'
+  { -- | Resource type event configuration for the connection status event.
+    connectionStatus :: Prelude.Maybe ConnectionStatusResourceTypeEventConfiguration,
+    -- | Resource type event configuration for the device registration state
+    -- event.
+    deviceRegistrationState :: Prelude.Maybe DeviceRegistrationStateResourceTypeEventConfiguration,
+    -- | Resource type event configuration for the join event.
+    join :: Prelude.Maybe JoinResourceTypeEventConfiguration,
+    -- | Resource type event configuration object for the message delivery status
+    -- event.
+    messageDeliveryStatus :: Prelude.Maybe MessageDeliveryStatusResourceTypeEventConfiguration,
+    -- | Resource type event configuration for the proximity event.
+    proximity :: Prelude.Maybe ProximityResourceTypeEventConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventConfigurationByResourceTypesResponse' 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', 'getEventConfigurationByResourceTypesResponse_connectionStatus' - Resource type event configuration for the connection status event.
+--
+-- 'deviceRegistrationState', 'getEventConfigurationByResourceTypesResponse_deviceRegistrationState' - Resource type event configuration for the device registration state
+-- event.
+--
+-- 'join', 'getEventConfigurationByResourceTypesResponse_join' - Resource type event configuration for the join event.
+--
+-- 'messageDeliveryStatus', 'getEventConfigurationByResourceTypesResponse_messageDeliveryStatus' - Resource type event configuration object for the message delivery status
+-- event.
+--
+-- 'proximity', 'getEventConfigurationByResourceTypesResponse_proximity' - Resource type event configuration for the proximity event.
+--
+-- 'httpStatus', 'getEventConfigurationByResourceTypesResponse_httpStatus' - The response's http status code.
+newGetEventConfigurationByResourceTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEventConfigurationByResourceTypesResponse
+newGetEventConfigurationByResourceTypesResponse
+  pHttpStatus_ =
+    GetEventConfigurationByResourceTypesResponse'
+      { connectionStatus =
+          Prelude.Nothing,
+        deviceRegistrationState =
+          Prelude.Nothing,
+        join = Prelude.Nothing,
+        messageDeliveryStatus =
+          Prelude.Nothing,
+        proximity = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Resource type event configuration for the connection status event.
+getEventConfigurationByResourceTypesResponse_connectionStatus :: Lens.Lens' GetEventConfigurationByResourceTypesResponse (Prelude.Maybe ConnectionStatusResourceTypeEventConfiguration)
+getEventConfigurationByResourceTypesResponse_connectionStatus = Lens.lens (\GetEventConfigurationByResourceTypesResponse' {connectionStatus} -> connectionStatus) (\s@GetEventConfigurationByResourceTypesResponse' {} a -> s {connectionStatus = a} :: GetEventConfigurationByResourceTypesResponse)
+
+-- | Resource type event configuration for the device registration state
+-- event.
+getEventConfigurationByResourceTypesResponse_deviceRegistrationState :: Lens.Lens' GetEventConfigurationByResourceTypesResponse (Prelude.Maybe DeviceRegistrationStateResourceTypeEventConfiguration)
+getEventConfigurationByResourceTypesResponse_deviceRegistrationState = Lens.lens (\GetEventConfigurationByResourceTypesResponse' {deviceRegistrationState} -> deviceRegistrationState) (\s@GetEventConfigurationByResourceTypesResponse' {} a -> s {deviceRegistrationState = a} :: GetEventConfigurationByResourceTypesResponse)
+
+-- | Resource type event configuration for the join event.
+getEventConfigurationByResourceTypesResponse_join :: Lens.Lens' GetEventConfigurationByResourceTypesResponse (Prelude.Maybe JoinResourceTypeEventConfiguration)
+getEventConfigurationByResourceTypesResponse_join = Lens.lens (\GetEventConfigurationByResourceTypesResponse' {join} -> join) (\s@GetEventConfigurationByResourceTypesResponse' {} a -> s {join = a} :: GetEventConfigurationByResourceTypesResponse)
+
+-- | Resource type event configuration object for the message delivery status
+-- event.
+getEventConfigurationByResourceTypesResponse_messageDeliveryStatus :: Lens.Lens' GetEventConfigurationByResourceTypesResponse (Prelude.Maybe MessageDeliveryStatusResourceTypeEventConfiguration)
+getEventConfigurationByResourceTypesResponse_messageDeliveryStatus = Lens.lens (\GetEventConfigurationByResourceTypesResponse' {messageDeliveryStatus} -> messageDeliveryStatus) (\s@GetEventConfigurationByResourceTypesResponse' {} a -> s {messageDeliveryStatus = a} :: GetEventConfigurationByResourceTypesResponse)
+
+-- | Resource type event configuration for the proximity event.
+getEventConfigurationByResourceTypesResponse_proximity :: Lens.Lens' GetEventConfigurationByResourceTypesResponse (Prelude.Maybe ProximityResourceTypeEventConfiguration)
+getEventConfigurationByResourceTypesResponse_proximity = Lens.lens (\GetEventConfigurationByResourceTypesResponse' {proximity} -> proximity) (\s@GetEventConfigurationByResourceTypesResponse' {} a -> s {proximity = a} :: GetEventConfigurationByResourceTypesResponse)
+
+-- | The response's http status code.
+getEventConfigurationByResourceTypesResponse_httpStatus :: Lens.Lens' GetEventConfigurationByResourceTypesResponse Prelude.Int
+getEventConfigurationByResourceTypesResponse_httpStatus = Lens.lens (\GetEventConfigurationByResourceTypesResponse' {httpStatus} -> httpStatus) (\s@GetEventConfigurationByResourceTypesResponse' {} a -> s {httpStatus = a} :: GetEventConfigurationByResourceTypesResponse)
+
+instance
+  Prelude.NFData
+    GetEventConfigurationByResourceTypesResponse
+  where
+  rnf GetEventConfigurationByResourceTypesResponse' {..} =
+    Prelude.rnf connectionStatus
+      `Prelude.seq` Prelude.rnf deviceRegistrationState
+      `Prelude.seq` Prelude.rnf join
+      `Prelude.seq` Prelude.rnf messageDeliveryStatus
+      `Prelude.seq` Prelude.rnf proximity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetFuotaTask.hs b/gen/Amazonka/IoTWireless/GetFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetFuotaTask.hs
@@ -0,0 +1,232 @@
+{-# 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.IoTWireless.GetFuotaTask
+-- 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 information about a FUOTA task.
+module Amazonka.IoTWireless.GetFuotaTask
+  ( -- * Creating a Request
+    GetFuotaTask (..),
+    newGetFuotaTask,
+
+    -- * Request Lenses
+    getFuotaTask_id,
+
+    -- * Destructuring the Response
+    GetFuotaTaskResponse (..),
+    newGetFuotaTaskResponse,
+
+    -- * Response Lenses
+    getFuotaTaskResponse_arn,
+    getFuotaTaskResponse_createdAt,
+    getFuotaTaskResponse_description,
+    getFuotaTaskResponse_firmwareUpdateImage,
+    getFuotaTaskResponse_firmwareUpdateRole,
+    getFuotaTaskResponse_id,
+    getFuotaTaskResponse_loRaWAN,
+    getFuotaTaskResponse_name,
+    getFuotaTaskResponse_status,
+    getFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFuotaTask' smart constructor.
+data GetFuotaTask = GetFuotaTask'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFuotaTask' 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:
+--
+-- 'id', 'getFuotaTask_id' - Undocumented member.
+newGetFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  GetFuotaTask
+newGetFuotaTask pId_ = GetFuotaTask' {id = pId_}
+
+-- | Undocumented member.
+getFuotaTask_id :: Lens.Lens' GetFuotaTask Prelude.Text
+getFuotaTask_id = Lens.lens (\GetFuotaTask' {id} -> id) (\s@GetFuotaTask' {} a -> s {id = a} :: GetFuotaTask)
+
+instance Core.AWSRequest GetFuotaTask where
+  type AWSResponse GetFuotaTask = GetFuotaTaskResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFuotaTaskResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "FirmwareUpdateImage")
+            Prelude.<*> (x Data..?> "FirmwareUpdateRole")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "LoRaWAN")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetFuotaTask where
+  hashWithSalt _salt GetFuotaTask' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetFuotaTask where
+  rnf GetFuotaTask' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetFuotaTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetFuotaTask where
+  toPath GetFuotaTask' {..} =
+    Prelude.mconcat ["/fuota-tasks/", Data.toBS id]
+
+instance Data.ToQuery GetFuotaTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFuotaTaskResponse' smart constructor.
+data GetFuotaTaskResponse = GetFuotaTaskResponse'
+  { arn :: Prelude.Maybe Prelude.Text,
+    createdAt :: Prelude.Maybe Data.POSIX,
+    description :: Prelude.Maybe Prelude.Text,
+    firmwareUpdateImage :: Prelude.Maybe Prelude.Text,
+    firmwareUpdateRole :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Maybe Prelude.Text,
+    loRaWAN :: Prelude.Maybe LoRaWANFuotaTaskGetInfo,
+    name :: Prelude.Maybe Prelude.Text,
+    status :: Prelude.Maybe FuotaTaskStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFuotaTaskResponse' 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', 'getFuotaTaskResponse_arn' - Undocumented member.
+--
+-- 'createdAt', 'getFuotaTaskResponse_createdAt' - Undocumented member.
+--
+-- 'description', 'getFuotaTaskResponse_description' - Undocumented member.
+--
+-- 'firmwareUpdateImage', 'getFuotaTaskResponse_firmwareUpdateImage' - Undocumented member.
+--
+-- 'firmwareUpdateRole', 'getFuotaTaskResponse_firmwareUpdateRole' - Undocumented member.
+--
+-- 'id', 'getFuotaTaskResponse_id' - Undocumented member.
+--
+-- 'loRaWAN', 'getFuotaTaskResponse_loRaWAN' - Undocumented member.
+--
+-- 'name', 'getFuotaTaskResponse_name' - Undocumented member.
+--
+-- 'status', 'getFuotaTaskResponse_status' - Undocumented member.
+--
+-- 'httpStatus', 'getFuotaTaskResponse_httpStatus' - The response's http status code.
+newGetFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetFuotaTaskResponse
+newGetFuotaTaskResponse pHttpStatus_ =
+  GetFuotaTaskResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      firmwareUpdateImage = Prelude.Nothing,
+      firmwareUpdateRole = Prelude.Nothing,
+      id = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getFuotaTaskResponse_arn :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+getFuotaTaskResponse_arn = Lens.lens (\GetFuotaTaskResponse' {arn} -> arn) (\s@GetFuotaTaskResponse' {} a -> s {arn = a} :: GetFuotaTaskResponse)
+
+-- | Undocumented member.
+getFuotaTaskResponse_createdAt :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe Prelude.UTCTime)
+getFuotaTaskResponse_createdAt = Lens.lens (\GetFuotaTaskResponse' {createdAt} -> createdAt) (\s@GetFuotaTaskResponse' {} a -> s {createdAt = a} :: GetFuotaTaskResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+getFuotaTaskResponse_description :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+getFuotaTaskResponse_description = Lens.lens (\GetFuotaTaskResponse' {description} -> description) (\s@GetFuotaTaskResponse' {} a -> s {description = a} :: GetFuotaTaskResponse)
+
+-- | Undocumented member.
+getFuotaTaskResponse_firmwareUpdateImage :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+getFuotaTaskResponse_firmwareUpdateImage = Lens.lens (\GetFuotaTaskResponse' {firmwareUpdateImage} -> firmwareUpdateImage) (\s@GetFuotaTaskResponse' {} a -> s {firmwareUpdateImage = a} :: GetFuotaTaskResponse)
+
+-- | Undocumented member.
+getFuotaTaskResponse_firmwareUpdateRole :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+getFuotaTaskResponse_firmwareUpdateRole = Lens.lens (\GetFuotaTaskResponse' {firmwareUpdateRole} -> firmwareUpdateRole) (\s@GetFuotaTaskResponse' {} a -> s {firmwareUpdateRole = a} :: GetFuotaTaskResponse)
+
+-- | Undocumented member.
+getFuotaTaskResponse_id :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+getFuotaTaskResponse_id = Lens.lens (\GetFuotaTaskResponse' {id} -> id) (\s@GetFuotaTaskResponse' {} a -> s {id = a} :: GetFuotaTaskResponse)
+
+-- | Undocumented member.
+getFuotaTaskResponse_loRaWAN :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe LoRaWANFuotaTaskGetInfo)
+getFuotaTaskResponse_loRaWAN = Lens.lens (\GetFuotaTaskResponse' {loRaWAN} -> loRaWAN) (\s@GetFuotaTaskResponse' {} a -> s {loRaWAN = a} :: GetFuotaTaskResponse)
+
+-- | Undocumented member.
+getFuotaTaskResponse_name :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+getFuotaTaskResponse_name = Lens.lens (\GetFuotaTaskResponse' {name} -> name) (\s@GetFuotaTaskResponse' {} a -> s {name = a} :: GetFuotaTaskResponse)
+
+-- | Undocumented member.
+getFuotaTaskResponse_status :: Lens.Lens' GetFuotaTaskResponse (Prelude.Maybe FuotaTaskStatus)
+getFuotaTaskResponse_status = Lens.lens (\GetFuotaTaskResponse' {status} -> status) (\s@GetFuotaTaskResponse' {} a -> s {status = a} :: GetFuotaTaskResponse)
+
+-- | The response's http status code.
+getFuotaTaskResponse_httpStatus :: Lens.Lens' GetFuotaTaskResponse Prelude.Int
+getFuotaTaskResponse_httpStatus = Lens.lens (\GetFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@GetFuotaTaskResponse' {} a -> s {httpStatus = a} :: GetFuotaTaskResponse)
+
+instance Prelude.NFData GetFuotaTaskResponse where
+  rnf GetFuotaTaskResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf firmwareUpdateImage
+      `Prelude.seq` Prelude.rnf firmwareUpdateRole
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetLogLevelsByResourceTypes.hs b/gen/Amazonka/IoTWireless/GetLogLevelsByResourceTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetLogLevelsByResourceTypes.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.IoTWireless.GetLogLevelsByResourceTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns current default log levels or log levels by resource types.
+-- Based on resource types, log levels can be for wireless device log
+-- options or wireless gateway log options.
+module Amazonka.IoTWireless.GetLogLevelsByResourceTypes
+  ( -- * Creating a Request
+    GetLogLevelsByResourceTypes (..),
+    newGetLogLevelsByResourceTypes,
+
+    -- * Destructuring the Response
+    GetLogLevelsByResourceTypesResponse (..),
+    newGetLogLevelsByResourceTypesResponse,
+
+    -- * Response Lenses
+    getLogLevelsByResourceTypesResponse_defaultLogLevel,
+    getLogLevelsByResourceTypesResponse_wirelessDeviceLogOptions,
+    getLogLevelsByResourceTypesResponse_wirelessGatewayLogOptions,
+    getLogLevelsByResourceTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLogLevelsByResourceTypes' smart constructor.
+data GetLogLevelsByResourceTypes = GetLogLevelsByResourceTypes'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLogLevelsByResourceTypes' 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.
+newGetLogLevelsByResourceTypes ::
+  GetLogLevelsByResourceTypes
+newGetLogLevelsByResourceTypes =
+  GetLogLevelsByResourceTypes'
+
+instance Core.AWSRequest GetLogLevelsByResourceTypes where
+  type
+    AWSResponse GetLogLevelsByResourceTypes =
+      GetLogLevelsByResourceTypesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLogLevelsByResourceTypesResponse'
+            Prelude.<$> (x Data..?> "DefaultLogLevel")
+            Prelude.<*> ( x
+                            Data..?> "WirelessDeviceLogOptions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "WirelessGatewayLogOptions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLogLevelsByResourceTypes where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetLogLevelsByResourceTypes where
+  rnf _ = ()
+
+instance Data.ToHeaders GetLogLevelsByResourceTypes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetLogLevelsByResourceTypes where
+  toPath = Prelude.const "/log-levels"
+
+instance Data.ToQuery GetLogLevelsByResourceTypes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLogLevelsByResourceTypesResponse' smart constructor.
+data GetLogLevelsByResourceTypesResponse = GetLogLevelsByResourceTypesResponse'
+  { defaultLogLevel :: Prelude.Maybe LogLevel,
+    wirelessDeviceLogOptions :: Prelude.Maybe [WirelessDeviceLogOption],
+    wirelessGatewayLogOptions :: Prelude.Maybe [WirelessGatewayLogOption],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLogLevelsByResourceTypesResponse' 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:
+--
+-- 'defaultLogLevel', 'getLogLevelsByResourceTypesResponse_defaultLogLevel' - Undocumented member.
+--
+-- 'wirelessDeviceLogOptions', 'getLogLevelsByResourceTypesResponse_wirelessDeviceLogOptions' - Undocumented member.
+--
+-- 'wirelessGatewayLogOptions', 'getLogLevelsByResourceTypesResponse_wirelessGatewayLogOptions' - Undocumented member.
+--
+-- 'httpStatus', 'getLogLevelsByResourceTypesResponse_httpStatus' - The response's http status code.
+newGetLogLevelsByResourceTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLogLevelsByResourceTypesResponse
+newGetLogLevelsByResourceTypesResponse pHttpStatus_ =
+  GetLogLevelsByResourceTypesResponse'
+    { defaultLogLevel =
+        Prelude.Nothing,
+      wirelessDeviceLogOptions =
+        Prelude.Nothing,
+      wirelessGatewayLogOptions =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getLogLevelsByResourceTypesResponse_defaultLogLevel :: Lens.Lens' GetLogLevelsByResourceTypesResponse (Prelude.Maybe LogLevel)
+getLogLevelsByResourceTypesResponse_defaultLogLevel = Lens.lens (\GetLogLevelsByResourceTypesResponse' {defaultLogLevel} -> defaultLogLevel) (\s@GetLogLevelsByResourceTypesResponse' {} a -> s {defaultLogLevel = a} :: GetLogLevelsByResourceTypesResponse)
+
+-- | Undocumented member.
+getLogLevelsByResourceTypesResponse_wirelessDeviceLogOptions :: Lens.Lens' GetLogLevelsByResourceTypesResponse (Prelude.Maybe [WirelessDeviceLogOption])
+getLogLevelsByResourceTypesResponse_wirelessDeviceLogOptions = Lens.lens (\GetLogLevelsByResourceTypesResponse' {wirelessDeviceLogOptions} -> wirelessDeviceLogOptions) (\s@GetLogLevelsByResourceTypesResponse' {} a -> s {wirelessDeviceLogOptions = a} :: GetLogLevelsByResourceTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+getLogLevelsByResourceTypesResponse_wirelessGatewayLogOptions :: Lens.Lens' GetLogLevelsByResourceTypesResponse (Prelude.Maybe [WirelessGatewayLogOption])
+getLogLevelsByResourceTypesResponse_wirelessGatewayLogOptions = Lens.lens (\GetLogLevelsByResourceTypesResponse' {wirelessGatewayLogOptions} -> wirelessGatewayLogOptions) (\s@GetLogLevelsByResourceTypesResponse' {} a -> s {wirelessGatewayLogOptions = a} :: GetLogLevelsByResourceTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getLogLevelsByResourceTypesResponse_httpStatus :: Lens.Lens' GetLogLevelsByResourceTypesResponse Prelude.Int
+getLogLevelsByResourceTypesResponse_httpStatus = Lens.lens (\GetLogLevelsByResourceTypesResponse' {httpStatus} -> httpStatus) (\s@GetLogLevelsByResourceTypesResponse' {} a -> s {httpStatus = a} :: GetLogLevelsByResourceTypesResponse)
+
+instance
+  Prelude.NFData
+    GetLogLevelsByResourceTypesResponse
+  where
+  rnf GetLogLevelsByResourceTypesResponse' {..} =
+    Prelude.rnf defaultLogLevel
+      `Prelude.seq` Prelude.rnf wirelessDeviceLogOptions
+      `Prelude.seq` Prelude.rnf wirelessGatewayLogOptions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetMulticastGroup.hs b/gen/Amazonka/IoTWireless/GetMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetMulticastGroup.hs
@@ -0,0 +1,214 @@
+{-# 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.IoTWireless.GetMulticastGroup
+-- 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 information about a multicast group.
+module Amazonka.IoTWireless.GetMulticastGroup
+  ( -- * Creating a Request
+    GetMulticastGroup (..),
+    newGetMulticastGroup,
+
+    -- * Request Lenses
+    getMulticastGroup_id,
+
+    -- * Destructuring the Response
+    GetMulticastGroupResponse (..),
+    newGetMulticastGroupResponse,
+
+    -- * Response Lenses
+    getMulticastGroupResponse_arn,
+    getMulticastGroupResponse_createdAt,
+    getMulticastGroupResponse_description,
+    getMulticastGroupResponse_id,
+    getMulticastGroupResponse_loRaWAN,
+    getMulticastGroupResponse_name,
+    getMulticastGroupResponse_status,
+    getMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMulticastGroup' smart constructor.
+data GetMulticastGroup = GetMulticastGroup'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMulticastGroup' 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:
+--
+-- 'id', 'getMulticastGroup_id' - Undocumented member.
+newGetMulticastGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  GetMulticastGroup
+newGetMulticastGroup pId_ =
+  GetMulticastGroup' {id = pId_}
+
+-- | Undocumented member.
+getMulticastGroup_id :: Lens.Lens' GetMulticastGroup Prelude.Text
+getMulticastGroup_id = Lens.lens (\GetMulticastGroup' {id} -> id) (\s@GetMulticastGroup' {} a -> s {id = a} :: GetMulticastGroup)
+
+instance Core.AWSRequest GetMulticastGroup where
+  type
+    AWSResponse GetMulticastGroup =
+      GetMulticastGroupResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMulticastGroupResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "LoRaWAN")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMulticastGroup where
+  hashWithSalt _salt GetMulticastGroup' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetMulticastGroup where
+  rnf GetMulticastGroup' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetMulticastGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetMulticastGroup where
+  toPath GetMulticastGroup' {..} =
+    Prelude.mconcat
+      ["/multicast-groups/", Data.toBS id]
+
+instance Data.ToQuery GetMulticastGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMulticastGroupResponse' smart constructor.
+data GetMulticastGroupResponse = GetMulticastGroupResponse'
+  { arn :: Prelude.Maybe Prelude.Text,
+    createdAt :: Prelude.Maybe Data.POSIX,
+    description :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Maybe Prelude.Text,
+    loRaWAN :: Prelude.Maybe LoRaWANMulticastGet,
+    name :: Prelude.Maybe Prelude.Text,
+    status :: 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 'GetMulticastGroupResponse' 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', 'getMulticastGroupResponse_arn' - Undocumented member.
+--
+-- 'createdAt', 'getMulticastGroupResponse_createdAt' - Undocumented member.
+--
+-- 'description', 'getMulticastGroupResponse_description' - Undocumented member.
+--
+-- 'id', 'getMulticastGroupResponse_id' - Undocumented member.
+--
+-- 'loRaWAN', 'getMulticastGroupResponse_loRaWAN' - Undocumented member.
+--
+-- 'name', 'getMulticastGroupResponse_name' - Undocumented member.
+--
+-- 'status', 'getMulticastGroupResponse_status' - Undocumented member.
+--
+-- 'httpStatus', 'getMulticastGroupResponse_httpStatus' - The response's http status code.
+newGetMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMulticastGroupResponse
+newGetMulticastGroupResponse pHttpStatus_ =
+  GetMulticastGroupResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getMulticastGroupResponse_arn :: Lens.Lens' GetMulticastGroupResponse (Prelude.Maybe Prelude.Text)
+getMulticastGroupResponse_arn = Lens.lens (\GetMulticastGroupResponse' {arn} -> arn) (\s@GetMulticastGroupResponse' {} a -> s {arn = a} :: GetMulticastGroupResponse)
+
+-- | Undocumented member.
+getMulticastGroupResponse_createdAt :: Lens.Lens' GetMulticastGroupResponse (Prelude.Maybe Prelude.UTCTime)
+getMulticastGroupResponse_createdAt = Lens.lens (\GetMulticastGroupResponse' {createdAt} -> createdAt) (\s@GetMulticastGroupResponse' {} a -> s {createdAt = a} :: GetMulticastGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+getMulticastGroupResponse_description :: Lens.Lens' GetMulticastGroupResponse (Prelude.Maybe Prelude.Text)
+getMulticastGroupResponse_description = Lens.lens (\GetMulticastGroupResponse' {description} -> description) (\s@GetMulticastGroupResponse' {} a -> s {description = a} :: GetMulticastGroupResponse)
+
+-- | Undocumented member.
+getMulticastGroupResponse_id :: Lens.Lens' GetMulticastGroupResponse (Prelude.Maybe Prelude.Text)
+getMulticastGroupResponse_id = Lens.lens (\GetMulticastGroupResponse' {id} -> id) (\s@GetMulticastGroupResponse' {} a -> s {id = a} :: GetMulticastGroupResponse)
+
+-- | Undocumented member.
+getMulticastGroupResponse_loRaWAN :: Lens.Lens' GetMulticastGroupResponse (Prelude.Maybe LoRaWANMulticastGet)
+getMulticastGroupResponse_loRaWAN = Lens.lens (\GetMulticastGroupResponse' {loRaWAN} -> loRaWAN) (\s@GetMulticastGroupResponse' {} a -> s {loRaWAN = a} :: GetMulticastGroupResponse)
+
+-- | Undocumented member.
+getMulticastGroupResponse_name :: Lens.Lens' GetMulticastGroupResponse (Prelude.Maybe Prelude.Text)
+getMulticastGroupResponse_name = Lens.lens (\GetMulticastGroupResponse' {name} -> name) (\s@GetMulticastGroupResponse' {} a -> s {name = a} :: GetMulticastGroupResponse)
+
+-- | Undocumented member.
+getMulticastGroupResponse_status :: Lens.Lens' GetMulticastGroupResponse (Prelude.Maybe Prelude.Text)
+getMulticastGroupResponse_status = Lens.lens (\GetMulticastGroupResponse' {status} -> status) (\s@GetMulticastGroupResponse' {} a -> s {status = a} :: GetMulticastGroupResponse)
+
+-- | The response's http status code.
+getMulticastGroupResponse_httpStatus :: Lens.Lens' GetMulticastGroupResponse Prelude.Int
+getMulticastGroupResponse_httpStatus = Lens.lens (\GetMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@GetMulticastGroupResponse' {} a -> s {httpStatus = a} :: GetMulticastGroupResponse)
+
+instance Prelude.NFData GetMulticastGroupResponse where
+  rnf GetMulticastGroupResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetMulticastGroupSession.hs b/gen/Amazonka/IoTWireless/GetMulticastGroupSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetMulticastGroupSession.hs
@@ -0,0 +1,152 @@
+{-# 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.IoTWireless.GetMulticastGroupSession
+-- 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 information about a multicast group session.
+module Amazonka.IoTWireless.GetMulticastGroupSession
+  ( -- * Creating a Request
+    GetMulticastGroupSession (..),
+    newGetMulticastGroupSession,
+
+    -- * Request Lenses
+    getMulticastGroupSession_id,
+
+    -- * Destructuring the Response
+    GetMulticastGroupSessionResponse (..),
+    newGetMulticastGroupSessionResponse,
+
+    -- * Response Lenses
+    getMulticastGroupSessionResponse_loRaWAN,
+    getMulticastGroupSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMulticastGroupSession' smart constructor.
+data GetMulticastGroupSession = GetMulticastGroupSession'
+  { id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMulticastGroupSession' 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:
+--
+-- 'id', 'getMulticastGroupSession_id' - Undocumented member.
+newGetMulticastGroupSession ::
+  -- | 'id'
+  Prelude.Text ->
+  GetMulticastGroupSession
+newGetMulticastGroupSession pId_ =
+  GetMulticastGroupSession' {id = pId_}
+
+-- | Undocumented member.
+getMulticastGroupSession_id :: Lens.Lens' GetMulticastGroupSession Prelude.Text
+getMulticastGroupSession_id = Lens.lens (\GetMulticastGroupSession' {id} -> id) (\s@GetMulticastGroupSession' {} a -> s {id = a} :: GetMulticastGroupSession)
+
+instance Core.AWSRequest GetMulticastGroupSession where
+  type
+    AWSResponse GetMulticastGroupSession =
+      GetMulticastGroupSessionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMulticastGroupSessionResponse'
+            Prelude.<$> (x Data..?> "LoRaWAN")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMulticastGroupSession where
+  hashWithSalt _salt GetMulticastGroupSession' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetMulticastGroupSession where
+  rnf GetMulticastGroupSession' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetMulticastGroupSession where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetMulticastGroupSession where
+  toPath GetMulticastGroupSession' {..} =
+    Prelude.mconcat
+      ["/multicast-groups/", Data.toBS id, "/session"]
+
+instance Data.ToQuery GetMulticastGroupSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMulticastGroupSessionResponse' smart constructor.
+data GetMulticastGroupSessionResponse = GetMulticastGroupSessionResponse'
+  { loRaWAN :: Prelude.Maybe LoRaWANMulticastSession,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMulticastGroupSessionResponse' 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:
+--
+-- 'loRaWAN', 'getMulticastGroupSessionResponse_loRaWAN' - Undocumented member.
+--
+-- 'httpStatus', 'getMulticastGroupSessionResponse_httpStatus' - The response's http status code.
+newGetMulticastGroupSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMulticastGroupSessionResponse
+newGetMulticastGroupSessionResponse pHttpStatus_ =
+  GetMulticastGroupSessionResponse'
+    { loRaWAN =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getMulticastGroupSessionResponse_loRaWAN :: Lens.Lens' GetMulticastGroupSessionResponse (Prelude.Maybe LoRaWANMulticastSession)
+getMulticastGroupSessionResponse_loRaWAN = Lens.lens (\GetMulticastGroupSessionResponse' {loRaWAN} -> loRaWAN) (\s@GetMulticastGroupSessionResponse' {} a -> s {loRaWAN = a} :: GetMulticastGroupSessionResponse)
+
+-- | The response's http status code.
+getMulticastGroupSessionResponse_httpStatus :: Lens.Lens' GetMulticastGroupSessionResponse Prelude.Int
+getMulticastGroupSessionResponse_httpStatus = Lens.lens (\GetMulticastGroupSessionResponse' {httpStatus} -> httpStatus) (\s@GetMulticastGroupSessionResponse' {} a -> s {httpStatus = a} :: GetMulticastGroupSessionResponse)
+
+instance
+  Prelude.NFData
+    GetMulticastGroupSessionResponse
+  where
+  rnf GetMulticastGroupSessionResponse' {..} =
+    Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetNetworkAnalyzerConfiguration.hs b/gen/Amazonka/IoTWireless/GetNetworkAnalyzerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetNetworkAnalyzerConfiguration.hs
@@ -0,0 +1,244 @@
+{-# 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.IoTWireless.GetNetworkAnalyzerConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get network analyzer configuration.
+module Amazonka.IoTWireless.GetNetworkAnalyzerConfiguration
+  ( -- * Creating a Request
+    GetNetworkAnalyzerConfiguration (..),
+    newGetNetworkAnalyzerConfiguration,
+
+    -- * Request Lenses
+    getNetworkAnalyzerConfiguration_configurationName,
+
+    -- * Destructuring the Response
+    GetNetworkAnalyzerConfigurationResponse (..),
+    newGetNetworkAnalyzerConfigurationResponse,
+
+    -- * Response Lenses
+    getNetworkAnalyzerConfigurationResponse_arn,
+    getNetworkAnalyzerConfigurationResponse_description,
+    getNetworkAnalyzerConfigurationResponse_name,
+    getNetworkAnalyzerConfigurationResponse_traceContent,
+    getNetworkAnalyzerConfigurationResponse_wirelessDevices,
+    getNetworkAnalyzerConfigurationResponse_wirelessGateways,
+    getNetworkAnalyzerConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetNetworkAnalyzerConfiguration' smart constructor.
+data GetNetworkAnalyzerConfiguration = GetNetworkAnalyzerConfiguration'
+  { configurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetworkAnalyzerConfiguration' 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:
+--
+-- 'configurationName', 'getNetworkAnalyzerConfiguration_configurationName' - Undocumented member.
+newGetNetworkAnalyzerConfiguration ::
+  -- | 'configurationName'
+  Prelude.Text ->
+  GetNetworkAnalyzerConfiguration
+newGetNetworkAnalyzerConfiguration
+  pConfigurationName_ =
+    GetNetworkAnalyzerConfiguration'
+      { configurationName =
+          pConfigurationName_
+      }
+
+-- | Undocumented member.
+getNetworkAnalyzerConfiguration_configurationName :: Lens.Lens' GetNetworkAnalyzerConfiguration Prelude.Text
+getNetworkAnalyzerConfiguration_configurationName = Lens.lens (\GetNetworkAnalyzerConfiguration' {configurationName} -> configurationName) (\s@GetNetworkAnalyzerConfiguration' {} a -> s {configurationName = a} :: GetNetworkAnalyzerConfiguration)
+
+instance
+  Core.AWSRequest
+    GetNetworkAnalyzerConfiguration
+  where
+  type
+    AWSResponse GetNetworkAnalyzerConfiguration =
+      GetNetworkAnalyzerConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetNetworkAnalyzerConfigurationResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "TraceContent")
+            Prelude.<*> ( x
+                            Data..?> "WirelessDevices"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "WirelessGateways"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetNetworkAnalyzerConfiguration
+  where
+  hashWithSalt
+    _salt
+    GetNetworkAnalyzerConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` configurationName
+
+instance
+  Prelude.NFData
+    GetNetworkAnalyzerConfiguration
+  where
+  rnf GetNetworkAnalyzerConfiguration' {..} =
+    Prelude.rnf configurationName
+
+instance
+  Data.ToHeaders
+    GetNetworkAnalyzerConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetNetworkAnalyzerConfiguration where
+  toPath GetNetworkAnalyzerConfiguration' {..} =
+    Prelude.mconcat
+      [ "/network-analyzer-configurations/",
+        Data.toBS configurationName
+      ]
+
+instance Data.ToQuery GetNetworkAnalyzerConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetNetworkAnalyzerConfigurationResponse' smart constructor.
+data GetNetworkAnalyzerConfigurationResponse = GetNetworkAnalyzerConfigurationResponse'
+  { -- | The Amazon Resource Name of the new resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    description :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text,
+    traceContent :: Prelude.Maybe TraceContent,
+    -- | List of wireless gateway resources that have been added to the network
+    -- analyzer configuration.
+    wirelessDevices :: Prelude.Maybe [Prelude.Text],
+    -- | List of wireless gateway resources that have been added to the network
+    -- analyzer configuration.
+    wirelessGateways :: 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 'GetNetworkAnalyzerConfigurationResponse' 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', 'getNetworkAnalyzerConfigurationResponse_arn' - The Amazon Resource Name of the new resource.
+--
+-- 'description', 'getNetworkAnalyzerConfigurationResponse_description' - Undocumented member.
+--
+-- 'name', 'getNetworkAnalyzerConfigurationResponse_name' - Undocumented member.
+--
+-- 'traceContent', 'getNetworkAnalyzerConfigurationResponse_traceContent' - Undocumented member.
+--
+-- 'wirelessDevices', 'getNetworkAnalyzerConfigurationResponse_wirelessDevices' - List of wireless gateway resources that have been added to the network
+-- analyzer configuration.
+--
+-- 'wirelessGateways', 'getNetworkAnalyzerConfigurationResponse_wirelessGateways' - List of wireless gateway resources that have been added to the network
+-- analyzer configuration.
+--
+-- 'httpStatus', 'getNetworkAnalyzerConfigurationResponse_httpStatus' - The response's http status code.
+newGetNetworkAnalyzerConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetNetworkAnalyzerConfigurationResponse
+newGetNetworkAnalyzerConfigurationResponse
+  pHttpStatus_ =
+    GetNetworkAnalyzerConfigurationResponse'
+      { arn =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        name = Prelude.Nothing,
+        traceContent = Prelude.Nothing,
+        wirelessDevices = Prelude.Nothing,
+        wirelessGateways = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name of the new resource.
+getNetworkAnalyzerConfigurationResponse_arn :: Lens.Lens' GetNetworkAnalyzerConfigurationResponse (Prelude.Maybe Prelude.Text)
+getNetworkAnalyzerConfigurationResponse_arn = Lens.lens (\GetNetworkAnalyzerConfigurationResponse' {arn} -> arn) (\s@GetNetworkAnalyzerConfigurationResponse' {} a -> s {arn = a} :: GetNetworkAnalyzerConfigurationResponse)
+
+-- | Undocumented member.
+getNetworkAnalyzerConfigurationResponse_description :: Lens.Lens' GetNetworkAnalyzerConfigurationResponse (Prelude.Maybe Prelude.Text)
+getNetworkAnalyzerConfigurationResponse_description = Lens.lens (\GetNetworkAnalyzerConfigurationResponse' {description} -> description) (\s@GetNetworkAnalyzerConfigurationResponse' {} a -> s {description = a} :: GetNetworkAnalyzerConfigurationResponse)
+
+-- | Undocumented member.
+getNetworkAnalyzerConfigurationResponse_name :: Lens.Lens' GetNetworkAnalyzerConfigurationResponse (Prelude.Maybe Prelude.Text)
+getNetworkAnalyzerConfigurationResponse_name = Lens.lens (\GetNetworkAnalyzerConfigurationResponse' {name} -> name) (\s@GetNetworkAnalyzerConfigurationResponse' {} a -> s {name = a} :: GetNetworkAnalyzerConfigurationResponse)
+
+-- | Undocumented member.
+getNetworkAnalyzerConfigurationResponse_traceContent :: Lens.Lens' GetNetworkAnalyzerConfigurationResponse (Prelude.Maybe TraceContent)
+getNetworkAnalyzerConfigurationResponse_traceContent = Lens.lens (\GetNetworkAnalyzerConfigurationResponse' {traceContent} -> traceContent) (\s@GetNetworkAnalyzerConfigurationResponse' {} a -> s {traceContent = a} :: GetNetworkAnalyzerConfigurationResponse)
+
+-- | List of wireless gateway resources that have been added to the network
+-- analyzer configuration.
+getNetworkAnalyzerConfigurationResponse_wirelessDevices :: Lens.Lens' GetNetworkAnalyzerConfigurationResponse (Prelude.Maybe [Prelude.Text])
+getNetworkAnalyzerConfigurationResponse_wirelessDevices = Lens.lens (\GetNetworkAnalyzerConfigurationResponse' {wirelessDevices} -> wirelessDevices) (\s@GetNetworkAnalyzerConfigurationResponse' {} a -> s {wirelessDevices = a} :: GetNetworkAnalyzerConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | List of wireless gateway resources that have been added to the network
+-- analyzer configuration.
+getNetworkAnalyzerConfigurationResponse_wirelessGateways :: Lens.Lens' GetNetworkAnalyzerConfigurationResponse (Prelude.Maybe [Prelude.Text])
+getNetworkAnalyzerConfigurationResponse_wirelessGateways = Lens.lens (\GetNetworkAnalyzerConfigurationResponse' {wirelessGateways} -> wirelessGateways) (\s@GetNetworkAnalyzerConfigurationResponse' {} a -> s {wirelessGateways = a} :: GetNetworkAnalyzerConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getNetworkAnalyzerConfigurationResponse_httpStatus :: Lens.Lens' GetNetworkAnalyzerConfigurationResponse Prelude.Int
+getNetworkAnalyzerConfigurationResponse_httpStatus = Lens.lens (\GetNetworkAnalyzerConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetNetworkAnalyzerConfigurationResponse' {} a -> s {httpStatus = a} :: GetNetworkAnalyzerConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetNetworkAnalyzerConfigurationResponse
+  where
+  rnf GetNetworkAnalyzerConfigurationResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf traceContent
+      `Prelude.seq` Prelude.rnf wirelessDevices
+      `Prelude.seq` Prelude.rnf wirelessGateways
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetPartnerAccount.hs b/gen/Amazonka/IoTWireless/GetPartnerAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetPartnerAccount.hs
@@ -0,0 +1,184 @@
+{-# 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.IoTWireless.GetPartnerAccount
+-- 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 information about a partner account. If @PartnerAccountId@ and
+-- @PartnerType@ are @null@, returns all partner accounts.
+module Amazonka.IoTWireless.GetPartnerAccount
+  ( -- * Creating a Request
+    GetPartnerAccount (..),
+    newGetPartnerAccount,
+
+    -- * Request Lenses
+    getPartnerAccount_partnerAccountId,
+    getPartnerAccount_partnerType,
+
+    -- * Destructuring the Response
+    GetPartnerAccountResponse (..),
+    newGetPartnerAccountResponse,
+
+    -- * Response Lenses
+    getPartnerAccountResponse_accountLinked,
+    getPartnerAccountResponse_sidewalk,
+    getPartnerAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPartnerAccount' smart constructor.
+data GetPartnerAccount = GetPartnerAccount'
+  { -- | The partner account ID to disassociate from the AWS account.
+    partnerAccountId :: Prelude.Text,
+    -- | The partner type.
+    partnerType :: PartnerType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPartnerAccount' 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:
+--
+-- 'partnerAccountId', 'getPartnerAccount_partnerAccountId' - The partner account ID to disassociate from the AWS account.
+--
+-- 'partnerType', 'getPartnerAccount_partnerType' - The partner type.
+newGetPartnerAccount ::
+  -- | 'partnerAccountId'
+  Prelude.Text ->
+  -- | 'partnerType'
+  PartnerType ->
+  GetPartnerAccount
+newGetPartnerAccount pPartnerAccountId_ pPartnerType_ =
+  GetPartnerAccount'
+    { partnerAccountId =
+        pPartnerAccountId_,
+      partnerType = pPartnerType_
+    }
+
+-- | The partner account ID to disassociate from the AWS account.
+getPartnerAccount_partnerAccountId :: Lens.Lens' GetPartnerAccount Prelude.Text
+getPartnerAccount_partnerAccountId = Lens.lens (\GetPartnerAccount' {partnerAccountId} -> partnerAccountId) (\s@GetPartnerAccount' {} a -> s {partnerAccountId = a} :: GetPartnerAccount)
+
+-- | The partner type.
+getPartnerAccount_partnerType :: Lens.Lens' GetPartnerAccount PartnerType
+getPartnerAccount_partnerType = Lens.lens (\GetPartnerAccount' {partnerType} -> partnerType) (\s@GetPartnerAccount' {} a -> s {partnerType = a} :: GetPartnerAccount)
+
+instance Core.AWSRequest GetPartnerAccount where
+  type
+    AWSResponse GetPartnerAccount =
+      GetPartnerAccountResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetPartnerAccountResponse'
+            Prelude.<$> (x Data..?> "AccountLinked")
+            Prelude.<*> (x Data..?> "Sidewalk")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetPartnerAccount where
+  hashWithSalt _salt GetPartnerAccount' {..} =
+    _salt
+      `Prelude.hashWithSalt` partnerAccountId
+      `Prelude.hashWithSalt` partnerType
+
+instance Prelude.NFData GetPartnerAccount where
+  rnf GetPartnerAccount' {..} =
+    Prelude.rnf partnerAccountId
+      `Prelude.seq` Prelude.rnf partnerType
+
+instance Data.ToHeaders GetPartnerAccount where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetPartnerAccount where
+  toPath GetPartnerAccount' {..} =
+    Prelude.mconcat
+      ["/partner-accounts/", Data.toBS partnerAccountId]
+
+instance Data.ToQuery GetPartnerAccount where
+  toQuery GetPartnerAccount' {..} =
+    Prelude.mconcat ["partnerType" Data.=: partnerType]
+
+-- | /See:/ 'newGetPartnerAccountResponse' smart constructor.
+data GetPartnerAccountResponse = GetPartnerAccountResponse'
+  { -- | Whether the partner account is linked to the AWS account.
+    accountLinked :: Prelude.Maybe Prelude.Bool,
+    -- | The Sidewalk account credentials.
+    sidewalk :: Prelude.Maybe SidewalkAccountInfoWithFingerprint,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPartnerAccountResponse' 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:
+--
+-- 'accountLinked', 'getPartnerAccountResponse_accountLinked' - Whether the partner account is linked to the AWS account.
+--
+-- 'sidewalk', 'getPartnerAccountResponse_sidewalk' - The Sidewalk account credentials.
+--
+-- 'httpStatus', 'getPartnerAccountResponse_httpStatus' - The response's http status code.
+newGetPartnerAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetPartnerAccountResponse
+newGetPartnerAccountResponse pHttpStatus_ =
+  GetPartnerAccountResponse'
+    { accountLinked =
+        Prelude.Nothing,
+      sidewalk = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Whether the partner account is linked to the AWS account.
+getPartnerAccountResponse_accountLinked :: Lens.Lens' GetPartnerAccountResponse (Prelude.Maybe Prelude.Bool)
+getPartnerAccountResponse_accountLinked = Lens.lens (\GetPartnerAccountResponse' {accountLinked} -> accountLinked) (\s@GetPartnerAccountResponse' {} a -> s {accountLinked = a} :: GetPartnerAccountResponse)
+
+-- | The Sidewalk account credentials.
+getPartnerAccountResponse_sidewalk :: Lens.Lens' GetPartnerAccountResponse (Prelude.Maybe SidewalkAccountInfoWithFingerprint)
+getPartnerAccountResponse_sidewalk = Lens.lens (\GetPartnerAccountResponse' {sidewalk} -> sidewalk) (\s@GetPartnerAccountResponse' {} a -> s {sidewalk = a} :: GetPartnerAccountResponse)
+
+-- | The response's http status code.
+getPartnerAccountResponse_httpStatus :: Lens.Lens' GetPartnerAccountResponse Prelude.Int
+getPartnerAccountResponse_httpStatus = Lens.lens (\GetPartnerAccountResponse' {httpStatus} -> httpStatus) (\s@GetPartnerAccountResponse' {} a -> s {httpStatus = a} :: GetPartnerAccountResponse)
+
+instance Prelude.NFData GetPartnerAccountResponse where
+  rnf GetPartnerAccountResponse' {..} =
+    Prelude.rnf accountLinked
+      `Prelude.seq` Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetPositionEstimate.hs b/gen/Amazonka/IoTWireless/GetPositionEstimate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetPositionEstimate.hs
@@ -0,0 +1,250 @@
+{-# 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.IoTWireless.GetPositionEstimate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get estimated position information as a payload in GeoJSON format. The
+-- payload measurement data is resolved using solvers that are provided by
+-- third-party vendors.
+module Amazonka.IoTWireless.GetPositionEstimate
+  ( -- * Creating a Request
+    GetPositionEstimate (..),
+    newGetPositionEstimate,
+
+    -- * Request Lenses
+    getPositionEstimate_cellTowers,
+    getPositionEstimate_gnss,
+    getPositionEstimate_ip,
+    getPositionEstimate_timestamp,
+    getPositionEstimate_wiFiAccessPoints,
+
+    -- * Destructuring the Response
+    GetPositionEstimateResponse (..),
+    newGetPositionEstimateResponse,
+
+    -- * Response Lenses
+    getPositionEstimateResponse_geoJsonPayload,
+    getPositionEstimateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPositionEstimate' smart constructor.
+data GetPositionEstimate = GetPositionEstimate'
+  { -- | Retrieves an estimated device position by resolving measurement data
+    -- from cellular radio towers. The position is resolved using HERE\'s
+    -- cellular-based solver.
+    cellTowers :: Prelude.Maybe CellTowers,
+    -- | Retrieves an estimated device position by resolving the global
+    -- navigation satellite system (GNSS) scan data. The position is resolved
+    -- using the GNSS solver powered by LoRa Cloud.
+    gnss :: Prelude.Maybe Gnss,
+    -- | Retrieves an estimated device position by resolving the IP address
+    -- information from the device. The position is resolved using MaxMind\'s
+    -- IP-based solver.
+    ip :: Prelude.Maybe Ip,
+    -- | Optional information that specifies the time when the position
+    -- information will be resolved. It uses the UNIX timestamp format. If not
+    -- specified, the time at which the request was received will be used.
+    timestamp :: Prelude.Maybe Data.POSIX,
+    -- | Retrieves an estimated device position by resolving WLAN measurement
+    -- data. The position is resolved using HERE\'s Wi-Fi based solver.
+    wiFiAccessPoints :: Prelude.Maybe [WiFiAccessPoint]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPositionEstimate' 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:
+--
+-- 'cellTowers', 'getPositionEstimate_cellTowers' - Retrieves an estimated device position by resolving measurement data
+-- from cellular radio towers. The position is resolved using HERE\'s
+-- cellular-based solver.
+--
+-- 'gnss', 'getPositionEstimate_gnss' - Retrieves an estimated device position by resolving the global
+-- navigation satellite system (GNSS) scan data. The position is resolved
+-- using the GNSS solver powered by LoRa Cloud.
+--
+-- 'ip', 'getPositionEstimate_ip' - Retrieves an estimated device position by resolving the IP address
+-- information from the device. The position is resolved using MaxMind\'s
+-- IP-based solver.
+--
+-- 'timestamp', 'getPositionEstimate_timestamp' - Optional information that specifies the time when the position
+-- information will be resolved. It uses the UNIX timestamp format. If not
+-- specified, the time at which the request was received will be used.
+--
+-- 'wiFiAccessPoints', 'getPositionEstimate_wiFiAccessPoints' - Retrieves an estimated device position by resolving WLAN measurement
+-- data. The position is resolved using HERE\'s Wi-Fi based solver.
+newGetPositionEstimate ::
+  GetPositionEstimate
+newGetPositionEstimate =
+  GetPositionEstimate'
+    { cellTowers = Prelude.Nothing,
+      gnss = Prelude.Nothing,
+      ip = Prelude.Nothing,
+      timestamp = Prelude.Nothing,
+      wiFiAccessPoints = Prelude.Nothing
+    }
+
+-- | Retrieves an estimated device position by resolving measurement data
+-- from cellular radio towers. The position is resolved using HERE\'s
+-- cellular-based solver.
+getPositionEstimate_cellTowers :: Lens.Lens' GetPositionEstimate (Prelude.Maybe CellTowers)
+getPositionEstimate_cellTowers = Lens.lens (\GetPositionEstimate' {cellTowers} -> cellTowers) (\s@GetPositionEstimate' {} a -> s {cellTowers = a} :: GetPositionEstimate)
+
+-- | Retrieves an estimated device position by resolving the global
+-- navigation satellite system (GNSS) scan data. The position is resolved
+-- using the GNSS solver powered by LoRa Cloud.
+getPositionEstimate_gnss :: Lens.Lens' GetPositionEstimate (Prelude.Maybe Gnss)
+getPositionEstimate_gnss = Lens.lens (\GetPositionEstimate' {gnss} -> gnss) (\s@GetPositionEstimate' {} a -> s {gnss = a} :: GetPositionEstimate)
+
+-- | Retrieves an estimated device position by resolving the IP address
+-- information from the device. The position is resolved using MaxMind\'s
+-- IP-based solver.
+getPositionEstimate_ip :: Lens.Lens' GetPositionEstimate (Prelude.Maybe Ip)
+getPositionEstimate_ip = Lens.lens (\GetPositionEstimate' {ip} -> ip) (\s@GetPositionEstimate' {} a -> s {ip = a} :: GetPositionEstimate)
+
+-- | Optional information that specifies the time when the position
+-- information will be resolved. It uses the UNIX timestamp format. If not
+-- specified, the time at which the request was received will be used.
+getPositionEstimate_timestamp :: Lens.Lens' GetPositionEstimate (Prelude.Maybe Prelude.UTCTime)
+getPositionEstimate_timestamp = Lens.lens (\GetPositionEstimate' {timestamp} -> timestamp) (\s@GetPositionEstimate' {} a -> s {timestamp = a} :: GetPositionEstimate) Prelude.. Lens.mapping Data._Time
+
+-- | Retrieves an estimated device position by resolving WLAN measurement
+-- data. The position is resolved using HERE\'s Wi-Fi based solver.
+getPositionEstimate_wiFiAccessPoints :: Lens.Lens' GetPositionEstimate (Prelude.Maybe [WiFiAccessPoint])
+getPositionEstimate_wiFiAccessPoints = Lens.lens (\GetPositionEstimate' {wiFiAccessPoints} -> wiFiAccessPoints) (\s@GetPositionEstimate' {} a -> s {wiFiAccessPoints = a} :: GetPositionEstimate) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest GetPositionEstimate where
+  type
+    AWSResponse GetPositionEstimate =
+      GetPositionEstimateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          GetPositionEstimateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetPositionEstimate where
+  hashWithSalt _salt GetPositionEstimate' {..} =
+    _salt
+      `Prelude.hashWithSalt` cellTowers
+      `Prelude.hashWithSalt` gnss
+      `Prelude.hashWithSalt` ip
+      `Prelude.hashWithSalt` timestamp
+      `Prelude.hashWithSalt` wiFiAccessPoints
+
+instance Prelude.NFData GetPositionEstimate where
+  rnf GetPositionEstimate' {..} =
+    Prelude.rnf cellTowers
+      `Prelude.seq` Prelude.rnf gnss
+      `Prelude.seq` Prelude.rnf ip
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf wiFiAccessPoints
+
+instance Data.ToHeaders GetPositionEstimate where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON GetPositionEstimate where
+  toJSON GetPositionEstimate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CellTowers" Data..=) Prelude.<$> cellTowers,
+            ("Gnss" Data..=) Prelude.<$> gnss,
+            ("Ip" Data..=) Prelude.<$> ip,
+            ("Timestamp" Data..=) Prelude.<$> timestamp,
+            ("WiFiAccessPoints" Data..=)
+              Prelude.<$> wiFiAccessPoints
+          ]
+      )
+
+instance Data.ToPath GetPositionEstimate where
+  toPath = Prelude.const "/position-estimate"
+
+instance Data.ToQuery GetPositionEstimate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetPositionEstimateResponse' smart constructor.
+data GetPositionEstimateResponse = GetPositionEstimateResponse'
+  { -- | The position information of the resource, displayed as a JSON payload.
+    -- The payload uses the GeoJSON format, which a format that\'s used to
+    -- encode geographic data structures. For more information, see
+    -- <https://geojson.org/ GeoJSON>.
+    geoJsonPayload :: Prelude.Maybe Prelude.ByteString,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPositionEstimateResponse' 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:
+--
+-- 'geoJsonPayload', 'getPositionEstimateResponse_geoJsonPayload' - The position information of the resource, displayed as a JSON payload.
+-- The payload uses the GeoJSON format, which a format that\'s used to
+-- encode geographic data structures. For more information, see
+-- <https://geojson.org/ GeoJSON>.
+--
+-- 'httpStatus', 'getPositionEstimateResponse_httpStatus' - The response's http status code.
+newGetPositionEstimateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetPositionEstimateResponse
+newGetPositionEstimateResponse pHttpStatus_ =
+  GetPositionEstimateResponse'
+    { geoJsonPayload =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The position information of the resource, displayed as a JSON payload.
+-- The payload uses the GeoJSON format, which a format that\'s used to
+-- encode geographic data structures. For more information, see
+-- <https://geojson.org/ GeoJSON>.
+getPositionEstimateResponse_geoJsonPayload :: Lens.Lens' GetPositionEstimateResponse (Prelude.Maybe Prelude.ByteString)
+getPositionEstimateResponse_geoJsonPayload = Lens.lens (\GetPositionEstimateResponse' {geoJsonPayload} -> geoJsonPayload) (\s@GetPositionEstimateResponse' {} a -> s {geoJsonPayload = a} :: GetPositionEstimateResponse)
+
+-- | The response's http status code.
+getPositionEstimateResponse_httpStatus :: Lens.Lens' GetPositionEstimateResponse Prelude.Int
+getPositionEstimateResponse_httpStatus = Lens.lens (\GetPositionEstimateResponse' {httpStatus} -> httpStatus) (\s@GetPositionEstimateResponse' {} a -> s {httpStatus = a} :: GetPositionEstimateResponse)
+
+instance Prelude.NFData GetPositionEstimateResponse where
+  rnf GetPositionEstimateResponse' {..} =
+    Prelude.rnf geoJsonPayload
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetResourceEventConfiguration.hs b/gen/Amazonka/IoTWireless/GetResourceEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetResourceEventConfiguration.hs
@@ -0,0 +1,253 @@
+{-# 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.IoTWireless.GetResourceEventConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get the event configuration for a particular resource identifier.
+module Amazonka.IoTWireless.GetResourceEventConfiguration
+  ( -- * Creating a Request
+    GetResourceEventConfiguration (..),
+    newGetResourceEventConfiguration,
+
+    -- * Request Lenses
+    getResourceEventConfiguration_partnerType,
+    getResourceEventConfiguration_identifier,
+    getResourceEventConfiguration_identifierType,
+
+    -- * Destructuring the Response
+    GetResourceEventConfigurationResponse (..),
+    newGetResourceEventConfigurationResponse,
+
+    -- * Response Lenses
+    getResourceEventConfigurationResponse_connectionStatus,
+    getResourceEventConfigurationResponse_deviceRegistrationState,
+    getResourceEventConfigurationResponse_join,
+    getResourceEventConfigurationResponse_messageDeliveryStatus,
+    getResourceEventConfigurationResponse_proximity,
+    getResourceEventConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetResourceEventConfiguration' smart constructor.
+data GetResourceEventConfiguration = GetResourceEventConfiguration'
+  { -- | Partner type of the resource if the identifier type is
+    -- @PartnerAccountId@.
+    partnerType :: Prelude.Maybe EventNotificationPartnerType,
+    -- | Resource identifier to opt in for event messaging.
+    identifier :: Prelude.Text,
+    -- | Identifier type of the particular resource identifier for event
+    -- configuration.
+    identifierType :: IdentifierType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceEventConfiguration' 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:
+--
+-- 'partnerType', 'getResourceEventConfiguration_partnerType' - Partner type of the resource if the identifier type is
+-- @PartnerAccountId@.
+--
+-- 'identifier', 'getResourceEventConfiguration_identifier' - Resource identifier to opt in for event messaging.
+--
+-- 'identifierType', 'getResourceEventConfiguration_identifierType' - Identifier type of the particular resource identifier for event
+-- configuration.
+newGetResourceEventConfiguration ::
+  -- | 'identifier'
+  Prelude.Text ->
+  -- | 'identifierType'
+  IdentifierType ->
+  GetResourceEventConfiguration
+newGetResourceEventConfiguration
+  pIdentifier_
+  pIdentifierType_ =
+    GetResourceEventConfiguration'
+      { partnerType =
+          Prelude.Nothing,
+        identifier = pIdentifier_,
+        identifierType = pIdentifierType_
+      }
+
+-- | Partner type of the resource if the identifier type is
+-- @PartnerAccountId@.
+getResourceEventConfiguration_partnerType :: Lens.Lens' GetResourceEventConfiguration (Prelude.Maybe EventNotificationPartnerType)
+getResourceEventConfiguration_partnerType = Lens.lens (\GetResourceEventConfiguration' {partnerType} -> partnerType) (\s@GetResourceEventConfiguration' {} a -> s {partnerType = a} :: GetResourceEventConfiguration)
+
+-- | Resource identifier to opt in for event messaging.
+getResourceEventConfiguration_identifier :: Lens.Lens' GetResourceEventConfiguration Prelude.Text
+getResourceEventConfiguration_identifier = Lens.lens (\GetResourceEventConfiguration' {identifier} -> identifier) (\s@GetResourceEventConfiguration' {} a -> s {identifier = a} :: GetResourceEventConfiguration)
+
+-- | Identifier type of the particular resource identifier for event
+-- configuration.
+getResourceEventConfiguration_identifierType :: Lens.Lens' GetResourceEventConfiguration IdentifierType
+getResourceEventConfiguration_identifierType = Lens.lens (\GetResourceEventConfiguration' {identifierType} -> identifierType) (\s@GetResourceEventConfiguration' {} a -> s {identifierType = a} :: GetResourceEventConfiguration)
+
+instance
+  Core.AWSRequest
+    GetResourceEventConfiguration
+  where
+  type
+    AWSResponse GetResourceEventConfiguration =
+      GetResourceEventConfigurationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetResourceEventConfigurationResponse'
+            Prelude.<$> (x Data..?> "ConnectionStatus")
+            Prelude.<*> (x Data..?> "DeviceRegistrationState")
+            Prelude.<*> (x Data..?> "Join")
+            Prelude.<*> (x Data..?> "MessageDeliveryStatus")
+            Prelude.<*> (x Data..?> "Proximity")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetResourceEventConfiguration
+  where
+  hashWithSalt _salt GetResourceEventConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` partnerType
+      `Prelude.hashWithSalt` identifier
+      `Prelude.hashWithSalt` identifierType
+
+instance Prelude.NFData GetResourceEventConfiguration where
+  rnf GetResourceEventConfiguration' {..} =
+    Prelude.rnf partnerType
+      `Prelude.seq` Prelude.rnf identifier
+      `Prelude.seq` Prelude.rnf identifierType
+
+instance Data.ToHeaders GetResourceEventConfiguration where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetResourceEventConfiguration where
+  toPath GetResourceEventConfiguration' {..} =
+    Prelude.mconcat
+      ["/event-configurations/", Data.toBS identifier]
+
+instance Data.ToQuery GetResourceEventConfiguration where
+  toQuery GetResourceEventConfiguration' {..} =
+    Prelude.mconcat
+      [ "partnerType" Data.=: partnerType,
+        "identifierType" Data.=: identifierType
+      ]
+
+-- | /See:/ 'newGetResourceEventConfigurationResponse' smart constructor.
+data GetResourceEventConfigurationResponse = GetResourceEventConfigurationResponse'
+  { -- | Event configuration for the connection status event.
+    connectionStatus :: Prelude.Maybe ConnectionStatusEventConfiguration,
+    -- | Event configuration for the device registration state event.
+    deviceRegistrationState :: Prelude.Maybe DeviceRegistrationStateEventConfiguration,
+    -- | Event configuration for the join event.
+    join :: Prelude.Maybe JoinEventConfiguration,
+    -- | Event configuration for the message delivery status event.
+    messageDeliveryStatus :: Prelude.Maybe MessageDeliveryStatusEventConfiguration,
+    -- | Event configuration for the proximity event.
+    proximity :: Prelude.Maybe ProximityEventConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceEventConfigurationResponse' 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', 'getResourceEventConfigurationResponse_connectionStatus' - Event configuration for the connection status event.
+--
+-- 'deviceRegistrationState', 'getResourceEventConfigurationResponse_deviceRegistrationState' - Event configuration for the device registration state event.
+--
+-- 'join', 'getResourceEventConfigurationResponse_join' - Event configuration for the join event.
+--
+-- 'messageDeliveryStatus', 'getResourceEventConfigurationResponse_messageDeliveryStatus' - Event configuration for the message delivery status event.
+--
+-- 'proximity', 'getResourceEventConfigurationResponse_proximity' - Event configuration for the proximity event.
+--
+-- 'httpStatus', 'getResourceEventConfigurationResponse_httpStatus' - The response's http status code.
+newGetResourceEventConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetResourceEventConfigurationResponse
+newGetResourceEventConfigurationResponse pHttpStatus_ =
+  GetResourceEventConfigurationResponse'
+    { connectionStatus =
+        Prelude.Nothing,
+      deviceRegistrationState =
+        Prelude.Nothing,
+      join = Prelude.Nothing,
+      messageDeliveryStatus =
+        Prelude.Nothing,
+      proximity = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Event configuration for the connection status event.
+getResourceEventConfigurationResponse_connectionStatus :: Lens.Lens' GetResourceEventConfigurationResponse (Prelude.Maybe ConnectionStatusEventConfiguration)
+getResourceEventConfigurationResponse_connectionStatus = Lens.lens (\GetResourceEventConfigurationResponse' {connectionStatus} -> connectionStatus) (\s@GetResourceEventConfigurationResponse' {} a -> s {connectionStatus = a} :: GetResourceEventConfigurationResponse)
+
+-- | Event configuration for the device registration state event.
+getResourceEventConfigurationResponse_deviceRegistrationState :: Lens.Lens' GetResourceEventConfigurationResponse (Prelude.Maybe DeviceRegistrationStateEventConfiguration)
+getResourceEventConfigurationResponse_deviceRegistrationState = Lens.lens (\GetResourceEventConfigurationResponse' {deviceRegistrationState} -> deviceRegistrationState) (\s@GetResourceEventConfigurationResponse' {} a -> s {deviceRegistrationState = a} :: GetResourceEventConfigurationResponse)
+
+-- | Event configuration for the join event.
+getResourceEventConfigurationResponse_join :: Lens.Lens' GetResourceEventConfigurationResponse (Prelude.Maybe JoinEventConfiguration)
+getResourceEventConfigurationResponse_join = Lens.lens (\GetResourceEventConfigurationResponse' {join} -> join) (\s@GetResourceEventConfigurationResponse' {} a -> s {join = a} :: GetResourceEventConfigurationResponse)
+
+-- | Event configuration for the message delivery status event.
+getResourceEventConfigurationResponse_messageDeliveryStatus :: Lens.Lens' GetResourceEventConfigurationResponse (Prelude.Maybe MessageDeliveryStatusEventConfiguration)
+getResourceEventConfigurationResponse_messageDeliveryStatus = Lens.lens (\GetResourceEventConfigurationResponse' {messageDeliveryStatus} -> messageDeliveryStatus) (\s@GetResourceEventConfigurationResponse' {} a -> s {messageDeliveryStatus = a} :: GetResourceEventConfigurationResponse)
+
+-- | Event configuration for the proximity event.
+getResourceEventConfigurationResponse_proximity :: Lens.Lens' GetResourceEventConfigurationResponse (Prelude.Maybe ProximityEventConfiguration)
+getResourceEventConfigurationResponse_proximity = Lens.lens (\GetResourceEventConfigurationResponse' {proximity} -> proximity) (\s@GetResourceEventConfigurationResponse' {} a -> s {proximity = a} :: GetResourceEventConfigurationResponse)
+
+-- | The response's http status code.
+getResourceEventConfigurationResponse_httpStatus :: Lens.Lens' GetResourceEventConfigurationResponse Prelude.Int
+getResourceEventConfigurationResponse_httpStatus = Lens.lens (\GetResourceEventConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetResourceEventConfigurationResponse' {} a -> s {httpStatus = a} :: GetResourceEventConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetResourceEventConfigurationResponse
+  where
+  rnf GetResourceEventConfigurationResponse' {..} =
+    Prelude.rnf connectionStatus
+      `Prelude.seq` Prelude.rnf deviceRegistrationState
+      `Prelude.seq` Prelude.rnf join
+      `Prelude.seq` Prelude.rnf messageDeliveryStatus
+      `Prelude.seq` Prelude.rnf proximity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetResourceLogLevel.hs b/gen/Amazonka/IoTWireless/GetResourceLogLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetResourceLogLevel.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.IoTWireless.GetResourceLogLevel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Fetches the log-level override, if any, for a given resource-ID and
+-- resource-type. It can be used for a wireless device or a wireless
+-- gateway.
+module Amazonka.IoTWireless.GetResourceLogLevel
+  ( -- * Creating a Request
+    GetResourceLogLevel (..),
+    newGetResourceLogLevel,
+
+    -- * Request Lenses
+    getResourceLogLevel_resourceIdentifier,
+    getResourceLogLevel_resourceType,
+
+    -- * Destructuring the Response
+    GetResourceLogLevelResponse (..),
+    newGetResourceLogLevelResponse,
+
+    -- * Response Lenses
+    getResourceLogLevelResponse_logLevel,
+    getResourceLogLevelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetResourceLogLevel' smart constructor.
+data GetResourceLogLevel = GetResourceLogLevel'
+  { resourceIdentifier :: Prelude.Text,
+    -- | The type of the resource, which can be @WirelessDevice@ or
+    -- @WirelessGateway@.
+    resourceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceLogLevel' 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:
+--
+-- 'resourceIdentifier', 'getResourceLogLevel_resourceIdentifier' - Undocumented member.
+--
+-- 'resourceType', 'getResourceLogLevel_resourceType' - The type of the resource, which can be @WirelessDevice@ or
+-- @WirelessGateway@.
+newGetResourceLogLevel ::
+  -- | 'resourceIdentifier'
+  Prelude.Text ->
+  -- | 'resourceType'
+  Prelude.Text ->
+  GetResourceLogLevel
+newGetResourceLogLevel
+  pResourceIdentifier_
+  pResourceType_ =
+    GetResourceLogLevel'
+      { resourceIdentifier =
+          pResourceIdentifier_,
+        resourceType = pResourceType_
+      }
+
+-- | Undocumented member.
+getResourceLogLevel_resourceIdentifier :: Lens.Lens' GetResourceLogLevel Prelude.Text
+getResourceLogLevel_resourceIdentifier = Lens.lens (\GetResourceLogLevel' {resourceIdentifier} -> resourceIdentifier) (\s@GetResourceLogLevel' {} a -> s {resourceIdentifier = a} :: GetResourceLogLevel)
+
+-- | The type of the resource, which can be @WirelessDevice@ or
+-- @WirelessGateway@.
+getResourceLogLevel_resourceType :: Lens.Lens' GetResourceLogLevel Prelude.Text
+getResourceLogLevel_resourceType = Lens.lens (\GetResourceLogLevel' {resourceType} -> resourceType) (\s@GetResourceLogLevel' {} a -> s {resourceType = a} :: GetResourceLogLevel)
+
+instance Core.AWSRequest GetResourceLogLevel where
+  type
+    AWSResponse GetResourceLogLevel =
+      GetResourceLogLevelResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetResourceLogLevelResponse'
+            Prelude.<$> (x Data..?> "LogLevel")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetResourceLogLevel where
+  hashWithSalt _salt GetResourceLogLevel' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceIdentifier
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData GetResourceLogLevel where
+  rnf GetResourceLogLevel' {..} =
+    Prelude.rnf resourceIdentifier
+      `Prelude.seq` Prelude.rnf resourceType
+
+instance Data.ToHeaders GetResourceLogLevel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetResourceLogLevel where
+  toPath GetResourceLogLevel' {..} =
+    Prelude.mconcat
+      ["/log-levels/", Data.toBS resourceIdentifier]
+
+instance Data.ToQuery GetResourceLogLevel where
+  toQuery GetResourceLogLevel' {..} =
+    Prelude.mconcat
+      ["resourceType" Data.=: resourceType]
+
+-- | /See:/ 'newGetResourceLogLevelResponse' smart constructor.
+data GetResourceLogLevelResponse = GetResourceLogLevelResponse'
+  { logLevel :: Prelude.Maybe LogLevel,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourceLogLevelResponse' 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:
+--
+-- 'logLevel', 'getResourceLogLevelResponse_logLevel' - Undocumented member.
+--
+-- 'httpStatus', 'getResourceLogLevelResponse_httpStatus' - The response's http status code.
+newGetResourceLogLevelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetResourceLogLevelResponse
+newGetResourceLogLevelResponse pHttpStatus_ =
+  GetResourceLogLevelResponse'
+    { logLevel =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+getResourceLogLevelResponse_logLevel :: Lens.Lens' GetResourceLogLevelResponse (Prelude.Maybe LogLevel)
+getResourceLogLevelResponse_logLevel = Lens.lens (\GetResourceLogLevelResponse' {logLevel} -> logLevel) (\s@GetResourceLogLevelResponse' {} a -> s {logLevel = a} :: GetResourceLogLevelResponse)
+
+-- | The response's http status code.
+getResourceLogLevelResponse_httpStatus :: Lens.Lens' GetResourceLogLevelResponse Prelude.Int
+getResourceLogLevelResponse_httpStatus = Lens.lens (\GetResourceLogLevelResponse' {httpStatus} -> httpStatus) (\s@GetResourceLogLevelResponse' {} a -> s {httpStatus = a} :: GetResourceLogLevelResponse)
+
+instance Prelude.NFData GetResourceLogLevelResponse where
+  rnf GetResourceLogLevelResponse' {..} =
+    Prelude.rnf logLevel
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetResourcePosition.hs b/gen/Amazonka/IoTWireless/GetResourcePosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetResourcePosition.hs
@@ -0,0 +1,196 @@
+{-# 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.IoTWireless.GetResourcePosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get the position information for a given wireless device or a wireless
+-- gateway resource. The postion information uses the
+-- <https://gisgeography.com/wgs84-world-geodetic-system/ World Geodetic System (WGS84)>.
+module Amazonka.IoTWireless.GetResourcePosition
+  ( -- * Creating a Request
+    GetResourcePosition (..),
+    newGetResourcePosition,
+
+    -- * Request Lenses
+    getResourcePosition_resourceIdentifier,
+    getResourcePosition_resourceType,
+
+    -- * Destructuring the Response
+    GetResourcePositionResponse (..),
+    newGetResourcePositionResponse,
+
+    -- * Response Lenses
+    getResourcePositionResponse_geoJsonPayload,
+    getResourcePositionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetResourcePosition' smart constructor.
+data GetResourcePosition = GetResourcePosition'
+  { -- | The identifier of the resource for which position information is
+    -- retrieved. It can be the wireless device ID or the wireless gateway ID
+    -- depending on the resource type.
+    resourceIdentifier :: Prelude.Text,
+    -- | The type of resource for which position information is retrieved, which
+    -- can be a wireless device or a wireless gateway.
+    resourceType :: PositionResourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourcePosition' 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:
+--
+-- 'resourceIdentifier', 'getResourcePosition_resourceIdentifier' - The identifier of the resource for which position information is
+-- retrieved. It can be the wireless device ID or the wireless gateway ID
+-- depending on the resource type.
+--
+-- 'resourceType', 'getResourcePosition_resourceType' - The type of resource for which position information is retrieved, which
+-- can be a wireless device or a wireless gateway.
+newGetResourcePosition ::
+  -- | 'resourceIdentifier'
+  Prelude.Text ->
+  -- | 'resourceType'
+  PositionResourceType ->
+  GetResourcePosition
+newGetResourcePosition
+  pResourceIdentifier_
+  pResourceType_ =
+    GetResourcePosition'
+      { resourceIdentifier =
+          pResourceIdentifier_,
+        resourceType = pResourceType_
+      }
+
+-- | The identifier of the resource for which position information is
+-- retrieved. It can be the wireless device ID or the wireless gateway ID
+-- depending on the resource type.
+getResourcePosition_resourceIdentifier :: Lens.Lens' GetResourcePosition Prelude.Text
+getResourcePosition_resourceIdentifier = Lens.lens (\GetResourcePosition' {resourceIdentifier} -> resourceIdentifier) (\s@GetResourcePosition' {} a -> s {resourceIdentifier = a} :: GetResourcePosition)
+
+-- | The type of resource for which position information is retrieved, which
+-- can be a wireless device or a wireless gateway.
+getResourcePosition_resourceType :: Lens.Lens' GetResourcePosition PositionResourceType
+getResourcePosition_resourceType = Lens.lens (\GetResourcePosition' {resourceType} -> resourceType) (\s@GetResourcePosition' {} a -> s {resourceType = a} :: GetResourcePosition)
+
+instance Core.AWSRequest GetResourcePosition where
+  type
+    AWSResponse GetResourcePosition =
+      GetResourcePositionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          GetResourcePositionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetResourcePosition where
+  hashWithSalt _salt GetResourcePosition' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceIdentifier
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData GetResourcePosition where
+  rnf GetResourcePosition' {..} =
+    Prelude.rnf resourceIdentifier
+      `Prelude.seq` Prelude.rnf resourceType
+
+instance Data.ToHeaders GetResourcePosition where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetResourcePosition where
+  toPath GetResourcePosition' {..} =
+    Prelude.mconcat
+      [ "/resource-positions/",
+        Data.toBS resourceIdentifier
+      ]
+
+instance Data.ToQuery GetResourcePosition where
+  toQuery GetResourcePosition' {..} =
+    Prelude.mconcat
+      ["resourceType" Data.=: resourceType]
+
+-- | /See:/ 'newGetResourcePositionResponse' smart constructor.
+data GetResourcePositionResponse = GetResourcePositionResponse'
+  { -- | The position information of the resource, displayed as a JSON payload.
+    -- The payload uses the GeoJSON format, which a format that\'s used to
+    -- encode geographic data structures. For more information, see
+    -- <https://geojson.org/ GeoJSON>.
+    geoJsonPayload :: Prelude.Maybe Prelude.ByteString,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetResourcePositionResponse' 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:
+--
+-- 'geoJsonPayload', 'getResourcePositionResponse_geoJsonPayload' - The position information of the resource, displayed as a JSON payload.
+-- The payload uses the GeoJSON format, which a format that\'s used to
+-- encode geographic data structures. For more information, see
+-- <https://geojson.org/ GeoJSON>.
+--
+-- 'httpStatus', 'getResourcePositionResponse_httpStatus' - The response's http status code.
+newGetResourcePositionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetResourcePositionResponse
+newGetResourcePositionResponse pHttpStatus_ =
+  GetResourcePositionResponse'
+    { geoJsonPayload =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The position information of the resource, displayed as a JSON payload.
+-- The payload uses the GeoJSON format, which a format that\'s used to
+-- encode geographic data structures. For more information, see
+-- <https://geojson.org/ GeoJSON>.
+getResourcePositionResponse_geoJsonPayload :: Lens.Lens' GetResourcePositionResponse (Prelude.Maybe Prelude.ByteString)
+getResourcePositionResponse_geoJsonPayload = Lens.lens (\GetResourcePositionResponse' {geoJsonPayload} -> geoJsonPayload) (\s@GetResourcePositionResponse' {} a -> s {geoJsonPayload = a} :: GetResourcePositionResponse)
+
+-- | The response's http status code.
+getResourcePositionResponse_httpStatus :: Lens.Lens' GetResourcePositionResponse Prelude.Int
+getResourcePositionResponse_httpStatus = Lens.lens (\GetResourcePositionResponse' {httpStatus} -> httpStatus) (\s@GetResourcePositionResponse' {} a -> s {httpStatus = a} :: GetResourcePositionResponse)
+
+instance Prelude.NFData GetResourcePositionResponse where
+  rnf GetResourcePositionResponse' {..} =
+    Prelude.rnf geoJsonPayload
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetServiceEndpoint.hs b/gen/Amazonka/IoTWireless/GetServiceEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetServiceEndpoint.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.IoTWireless.GetServiceEndpoint
+-- 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 account-specific endpoint for Configuration and Update Server
+-- (CUPS) protocol or LoRaWAN Network Server (LNS) connections.
+module Amazonka.IoTWireless.GetServiceEndpoint
+  ( -- * Creating a Request
+    GetServiceEndpoint (..),
+    newGetServiceEndpoint,
+
+    -- * Request Lenses
+    getServiceEndpoint_serviceType,
+
+    -- * Destructuring the Response
+    GetServiceEndpointResponse (..),
+    newGetServiceEndpointResponse,
+
+    -- * Response Lenses
+    getServiceEndpointResponse_serverTrust,
+    getServiceEndpointResponse_serviceEndpoint,
+    getServiceEndpointResponse_serviceType,
+    getServiceEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetServiceEndpoint' smart constructor.
+data GetServiceEndpoint = GetServiceEndpoint'
+  { -- | The service type for which to get endpoint information about. Can be
+    -- @CUPS@ for the Configuration and Update Server endpoint, or @LNS@ for
+    -- the LoRaWAN Network Server endpoint or @CLAIM@ for the global endpoint.
+    serviceType :: Prelude.Maybe WirelessGatewayServiceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetServiceEndpoint' 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:
+--
+-- 'serviceType', 'getServiceEndpoint_serviceType' - The service type for which to get endpoint information about. Can be
+-- @CUPS@ for the Configuration and Update Server endpoint, or @LNS@ for
+-- the LoRaWAN Network Server endpoint or @CLAIM@ for the global endpoint.
+newGetServiceEndpoint ::
+  GetServiceEndpoint
+newGetServiceEndpoint =
+  GetServiceEndpoint' {serviceType = Prelude.Nothing}
+
+-- | The service type for which to get endpoint information about. Can be
+-- @CUPS@ for the Configuration and Update Server endpoint, or @LNS@ for
+-- the LoRaWAN Network Server endpoint or @CLAIM@ for the global endpoint.
+getServiceEndpoint_serviceType :: Lens.Lens' GetServiceEndpoint (Prelude.Maybe WirelessGatewayServiceType)
+getServiceEndpoint_serviceType = Lens.lens (\GetServiceEndpoint' {serviceType} -> serviceType) (\s@GetServiceEndpoint' {} a -> s {serviceType = a} :: GetServiceEndpoint)
+
+instance Core.AWSRequest GetServiceEndpoint where
+  type
+    AWSResponse GetServiceEndpoint =
+      GetServiceEndpointResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetServiceEndpointResponse'
+            Prelude.<$> (x Data..?> "ServerTrust")
+            Prelude.<*> (x Data..?> "ServiceEndpoint")
+            Prelude.<*> (x Data..?> "ServiceType")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetServiceEndpoint where
+  hashWithSalt _salt GetServiceEndpoint' {..} =
+    _salt `Prelude.hashWithSalt` serviceType
+
+instance Prelude.NFData GetServiceEndpoint where
+  rnf GetServiceEndpoint' {..} = Prelude.rnf serviceType
+
+instance Data.ToHeaders GetServiceEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetServiceEndpoint where
+  toPath = Prelude.const "/service-endpoint"
+
+instance Data.ToQuery GetServiceEndpoint where
+  toQuery GetServiceEndpoint' {..} =
+    Prelude.mconcat ["serviceType" Data.=: serviceType]
+
+-- | /See:/ 'newGetServiceEndpointResponse' smart constructor.
+data GetServiceEndpointResponse = GetServiceEndpointResponse'
+  { -- | The Root CA of the server trust certificate.
+    serverTrust :: Prelude.Maybe Prelude.Text,
+    -- | The service endpoint value.
+    serviceEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The endpoint\'s service type.
+    serviceType :: Prelude.Maybe WirelessGatewayServiceType,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetServiceEndpointResponse' 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:
+--
+-- 'serverTrust', 'getServiceEndpointResponse_serverTrust' - The Root CA of the server trust certificate.
+--
+-- 'serviceEndpoint', 'getServiceEndpointResponse_serviceEndpoint' - The service endpoint value.
+--
+-- 'serviceType', 'getServiceEndpointResponse_serviceType' - The endpoint\'s service type.
+--
+-- 'httpStatus', 'getServiceEndpointResponse_httpStatus' - The response's http status code.
+newGetServiceEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetServiceEndpointResponse
+newGetServiceEndpointResponse pHttpStatus_ =
+  GetServiceEndpointResponse'
+    { serverTrust =
+        Prelude.Nothing,
+      serviceEndpoint = Prelude.Nothing,
+      serviceType = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Root CA of the server trust certificate.
+getServiceEndpointResponse_serverTrust :: Lens.Lens' GetServiceEndpointResponse (Prelude.Maybe Prelude.Text)
+getServiceEndpointResponse_serverTrust = Lens.lens (\GetServiceEndpointResponse' {serverTrust} -> serverTrust) (\s@GetServiceEndpointResponse' {} a -> s {serverTrust = a} :: GetServiceEndpointResponse)
+
+-- | The service endpoint value.
+getServiceEndpointResponse_serviceEndpoint :: Lens.Lens' GetServiceEndpointResponse (Prelude.Maybe Prelude.Text)
+getServiceEndpointResponse_serviceEndpoint = Lens.lens (\GetServiceEndpointResponse' {serviceEndpoint} -> serviceEndpoint) (\s@GetServiceEndpointResponse' {} a -> s {serviceEndpoint = a} :: GetServiceEndpointResponse)
+
+-- | The endpoint\'s service type.
+getServiceEndpointResponse_serviceType :: Lens.Lens' GetServiceEndpointResponse (Prelude.Maybe WirelessGatewayServiceType)
+getServiceEndpointResponse_serviceType = Lens.lens (\GetServiceEndpointResponse' {serviceType} -> serviceType) (\s@GetServiceEndpointResponse' {} a -> s {serviceType = a} :: GetServiceEndpointResponse)
+
+-- | The response's http status code.
+getServiceEndpointResponse_httpStatus :: Lens.Lens' GetServiceEndpointResponse Prelude.Int
+getServiceEndpointResponse_httpStatus = Lens.lens (\GetServiceEndpointResponse' {httpStatus} -> httpStatus) (\s@GetServiceEndpointResponse' {} a -> s {httpStatus = a} :: GetServiceEndpointResponse)
+
+instance Prelude.NFData GetServiceEndpointResponse where
+  rnf GetServiceEndpointResponse' {..} =
+    Prelude.rnf serverTrust
+      `Prelude.seq` Prelude.rnf serviceEndpoint
+      `Prelude.seq` Prelude.rnf serviceType
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetServiceProfile.hs b/gen/Amazonka/IoTWireless/GetServiceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetServiceProfile.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.IoTWireless.GetServiceProfile
+-- 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 information about a service profile.
+module Amazonka.IoTWireless.GetServiceProfile
+  ( -- * Creating a Request
+    GetServiceProfile (..),
+    newGetServiceProfile,
+
+    -- * Request Lenses
+    getServiceProfile_id,
+
+    -- * Destructuring the Response
+    GetServiceProfileResponse (..),
+    newGetServiceProfileResponse,
+
+    -- * Response Lenses
+    getServiceProfileResponse_arn,
+    getServiceProfileResponse_id,
+    getServiceProfileResponse_loRaWAN,
+    getServiceProfileResponse_name,
+    getServiceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetServiceProfile' smart constructor.
+data GetServiceProfile = GetServiceProfile'
+  { -- | The ID of the resource to get.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetServiceProfile' 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:
+--
+-- 'id', 'getServiceProfile_id' - The ID of the resource to get.
+newGetServiceProfile ::
+  -- | 'id'
+  Prelude.Text ->
+  GetServiceProfile
+newGetServiceProfile pId_ =
+  GetServiceProfile' {id = pId_}
+
+-- | The ID of the resource to get.
+getServiceProfile_id :: Lens.Lens' GetServiceProfile Prelude.Text
+getServiceProfile_id = Lens.lens (\GetServiceProfile' {id} -> id) (\s@GetServiceProfile' {} a -> s {id = a} :: GetServiceProfile)
+
+instance Core.AWSRequest GetServiceProfile where
+  type
+    AWSResponse GetServiceProfile =
+      GetServiceProfileResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetServiceProfileResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "LoRaWAN")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetServiceProfile where
+  hashWithSalt _salt GetServiceProfile' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetServiceProfile where
+  rnf GetServiceProfile' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetServiceProfile where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetServiceProfile where
+  toPath GetServiceProfile' {..} =
+    Prelude.mconcat
+      ["/service-profiles/", Data.toBS id]
+
+instance Data.ToQuery GetServiceProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetServiceProfileResponse' smart constructor.
+data GetServiceProfileResponse = GetServiceProfileResponse'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the service profile.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Information about the service profile.
+    loRaWAN :: Prelude.Maybe LoRaWANGetServiceProfileInfo,
+    -- | The name of the resource.
+    name :: 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 'GetServiceProfileResponse' 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', 'getServiceProfileResponse_arn' - The Amazon Resource Name of the resource.
+--
+-- 'id', 'getServiceProfileResponse_id' - The ID of the service profile.
+--
+-- 'loRaWAN', 'getServiceProfileResponse_loRaWAN' - Information about the service profile.
+--
+-- 'name', 'getServiceProfileResponse_name' - The name of the resource.
+--
+-- 'httpStatus', 'getServiceProfileResponse_httpStatus' - The response's http status code.
+newGetServiceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetServiceProfileResponse
+newGetServiceProfileResponse pHttpStatus_ =
+  GetServiceProfileResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the resource.
+getServiceProfileResponse_arn :: Lens.Lens' GetServiceProfileResponse (Prelude.Maybe Prelude.Text)
+getServiceProfileResponse_arn = Lens.lens (\GetServiceProfileResponse' {arn} -> arn) (\s@GetServiceProfileResponse' {} a -> s {arn = a} :: GetServiceProfileResponse)
+
+-- | The ID of the service profile.
+getServiceProfileResponse_id :: Lens.Lens' GetServiceProfileResponse (Prelude.Maybe Prelude.Text)
+getServiceProfileResponse_id = Lens.lens (\GetServiceProfileResponse' {id} -> id) (\s@GetServiceProfileResponse' {} a -> s {id = a} :: GetServiceProfileResponse)
+
+-- | Information about the service profile.
+getServiceProfileResponse_loRaWAN :: Lens.Lens' GetServiceProfileResponse (Prelude.Maybe LoRaWANGetServiceProfileInfo)
+getServiceProfileResponse_loRaWAN = Lens.lens (\GetServiceProfileResponse' {loRaWAN} -> loRaWAN) (\s@GetServiceProfileResponse' {} a -> s {loRaWAN = a} :: GetServiceProfileResponse)
+
+-- | The name of the resource.
+getServiceProfileResponse_name :: Lens.Lens' GetServiceProfileResponse (Prelude.Maybe Prelude.Text)
+getServiceProfileResponse_name = Lens.lens (\GetServiceProfileResponse' {name} -> name) (\s@GetServiceProfileResponse' {} a -> s {name = a} :: GetServiceProfileResponse)
+
+-- | The response's http status code.
+getServiceProfileResponse_httpStatus :: Lens.Lens' GetServiceProfileResponse Prelude.Int
+getServiceProfileResponse_httpStatus = Lens.lens (\GetServiceProfileResponse' {httpStatus} -> httpStatus) (\s@GetServiceProfileResponse' {} a -> s {httpStatus = a} :: GetServiceProfileResponse)
+
+instance Prelude.NFData GetServiceProfileResponse where
+  rnf GetServiceProfileResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetWirelessDevice.hs b/gen/Amazonka/IoTWireless/GetWirelessDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetWirelessDevice.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.IoTWireless.GetWirelessDevice
+-- 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 information about a wireless device.
+module Amazonka.IoTWireless.GetWirelessDevice
+  ( -- * Creating a Request
+    GetWirelessDevice (..),
+    newGetWirelessDevice,
+
+    -- * Request Lenses
+    getWirelessDevice_identifier,
+    getWirelessDevice_identifierType,
+
+    -- * Destructuring the Response
+    GetWirelessDeviceResponse (..),
+    newGetWirelessDeviceResponse,
+
+    -- * Response Lenses
+    getWirelessDeviceResponse_arn,
+    getWirelessDeviceResponse_description,
+    getWirelessDeviceResponse_destinationName,
+    getWirelessDeviceResponse_id,
+    getWirelessDeviceResponse_loRaWAN,
+    getWirelessDeviceResponse_name,
+    getWirelessDeviceResponse_positioning,
+    getWirelessDeviceResponse_sidewalk,
+    getWirelessDeviceResponse_thingArn,
+    getWirelessDeviceResponse_thingName,
+    getWirelessDeviceResponse_type,
+    getWirelessDeviceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWirelessDevice' smart constructor.
+data GetWirelessDevice = GetWirelessDevice'
+  { -- | The identifier of the wireless device to get.
+    identifier :: Prelude.Text,
+    -- | The type of identifier used in @identifier@.
+    identifierType :: WirelessDeviceIdType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessDevice' 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:
+--
+-- 'identifier', 'getWirelessDevice_identifier' - The identifier of the wireless device to get.
+--
+-- 'identifierType', 'getWirelessDevice_identifierType' - The type of identifier used in @identifier@.
+newGetWirelessDevice ::
+  -- | 'identifier'
+  Prelude.Text ->
+  -- | 'identifierType'
+  WirelessDeviceIdType ->
+  GetWirelessDevice
+newGetWirelessDevice pIdentifier_ pIdentifierType_ =
+  GetWirelessDevice'
+    { identifier = pIdentifier_,
+      identifierType = pIdentifierType_
+    }
+
+-- | The identifier of the wireless device to get.
+getWirelessDevice_identifier :: Lens.Lens' GetWirelessDevice Prelude.Text
+getWirelessDevice_identifier = Lens.lens (\GetWirelessDevice' {identifier} -> identifier) (\s@GetWirelessDevice' {} a -> s {identifier = a} :: GetWirelessDevice)
+
+-- | The type of identifier used in @identifier@.
+getWirelessDevice_identifierType :: Lens.Lens' GetWirelessDevice WirelessDeviceIdType
+getWirelessDevice_identifierType = Lens.lens (\GetWirelessDevice' {identifierType} -> identifierType) (\s@GetWirelessDevice' {} a -> s {identifierType = a} :: GetWirelessDevice)
+
+instance Core.AWSRequest GetWirelessDevice where
+  type
+    AWSResponse GetWirelessDevice =
+      GetWirelessDeviceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWirelessDeviceResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "DestinationName")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "LoRaWAN")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Positioning")
+            Prelude.<*> (x Data..?> "Sidewalk")
+            Prelude.<*> (x Data..?> "ThingArn")
+            Prelude.<*> (x Data..?> "ThingName")
+            Prelude.<*> (x Data..?> "Type")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWirelessDevice where
+  hashWithSalt _salt GetWirelessDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` identifier
+      `Prelude.hashWithSalt` identifierType
+
+instance Prelude.NFData GetWirelessDevice where
+  rnf GetWirelessDevice' {..} =
+    Prelude.rnf identifier
+      `Prelude.seq` Prelude.rnf identifierType
+
+instance Data.ToHeaders GetWirelessDevice where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetWirelessDevice where
+  toPath GetWirelessDevice' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS identifier]
+
+instance Data.ToQuery GetWirelessDevice where
+  toQuery GetWirelessDevice' {..} =
+    Prelude.mconcat
+      ["identifierType" Data.=: identifierType]
+
+-- | /See:/ 'newGetWirelessDeviceResponse' smart constructor.
+data GetWirelessDeviceResponse = GetWirelessDeviceResponse'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the destination to which the device is assigned.
+    destinationName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the wireless device.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Information about the wireless device.
+    loRaWAN :: Prelude.Maybe LoRaWANDevice,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | FPort values for the GNSS, stream, and ClockSync functions of the
+    -- positioning information.
+    positioning :: Prelude.Maybe PositioningConfigStatus,
+    -- | Sidewalk device object.
+    sidewalk :: Prelude.Maybe SidewalkDevice,
+    -- | The ARN of the thing associated with the wireless device.
+    thingArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the thing associated with the wireless device. The value is
+    -- empty if a thing isn\'t associated with the device.
+    thingName :: Prelude.Maybe Prelude.Text,
+    -- | The wireless device type.
+    type' :: Prelude.Maybe WirelessDeviceType,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessDeviceResponse' 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', 'getWirelessDeviceResponse_arn' - The Amazon Resource Name of the resource.
+--
+-- 'description', 'getWirelessDeviceResponse_description' - The description of the resource.
+--
+-- 'destinationName', 'getWirelessDeviceResponse_destinationName' - The name of the destination to which the device is assigned.
+--
+-- 'id', 'getWirelessDeviceResponse_id' - The ID of the wireless device.
+--
+-- 'loRaWAN', 'getWirelessDeviceResponse_loRaWAN' - Information about the wireless device.
+--
+-- 'name', 'getWirelessDeviceResponse_name' - The name of the resource.
+--
+-- 'positioning', 'getWirelessDeviceResponse_positioning' - FPort values for the GNSS, stream, and ClockSync functions of the
+-- positioning information.
+--
+-- 'sidewalk', 'getWirelessDeviceResponse_sidewalk' - Sidewalk device object.
+--
+-- 'thingArn', 'getWirelessDeviceResponse_thingArn' - The ARN of the thing associated with the wireless device.
+--
+-- 'thingName', 'getWirelessDeviceResponse_thingName' - The name of the thing associated with the wireless device. The value is
+-- empty if a thing isn\'t associated with the device.
+--
+-- 'type'', 'getWirelessDeviceResponse_type' - The wireless device type.
+--
+-- 'httpStatus', 'getWirelessDeviceResponse_httpStatus' - The response's http status code.
+newGetWirelessDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWirelessDeviceResponse
+newGetWirelessDeviceResponse pHttpStatus_ =
+  GetWirelessDeviceResponse'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      destinationName = Prelude.Nothing,
+      id = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      positioning = Prelude.Nothing,
+      sidewalk = Prelude.Nothing,
+      thingArn = Prelude.Nothing,
+      thingName = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the resource.
+getWirelessDeviceResponse_arn :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceResponse_arn = Lens.lens (\GetWirelessDeviceResponse' {arn} -> arn) (\s@GetWirelessDeviceResponse' {} a -> s {arn = a} :: GetWirelessDeviceResponse)
+
+-- | The description of the resource.
+getWirelessDeviceResponse_description :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceResponse_description = Lens.lens (\GetWirelessDeviceResponse' {description} -> description) (\s@GetWirelessDeviceResponse' {} a -> s {description = a} :: GetWirelessDeviceResponse)
+
+-- | The name of the destination to which the device is assigned.
+getWirelessDeviceResponse_destinationName :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceResponse_destinationName = Lens.lens (\GetWirelessDeviceResponse' {destinationName} -> destinationName) (\s@GetWirelessDeviceResponse' {} a -> s {destinationName = a} :: GetWirelessDeviceResponse)
+
+-- | The ID of the wireless device.
+getWirelessDeviceResponse_id :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceResponse_id = Lens.lens (\GetWirelessDeviceResponse' {id} -> id) (\s@GetWirelessDeviceResponse' {} a -> s {id = a} :: GetWirelessDeviceResponse)
+
+-- | Information about the wireless device.
+getWirelessDeviceResponse_loRaWAN :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe LoRaWANDevice)
+getWirelessDeviceResponse_loRaWAN = Lens.lens (\GetWirelessDeviceResponse' {loRaWAN} -> loRaWAN) (\s@GetWirelessDeviceResponse' {} a -> s {loRaWAN = a} :: GetWirelessDeviceResponse)
+
+-- | The name of the resource.
+getWirelessDeviceResponse_name :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceResponse_name = Lens.lens (\GetWirelessDeviceResponse' {name} -> name) (\s@GetWirelessDeviceResponse' {} a -> s {name = a} :: GetWirelessDeviceResponse)
+
+-- | FPort values for the GNSS, stream, and ClockSync functions of the
+-- positioning information.
+getWirelessDeviceResponse_positioning :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe PositioningConfigStatus)
+getWirelessDeviceResponse_positioning = Lens.lens (\GetWirelessDeviceResponse' {positioning} -> positioning) (\s@GetWirelessDeviceResponse' {} a -> s {positioning = a} :: GetWirelessDeviceResponse)
+
+-- | Sidewalk device object.
+getWirelessDeviceResponse_sidewalk :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe SidewalkDevice)
+getWirelessDeviceResponse_sidewalk = Lens.lens (\GetWirelessDeviceResponse' {sidewalk} -> sidewalk) (\s@GetWirelessDeviceResponse' {} a -> s {sidewalk = a} :: GetWirelessDeviceResponse)
+
+-- | The ARN of the thing associated with the wireless device.
+getWirelessDeviceResponse_thingArn :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceResponse_thingArn = Lens.lens (\GetWirelessDeviceResponse' {thingArn} -> thingArn) (\s@GetWirelessDeviceResponse' {} a -> s {thingArn = a} :: GetWirelessDeviceResponse)
+
+-- | The name of the thing associated with the wireless device. The value is
+-- empty if a thing isn\'t associated with the device.
+getWirelessDeviceResponse_thingName :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceResponse_thingName = Lens.lens (\GetWirelessDeviceResponse' {thingName} -> thingName) (\s@GetWirelessDeviceResponse' {} a -> s {thingName = a} :: GetWirelessDeviceResponse)
+
+-- | The wireless device type.
+getWirelessDeviceResponse_type :: Lens.Lens' GetWirelessDeviceResponse (Prelude.Maybe WirelessDeviceType)
+getWirelessDeviceResponse_type = Lens.lens (\GetWirelessDeviceResponse' {type'} -> type') (\s@GetWirelessDeviceResponse' {} a -> s {type' = a} :: GetWirelessDeviceResponse)
+
+-- | The response's http status code.
+getWirelessDeviceResponse_httpStatus :: Lens.Lens' GetWirelessDeviceResponse Prelude.Int
+getWirelessDeviceResponse_httpStatus = Lens.lens (\GetWirelessDeviceResponse' {httpStatus} -> httpStatus) (\s@GetWirelessDeviceResponse' {} a -> s {httpStatus = a} :: GetWirelessDeviceResponse)
+
+instance Prelude.NFData GetWirelessDeviceResponse where
+  rnf GetWirelessDeviceResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationName
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf positioning
+      `Prelude.seq` Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf thingArn
+      `Prelude.seq` Prelude.rnf thingName
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetWirelessDeviceStatistics.hs b/gen/Amazonka/IoTWireless/GetWirelessDeviceStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetWirelessDeviceStatistics.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.IoTWireless.GetWirelessDeviceStatistics
+-- 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 operating information about a wireless device.
+module Amazonka.IoTWireless.GetWirelessDeviceStatistics
+  ( -- * Creating a Request
+    GetWirelessDeviceStatistics (..),
+    newGetWirelessDeviceStatistics,
+
+    -- * Request Lenses
+    getWirelessDeviceStatistics_wirelessDeviceId,
+
+    -- * Destructuring the Response
+    GetWirelessDeviceStatisticsResponse (..),
+    newGetWirelessDeviceStatisticsResponse,
+
+    -- * Response Lenses
+    getWirelessDeviceStatisticsResponse_lastUplinkReceivedAt,
+    getWirelessDeviceStatisticsResponse_loRaWAN,
+    getWirelessDeviceStatisticsResponse_sidewalk,
+    getWirelessDeviceStatisticsResponse_wirelessDeviceId,
+    getWirelessDeviceStatisticsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWirelessDeviceStatistics' smart constructor.
+data GetWirelessDeviceStatistics = GetWirelessDeviceStatistics'
+  { -- | The ID of the wireless device for which to get the data.
+    wirelessDeviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessDeviceStatistics' 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:
+--
+-- 'wirelessDeviceId', 'getWirelessDeviceStatistics_wirelessDeviceId' - The ID of the wireless device for which to get the data.
+newGetWirelessDeviceStatistics ::
+  -- | 'wirelessDeviceId'
+  Prelude.Text ->
+  GetWirelessDeviceStatistics
+newGetWirelessDeviceStatistics pWirelessDeviceId_ =
+  GetWirelessDeviceStatistics'
+    { wirelessDeviceId =
+        pWirelessDeviceId_
+    }
+
+-- | The ID of the wireless device for which to get the data.
+getWirelessDeviceStatistics_wirelessDeviceId :: Lens.Lens' GetWirelessDeviceStatistics Prelude.Text
+getWirelessDeviceStatistics_wirelessDeviceId = Lens.lens (\GetWirelessDeviceStatistics' {wirelessDeviceId} -> wirelessDeviceId) (\s@GetWirelessDeviceStatistics' {} a -> s {wirelessDeviceId = a} :: GetWirelessDeviceStatistics)
+
+instance Core.AWSRequest GetWirelessDeviceStatistics where
+  type
+    AWSResponse GetWirelessDeviceStatistics =
+      GetWirelessDeviceStatisticsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWirelessDeviceStatisticsResponse'
+            Prelude.<$> (x Data..?> "LastUplinkReceivedAt")
+            Prelude.<*> (x Data..?> "LoRaWAN")
+            Prelude.<*> (x Data..?> "Sidewalk")
+            Prelude.<*> (x Data..?> "WirelessDeviceId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWirelessDeviceStatistics where
+  hashWithSalt _salt GetWirelessDeviceStatistics' {..} =
+    _salt `Prelude.hashWithSalt` wirelessDeviceId
+
+instance Prelude.NFData GetWirelessDeviceStatistics where
+  rnf GetWirelessDeviceStatistics' {..} =
+    Prelude.rnf wirelessDeviceId
+
+instance Data.ToHeaders GetWirelessDeviceStatistics where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetWirelessDeviceStatistics where
+  toPath GetWirelessDeviceStatistics' {..} =
+    Prelude.mconcat
+      [ "/wireless-devices/",
+        Data.toBS wirelessDeviceId,
+        "/statistics"
+      ]
+
+instance Data.ToQuery GetWirelessDeviceStatistics where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWirelessDeviceStatisticsResponse' smart constructor.
+data GetWirelessDeviceStatisticsResponse = GetWirelessDeviceStatisticsResponse'
+  { -- | The date and time when the most recent uplink was received.
+    lastUplinkReceivedAt :: Prelude.Maybe Prelude.Text,
+    -- | Information about the wireless device\'s operations.
+    loRaWAN :: Prelude.Maybe LoRaWANDeviceMetadata,
+    -- | MetaData for Sidewalk device.
+    sidewalk :: Prelude.Maybe SidewalkDeviceMetadata,
+    -- | The ID of the wireless device.
+    wirelessDeviceId :: 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 'GetWirelessDeviceStatisticsResponse' 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:
+--
+-- 'lastUplinkReceivedAt', 'getWirelessDeviceStatisticsResponse_lastUplinkReceivedAt' - The date and time when the most recent uplink was received.
+--
+-- 'loRaWAN', 'getWirelessDeviceStatisticsResponse_loRaWAN' - Information about the wireless device\'s operations.
+--
+-- 'sidewalk', 'getWirelessDeviceStatisticsResponse_sidewalk' - MetaData for Sidewalk device.
+--
+-- 'wirelessDeviceId', 'getWirelessDeviceStatisticsResponse_wirelessDeviceId' - The ID of the wireless device.
+--
+-- 'httpStatus', 'getWirelessDeviceStatisticsResponse_httpStatus' - The response's http status code.
+newGetWirelessDeviceStatisticsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWirelessDeviceStatisticsResponse
+newGetWirelessDeviceStatisticsResponse pHttpStatus_ =
+  GetWirelessDeviceStatisticsResponse'
+    { lastUplinkReceivedAt =
+        Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      sidewalk = Prelude.Nothing,
+      wirelessDeviceId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time when the most recent uplink was received.
+getWirelessDeviceStatisticsResponse_lastUplinkReceivedAt :: Lens.Lens' GetWirelessDeviceStatisticsResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceStatisticsResponse_lastUplinkReceivedAt = Lens.lens (\GetWirelessDeviceStatisticsResponse' {lastUplinkReceivedAt} -> lastUplinkReceivedAt) (\s@GetWirelessDeviceStatisticsResponse' {} a -> s {lastUplinkReceivedAt = a} :: GetWirelessDeviceStatisticsResponse)
+
+-- | Information about the wireless device\'s operations.
+getWirelessDeviceStatisticsResponse_loRaWAN :: Lens.Lens' GetWirelessDeviceStatisticsResponse (Prelude.Maybe LoRaWANDeviceMetadata)
+getWirelessDeviceStatisticsResponse_loRaWAN = Lens.lens (\GetWirelessDeviceStatisticsResponse' {loRaWAN} -> loRaWAN) (\s@GetWirelessDeviceStatisticsResponse' {} a -> s {loRaWAN = a} :: GetWirelessDeviceStatisticsResponse)
+
+-- | MetaData for Sidewalk device.
+getWirelessDeviceStatisticsResponse_sidewalk :: Lens.Lens' GetWirelessDeviceStatisticsResponse (Prelude.Maybe SidewalkDeviceMetadata)
+getWirelessDeviceStatisticsResponse_sidewalk = Lens.lens (\GetWirelessDeviceStatisticsResponse' {sidewalk} -> sidewalk) (\s@GetWirelessDeviceStatisticsResponse' {} a -> s {sidewalk = a} :: GetWirelessDeviceStatisticsResponse)
+
+-- | The ID of the wireless device.
+getWirelessDeviceStatisticsResponse_wirelessDeviceId :: Lens.Lens' GetWirelessDeviceStatisticsResponse (Prelude.Maybe Prelude.Text)
+getWirelessDeviceStatisticsResponse_wirelessDeviceId = Lens.lens (\GetWirelessDeviceStatisticsResponse' {wirelessDeviceId} -> wirelessDeviceId) (\s@GetWirelessDeviceStatisticsResponse' {} a -> s {wirelessDeviceId = a} :: GetWirelessDeviceStatisticsResponse)
+
+-- | The response's http status code.
+getWirelessDeviceStatisticsResponse_httpStatus :: Lens.Lens' GetWirelessDeviceStatisticsResponse Prelude.Int
+getWirelessDeviceStatisticsResponse_httpStatus = Lens.lens (\GetWirelessDeviceStatisticsResponse' {httpStatus} -> httpStatus) (\s@GetWirelessDeviceStatisticsResponse' {} a -> s {httpStatus = a} :: GetWirelessDeviceStatisticsResponse)
+
+instance
+  Prelude.NFData
+    GetWirelessDeviceStatisticsResponse
+  where
+  rnf GetWirelessDeviceStatisticsResponse' {..} =
+    Prelude.rnf lastUplinkReceivedAt
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf wirelessDeviceId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetWirelessGateway.hs b/gen/Amazonka/IoTWireless/GetWirelessGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetWirelessGateway.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.IoTWireless.GetWirelessGateway
+-- 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 information about a wireless gateway.
+module Amazonka.IoTWireless.GetWirelessGateway
+  ( -- * Creating a Request
+    GetWirelessGateway (..),
+    newGetWirelessGateway,
+
+    -- * Request Lenses
+    getWirelessGateway_identifier,
+    getWirelessGateway_identifierType,
+
+    -- * Destructuring the Response
+    GetWirelessGatewayResponse (..),
+    newGetWirelessGatewayResponse,
+
+    -- * Response Lenses
+    getWirelessGatewayResponse_arn,
+    getWirelessGatewayResponse_description,
+    getWirelessGatewayResponse_id,
+    getWirelessGatewayResponse_loRaWAN,
+    getWirelessGatewayResponse_name,
+    getWirelessGatewayResponse_thingArn,
+    getWirelessGatewayResponse_thingName,
+    getWirelessGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWirelessGateway' smart constructor.
+data GetWirelessGateway = GetWirelessGateway'
+  { -- | The identifier of the wireless gateway to get.
+    identifier :: Prelude.Text,
+    -- | The type of identifier used in @identifier@.
+    identifierType :: WirelessGatewayIdType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessGateway' 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:
+--
+-- 'identifier', 'getWirelessGateway_identifier' - The identifier of the wireless gateway to get.
+--
+-- 'identifierType', 'getWirelessGateway_identifierType' - The type of identifier used in @identifier@.
+newGetWirelessGateway ::
+  -- | 'identifier'
+  Prelude.Text ->
+  -- | 'identifierType'
+  WirelessGatewayIdType ->
+  GetWirelessGateway
+newGetWirelessGateway pIdentifier_ pIdentifierType_ =
+  GetWirelessGateway'
+    { identifier = pIdentifier_,
+      identifierType = pIdentifierType_
+    }
+
+-- | The identifier of the wireless gateway to get.
+getWirelessGateway_identifier :: Lens.Lens' GetWirelessGateway Prelude.Text
+getWirelessGateway_identifier = Lens.lens (\GetWirelessGateway' {identifier} -> identifier) (\s@GetWirelessGateway' {} a -> s {identifier = a} :: GetWirelessGateway)
+
+-- | The type of identifier used in @identifier@.
+getWirelessGateway_identifierType :: Lens.Lens' GetWirelessGateway WirelessGatewayIdType
+getWirelessGateway_identifierType = Lens.lens (\GetWirelessGateway' {identifierType} -> identifierType) (\s@GetWirelessGateway' {} a -> s {identifierType = a} :: GetWirelessGateway)
+
+instance Core.AWSRequest GetWirelessGateway where
+  type
+    AWSResponse GetWirelessGateway =
+      GetWirelessGatewayResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWirelessGatewayResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "LoRaWAN")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "ThingArn")
+            Prelude.<*> (x Data..?> "ThingName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWirelessGateway where
+  hashWithSalt _salt GetWirelessGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` identifier
+      `Prelude.hashWithSalt` identifierType
+
+instance Prelude.NFData GetWirelessGateway where
+  rnf GetWirelessGateway' {..} =
+    Prelude.rnf identifier
+      `Prelude.seq` Prelude.rnf identifierType
+
+instance Data.ToHeaders GetWirelessGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetWirelessGateway where
+  toPath GetWirelessGateway' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS identifier]
+
+instance Data.ToQuery GetWirelessGateway where
+  toQuery GetWirelessGateway' {..} =
+    Prelude.mconcat
+      ["identifierType" Data.=: identifierType]
+
+-- | /See:/ 'newGetWirelessGatewayResponse' smart constructor.
+data GetWirelessGatewayResponse = GetWirelessGatewayResponse'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the wireless gateway.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | Information about the wireless gateway.
+    loRaWAN :: Prelude.Maybe LoRaWANGateway,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the thing associated with the wireless gateway.
+    thingArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the thing associated with the wireless gateway. The value is
+    -- empty if a thing isn\'t associated with the gateway.
+    thingName :: 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 'GetWirelessGatewayResponse' 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', 'getWirelessGatewayResponse_arn' - The Amazon Resource Name of the resource.
+--
+-- 'description', 'getWirelessGatewayResponse_description' - The description of the resource.
+--
+-- 'id', 'getWirelessGatewayResponse_id' - The ID of the wireless gateway.
+--
+-- 'loRaWAN', 'getWirelessGatewayResponse_loRaWAN' - Information about the wireless gateway.
+--
+-- 'name', 'getWirelessGatewayResponse_name' - The name of the resource.
+--
+-- 'thingArn', 'getWirelessGatewayResponse_thingArn' - The ARN of the thing associated with the wireless gateway.
+--
+-- 'thingName', 'getWirelessGatewayResponse_thingName' - The name of the thing associated with the wireless gateway. The value is
+-- empty if a thing isn\'t associated with the gateway.
+--
+-- 'httpStatus', 'getWirelessGatewayResponse_httpStatus' - The response's http status code.
+newGetWirelessGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWirelessGatewayResponse
+newGetWirelessGatewayResponse pHttpStatus_ =
+  GetWirelessGatewayResponse'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      thingArn = Prelude.Nothing,
+      thingName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name of the resource.
+getWirelessGatewayResponse_arn :: Lens.Lens' GetWirelessGatewayResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayResponse_arn = Lens.lens (\GetWirelessGatewayResponse' {arn} -> arn) (\s@GetWirelessGatewayResponse' {} a -> s {arn = a} :: GetWirelessGatewayResponse)
+
+-- | The description of the resource.
+getWirelessGatewayResponse_description :: Lens.Lens' GetWirelessGatewayResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayResponse_description = Lens.lens (\GetWirelessGatewayResponse' {description} -> description) (\s@GetWirelessGatewayResponse' {} a -> s {description = a} :: GetWirelessGatewayResponse)
+
+-- | The ID of the wireless gateway.
+getWirelessGatewayResponse_id :: Lens.Lens' GetWirelessGatewayResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayResponse_id = Lens.lens (\GetWirelessGatewayResponse' {id} -> id) (\s@GetWirelessGatewayResponse' {} a -> s {id = a} :: GetWirelessGatewayResponse)
+
+-- | Information about the wireless gateway.
+getWirelessGatewayResponse_loRaWAN :: Lens.Lens' GetWirelessGatewayResponse (Prelude.Maybe LoRaWANGateway)
+getWirelessGatewayResponse_loRaWAN = Lens.lens (\GetWirelessGatewayResponse' {loRaWAN} -> loRaWAN) (\s@GetWirelessGatewayResponse' {} a -> s {loRaWAN = a} :: GetWirelessGatewayResponse)
+
+-- | The name of the resource.
+getWirelessGatewayResponse_name :: Lens.Lens' GetWirelessGatewayResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayResponse_name = Lens.lens (\GetWirelessGatewayResponse' {name} -> name) (\s@GetWirelessGatewayResponse' {} a -> s {name = a} :: GetWirelessGatewayResponse)
+
+-- | The ARN of the thing associated with the wireless gateway.
+getWirelessGatewayResponse_thingArn :: Lens.Lens' GetWirelessGatewayResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayResponse_thingArn = Lens.lens (\GetWirelessGatewayResponse' {thingArn} -> thingArn) (\s@GetWirelessGatewayResponse' {} a -> s {thingArn = a} :: GetWirelessGatewayResponse)
+
+-- | The name of the thing associated with the wireless gateway. The value is
+-- empty if a thing isn\'t associated with the gateway.
+getWirelessGatewayResponse_thingName :: Lens.Lens' GetWirelessGatewayResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayResponse_thingName = Lens.lens (\GetWirelessGatewayResponse' {thingName} -> thingName) (\s@GetWirelessGatewayResponse' {} a -> s {thingName = a} :: GetWirelessGatewayResponse)
+
+-- | The response's http status code.
+getWirelessGatewayResponse_httpStatus :: Lens.Lens' GetWirelessGatewayResponse Prelude.Int
+getWirelessGatewayResponse_httpStatus = Lens.lens (\GetWirelessGatewayResponse' {httpStatus} -> httpStatus) (\s@GetWirelessGatewayResponse' {} a -> s {httpStatus = a} :: GetWirelessGatewayResponse)
+
+instance Prelude.NFData GetWirelessGatewayResponse where
+  rnf GetWirelessGatewayResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf thingArn
+      `Prelude.seq` Prelude.rnf thingName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetWirelessGatewayCertificate.hs b/gen/Amazonka/IoTWireless/GetWirelessGatewayCertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetWirelessGatewayCertificate.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.IoTWireless.GetWirelessGatewayCertificate
+-- 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 ID of the certificate that is currently associated with a
+-- wireless gateway.
+module Amazonka.IoTWireless.GetWirelessGatewayCertificate
+  ( -- * Creating a Request
+    GetWirelessGatewayCertificate (..),
+    newGetWirelessGatewayCertificate,
+
+    -- * Request Lenses
+    getWirelessGatewayCertificate_id,
+
+    -- * Destructuring the Response
+    GetWirelessGatewayCertificateResponse (..),
+    newGetWirelessGatewayCertificateResponse,
+
+    -- * Response Lenses
+    getWirelessGatewayCertificateResponse_iotCertificateId,
+    getWirelessGatewayCertificateResponse_loRaWANNetworkServerCertificateId,
+    getWirelessGatewayCertificateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWirelessGatewayCertificate' smart constructor.
+data GetWirelessGatewayCertificate = GetWirelessGatewayCertificate'
+  { -- | The ID of the resource to get.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessGatewayCertificate' 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:
+--
+-- 'id', 'getWirelessGatewayCertificate_id' - The ID of the resource to get.
+newGetWirelessGatewayCertificate ::
+  -- | 'id'
+  Prelude.Text ->
+  GetWirelessGatewayCertificate
+newGetWirelessGatewayCertificate pId_ =
+  GetWirelessGatewayCertificate' {id = pId_}
+
+-- | The ID of the resource to get.
+getWirelessGatewayCertificate_id :: Lens.Lens' GetWirelessGatewayCertificate Prelude.Text
+getWirelessGatewayCertificate_id = Lens.lens (\GetWirelessGatewayCertificate' {id} -> id) (\s@GetWirelessGatewayCertificate' {} a -> s {id = a} :: GetWirelessGatewayCertificate)
+
+instance
+  Core.AWSRequest
+    GetWirelessGatewayCertificate
+  where
+  type
+    AWSResponse GetWirelessGatewayCertificate =
+      GetWirelessGatewayCertificateResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWirelessGatewayCertificateResponse'
+            Prelude.<$> (x Data..?> "IotCertificateId")
+            Prelude.<*> (x Data..?> "LoRaWANNetworkServerCertificateId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetWirelessGatewayCertificate
+  where
+  hashWithSalt _salt GetWirelessGatewayCertificate' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetWirelessGatewayCertificate where
+  rnf GetWirelessGatewayCertificate' {..} =
+    Prelude.rnf id
+
+instance Data.ToHeaders GetWirelessGatewayCertificate where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetWirelessGatewayCertificate where
+  toPath GetWirelessGatewayCertificate' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id, "/certificate"]
+
+instance Data.ToQuery GetWirelessGatewayCertificate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWirelessGatewayCertificateResponse' smart constructor.
+data GetWirelessGatewayCertificateResponse = GetWirelessGatewayCertificateResponse'
+  { -- | The ID of the certificate associated with the wireless gateway.
+    iotCertificateId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the certificate that is associated with the wireless gateway
+    -- and used for the LoRaWANNetworkServer endpoint.
+    loRaWANNetworkServerCertificateId :: 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 'GetWirelessGatewayCertificateResponse' 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:
+--
+-- 'iotCertificateId', 'getWirelessGatewayCertificateResponse_iotCertificateId' - The ID of the certificate associated with the wireless gateway.
+--
+-- 'loRaWANNetworkServerCertificateId', 'getWirelessGatewayCertificateResponse_loRaWANNetworkServerCertificateId' - The ID of the certificate that is associated with the wireless gateway
+-- and used for the LoRaWANNetworkServer endpoint.
+--
+-- 'httpStatus', 'getWirelessGatewayCertificateResponse_httpStatus' - The response's http status code.
+newGetWirelessGatewayCertificateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWirelessGatewayCertificateResponse
+newGetWirelessGatewayCertificateResponse pHttpStatus_ =
+  GetWirelessGatewayCertificateResponse'
+    { iotCertificateId =
+        Prelude.Nothing,
+      loRaWANNetworkServerCertificateId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the certificate associated with the wireless gateway.
+getWirelessGatewayCertificateResponse_iotCertificateId :: Lens.Lens' GetWirelessGatewayCertificateResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayCertificateResponse_iotCertificateId = Lens.lens (\GetWirelessGatewayCertificateResponse' {iotCertificateId} -> iotCertificateId) (\s@GetWirelessGatewayCertificateResponse' {} a -> s {iotCertificateId = a} :: GetWirelessGatewayCertificateResponse)
+
+-- | The ID of the certificate that is associated with the wireless gateway
+-- and used for the LoRaWANNetworkServer endpoint.
+getWirelessGatewayCertificateResponse_loRaWANNetworkServerCertificateId :: Lens.Lens' GetWirelessGatewayCertificateResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayCertificateResponse_loRaWANNetworkServerCertificateId = Lens.lens (\GetWirelessGatewayCertificateResponse' {loRaWANNetworkServerCertificateId} -> loRaWANNetworkServerCertificateId) (\s@GetWirelessGatewayCertificateResponse' {} a -> s {loRaWANNetworkServerCertificateId = a} :: GetWirelessGatewayCertificateResponse)
+
+-- | The response's http status code.
+getWirelessGatewayCertificateResponse_httpStatus :: Lens.Lens' GetWirelessGatewayCertificateResponse Prelude.Int
+getWirelessGatewayCertificateResponse_httpStatus = Lens.lens (\GetWirelessGatewayCertificateResponse' {httpStatus} -> httpStatus) (\s@GetWirelessGatewayCertificateResponse' {} a -> s {httpStatus = a} :: GetWirelessGatewayCertificateResponse)
+
+instance
+  Prelude.NFData
+    GetWirelessGatewayCertificateResponse
+  where
+  rnf GetWirelessGatewayCertificateResponse' {..} =
+    Prelude.rnf iotCertificateId
+      `Prelude.seq` Prelude.rnf loRaWANNetworkServerCertificateId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetWirelessGatewayFirmwareInformation.hs b/gen/Amazonka/IoTWireless/GetWirelessGatewayFirmwareInformation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetWirelessGatewayFirmwareInformation.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.IoTWireless.GetWirelessGatewayFirmwareInformation
+-- 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 firmware version and other information about a wireless
+-- gateway.
+module Amazonka.IoTWireless.GetWirelessGatewayFirmwareInformation
+  ( -- * Creating a Request
+    GetWirelessGatewayFirmwareInformation (..),
+    newGetWirelessGatewayFirmwareInformation,
+
+    -- * Request Lenses
+    getWirelessGatewayFirmwareInformation_id,
+
+    -- * Destructuring the Response
+    GetWirelessGatewayFirmwareInformationResponse (..),
+    newGetWirelessGatewayFirmwareInformationResponse,
+
+    -- * Response Lenses
+    getWirelessGatewayFirmwareInformationResponse_loRaWAN,
+    getWirelessGatewayFirmwareInformationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWirelessGatewayFirmwareInformation' smart constructor.
+data GetWirelessGatewayFirmwareInformation = GetWirelessGatewayFirmwareInformation'
+  { -- | The ID of the resource to get.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessGatewayFirmwareInformation' 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:
+--
+-- 'id', 'getWirelessGatewayFirmwareInformation_id' - The ID of the resource to get.
+newGetWirelessGatewayFirmwareInformation ::
+  -- | 'id'
+  Prelude.Text ->
+  GetWirelessGatewayFirmwareInformation
+newGetWirelessGatewayFirmwareInformation pId_ =
+  GetWirelessGatewayFirmwareInformation' {id = pId_}
+
+-- | The ID of the resource to get.
+getWirelessGatewayFirmwareInformation_id :: Lens.Lens' GetWirelessGatewayFirmwareInformation Prelude.Text
+getWirelessGatewayFirmwareInformation_id = Lens.lens (\GetWirelessGatewayFirmwareInformation' {id} -> id) (\s@GetWirelessGatewayFirmwareInformation' {} a -> s {id = a} :: GetWirelessGatewayFirmwareInformation)
+
+instance
+  Core.AWSRequest
+    GetWirelessGatewayFirmwareInformation
+  where
+  type
+    AWSResponse
+      GetWirelessGatewayFirmwareInformation =
+      GetWirelessGatewayFirmwareInformationResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWirelessGatewayFirmwareInformationResponse'
+            Prelude.<$> (x Data..?> "LoRaWAN")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetWirelessGatewayFirmwareInformation
+  where
+  hashWithSalt
+    _salt
+    GetWirelessGatewayFirmwareInformation' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    GetWirelessGatewayFirmwareInformation
+  where
+  rnf GetWirelessGatewayFirmwareInformation' {..} =
+    Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    GetWirelessGatewayFirmwareInformation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetWirelessGatewayFirmwareInformation
+  where
+  toPath GetWirelessGatewayFirmwareInformation' {..} =
+    Prelude.mconcat
+      [ "/wireless-gateways/",
+        Data.toBS id,
+        "/firmware-information"
+      ]
+
+instance
+  Data.ToQuery
+    GetWirelessGatewayFirmwareInformation
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWirelessGatewayFirmwareInformationResponse' smart constructor.
+data GetWirelessGatewayFirmwareInformationResponse = GetWirelessGatewayFirmwareInformationResponse'
+  { -- | Information about the wireless gateway\'s firmware.
+    loRaWAN :: Prelude.Maybe LoRaWANGatewayCurrentVersion,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessGatewayFirmwareInformationResponse' 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:
+--
+-- 'loRaWAN', 'getWirelessGatewayFirmwareInformationResponse_loRaWAN' - Information about the wireless gateway\'s firmware.
+--
+-- 'httpStatus', 'getWirelessGatewayFirmwareInformationResponse_httpStatus' - The response's http status code.
+newGetWirelessGatewayFirmwareInformationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWirelessGatewayFirmwareInformationResponse
+newGetWirelessGatewayFirmwareInformationResponse
+  pHttpStatus_ =
+    GetWirelessGatewayFirmwareInformationResponse'
+      { loRaWAN =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the wireless gateway\'s firmware.
+getWirelessGatewayFirmwareInformationResponse_loRaWAN :: Lens.Lens' GetWirelessGatewayFirmwareInformationResponse (Prelude.Maybe LoRaWANGatewayCurrentVersion)
+getWirelessGatewayFirmwareInformationResponse_loRaWAN = Lens.lens (\GetWirelessGatewayFirmwareInformationResponse' {loRaWAN} -> loRaWAN) (\s@GetWirelessGatewayFirmwareInformationResponse' {} a -> s {loRaWAN = a} :: GetWirelessGatewayFirmwareInformationResponse)
+
+-- | The response's http status code.
+getWirelessGatewayFirmwareInformationResponse_httpStatus :: Lens.Lens' GetWirelessGatewayFirmwareInformationResponse Prelude.Int
+getWirelessGatewayFirmwareInformationResponse_httpStatus = Lens.lens (\GetWirelessGatewayFirmwareInformationResponse' {httpStatus} -> httpStatus) (\s@GetWirelessGatewayFirmwareInformationResponse' {} a -> s {httpStatus = a} :: GetWirelessGatewayFirmwareInformationResponse)
+
+instance
+  Prelude.NFData
+    GetWirelessGatewayFirmwareInformationResponse
+  where
+  rnf
+    GetWirelessGatewayFirmwareInformationResponse' {..} =
+      Prelude.rnf loRaWAN
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetWirelessGatewayStatistics.hs b/gen/Amazonka/IoTWireless/GetWirelessGatewayStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetWirelessGatewayStatistics.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.IoTWireless.GetWirelessGatewayStatistics
+-- 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 operating information about a wireless gateway.
+module Amazonka.IoTWireless.GetWirelessGatewayStatistics
+  ( -- * Creating a Request
+    GetWirelessGatewayStatistics (..),
+    newGetWirelessGatewayStatistics,
+
+    -- * Request Lenses
+    getWirelessGatewayStatistics_wirelessGatewayId,
+
+    -- * Destructuring the Response
+    GetWirelessGatewayStatisticsResponse (..),
+    newGetWirelessGatewayStatisticsResponse,
+
+    -- * Response Lenses
+    getWirelessGatewayStatisticsResponse_connectionStatus,
+    getWirelessGatewayStatisticsResponse_lastUplinkReceivedAt,
+    getWirelessGatewayStatisticsResponse_wirelessGatewayId,
+    getWirelessGatewayStatisticsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWirelessGatewayStatistics' smart constructor.
+data GetWirelessGatewayStatistics = GetWirelessGatewayStatistics'
+  { -- | The ID of the wireless gateway for which to get the data.
+    wirelessGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessGatewayStatistics' 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:
+--
+-- 'wirelessGatewayId', 'getWirelessGatewayStatistics_wirelessGatewayId' - The ID of the wireless gateway for which to get the data.
+newGetWirelessGatewayStatistics ::
+  -- | 'wirelessGatewayId'
+  Prelude.Text ->
+  GetWirelessGatewayStatistics
+newGetWirelessGatewayStatistics pWirelessGatewayId_ =
+  GetWirelessGatewayStatistics'
+    { wirelessGatewayId =
+        pWirelessGatewayId_
+    }
+
+-- | The ID of the wireless gateway for which to get the data.
+getWirelessGatewayStatistics_wirelessGatewayId :: Lens.Lens' GetWirelessGatewayStatistics Prelude.Text
+getWirelessGatewayStatistics_wirelessGatewayId = Lens.lens (\GetWirelessGatewayStatistics' {wirelessGatewayId} -> wirelessGatewayId) (\s@GetWirelessGatewayStatistics' {} a -> s {wirelessGatewayId = a} :: GetWirelessGatewayStatistics)
+
+instance Core.AWSRequest GetWirelessGatewayStatistics where
+  type
+    AWSResponse GetWirelessGatewayStatistics =
+      GetWirelessGatewayStatisticsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWirelessGatewayStatisticsResponse'
+            Prelude.<$> (x Data..?> "ConnectionStatus")
+            Prelude.<*> (x Data..?> "LastUplinkReceivedAt")
+            Prelude.<*> (x Data..?> "WirelessGatewayId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetWirelessGatewayStatistics
+  where
+  hashWithSalt _salt GetWirelessGatewayStatistics' {..} =
+    _salt `Prelude.hashWithSalt` wirelessGatewayId
+
+instance Prelude.NFData GetWirelessGatewayStatistics where
+  rnf GetWirelessGatewayStatistics' {..} =
+    Prelude.rnf wirelessGatewayId
+
+instance Data.ToHeaders GetWirelessGatewayStatistics where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetWirelessGatewayStatistics where
+  toPath GetWirelessGatewayStatistics' {..} =
+    Prelude.mconcat
+      [ "/wireless-gateways/",
+        Data.toBS wirelessGatewayId,
+        "/statistics"
+      ]
+
+instance Data.ToQuery GetWirelessGatewayStatistics where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWirelessGatewayStatisticsResponse' smart constructor.
+data GetWirelessGatewayStatisticsResponse = GetWirelessGatewayStatisticsResponse'
+  { -- | The connection status of the wireless gateway.
+    connectionStatus :: Prelude.Maybe ConnectionStatus,
+    -- | The date and time when the most recent uplink was received.
+    lastUplinkReceivedAt :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the wireless gateway.
+    wirelessGatewayId :: 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 'GetWirelessGatewayStatisticsResponse' 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', 'getWirelessGatewayStatisticsResponse_connectionStatus' - The connection status of the wireless gateway.
+--
+-- 'lastUplinkReceivedAt', 'getWirelessGatewayStatisticsResponse_lastUplinkReceivedAt' - The date and time when the most recent uplink was received.
+--
+-- 'wirelessGatewayId', 'getWirelessGatewayStatisticsResponse_wirelessGatewayId' - The ID of the wireless gateway.
+--
+-- 'httpStatus', 'getWirelessGatewayStatisticsResponse_httpStatus' - The response's http status code.
+newGetWirelessGatewayStatisticsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWirelessGatewayStatisticsResponse
+newGetWirelessGatewayStatisticsResponse pHttpStatus_ =
+  GetWirelessGatewayStatisticsResponse'
+    { connectionStatus =
+        Prelude.Nothing,
+      lastUplinkReceivedAt =
+        Prelude.Nothing,
+      wirelessGatewayId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The connection status of the wireless gateway.
+getWirelessGatewayStatisticsResponse_connectionStatus :: Lens.Lens' GetWirelessGatewayStatisticsResponse (Prelude.Maybe ConnectionStatus)
+getWirelessGatewayStatisticsResponse_connectionStatus = Lens.lens (\GetWirelessGatewayStatisticsResponse' {connectionStatus} -> connectionStatus) (\s@GetWirelessGatewayStatisticsResponse' {} a -> s {connectionStatus = a} :: GetWirelessGatewayStatisticsResponse)
+
+-- | The date and time when the most recent uplink was received.
+getWirelessGatewayStatisticsResponse_lastUplinkReceivedAt :: Lens.Lens' GetWirelessGatewayStatisticsResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayStatisticsResponse_lastUplinkReceivedAt = Lens.lens (\GetWirelessGatewayStatisticsResponse' {lastUplinkReceivedAt} -> lastUplinkReceivedAt) (\s@GetWirelessGatewayStatisticsResponse' {} a -> s {lastUplinkReceivedAt = a} :: GetWirelessGatewayStatisticsResponse)
+
+-- | The ID of the wireless gateway.
+getWirelessGatewayStatisticsResponse_wirelessGatewayId :: Lens.Lens' GetWirelessGatewayStatisticsResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayStatisticsResponse_wirelessGatewayId = Lens.lens (\GetWirelessGatewayStatisticsResponse' {wirelessGatewayId} -> wirelessGatewayId) (\s@GetWirelessGatewayStatisticsResponse' {} a -> s {wirelessGatewayId = a} :: GetWirelessGatewayStatisticsResponse)
+
+-- | The response's http status code.
+getWirelessGatewayStatisticsResponse_httpStatus :: Lens.Lens' GetWirelessGatewayStatisticsResponse Prelude.Int
+getWirelessGatewayStatisticsResponse_httpStatus = Lens.lens (\GetWirelessGatewayStatisticsResponse' {httpStatus} -> httpStatus) (\s@GetWirelessGatewayStatisticsResponse' {} a -> s {httpStatus = a} :: GetWirelessGatewayStatisticsResponse)
+
+instance
+  Prelude.NFData
+    GetWirelessGatewayStatisticsResponse
+  where
+  rnf GetWirelessGatewayStatisticsResponse' {..} =
+    Prelude.rnf connectionStatus
+      `Prelude.seq` Prelude.rnf lastUplinkReceivedAt
+      `Prelude.seq` Prelude.rnf wirelessGatewayId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetWirelessGatewayTask.hs b/gen/Amazonka/IoTWireless/GetWirelessGatewayTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetWirelessGatewayTask.hs
@@ -0,0 +1,203 @@
+{-# 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.IoTWireless.GetWirelessGatewayTask
+-- 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 information about a wireless gateway task.
+module Amazonka.IoTWireless.GetWirelessGatewayTask
+  ( -- * Creating a Request
+    GetWirelessGatewayTask (..),
+    newGetWirelessGatewayTask,
+
+    -- * Request Lenses
+    getWirelessGatewayTask_id,
+
+    -- * Destructuring the Response
+    GetWirelessGatewayTaskResponse (..),
+    newGetWirelessGatewayTaskResponse,
+
+    -- * Response Lenses
+    getWirelessGatewayTaskResponse_lastUplinkReceivedAt,
+    getWirelessGatewayTaskResponse_status,
+    getWirelessGatewayTaskResponse_taskCreatedAt,
+    getWirelessGatewayTaskResponse_wirelessGatewayId,
+    getWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId,
+    getWirelessGatewayTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWirelessGatewayTask' smart constructor.
+data GetWirelessGatewayTask = GetWirelessGatewayTask'
+  { -- | The ID of the resource to get.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessGatewayTask' 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:
+--
+-- 'id', 'getWirelessGatewayTask_id' - The ID of the resource to get.
+newGetWirelessGatewayTask ::
+  -- | 'id'
+  Prelude.Text ->
+  GetWirelessGatewayTask
+newGetWirelessGatewayTask pId_ =
+  GetWirelessGatewayTask' {id = pId_}
+
+-- | The ID of the resource to get.
+getWirelessGatewayTask_id :: Lens.Lens' GetWirelessGatewayTask Prelude.Text
+getWirelessGatewayTask_id = Lens.lens (\GetWirelessGatewayTask' {id} -> id) (\s@GetWirelessGatewayTask' {} a -> s {id = a} :: GetWirelessGatewayTask)
+
+instance Core.AWSRequest GetWirelessGatewayTask where
+  type
+    AWSResponse GetWirelessGatewayTask =
+      GetWirelessGatewayTaskResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWirelessGatewayTaskResponse'
+            Prelude.<$> (x Data..?> "LastUplinkReceivedAt")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TaskCreatedAt")
+            Prelude.<*> (x Data..?> "WirelessGatewayId")
+            Prelude.<*> (x Data..?> "WirelessGatewayTaskDefinitionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetWirelessGatewayTask where
+  hashWithSalt _salt GetWirelessGatewayTask' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetWirelessGatewayTask where
+  rnf GetWirelessGatewayTask' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetWirelessGatewayTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetWirelessGatewayTask where
+  toPath GetWirelessGatewayTask' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id, "/tasks"]
+
+instance Data.ToQuery GetWirelessGatewayTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWirelessGatewayTaskResponse' smart constructor.
+data GetWirelessGatewayTaskResponse = GetWirelessGatewayTaskResponse'
+  { -- | The date and time when the most recent uplink was received.
+    lastUplinkReceivedAt :: Prelude.Maybe Prelude.Text,
+    -- | The status of the request.
+    status :: Prelude.Maybe WirelessGatewayTaskStatus,
+    -- | The date and time when the task was created.
+    taskCreatedAt :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the wireless gateway.
+    wirelessGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the WirelessGatewayTask.
+    wirelessGatewayTaskDefinitionId :: 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 'GetWirelessGatewayTaskResponse' 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:
+--
+-- 'lastUplinkReceivedAt', 'getWirelessGatewayTaskResponse_lastUplinkReceivedAt' - The date and time when the most recent uplink was received.
+--
+-- 'status', 'getWirelessGatewayTaskResponse_status' - The status of the request.
+--
+-- 'taskCreatedAt', 'getWirelessGatewayTaskResponse_taskCreatedAt' - The date and time when the task was created.
+--
+-- 'wirelessGatewayId', 'getWirelessGatewayTaskResponse_wirelessGatewayId' - The ID of the wireless gateway.
+--
+-- 'wirelessGatewayTaskDefinitionId', 'getWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId' - The ID of the WirelessGatewayTask.
+--
+-- 'httpStatus', 'getWirelessGatewayTaskResponse_httpStatus' - The response's http status code.
+newGetWirelessGatewayTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWirelessGatewayTaskResponse
+newGetWirelessGatewayTaskResponse pHttpStatus_ =
+  GetWirelessGatewayTaskResponse'
+    { lastUplinkReceivedAt =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      taskCreatedAt = Prelude.Nothing,
+      wirelessGatewayId = Prelude.Nothing,
+      wirelessGatewayTaskDefinitionId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The date and time when the most recent uplink was received.
+getWirelessGatewayTaskResponse_lastUplinkReceivedAt :: Lens.Lens' GetWirelessGatewayTaskResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayTaskResponse_lastUplinkReceivedAt = Lens.lens (\GetWirelessGatewayTaskResponse' {lastUplinkReceivedAt} -> lastUplinkReceivedAt) (\s@GetWirelessGatewayTaskResponse' {} a -> s {lastUplinkReceivedAt = a} :: GetWirelessGatewayTaskResponse)
+
+-- | The status of the request.
+getWirelessGatewayTaskResponse_status :: Lens.Lens' GetWirelessGatewayTaskResponse (Prelude.Maybe WirelessGatewayTaskStatus)
+getWirelessGatewayTaskResponse_status = Lens.lens (\GetWirelessGatewayTaskResponse' {status} -> status) (\s@GetWirelessGatewayTaskResponse' {} a -> s {status = a} :: GetWirelessGatewayTaskResponse)
+
+-- | The date and time when the task was created.
+getWirelessGatewayTaskResponse_taskCreatedAt :: Lens.Lens' GetWirelessGatewayTaskResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayTaskResponse_taskCreatedAt = Lens.lens (\GetWirelessGatewayTaskResponse' {taskCreatedAt} -> taskCreatedAt) (\s@GetWirelessGatewayTaskResponse' {} a -> s {taskCreatedAt = a} :: GetWirelessGatewayTaskResponse)
+
+-- | The ID of the wireless gateway.
+getWirelessGatewayTaskResponse_wirelessGatewayId :: Lens.Lens' GetWirelessGatewayTaskResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayTaskResponse_wirelessGatewayId = Lens.lens (\GetWirelessGatewayTaskResponse' {wirelessGatewayId} -> wirelessGatewayId) (\s@GetWirelessGatewayTaskResponse' {} a -> s {wirelessGatewayId = a} :: GetWirelessGatewayTaskResponse)
+
+-- | The ID of the WirelessGatewayTask.
+getWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId :: Lens.Lens' GetWirelessGatewayTaskResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId = Lens.lens (\GetWirelessGatewayTaskResponse' {wirelessGatewayTaskDefinitionId} -> wirelessGatewayTaskDefinitionId) (\s@GetWirelessGatewayTaskResponse' {} a -> s {wirelessGatewayTaskDefinitionId = a} :: GetWirelessGatewayTaskResponse)
+
+-- | The response's http status code.
+getWirelessGatewayTaskResponse_httpStatus :: Lens.Lens' GetWirelessGatewayTaskResponse Prelude.Int
+getWirelessGatewayTaskResponse_httpStatus = Lens.lens (\GetWirelessGatewayTaskResponse' {httpStatus} -> httpStatus) (\s@GetWirelessGatewayTaskResponse' {} a -> s {httpStatus = a} :: GetWirelessGatewayTaskResponse)
+
+instance
+  Prelude.NFData
+    GetWirelessGatewayTaskResponse
+  where
+  rnf GetWirelessGatewayTaskResponse' {..} =
+    Prelude.rnf lastUplinkReceivedAt
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf taskCreatedAt
+      `Prelude.seq` Prelude.rnf wirelessGatewayId
+      `Prelude.seq` Prelude.rnf wirelessGatewayTaskDefinitionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/GetWirelessGatewayTaskDefinition.hs b/gen/Amazonka/IoTWireless/GetWirelessGatewayTaskDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/GetWirelessGatewayTaskDefinition.hs
@@ -0,0 +1,215 @@
+{-# 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.IoTWireless.GetWirelessGatewayTaskDefinition
+-- 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 information about a wireless gateway task definition.
+module Amazonka.IoTWireless.GetWirelessGatewayTaskDefinition
+  ( -- * Creating a Request
+    GetWirelessGatewayTaskDefinition (..),
+    newGetWirelessGatewayTaskDefinition,
+
+    -- * Request Lenses
+    getWirelessGatewayTaskDefinition_id,
+
+    -- * Destructuring the Response
+    GetWirelessGatewayTaskDefinitionResponse (..),
+    newGetWirelessGatewayTaskDefinitionResponse,
+
+    -- * Response Lenses
+    getWirelessGatewayTaskDefinitionResponse_arn,
+    getWirelessGatewayTaskDefinitionResponse_autoCreateTasks,
+    getWirelessGatewayTaskDefinitionResponse_name,
+    getWirelessGatewayTaskDefinitionResponse_update,
+    getWirelessGatewayTaskDefinitionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetWirelessGatewayTaskDefinition' smart constructor.
+data GetWirelessGatewayTaskDefinition = GetWirelessGatewayTaskDefinition'
+  { -- | The ID of the resource to get.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessGatewayTaskDefinition' 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:
+--
+-- 'id', 'getWirelessGatewayTaskDefinition_id' - The ID of the resource to get.
+newGetWirelessGatewayTaskDefinition ::
+  -- | 'id'
+  Prelude.Text ->
+  GetWirelessGatewayTaskDefinition
+newGetWirelessGatewayTaskDefinition pId_ =
+  GetWirelessGatewayTaskDefinition' {id = pId_}
+
+-- | The ID of the resource to get.
+getWirelessGatewayTaskDefinition_id :: Lens.Lens' GetWirelessGatewayTaskDefinition Prelude.Text
+getWirelessGatewayTaskDefinition_id = Lens.lens (\GetWirelessGatewayTaskDefinition' {id} -> id) (\s@GetWirelessGatewayTaskDefinition' {} a -> s {id = a} :: GetWirelessGatewayTaskDefinition)
+
+instance
+  Core.AWSRequest
+    GetWirelessGatewayTaskDefinition
+  where
+  type
+    AWSResponse GetWirelessGatewayTaskDefinition =
+      GetWirelessGatewayTaskDefinitionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetWirelessGatewayTaskDefinitionResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "AutoCreateTasks")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Update")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetWirelessGatewayTaskDefinition
+  where
+  hashWithSalt
+    _salt
+    GetWirelessGatewayTaskDefinition' {..} =
+      _salt `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    GetWirelessGatewayTaskDefinition
+  where
+  rnf GetWirelessGatewayTaskDefinition' {..} =
+    Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    GetWirelessGatewayTaskDefinition
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetWirelessGatewayTaskDefinition where
+  toPath GetWirelessGatewayTaskDefinition' {..} =
+    Prelude.mconcat
+      ["/wireless-gateway-task-definitions/", Data.toBS id]
+
+instance
+  Data.ToQuery
+    GetWirelessGatewayTaskDefinition
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetWirelessGatewayTaskDefinitionResponse' smart constructor.
+data GetWirelessGatewayTaskDefinitionResponse = GetWirelessGatewayTaskDefinitionResponse'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Whether to automatically create tasks using this task definition for all
+    -- gateways with the specified current version. If @false@, the task must
+    -- me created by calling @CreateWirelessGatewayTask@.
+    autoCreateTasks :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Information about the gateways to update.
+    update :: Prelude.Maybe UpdateWirelessGatewayTaskCreate,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetWirelessGatewayTaskDefinitionResponse' 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', 'getWirelessGatewayTaskDefinitionResponse_arn' - The Amazon Resource Name of the resource.
+--
+-- 'autoCreateTasks', 'getWirelessGatewayTaskDefinitionResponse_autoCreateTasks' - Whether to automatically create tasks using this task definition for all
+-- gateways with the specified current version. If @false@, the task must
+-- me created by calling @CreateWirelessGatewayTask@.
+--
+-- 'name', 'getWirelessGatewayTaskDefinitionResponse_name' - The name of the resource.
+--
+-- 'update', 'getWirelessGatewayTaskDefinitionResponse_update' - Information about the gateways to update.
+--
+-- 'httpStatus', 'getWirelessGatewayTaskDefinitionResponse_httpStatus' - The response's http status code.
+newGetWirelessGatewayTaskDefinitionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetWirelessGatewayTaskDefinitionResponse
+newGetWirelessGatewayTaskDefinitionResponse
+  pHttpStatus_ =
+    GetWirelessGatewayTaskDefinitionResponse'
+      { arn =
+          Prelude.Nothing,
+        autoCreateTasks = Prelude.Nothing,
+        name = Prelude.Nothing,
+        update = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name of the resource.
+getWirelessGatewayTaskDefinitionResponse_arn :: Lens.Lens' GetWirelessGatewayTaskDefinitionResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayTaskDefinitionResponse_arn = Lens.lens (\GetWirelessGatewayTaskDefinitionResponse' {arn} -> arn) (\s@GetWirelessGatewayTaskDefinitionResponse' {} a -> s {arn = a} :: GetWirelessGatewayTaskDefinitionResponse)
+
+-- | Whether to automatically create tasks using this task definition for all
+-- gateways with the specified current version. If @false@, the task must
+-- me created by calling @CreateWirelessGatewayTask@.
+getWirelessGatewayTaskDefinitionResponse_autoCreateTasks :: Lens.Lens' GetWirelessGatewayTaskDefinitionResponse (Prelude.Maybe Prelude.Bool)
+getWirelessGatewayTaskDefinitionResponse_autoCreateTasks = Lens.lens (\GetWirelessGatewayTaskDefinitionResponse' {autoCreateTasks} -> autoCreateTasks) (\s@GetWirelessGatewayTaskDefinitionResponse' {} a -> s {autoCreateTasks = a} :: GetWirelessGatewayTaskDefinitionResponse)
+
+-- | The name of the resource.
+getWirelessGatewayTaskDefinitionResponse_name :: Lens.Lens' GetWirelessGatewayTaskDefinitionResponse (Prelude.Maybe Prelude.Text)
+getWirelessGatewayTaskDefinitionResponse_name = Lens.lens (\GetWirelessGatewayTaskDefinitionResponse' {name} -> name) (\s@GetWirelessGatewayTaskDefinitionResponse' {} a -> s {name = a} :: GetWirelessGatewayTaskDefinitionResponse)
+
+-- | Information about the gateways to update.
+getWirelessGatewayTaskDefinitionResponse_update :: Lens.Lens' GetWirelessGatewayTaskDefinitionResponse (Prelude.Maybe UpdateWirelessGatewayTaskCreate)
+getWirelessGatewayTaskDefinitionResponse_update = Lens.lens (\GetWirelessGatewayTaskDefinitionResponse' {update} -> update) (\s@GetWirelessGatewayTaskDefinitionResponse' {} a -> s {update = a} :: GetWirelessGatewayTaskDefinitionResponse)
+
+-- | The response's http status code.
+getWirelessGatewayTaskDefinitionResponse_httpStatus :: Lens.Lens' GetWirelessGatewayTaskDefinitionResponse Prelude.Int
+getWirelessGatewayTaskDefinitionResponse_httpStatus = Lens.lens (\GetWirelessGatewayTaskDefinitionResponse' {httpStatus} -> httpStatus) (\s@GetWirelessGatewayTaskDefinitionResponse' {} a -> s {httpStatus = a} :: GetWirelessGatewayTaskDefinitionResponse)
+
+instance
+  Prelude.NFData
+    GetWirelessGatewayTaskDefinitionResponse
+  where
+  rnf GetWirelessGatewayTaskDefinitionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf autoCreateTasks
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf update
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/Lens.hs b/gen/Amazonka/IoTWireless/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Lens.hs
@@ -0,0 +1,1452 @@
+{-# 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.IoTWireless.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.IoTWireless.Lens
+  ( -- * Operations
+
+    -- ** AssociateAwsAccountWithPartnerAccount
+    associateAwsAccountWithPartnerAccount_clientRequestToken,
+    associateAwsAccountWithPartnerAccount_tags,
+    associateAwsAccountWithPartnerAccount_sidewalk,
+    associateAwsAccountWithPartnerAccountResponse_arn,
+    associateAwsAccountWithPartnerAccountResponse_sidewalk,
+    associateAwsAccountWithPartnerAccountResponse_httpStatus,
+
+    -- ** AssociateMulticastGroupWithFuotaTask
+    associateMulticastGroupWithFuotaTask_id,
+    associateMulticastGroupWithFuotaTask_multicastGroupId,
+    associateMulticastGroupWithFuotaTaskResponse_httpStatus,
+
+    -- ** AssociateWirelessDeviceWithFuotaTask
+    associateWirelessDeviceWithFuotaTask_id,
+    associateWirelessDeviceWithFuotaTask_wirelessDeviceId,
+    associateWirelessDeviceWithFuotaTaskResponse_httpStatus,
+
+    -- ** AssociateWirelessDeviceWithMulticastGroup
+    associateWirelessDeviceWithMulticastGroup_id,
+    associateWirelessDeviceWithMulticastGroup_wirelessDeviceId,
+    associateWirelessDeviceWithMulticastGroupResponse_httpStatus,
+
+    -- ** AssociateWirelessDeviceWithThing
+    associateWirelessDeviceWithThing_id,
+    associateWirelessDeviceWithThing_thingArn,
+    associateWirelessDeviceWithThingResponse_httpStatus,
+
+    -- ** AssociateWirelessGatewayWithCertificate
+    associateWirelessGatewayWithCertificate_id,
+    associateWirelessGatewayWithCertificate_iotCertificateId,
+    associateWirelessGatewayWithCertificateResponse_iotCertificateId,
+    associateWirelessGatewayWithCertificateResponse_httpStatus,
+
+    -- ** AssociateWirelessGatewayWithThing
+    associateWirelessGatewayWithThing_id,
+    associateWirelessGatewayWithThing_thingArn,
+    associateWirelessGatewayWithThingResponse_httpStatus,
+
+    -- ** CancelMulticastGroupSession
+    cancelMulticastGroupSession_id,
+    cancelMulticastGroupSessionResponse_httpStatus,
+
+    -- ** CreateDestination
+    createDestination_clientRequestToken,
+    createDestination_description,
+    createDestination_tags,
+    createDestination_name,
+    createDestination_expressionType,
+    createDestination_expression,
+    createDestination_roleArn,
+    createDestinationResponse_arn,
+    createDestinationResponse_name,
+    createDestinationResponse_httpStatus,
+
+    -- ** CreateDeviceProfile
+    createDeviceProfile_clientRequestToken,
+    createDeviceProfile_loRaWAN,
+    createDeviceProfile_name,
+    createDeviceProfile_tags,
+    createDeviceProfileResponse_arn,
+    createDeviceProfileResponse_id,
+    createDeviceProfileResponse_httpStatus,
+
+    -- ** CreateFuotaTask
+    createFuotaTask_clientRequestToken,
+    createFuotaTask_description,
+    createFuotaTask_loRaWAN,
+    createFuotaTask_name,
+    createFuotaTask_tags,
+    createFuotaTask_firmwareUpdateImage,
+    createFuotaTask_firmwareUpdateRole,
+    createFuotaTaskResponse_arn,
+    createFuotaTaskResponse_id,
+    createFuotaTaskResponse_httpStatus,
+
+    -- ** CreateMulticastGroup
+    createMulticastGroup_clientRequestToken,
+    createMulticastGroup_description,
+    createMulticastGroup_name,
+    createMulticastGroup_tags,
+    createMulticastGroup_loRaWAN,
+    createMulticastGroupResponse_arn,
+    createMulticastGroupResponse_id,
+    createMulticastGroupResponse_httpStatus,
+
+    -- ** CreateNetworkAnalyzerConfiguration
+    createNetworkAnalyzerConfiguration_clientRequestToken,
+    createNetworkAnalyzerConfiguration_description,
+    createNetworkAnalyzerConfiguration_tags,
+    createNetworkAnalyzerConfiguration_traceContent,
+    createNetworkAnalyzerConfiguration_wirelessDevices,
+    createNetworkAnalyzerConfiguration_wirelessGateways,
+    createNetworkAnalyzerConfiguration_name,
+    createNetworkAnalyzerConfigurationResponse_arn,
+    createNetworkAnalyzerConfigurationResponse_name,
+    createNetworkAnalyzerConfigurationResponse_httpStatus,
+
+    -- ** CreateServiceProfile
+    createServiceProfile_clientRequestToken,
+    createServiceProfile_loRaWAN,
+    createServiceProfile_name,
+    createServiceProfile_tags,
+    createServiceProfileResponse_arn,
+    createServiceProfileResponse_id,
+    createServiceProfileResponse_httpStatus,
+
+    -- ** CreateWirelessDevice
+    createWirelessDevice_clientRequestToken,
+    createWirelessDevice_description,
+    createWirelessDevice_loRaWAN,
+    createWirelessDevice_name,
+    createWirelessDevice_positioning,
+    createWirelessDevice_tags,
+    createWirelessDevice_type,
+    createWirelessDevice_destinationName,
+    createWirelessDeviceResponse_arn,
+    createWirelessDeviceResponse_id,
+    createWirelessDeviceResponse_httpStatus,
+
+    -- ** CreateWirelessGateway
+    createWirelessGateway_clientRequestToken,
+    createWirelessGateway_description,
+    createWirelessGateway_name,
+    createWirelessGateway_tags,
+    createWirelessGateway_loRaWAN,
+    createWirelessGatewayResponse_arn,
+    createWirelessGatewayResponse_id,
+    createWirelessGatewayResponse_httpStatus,
+
+    -- ** CreateWirelessGatewayTask
+    createWirelessGatewayTask_id,
+    createWirelessGatewayTask_wirelessGatewayTaskDefinitionId,
+    createWirelessGatewayTaskResponse_status,
+    createWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId,
+    createWirelessGatewayTaskResponse_httpStatus,
+
+    -- ** CreateWirelessGatewayTaskDefinition
+    createWirelessGatewayTaskDefinition_clientRequestToken,
+    createWirelessGatewayTaskDefinition_name,
+    createWirelessGatewayTaskDefinition_tags,
+    createWirelessGatewayTaskDefinition_update,
+    createWirelessGatewayTaskDefinition_autoCreateTasks,
+    createWirelessGatewayTaskDefinitionResponse_arn,
+    createWirelessGatewayTaskDefinitionResponse_id,
+    createWirelessGatewayTaskDefinitionResponse_httpStatus,
+
+    -- ** DeleteDestination
+    deleteDestination_name,
+    deleteDestinationResponse_httpStatus,
+
+    -- ** DeleteDeviceProfile
+    deleteDeviceProfile_id,
+    deleteDeviceProfileResponse_httpStatus,
+
+    -- ** DeleteFuotaTask
+    deleteFuotaTask_id,
+    deleteFuotaTaskResponse_httpStatus,
+
+    -- ** DeleteMulticastGroup
+    deleteMulticastGroup_id,
+    deleteMulticastGroupResponse_httpStatus,
+
+    -- ** DeleteNetworkAnalyzerConfiguration
+    deleteNetworkAnalyzerConfiguration_configurationName,
+    deleteNetworkAnalyzerConfigurationResponse_httpStatus,
+
+    -- ** DeleteQueuedMessages
+    deleteQueuedMessages_wirelessDeviceType,
+    deleteQueuedMessages_id,
+    deleteQueuedMessages_messageId,
+    deleteQueuedMessagesResponse_httpStatus,
+
+    -- ** DeleteServiceProfile
+    deleteServiceProfile_id,
+    deleteServiceProfileResponse_httpStatus,
+
+    -- ** DeleteWirelessDevice
+    deleteWirelessDevice_id,
+    deleteWirelessDeviceResponse_httpStatus,
+
+    -- ** DeleteWirelessGateway
+    deleteWirelessGateway_id,
+    deleteWirelessGatewayResponse_httpStatus,
+
+    -- ** DeleteWirelessGatewayTask
+    deleteWirelessGatewayTask_id,
+    deleteWirelessGatewayTaskResponse_httpStatus,
+
+    -- ** DeleteWirelessGatewayTaskDefinition
+    deleteWirelessGatewayTaskDefinition_id,
+    deleteWirelessGatewayTaskDefinitionResponse_httpStatus,
+
+    -- ** DisassociateAwsAccountFromPartnerAccount
+    disassociateAwsAccountFromPartnerAccount_partnerAccountId,
+    disassociateAwsAccountFromPartnerAccount_partnerType,
+    disassociateAwsAccountFromPartnerAccountResponse_httpStatus,
+
+    -- ** DisassociateMulticastGroupFromFuotaTask
+    disassociateMulticastGroupFromFuotaTask_id,
+    disassociateMulticastGroupFromFuotaTask_multicastGroupId,
+    disassociateMulticastGroupFromFuotaTaskResponse_httpStatus,
+
+    -- ** DisassociateWirelessDeviceFromFuotaTask
+    disassociateWirelessDeviceFromFuotaTask_id,
+    disassociateWirelessDeviceFromFuotaTask_wirelessDeviceId,
+    disassociateWirelessDeviceFromFuotaTaskResponse_httpStatus,
+
+    -- ** DisassociateWirelessDeviceFromMulticastGroup
+    disassociateWirelessDeviceFromMulticastGroup_id,
+    disassociateWirelessDeviceFromMulticastGroup_wirelessDeviceId,
+    disassociateWirelessDeviceFromMulticastGroupResponse_httpStatus,
+
+    -- ** DisassociateWirelessDeviceFromThing
+    disassociateWirelessDeviceFromThing_id,
+    disassociateWirelessDeviceFromThingResponse_httpStatus,
+
+    -- ** DisassociateWirelessGatewayFromCertificate
+    disassociateWirelessGatewayFromCertificate_id,
+    disassociateWirelessGatewayFromCertificateResponse_httpStatus,
+
+    -- ** DisassociateWirelessGatewayFromThing
+    disassociateWirelessGatewayFromThing_id,
+    disassociateWirelessGatewayFromThingResponse_httpStatus,
+
+    -- ** GetDestination
+    getDestination_name,
+    getDestinationResponse_arn,
+    getDestinationResponse_description,
+    getDestinationResponse_expression,
+    getDestinationResponse_expressionType,
+    getDestinationResponse_name,
+    getDestinationResponse_roleArn,
+    getDestinationResponse_httpStatus,
+
+    -- ** GetDeviceProfile
+    getDeviceProfile_id,
+    getDeviceProfileResponse_arn,
+    getDeviceProfileResponse_id,
+    getDeviceProfileResponse_loRaWAN,
+    getDeviceProfileResponse_name,
+    getDeviceProfileResponse_httpStatus,
+
+    -- ** GetEventConfigurationByResourceTypes
+    getEventConfigurationByResourceTypesResponse_connectionStatus,
+    getEventConfigurationByResourceTypesResponse_deviceRegistrationState,
+    getEventConfigurationByResourceTypesResponse_join,
+    getEventConfigurationByResourceTypesResponse_messageDeliveryStatus,
+    getEventConfigurationByResourceTypesResponse_proximity,
+    getEventConfigurationByResourceTypesResponse_httpStatus,
+
+    -- ** GetFuotaTask
+    getFuotaTask_id,
+    getFuotaTaskResponse_arn,
+    getFuotaTaskResponse_createdAt,
+    getFuotaTaskResponse_description,
+    getFuotaTaskResponse_firmwareUpdateImage,
+    getFuotaTaskResponse_firmwareUpdateRole,
+    getFuotaTaskResponse_id,
+    getFuotaTaskResponse_loRaWAN,
+    getFuotaTaskResponse_name,
+    getFuotaTaskResponse_status,
+    getFuotaTaskResponse_httpStatus,
+
+    -- ** GetLogLevelsByResourceTypes
+    getLogLevelsByResourceTypesResponse_defaultLogLevel,
+    getLogLevelsByResourceTypesResponse_wirelessDeviceLogOptions,
+    getLogLevelsByResourceTypesResponse_wirelessGatewayLogOptions,
+    getLogLevelsByResourceTypesResponse_httpStatus,
+
+    -- ** GetMulticastGroup
+    getMulticastGroup_id,
+    getMulticastGroupResponse_arn,
+    getMulticastGroupResponse_createdAt,
+    getMulticastGroupResponse_description,
+    getMulticastGroupResponse_id,
+    getMulticastGroupResponse_loRaWAN,
+    getMulticastGroupResponse_name,
+    getMulticastGroupResponse_status,
+    getMulticastGroupResponse_httpStatus,
+
+    -- ** GetMulticastGroupSession
+    getMulticastGroupSession_id,
+    getMulticastGroupSessionResponse_loRaWAN,
+    getMulticastGroupSessionResponse_httpStatus,
+
+    -- ** GetNetworkAnalyzerConfiguration
+    getNetworkAnalyzerConfiguration_configurationName,
+    getNetworkAnalyzerConfigurationResponse_arn,
+    getNetworkAnalyzerConfigurationResponse_description,
+    getNetworkAnalyzerConfigurationResponse_name,
+    getNetworkAnalyzerConfigurationResponse_traceContent,
+    getNetworkAnalyzerConfigurationResponse_wirelessDevices,
+    getNetworkAnalyzerConfigurationResponse_wirelessGateways,
+    getNetworkAnalyzerConfigurationResponse_httpStatus,
+
+    -- ** GetPartnerAccount
+    getPartnerAccount_partnerAccountId,
+    getPartnerAccount_partnerType,
+    getPartnerAccountResponse_accountLinked,
+    getPartnerAccountResponse_sidewalk,
+    getPartnerAccountResponse_httpStatus,
+
+    -- ** GetPositionEstimate
+    getPositionEstimate_cellTowers,
+    getPositionEstimate_gnss,
+    getPositionEstimate_ip,
+    getPositionEstimate_timestamp,
+    getPositionEstimate_wiFiAccessPoints,
+    getPositionEstimateResponse_geoJsonPayload,
+    getPositionEstimateResponse_httpStatus,
+
+    -- ** GetResourceEventConfiguration
+    getResourceEventConfiguration_partnerType,
+    getResourceEventConfiguration_identifier,
+    getResourceEventConfiguration_identifierType,
+    getResourceEventConfigurationResponse_connectionStatus,
+    getResourceEventConfigurationResponse_deviceRegistrationState,
+    getResourceEventConfigurationResponse_join,
+    getResourceEventConfigurationResponse_messageDeliveryStatus,
+    getResourceEventConfigurationResponse_proximity,
+    getResourceEventConfigurationResponse_httpStatus,
+
+    -- ** GetResourceLogLevel
+    getResourceLogLevel_resourceIdentifier,
+    getResourceLogLevel_resourceType,
+    getResourceLogLevelResponse_logLevel,
+    getResourceLogLevelResponse_httpStatus,
+
+    -- ** GetResourcePosition
+    getResourcePosition_resourceIdentifier,
+    getResourcePosition_resourceType,
+    getResourcePositionResponse_geoJsonPayload,
+    getResourcePositionResponse_httpStatus,
+
+    -- ** GetServiceEndpoint
+    getServiceEndpoint_serviceType,
+    getServiceEndpointResponse_serverTrust,
+    getServiceEndpointResponse_serviceEndpoint,
+    getServiceEndpointResponse_serviceType,
+    getServiceEndpointResponse_httpStatus,
+
+    -- ** GetServiceProfile
+    getServiceProfile_id,
+    getServiceProfileResponse_arn,
+    getServiceProfileResponse_id,
+    getServiceProfileResponse_loRaWAN,
+    getServiceProfileResponse_name,
+    getServiceProfileResponse_httpStatus,
+
+    -- ** GetWirelessDevice
+    getWirelessDevice_identifier,
+    getWirelessDevice_identifierType,
+    getWirelessDeviceResponse_arn,
+    getWirelessDeviceResponse_description,
+    getWirelessDeviceResponse_destinationName,
+    getWirelessDeviceResponse_id,
+    getWirelessDeviceResponse_loRaWAN,
+    getWirelessDeviceResponse_name,
+    getWirelessDeviceResponse_positioning,
+    getWirelessDeviceResponse_sidewalk,
+    getWirelessDeviceResponse_thingArn,
+    getWirelessDeviceResponse_thingName,
+    getWirelessDeviceResponse_type,
+    getWirelessDeviceResponse_httpStatus,
+
+    -- ** GetWirelessDeviceStatistics
+    getWirelessDeviceStatistics_wirelessDeviceId,
+    getWirelessDeviceStatisticsResponse_lastUplinkReceivedAt,
+    getWirelessDeviceStatisticsResponse_loRaWAN,
+    getWirelessDeviceStatisticsResponse_sidewalk,
+    getWirelessDeviceStatisticsResponse_wirelessDeviceId,
+    getWirelessDeviceStatisticsResponse_httpStatus,
+
+    -- ** GetWirelessGateway
+    getWirelessGateway_identifier,
+    getWirelessGateway_identifierType,
+    getWirelessGatewayResponse_arn,
+    getWirelessGatewayResponse_description,
+    getWirelessGatewayResponse_id,
+    getWirelessGatewayResponse_loRaWAN,
+    getWirelessGatewayResponse_name,
+    getWirelessGatewayResponse_thingArn,
+    getWirelessGatewayResponse_thingName,
+    getWirelessGatewayResponse_httpStatus,
+
+    -- ** GetWirelessGatewayCertificate
+    getWirelessGatewayCertificate_id,
+    getWirelessGatewayCertificateResponse_iotCertificateId,
+    getWirelessGatewayCertificateResponse_loRaWANNetworkServerCertificateId,
+    getWirelessGatewayCertificateResponse_httpStatus,
+
+    -- ** GetWirelessGatewayFirmwareInformation
+    getWirelessGatewayFirmwareInformation_id,
+    getWirelessGatewayFirmwareInformationResponse_loRaWAN,
+    getWirelessGatewayFirmwareInformationResponse_httpStatus,
+
+    -- ** GetWirelessGatewayStatistics
+    getWirelessGatewayStatistics_wirelessGatewayId,
+    getWirelessGatewayStatisticsResponse_connectionStatus,
+    getWirelessGatewayStatisticsResponse_lastUplinkReceivedAt,
+    getWirelessGatewayStatisticsResponse_wirelessGatewayId,
+    getWirelessGatewayStatisticsResponse_httpStatus,
+
+    -- ** GetWirelessGatewayTask
+    getWirelessGatewayTask_id,
+    getWirelessGatewayTaskResponse_lastUplinkReceivedAt,
+    getWirelessGatewayTaskResponse_status,
+    getWirelessGatewayTaskResponse_taskCreatedAt,
+    getWirelessGatewayTaskResponse_wirelessGatewayId,
+    getWirelessGatewayTaskResponse_wirelessGatewayTaskDefinitionId,
+    getWirelessGatewayTaskResponse_httpStatus,
+
+    -- ** GetWirelessGatewayTaskDefinition
+    getWirelessGatewayTaskDefinition_id,
+    getWirelessGatewayTaskDefinitionResponse_arn,
+    getWirelessGatewayTaskDefinitionResponse_autoCreateTasks,
+    getWirelessGatewayTaskDefinitionResponse_name,
+    getWirelessGatewayTaskDefinitionResponse_update,
+    getWirelessGatewayTaskDefinitionResponse_httpStatus,
+
+    -- ** ListDestinations
+    listDestinations_maxResults,
+    listDestinations_nextToken,
+    listDestinationsResponse_destinationList,
+    listDestinationsResponse_nextToken,
+    listDestinationsResponse_httpStatus,
+
+    -- ** ListDeviceProfiles
+    listDeviceProfiles_maxResults,
+    listDeviceProfiles_nextToken,
+    listDeviceProfilesResponse_deviceProfileList,
+    listDeviceProfilesResponse_nextToken,
+    listDeviceProfilesResponse_httpStatus,
+
+    -- ** ListEventConfigurations
+    listEventConfigurations_maxResults,
+    listEventConfigurations_nextToken,
+    listEventConfigurations_resourceType,
+    listEventConfigurationsResponse_eventConfigurationsList,
+    listEventConfigurationsResponse_nextToken,
+    listEventConfigurationsResponse_httpStatus,
+
+    -- ** ListFuotaTasks
+    listFuotaTasks_maxResults,
+    listFuotaTasks_nextToken,
+    listFuotaTasksResponse_fuotaTaskList,
+    listFuotaTasksResponse_nextToken,
+    listFuotaTasksResponse_httpStatus,
+
+    -- ** ListMulticastGroups
+    listMulticastGroups_maxResults,
+    listMulticastGroups_nextToken,
+    listMulticastGroupsResponse_multicastGroupList,
+    listMulticastGroupsResponse_nextToken,
+    listMulticastGroupsResponse_httpStatus,
+
+    -- ** ListMulticastGroupsByFuotaTask
+    listMulticastGroupsByFuotaTask_maxResults,
+    listMulticastGroupsByFuotaTask_nextToken,
+    listMulticastGroupsByFuotaTask_id,
+    listMulticastGroupsByFuotaTaskResponse_multicastGroupList,
+    listMulticastGroupsByFuotaTaskResponse_nextToken,
+    listMulticastGroupsByFuotaTaskResponse_httpStatus,
+
+    -- ** ListNetworkAnalyzerConfigurations
+    listNetworkAnalyzerConfigurations_maxResults,
+    listNetworkAnalyzerConfigurations_nextToken,
+    listNetworkAnalyzerConfigurationsResponse_networkAnalyzerConfigurationList,
+    listNetworkAnalyzerConfigurationsResponse_nextToken,
+    listNetworkAnalyzerConfigurationsResponse_httpStatus,
+
+    -- ** ListPartnerAccounts
+    listPartnerAccounts_maxResults,
+    listPartnerAccounts_nextToken,
+    listPartnerAccountsResponse_nextToken,
+    listPartnerAccountsResponse_sidewalk,
+    listPartnerAccountsResponse_httpStatus,
+
+    -- ** ListQueuedMessages
+    listQueuedMessages_maxResults,
+    listQueuedMessages_nextToken,
+    listQueuedMessages_wirelessDeviceType,
+    listQueuedMessages_id,
+    listQueuedMessagesResponse_downlinkQueueMessagesList,
+    listQueuedMessagesResponse_nextToken,
+    listQueuedMessagesResponse_httpStatus,
+
+    -- ** ListServiceProfiles
+    listServiceProfiles_maxResults,
+    listServiceProfiles_nextToken,
+    listServiceProfilesResponse_nextToken,
+    listServiceProfilesResponse_serviceProfileList,
+    listServiceProfilesResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListWirelessDevices
+    listWirelessDevices_destinationName,
+    listWirelessDevices_deviceProfileId,
+    listWirelessDevices_fuotaTaskId,
+    listWirelessDevices_maxResults,
+    listWirelessDevices_multicastGroupId,
+    listWirelessDevices_nextToken,
+    listWirelessDevices_serviceProfileId,
+    listWirelessDevices_wirelessDeviceType,
+    listWirelessDevicesResponse_nextToken,
+    listWirelessDevicesResponse_wirelessDeviceList,
+    listWirelessDevicesResponse_httpStatus,
+
+    -- ** ListWirelessGatewayTaskDefinitions
+    listWirelessGatewayTaskDefinitions_maxResults,
+    listWirelessGatewayTaskDefinitions_nextToken,
+    listWirelessGatewayTaskDefinitions_taskDefinitionType,
+    listWirelessGatewayTaskDefinitionsResponse_nextToken,
+    listWirelessGatewayTaskDefinitionsResponse_taskDefinitions,
+    listWirelessGatewayTaskDefinitionsResponse_httpStatus,
+
+    -- ** ListWirelessGateways
+    listWirelessGateways_maxResults,
+    listWirelessGateways_nextToken,
+    listWirelessGatewaysResponse_nextToken,
+    listWirelessGatewaysResponse_wirelessGatewayList,
+    listWirelessGatewaysResponse_httpStatus,
+
+    -- ** PutResourceLogLevel
+    putResourceLogLevel_resourceIdentifier,
+    putResourceLogLevel_resourceType,
+    putResourceLogLevel_logLevel,
+    putResourceLogLevelResponse_httpStatus,
+
+    -- ** ResetAllResourceLogLevels
+    resetAllResourceLogLevelsResponse_httpStatus,
+
+    -- ** ResetResourceLogLevel
+    resetResourceLogLevel_resourceIdentifier,
+    resetResourceLogLevel_resourceType,
+    resetResourceLogLevelResponse_httpStatus,
+
+    -- ** SendDataToMulticastGroup
+    sendDataToMulticastGroup_id,
+    sendDataToMulticastGroup_payloadData,
+    sendDataToMulticastGroup_wirelessMetadata,
+    sendDataToMulticastGroupResponse_messageId,
+    sendDataToMulticastGroupResponse_httpStatus,
+
+    -- ** SendDataToWirelessDevice
+    sendDataToWirelessDevice_wirelessMetadata,
+    sendDataToWirelessDevice_id,
+    sendDataToWirelessDevice_transmitMode,
+    sendDataToWirelessDevice_payloadData,
+    sendDataToWirelessDeviceResponse_messageId,
+    sendDataToWirelessDeviceResponse_httpStatus,
+
+    -- ** StartBulkAssociateWirelessDeviceWithMulticastGroup
+    startBulkAssociateWirelessDeviceWithMulticastGroup_queryString,
+    startBulkAssociateWirelessDeviceWithMulticastGroup_tags,
+    startBulkAssociateWirelessDeviceWithMulticastGroup_id,
+    startBulkAssociateWirelessDeviceWithMulticastGroupResponse_httpStatus,
+
+    -- ** StartBulkDisassociateWirelessDeviceFromMulticastGroup
+    startBulkDisassociateWirelessDeviceFromMulticastGroup_queryString,
+    startBulkDisassociateWirelessDeviceFromMulticastGroup_tags,
+    startBulkDisassociateWirelessDeviceFromMulticastGroup_id,
+    startBulkDisassociateWirelessDeviceFromMulticastGroupResponse_httpStatus,
+
+    -- ** StartFuotaTask
+    startFuotaTask_loRaWAN,
+    startFuotaTask_id,
+    startFuotaTaskResponse_httpStatus,
+
+    -- ** StartMulticastGroupSession
+    startMulticastGroupSession_id,
+    startMulticastGroupSession_loRaWAN,
+    startMulticastGroupSessionResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** TestWirelessDevice
+    testWirelessDevice_id,
+    testWirelessDeviceResponse_result,
+    testWirelessDeviceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateDestination
+    updateDestination_description,
+    updateDestination_expression,
+    updateDestination_expressionType,
+    updateDestination_roleArn,
+    updateDestination_name,
+    updateDestinationResponse_httpStatus,
+
+    -- ** UpdateEventConfigurationByResourceTypes
+    updateEventConfigurationByResourceTypes_connectionStatus,
+    updateEventConfigurationByResourceTypes_deviceRegistrationState,
+    updateEventConfigurationByResourceTypes_join,
+    updateEventConfigurationByResourceTypes_messageDeliveryStatus,
+    updateEventConfigurationByResourceTypes_proximity,
+    updateEventConfigurationByResourceTypesResponse_httpStatus,
+
+    -- ** UpdateFuotaTask
+    updateFuotaTask_description,
+    updateFuotaTask_firmwareUpdateImage,
+    updateFuotaTask_firmwareUpdateRole,
+    updateFuotaTask_loRaWAN,
+    updateFuotaTask_name,
+    updateFuotaTask_id,
+    updateFuotaTaskResponse_httpStatus,
+
+    -- ** UpdateLogLevelsByResourceTypes
+    updateLogLevelsByResourceTypes_defaultLogLevel,
+    updateLogLevelsByResourceTypes_wirelessDeviceLogOptions,
+    updateLogLevelsByResourceTypes_wirelessGatewayLogOptions,
+    updateLogLevelsByResourceTypesResponse_httpStatus,
+
+    -- ** UpdateMulticastGroup
+    updateMulticastGroup_description,
+    updateMulticastGroup_loRaWAN,
+    updateMulticastGroup_name,
+    updateMulticastGroup_id,
+    updateMulticastGroupResponse_httpStatus,
+
+    -- ** UpdateNetworkAnalyzerConfiguration
+    updateNetworkAnalyzerConfiguration_description,
+    updateNetworkAnalyzerConfiguration_traceContent,
+    updateNetworkAnalyzerConfiguration_wirelessDevicesToAdd,
+    updateNetworkAnalyzerConfiguration_wirelessDevicesToRemove,
+    updateNetworkAnalyzerConfiguration_wirelessGatewaysToAdd,
+    updateNetworkAnalyzerConfiguration_wirelessGatewaysToRemove,
+    updateNetworkAnalyzerConfiguration_configurationName,
+    updateNetworkAnalyzerConfigurationResponse_httpStatus,
+
+    -- ** UpdatePartnerAccount
+    updatePartnerAccount_sidewalk,
+    updatePartnerAccount_partnerAccountId,
+    updatePartnerAccount_partnerType,
+    updatePartnerAccountResponse_httpStatus,
+
+    -- ** UpdateResourceEventConfiguration
+    updateResourceEventConfiguration_connectionStatus,
+    updateResourceEventConfiguration_deviceRegistrationState,
+    updateResourceEventConfiguration_join,
+    updateResourceEventConfiguration_messageDeliveryStatus,
+    updateResourceEventConfiguration_partnerType,
+    updateResourceEventConfiguration_proximity,
+    updateResourceEventConfiguration_identifier,
+    updateResourceEventConfiguration_identifierType,
+    updateResourceEventConfigurationResponse_httpStatus,
+
+    -- ** UpdateResourcePosition
+    updateResourcePosition_geoJsonPayload,
+    updateResourcePosition_resourceIdentifier,
+    updateResourcePosition_resourceType,
+    updateResourcePositionResponse_httpStatus,
+
+    -- ** UpdateWirelessDevice
+    updateWirelessDevice_description,
+    updateWirelessDevice_destinationName,
+    updateWirelessDevice_loRaWAN,
+    updateWirelessDevice_name,
+    updateWirelessDevice_positioning,
+    updateWirelessDevice_id,
+    updateWirelessDeviceResponse_httpStatus,
+
+    -- ** UpdateWirelessGateway
+    updateWirelessGateway_description,
+    updateWirelessGateway_joinEuiFilters,
+    updateWirelessGateway_name,
+    updateWirelessGateway_netIdFilters,
+    updateWirelessGateway_id,
+    updateWirelessGatewayResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AbpV1_0_x
+    abpV1_0_x_devAddr,
+    abpV1_0_x_fCntStart,
+    abpV1_0_x_sessionKeys,
+
+    -- ** AbpV1_1
+    abpV1_1_devAddr,
+    abpV1_1_fCntStart,
+    abpV1_1_sessionKeys,
+
+    -- ** ApplicationConfig
+    applicationConfig_destinationName,
+    applicationConfig_fPort,
+    applicationConfig_type,
+
+    -- ** Beaconing
+    beaconing_dataRate,
+    beaconing_frequencies,
+
+    -- ** CdmaLocalId
+    cdmaLocalId_pnOffset,
+    cdmaLocalId_cdmaChannel,
+
+    -- ** CdmaNmrObj
+    cdmaNmrObj_baseStationId,
+    cdmaNmrObj_pilotPower,
+    cdmaNmrObj_pnOffset,
+    cdmaNmrObj_cdmaChannel,
+
+    -- ** CdmaObj
+    cdmaObj_baseLat,
+    cdmaObj_baseLng,
+    cdmaObj_cdmaLocalId,
+    cdmaObj_cdmaNmr,
+    cdmaObj_pilotPower,
+    cdmaObj_registrationZone,
+    cdmaObj_systemId,
+    cdmaObj_networkId,
+    cdmaObj_baseStationId,
+
+    -- ** CellTowers
+    cellTowers_cdma,
+    cellTowers_gsm,
+    cellTowers_lte,
+    cellTowers_tdscdma,
+    cellTowers_wcdma,
+
+    -- ** CertificateList
+    certificateList_signingAlg,
+    certificateList_value,
+
+    -- ** ConnectionStatusEventConfiguration
+    connectionStatusEventConfiguration_loRaWAN,
+    connectionStatusEventConfiguration_wirelessGatewayIdEventTopic,
+
+    -- ** ConnectionStatusResourceTypeEventConfiguration
+    connectionStatusResourceTypeEventConfiguration_loRaWAN,
+
+    -- ** Destinations
+    destinations_arn,
+    destinations_description,
+    destinations_expression,
+    destinations_expressionType,
+    destinations_name,
+    destinations_roleArn,
+
+    -- ** DeviceProfile
+    deviceProfile_arn,
+    deviceProfile_id,
+    deviceProfile_name,
+
+    -- ** DeviceRegistrationStateEventConfiguration
+    deviceRegistrationStateEventConfiguration_sidewalk,
+    deviceRegistrationStateEventConfiguration_wirelessDeviceIdEventTopic,
+
+    -- ** DeviceRegistrationStateResourceTypeEventConfiguration
+    deviceRegistrationStateResourceTypeEventConfiguration_sidewalk,
+
+    -- ** DownlinkQueueMessage
+    downlinkQueueMessage_loRaWAN,
+    downlinkQueueMessage_messageId,
+    downlinkQueueMessage_receivedAt,
+    downlinkQueueMessage_transmitMode,
+
+    -- ** EventConfigurationItem
+    eventConfigurationItem_events,
+    eventConfigurationItem_identifier,
+    eventConfigurationItem_identifierType,
+    eventConfigurationItem_partnerType,
+
+    -- ** EventNotificationItemConfigurations
+    eventNotificationItemConfigurations_connectionStatus,
+    eventNotificationItemConfigurations_deviceRegistrationState,
+    eventNotificationItemConfigurations_join,
+    eventNotificationItemConfigurations_messageDeliveryStatus,
+    eventNotificationItemConfigurations_proximity,
+
+    -- ** FPorts
+    fPorts_applications,
+    fPorts_clockSync,
+    fPorts_fuota,
+    fPorts_multicast,
+    fPorts_positioning,
+
+    -- ** FuotaTask
+    fuotaTask_arn,
+    fuotaTask_id,
+    fuotaTask_name,
+
+    -- ** GatewayListItem
+    gatewayListItem_gatewayId,
+    gatewayListItem_downlinkFrequency,
+
+    -- ** GlobalIdentity
+    globalIdentity_lac,
+    globalIdentity_geranCid,
+
+    -- ** Gnss
+    gnss_assistAltitude,
+    gnss_assistPosition,
+    gnss_captureTime,
+    gnss_captureTimeAccuracy,
+    gnss_use2DSolver,
+    gnss_payload,
+
+    -- ** GsmLocalId
+    gsmLocalId_bsic,
+    gsmLocalId_bcch,
+
+    -- ** GsmNmrObj
+    gsmNmrObj_globalIdentity,
+    gsmNmrObj_rxLevel,
+    gsmNmrObj_bsic,
+    gsmNmrObj_bcch,
+
+    -- ** GsmObj
+    gsmObj_gsmLocalId,
+    gsmObj_gsmNmr,
+    gsmObj_gsmTimingAdvance,
+    gsmObj_rxLevel,
+    gsmObj_mcc,
+    gsmObj_mnc,
+    gsmObj_lac,
+    gsmObj_geranCid,
+
+    -- ** Ip
+    ip_ipAddress,
+
+    -- ** JoinEventConfiguration
+    joinEventConfiguration_loRaWAN,
+    joinEventConfiguration_wirelessDeviceIdEventTopic,
+
+    -- ** JoinResourceTypeEventConfiguration
+    joinResourceTypeEventConfiguration_loRaWAN,
+
+    -- ** LoRaWANConnectionStatusEventNotificationConfigurations
+    loRaWANConnectionStatusEventNotificationConfigurations_gatewayEuiEventTopic,
+
+    -- ** LoRaWANConnectionStatusResourceTypeEventConfiguration
+    loRaWANConnectionStatusResourceTypeEventConfiguration_wirelessGatewayEventTopic,
+
+    -- ** LoRaWANDevice
+    loRaWANDevice_abpV1_0_x,
+    loRaWANDevice_abpV1_1,
+    loRaWANDevice_devEui,
+    loRaWANDevice_deviceProfileId,
+    loRaWANDevice_fPorts,
+    loRaWANDevice_otaaV1_0_x,
+    loRaWANDevice_otaaV1_1,
+    loRaWANDevice_serviceProfileId,
+
+    -- ** LoRaWANDeviceMetadata
+    loRaWANDeviceMetadata_dataRate,
+    loRaWANDeviceMetadata_devEui,
+    loRaWANDeviceMetadata_fPort,
+    loRaWANDeviceMetadata_frequency,
+    loRaWANDeviceMetadata_gateways,
+    loRaWANDeviceMetadata_timestamp,
+
+    -- ** LoRaWANDeviceProfile
+    loRaWANDeviceProfile_classBTimeout,
+    loRaWANDeviceProfile_classCTimeout,
+    loRaWANDeviceProfile_factoryPresetFreqsList,
+    loRaWANDeviceProfile_macVersion,
+    loRaWANDeviceProfile_maxDutyCycle,
+    loRaWANDeviceProfile_maxEirp,
+    loRaWANDeviceProfile_pingSlotDr,
+    loRaWANDeviceProfile_pingSlotFreq,
+    loRaWANDeviceProfile_pingSlotPeriod,
+    loRaWANDeviceProfile_regParamsRevision,
+    loRaWANDeviceProfile_rfRegion,
+    loRaWANDeviceProfile_rxDataRate2,
+    loRaWANDeviceProfile_rxDelay1,
+    loRaWANDeviceProfile_rxDrOffset1,
+    loRaWANDeviceProfile_rxFreq2,
+    loRaWANDeviceProfile_supports32BitFCnt,
+    loRaWANDeviceProfile_supportsClassB,
+    loRaWANDeviceProfile_supportsClassC,
+    loRaWANDeviceProfile_supportsJoin,
+
+    -- ** LoRaWANFuotaTask
+    loRaWANFuotaTask_rfRegion,
+
+    -- ** LoRaWANFuotaTaskGetInfo
+    loRaWANFuotaTaskGetInfo_rfRegion,
+    loRaWANFuotaTaskGetInfo_startTime,
+
+    -- ** LoRaWANGateway
+    loRaWANGateway_beaconing,
+    loRaWANGateway_gatewayEui,
+    loRaWANGateway_joinEuiFilters,
+    loRaWANGateway_netIdFilters,
+    loRaWANGateway_rfRegion,
+    loRaWANGateway_subBands,
+
+    -- ** LoRaWANGatewayCurrentVersion
+    loRaWANGatewayCurrentVersion_currentVersion,
+
+    -- ** LoRaWANGatewayMetadata
+    loRaWANGatewayMetadata_gatewayEui,
+    loRaWANGatewayMetadata_rssi,
+    loRaWANGatewayMetadata_snr,
+
+    -- ** LoRaWANGatewayVersion
+    loRaWANGatewayVersion_model,
+    loRaWANGatewayVersion_packageVersion,
+    loRaWANGatewayVersion_station,
+
+    -- ** LoRaWANGetServiceProfileInfo
+    loRaWANGetServiceProfileInfo_addGwMetadata,
+    loRaWANGetServiceProfileInfo_channelMask,
+    loRaWANGetServiceProfileInfo_devStatusReqFreq,
+    loRaWANGetServiceProfileInfo_dlBucketSize,
+    loRaWANGetServiceProfileInfo_dlRate,
+    loRaWANGetServiceProfileInfo_dlRatePolicy,
+    loRaWANGetServiceProfileInfo_drMax,
+    loRaWANGetServiceProfileInfo_drMin,
+    loRaWANGetServiceProfileInfo_hrAllowed,
+    loRaWANGetServiceProfileInfo_minGwDiversity,
+    loRaWANGetServiceProfileInfo_nwkGeoLoc,
+    loRaWANGetServiceProfileInfo_prAllowed,
+    loRaWANGetServiceProfileInfo_raAllowed,
+    loRaWANGetServiceProfileInfo_reportDevStatusBattery,
+    loRaWANGetServiceProfileInfo_reportDevStatusMargin,
+    loRaWANGetServiceProfileInfo_targetPer,
+    loRaWANGetServiceProfileInfo_ulBucketSize,
+    loRaWANGetServiceProfileInfo_ulRate,
+    loRaWANGetServiceProfileInfo_ulRatePolicy,
+
+    -- ** LoRaWANJoinEventNotificationConfigurations
+    loRaWANJoinEventNotificationConfigurations_devEuiEventTopic,
+
+    -- ** LoRaWANJoinResourceTypeEventConfiguration
+    loRaWANJoinResourceTypeEventConfiguration_wirelessDeviceEventTopic,
+
+    -- ** LoRaWANListDevice
+    loRaWANListDevice_devEui,
+
+    -- ** LoRaWANMulticast
+    loRaWANMulticast_dlClass,
+    loRaWANMulticast_rfRegion,
+
+    -- ** LoRaWANMulticastGet
+    loRaWANMulticastGet_dlClass,
+    loRaWANMulticastGet_numberOfDevicesInGroup,
+    loRaWANMulticastGet_numberOfDevicesRequested,
+    loRaWANMulticastGet_rfRegion,
+
+    -- ** LoRaWANMulticastMetadata
+    loRaWANMulticastMetadata_fPort,
+
+    -- ** LoRaWANMulticastSession
+    loRaWANMulticastSession_dlDr,
+    loRaWANMulticastSession_dlFreq,
+    loRaWANMulticastSession_sessionStartTime,
+    loRaWANMulticastSession_sessionTimeout,
+
+    -- ** LoRaWANSendDataToDevice
+    loRaWANSendDataToDevice_fPort,
+    loRaWANSendDataToDevice_participatingGateways,
+
+    -- ** LoRaWANServiceProfile
+    loRaWANServiceProfile_addGwMetadata,
+    loRaWANServiceProfile_drMax,
+    loRaWANServiceProfile_drMin,
+
+    -- ** LoRaWANStartFuotaTask
+    loRaWANStartFuotaTask_startTime,
+
+    -- ** LoRaWANUpdateDevice
+    loRaWANUpdateDevice_abpV1_0_x,
+    loRaWANUpdateDevice_abpV1_1,
+    loRaWANUpdateDevice_deviceProfileId,
+    loRaWANUpdateDevice_fPorts,
+    loRaWANUpdateDevice_serviceProfileId,
+
+    -- ** LoRaWANUpdateGatewayTaskCreate
+    loRaWANUpdateGatewayTaskCreate_currentVersion,
+    loRaWANUpdateGatewayTaskCreate_sigKeyCrc,
+    loRaWANUpdateGatewayTaskCreate_updateSignature,
+    loRaWANUpdateGatewayTaskCreate_updateVersion,
+
+    -- ** LoRaWANUpdateGatewayTaskEntry
+    loRaWANUpdateGatewayTaskEntry_currentVersion,
+    loRaWANUpdateGatewayTaskEntry_updateVersion,
+
+    -- ** LteLocalId
+    lteLocalId_pci,
+    lteLocalId_earfcn,
+
+    -- ** LteNmrObj
+    lteNmrObj_rsrp,
+    lteNmrObj_rsrq,
+    lteNmrObj_pci,
+    lteNmrObj_earfcn,
+    lteNmrObj_eutranCid,
+
+    -- ** LteObj
+    lteObj_lteLocalId,
+    lteObj_lteNmr,
+    lteObj_lteTimingAdvance,
+    lteObj_nrCapable,
+    lteObj_rsrp,
+    lteObj_rsrq,
+    lteObj_tac,
+    lteObj_mcc,
+    lteObj_mnc,
+    lteObj_eutranCid,
+
+    -- ** MessageDeliveryStatusEventConfiguration
+    messageDeliveryStatusEventConfiguration_sidewalk,
+    messageDeliveryStatusEventConfiguration_wirelessDeviceIdEventTopic,
+
+    -- ** MessageDeliveryStatusResourceTypeEventConfiguration
+    messageDeliveryStatusResourceTypeEventConfiguration_sidewalk,
+
+    -- ** MulticastGroup
+    multicastGroup_arn,
+    multicastGroup_id,
+    multicastGroup_name,
+
+    -- ** MulticastGroupByFuotaTask
+    multicastGroupByFuotaTask_id,
+
+    -- ** MulticastWirelessMetadata
+    multicastWirelessMetadata_loRaWAN,
+
+    -- ** NetworkAnalyzerConfigurations
+    networkAnalyzerConfigurations_arn,
+    networkAnalyzerConfigurations_name,
+
+    -- ** OtaaV1_0_x
+    otaaV1_0_x_appEui,
+    otaaV1_0_x_appKey,
+    otaaV1_0_x_genAppKey,
+
+    -- ** OtaaV1_1
+    otaaV1_1_appKey,
+    otaaV1_1_joinEui,
+    otaaV1_1_nwkKey,
+
+    -- ** ParticipatingGateways
+    participatingGateways_downlinkMode,
+    participatingGateways_gatewayList,
+    participatingGateways_transmissionInterval,
+
+    -- ** Positioning
+    positioning_clockSync,
+    positioning_gnss,
+    positioning_stream,
+
+    -- ** ProximityEventConfiguration
+    proximityEventConfiguration_sidewalk,
+    proximityEventConfiguration_wirelessDeviceIdEventTopic,
+
+    -- ** ProximityResourceTypeEventConfiguration
+    proximityResourceTypeEventConfiguration_sidewalk,
+
+    -- ** ServiceProfile
+    serviceProfile_arn,
+    serviceProfile_id,
+    serviceProfile_name,
+
+    -- ** SessionKeysAbpV1_0_x
+    sessionKeysAbpV1_0_x_appSKey,
+    sessionKeysAbpV1_0_x_nwkSKey,
+
+    -- ** SessionKeysAbpV1_1
+    sessionKeysAbpV1_1_appSKey,
+    sessionKeysAbpV1_1_fNwkSIntKey,
+    sessionKeysAbpV1_1_nwkSEncKey,
+    sessionKeysAbpV1_1_sNwkSIntKey,
+
+    -- ** SidewalkAccountInfo
+    sidewalkAccountInfo_amazonId,
+    sidewalkAccountInfo_appServerPrivateKey,
+
+    -- ** SidewalkAccountInfoWithFingerprint
+    sidewalkAccountInfoWithFingerprint_amazonId,
+    sidewalkAccountInfoWithFingerprint_arn,
+    sidewalkAccountInfoWithFingerprint_fingerprint,
+
+    -- ** SidewalkDevice
+    sidewalkDevice_amazonId,
+    sidewalkDevice_deviceCertificates,
+    sidewalkDevice_sidewalkId,
+    sidewalkDevice_sidewalkManufacturingSn,
+
+    -- ** SidewalkDeviceMetadata
+    sidewalkDeviceMetadata_batteryLevel,
+    sidewalkDeviceMetadata_deviceState,
+    sidewalkDeviceMetadata_event,
+    sidewalkDeviceMetadata_rssi,
+
+    -- ** SidewalkEventNotificationConfigurations
+    sidewalkEventNotificationConfigurations_amazonIdEventTopic,
+
+    -- ** SidewalkListDevice
+    sidewalkListDevice_amazonId,
+    sidewalkListDevice_deviceCertificates,
+    sidewalkListDevice_sidewalkId,
+    sidewalkListDevice_sidewalkManufacturingSn,
+
+    -- ** SidewalkResourceTypeEventConfiguration
+    sidewalkResourceTypeEventConfiguration_wirelessDeviceEventTopic,
+
+    -- ** SidewalkSendDataToDevice
+    sidewalkSendDataToDevice_ackModeRetryDurationSecs,
+    sidewalkSendDataToDevice_messageType,
+    sidewalkSendDataToDevice_seq,
+
+    -- ** SidewalkUpdateAccount
+    sidewalkUpdateAccount_appServerPrivateKey,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TdscdmaLocalId
+    tdscdmaLocalId_uarfcn,
+    tdscdmaLocalId_cellParams,
+
+    -- ** TdscdmaNmrObj
+    tdscdmaNmrObj_pathLoss,
+    tdscdmaNmrObj_rscp,
+    tdscdmaNmrObj_utranCid,
+    tdscdmaNmrObj_uarfcn,
+    tdscdmaNmrObj_cellParams,
+
+    -- ** TdscdmaObj
+    tdscdmaObj_lac,
+    tdscdmaObj_pathLoss,
+    tdscdmaObj_rscp,
+    tdscdmaObj_tdscdmaLocalId,
+    tdscdmaObj_tdscdmaNmr,
+    tdscdmaObj_tdscdmaTimingAdvance,
+    tdscdmaObj_mcc,
+    tdscdmaObj_mnc,
+    tdscdmaObj_utranCid,
+
+    -- ** TraceContent
+    traceContent_logLevel,
+    traceContent_wirelessDeviceFrameInfo,
+
+    -- ** UpdateAbpV1_0_x
+    updateAbpV1_0_x_fCntStart,
+
+    -- ** UpdateAbpV1_1
+    updateAbpV1_1_fCntStart,
+
+    -- ** UpdateFPorts
+    updateFPorts_applications,
+    updateFPorts_positioning,
+
+    -- ** UpdateWirelessGatewayTaskCreate
+    updateWirelessGatewayTaskCreate_loRaWAN,
+    updateWirelessGatewayTaskCreate_updateDataRole,
+    updateWirelessGatewayTaskCreate_updateDataSource,
+
+    -- ** UpdateWirelessGatewayTaskEntry
+    updateWirelessGatewayTaskEntry_arn,
+    updateWirelessGatewayTaskEntry_id,
+    updateWirelessGatewayTaskEntry_loRaWAN,
+
+    -- ** WcdmaLocalId
+    wcdmaLocalId_uarfcndl,
+    wcdmaLocalId_psc,
+
+    -- ** WcdmaNmrObj
+    wcdmaNmrObj_pathLoss,
+    wcdmaNmrObj_rscp,
+    wcdmaNmrObj_uarfcndl,
+    wcdmaNmrObj_psc,
+    wcdmaNmrObj_utranCid,
+
+    -- ** WcdmaObj
+    wcdmaObj_lac,
+    wcdmaObj_pathLoss,
+    wcdmaObj_rscp,
+    wcdmaObj_wcdmaLocalId,
+    wcdmaObj_wcdmaNmr,
+    wcdmaObj_mcc,
+    wcdmaObj_mnc,
+    wcdmaObj_utranCid,
+
+    -- ** WiFiAccessPoint
+    wiFiAccessPoint_macAddress,
+    wiFiAccessPoint_rss,
+
+    -- ** WirelessDeviceEventLogOption
+    wirelessDeviceEventLogOption_event,
+    wirelessDeviceEventLogOption_logLevel,
+
+    -- ** WirelessDeviceLogOption
+    wirelessDeviceLogOption_events,
+    wirelessDeviceLogOption_type,
+    wirelessDeviceLogOption_logLevel,
+
+    -- ** WirelessDeviceStatistics
+    wirelessDeviceStatistics_arn,
+    wirelessDeviceStatistics_destinationName,
+    wirelessDeviceStatistics_fuotaDeviceStatus,
+    wirelessDeviceStatistics_id,
+    wirelessDeviceStatistics_lastUplinkReceivedAt,
+    wirelessDeviceStatistics_loRaWAN,
+    wirelessDeviceStatistics_mcGroupId,
+    wirelessDeviceStatistics_multicastDeviceStatus,
+    wirelessDeviceStatistics_name,
+    wirelessDeviceStatistics_sidewalk,
+    wirelessDeviceStatistics_type,
+
+    -- ** WirelessGatewayEventLogOption
+    wirelessGatewayEventLogOption_event,
+    wirelessGatewayEventLogOption_logLevel,
+
+    -- ** WirelessGatewayLogOption
+    wirelessGatewayLogOption_events,
+    wirelessGatewayLogOption_type,
+    wirelessGatewayLogOption_logLevel,
+
+    -- ** WirelessGatewayStatistics
+    wirelessGatewayStatistics_arn,
+    wirelessGatewayStatistics_description,
+    wirelessGatewayStatistics_id,
+    wirelessGatewayStatistics_lastUplinkReceivedAt,
+    wirelessGatewayStatistics_loRaWAN,
+    wirelessGatewayStatistics_name,
+
+    -- ** WirelessMetadata
+    wirelessMetadata_loRaWAN,
+    wirelessMetadata_sidewalk,
+  )
+where
+
+import Amazonka.IoTWireless.AssociateAwsAccountWithPartnerAccount
+import Amazonka.IoTWireless.AssociateMulticastGroupWithFuotaTask
+import Amazonka.IoTWireless.AssociateWirelessDeviceWithFuotaTask
+import Amazonka.IoTWireless.AssociateWirelessDeviceWithMulticastGroup
+import Amazonka.IoTWireless.AssociateWirelessDeviceWithThing
+import Amazonka.IoTWireless.AssociateWirelessGatewayWithCertificate
+import Amazonka.IoTWireless.AssociateWirelessGatewayWithThing
+import Amazonka.IoTWireless.CancelMulticastGroupSession
+import Amazonka.IoTWireless.CreateDestination
+import Amazonka.IoTWireless.CreateDeviceProfile
+import Amazonka.IoTWireless.CreateFuotaTask
+import Amazonka.IoTWireless.CreateMulticastGroup
+import Amazonka.IoTWireless.CreateNetworkAnalyzerConfiguration
+import Amazonka.IoTWireless.CreateServiceProfile
+import Amazonka.IoTWireless.CreateWirelessDevice
+import Amazonka.IoTWireless.CreateWirelessGateway
+import Amazonka.IoTWireless.CreateWirelessGatewayTask
+import Amazonka.IoTWireless.CreateWirelessGatewayTaskDefinition
+import Amazonka.IoTWireless.DeleteDestination
+import Amazonka.IoTWireless.DeleteDeviceProfile
+import Amazonka.IoTWireless.DeleteFuotaTask
+import Amazonka.IoTWireless.DeleteMulticastGroup
+import Amazonka.IoTWireless.DeleteNetworkAnalyzerConfiguration
+import Amazonka.IoTWireless.DeleteQueuedMessages
+import Amazonka.IoTWireless.DeleteServiceProfile
+import Amazonka.IoTWireless.DeleteWirelessDevice
+import Amazonka.IoTWireless.DeleteWirelessGateway
+import Amazonka.IoTWireless.DeleteWirelessGatewayTask
+import Amazonka.IoTWireless.DeleteWirelessGatewayTaskDefinition
+import Amazonka.IoTWireless.DisassociateAwsAccountFromPartnerAccount
+import Amazonka.IoTWireless.DisassociateMulticastGroupFromFuotaTask
+import Amazonka.IoTWireless.DisassociateWirelessDeviceFromFuotaTask
+import Amazonka.IoTWireless.DisassociateWirelessDeviceFromMulticastGroup
+import Amazonka.IoTWireless.DisassociateWirelessDeviceFromThing
+import Amazonka.IoTWireless.DisassociateWirelessGatewayFromCertificate
+import Amazonka.IoTWireless.DisassociateWirelessGatewayFromThing
+import Amazonka.IoTWireless.GetDestination
+import Amazonka.IoTWireless.GetDeviceProfile
+import Amazonka.IoTWireless.GetEventConfigurationByResourceTypes
+import Amazonka.IoTWireless.GetFuotaTask
+import Amazonka.IoTWireless.GetLogLevelsByResourceTypes
+import Amazonka.IoTWireless.GetMulticastGroup
+import Amazonka.IoTWireless.GetMulticastGroupSession
+import Amazonka.IoTWireless.GetNetworkAnalyzerConfiguration
+import Amazonka.IoTWireless.GetPartnerAccount
+import Amazonka.IoTWireless.GetPositionEstimate
+import Amazonka.IoTWireless.GetResourceEventConfiguration
+import Amazonka.IoTWireless.GetResourceLogLevel
+import Amazonka.IoTWireless.GetResourcePosition
+import Amazonka.IoTWireless.GetServiceEndpoint
+import Amazonka.IoTWireless.GetServiceProfile
+import Amazonka.IoTWireless.GetWirelessDevice
+import Amazonka.IoTWireless.GetWirelessDeviceStatistics
+import Amazonka.IoTWireless.GetWirelessGateway
+import Amazonka.IoTWireless.GetWirelessGatewayCertificate
+import Amazonka.IoTWireless.GetWirelessGatewayFirmwareInformation
+import Amazonka.IoTWireless.GetWirelessGatewayStatistics
+import Amazonka.IoTWireless.GetWirelessGatewayTask
+import Amazonka.IoTWireless.GetWirelessGatewayTaskDefinition
+import Amazonka.IoTWireless.ListDestinations
+import Amazonka.IoTWireless.ListDeviceProfiles
+import Amazonka.IoTWireless.ListEventConfigurations
+import Amazonka.IoTWireless.ListFuotaTasks
+import Amazonka.IoTWireless.ListMulticastGroups
+import Amazonka.IoTWireless.ListMulticastGroupsByFuotaTask
+import Amazonka.IoTWireless.ListNetworkAnalyzerConfigurations
+import Amazonka.IoTWireless.ListPartnerAccounts
+import Amazonka.IoTWireless.ListQueuedMessages
+import Amazonka.IoTWireless.ListServiceProfiles
+import Amazonka.IoTWireless.ListTagsForResource
+import Amazonka.IoTWireless.ListWirelessDevices
+import Amazonka.IoTWireless.ListWirelessGatewayTaskDefinitions
+import Amazonka.IoTWireless.ListWirelessGateways
+import Amazonka.IoTWireless.PutResourceLogLevel
+import Amazonka.IoTWireless.ResetAllResourceLogLevels
+import Amazonka.IoTWireless.ResetResourceLogLevel
+import Amazonka.IoTWireless.SendDataToMulticastGroup
+import Amazonka.IoTWireless.SendDataToWirelessDevice
+import Amazonka.IoTWireless.StartBulkAssociateWirelessDeviceWithMulticastGroup
+import Amazonka.IoTWireless.StartBulkDisassociateWirelessDeviceFromMulticastGroup
+import Amazonka.IoTWireless.StartFuotaTask
+import Amazonka.IoTWireless.StartMulticastGroupSession
+import Amazonka.IoTWireless.TagResource
+import Amazonka.IoTWireless.TestWirelessDevice
+import Amazonka.IoTWireless.Types.AbpV1_0_x
+import Amazonka.IoTWireless.Types.AbpV1_1
+import Amazonka.IoTWireless.Types.ApplicationConfig
+import Amazonka.IoTWireless.Types.Beaconing
+import Amazonka.IoTWireless.Types.CdmaLocalId
+import Amazonka.IoTWireless.Types.CdmaNmrObj
+import Amazonka.IoTWireless.Types.CdmaObj
+import Amazonka.IoTWireless.Types.CellTowers
+import Amazonka.IoTWireless.Types.CertificateList
+import Amazonka.IoTWireless.Types.ConnectionStatusEventConfiguration
+import Amazonka.IoTWireless.Types.ConnectionStatusResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.Destinations
+import Amazonka.IoTWireless.Types.DeviceProfile
+import Amazonka.IoTWireless.Types.DeviceRegistrationStateEventConfiguration
+import Amazonka.IoTWireless.Types.DeviceRegistrationStateResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.DownlinkQueueMessage
+import Amazonka.IoTWireless.Types.EventConfigurationItem
+import Amazonka.IoTWireless.Types.EventNotificationItemConfigurations
+import Amazonka.IoTWireless.Types.FPorts
+import Amazonka.IoTWireless.Types.FuotaTask
+import Amazonka.IoTWireless.Types.GatewayListItem
+import Amazonka.IoTWireless.Types.GlobalIdentity
+import Amazonka.IoTWireless.Types.Gnss
+import Amazonka.IoTWireless.Types.GsmLocalId
+import Amazonka.IoTWireless.Types.GsmNmrObj
+import Amazonka.IoTWireless.Types.GsmObj
+import Amazonka.IoTWireless.Types.Ip
+import Amazonka.IoTWireless.Types.JoinEventConfiguration
+import Amazonka.IoTWireless.Types.JoinResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.LoRaWANConnectionStatusEventNotificationConfigurations
+import Amazonka.IoTWireless.Types.LoRaWANConnectionStatusResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.LoRaWANDevice
+import Amazonka.IoTWireless.Types.LoRaWANDeviceMetadata
+import Amazonka.IoTWireless.Types.LoRaWANDeviceProfile
+import Amazonka.IoTWireless.Types.LoRaWANFuotaTask
+import Amazonka.IoTWireless.Types.LoRaWANFuotaTaskGetInfo
+import Amazonka.IoTWireless.Types.LoRaWANGateway
+import Amazonka.IoTWireless.Types.LoRaWANGatewayCurrentVersion
+import Amazonka.IoTWireless.Types.LoRaWANGatewayMetadata
+import Amazonka.IoTWireless.Types.LoRaWANGatewayVersion
+import Amazonka.IoTWireless.Types.LoRaWANGetServiceProfileInfo
+import Amazonka.IoTWireless.Types.LoRaWANJoinEventNotificationConfigurations
+import Amazonka.IoTWireless.Types.LoRaWANJoinResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.LoRaWANListDevice
+import Amazonka.IoTWireless.Types.LoRaWANMulticast
+import Amazonka.IoTWireless.Types.LoRaWANMulticastGet
+import Amazonka.IoTWireless.Types.LoRaWANMulticastMetadata
+import Amazonka.IoTWireless.Types.LoRaWANMulticastSession
+import Amazonka.IoTWireless.Types.LoRaWANSendDataToDevice
+import Amazonka.IoTWireless.Types.LoRaWANServiceProfile
+import Amazonka.IoTWireless.Types.LoRaWANStartFuotaTask
+import Amazonka.IoTWireless.Types.LoRaWANUpdateDevice
+import Amazonka.IoTWireless.Types.LoRaWANUpdateGatewayTaskCreate
+import Amazonka.IoTWireless.Types.LoRaWANUpdateGatewayTaskEntry
+import Amazonka.IoTWireless.Types.LteLocalId
+import Amazonka.IoTWireless.Types.LteNmrObj
+import Amazonka.IoTWireless.Types.LteObj
+import Amazonka.IoTWireless.Types.MessageDeliveryStatusEventConfiguration
+import Amazonka.IoTWireless.Types.MessageDeliveryStatusResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.MulticastGroup
+import Amazonka.IoTWireless.Types.MulticastGroupByFuotaTask
+import Amazonka.IoTWireless.Types.MulticastWirelessMetadata
+import Amazonka.IoTWireless.Types.NetworkAnalyzerConfigurations
+import Amazonka.IoTWireless.Types.OtaaV1_0_x
+import Amazonka.IoTWireless.Types.OtaaV1_1
+import Amazonka.IoTWireless.Types.ParticipatingGateways
+import Amazonka.IoTWireless.Types.Positioning
+import Amazonka.IoTWireless.Types.ProximityEventConfiguration
+import Amazonka.IoTWireless.Types.ProximityResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.ServiceProfile
+import Amazonka.IoTWireless.Types.SessionKeysAbpV1_0_x
+import Amazonka.IoTWireless.Types.SessionKeysAbpV1_1
+import Amazonka.IoTWireless.Types.SidewalkAccountInfo
+import Amazonka.IoTWireless.Types.SidewalkAccountInfoWithFingerprint
+import Amazonka.IoTWireless.Types.SidewalkDevice
+import Amazonka.IoTWireless.Types.SidewalkDeviceMetadata
+import Amazonka.IoTWireless.Types.SidewalkEventNotificationConfigurations
+import Amazonka.IoTWireless.Types.SidewalkListDevice
+import Amazonka.IoTWireless.Types.SidewalkResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.SidewalkSendDataToDevice
+import Amazonka.IoTWireless.Types.SidewalkUpdateAccount
+import Amazonka.IoTWireless.Types.Tag
+import Amazonka.IoTWireless.Types.TdscdmaLocalId
+import Amazonka.IoTWireless.Types.TdscdmaNmrObj
+import Amazonka.IoTWireless.Types.TdscdmaObj
+import Amazonka.IoTWireless.Types.TraceContent
+import Amazonka.IoTWireless.Types.UpdateAbpV1_0_x
+import Amazonka.IoTWireless.Types.UpdateAbpV1_1
+import Amazonka.IoTWireless.Types.UpdateFPorts
+import Amazonka.IoTWireless.Types.UpdateWirelessGatewayTaskCreate
+import Amazonka.IoTWireless.Types.UpdateWirelessGatewayTaskEntry
+import Amazonka.IoTWireless.Types.WcdmaLocalId
+import Amazonka.IoTWireless.Types.WcdmaNmrObj
+import Amazonka.IoTWireless.Types.WcdmaObj
+import Amazonka.IoTWireless.Types.WiFiAccessPoint
+import Amazonka.IoTWireless.Types.WirelessDeviceEventLogOption
+import Amazonka.IoTWireless.Types.WirelessDeviceLogOption
+import Amazonka.IoTWireless.Types.WirelessDeviceStatistics
+import Amazonka.IoTWireless.Types.WirelessGatewayEventLogOption
+import Amazonka.IoTWireless.Types.WirelessGatewayLogOption
+import Amazonka.IoTWireless.Types.WirelessGatewayStatistics
+import Amazonka.IoTWireless.Types.WirelessMetadata
+import Amazonka.IoTWireless.UntagResource
+import Amazonka.IoTWireless.UpdateDestination
+import Amazonka.IoTWireless.UpdateEventConfigurationByResourceTypes
+import Amazonka.IoTWireless.UpdateFuotaTask
+import Amazonka.IoTWireless.UpdateLogLevelsByResourceTypes
+import Amazonka.IoTWireless.UpdateMulticastGroup
+import Amazonka.IoTWireless.UpdateNetworkAnalyzerConfiguration
+import Amazonka.IoTWireless.UpdatePartnerAccount
+import Amazonka.IoTWireless.UpdateResourceEventConfiguration
+import Amazonka.IoTWireless.UpdateResourcePosition
+import Amazonka.IoTWireless.UpdateWirelessDevice
+import Amazonka.IoTWireless.UpdateWirelessGateway
diff --git a/gen/Amazonka/IoTWireless/ListDestinations.hs b/gen/Amazonka/IoTWireless/ListDestinations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListDestinations.hs
@@ -0,0 +1,191 @@
+{-# 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.IoTWireless.ListDestinations
+-- 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 destinations registered to your AWS account.
+module Amazonka.IoTWireless.ListDestinations
+  ( -- * Creating a Request
+    ListDestinations (..),
+    newListDestinations,
+
+    -- * Request Lenses
+    listDestinations_maxResults,
+    listDestinations_nextToken,
+
+    -- * Destructuring the Response
+    ListDestinationsResponse (..),
+    newListDestinationsResponse,
+
+    -- * Response Lenses
+    listDestinationsResponse_destinationList,
+    listDestinationsResponse_nextToken,
+    listDestinationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDestinations' smart constructor.
+data ListDestinations = ListDestinations'
+  { -- | The maximum number of results to return in this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDestinations' 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', 'listDestinations_maxResults' - The maximum number of results to return in this operation.
+--
+-- 'nextToken', 'listDestinations_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+newListDestinations ::
+  ListDestinations
+newListDestinations =
+  ListDestinations'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this operation.
+listDestinations_maxResults :: Lens.Lens' ListDestinations (Prelude.Maybe Prelude.Natural)
+listDestinations_maxResults = Lens.lens (\ListDestinations' {maxResults} -> maxResults) (\s@ListDestinations' {} a -> s {maxResults = a} :: ListDestinations)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listDestinations_nextToken :: Lens.Lens' ListDestinations (Prelude.Maybe Prelude.Text)
+listDestinations_nextToken = Lens.lens (\ListDestinations' {nextToken} -> nextToken) (\s@ListDestinations' {} a -> s {nextToken = a} :: ListDestinations)
+
+instance Core.AWSRequest ListDestinations where
+  type
+    AWSResponse ListDestinations =
+      ListDestinationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDestinationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "DestinationList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDestinations where
+  hashWithSalt _salt ListDestinations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDestinations where
+  rnf ListDestinations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDestinations where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListDestinations where
+  toPath = Prelude.const "/destinations"
+
+instance Data.ToQuery ListDestinations where
+  toQuery ListDestinations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDestinationsResponse' smart constructor.
+data ListDestinationsResponse = ListDestinationsResponse'
+  { -- | The list of destinations.
+    destinationList :: Prelude.Maybe [Destinations],
+    -- | The token to use to get the next set of results, or __null__ if there
+    -- are no additional results.
+    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 'ListDestinationsResponse' 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:
+--
+-- 'destinationList', 'listDestinationsResponse_destinationList' - The list of destinations.
+--
+-- 'nextToken', 'listDestinationsResponse_nextToken' - The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+--
+-- 'httpStatus', 'listDestinationsResponse_httpStatus' - The response's http status code.
+newListDestinationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDestinationsResponse
+newListDestinationsResponse pHttpStatus_ =
+  ListDestinationsResponse'
+    { destinationList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of destinations.
+listDestinationsResponse_destinationList :: Lens.Lens' ListDestinationsResponse (Prelude.Maybe [Destinations])
+listDestinationsResponse_destinationList = Lens.lens (\ListDestinationsResponse' {destinationList} -> destinationList) (\s@ListDestinationsResponse' {} a -> s {destinationList = a} :: ListDestinationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+listDestinationsResponse_nextToken :: Lens.Lens' ListDestinationsResponse (Prelude.Maybe Prelude.Text)
+listDestinationsResponse_nextToken = Lens.lens (\ListDestinationsResponse' {nextToken} -> nextToken) (\s@ListDestinationsResponse' {} a -> s {nextToken = a} :: ListDestinationsResponse)
+
+-- | The response's http status code.
+listDestinationsResponse_httpStatus :: Lens.Lens' ListDestinationsResponse Prelude.Int
+listDestinationsResponse_httpStatus = Lens.lens (\ListDestinationsResponse' {httpStatus} -> httpStatus) (\s@ListDestinationsResponse' {} a -> s {httpStatus = a} :: ListDestinationsResponse)
+
+instance Prelude.NFData ListDestinationsResponse where
+  rnf ListDestinationsResponse' {..} =
+    Prelude.rnf destinationList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListDeviceProfiles.hs b/gen/Amazonka/IoTWireless/ListDeviceProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListDeviceProfiles.hs
@@ -0,0 +1,191 @@
+{-# 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.IoTWireless.ListDeviceProfiles
+-- 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 profiles registered to your AWS account.
+module Amazonka.IoTWireless.ListDeviceProfiles
+  ( -- * Creating a Request
+    ListDeviceProfiles (..),
+    newListDeviceProfiles,
+
+    -- * Request Lenses
+    listDeviceProfiles_maxResults,
+    listDeviceProfiles_nextToken,
+
+    -- * Destructuring the Response
+    ListDeviceProfilesResponse (..),
+    newListDeviceProfilesResponse,
+
+    -- * Response Lenses
+    listDeviceProfilesResponse_deviceProfileList,
+    listDeviceProfilesResponse_nextToken,
+    listDeviceProfilesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDeviceProfiles' smart constructor.
+data ListDeviceProfiles = ListDeviceProfiles'
+  { -- | The maximum number of results to return in this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDeviceProfiles' 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', 'listDeviceProfiles_maxResults' - The maximum number of results to return in this operation.
+--
+-- 'nextToken', 'listDeviceProfiles_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+newListDeviceProfiles ::
+  ListDeviceProfiles
+newListDeviceProfiles =
+  ListDeviceProfiles'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this operation.
+listDeviceProfiles_maxResults :: Lens.Lens' ListDeviceProfiles (Prelude.Maybe Prelude.Natural)
+listDeviceProfiles_maxResults = Lens.lens (\ListDeviceProfiles' {maxResults} -> maxResults) (\s@ListDeviceProfiles' {} a -> s {maxResults = a} :: ListDeviceProfiles)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listDeviceProfiles_nextToken :: Lens.Lens' ListDeviceProfiles (Prelude.Maybe Prelude.Text)
+listDeviceProfiles_nextToken = Lens.lens (\ListDeviceProfiles' {nextToken} -> nextToken) (\s@ListDeviceProfiles' {} a -> s {nextToken = a} :: ListDeviceProfiles)
+
+instance Core.AWSRequest ListDeviceProfiles where
+  type
+    AWSResponse ListDeviceProfiles =
+      ListDeviceProfilesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDeviceProfilesResponse'
+            Prelude.<$> ( x
+                            Data..?> "DeviceProfileList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDeviceProfiles where
+  hashWithSalt _salt ListDeviceProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDeviceProfiles where
+  rnf ListDeviceProfiles' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDeviceProfiles where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListDeviceProfiles where
+  toPath = Prelude.const "/device-profiles"
+
+instance Data.ToQuery ListDeviceProfiles where
+  toQuery ListDeviceProfiles' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDeviceProfilesResponse' smart constructor.
+data ListDeviceProfilesResponse = ListDeviceProfilesResponse'
+  { -- | The list of device profiles.
+    deviceProfileList :: Prelude.Maybe [DeviceProfile],
+    -- | The token to use to get the next set of results, or __null__ if there
+    -- are no additional results.
+    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 'ListDeviceProfilesResponse' 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:
+--
+-- 'deviceProfileList', 'listDeviceProfilesResponse_deviceProfileList' - The list of device profiles.
+--
+-- 'nextToken', 'listDeviceProfilesResponse_nextToken' - The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+--
+-- 'httpStatus', 'listDeviceProfilesResponse_httpStatus' - The response's http status code.
+newListDeviceProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDeviceProfilesResponse
+newListDeviceProfilesResponse pHttpStatus_ =
+  ListDeviceProfilesResponse'
+    { deviceProfileList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of device profiles.
+listDeviceProfilesResponse_deviceProfileList :: Lens.Lens' ListDeviceProfilesResponse (Prelude.Maybe [DeviceProfile])
+listDeviceProfilesResponse_deviceProfileList = Lens.lens (\ListDeviceProfilesResponse' {deviceProfileList} -> deviceProfileList) (\s@ListDeviceProfilesResponse' {} a -> s {deviceProfileList = a} :: ListDeviceProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+listDeviceProfilesResponse_nextToken :: Lens.Lens' ListDeviceProfilesResponse (Prelude.Maybe Prelude.Text)
+listDeviceProfilesResponse_nextToken = Lens.lens (\ListDeviceProfilesResponse' {nextToken} -> nextToken) (\s@ListDeviceProfilesResponse' {} a -> s {nextToken = a} :: ListDeviceProfilesResponse)
+
+-- | The response's http status code.
+listDeviceProfilesResponse_httpStatus :: Lens.Lens' ListDeviceProfilesResponse Prelude.Int
+listDeviceProfilesResponse_httpStatus = Lens.lens (\ListDeviceProfilesResponse' {httpStatus} -> httpStatus) (\s@ListDeviceProfilesResponse' {} a -> s {httpStatus = a} :: ListDeviceProfilesResponse)
+
+instance Prelude.NFData ListDeviceProfilesResponse where
+  rnf ListDeviceProfilesResponse' {..} =
+    Prelude.rnf deviceProfileList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListEventConfigurations.hs b/gen/Amazonka/IoTWireless/ListEventConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListEventConfigurations.hs
@@ -0,0 +1,213 @@
+{-# 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.IoTWireless.ListEventConfigurations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List event configurations where at least one event topic has been
+-- enabled.
+module Amazonka.IoTWireless.ListEventConfigurations
+  ( -- * Creating a Request
+    ListEventConfigurations (..),
+    newListEventConfigurations,
+
+    -- * Request Lenses
+    listEventConfigurations_maxResults,
+    listEventConfigurations_nextToken,
+    listEventConfigurations_resourceType,
+
+    -- * Destructuring the Response
+    ListEventConfigurationsResponse (..),
+    newListEventConfigurationsResponse,
+
+    -- * Response Lenses
+    listEventConfigurationsResponse_eventConfigurationsList,
+    listEventConfigurationsResponse_nextToken,
+    listEventConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEventConfigurations' smart constructor.
+data ListEventConfigurations = ListEventConfigurations'
+  { maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Resource type to filter event configurations.
+    resourceType :: EventNotificationResourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventConfigurations' 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', 'listEventConfigurations_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listEventConfigurations_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'resourceType', 'listEventConfigurations_resourceType' - Resource type to filter event configurations.
+newListEventConfigurations ::
+  -- | 'resourceType'
+  EventNotificationResourceType ->
+  ListEventConfigurations
+newListEventConfigurations pResourceType_ =
+  ListEventConfigurations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceType = pResourceType_
+    }
+
+-- | Undocumented member.
+listEventConfigurations_maxResults :: Lens.Lens' ListEventConfigurations (Prelude.Maybe Prelude.Natural)
+listEventConfigurations_maxResults = Lens.lens (\ListEventConfigurations' {maxResults} -> maxResults) (\s@ListEventConfigurations' {} a -> s {maxResults = a} :: ListEventConfigurations)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listEventConfigurations_nextToken :: Lens.Lens' ListEventConfigurations (Prelude.Maybe Prelude.Text)
+listEventConfigurations_nextToken = Lens.lens (\ListEventConfigurations' {nextToken} -> nextToken) (\s@ListEventConfigurations' {} a -> s {nextToken = a} :: ListEventConfigurations)
+
+-- | Resource type to filter event configurations.
+listEventConfigurations_resourceType :: Lens.Lens' ListEventConfigurations EventNotificationResourceType
+listEventConfigurations_resourceType = Lens.lens (\ListEventConfigurations' {resourceType} -> resourceType) (\s@ListEventConfigurations' {} a -> s {resourceType = a} :: ListEventConfigurations)
+
+instance Core.AWSRequest ListEventConfigurations where
+  type
+    AWSResponse ListEventConfigurations =
+      ListEventConfigurationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEventConfigurationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "EventConfigurationsList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEventConfigurations where
+  hashWithSalt _salt ListEventConfigurations' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData ListEventConfigurations where
+  rnf ListEventConfigurations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceType
+
+instance Data.ToHeaders ListEventConfigurations where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListEventConfigurations where
+  toPath = Prelude.const "/event-configurations"
+
+instance Data.ToQuery ListEventConfigurations where
+  toQuery ListEventConfigurations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "resourceType" Data.=: resourceType
+      ]
+
+-- | /See:/ 'newListEventConfigurationsResponse' smart constructor.
+data ListEventConfigurationsResponse = ListEventConfigurationsResponse'
+  { -- | Event configurations of all events for a single resource.
+    eventConfigurationsList :: Prelude.Maybe [EventConfigurationItem],
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    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 'ListEventConfigurationsResponse' 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:
+--
+-- 'eventConfigurationsList', 'listEventConfigurationsResponse_eventConfigurationsList' - Event configurations of all events for a single resource.
+--
+-- 'nextToken', 'listEventConfigurationsResponse_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'httpStatus', 'listEventConfigurationsResponse_httpStatus' - The response's http status code.
+newListEventConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEventConfigurationsResponse
+newListEventConfigurationsResponse pHttpStatus_ =
+  ListEventConfigurationsResponse'
+    { eventConfigurationsList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Event configurations of all events for a single resource.
+listEventConfigurationsResponse_eventConfigurationsList :: Lens.Lens' ListEventConfigurationsResponse (Prelude.Maybe [EventConfigurationItem])
+listEventConfigurationsResponse_eventConfigurationsList = Lens.lens (\ListEventConfigurationsResponse' {eventConfigurationsList} -> eventConfigurationsList) (\s@ListEventConfigurationsResponse' {} a -> s {eventConfigurationsList = a} :: ListEventConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listEventConfigurationsResponse_nextToken :: Lens.Lens' ListEventConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listEventConfigurationsResponse_nextToken = Lens.lens (\ListEventConfigurationsResponse' {nextToken} -> nextToken) (\s@ListEventConfigurationsResponse' {} a -> s {nextToken = a} :: ListEventConfigurationsResponse)
+
+-- | The response's http status code.
+listEventConfigurationsResponse_httpStatus :: Lens.Lens' ListEventConfigurationsResponse Prelude.Int
+listEventConfigurationsResponse_httpStatus = Lens.lens (\ListEventConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListEventConfigurationsResponse' {} a -> s {httpStatus = a} :: ListEventConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    ListEventConfigurationsResponse
+  where
+  rnf ListEventConfigurationsResponse' {..} =
+    Prelude.rnf eventConfigurationsList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListFuotaTasks.hs b/gen/Amazonka/IoTWireless/ListFuotaTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListFuotaTasks.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.IoTWireless.ListFuotaTasks
+-- 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 FUOTA tasks registered to your AWS account.
+module Amazonka.IoTWireless.ListFuotaTasks
+  ( -- * Creating a Request
+    ListFuotaTasks (..),
+    newListFuotaTasks,
+
+    -- * Request Lenses
+    listFuotaTasks_maxResults,
+    listFuotaTasks_nextToken,
+
+    -- * Destructuring the Response
+    ListFuotaTasksResponse (..),
+    newListFuotaTasksResponse,
+
+    -- * Response Lenses
+    listFuotaTasksResponse_fuotaTaskList,
+    listFuotaTasksResponse_nextToken,
+    listFuotaTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFuotaTasks' smart constructor.
+data ListFuotaTasks = ListFuotaTasks'
+  { maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFuotaTasks' 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', 'listFuotaTasks_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listFuotaTasks_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+newListFuotaTasks ::
+  ListFuotaTasks
+newListFuotaTasks =
+  ListFuotaTasks'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+listFuotaTasks_maxResults :: Lens.Lens' ListFuotaTasks (Prelude.Maybe Prelude.Natural)
+listFuotaTasks_maxResults = Lens.lens (\ListFuotaTasks' {maxResults} -> maxResults) (\s@ListFuotaTasks' {} a -> s {maxResults = a} :: ListFuotaTasks)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listFuotaTasks_nextToken :: Lens.Lens' ListFuotaTasks (Prelude.Maybe Prelude.Text)
+listFuotaTasks_nextToken = Lens.lens (\ListFuotaTasks' {nextToken} -> nextToken) (\s@ListFuotaTasks' {} a -> s {nextToken = a} :: ListFuotaTasks)
+
+instance Core.AWSRequest ListFuotaTasks where
+  type
+    AWSResponse ListFuotaTasks =
+      ListFuotaTasksResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFuotaTasksResponse'
+            Prelude.<$> (x Data..?> "FuotaTaskList" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFuotaTasks where
+  hashWithSalt _salt ListFuotaTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListFuotaTasks where
+  rnf ListFuotaTasks' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListFuotaTasks where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListFuotaTasks where
+  toPath = Prelude.const "/fuota-tasks"
+
+instance Data.ToQuery ListFuotaTasks where
+  toQuery ListFuotaTasks' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListFuotaTasksResponse' smart constructor.
+data ListFuotaTasksResponse = ListFuotaTasksResponse'
+  { fuotaTaskList :: Prelude.Maybe [FuotaTask],
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    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 'ListFuotaTasksResponse' 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:
+--
+-- 'fuotaTaskList', 'listFuotaTasksResponse_fuotaTaskList' - Undocumented member.
+--
+-- 'nextToken', 'listFuotaTasksResponse_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'httpStatus', 'listFuotaTasksResponse_httpStatus' - The response's http status code.
+newListFuotaTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFuotaTasksResponse
+newListFuotaTasksResponse pHttpStatus_ =
+  ListFuotaTasksResponse'
+    { fuotaTaskList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+listFuotaTasksResponse_fuotaTaskList :: Lens.Lens' ListFuotaTasksResponse (Prelude.Maybe [FuotaTask])
+listFuotaTasksResponse_fuotaTaskList = Lens.lens (\ListFuotaTasksResponse' {fuotaTaskList} -> fuotaTaskList) (\s@ListFuotaTasksResponse' {} a -> s {fuotaTaskList = a} :: ListFuotaTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listFuotaTasksResponse_nextToken :: Lens.Lens' ListFuotaTasksResponse (Prelude.Maybe Prelude.Text)
+listFuotaTasksResponse_nextToken = Lens.lens (\ListFuotaTasksResponse' {nextToken} -> nextToken) (\s@ListFuotaTasksResponse' {} a -> s {nextToken = a} :: ListFuotaTasksResponse)
+
+-- | The response's http status code.
+listFuotaTasksResponse_httpStatus :: Lens.Lens' ListFuotaTasksResponse Prelude.Int
+listFuotaTasksResponse_httpStatus = Lens.lens (\ListFuotaTasksResponse' {httpStatus} -> httpStatus) (\s@ListFuotaTasksResponse' {} a -> s {httpStatus = a} :: ListFuotaTasksResponse)
+
+instance Prelude.NFData ListFuotaTasksResponse where
+  rnf ListFuotaTasksResponse' {..} =
+    Prelude.rnf fuotaTaskList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListMulticastGroups.hs b/gen/Amazonka/IoTWireless/ListMulticastGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListMulticastGroups.hs
@@ -0,0 +1,192 @@
+{-# 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.IoTWireless.ListMulticastGroups
+-- 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 multicast groups registered to your AWS account.
+module Amazonka.IoTWireless.ListMulticastGroups
+  ( -- * Creating a Request
+    ListMulticastGroups (..),
+    newListMulticastGroups,
+
+    -- * Request Lenses
+    listMulticastGroups_maxResults,
+    listMulticastGroups_nextToken,
+
+    -- * Destructuring the Response
+    ListMulticastGroupsResponse (..),
+    newListMulticastGroupsResponse,
+
+    -- * Response Lenses
+    listMulticastGroupsResponse_multicastGroupList,
+    listMulticastGroupsResponse_nextToken,
+    listMulticastGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMulticastGroups' smart constructor.
+data ListMulticastGroups = ListMulticastGroups'
+  { maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMulticastGroups' 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', 'listMulticastGroups_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listMulticastGroups_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+newListMulticastGroups ::
+  ListMulticastGroups
+newListMulticastGroups =
+  ListMulticastGroups'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+listMulticastGroups_maxResults :: Lens.Lens' ListMulticastGroups (Prelude.Maybe Prelude.Natural)
+listMulticastGroups_maxResults = Lens.lens (\ListMulticastGroups' {maxResults} -> maxResults) (\s@ListMulticastGroups' {} a -> s {maxResults = a} :: ListMulticastGroups)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listMulticastGroups_nextToken :: Lens.Lens' ListMulticastGroups (Prelude.Maybe Prelude.Text)
+listMulticastGroups_nextToken = Lens.lens (\ListMulticastGroups' {nextToken} -> nextToken) (\s@ListMulticastGroups' {} a -> s {nextToken = a} :: ListMulticastGroups)
+
+instance Core.AWSRequest ListMulticastGroups where
+  type
+    AWSResponse ListMulticastGroups =
+      ListMulticastGroupsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMulticastGroupsResponse'
+            Prelude.<$> ( x
+                            Data..?> "MulticastGroupList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListMulticastGroups where
+  hashWithSalt _salt ListMulticastGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListMulticastGroups where
+  rnf ListMulticastGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListMulticastGroups where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListMulticastGroups where
+  toPath = Prelude.const "/multicast-groups"
+
+instance Data.ToQuery ListMulticastGroups where
+  toQuery ListMulticastGroups' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListMulticastGroupsResponse' smart constructor.
+data ListMulticastGroupsResponse = ListMulticastGroupsResponse'
+  { multicastGroupList :: Prelude.Maybe [MulticastGroup],
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    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 'ListMulticastGroupsResponse' 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:
+--
+-- 'multicastGroupList', 'listMulticastGroupsResponse_multicastGroupList' - Undocumented member.
+--
+-- 'nextToken', 'listMulticastGroupsResponse_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'httpStatus', 'listMulticastGroupsResponse_httpStatus' - The response's http status code.
+newListMulticastGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMulticastGroupsResponse
+newListMulticastGroupsResponse pHttpStatus_ =
+  ListMulticastGroupsResponse'
+    { multicastGroupList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+listMulticastGroupsResponse_multicastGroupList :: Lens.Lens' ListMulticastGroupsResponse (Prelude.Maybe [MulticastGroup])
+listMulticastGroupsResponse_multicastGroupList = Lens.lens (\ListMulticastGroupsResponse' {multicastGroupList} -> multicastGroupList) (\s@ListMulticastGroupsResponse' {} a -> s {multicastGroupList = a} :: ListMulticastGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listMulticastGroupsResponse_nextToken :: Lens.Lens' ListMulticastGroupsResponse (Prelude.Maybe Prelude.Text)
+listMulticastGroupsResponse_nextToken = Lens.lens (\ListMulticastGroupsResponse' {nextToken} -> nextToken) (\s@ListMulticastGroupsResponse' {} a -> s {nextToken = a} :: ListMulticastGroupsResponse)
+
+-- | The response's http status code.
+listMulticastGroupsResponse_httpStatus :: Lens.Lens' ListMulticastGroupsResponse Prelude.Int
+listMulticastGroupsResponse_httpStatus = Lens.lens (\ListMulticastGroupsResponse' {httpStatus} -> httpStatus) (\s@ListMulticastGroupsResponse' {} a -> s {httpStatus = a} :: ListMulticastGroupsResponse)
+
+instance Prelude.NFData ListMulticastGroupsResponse where
+  rnf ListMulticastGroupsResponse' {..} =
+    Prelude.rnf multicastGroupList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListMulticastGroupsByFuotaTask.hs b/gen/Amazonka/IoTWireless/ListMulticastGroupsByFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListMulticastGroupsByFuotaTask.hs
@@ -0,0 +1,226 @@
+{-# 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.IoTWireless.ListMulticastGroupsByFuotaTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List all multicast groups associated with a fuota task.
+module Amazonka.IoTWireless.ListMulticastGroupsByFuotaTask
+  ( -- * Creating a Request
+    ListMulticastGroupsByFuotaTask (..),
+    newListMulticastGroupsByFuotaTask,
+
+    -- * Request Lenses
+    listMulticastGroupsByFuotaTask_maxResults,
+    listMulticastGroupsByFuotaTask_nextToken,
+    listMulticastGroupsByFuotaTask_id,
+
+    -- * Destructuring the Response
+    ListMulticastGroupsByFuotaTaskResponse (..),
+    newListMulticastGroupsByFuotaTaskResponse,
+
+    -- * Response Lenses
+    listMulticastGroupsByFuotaTaskResponse_multicastGroupList,
+    listMulticastGroupsByFuotaTaskResponse_nextToken,
+    listMulticastGroupsByFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMulticastGroupsByFuotaTask' smart constructor.
+data ListMulticastGroupsByFuotaTask = ListMulticastGroupsByFuotaTask'
+  { maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMulticastGroupsByFuotaTask' 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', 'listMulticastGroupsByFuotaTask_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listMulticastGroupsByFuotaTask_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'id', 'listMulticastGroupsByFuotaTask_id' - Undocumented member.
+newListMulticastGroupsByFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  ListMulticastGroupsByFuotaTask
+newListMulticastGroupsByFuotaTask pId_ =
+  ListMulticastGroupsByFuotaTask'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+listMulticastGroupsByFuotaTask_maxResults :: Lens.Lens' ListMulticastGroupsByFuotaTask (Prelude.Maybe Prelude.Natural)
+listMulticastGroupsByFuotaTask_maxResults = Lens.lens (\ListMulticastGroupsByFuotaTask' {maxResults} -> maxResults) (\s@ListMulticastGroupsByFuotaTask' {} a -> s {maxResults = a} :: ListMulticastGroupsByFuotaTask)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listMulticastGroupsByFuotaTask_nextToken :: Lens.Lens' ListMulticastGroupsByFuotaTask (Prelude.Maybe Prelude.Text)
+listMulticastGroupsByFuotaTask_nextToken = Lens.lens (\ListMulticastGroupsByFuotaTask' {nextToken} -> nextToken) (\s@ListMulticastGroupsByFuotaTask' {} a -> s {nextToken = a} :: ListMulticastGroupsByFuotaTask)
+
+-- | Undocumented member.
+listMulticastGroupsByFuotaTask_id :: Lens.Lens' ListMulticastGroupsByFuotaTask Prelude.Text
+listMulticastGroupsByFuotaTask_id = Lens.lens (\ListMulticastGroupsByFuotaTask' {id} -> id) (\s@ListMulticastGroupsByFuotaTask' {} a -> s {id = a} :: ListMulticastGroupsByFuotaTask)
+
+instance
+  Core.AWSRequest
+    ListMulticastGroupsByFuotaTask
+  where
+  type
+    AWSResponse ListMulticastGroupsByFuotaTask =
+      ListMulticastGroupsByFuotaTaskResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMulticastGroupsByFuotaTaskResponse'
+            Prelude.<$> ( x
+                            Data..?> "MulticastGroupList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListMulticastGroupsByFuotaTask
+  where
+  hashWithSalt
+    _salt
+    ListMulticastGroupsByFuotaTask' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    ListMulticastGroupsByFuotaTask
+  where
+  rnf ListMulticastGroupsByFuotaTask' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    ListMulticastGroupsByFuotaTask
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListMulticastGroupsByFuotaTask where
+  toPath ListMulticastGroupsByFuotaTask' {..} =
+    Prelude.mconcat
+      ["/fuota-tasks/", Data.toBS id, "/multicast-groups"]
+
+instance Data.ToQuery ListMulticastGroupsByFuotaTask where
+  toQuery ListMulticastGroupsByFuotaTask' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListMulticastGroupsByFuotaTaskResponse' smart constructor.
+data ListMulticastGroupsByFuotaTaskResponse = ListMulticastGroupsByFuotaTaskResponse'
+  { multicastGroupList :: Prelude.Maybe [MulticastGroupByFuotaTask],
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    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 'ListMulticastGroupsByFuotaTaskResponse' 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:
+--
+-- 'multicastGroupList', 'listMulticastGroupsByFuotaTaskResponse_multicastGroupList' - Undocumented member.
+--
+-- 'nextToken', 'listMulticastGroupsByFuotaTaskResponse_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'httpStatus', 'listMulticastGroupsByFuotaTaskResponse_httpStatus' - The response's http status code.
+newListMulticastGroupsByFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMulticastGroupsByFuotaTaskResponse
+newListMulticastGroupsByFuotaTaskResponse
+  pHttpStatus_ =
+    ListMulticastGroupsByFuotaTaskResponse'
+      { multicastGroupList =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Undocumented member.
+listMulticastGroupsByFuotaTaskResponse_multicastGroupList :: Lens.Lens' ListMulticastGroupsByFuotaTaskResponse (Prelude.Maybe [MulticastGroupByFuotaTask])
+listMulticastGroupsByFuotaTaskResponse_multicastGroupList = Lens.lens (\ListMulticastGroupsByFuotaTaskResponse' {multicastGroupList} -> multicastGroupList) (\s@ListMulticastGroupsByFuotaTaskResponse' {} a -> s {multicastGroupList = a} :: ListMulticastGroupsByFuotaTaskResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listMulticastGroupsByFuotaTaskResponse_nextToken :: Lens.Lens' ListMulticastGroupsByFuotaTaskResponse (Prelude.Maybe Prelude.Text)
+listMulticastGroupsByFuotaTaskResponse_nextToken = Lens.lens (\ListMulticastGroupsByFuotaTaskResponse' {nextToken} -> nextToken) (\s@ListMulticastGroupsByFuotaTaskResponse' {} a -> s {nextToken = a} :: ListMulticastGroupsByFuotaTaskResponse)
+
+-- | The response's http status code.
+listMulticastGroupsByFuotaTaskResponse_httpStatus :: Lens.Lens' ListMulticastGroupsByFuotaTaskResponse Prelude.Int
+listMulticastGroupsByFuotaTaskResponse_httpStatus = Lens.lens (\ListMulticastGroupsByFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@ListMulticastGroupsByFuotaTaskResponse' {} a -> s {httpStatus = a} :: ListMulticastGroupsByFuotaTaskResponse)
+
+instance
+  Prelude.NFData
+    ListMulticastGroupsByFuotaTaskResponse
+  where
+  rnf ListMulticastGroupsByFuotaTaskResponse' {..} =
+    Prelude.rnf multicastGroupList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListNetworkAnalyzerConfigurations.hs b/gen/Amazonka/IoTWireless/ListNetworkAnalyzerConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListNetworkAnalyzerConfigurations.hs
@@ -0,0 +1,216 @@
+{-# 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.IoTWireless.ListNetworkAnalyzerConfigurations
+-- 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 network analyzer configurations.
+module Amazonka.IoTWireless.ListNetworkAnalyzerConfigurations
+  ( -- * Creating a Request
+    ListNetworkAnalyzerConfigurations (..),
+    newListNetworkAnalyzerConfigurations,
+
+    -- * Request Lenses
+    listNetworkAnalyzerConfigurations_maxResults,
+    listNetworkAnalyzerConfigurations_nextToken,
+
+    -- * Destructuring the Response
+    ListNetworkAnalyzerConfigurationsResponse (..),
+    newListNetworkAnalyzerConfigurationsResponse,
+
+    -- * Response Lenses
+    listNetworkAnalyzerConfigurationsResponse_networkAnalyzerConfigurationList,
+    listNetworkAnalyzerConfigurationsResponse_nextToken,
+    listNetworkAnalyzerConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListNetworkAnalyzerConfigurations' smart constructor.
+data ListNetworkAnalyzerConfigurations = ListNetworkAnalyzerConfigurations'
+  { maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListNetworkAnalyzerConfigurations' 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', 'listNetworkAnalyzerConfigurations_maxResults' - Undocumented member.
+--
+-- 'nextToken', 'listNetworkAnalyzerConfigurations_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+newListNetworkAnalyzerConfigurations ::
+  ListNetworkAnalyzerConfigurations
+newListNetworkAnalyzerConfigurations =
+  ListNetworkAnalyzerConfigurations'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+listNetworkAnalyzerConfigurations_maxResults :: Lens.Lens' ListNetworkAnalyzerConfigurations (Prelude.Maybe Prelude.Natural)
+listNetworkAnalyzerConfigurations_maxResults = Lens.lens (\ListNetworkAnalyzerConfigurations' {maxResults} -> maxResults) (\s@ListNetworkAnalyzerConfigurations' {} a -> s {maxResults = a} :: ListNetworkAnalyzerConfigurations)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listNetworkAnalyzerConfigurations_nextToken :: Lens.Lens' ListNetworkAnalyzerConfigurations (Prelude.Maybe Prelude.Text)
+listNetworkAnalyzerConfigurations_nextToken = Lens.lens (\ListNetworkAnalyzerConfigurations' {nextToken} -> nextToken) (\s@ListNetworkAnalyzerConfigurations' {} a -> s {nextToken = a} :: ListNetworkAnalyzerConfigurations)
+
+instance
+  Core.AWSRequest
+    ListNetworkAnalyzerConfigurations
+  where
+  type
+    AWSResponse ListNetworkAnalyzerConfigurations =
+      ListNetworkAnalyzerConfigurationsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListNetworkAnalyzerConfigurationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "NetworkAnalyzerConfigurationList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListNetworkAnalyzerConfigurations
+  where
+  hashWithSalt
+    _salt
+    ListNetworkAnalyzerConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    ListNetworkAnalyzerConfigurations
+  where
+  rnf ListNetworkAnalyzerConfigurations' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    ListNetworkAnalyzerConfigurations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ListNetworkAnalyzerConfigurations
+  where
+  toPath =
+    Prelude.const "/network-analyzer-configurations"
+
+instance
+  Data.ToQuery
+    ListNetworkAnalyzerConfigurations
+  where
+  toQuery ListNetworkAnalyzerConfigurations' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListNetworkAnalyzerConfigurationsResponse' smart constructor.
+data ListNetworkAnalyzerConfigurationsResponse = ListNetworkAnalyzerConfigurationsResponse'
+  { -- | The list of network analyzer configurations.
+    networkAnalyzerConfigurationList :: Prelude.Maybe [NetworkAnalyzerConfigurations],
+    -- | The token to use to get the next set of results, or __null__ if there
+    -- are no additional results.
+    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 'ListNetworkAnalyzerConfigurationsResponse' 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:
+--
+-- 'networkAnalyzerConfigurationList', 'listNetworkAnalyzerConfigurationsResponse_networkAnalyzerConfigurationList' - The list of network analyzer configurations.
+--
+-- 'nextToken', 'listNetworkAnalyzerConfigurationsResponse_nextToken' - The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+--
+-- 'httpStatus', 'listNetworkAnalyzerConfigurationsResponse_httpStatus' - The response's http status code.
+newListNetworkAnalyzerConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListNetworkAnalyzerConfigurationsResponse
+newListNetworkAnalyzerConfigurationsResponse
+  pHttpStatus_ =
+    ListNetworkAnalyzerConfigurationsResponse'
+      { networkAnalyzerConfigurationList =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The list of network analyzer configurations.
+listNetworkAnalyzerConfigurationsResponse_networkAnalyzerConfigurationList :: Lens.Lens' ListNetworkAnalyzerConfigurationsResponse (Prelude.Maybe [NetworkAnalyzerConfigurations])
+listNetworkAnalyzerConfigurationsResponse_networkAnalyzerConfigurationList = Lens.lens (\ListNetworkAnalyzerConfigurationsResponse' {networkAnalyzerConfigurationList} -> networkAnalyzerConfigurationList) (\s@ListNetworkAnalyzerConfigurationsResponse' {} a -> s {networkAnalyzerConfigurationList = a} :: ListNetworkAnalyzerConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+listNetworkAnalyzerConfigurationsResponse_nextToken :: Lens.Lens' ListNetworkAnalyzerConfigurationsResponse (Prelude.Maybe Prelude.Text)
+listNetworkAnalyzerConfigurationsResponse_nextToken = Lens.lens (\ListNetworkAnalyzerConfigurationsResponse' {nextToken} -> nextToken) (\s@ListNetworkAnalyzerConfigurationsResponse' {} a -> s {nextToken = a} :: ListNetworkAnalyzerConfigurationsResponse)
+
+-- | The response's http status code.
+listNetworkAnalyzerConfigurationsResponse_httpStatus :: Lens.Lens' ListNetworkAnalyzerConfigurationsResponse Prelude.Int
+listNetworkAnalyzerConfigurationsResponse_httpStatus = Lens.lens (\ListNetworkAnalyzerConfigurationsResponse' {httpStatus} -> httpStatus) (\s@ListNetworkAnalyzerConfigurationsResponse' {} a -> s {httpStatus = a} :: ListNetworkAnalyzerConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    ListNetworkAnalyzerConfigurationsResponse
+  where
+  rnf ListNetworkAnalyzerConfigurationsResponse' {..} =
+    Prelude.rnf networkAnalyzerConfigurationList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListPartnerAccounts.hs b/gen/Amazonka/IoTWireless/ListPartnerAccounts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListPartnerAccounts.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.IoTWireless.ListPartnerAccounts
+-- 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 partner accounts associated with your AWS account.
+module Amazonka.IoTWireless.ListPartnerAccounts
+  ( -- * Creating a Request
+    ListPartnerAccounts (..),
+    newListPartnerAccounts,
+
+    -- * Request Lenses
+    listPartnerAccounts_maxResults,
+    listPartnerAccounts_nextToken,
+
+    -- * Destructuring the Response
+    ListPartnerAccountsResponse (..),
+    newListPartnerAccountsResponse,
+
+    -- * Response Lenses
+    listPartnerAccountsResponse_nextToken,
+    listPartnerAccountsResponse_sidewalk,
+    listPartnerAccountsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPartnerAccounts' smart constructor.
+data ListPartnerAccounts = ListPartnerAccounts'
+  { -- | The maximum number of results to return in this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPartnerAccounts' 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', 'listPartnerAccounts_maxResults' - The maximum number of results to return in this operation.
+--
+-- 'nextToken', 'listPartnerAccounts_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+newListPartnerAccounts ::
+  ListPartnerAccounts
+newListPartnerAccounts =
+  ListPartnerAccounts'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this operation.
+listPartnerAccounts_maxResults :: Lens.Lens' ListPartnerAccounts (Prelude.Maybe Prelude.Natural)
+listPartnerAccounts_maxResults = Lens.lens (\ListPartnerAccounts' {maxResults} -> maxResults) (\s@ListPartnerAccounts' {} a -> s {maxResults = a} :: ListPartnerAccounts)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listPartnerAccounts_nextToken :: Lens.Lens' ListPartnerAccounts (Prelude.Maybe Prelude.Text)
+listPartnerAccounts_nextToken = Lens.lens (\ListPartnerAccounts' {nextToken} -> nextToken) (\s@ListPartnerAccounts' {} a -> s {nextToken = a} :: ListPartnerAccounts)
+
+instance Core.AWSRequest ListPartnerAccounts where
+  type
+    AWSResponse ListPartnerAccounts =
+      ListPartnerAccountsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPartnerAccountsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Sidewalk" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPartnerAccounts where
+  hashWithSalt _salt ListPartnerAccounts' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListPartnerAccounts where
+  rnf ListPartnerAccounts' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListPartnerAccounts where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListPartnerAccounts where
+  toPath = Prelude.const "/partner-accounts"
+
+instance Data.ToQuery ListPartnerAccounts where
+  toQuery ListPartnerAccounts' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListPartnerAccountsResponse' smart constructor.
+data ListPartnerAccountsResponse = ListPartnerAccountsResponse'
+  { -- | The token to use to get the next set of results, or __null__ if there
+    -- are no additional results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Sidewalk account credentials.
+    sidewalk :: Prelude.Maybe [SidewalkAccountInfoWithFingerprint],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPartnerAccountsResponse' 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', 'listPartnerAccountsResponse_nextToken' - The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+--
+-- 'sidewalk', 'listPartnerAccountsResponse_sidewalk' - The Sidewalk account credentials.
+--
+-- 'httpStatus', 'listPartnerAccountsResponse_httpStatus' - The response's http status code.
+newListPartnerAccountsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPartnerAccountsResponse
+newListPartnerAccountsResponse pHttpStatus_ =
+  ListPartnerAccountsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      sidewalk = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+listPartnerAccountsResponse_nextToken :: Lens.Lens' ListPartnerAccountsResponse (Prelude.Maybe Prelude.Text)
+listPartnerAccountsResponse_nextToken = Lens.lens (\ListPartnerAccountsResponse' {nextToken} -> nextToken) (\s@ListPartnerAccountsResponse' {} a -> s {nextToken = a} :: ListPartnerAccountsResponse)
+
+-- | The Sidewalk account credentials.
+listPartnerAccountsResponse_sidewalk :: Lens.Lens' ListPartnerAccountsResponse (Prelude.Maybe [SidewalkAccountInfoWithFingerprint])
+listPartnerAccountsResponse_sidewalk = Lens.lens (\ListPartnerAccountsResponse' {sidewalk} -> sidewalk) (\s@ListPartnerAccountsResponse' {} a -> s {sidewalk = a} :: ListPartnerAccountsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listPartnerAccountsResponse_httpStatus :: Lens.Lens' ListPartnerAccountsResponse Prelude.Int
+listPartnerAccountsResponse_httpStatus = Lens.lens (\ListPartnerAccountsResponse' {httpStatus} -> httpStatus) (\s@ListPartnerAccountsResponse' {} a -> s {httpStatus = a} :: ListPartnerAccountsResponse)
+
+instance Prelude.NFData ListPartnerAccountsResponse where
+  rnf ListPartnerAccountsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListQueuedMessages.hs b/gen/Amazonka/IoTWireless/ListQueuedMessages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListQueuedMessages.hs
@@ -0,0 +1,226 @@
+{-# 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.IoTWireless.ListQueuedMessages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List queued messages in the downlink queue.
+module Amazonka.IoTWireless.ListQueuedMessages
+  ( -- * Creating a Request
+    ListQueuedMessages (..),
+    newListQueuedMessages,
+
+    -- * Request Lenses
+    listQueuedMessages_maxResults,
+    listQueuedMessages_nextToken,
+    listQueuedMessages_wirelessDeviceType,
+    listQueuedMessages_id,
+
+    -- * Destructuring the Response
+    ListQueuedMessagesResponse (..),
+    newListQueuedMessagesResponse,
+
+    -- * Response Lenses
+    listQueuedMessagesResponse_downlinkQueueMessagesList,
+    listQueuedMessagesResponse_nextToken,
+    listQueuedMessagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListQueuedMessages' smart constructor.
+data ListQueuedMessages = ListQueuedMessages'
+  { -- | The maximum number of results to return in this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The wireless device type, whic can be either Sidewalk or LoRaWAN.
+    wirelessDeviceType :: Prelude.Maybe WirelessDeviceType,
+    -- | The ID of a given wireless device which the downlink message packets are
+    -- being sent.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListQueuedMessages' 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', 'listQueuedMessages_maxResults' - The maximum number of results to return in this operation.
+--
+-- 'nextToken', 'listQueuedMessages_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'wirelessDeviceType', 'listQueuedMessages_wirelessDeviceType' - The wireless device type, whic can be either Sidewalk or LoRaWAN.
+--
+-- 'id', 'listQueuedMessages_id' - The ID of a given wireless device which the downlink message packets are
+-- being sent.
+newListQueuedMessages ::
+  -- | 'id'
+  Prelude.Text ->
+  ListQueuedMessages
+newListQueuedMessages pId_ =
+  ListQueuedMessages'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      wirelessDeviceType = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | The maximum number of results to return in this operation.
+listQueuedMessages_maxResults :: Lens.Lens' ListQueuedMessages (Prelude.Maybe Prelude.Natural)
+listQueuedMessages_maxResults = Lens.lens (\ListQueuedMessages' {maxResults} -> maxResults) (\s@ListQueuedMessages' {} a -> s {maxResults = a} :: ListQueuedMessages)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listQueuedMessages_nextToken :: Lens.Lens' ListQueuedMessages (Prelude.Maybe Prelude.Text)
+listQueuedMessages_nextToken = Lens.lens (\ListQueuedMessages' {nextToken} -> nextToken) (\s@ListQueuedMessages' {} a -> s {nextToken = a} :: ListQueuedMessages)
+
+-- | The wireless device type, whic can be either Sidewalk or LoRaWAN.
+listQueuedMessages_wirelessDeviceType :: Lens.Lens' ListQueuedMessages (Prelude.Maybe WirelessDeviceType)
+listQueuedMessages_wirelessDeviceType = Lens.lens (\ListQueuedMessages' {wirelessDeviceType} -> wirelessDeviceType) (\s@ListQueuedMessages' {} a -> s {wirelessDeviceType = a} :: ListQueuedMessages)
+
+-- | The ID of a given wireless device which the downlink message packets are
+-- being sent.
+listQueuedMessages_id :: Lens.Lens' ListQueuedMessages Prelude.Text
+listQueuedMessages_id = Lens.lens (\ListQueuedMessages' {id} -> id) (\s@ListQueuedMessages' {} a -> s {id = a} :: ListQueuedMessages)
+
+instance Core.AWSRequest ListQueuedMessages where
+  type
+    AWSResponse ListQueuedMessages =
+      ListQueuedMessagesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListQueuedMessagesResponse'
+            Prelude.<$> ( x
+                            Data..?> "DownlinkQueueMessagesList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListQueuedMessages where
+  hashWithSalt _salt ListQueuedMessages' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` wirelessDeviceType
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData ListQueuedMessages where
+  rnf ListQueuedMessages' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf wirelessDeviceType
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders ListQueuedMessages where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListQueuedMessages where
+  toPath ListQueuedMessages' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS id, "/data"]
+
+instance Data.ToQuery ListQueuedMessages where
+  toQuery ListQueuedMessages' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "WirelessDeviceType" Data.=: wirelessDeviceType
+      ]
+
+-- | /See:/ 'newListQueuedMessagesResponse' smart constructor.
+data ListQueuedMessagesResponse = ListQueuedMessagesResponse'
+  { -- | The messages in the downlink queue.
+    downlinkQueueMessagesList :: Prelude.Maybe [DownlinkQueueMessage],
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    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 'ListQueuedMessagesResponse' 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:
+--
+-- 'downlinkQueueMessagesList', 'listQueuedMessagesResponse_downlinkQueueMessagesList' - The messages in the downlink queue.
+--
+-- 'nextToken', 'listQueuedMessagesResponse_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'httpStatus', 'listQueuedMessagesResponse_httpStatus' - The response's http status code.
+newListQueuedMessagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListQueuedMessagesResponse
+newListQueuedMessagesResponse pHttpStatus_ =
+  ListQueuedMessagesResponse'
+    { downlinkQueueMessagesList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The messages in the downlink queue.
+listQueuedMessagesResponse_downlinkQueueMessagesList :: Lens.Lens' ListQueuedMessagesResponse (Prelude.Maybe [DownlinkQueueMessage])
+listQueuedMessagesResponse_downlinkQueueMessagesList = Lens.lens (\ListQueuedMessagesResponse' {downlinkQueueMessagesList} -> downlinkQueueMessagesList) (\s@ListQueuedMessagesResponse' {} a -> s {downlinkQueueMessagesList = a} :: ListQueuedMessagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listQueuedMessagesResponse_nextToken :: Lens.Lens' ListQueuedMessagesResponse (Prelude.Maybe Prelude.Text)
+listQueuedMessagesResponse_nextToken = Lens.lens (\ListQueuedMessagesResponse' {nextToken} -> nextToken) (\s@ListQueuedMessagesResponse' {} a -> s {nextToken = a} :: ListQueuedMessagesResponse)
+
+-- | The response's http status code.
+listQueuedMessagesResponse_httpStatus :: Lens.Lens' ListQueuedMessagesResponse Prelude.Int
+listQueuedMessagesResponse_httpStatus = Lens.lens (\ListQueuedMessagesResponse' {httpStatus} -> httpStatus) (\s@ListQueuedMessagesResponse' {} a -> s {httpStatus = a} :: ListQueuedMessagesResponse)
+
+instance Prelude.NFData ListQueuedMessagesResponse where
+  rnf ListQueuedMessagesResponse' {..} =
+    Prelude.rnf downlinkQueueMessagesList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListServiceProfiles.hs b/gen/Amazonka/IoTWireless/ListServiceProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListServiceProfiles.hs
@@ -0,0 +1,191 @@
+{-# 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.IoTWireless.ListServiceProfiles
+-- 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 service profiles registered to your AWS account.
+module Amazonka.IoTWireless.ListServiceProfiles
+  ( -- * Creating a Request
+    ListServiceProfiles (..),
+    newListServiceProfiles,
+
+    -- * Request Lenses
+    listServiceProfiles_maxResults,
+    listServiceProfiles_nextToken,
+
+    -- * Destructuring the Response
+    ListServiceProfilesResponse (..),
+    newListServiceProfilesResponse,
+
+    -- * Response Lenses
+    listServiceProfilesResponse_nextToken,
+    listServiceProfilesResponse_serviceProfileList,
+    listServiceProfilesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListServiceProfiles' smart constructor.
+data ListServiceProfiles = ListServiceProfiles'
+  { -- | The maximum number of results to return in this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListServiceProfiles' 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', 'listServiceProfiles_maxResults' - The maximum number of results to return in this operation.
+--
+-- 'nextToken', 'listServiceProfiles_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+newListServiceProfiles ::
+  ListServiceProfiles
+newListServiceProfiles =
+  ListServiceProfiles'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this operation.
+listServiceProfiles_maxResults :: Lens.Lens' ListServiceProfiles (Prelude.Maybe Prelude.Natural)
+listServiceProfiles_maxResults = Lens.lens (\ListServiceProfiles' {maxResults} -> maxResults) (\s@ListServiceProfiles' {} a -> s {maxResults = a} :: ListServiceProfiles)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listServiceProfiles_nextToken :: Lens.Lens' ListServiceProfiles (Prelude.Maybe Prelude.Text)
+listServiceProfiles_nextToken = Lens.lens (\ListServiceProfiles' {nextToken} -> nextToken) (\s@ListServiceProfiles' {} a -> s {nextToken = a} :: ListServiceProfiles)
+
+instance Core.AWSRequest ListServiceProfiles where
+  type
+    AWSResponse ListServiceProfiles =
+      ListServiceProfilesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListServiceProfilesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "ServiceProfileList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListServiceProfiles where
+  hashWithSalt _salt ListServiceProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListServiceProfiles where
+  rnf ListServiceProfiles' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListServiceProfiles where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListServiceProfiles where
+  toPath = Prelude.const "/service-profiles"
+
+instance Data.ToQuery ListServiceProfiles where
+  toQuery ListServiceProfiles' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListServiceProfilesResponse' smart constructor.
+data ListServiceProfilesResponse = ListServiceProfilesResponse'
+  { -- | The token to use to get the next set of results, or __null__ if there
+    -- are no additional results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The list of service profiles.
+    serviceProfileList :: Prelude.Maybe [ServiceProfile],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListServiceProfilesResponse' 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', 'listServiceProfilesResponse_nextToken' - The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+--
+-- 'serviceProfileList', 'listServiceProfilesResponse_serviceProfileList' - The list of service profiles.
+--
+-- 'httpStatus', 'listServiceProfilesResponse_httpStatus' - The response's http status code.
+newListServiceProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListServiceProfilesResponse
+newListServiceProfilesResponse pHttpStatus_ =
+  ListServiceProfilesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      serviceProfileList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+listServiceProfilesResponse_nextToken :: Lens.Lens' ListServiceProfilesResponse (Prelude.Maybe Prelude.Text)
+listServiceProfilesResponse_nextToken = Lens.lens (\ListServiceProfilesResponse' {nextToken} -> nextToken) (\s@ListServiceProfilesResponse' {} a -> s {nextToken = a} :: ListServiceProfilesResponse)
+
+-- | The list of service profiles.
+listServiceProfilesResponse_serviceProfileList :: Lens.Lens' ListServiceProfilesResponse (Prelude.Maybe [ServiceProfile])
+listServiceProfilesResponse_serviceProfileList = Lens.lens (\ListServiceProfilesResponse' {serviceProfileList} -> serviceProfileList) (\s@ListServiceProfilesResponse' {} a -> s {serviceProfileList = a} :: ListServiceProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listServiceProfilesResponse_httpStatus :: Lens.Lens' ListServiceProfilesResponse Prelude.Int
+listServiceProfilesResponse_httpStatus = Lens.lens (\ListServiceProfilesResponse' {httpStatus} -> httpStatus) (\s@ListServiceProfilesResponse' {} a -> s {httpStatus = a} :: ListServiceProfilesResponse)
+
+instance Prelude.NFData ListServiceProfilesResponse where
+  rnf ListServiceProfilesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serviceProfileList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListTagsForResource.hs b/gen/Amazonka/IoTWireless/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListTagsForResource.hs
@@ -0,0 +1,154 @@
+{-# 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.IoTWireless.ListTagsForResource
+-- 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 tags (metadata) you have assigned to the resource.
+module Amazonka.IoTWireless.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The ARN of the resource for which you want to list tags.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' 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:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The ARN of the resource for which you want to list tags.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The ARN of the resource for which you want to list tags.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery ListTagsForResource' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags to attach to the specified resource. Tags are metadata that you
+    -- can use to manage a 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 'ListTagsForResourceResponse' 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:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags to attach to the specified resource. Tags are metadata that you
+-- can use to manage a resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags to attach to the specified resource. Tags are metadata that you
+-- can use to manage a resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListWirelessDevices.hs b/gen/Amazonka/IoTWireless/ListWirelessDevices.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListWirelessDevices.hs
@@ -0,0 +1,274 @@
+{-# 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.IoTWireless.ListWirelessDevices
+-- 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 wireless devices registered to your AWS account.
+module Amazonka.IoTWireless.ListWirelessDevices
+  ( -- * Creating a Request
+    ListWirelessDevices (..),
+    newListWirelessDevices,
+
+    -- * Request Lenses
+    listWirelessDevices_destinationName,
+    listWirelessDevices_deviceProfileId,
+    listWirelessDevices_fuotaTaskId,
+    listWirelessDevices_maxResults,
+    listWirelessDevices_multicastGroupId,
+    listWirelessDevices_nextToken,
+    listWirelessDevices_serviceProfileId,
+    listWirelessDevices_wirelessDeviceType,
+
+    -- * Destructuring the Response
+    ListWirelessDevicesResponse (..),
+    newListWirelessDevicesResponse,
+
+    -- * Response Lenses
+    listWirelessDevicesResponse_nextToken,
+    listWirelessDevicesResponse_wirelessDeviceList,
+    listWirelessDevicesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWirelessDevices' smart constructor.
+data ListWirelessDevices = ListWirelessDevices'
+  { -- | A filter to list only the wireless devices that use this destination.
+    destinationName :: Prelude.Maybe Prelude.Text,
+    -- | A filter to list only the wireless devices that use this device profile.
+    deviceProfileId :: Prelude.Maybe Prelude.Text,
+    fuotaTaskId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return in this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    multicastGroupId :: Prelude.Maybe Prelude.Text,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A filter to list only the wireless devices that use this service
+    -- profile.
+    serviceProfileId :: Prelude.Maybe Prelude.Text,
+    -- | A filter to list only the wireless devices that use this wireless device
+    -- type.
+    wirelessDeviceType :: Prelude.Maybe WirelessDeviceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWirelessDevices' 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:
+--
+-- 'destinationName', 'listWirelessDevices_destinationName' - A filter to list only the wireless devices that use this destination.
+--
+-- 'deviceProfileId', 'listWirelessDevices_deviceProfileId' - A filter to list only the wireless devices that use this device profile.
+--
+-- 'fuotaTaskId', 'listWirelessDevices_fuotaTaskId' - Undocumented member.
+--
+-- 'maxResults', 'listWirelessDevices_maxResults' - The maximum number of results to return in this operation.
+--
+-- 'multicastGroupId', 'listWirelessDevices_multicastGroupId' - Undocumented member.
+--
+-- 'nextToken', 'listWirelessDevices_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'serviceProfileId', 'listWirelessDevices_serviceProfileId' - A filter to list only the wireless devices that use this service
+-- profile.
+--
+-- 'wirelessDeviceType', 'listWirelessDevices_wirelessDeviceType' - A filter to list only the wireless devices that use this wireless device
+-- type.
+newListWirelessDevices ::
+  ListWirelessDevices
+newListWirelessDevices =
+  ListWirelessDevices'
+    { destinationName =
+        Prelude.Nothing,
+      deviceProfileId = Prelude.Nothing,
+      fuotaTaskId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      multicastGroupId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      serviceProfileId = Prelude.Nothing,
+      wirelessDeviceType = Prelude.Nothing
+    }
+
+-- | A filter to list only the wireless devices that use this destination.
+listWirelessDevices_destinationName :: Lens.Lens' ListWirelessDevices (Prelude.Maybe Prelude.Text)
+listWirelessDevices_destinationName = Lens.lens (\ListWirelessDevices' {destinationName} -> destinationName) (\s@ListWirelessDevices' {} a -> s {destinationName = a} :: ListWirelessDevices)
+
+-- | A filter to list only the wireless devices that use this device profile.
+listWirelessDevices_deviceProfileId :: Lens.Lens' ListWirelessDevices (Prelude.Maybe Prelude.Text)
+listWirelessDevices_deviceProfileId = Lens.lens (\ListWirelessDevices' {deviceProfileId} -> deviceProfileId) (\s@ListWirelessDevices' {} a -> s {deviceProfileId = a} :: ListWirelessDevices)
+
+-- | Undocumented member.
+listWirelessDevices_fuotaTaskId :: Lens.Lens' ListWirelessDevices (Prelude.Maybe Prelude.Text)
+listWirelessDevices_fuotaTaskId = Lens.lens (\ListWirelessDevices' {fuotaTaskId} -> fuotaTaskId) (\s@ListWirelessDevices' {} a -> s {fuotaTaskId = a} :: ListWirelessDevices)
+
+-- | The maximum number of results to return in this operation.
+listWirelessDevices_maxResults :: Lens.Lens' ListWirelessDevices (Prelude.Maybe Prelude.Natural)
+listWirelessDevices_maxResults = Lens.lens (\ListWirelessDevices' {maxResults} -> maxResults) (\s@ListWirelessDevices' {} a -> s {maxResults = a} :: ListWirelessDevices)
+
+-- | Undocumented member.
+listWirelessDevices_multicastGroupId :: Lens.Lens' ListWirelessDevices (Prelude.Maybe Prelude.Text)
+listWirelessDevices_multicastGroupId = Lens.lens (\ListWirelessDevices' {multicastGroupId} -> multicastGroupId) (\s@ListWirelessDevices' {} a -> s {multicastGroupId = a} :: ListWirelessDevices)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listWirelessDevices_nextToken :: Lens.Lens' ListWirelessDevices (Prelude.Maybe Prelude.Text)
+listWirelessDevices_nextToken = Lens.lens (\ListWirelessDevices' {nextToken} -> nextToken) (\s@ListWirelessDevices' {} a -> s {nextToken = a} :: ListWirelessDevices)
+
+-- | A filter to list only the wireless devices that use this service
+-- profile.
+listWirelessDevices_serviceProfileId :: Lens.Lens' ListWirelessDevices (Prelude.Maybe Prelude.Text)
+listWirelessDevices_serviceProfileId = Lens.lens (\ListWirelessDevices' {serviceProfileId} -> serviceProfileId) (\s@ListWirelessDevices' {} a -> s {serviceProfileId = a} :: ListWirelessDevices)
+
+-- | A filter to list only the wireless devices that use this wireless device
+-- type.
+listWirelessDevices_wirelessDeviceType :: Lens.Lens' ListWirelessDevices (Prelude.Maybe WirelessDeviceType)
+listWirelessDevices_wirelessDeviceType = Lens.lens (\ListWirelessDevices' {wirelessDeviceType} -> wirelessDeviceType) (\s@ListWirelessDevices' {} a -> s {wirelessDeviceType = a} :: ListWirelessDevices)
+
+instance Core.AWSRequest ListWirelessDevices where
+  type
+    AWSResponse ListWirelessDevices =
+      ListWirelessDevicesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWirelessDevicesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "WirelessDeviceList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWirelessDevices where
+  hashWithSalt _salt ListWirelessDevices' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationName
+      `Prelude.hashWithSalt` deviceProfileId
+      `Prelude.hashWithSalt` fuotaTaskId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` multicastGroupId
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` serviceProfileId
+      `Prelude.hashWithSalt` wirelessDeviceType
+
+instance Prelude.NFData ListWirelessDevices where
+  rnf ListWirelessDevices' {..} =
+    Prelude.rnf destinationName
+      `Prelude.seq` Prelude.rnf deviceProfileId
+      `Prelude.seq` Prelude.rnf fuotaTaskId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf multicastGroupId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serviceProfileId
+      `Prelude.seq` Prelude.rnf wirelessDeviceType
+
+instance Data.ToHeaders ListWirelessDevices where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListWirelessDevices where
+  toPath = Prelude.const "/wireless-devices"
+
+instance Data.ToQuery ListWirelessDevices where
+  toQuery ListWirelessDevices' {..} =
+    Prelude.mconcat
+      [ "destinationName" Data.=: destinationName,
+        "deviceProfileId" Data.=: deviceProfileId,
+        "fuotaTaskId" Data.=: fuotaTaskId,
+        "maxResults" Data.=: maxResults,
+        "multicastGroupId" Data.=: multicastGroupId,
+        "nextToken" Data.=: nextToken,
+        "serviceProfileId" Data.=: serviceProfileId,
+        "wirelessDeviceType" Data.=: wirelessDeviceType
+      ]
+
+-- | /See:/ 'newListWirelessDevicesResponse' smart constructor.
+data ListWirelessDevicesResponse = ListWirelessDevicesResponse'
+  { -- | The token to use to get the next set of results, or __null__ if there
+    -- are no additional results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the wireless device.
+    wirelessDeviceList :: Prelude.Maybe [WirelessDeviceStatistics],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWirelessDevicesResponse' 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', 'listWirelessDevicesResponse_nextToken' - The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+--
+-- 'wirelessDeviceList', 'listWirelessDevicesResponse_wirelessDeviceList' - The ID of the wireless device.
+--
+-- 'httpStatus', 'listWirelessDevicesResponse_httpStatus' - The response's http status code.
+newListWirelessDevicesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWirelessDevicesResponse
+newListWirelessDevicesResponse pHttpStatus_ =
+  ListWirelessDevicesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      wirelessDeviceList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+listWirelessDevicesResponse_nextToken :: Lens.Lens' ListWirelessDevicesResponse (Prelude.Maybe Prelude.Text)
+listWirelessDevicesResponse_nextToken = Lens.lens (\ListWirelessDevicesResponse' {nextToken} -> nextToken) (\s@ListWirelessDevicesResponse' {} a -> s {nextToken = a} :: ListWirelessDevicesResponse)
+
+-- | The ID of the wireless device.
+listWirelessDevicesResponse_wirelessDeviceList :: Lens.Lens' ListWirelessDevicesResponse (Prelude.Maybe [WirelessDeviceStatistics])
+listWirelessDevicesResponse_wirelessDeviceList = Lens.lens (\ListWirelessDevicesResponse' {wirelessDeviceList} -> wirelessDeviceList) (\s@ListWirelessDevicesResponse' {} a -> s {wirelessDeviceList = a} :: ListWirelessDevicesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWirelessDevicesResponse_httpStatus :: Lens.Lens' ListWirelessDevicesResponse Prelude.Int
+listWirelessDevicesResponse_httpStatus = Lens.lens (\ListWirelessDevicesResponse' {httpStatus} -> httpStatus) (\s@ListWirelessDevicesResponse' {} a -> s {httpStatus = a} :: ListWirelessDevicesResponse)
+
+instance Prelude.NFData ListWirelessDevicesResponse where
+  rnf ListWirelessDevicesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf wirelessDeviceList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListWirelessGatewayTaskDefinitions.hs b/gen/Amazonka/IoTWireless/ListWirelessGatewayTaskDefinitions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListWirelessGatewayTaskDefinitions.hs
@@ -0,0 +1,235 @@
+{-# 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.IoTWireless.ListWirelessGatewayTaskDefinitions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the wireless gateway tasks definitions registered to your AWS
+-- account.
+module Amazonka.IoTWireless.ListWirelessGatewayTaskDefinitions
+  ( -- * Creating a Request
+    ListWirelessGatewayTaskDefinitions (..),
+    newListWirelessGatewayTaskDefinitions,
+
+    -- * Request Lenses
+    listWirelessGatewayTaskDefinitions_maxResults,
+    listWirelessGatewayTaskDefinitions_nextToken,
+    listWirelessGatewayTaskDefinitions_taskDefinitionType,
+
+    -- * Destructuring the Response
+    ListWirelessGatewayTaskDefinitionsResponse (..),
+    newListWirelessGatewayTaskDefinitionsResponse,
+
+    -- * Response Lenses
+    listWirelessGatewayTaskDefinitionsResponse_nextToken,
+    listWirelessGatewayTaskDefinitionsResponse_taskDefinitions,
+    listWirelessGatewayTaskDefinitionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWirelessGatewayTaskDefinitions' smart constructor.
+data ListWirelessGatewayTaskDefinitions = ListWirelessGatewayTaskDefinitions'
+  { -- | The maximum number of results to return in this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A filter to list only the wireless gateway task definitions that use
+    -- this task definition type.
+    taskDefinitionType :: Prelude.Maybe WirelessGatewayTaskDefinitionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWirelessGatewayTaskDefinitions' 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', 'listWirelessGatewayTaskDefinitions_maxResults' - The maximum number of results to return in this operation.
+--
+-- 'nextToken', 'listWirelessGatewayTaskDefinitions_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+--
+-- 'taskDefinitionType', 'listWirelessGatewayTaskDefinitions_taskDefinitionType' - A filter to list only the wireless gateway task definitions that use
+-- this task definition type.
+newListWirelessGatewayTaskDefinitions ::
+  ListWirelessGatewayTaskDefinitions
+newListWirelessGatewayTaskDefinitions =
+  ListWirelessGatewayTaskDefinitions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      taskDefinitionType = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this operation.
+listWirelessGatewayTaskDefinitions_maxResults :: Lens.Lens' ListWirelessGatewayTaskDefinitions (Prelude.Maybe Prelude.Natural)
+listWirelessGatewayTaskDefinitions_maxResults = Lens.lens (\ListWirelessGatewayTaskDefinitions' {maxResults} -> maxResults) (\s@ListWirelessGatewayTaskDefinitions' {} a -> s {maxResults = a} :: ListWirelessGatewayTaskDefinitions)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listWirelessGatewayTaskDefinitions_nextToken :: Lens.Lens' ListWirelessGatewayTaskDefinitions (Prelude.Maybe Prelude.Text)
+listWirelessGatewayTaskDefinitions_nextToken = Lens.lens (\ListWirelessGatewayTaskDefinitions' {nextToken} -> nextToken) (\s@ListWirelessGatewayTaskDefinitions' {} a -> s {nextToken = a} :: ListWirelessGatewayTaskDefinitions)
+
+-- | A filter to list only the wireless gateway task definitions that use
+-- this task definition type.
+listWirelessGatewayTaskDefinitions_taskDefinitionType :: Lens.Lens' ListWirelessGatewayTaskDefinitions (Prelude.Maybe WirelessGatewayTaskDefinitionType)
+listWirelessGatewayTaskDefinitions_taskDefinitionType = Lens.lens (\ListWirelessGatewayTaskDefinitions' {taskDefinitionType} -> taskDefinitionType) (\s@ListWirelessGatewayTaskDefinitions' {} a -> s {taskDefinitionType = a} :: ListWirelessGatewayTaskDefinitions)
+
+instance
+  Core.AWSRequest
+    ListWirelessGatewayTaskDefinitions
+  where
+  type
+    AWSResponse ListWirelessGatewayTaskDefinitions =
+      ListWirelessGatewayTaskDefinitionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWirelessGatewayTaskDefinitionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "TaskDefinitions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListWirelessGatewayTaskDefinitions
+  where
+  hashWithSalt
+    _salt
+    ListWirelessGatewayTaskDefinitions' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` taskDefinitionType
+
+instance
+  Prelude.NFData
+    ListWirelessGatewayTaskDefinitions
+  where
+  rnf ListWirelessGatewayTaskDefinitions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf taskDefinitionType
+
+instance
+  Data.ToHeaders
+    ListWirelessGatewayTaskDefinitions
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ListWirelessGatewayTaskDefinitions
+  where
+  toPath =
+    Prelude.const "/wireless-gateway-task-definitions"
+
+instance
+  Data.ToQuery
+    ListWirelessGatewayTaskDefinitions
+  where
+  toQuery ListWirelessGatewayTaskDefinitions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "taskDefinitionType" Data.=: taskDefinitionType
+      ]
+
+-- | /See:/ 'newListWirelessGatewayTaskDefinitionsResponse' smart constructor.
+data ListWirelessGatewayTaskDefinitionsResponse = ListWirelessGatewayTaskDefinitionsResponse'
+  { -- | The token to use to get the next set of results, or __null__ if there
+    -- are no additional results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The list of task definitions.
+    taskDefinitions :: Prelude.Maybe [UpdateWirelessGatewayTaskEntry],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWirelessGatewayTaskDefinitionsResponse' 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', 'listWirelessGatewayTaskDefinitionsResponse_nextToken' - The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+--
+-- 'taskDefinitions', 'listWirelessGatewayTaskDefinitionsResponse_taskDefinitions' - The list of task definitions.
+--
+-- 'httpStatus', 'listWirelessGatewayTaskDefinitionsResponse_httpStatus' - The response's http status code.
+newListWirelessGatewayTaskDefinitionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWirelessGatewayTaskDefinitionsResponse
+newListWirelessGatewayTaskDefinitionsResponse
+  pHttpStatus_ =
+    ListWirelessGatewayTaskDefinitionsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        taskDefinitions =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+listWirelessGatewayTaskDefinitionsResponse_nextToken :: Lens.Lens' ListWirelessGatewayTaskDefinitionsResponse (Prelude.Maybe Prelude.Text)
+listWirelessGatewayTaskDefinitionsResponse_nextToken = Lens.lens (\ListWirelessGatewayTaskDefinitionsResponse' {nextToken} -> nextToken) (\s@ListWirelessGatewayTaskDefinitionsResponse' {} a -> s {nextToken = a} :: ListWirelessGatewayTaskDefinitionsResponse)
+
+-- | The list of task definitions.
+listWirelessGatewayTaskDefinitionsResponse_taskDefinitions :: Lens.Lens' ListWirelessGatewayTaskDefinitionsResponse (Prelude.Maybe [UpdateWirelessGatewayTaskEntry])
+listWirelessGatewayTaskDefinitionsResponse_taskDefinitions = Lens.lens (\ListWirelessGatewayTaskDefinitionsResponse' {taskDefinitions} -> taskDefinitions) (\s@ListWirelessGatewayTaskDefinitionsResponse' {} a -> s {taskDefinitions = a} :: ListWirelessGatewayTaskDefinitionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWirelessGatewayTaskDefinitionsResponse_httpStatus :: Lens.Lens' ListWirelessGatewayTaskDefinitionsResponse Prelude.Int
+listWirelessGatewayTaskDefinitionsResponse_httpStatus = Lens.lens (\ListWirelessGatewayTaskDefinitionsResponse' {httpStatus} -> httpStatus) (\s@ListWirelessGatewayTaskDefinitionsResponse' {} a -> s {httpStatus = a} :: ListWirelessGatewayTaskDefinitionsResponse)
+
+instance
+  Prelude.NFData
+    ListWirelessGatewayTaskDefinitionsResponse
+  where
+  rnf ListWirelessGatewayTaskDefinitionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf taskDefinitions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ListWirelessGateways.hs b/gen/Amazonka/IoTWireless/ListWirelessGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ListWirelessGateways.hs
@@ -0,0 +1,191 @@
+{-# 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.IoTWireless.ListWirelessGateways
+-- 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 wireless gateways registered to your AWS account.
+module Amazonka.IoTWireless.ListWirelessGateways
+  ( -- * Creating a Request
+    ListWirelessGateways (..),
+    newListWirelessGateways,
+
+    -- * Request Lenses
+    listWirelessGateways_maxResults,
+    listWirelessGateways_nextToken,
+
+    -- * Destructuring the Response
+    ListWirelessGatewaysResponse (..),
+    newListWirelessGatewaysResponse,
+
+    -- * Response Lenses
+    listWirelessGatewaysResponse_nextToken,
+    listWirelessGatewaysResponse_wirelessGatewayList,
+    listWirelessGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWirelessGateways' smart constructor.
+data ListWirelessGateways = ListWirelessGateways'
+  { -- | The maximum number of results to return in this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | To retrieve the next set of results, the @nextToken@ value from a
+    -- previous response; otherwise __null__ to receive the first set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWirelessGateways' 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', 'listWirelessGateways_maxResults' - The maximum number of results to return in this operation.
+--
+-- 'nextToken', 'listWirelessGateways_nextToken' - To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+newListWirelessGateways ::
+  ListWirelessGateways
+newListWirelessGateways =
+  ListWirelessGateways'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in this operation.
+listWirelessGateways_maxResults :: Lens.Lens' ListWirelessGateways (Prelude.Maybe Prelude.Natural)
+listWirelessGateways_maxResults = Lens.lens (\ListWirelessGateways' {maxResults} -> maxResults) (\s@ListWirelessGateways' {} a -> s {maxResults = a} :: ListWirelessGateways)
+
+-- | To retrieve the next set of results, the @nextToken@ value from a
+-- previous response; otherwise __null__ to receive the first set of
+-- results.
+listWirelessGateways_nextToken :: Lens.Lens' ListWirelessGateways (Prelude.Maybe Prelude.Text)
+listWirelessGateways_nextToken = Lens.lens (\ListWirelessGateways' {nextToken} -> nextToken) (\s@ListWirelessGateways' {} a -> s {nextToken = a} :: ListWirelessGateways)
+
+instance Core.AWSRequest ListWirelessGateways where
+  type
+    AWSResponse ListWirelessGateways =
+      ListWirelessGatewaysResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWirelessGatewaysResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "WirelessGatewayList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWirelessGateways where
+  hashWithSalt _salt ListWirelessGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWirelessGateways where
+  rnf ListWirelessGateways' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWirelessGateways where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListWirelessGateways where
+  toPath = Prelude.const "/wireless-gateways"
+
+instance Data.ToQuery ListWirelessGateways where
+  toQuery ListWirelessGateways' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListWirelessGatewaysResponse' smart constructor.
+data ListWirelessGatewaysResponse = ListWirelessGatewaysResponse'
+  { -- | The token to use to get the next set of results, or __null__ if there
+    -- are no additional results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the wireless gateway.
+    wirelessGatewayList :: Prelude.Maybe [WirelessGatewayStatistics],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWirelessGatewaysResponse' 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', 'listWirelessGatewaysResponse_nextToken' - The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+--
+-- 'wirelessGatewayList', 'listWirelessGatewaysResponse_wirelessGatewayList' - The ID of the wireless gateway.
+--
+-- 'httpStatus', 'listWirelessGatewaysResponse_httpStatus' - The response's http status code.
+newListWirelessGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWirelessGatewaysResponse
+newListWirelessGatewaysResponse pHttpStatus_ =
+  ListWirelessGatewaysResponse'
+    { nextToken =
+        Prelude.Nothing,
+      wirelessGatewayList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to get the next set of results, or __null__ if there
+-- are no additional results.
+listWirelessGatewaysResponse_nextToken :: Lens.Lens' ListWirelessGatewaysResponse (Prelude.Maybe Prelude.Text)
+listWirelessGatewaysResponse_nextToken = Lens.lens (\ListWirelessGatewaysResponse' {nextToken} -> nextToken) (\s@ListWirelessGatewaysResponse' {} a -> s {nextToken = a} :: ListWirelessGatewaysResponse)
+
+-- | The ID of the wireless gateway.
+listWirelessGatewaysResponse_wirelessGatewayList :: Lens.Lens' ListWirelessGatewaysResponse (Prelude.Maybe [WirelessGatewayStatistics])
+listWirelessGatewaysResponse_wirelessGatewayList = Lens.lens (\ListWirelessGatewaysResponse' {wirelessGatewayList} -> wirelessGatewayList) (\s@ListWirelessGatewaysResponse' {} a -> s {wirelessGatewayList = a} :: ListWirelessGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWirelessGatewaysResponse_httpStatus :: Lens.Lens' ListWirelessGatewaysResponse Prelude.Int
+listWirelessGatewaysResponse_httpStatus = Lens.lens (\ListWirelessGatewaysResponse' {httpStatus} -> httpStatus) (\s@ListWirelessGatewaysResponse' {} a -> s {httpStatus = a} :: ListWirelessGatewaysResponse)
+
+instance Prelude.NFData ListWirelessGatewaysResponse where
+  rnf ListWirelessGatewaysResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf wirelessGatewayList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/PutResourceLogLevel.hs b/gen/Amazonka/IoTWireless/PutResourceLogLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/PutResourceLogLevel.hs
@@ -0,0 +1,187 @@
+{-# 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.IoTWireless.PutResourceLogLevel
+-- 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 log-level override for a resource-ID and resource-type. This
+-- option can be specified for a wireless gateway or a wireless device. A
+-- limit of 200 log level override can be set per account.
+module Amazonka.IoTWireless.PutResourceLogLevel
+  ( -- * Creating a Request
+    PutResourceLogLevel (..),
+    newPutResourceLogLevel,
+
+    -- * Request Lenses
+    putResourceLogLevel_resourceIdentifier,
+    putResourceLogLevel_resourceType,
+    putResourceLogLevel_logLevel,
+
+    -- * Destructuring the Response
+    PutResourceLogLevelResponse (..),
+    newPutResourceLogLevelResponse,
+
+    -- * Response Lenses
+    putResourceLogLevelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutResourceLogLevel' smart constructor.
+data PutResourceLogLevel = PutResourceLogLevel'
+  { resourceIdentifier :: Prelude.Text,
+    -- | The type of the resource, which can be @WirelessDevice@ or
+    -- @WirelessGateway@.
+    resourceType :: Prelude.Text,
+    logLevel :: LogLevel
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutResourceLogLevel' 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:
+--
+-- 'resourceIdentifier', 'putResourceLogLevel_resourceIdentifier' - Undocumented member.
+--
+-- 'resourceType', 'putResourceLogLevel_resourceType' - The type of the resource, which can be @WirelessDevice@ or
+-- @WirelessGateway@.
+--
+-- 'logLevel', 'putResourceLogLevel_logLevel' - Undocumented member.
+newPutResourceLogLevel ::
+  -- | 'resourceIdentifier'
+  Prelude.Text ->
+  -- | 'resourceType'
+  Prelude.Text ->
+  -- | 'logLevel'
+  LogLevel ->
+  PutResourceLogLevel
+newPutResourceLogLevel
+  pResourceIdentifier_
+  pResourceType_
+  pLogLevel_ =
+    PutResourceLogLevel'
+      { resourceIdentifier =
+          pResourceIdentifier_,
+        resourceType = pResourceType_,
+        logLevel = pLogLevel_
+      }
+
+-- | Undocumented member.
+putResourceLogLevel_resourceIdentifier :: Lens.Lens' PutResourceLogLevel Prelude.Text
+putResourceLogLevel_resourceIdentifier = Lens.lens (\PutResourceLogLevel' {resourceIdentifier} -> resourceIdentifier) (\s@PutResourceLogLevel' {} a -> s {resourceIdentifier = a} :: PutResourceLogLevel)
+
+-- | The type of the resource, which can be @WirelessDevice@ or
+-- @WirelessGateway@.
+putResourceLogLevel_resourceType :: Lens.Lens' PutResourceLogLevel Prelude.Text
+putResourceLogLevel_resourceType = Lens.lens (\PutResourceLogLevel' {resourceType} -> resourceType) (\s@PutResourceLogLevel' {} a -> s {resourceType = a} :: PutResourceLogLevel)
+
+-- | Undocumented member.
+putResourceLogLevel_logLevel :: Lens.Lens' PutResourceLogLevel LogLevel
+putResourceLogLevel_logLevel = Lens.lens (\PutResourceLogLevel' {logLevel} -> logLevel) (\s@PutResourceLogLevel' {} a -> s {logLevel = a} :: PutResourceLogLevel)
+
+instance Core.AWSRequest PutResourceLogLevel where
+  type
+    AWSResponse PutResourceLogLevel =
+      PutResourceLogLevelResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutResourceLogLevelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutResourceLogLevel where
+  hashWithSalt _salt PutResourceLogLevel' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceIdentifier
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` logLevel
+
+instance Prelude.NFData PutResourceLogLevel where
+  rnf PutResourceLogLevel' {..} =
+    Prelude.rnf resourceIdentifier
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf logLevel
+
+instance Data.ToHeaders PutResourceLogLevel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON PutResourceLogLevel where
+  toJSON PutResourceLogLevel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LogLevel" Data..= logLevel)]
+      )
+
+instance Data.ToPath PutResourceLogLevel where
+  toPath PutResourceLogLevel' {..} =
+    Prelude.mconcat
+      ["/log-levels/", Data.toBS resourceIdentifier]
+
+instance Data.ToQuery PutResourceLogLevel where
+  toQuery PutResourceLogLevel' {..} =
+    Prelude.mconcat
+      ["resourceType" Data.=: resourceType]
+
+-- | /See:/ 'newPutResourceLogLevelResponse' smart constructor.
+data PutResourceLogLevelResponse = PutResourceLogLevelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutResourceLogLevelResponse' 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', 'putResourceLogLevelResponse_httpStatus' - The response's http status code.
+newPutResourceLogLevelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutResourceLogLevelResponse
+newPutResourceLogLevelResponse pHttpStatus_ =
+  PutResourceLogLevelResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putResourceLogLevelResponse_httpStatus :: Lens.Lens' PutResourceLogLevelResponse Prelude.Int
+putResourceLogLevelResponse_httpStatus = Lens.lens (\PutResourceLogLevelResponse' {httpStatus} -> httpStatus) (\s@PutResourceLogLevelResponse' {} a -> s {httpStatus = a} :: PutResourceLogLevelResponse)
+
+instance Prelude.NFData PutResourceLogLevelResponse where
+  rnf PutResourceLogLevelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ResetAllResourceLogLevels.hs b/gen/Amazonka/IoTWireless/ResetAllResourceLogLevels.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ResetAllResourceLogLevels.hs
@@ -0,0 +1,126 @@
+{-# 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.IoTWireless.ResetAllResourceLogLevels
+-- 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 the log-level overrides for all resources; both wireless devices
+-- and wireless gateways.
+module Amazonka.IoTWireless.ResetAllResourceLogLevels
+  ( -- * Creating a Request
+    ResetAllResourceLogLevels (..),
+    newResetAllResourceLogLevels,
+
+    -- * Destructuring the Response
+    ResetAllResourceLogLevelsResponse (..),
+    newResetAllResourceLogLevelsResponse,
+
+    -- * Response Lenses
+    resetAllResourceLogLevelsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResetAllResourceLogLevels' smart constructor.
+data ResetAllResourceLogLevels = ResetAllResourceLogLevels'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetAllResourceLogLevels' 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.
+newResetAllResourceLogLevels ::
+  ResetAllResourceLogLevels
+newResetAllResourceLogLevels =
+  ResetAllResourceLogLevels'
+
+instance Core.AWSRequest ResetAllResourceLogLevels where
+  type
+    AWSResponse ResetAllResourceLogLevels =
+      ResetAllResourceLogLevelsResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ResetAllResourceLogLevelsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ResetAllResourceLogLevels where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData ResetAllResourceLogLevels where
+  rnf _ = ()
+
+instance Data.ToHeaders ResetAllResourceLogLevels where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetAllResourceLogLevels where
+  toPath = Prelude.const "/log-levels"
+
+instance Data.ToQuery ResetAllResourceLogLevels where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newResetAllResourceLogLevelsResponse' smart constructor.
+data ResetAllResourceLogLevelsResponse = ResetAllResourceLogLevelsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetAllResourceLogLevelsResponse' 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', 'resetAllResourceLogLevelsResponse_httpStatus' - The response's http status code.
+newResetAllResourceLogLevelsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ResetAllResourceLogLevelsResponse
+newResetAllResourceLogLevelsResponse pHttpStatus_ =
+  ResetAllResourceLogLevelsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+resetAllResourceLogLevelsResponse_httpStatus :: Lens.Lens' ResetAllResourceLogLevelsResponse Prelude.Int
+resetAllResourceLogLevelsResponse_httpStatus = Lens.lens (\ResetAllResourceLogLevelsResponse' {httpStatus} -> httpStatus) (\s@ResetAllResourceLogLevelsResponse' {} a -> s {httpStatus = a} :: ResetAllResourceLogLevelsResponse)
+
+instance
+  Prelude.NFData
+    ResetAllResourceLogLevelsResponse
+  where
+  rnf ResetAllResourceLogLevelsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/ResetResourceLogLevel.hs b/gen/Amazonka/IoTWireless/ResetResourceLogLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/ResetResourceLogLevel.hs
@@ -0,0 +1,166 @@
+{-# 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.IoTWireless.ResetResourceLogLevel
+-- 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 the log-level override, if any, for a specific resource-ID and
+-- resource-type. It can be used for a wireless device or a wireless
+-- gateway.
+module Amazonka.IoTWireless.ResetResourceLogLevel
+  ( -- * Creating a Request
+    ResetResourceLogLevel (..),
+    newResetResourceLogLevel,
+
+    -- * Request Lenses
+    resetResourceLogLevel_resourceIdentifier,
+    resetResourceLogLevel_resourceType,
+
+    -- * Destructuring the Response
+    ResetResourceLogLevelResponse (..),
+    newResetResourceLogLevelResponse,
+
+    -- * Response Lenses
+    resetResourceLogLevelResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResetResourceLogLevel' smart constructor.
+data ResetResourceLogLevel = ResetResourceLogLevel'
+  { resourceIdentifier :: Prelude.Text,
+    -- | The type of the resource, which can be @WirelessDevice@ or
+    -- @WirelessGateway@.
+    resourceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetResourceLogLevel' 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:
+--
+-- 'resourceIdentifier', 'resetResourceLogLevel_resourceIdentifier' - Undocumented member.
+--
+-- 'resourceType', 'resetResourceLogLevel_resourceType' - The type of the resource, which can be @WirelessDevice@ or
+-- @WirelessGateway@.
+newResetResourceLogLevel ::
+  -- | 'resourceIdentifier'
+  Prelude.Text ->
+  -- | 'resourceType'
+  Prelude.Text ->
+  ResetResourceLogLevel
+newResetResourceLogLevel
+  pResourceIdentifier_
+  pResourceType_ =
+    ResetResourceLogLevel'
+      { resourceIdentifier =
+          pResourceIdentifier_,
+        resourceType = pResourceType_
+      }
+
+-- | Undocumented member.
+resetResourceLogLevel_resourceIdentifier :: Lens.Lens' ResetResourceLogLevel Prelude.Text
+resetResourceLogLevel_resourceIdentifier = Lens.lens (\ResetResourceLogLevel' {resourceIdentifier} -> resourceIdentifier) (\s@ResetResourceLogLevel' {} a -> s {resourceIdentifier = a} :: ResetResourceLogLevel)
+
+-- | The type of the resource, which can be @WirelessDevice@ or
+-- @WirelessGateway@.
+resetResourceLogLevel_resourceType :: Lens.Lens' ResetResourceLogLevel Prelude.Text
+resetResourceLogLevel_resourceType = Lens.lens (\ResetResourceLogLevel' {resourceType} -> resourceType) (\s@ResetResourceLogLevel' {} a -> s {resourceType = a} :: ResetResourceLogLevel)
+
+instance Core.AWSRequest ResetResourceLogLevel where
+  type
+    AWSResponse ResetResourceLogLevel =
+      ResetResourceLogLevelResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ResetResourceLogLevelResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ResetResourceLogLevel where
+  hashWithSalt _salt ResetResourceLogLevel' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceIdentifier
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData ResetResourceLogLevel where
+  rnf ResetResourceLogLevel' {..} =
+    Prelude.rnf resourceIdentifier
+      `Prelude.seq` Prelude.rnf resourceType
+
+instance Data.ToHeaders ResetResourceLogLevel where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetResourceLogLevel where
+  toPath ResetResourceLogLevel' {..} =
+    Prelude.mconcat
+      ["/log-levels/", Data.toBS resourceIdentifier]
+
+instance Data.ToQuery ResetResourceLogLevel where
+  toQuery ResetResourceLogLevel' {..} =
+    Prelude.mconcat
+      ["resourceType" Data.=: resourceType]
+
+-- | /See:/ 'newResetResourceLogLevelResponse' smart constructor.
+data ResetResourceLogLevelResponse = ResetResourceLogLevelResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetResourceLogLevelResponse' 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', 'resetResourceLogLevelResponse_httpStatus' - The response's http status code.
+newResetResourceLogLevelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ResetResourceLogLevelResponse
+newResetResourceLogLevelResponse pHttpStatus_ =
+  ResetResourceLogLevelResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+resetResourceLogLevelResponse_httpStatus :: Lens.Lens' ResetResourceLogLevelResponse Prelude.Int
+resetResourceLogLevelResponse_httpStatus = Lens.lens (\ResetResourceLogLevelResponse' {httpStatus} -> httpStatus) (\s@ResetResourceLogLevelResponse' {} a -> s {httpStatus = a} :: ResetResourceLogLevelResponse)
+
+instance Prelude.NFData ResetResourceLogLevelResponse where
+  rnf ResetResourceLogLevelResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/SendDataToMulticastGroup.hs b/gen/Amazonka/IoTWireless/SendDataToMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/SendDataToMulticastGroup.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.IoTWireless.SendDataToMulticastGroup
+-- 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 the specified data to a multicast group.
+module Amazonka.IoTWireless.SendDataToMulticastGroup
+  ( -- * Creating a Request
+    SendDataToMulticastGroup (..),
+    newSendDataToMulticastGroup,
+
+    -- * Request Lenses
+    sendDataToMulticastGroup_id,
+    sendDataToMulticastGroup_payloadData,
+    sendDataToMulticastGroup_wirelessMetadata,
+
+    -- * Destructuring the Response
+    SendDataToMulticastGroupResponse (..),
+    newSendDataToMulticastGroupResponse,
+
+    -- * Response Lenses
+    sendDataToMulticastGroupResponse_messageId,
+    sendDataToMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSendDataToMulticastGroup' smart constructor.
+data SendDataToMulticastGroup = SendDataToMulticastGroup'
+  { id :: Prelude.Text,
+    payloadData :: Prelude.Text,
+    wirelessMetadata :: MulticastWirelessMetadata
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendDataToMulticastGroup' 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:
+--
+-- 'id', 'sendDataToMulticastGroup_id' - Undocumented member.
+--
+-- 'payloadData', 'sendDataToMulticastGroup_payloadData' - Undocumented member.
+--
+-- 'wirelessMetadata', 'sendDataToMulticastGroup_wirelessMetadata' - Undocumented member.
+newSendDataToMulticastGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'payloadData'
+  Prelude.Text ->
+  -- | 'wirelessMetadata'
+  MulticastWirelessMetadata ->
+  SendDataToMulticastGroup
+newSendDataToMulticastGroup
+  pId_
+  pPayloadData_
+  pWirelessMetadata_ =
+    SendDataToMulticastGroup'
+      { id = pId_,
+        payloadData = pPayloadData_,
+        wirelessMetadata = pWirelessMetadata_
+      }
+
+-- | Undocumented member.
+sendDataToMulticastGroup_id :: Lens.Lens' SendDataToMulticastGroup Prelude.Text
+sendDataToMulticastGroup_id = Lens.lens (\SendDataToMulticastGroup' {id} -> id) (\s@SendDataToMulticastGroup' {} a -> s {id = a} :: SendDataToMulticastGroup)
+
+-- | Undocumented member.
+sendDataToMulticastGroup_payloadData :: Lens.Lens' SendDataToMulticastGroup Prelude.Text
+sendDataToMulticastGroup_payloadData = Lens.lens (\SendDataToMulticastGroup' {payloadData} -> payloadData) (\s@SendDataToMulticastGroup' {} a -> s {payloadData = a} :: SendDataToMulticastGroup)
+
+-- | Undocumented member.
+sendDataToMulticastGroup_wirelessMetadata :: Lens.Lens' SendDataToMulticastGroup MulticastWirelessMetadata
+sendDataToMulticastGroup_wirelessMetadata = Lens.lens (\SendDataToMulticastGroup' {wirelessMetadata} -> wirelessMetadata) (\s@SendDataToMulticastGroup' {} a -> s {wirelessMetadata = a} :: SendDataToMulticastGroup)
+
+instance Core.AWSRequest SendDataToMulticastGroup where
+  type
+    AWSResponse SendDataToMulticastGroup =
+      SendDataToMulticastGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SendDataToMulticastGroupResponse'
+            Prelude.<$> (x Data..?> "MessageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SendDataToMulticastGroup where
+  hashWithSalt _salt SendDataToMulticastGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` payloadData
+      `Prelude.hashWithSalt` wirelessMetadata
+
+instance Prelude.NFData SendDataToMulticastGroup where
+  rnf SendDataToMulticastGroup' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf payloadData
+      `Prelude.seq` Prelude.rnf wirelessMetadata
+
+instance Data.ToHeaders SendDataToMulticastGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON SendDataToMulticastGroup where
+  toJSON SendDataToMulticastGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("PayloadData" Data..= payloadData),
+            Prelude.Just
+              ("WirelessMetadata" Data..= wirelessMetadata)
+          ]
+      )
+
+instance Data.ToPath SendDataToMulticastGroup where
+  toPath SendDataToMulticastGroup' {..} =
+    Prelude.mconcat
+      ["/multicast-groups/", Data.toBS id, "/data"]
+
+instance Data.ToQuery SendDataToMulticastGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSendDataToMulticastGroupResponse' smart constructor.
+data SendDataToMulticastGroupResponse = SendDataToMulticastGroupResponse'
+  { messageId :: 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 'SendDataToMulticastGroupResponse' 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:
+--
+-- 'messageId', 'sendDataToMulticastGroupResponse_messageId' - Undocumented member.
+--
+-- 'httpStatus', 'sendDataToMulticastGroupResponse_httpStatus' - The response's http status code.
+newSendDataToMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendDataToMulticastGroupResponse
+newSendDataToMulticastGroupResponse pHttpStatus_ =
+  SendDataToMulticastGroupResponse'
+    { messageId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+sendDataToMulticastGroupResponse_messageId :: Lens.Lens' SendDataToMulticastGroupResponse (Prelude.Maybe Prelude.Text)
+sendDataToMulticastGroupResponse_messageId = Lens.lens (\SendDataToMulticastGroupResponse' {messageId} -> messageId) (\s@SendDataToMulticastGroupResponse' {} a -> s {messageId = a} :: SendDataToMulticastGroupResponse)
+
+-- | The response's http status code.
+sendDataToMulticastGroupResponse_httpStatus :: Lens.Lens' SendDataToMulticastGroupResponse Prelude.Int
+sendDataToMulticastGroupResponse_httpStatus = Lens.lens (\SendDataToMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@SendDataToMulticastGroupResponse' {} a -> s {httpStatus = a} :: SendDataToMulticastGroupResponse)
+
+instance
+  Prelude.NFData
+    SendDataToMulticastGroupResponse
+  where
+  rnf SendDataToMulticastGroupResponse' {..} =
+    Prelude.rnf messageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/SendDataToWirelessDevice.hs b/gen/Amazonka/IoTWireless/SendDataToWirelessDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/SendDataToWirelessDevice.hs
@@ -0,0 +1,215 @@
+{-# 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.IoTWireless.SendDataToWirelessDevice
+-- 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 a decrypted application data frame to a device.
+module Amazonka.IoTWireless.SendDataToWirelessDevice
+  ( -- * Creating a Request
+    SendDataToWirelessDevice (..),
+    newSendDataToWirelessDevice,
+
+    -- * Request Lenses
+    sendDataToWirelessDevice_wirelessMetadata,
+    sendDataToWirelessDevice_id,
+    sendDataToWirelessDevice_transmitMode,
+    sendDataToWirelessDevice_payloadData,
+
+    -- * Destructuring the Response
+    SendDataToWirelessDeviceResponse (..),
+    newSendDataToWirelessDeviceResponse,
+
+    -- * Response Lenses
+    sendDataToWirelessDeviceResponse_messageId,
+    sendDataToWirelessDeviceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSendDataToWirelessDevice' smart constructor.
+data SendDataToWirelessDevice = SendDataToWirelessDevice'
+  { -- | Metadata about the message request.
+    wirelessMetadata :: Prelude.Maybe WirelessMetadata,
+    -- | The ID of the wireless device to receive the data.
+    id :: Prelude.Text,
+    -- | The transmit mode to use to send data to the wireless device. Can be:
+    -- @0@ for UM (unacknowledge mode) or @1@ for AM (acknowledge mode).
+    transmitMode :: Prelude.Natural,
+    payloadData :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendDataToWirelessDevice' 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:
+--
+-- 'wirelessMetadata', 'sendDataToWirelessDevice_wirelessMetadata' - Metadata about the message request.
+--
+-- 'id', 'sendDataToWirelessDevice_id' - The ID of the wireless device to receive the data.
+--
+-- 'transmitMode', 'sendDataToWirelessDevice_transmitMode' - The transmit mode to use to send data to the wireless device. Can be:
+-- @0@ for UM (unacknowledge mode) or @1@ for AM (acknowledge mode).
+--
+-- 'payloadData', 'sendDataToWirelessDevice_payloadData' - Undocumented member.
+newSendDataToWirelessDevice ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'transmitMode'
+  Prelude.Natural ->
+  -- | 'payloadData'
+  Prelude.Text ->
+  SendDataToWirelessDevice
+newSendDataToWirelessDevice
+  pId_
+  pTransmitMode_
+  pPayloadData_ =
+    SendDataToWirelessDevice'
+      { wirelessMetadata =
+          Prelude.Nothing,
+        id = pId_,
+        transmitMode = pTransmitMode_,
+        payloadData = pPayloadData_
+      }
+
+-- | Metadata about the message request.
+sendDataToWirelessDevice_wirelessMetadata :: Lens.Lens' SendDataToWirelessDevice (Prelude.Maybe WirelessMetadata)
+sendDataToWirelessDevice_wirelessMetadata = Lens.lens (\SendDataToWirelessDevice' {wirelessMetadata} -> wirelessMetadata) (\s@SendDataToWirelessDevice' {} a -> s {wirelessMetadata = a} :: SendDataToWirelessDevice)
+
+-- | The ID of the wireless device to receive the data.
+sendDataToWirelessDevice_id :: Lens.Lens' SendDataToWirelessDevice Prelude.Text
+sendDataToWirelessDevice_id = Lens.lens (\SendDataToWirelessDevice' {id} -> id) (\s@SendDataToWirelessDevice' {} a -> s {id = a} :: SendDataToWirelessDevice)
+
+-- | The transmit mode to use to send data to the wireless device. Can be:
+-- @0@ for UM (unacknowledge mode) or @1@ for AM (acknowledge mode).
+sendDataToWirelessDevice_transmitMode :: Lens.Lens' SendDataToWirelessDevice Prelude.Natural
+sendDataToWirelessDevice_transmitMode = Lens.lens (\SendDataToWirelessDevice' {transmitMode} -> transmitMode) (\s@SendDataToWirelessDevice' {} a -> s {transmitMode = a} :: SendDataToWirelessDevice)
+
+-- | Undocumented member.
+sendDataToWirelessDevice_payloadData :: Lens.Lens' SendDataToWirelessDevice Prelude.Text
+sendDataToWirelessDevice_payloadData = Lens.lens (\SendDataToWirelessDevice' {payloadData} -> payloadData) (\s@SendDataToWirelessDevice' {} a -> s {payloadData = a} :: SendDataToWirelessDevice)
+
+instance Core.AWSRequest SendDataToWirelessDevice where
+  type
+    AWSResponse SendDataToWirelessDevice =
+      SendDataToWirelessDeviceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SendDataToWirelessDeviceResponse'
+            Prelude.<$> (x Data..?> "MessageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SendDataToWirelessDevice where
+  hashWithSalt _salt SendDataToWirelessDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` wirelessMetadata
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` transmitMode
+      `Prelude.hashWithSalt` payloadData
+
+instance Prelude.NFData SendDataToWirelessDevice where
+  rnf SendDataToWirelessDevice' {..} =
+    Prelude.rnf wirelessMetadata
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf transmitMode
+      `Prelude.seq` Prelude.rnf payloadData
+
+instance Data.ToHeaders SendDataToWirelessDevice where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON SendDataToWirelessDevice where
+  toJSON SendDataToWirelessDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("WirelessMetadata" Data..=)
+              Prelude.<$> wirelessMetadata,
+            Prelude.Just ("TransmitMode" Data..= transmitMode),
+            Prelude.Just ("PayloadData" Data..= payloadData)
+          ]
+      )
+
+instance Data.ToPath SendDataToWirelessDevice where
+  toPath SendDataToWirelessDevice' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS id, "/data"]
+
+instance Data.ToQuery SendDataToWirelessDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSendDataToWirelessDeviceResponse' smart constructor.
+data SendDataToWirelessDeviceResponse = SendDataToWirelessDeviceResponse'
+  { -- | The ID of the message sent to the wireless device.
+    messageId :: 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 'SendDataToWirelessDeviceResponse' 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:
+--
+-- 'messageId', 'sendDataToWirelessDeviceResponse_messageId' - The ID of the message sent to the wireless device.
+--
+-- 'httpStatus', 'sendDataToWirelessDeviceResponse_httpStatus' - The response's http status code.
+newSendDataToWirelessDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendDataToWirelessDeviceResponse
+newSendDataToWirelessDeviceResponse pHttpStatus_ =
+  SendDataToWirelessDeviceResponse'
+    { messageId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the message sent to the wireless device.
+sendDataToWirelessDeviceResponse_messageId :: Lens.Lens' SendDataToWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+sendDataToWirelessDeviceResponse_messageId = Lens.lens (\SendDataToWirelessDeviceResponse' {messageId} -> messageId) (\s@SendDataToWirelessDeviceResponse' {} a -> s {messageId = a} :: SendDataToWirelessDeviceResponse)
+
+-- | The response's http status code.
+sendDataToWirelessDeviceResponse_httpStatus :: Lens.Lens' SendDataToWirelessDeviceResponse Prelude.Int
+sendDataToWirelessDeviceResponse_httpStatus = Lens.lens (\SendDataToWirelessDeviceResponse' {httpStatus} -> httpStatus) (\s@SendDataToWirelessDeviceResponse' {} a -> s {httpStatus = a} :: SendDataToWirelessDeviceResponse)
+
+instance
+  Prelude.NFData
+    SendDataToWirelessDeviceResponse
+  where
+  rnf SendDataToWirelessDeviceResponse' {..} =
+    Prelude.rnf messageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/StartBulkAssociateWirelessDeviceWithMulticastGroup.hs b/gen/Amazonka/IoTWireless/StartBulkAssociateWirelessDeviceWithMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/StartBulkAssociateWirelessDeviceWithMulticastGroup.hs
@@ -0,0 +1,208 @@
+{-# 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.IoTWireless.StartBulkAssociateWirelessDeviceWithMulticastGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a bulk association of all qualifying wireless devices with a
+-- multicast group.
+module Amazonka.IoTWireless.StartBulkAssociateWirelessDeviceWithMulticastGroup
+  ( -- * Creating a Request
+    StartBulkAssociateWirelessDeviceWithMulticastGroup (..),
+    newStartBulkAssociateWirelessDeviceWithMulticastGroup,
+
+    -- * Request Lenses
+    startBulkAssociateWirelessDeviceWithMulticastGroup_queryString,
+    startBulkAssociateWirelessDeviceWithMulticastGroup_tags,
+    startBulkAssociateWirelessDeviceWithMulticastGroup_id,
+
+    -- * Destructuring the Response
+    StartBulkAssociateWirelessDeviceWithMulticastGroupResponse (..),
+    newStartBulkAssociateWirelessDeviceWithMulticastGroupResponse,
+
+    -- * Response Lenses
+    startBulkAssociateWirelessDeviceWithMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartBulkAssociateWirelessDeviceWithMulticastGroup' smart constructor.
+data StartBulkAssociateWirelessDeviceWithMulticastGroup = StartBulkAssociateWirelessDeviceWithMulticastGroup'
+  { queryString :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe [Tag],
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartBulkAssociateWirelessDeviceWithMulticastGroup' 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:
+--
+-- 'queryString', 'startBulkAssociateWirelessDeviceWithMulticastGroup_queryString' - Undocumented member.
+--
+-- 'tags', 'startBulkAssociateWirelessDeviceWithMulticastGroup_tags' - Undocumented member.
+--
+-- 'id', 'startBulkAssociateWirelessDeviceWithMulticastGroup_id' - Undocumented member.
+newStartBulkAssociateWirelessDeviceWithMulticastGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  StartBulkAssociateWirelessDeviceWithMulticastGroup
+newStartBulkAssociateWirelessDeviceWithMulticastGroup
+  pId_ =
+    StartBulkAssociateWirelessDeviceWithMulticastGroup'
+      { queryString =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        id = pId_
+      }
+
+-- | Undocumented member.
+startBulkAssociateWirelessDeviceWithMulticastGroup_queryString :: Lens.Lens' StartBulkAssociateWirelessDeviceWithMulticastGroup (Prelude.Maybe Prelude.Text)
+startBulkAssociateWirelessDeviceWithMulticastGroup_queryString = Lens.lens (\StartBulkAssociateWirelessDeviceWithMulticastGroup' {queryString} -> queryString) (\s@StartBulkAssociateWirelessDeviceWithMulticastGroup' {} a -> s {queryString = a} :: StartBulkAssociateWirelessDeviceWithMulticastGroup)
+
+-- | Undocumented member.
+startBulkAssociateWirelessDeviceWithMulticastGroup_tags :: Lens.Lens' StartBulkAssociateWirelessDeviceWithMulticastGroup (Prelude.Maybe [Tag])
+startBulkAssociateWirelessDeviceWithMulticastGroup_tags = Lens.lens (\StartBulkAssociateWirelessDeviceWithMulticastGroup' {tags} -> tags) (\s@StartBulkAssociateWirelessDeviceWithMulticastGroup' {} a -> s {tags = a} :: StartBulkAssociateWirelessDeviceWithMulticastGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+startBulkAssociateWirelessDeviceWithMulticastGroup_id :: Lens.Lens' StartBulkAssociateWirelessDeviceWithMulticastGroup Prelude.Text
+startBulkAssociateWirelessDeviceWithMulticastGroup_id = Lens.lens (\StartBulkAssociateWirelessDeviceWithMulticastGroup' {id} -> id) (\s@StartBulkAssociateWirelessDeviceWithMulticastGroup' {} a -> s {id = a} :: StartBulkAssociateWirelessDeviceWithMulticastGroup)
+
+instance
+  Core.AWSRequest
+    StartBulkAssociateWirelessDeviceWithMulticastGroup
+  where
+  type
+    AWSResponse
+      StartBulkAssociateWirelessDeviceWithMulticastGroup =
+      StartBulkAssociateWirelessDeviceWithMulticastGroupResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartBulkAssociateWirelessDeviceWithMulticastGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    StartBulkAssociateWirelessDeviceWithMulticastGroup
+  where
+  hashWithSalt
+    _salt
+    StartBulkAssociateWirelessDeviceWithMulticastGroup' {..} =
+      _salt
+        `Prelude.hashWithSalt` queryString
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    StartBulkAssociateWirelessDeviceWithMulticastGroup
+  where
+  rnf
+    StartBulkAssociateWirelessDeviceWithMulticastGroup' {..} =
+      Prelude.rnf queryString
+        `Prelude.seq` Prelude.rnf tags
+        `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    StartBulkAssociateWirelessDeviceWithMulticastGroup
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    StartBulkAssociateWirelessDeviceWithMulticastGroup
+  where
+  toJSON
+    StartBulkAssociateWirelessDeviceWithMulticastGroup' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("QueryString" Data..=) Prelude.<$> queryString,
+              ("Tags" Data..=) Prelude.<$> tags
+            ]
+        )
+
+instance
+  Data.ToPath
+    StartBulkAssociateWirelessDeviceWithMulticastGroup
+  where
+  toPath
+    StartBulkAssociateWirelessDeviceWithMulticastGroup' {..} =
+      Prelude.mconcat
+        ["/multicast-groups/", Data.toBS id, "/bulk"]
+
+instance
+  Data.ToQuery
+    StartBulkAssociateWirelessDeviceWithMulticastGroup
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartBulkAssociateWirelessDeviceWithMulticastGroupResponse' smart constructor.
+data StartBulkAssociateWirelessDeviceWithMulticastGroupResponse = StartBulkAssociateWirelessDeviceWithMulticastGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartBulkAssociateWirelessDeviceWithMulticastGroupResponse' 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', 'startBulkAssociateWirelessDeviceWithMulticastGroupResponse_httpStatus' - The response's http status code.
+newStartBulkAssociateWirelessDeviceWithMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartBulkAssociateWirelessDeviceWithMulticastGroupResponse
+newStartBulkAssociateWirelessDeviceWithMulticastGroupResponse
+  pHttpStatus_ =
+    StartBulkAssociateWirelessDeviceWithMulticastGroupResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+startBulkAssociateWirelessDeviceWithMulticastGroupResponse_httpStatus :: Lens.Lens' StartBulkAssociateWirelessDeviceWithMulticastGroupResponse Prelude.Int
+startBulkAssociateWirelessDeviceWithMulticastGroupResponse_httpStatus = Lens.lens (\StartBulkAssociateWirelessDeviceWithMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@StartBulkAssociateWirelessDeviceWithMulticastGroupResponse' {} a -> s {httpStatus = a} :: StartBulkAssociateWirelessDeviceWithMulticastGroupResponse)
+
+instance
+  Prelude.NFData
+    StartBulkAssociateWirelessDeviceWithMulticastGroupResponse
+  where
+  rnf
+    StartBulkAssociateWirelessDeviceWithMulticastGroupResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/StartBulkDisassociateWirelessDeviceFromMulticastGroup.hs b/gen/Amazonka/IoTWireless/StartBulkDisassociateWirelessDeviceFromMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/StartBulkDisassociateWirelessDeviceFromMulticastGroup.hs
@@ -0,0 +1,209 @@
+{-# 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.IoTWireless.StartBulkDisassociateWirelessDeviceFromMulticastGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a bulk disassociatin of all qualifying wireless devices from a
+-- multicast group.
+module Amazonka.IoTWireless.StartBulkDisassociateWirelessDeviceFromMulticastGroup
+  ( -- * Creating a Request
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup (..),
+    newStartBulkDisassociateWirelessDeviceFromMulticastGroup,
+
+    -- * Request Lenses
+    startBulkDisassociateWirelessDeviceFromMulticastGroup_queryString,
+    startBulkDisassociateWirelessDeviceFromMulticastGroup_tags,
+    startBulkDisassociateWirelessDeviceFromMulticastGroup_id,
+
+    -- * Destructuring the Response
+    StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse (..),
+    newStartBulkDisassociateWirelessDeviceFromMulticastGroupResponse,
+
+    -- * Response Lenses
+    startBulkDisassociateWirelessDeviceFromMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartBulkDisassociateWirelessDeviceFromMulticastGroup' smart constructor.
+data StartBulkDisassociateWirelessDeviceFromMulticastGroup = StartBulkDisassociateWirelessDeviceFromMulticastGroup'
+  { queryString :: Prelude.Maybe Prelude.Text,
+    tags :: Prelude.Maybe [Tag],
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartBulkDisassociateWirelessDeviceFromMulticastGroup' 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:
+--
+-- 'queryString', 'startBulkDisassociateWirelessDeviceFromMulticastGroup_queryString' - Undocumented member.
+--
+-- 'tags', 'startBulkDisassociateWirelessDeviceFromMulticastGroup_tags' - Undocumented member.
+--
+-- 'id', 'startBulkDisassociateWirelessDeviceFromMulticastGroup_id' - Undocumented member.
+newStartBulkDisassociateWirelessDeviceFromMulticastGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  StartBulkDisassociateWirelessDeviceFromMulticastGroup
+newStartBulkDisassociateWirelessDeviceFromMulticastGroup
+  pId_ =
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup'
+      { queryString =
+          Prelude.Nothing,
+        tags =
+          Prelude.Nothing,
+        id = pId_
+      }
+
+-- | Undocumented member.
+startBulkDisassociateWirelessDeviceFromMulticastGroup_queryString :: Lens.Lens' StartBulkDisassociateWirelessDeviceFromMulticastGroup (Prelude.Maybe Prelude.Text)
+startBulkDisassociateWirelessDeviceFromMulticastGroup_queryString = Lens.lens (\StartBulkDisassociateWirelessDeviceFromMulticastGroup' {queryString} -> queryString) (\s@StartBulkDisassociateWirelessDeviceFromMulticastGroup' {} a -> s {queryString = a} :: StartBulkDisassociateWirelessDeviceFromMulticastGroup)
+
+-- | Undocumented member.
+startBulkDisassociateWirelessDeviceFromMulticastGroup_tags :: Lens.Lens' StartBulkDisassociateWirelessDeviceFromMulticastGroup (Prelude.Maybe [Tag])
+startBulkDisassociateWirelessDeviceFromMulticastGroup_tags = Lens.lens (\StartBulkDisassociateWirelessDeviceFromMulticastGroup' {tags} -> tags) (\s@StartBulkDisassociateWirelessDeviceFromMulticastGroup' {} a -> s {tags = a} :: StartBulkDisassociateWirelessDeviceFromMulticastGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+startBulkDisassociateWirelessDeviceFromMulticastGroup_id :: Lens.Lens' StartBulkDisassociateWirelessDeviceFromMulticastGroup Prelude.Text
+startBulkDisassociateWirelessDeviceFromMulticastGroup_id = Lens.lens (\StartBulkDisassociateWirelessDeviceFromMulticastGroup' {id} -> id) (\s@StartBulkDisassociateWirelessDeviceFromMulticastGroup' {} a -> s {id = a} :: StartBulkDisassociateWirelessDeviceFromMulticastGroup)
+
+instance
+  Core.AWSRequest
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup
+  where
+  type
+    AWSResponse
+      StartBulkDisassociateWirelessDeviceFromMulticastGroup =
+      StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup
+  where
+  hashWithSalt
+    _salt
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup' {..} =
+      _salt
+        `Prelude.hashWithSalt` queryString
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` id
+
+instance
+  Prelude.NFData
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup
+  where
+  rnf
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup' {..} =
+      Prelude.rnf queryString
+        `Prelude.seq` Prelude.rnf tags
+        `Prelude.seq` Prelude.rnf id
+
+instance
+  Data.ToHeaders
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup
+  where
+  toJSON
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("QueryString" Data..=) Prelude.<$> queryString,
+              ("Tags" Data..=) Prelude.<$> tags
+            ]
+        )
+
+instance
+  Data.ToPath
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup
+  where
+  toPath
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup' {..} =
+      Prelude.mconcat
+        ["/multicast-groups/", Data.toBS id, "/bulk"]
+
+instance
+  Data.ToQuery
+    StartBulkDisassociateWirelessDeviceFromMulticastGroup
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartBulkDisassociateWirelessDeviceFromMulticastGroupResponse' smart constructor.
+data StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse = StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse' 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', 'startBulkDisassociateWirelessDeviceFromMulticastGroupResponse_httpStatus' - The response's http status code.
+newStartBulkDisassociateWirelessDeviceFromMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse
+newStartBulkDisassociateWirelessDeviceFromMulticastGroupResponse
+  pHttpStatus_ =
+    StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+startBulkDisassociateWirelessDeviceFromMulticastGroupResponse_httpStatus :: Lens.Lens' StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse Prelude.Int
+startBulkDisassociateWirelessDeviceFromMulticastGroupResponse_httpStatus = Lens.lens (\StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse' {} a -> s {httpStatus = a} :: StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse)
+
+instance
+  Prelude.NFData
+    StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse
+  where
+  rnf
+    StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/StartFuotaTask.hs b/gen/Amazonka/IoTWireless/StartFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/StartFuotaTask.hs
@@ -0,0 +1,155 @@
+{-# 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.IoTWireless.StartFuotaTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a FUOTA task.
+module Amazonka.IoTWireless.StartFuotaTask
+  ( -- * Creating a Request
+    StartFuotaTask (..),
+    newStartFuotaTask,
+
+    -- * Request Lenses
+    startFuotaTask_loRaWAN,
+    startFuotaTask_id,
+
+    -- * Destructuring the Response
+    StartFuotaTaskResponse (..),
+    newStartFuotaTaskResponse,
+
+    -- * Response Lenses
+    startFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartFuotaTask' smart constructor.
+data StartFuotaTask = StartFuotaTask'
+  { loRaWAN :: Prelude.Maybe LoRaWANStartFuotaTask,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartFuotaTask' 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:
+--
+-- 'loRaWAN', 'startFuotaTask_loRaWAN' - Undocumented member.
+--
+-- 'id', 'startFuotaTask_id' - Undocumented member.
+newStartFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  StartFuotaTask
+newStartFuotaTask pId_ =
+  StartFuotaTask'
+    { loRaWAN = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+startFuotaTask_loRaWAN :: Lens.Lens' StartFuotaTask (Prelude.Maybe LoRaWANStartFuotaTask)
+startFuotaTask_loRaWAN = Lens.lens (\StartFuotaTask' {loRaWAN} -> loRaWAN) (\s@StartFuotaTask' {} a -> s {loRaWAN = a} :: StartFuotaTask)
+
+-- | Undocumented member.
+startFuotaTask_id :: Lens.Lens' StartFuotaTask Prelude.Text
+startFuotaTask_id = Lens.lens (\StartFuotaTask' {id} -> id) (\s@StartFuotaTask' {} a -> s {id = a} :: StartFuotaTask)
+
+instance Core.AWSRequest StartFuotaTask where
+  type
+    AWSResponse StartFuotaTask =
+      StartFuotaTaskResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartFuotaTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartFuotaTask where
+  hashWithSalt _salt StartFuotaTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData StartFuotaTask where
+  rnf StartFuotaTask' {..} =
+    Prelude.rnf loRaWAN `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders StartFuotaTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON StartFuotaTask where
+  toJSON StartFuotaTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("LoRaWAN" Data..=) Prelude.<$> loRaWAN]
+      )
+
+instance Data.ToPath StartFuotaTask where
+  toPath StartFuotaTask' {..} =
+    Prelude.mconcat ["/fuota-tasks/", Data.toBS id]
+
+instance Data.ToQuery StartFuotaTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartFuotaTaskResponse' smart constructor.
+data StartFuotaTaskResponse = StartFuotaTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartFuotaTaskResponse' 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', 'startFuotaTaskResponse_httpStatus' - The response's http status code.
+newStartFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartFuotaTaskResponse
+newStartFuotaTaskResponse pHttpStatus_ =
+  StartFuotaTaskResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+startFuotaTaskResponse_httpStatus :: Lens.Lens' StartFuotaTaskResponse Prelude.Int
+startFuotaTaskResponse_httpStatus = Lens.lens (\StartFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@StartFuotaTaskResponse' {} a -> s {httpStatus = a} :: StartFuotaTaskResponse)
+
+instance Prelude.NFData StartFuotaTaskResponse where
+  rnf StartFuotaTaskResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/StartMulticastGroupSession.hs b/gen/Amazonka/IoTWireless/StartMulticastGroupSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/StartMulticastGroupSession.hs
@@ -0,0 +1,164 @@
+{-# 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.IoTWireless.StartMulticastGroupSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a multicast group session.
+module Amazonka.IoTWireless.StartMulticastGroupSession
+  ( -- * Creating a Request
+    StartMulticastGroupSession (..),
+    newStartMulticastGroupSession,
+
+    -- * Request Lenses
+    startMulticastGroupSession_id,
+    startMulticastGroupSession_loRaWAN,
+
+    -- * Destructuring the Response
+    StartMulticastGroupSessionResponse (..),
+    newStartMulticastGroupSessionResponse,
+
+    -- * Response Lenses
+    startMulticastGroupSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartMulticastGroupSession' smart constructor.
+data StartMulticastGroupSession = StartMulticastGroupSession'
+  { id :: Prelude.Text,
+    loRaWAN :: LoRaWANMulticastSession
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartMulticastGroupSession' 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:
+--
+-- 'id', 'startMulticastGroupSession_id' - Undocumented member.
+--
+-- 'loRaWAN', 'startMulticastGroupSession_loRaWAN' - Undocumented member.
+newStartMulticastGroupSession ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'loRaWAN'
+  LoRaWANMulticastSession ->
+  StartMulticastGroupSession
+newStartMulticastGroupSession pId_ pLoRaWAN_ =
+  StartMulticastGroupSession'
+    { id = pId_,
+      loRaWAN = pLoRaWAN_
+    }
+
+-- | Undocumented member.
+startMulticastGroupSession_id :: Lens.Lens' StartMulticastGroupSession Prelude.Text
+startMulticastGroupSession_id = Lens.lens (\StartMulticastGroupSession' {id} -> id) (\s@StartMulticastGroupSession' {} a -> s {id = a} :: StartMulticastGroupSession)
+
+-- | Undocumented member.
+startMulticastGroupSession_loRaWAN :: Lens.Lens' StartMulticastGroupSession LoRaWANMulticastSession
+startMulticastGroupSession_loRaWAN = Lens.lens (\StartMulticastGroupSession' {loRaWAN} -> loRaWAN) (\s@StartMulticastGroupSession' {} a -> s {loRaWAN = a} :: StartMulticastGroupSession)
+
+instance Core.AWSRequest StartMulticastGroupSession where
+  type
+    AWSResponse StartMulticastGroupSession =
+      StartMulticastGroupSessionResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartMulticastGroupSessionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartMulticastGroupSession where
+  hashWithSalt _salt StartMulticastGroupSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` loRaWAN
+
+instance Prelude.NFData StartMulticastGroupSession where
+  rnf StartMulticastGroupSession' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf loRaWAN
+
+instance Data.ToHeaders StartMulticastGroupSession where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON StartMulticastGroupSession where
+  toJSON StartMulticastGroupSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("LoRaWAN" Data..= loRaWAN)]
+      )
+
+instance Data.ToPath StartMulticastGroupSession where
+  toPath StartMulticastGroupSession' {..} =
+    Prelude.mconcat
+      ["/multicast-groups/", Data.toBS id, "/session"]
+
+instance Data.ToQuery StartMulticastGroupSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartMulticastGroupSessionResponse' smart constructor.
+data StartMulticastGroupSessionResponse = StartMulticastGroupSessionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartMulticastGroupSessionResponse' 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', 'startMulticastGroupSessionResponse_httpStatus' - The response's http status code.
+newStartMulticastGroupSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartMulticastGroupSessionResponse
+newStartMulticastGroupSessionResponse pHttpStatus_ =
+  StartMulticastGroupSessionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+startMulticastGroupSessionResponse_httpStatus :: Lens.Lens' StartMulticastGroupSessionResponse Prelude.Int
+startMulticastGroupSessionResponse_httpStatus = Lens.lens (\StartMulticastGroupSessionResponse' {httpStatus} -> httpStatus) (\s@StartMulticastGroupSessionResponse' {} a -> s {httpStatus = a} :: StartMulticastGroupSessionResponse)
+
+instance
+  Prelude.NFData
+    StartMulticastGroupSessionResponse
+  where
+  rnf StartMulticastGroupSessionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/TagResource.hs b/gen/Amazonka/IoTWireless/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/TagResource.hs
@@ -0,0 +1,158 @@
+{-# 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.IoTWireless.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 a tag to a resource.
+module Amazonka.IoTWireless.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+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 add tags to.
+    resourceArn :: Prelude.Text,
+    -- | Adds to or modifies the tags of the given resource. Tags are metadata
+    -- that you can use to manage a resource.
+    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:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The ARN of the resource to add tags to.
+--
+-- 'tags', 'tagResource_tags' - Adds to or modifies the tags of the given resource. Tags are metadata
+-- that you can use to manage a resource.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The ARN of the resource to add tags to.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | Adds to or modifies the tags of the given resource. Tags are metadata
+-- that you can use to manage a resource.
+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` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery TagResource where
+  toQuery TagResource' {..} =
+    Prelude.mconcat ["resourceArn" Data.=: resourceArn]
+
+-- | /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/IoTWireless/TestWirelessDevice.hs b/gen/Amazonka/IoTWireless/TestWirelessDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/TestWirelessDevice.hs
@@ -0,0 +1,155 @@
+{-# 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.IoTWireless.TestWirelessDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Simulates a provisioned device by sending an uplink data payload of
+-- @Hello@.
+module Amazonka.IoTWireless.TestWirelessDevice
+  ( -- * Creating a Request
+    TestWirelessDevice (..),
+    newTestWirelessDevice,
+
+    -- * Request Lenses
+    testWirelessDevice_id,
+
+    -- * Destructuring the Response
+    TestWirelessDeviceResponse (..),
+    newTestWirelessDeviceResponse,
+
+    -- * Response Lenses
+    testWirelessDeviceResponse_result,
+    testWirelessDeviceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTestWirelessDevice' smart constructor.
+data TestWirelessDevice = TestWirelessDevice'
+  { -- | The ID of the wireless device to test.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestWirelessDevice' 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:
+--
+-- 'id', 'testWirelessDevice_id' - The ID of the wireless device to test.
+newTestWirelessDevice ::
+  -- | 'id'
+  Prelude.Text ->
+  TestWirelessDevice
+newTestWirelessDevice pId_ =
+  TestWirelessDevice' {id = pId_}
+
+-- | The ID of the wireless device to test.
+testWirelessDevice_id :: Lens.Lens' TestWirelessDevice Prelude.Text
+testWirelessDevice_id = Lens.lens (\TestWirelessDevice' {id} -> id) (\s@TestWirelessDevice' {} a -> s {id = a} :: TestWirelessDevice)
+
+instance Core.AWSRequest TestWirelessDevice where
+  type
+    AWSResponse TestWirelessDevice =
+      TestWirelessDeviceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          TestWirelessDeviceResponse'
+            Prelude.<$> (x Data..?> "Result")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TestWirelessDevice where
+  hashWithSalt _salt TestWirelessDevice' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData TestWirelessDevice where
+  rnf TestWirelessDevice' {..} = Prelude.rnf id
+
+instance Data.ToHeaders TestWirelessDevice where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON TestWirelessDevice where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath TestWirelessDevice where
+  toPath TestWirelessDevice' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS id, "/test"]
+
+instance Data.ToQuery TestWirelessDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTestWirelessDeviceResponse' smart constructor.
+data TestWirelessDeviceResponse = TestWirelessDeviceResponse'
+  { -- | The result returned by the test.
+    result :: 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 'TestWirelessDeviceResponse' 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:
+--
+-- 'result', 'testWirelessDeviceResponse_result' - The result returned by the test.
+--
+-- 'httpStatus', 'testWirelessDeviceResponse_httpStatus' - The response's http status code.
+newTestWirelessDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TestWirelessDeviceResponse
+newTestWirelessDeviceResponse pHttpStatus_ =
+  TestWirelessDeviceResponse'
+    { result =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The result returned by the test.
+testWirelessDeviceResponse_result :: Lens.Lens' TestWirelessDeviceResponse (Prelude.Maybe Prelude.Text)
+testWirelessDeviceResponse_result = Lens.lens (\TestWirelessDeviceResponse' {result} -> result) (\s@TestWirelessDeviceResponse' {} a -> s {result = a} :: TestWirelessDeviceResponse)
+
+-- | The response's http status code.
+testWirelessDeviceResponse_httpStatus :: Lens.Lens' TestWirelessDeviceResponse Prelude.Int
+testWirelessDeviceResponse_httpStatus = Lens.lens (\TestWirelessDeviceResponse' {httpStatus} -> httpStatus) (\s@TestWirelessDeviceResponse' {} a -> s {httpStatus = a} :: TestWirelessDeviceResponse)
+
+instance Prelude.NFData TestWirelessDeviceResponse where
+  rnf TestWirelessDeviceResponse' {..} =
+    Prelude.rnf result
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/Types.hs b/gen/Amazonka/IoTWireless/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types.hs
@@ -0,0 +1,1143 @@
+{-# 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.IoTWireless.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.IoTWireless.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ThrottlingException,
+    _TooManyTagsException,
+    _ValidationException,
+
+    -- * ApplicationConfigType
+    ApplicationConfigType (..),
+
+    -- * BatteryLevel
+    BatteryLevel (..),
+
+    -- * ConnectionStatus
+    ConnectionStatus (..),
+
+    -- * DeviceState
+    DeviceState (..),
+
+    -- * DlClass
+    DlClass (..),
+
+    -- * DownlinkMode
+    DownlinkMode (..),
+
+    -- * Event
+    Event (..),
+
+    -- * EventNotificationPartnerType
+    EventNotificationPartnerType (..),
+
+    -- * EventNotificationResourceType
+    EventNotificationResourceType (..),
+
+    -- * EventNotificationTopicStatus
+    EventNotificationTopicStatus (..),
+
+    -- * ExpressionType
+    ExpressionType (..),
+
+    -- * FuotaDeviceStatus
+    FuotaDeviceStatus (..),
+
+    -- * FuotaTaskStatus
+    FuotaTaskStatus (..),
+
+    -- * IdentifierType
+    IdentifierType (..),
+
+    -- * LogLevel
+    LogLevel (..),
+
+    -- * MessageType
+    MessageType (..),
+
+    -- * PartnerType
+    PartnerType (..),
+
+    -- * PositionResourceType
+    PositionResourceType (..),
+
+    -- * PositioningConfigStatus
+    PositioningConfigStatus (..),
+
+    -- * SigningAlg
+    SigningAlg (..),
+
+    -- * SupportedRfRegion
+    SupportedRfRegion (..),
+
+    -- * WirelessDeviceEvent
+    WirelessDeviceEvent (..),
+
+    -- * WirelessDeviceFrameInfo
+    WirelessDeviceFrameInfo (..),
+
+    -- * WirelessDeviceIdType
+    WirelessDeviceIdType (..),
+
+    -- * WirelessDeviceType
+    WirelessDeviceType (..),
+
+    -- * WirelessGatewayEvent
+    WirelessGatewayEvent (..),
+
+    -- * WirelessGatewayIdType
+    WirelessGatewayIdType (..),
+
+    -- * WirelessGatewayServiceType
+    WirelessGatewayServiceType (..),
+
+    -- * WirelessGatewayTaskDefinitionType
+    WirelessGatewayTaskDefinitionType (..),
+
+    -- * WirelessGatewayTaskStatus
+    WirelessGatewayTaskStatus (..),
+
+    -- * WirelessGatewayType
+    WirelessGatewayType (..),
+
+    -- * AbpV1_0_x
+    AbpV1_0_x (..),
+    newAbpV1_0_x,
+    abpV1_0_x_devAddr,
+    abpV1_0_x_fCntStart,
+    abpV1_0_x_sessionKeys,
+
+    -- * AbpV1_1
+    AbpV1_1 (..),
+    newAbpV1_1,
+    abpV1_1_devAddr,
+    abpV1_1_fCntStart,
+    abpV1_1_sessionKeys,
+
+    -- * ApplicationConfig
+    ApplicationConfig (..),
+    newApplicationConfig,
+    applicationConfig_destinationName,
+    applicationConfig_fPort,
+    applicationConfig_type,
+
+    -- * Beaconing
+    Beaconing (..),
+    newBeaconing,
+    beaconing_dataRate,
+    beaconing_frequencies,
+
+    -- * CdmaLocalId
+    CdmaLocalId (..),
+    newCdmaLocalId,
+    cdmaLocalId_pnOffset,
+    cdmaLocalId_cdmaChannel,
+
+    -- * CdmaNmrObj
+    CdmaNmrObj (..),
+    newCdmaNmrObj,
+    cdmaNmrObj_baseStationId,
+    cdmaNmrObj_pilotPower,
+    cdmaNmrObj_pnOffset,
+    cdmaNmrObj_cdmaChannel,
+
+    -- * CdmaObj
+    CdmaObj (..),
+    newCdmaObj,
+    cdmaObj_baseLat,
+    cdmaObj_baseLng,
+    cdmaObj_cdmaLocalId,
+    cdmaObj_cdmaNmr,
+    cdmaObj_pilotPower,
+    cdmaObj_registrationZone,
+    cdmaObj_systemId,
+    cdmaObj_networkId,
+    cdmaObj_baseStationId,
+
+    -- * CellTowers
+    CellTowers (..),
+    newCellTowers,
+    cellTowers_cdma,
+    cellTowers_gsm,
+    cellTowers_lte,
+    cellTowers_tdscdma,
+    cellTowers_wcdma,
+
+    -- * CertificateList
+    CertificateList (..),
+    newCertificateList,
+    certificateList_signingAlg,
+    certificateList_value,
+
+    -- * ConnectionStatusEventConfiguration
+    ConnectionStatusEventConfiguration (..),
+    newConnectionStatusEventConfiguration,
+    connectionStatusEventConfiguration_loRaWAN,
+    connectionStatusEventConfiguration_wirelessGatewayIdEventTopic,
+
+    -- * ConnectionStatusResourceTypeEventConfiguration
+    ConnectionStatusResourceTypeEventConfiguration (..),
+    newConnectionStatusResourceTypeEventConfiguration,
+    connectionStatusResourceTypeEventConfiguration_loRaWAN,
+
+    -- * Destinations
+    Destinations (..),
+    newDestinations,
+    destinations_arn,
+    destinations_description,
+    destinations_expression,
+    destinations_expressionType,
+    destinations_name,
+    destinations_roleArn,
+
+    -- * DeviceProfile
+    DeviceProfile (..),
+    newDeviceProfile,
+    deviceProfile_arn,
+    deviceProfile_id,
+    deviceProfile_name,
+
+    -- * DeviceRegistrationStateEventConfiguration
+    DeviceRegistrationStateEventConfiguration (..),
+    newDeviceRegistrationStateEventConfiguration,
+    deviceRegistrationStateEventConfiguration_sidewalk,
+    deviceRegistrationStateEventConfiguration_wirelessDeviceIdEventTopic,
+
+    -- * DeviceRegistrationStateResourceTypeEventConfiguration
+    DeviceRegistrationStateResourceTypeEventConfiguration (..),
+    newDeviceRegistrationStateResourceTypeEventConfiguration,
+    deviceRegistrationStateResourceTypeEventConfiguration_sidewalk,
+
+    -- * DownlinkQueueMessage
+    DownlinkQueueMessage (..),
+    newDownlinkQueueMessage,
+    downlinkQueueMessage_loRaWAN,
+    downlinkQueueMessage_messageId,
+    downlinkQueueMessage_receivedAt,
+    downlinkQueueMessage_transmitMode,
+
+    -- * EventConfigurationItem
+    EventConfigurationItem (..),
+    newEventConfigurationItem,
+    eventConfigurationItem_events,
+    eventConfigurationItem_identifier,
+    eventConfigurationItem_identifierType,
+    eventConfigurationItem_partnerType,
+
+    -- * EventNotificationItemConfigurations
+    EventNotificationItemConfigurations (..),
+    newEventNotificationItemConfigurations,
+    eventNotificationItemConfigurations_connectionStatus,
+    eventNotificationItemConfigurations_deviceRegistrationState,
+    eventNotificationItemConfigurations_join,
+    eventNotificationItemConfigurations_messageDeliveryStatus,
+    eventNotificationItemConfigurations_proximity,
+
+    -- * FPorts
+    FPorts (..),
+    newFPorts,
+    fPorts_applications,
+    fPorts_clockSync,
+    fPorts_fuota,
+    fPorts_multicast,
+    fPorts_positioning,
+
+    -- * FuotaTask
+    FuotaTask (..),
+    newFuotaTask,
+    fuotaTask_arn,
+    fuotaTask_id,
+    fuotaTask_name,
+
+    -- * GatewayListItem
+    GatewayListItem (..),
+    newGatewayListItem,
+    gatewayListItem_gatewayId,
+    gatewayListItem_downlinkFrequency,
+
+    -- * GlobalIdentity
+    GlobalIdentity (..),
+    newGlobalIdentity,
+    globalIdentity_lac,
+    globalIdentity_geranCid,
+
+    -- * Gnss
+    Gnss (..),
+    newGnss,
+    gnss_assistAltitude,
+    gnss_assistPosition,
+    gnss_captureTime,
+    gnss_captureTimeAccuracy,
+    gnss_use2DSolver,
+    gnss_payload,
+
+    -- * GsmLocalId
+    GsmLocalId (..),
+    newGsmLocalId,
+    gsmLocalId_bsic,
+    gsmLocalId_bcch,
+
+    -- * GsmNmrObj
+    GsmNmrObj (..),
+    newGsmNmrObj,
+    gsmNmrObj_globalIdentity,
+    gsmNmrObj_rxLevel,
+    gsmNmrObj_bsic,
+    gsmNmrObj_bcch,
+
+    -- * GsmObj
+    GsmObj (..),
+    newGsmObj,
+    gsmObj_gsmLocalId,
+    gsmObj_gsmNmr,
+    gsmObj_gsmTimingAdvance,
+    gsmObj_rxLevel,
+    gsmObj_mcc,
+    gsmObj_mnc,
+    gsmObj_lac,
+    gsmObj_geranCid,
+
+    -- * Ip
+    Ip (..),
+    newIp,
+    ip_ipAddress,
+
+    -- * JoinEventConfiguration
+    JoinEventConfiguration (..),
+    newJoinEventConfiguration,
+    joinEventConfiguration_loRaWAN,
+    joinEventConfiguration_wirelessDeviceIdEventTopic,
+
+    -- * JoinResourceTypeEventConfiguration
+    JoinResourceTypeEventConfiguration (..),
+    newJoinResourceTypeEventConfiguration,
+    joinResourceTypeEventConfiguration_loRaWAN,
+
+    -- * LoRaWANConnectionStatusEventNotificationConfigurations
+    LoRaWANConnectionStatusEventNotificationConfigurations (..),
+    newLoRaWANConnectionStatusEventNotificationConfigurations,
+    loRaWANConnectionStatusEventNotificationConfigurations_gatewayEuiEventTopic,
+
+    -- * LoRaWANConnectionStatusResourceTypeEventConfiguration
+    LoRaWANConnectionStatusResourceTypeEventConfiguration (..),
+    newLoRaWANConnectionStatusResourceTypeEventConfiguration,
+    loRaWANConnectionStatusResourceTypeEventConfiguration_wirelessGatewayEventTopic,
+
+    -- * LoRaWANDevice
+    LoRaWANDevice (..),
+    newLoRaWANDevice,
+    loRaWANDevice_abpV1_0_x,
+    loRaWANDevice_abpV1_1,
+    loRaWANDevice_devEui,
+    loRaWANDevice_deviceProfileId,
+    loRaWANDevice_fPorts,
+    loRaWANDevice_otaaV1_0_x,
+    loRaWANDevice_otaaV1_1,
+    loRaWANDevice_serviceProfileId,
+
+    -- * LoRaWANDeviceMetadata
+    LoRaWANDeviceMetadata (..),
+    newLoRaWANDeviceMetadata,
+    loRaWANDeviceMetadata_dataRate,
+    loRaWANDeviceMetadata_devEui,
+    loRaWANDeviceMetadata_fPort,
+    loRaWANDeviceMetadata_frequency,
+    loRaWANDeviceMetadata_gateways,
+    loRaWANDeviceMetadata_timestamp,
+
+    -- * LoRaWANDeviceProfile
+    LoRaWANDeviceProfile (..),
+    newLoRaWANDeviceProfile,
+    loRaWANDeviceProfile_classBTimeout,
+    loRaWANDeviceProfile_classCTimeout,
+    loRaWANDeviceProfile_factoryPresetFreqsList,
+    loRaWANDeviceProfile_macVersion,
+    loRaWANDeviceProfile_maxDutyCycle,
+    loRaWANDeviceProfile_maxEirp,
+    loRaWANDeviceProfile_pingSlotDr,
+    loRaWANDeviceProfile_pingSlotFreq,
+    loRaWANDeviceProfile_pingSlotPeriod,
+    loRaWANDeviceProfile_regParamsRevision,
+    loRaWANDeviceProfile_rfRegion,
+    loRaWANDeviceProfile_rxDataRate2,
+    loRaWANDeviceProfile_rxDelay1,
+    loRaWANDeviceProfile_rxDrOffset1,
+    loRaWANDeviceProfile_rxFreq2,
+    loRaWANDeviceProfile_supports32BitFCnt,
+    loRaWANDeviceProfile_supportsClassB,
+    loRaWANDeviceProfile_supportsClassC,
+    loRaWANDeviceProfile_supportsJoin,
+
+    -- * LoRaWANFuotaTask
+    LoRaWANFuotaTask (..),
+    newLoRaWANFuotaTask,
+    loRaWANFuotaTask_rfRegion,
+
+    -- * LoRaWANFuotaTaskGetInfo
+    LoRaWANFuotaTaskGetInfo (..),
+    newLoRaWANFuotaTaskGetInfo,
+    loRaWANFuotaTaskGetInfo_rfRegion,
+    loRaWANFuotaTaskGetInfo_startTime,
+
+    -- * LoRaWANGateway
+    LoRaWANGateway (..),
+    newLoRaWANGateway,
+    loRaWANGateway_beaconing,
+    loRaWANGateway_gatewayEui,
+    loRaWANGateway_joinEuiFilters,
+    loRaWANGateway_netIdFilters,
+    loRaWANGateway_rfRegion,
+    loRaWANGateway_subBands,
+
+    -- * LoRaWANGatewayCurrentVersion
+    LoRaWANGatewayCurrentVersion (..),
+    newLoRaWANGatewayCurrentVersion,
+    loRaWANGatewayCurrentVersion_currentVersion,
+
+    -- * LoRaWANGatewayMetadata
+    LoRaWANGatewayMetadata (..),
+    newLoRaWANGatewayMetadata,
+    loRaWANGatewayMetadata_gatewayEui,
+    loRaWANGatewayMetadata_rssi,
+    loRaWANGatewayMetadata_snr,
+
+    -- * LoRaWANGatewayVersion
+    LoRaWANGatewayVersion (..),
+    newLoRaWANGatewayVersion,
+    loRaWANGatewayVersion_model,
+    loRaWANGatewayVersion_packageVersion,
+    loRaWANGatewayVersion_station,
+
+    -- * LoRaWANGetServiceProfileInfo
+    LoRaWANGetServiceProfileInfo (..),
+    newLoRaWANGetServiceProfileInfo,
+    loRaWANGetServiceProfileInfo_addGwMetadata,
+    loRaWANGetServiceProfileInfo_channelMask,
+    loRaWANGetServiceProfileInfo_devStatusReqFreq,
+    loRaWANGetServiceProfileInfo_dlBucketSize,
+    loRaWANGetServiceProfileInfo_dlRate,
+    loRaWANGetServiceProfileInfo_dlRatePolicy,
+    loRaWANGetServiceProfileInfo_drMax,
+    loRaWANGetServiceProfileInfo_drMin,
+    loRaWANGetServiceProfileInfo_hrAllowed,
+    loRaWANGetServiceProfileInfo_minGwDiversity,
+    loRaWANGetServiceProfileInfo_nwkGeoLoc,
+    loRaWANGetServiceProfileInfo_prAllowed,
+    loRaWANGetServiceProfileInfo_raAllowed,
+    loRaWANGetServiceProfileInfo_reportDevStatusBattery,
+    loRaWANGetServiceProfileInfo_reportDevStatusMargin,
+    loRaWANGetServiceProfileInfo_targetPer,
+    loRaWANGetServiceProfileInfo_ulBucketSize,
+    loRaWANGetServiceProfileInfo_ulRate,
+    loRaWANGetServiceProfileInfo_ulRatePolicy,
+
+    -- * LoRaWANJoinEventNotificationConfigurations
+    LoRaWANJoinEventNotificationConfigurations (..),
+    newLoRaWANJoinEventNotificationConfigurations,
+    loRaWANJoinEventNotificationConfigurations_devEuiEventTopic,
+
+    -- * LoRaWANJoinResourceTypeEventConfiguration
+    LoRaWANJoinResourceTypeEventConfiguration (..),
+    newLoRaWANJoinResourceTypeEventConfiguration,
+    loRaWANJoinResourceTypeEventConfiguration_wirelessDeviceEventTopic,
+
+    -- * LoRaWANListDevice
+    LoRaWANListDevice (..),
+    newLoRaWANListDevice,
+    loRaWANListDevice_devEui,
+
+    -- * LoRaWANMulticast
+    LoRaWANMulticast (..),
+    newLoRaWANMulticast,
+    loRaWANMulticast_dlClass,
+    loRaWANMulticast_rfRegion,
+
+    -- * LoRaWANMulticastGet
+    LoRaWANMulticastGet (..),
+    newLoRaWANMulticastGet,
+    loRaWANMulticastGet_dlClass,
+    loRaWANMulticastGet_numberOfDevicesInGroup,
+    loRaWANMulticastGet_numberOfDevicesRequested,
+    loRaWANMulticastGet_rfRegion,
+
+    -- * LoRaWANMulticastMetadata
+    LoRaWANMulticastMetadata (..),
+    newLoRaWANMulticastMetadata,
+    loRaWANMulticastMetadata_fPort,
+
+    -- * LoRaWANMulticastSession
+    LoRaWANMulticastSession (..),
+    newLoRaWANMulticastSession,
+    loRaWANMulticastSession_dlDr,
+    loRaWANMulticastSession_dlFreq,
+    loRaWANMulticastSession_sessionStartTime,
+    loRaWANMulticastSession_sessionTimeout,
+
+    -- * LoRaWANSendDataToDevice
+    LoRaWANSendDataToDevice (..),
+    newLoRaWANSendDataToDevice,
+    loRaWANSendDataToDevice_fPort,
+    loRaWANSendDataToDevice_participatingGateways,
+
+    -- * LoRaWANServiceProfile
+    LoRaWANServiceProfile (..),
+    newLoRaWANServiceProfile,
+    loRaWANServiceProfile_addGwMetadata,
+    loRaWANServiceProfile_drMax,
+    loRaWANServiceProfile_drMin,
+
+    -- * LoRaWANStartFuotaTask
+    LoRaWANStartFuotaTask (..),
+    newLoRaWANStartFuotaTask,
+    loRaWANStartFuotaTask_startTime,
+
+    -- * LoRaWANUpdateDevice
+    LoRaWANUpdateDevice (..),
+    newLoRaWANUpdateDevice,
+    loRaWANUpdateDevice_abpV1_0_x,
+    loRaWANUpdateDevice_abpV1_1,
+    loRaWANUpdateDevice_deviceProfileId,
+    loRaWANUpdateDevice_fPorts,
+    loRaWANUpdateDevice_serviceProfileId,
+
+    -- * LoRaWANUpdateGatewayTaskCreate
+    LoRaWANUpdateGatewayTaskCreate (..),
+    newLoRaWANUpdateGatewayTaskCreate,
+    loRaWANUpdateGatewayTaskCreate_currentVersion,
+    loRaWANUpdateGatewayTaskCreate_sigKeyCrc,
+    loRaWANUpdateGatewayTaskCreate_updateSignature,
+    loRaWANUpdateGatewayTaskCreate_updateVersion,
+
+    -- * LoRaWANUpdateGatewayTaskEntry
+    LoRaWANUpdateGatewayTaskEntry (..),
+    newLoRaWANUpdateGatewayTaskEntry,
+    loRaWANUpdateGatewayTaskEntry_currentVersion,
+    loRaWANUpdateGatewayTaskEntry_updateVersion,
+
+    -- * LteLocalId
+    LteLocalId (..),
+    newLteLocalId,
+    lteLocalId_pci,
+    lteLocalId_earfcn,
+
+    -- * LteNmrObj
+    LteNmrObj (..),
+    newLteNmrObj,
+    lteNmrObj_rsrp,
+    lteNmrObj_rsrq,
+    lteNmrObj_pci,
+    lteNmrObj_earfcn,
+    lteNmrObj_eutranCid,
+
+    -- * LteObj
+    LteObj (..),
+    newLteObj,
+    lteObj_lteLocalId,
+    lteObj_lteNmr,
+    lteObj_lteTimingAdvance,
+    lteObj_nrCapable,
+    lteObj_rsrp,
+    lteObj_rsrq,
+    lteObj_tac,
+    lteObj_mcc,
+    lteObj_mnc,
+    lteObj_eutranCid,
+
+    -- * MessageDeliveryStatusEventConfiguration
+    MessageDeliveryStatusEventConfiguration (..),
+    newMessageDeliveryStatusEventConfiguration,
+    messageDeliveryStatusEventConfiguration_sidewalk,
+    messageDeliveryStatusEventConfiguration_wirelessDeviceIdEventTopic,
+
+    -- * MessageDeliveryStatusResourceTypeEventConfiguration
+    MessageDeliveryStatusResourceTypeEventConfiguration (..),
+    newMessageDeliveryStatusResourceTypeEventConfiguration,
+    messageDeliveryStatusResourceTypeEventConfiguration_sidewalk,
+
+    -- * MulticastGroup
+    MulticastGroup (..),
+    newMulticastGroup,
+    multicastGroup_arn,
+    multicastGroup_id,
+    multicastGroup_name,
+
+    -- * MulticastGroupByFuotaTask
+    MulticastGroupByFuotaTask (..),
+    newMulticastGroupByFuotaTask,
+    multicastGroupByFuotaTask_id,
+
+    -- * MulticastWirelessMetadata
+    MulticastWirelessMetadata (..),
+    newMulticastWirelessMetadata,
+    multicastWirelessMetadata_loRaWAN,
+
+    -- * NetworkAnalyzerConfigurations
+    NetworkAnalyzerConfigurations (..),
+    newNetworkAnalyzerConfigurations,
+    networkAnalyzerConfigurations_arn,
+    networkAnalyzerConfigurations_name,
+
+    -- * OtaaV1_0_x
+    OtaaV1_0_x (..),
+    newOtaaV1_0_x,
+    otaaV1_0_x_appEui,
+    otaaV1_0_x_appKey,
+    otaaV1_0_x_genAppKey,
+
+    -- * OtaaV1_1
+    OtaaV1_1 (..),
+    newOtaaV1_1,
+    otaaV1_1_appKey,
+    otaaV1_1_joinEui,
+    otaaV1_1_nwkKey,
+
+    -- * ParticipatingGateways
+    ParticipatingGateways (..),
+    newParticipatingGateways,
+    participatingGateways_downlinkMode,
+    participatingGateways_gatewayList,
+    participatingGateways_transmissionInterval,
+
+    -- * Positioning
+    Positioning (..),
+    newPositioning,
+    positioning_clockSync,
+    positioning_gnss,
+    positioning_stream,
+
+    -- * ProximityEventConfiguration
+    ProximityEventConfiguration (..),
+    newProximityEventConfiguration,
+    proximityEventConfiguration_sidewalk,
+    proximityEventConfiguration_wirelessDeviceIdEventTopic,
+
+    -- * ProximityResourceTypeEventConfiguration
+    ProximityResourceTypeEventConfiguration (..),
+    newProximityResourceTypeEventConfiguration,
+    proximityResourceTypeEventConfiguration_sidewalk,
+
+    -- * ServiceProfile
+    ServiceProfile (..),
+    newServiceProfile,
+    serviceProfile_arn,
+    serviceProfile_id,
+    serviceProfile_name,
+
+    -- * SessionKeysAbpV1_0_x
+    SessionKeysAbpV1_0_x (..),
+    newSessionKeysAbpV1_0_x,
+    sessionKeysAbpV1_0_x_appSKey,
+    sessionKeysAbpV1_0_x_nwkSKey,
+
+    -- * SessionKeysAbpV1_1
+    SessionKeysAbpV1_1 (..),
+    newSessionKeysAbpV1_1,
+    sessionKeysAbpV1_1_appSKey,
+    sessionKeysAbpV1_1_fNwkSIntKey,
+    sessionKeysAbpV1_1_nwkSEncKey,
+    sessionKeysAbpV1_1_sNwkSIntKey,
+
+    -- * SidewalkAccountInfo
+    SidewalkAccountInfo (..),
+    newSidewalkAccountInfo,
+    sidewalkAccountInfo_amazonId,
+    sidewalkAccountInfo_appServerPrivateKey,
+
+    -- * SidewalkAccountInfoWithFingerprint
+    SidewalkAccountInfoWithFingerprint (..),
+    newSidewalkAccountInfoWithFingerprint,
+    sidewalkAccountInfoWithFingerprint_amazonId,
+    sidewalkAccountInfoWithFingerprint_arn,
+    sidewalkAccountInfoWithFingerprint_fingerprint,
+
+    -- * SidewalkDevice
+    SidewalkDevice (..),
+    newSidewalkDevice,
+    sidewalkDevice_amazonId,
+    sidewalkDevice_deviceCertificates,
+    sidewalkDevice_sidewalkId,
+    sidewalkDevice_sidewalkManufacturingSn,
+
+    -- * SidewalkDeviceMetadata
+    SidewalkDeviceMetadata (..),
+    newSidewalkDeviceMetadata,
+    sidewalkDeviceMetadata_batteryLevel,
+    sidewalkDeviceMetadata_deviceState,
+    sidewalkDeviceMetadata_event,
+    sidewalkDeviceMetadata_rssi,
+
+    -- * SidewalkEventNotificationConfigurations
+    SidewalkEventNotificationConfigurations (..),
+    newSidewalkEventNotificationConfigurations,
+    sidewalkEventNotificationConfigurations_amazonIdEventTopic,
+
+    -- * SidewalkListDevice
+    SidewalkListDevice (..),
+    newSidewalkListDevice,
+    sidewalkListDevice_amazonId,
+    sidewalkListDevice_deviceCertificates,
+    sidewalkListDevice_sidewalkId,
+    sidewalkListDevice_sidewalkManufacturingSn,
+
+    -- * SidewalkResourceTypeEventConfiguration
+    SidewalkResourceTypeEventConfiguration (..),
+    newSidewalkResourceTypeEventConfiguration,
+    sidewalkResourceTypeEventConfiguration_wirelessDeviceEventTopic,
+
+    -- * SidewalkSendDataToDevice
+    SidewalkSendDataToDevice (..),
+    newSidewalkSendDataToDevice,
+    sidewalkSendDataToDevice_ackModeRetryDurationSecs,
+    sidewalkSendDataToDevice_messageType,
+    sidewalkSendDataToDevice_seq,
+
+    -- * SidewalkUpdateAccount
+    SidewalkUpdateAccount (..),
+    newSidewalkUpdateAccount,
+    sidewalkUpdateAccount_appServerPrivateKey,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TdscdmaLocalId
+    TdscdmaLocalId (..),
+    newTdscdmaLocalId,
+    tdscdmaLocalId_uarfcn,
+    tdscdmaLocalId_cellParams,
+
+    -- * TdscdmaNmrObj
+    TdscdmaNmrObj (..),
+    newTdscdmaNmrObj,
+    tdscdmaNmrObj_pathLoss,
+    tdscdmaNmrObj_rscp,
+    tdscdmaNmrObj_utranCid,
+    tdscdmaNmrObj_uarfcn,
+    tdscdmaNmrObj_cellParams,
+
+    -- * TdscdmaObj
+    TdscdmaObj (..),
+    newTdscdmaObj,
+    tdscdmaObj_lac,
+    tdscdmaObj_pathLoss,
+    tdscdmaObj_rscp,
+    tdscdmaObj_tdscdmaLocalId,
+    tdscdmaObj_tdscdmaNmr,
+    tdscdmaObj_tdscdmaTimingAdvance,
+    tdscdmaObj_mcc,
+    tdscdmaObj_mnc,
+    tdscdmaObj_utranCid,
+
+    -- * TraceContent
+    TraceContent (..),
+    newTraceContent,
+    traceContent_logLevel,
+    traceContent_wirelessDeviceFrameInfo,
+
+    -- * UpdateAbpV1_0_x
+    UpdateAbpV1_0_x (..),
+    newUpdateAbpV1_0_x,
+    updateAbpV1_0_x_fCntStart,
+
+    -- * UpdateAbpV1_1
+    UpdateAbpV1_1 (..),
+    newUpdateAbpV1_1,
+    updateAbpV1_1_fCntStart,
+
+    -- * UpdateFPorts
+    UpdateFPorts (..),
+    newUpdateFPorts,
+    updateFPorts_applications,
+    updateFPorts_positioning,
+
+    -- * UpdateWirelessGatewayTaskCreate
+    UpdateWirelessGatewayTaskCreate (..),
+    newUpdateWirelessGatewayTaskCreate,
+    updateWirelessGatewayTaskCreate_loRaWAN,
+    updateWirelessGatewayTaskCreate_updateDataRole,
+    updateWirelessGatewayTaskCreate_updateDataSource,
+
+    -- * UpdateWirelessGatewayTaskEntry
+    UpdateWirelessGatewayTaskEntry (..),
+    newUpdateWirelessGatewayTaskEntry,
+    updateWirelessGatewayTaskEntry_arn,
+    updateWirelessGatewayTaskEntry_id,
+    updateWirelessGatewayTaskEntry_loRaWAN,
+
+    -- * WcdmaLocalId
+    WcdmaLocalId (..),
+    newWcdmaLocalId,
+    wcdmaLocalId_uarfcndl,
+    wcdmaLocalId_psc,
+
+    -- * WcdmaNmrObj
+    WcdmaNmrObj (..),
+    newWcdmaNmrObj,
+    wcdmaNmrObj_pathLoss,
+    wcdmaNmrObj_rscp,
+    wcdmaNmrObj_uarfcndl,
+    wcdmaNmrObj_psc,
+    wcdmaNmrObj_utranCid,
+
+    -- * WcdmaObj
+    WcdmaObj (..),
+    newWcdmaObj,
+    wcdmaObj_lac,
+    wcdmaObj_pathLoss,
+    wcdmaObj_rscp,
+    wcdmaObj_wcdmaLocalId,
+    wcdmaObj_wcdmaNmr,
+    wcdmaObj_mcc,
+    wcdmaObj_mnc,
+    wcdmaObj_utranCid,
+
+    -- * WiFiAccessPoint
+    WiFiAccessPoint (..),
+    newWiFiAccessPoint,
+    wiFiAccessPoint_macAddress,
+    wiFiAccessPoint_rss,
+
+    -- * WirelessDeviceEventLogOption
+    WirelessDeviceEventLogOption (..),
+    newWirelessDeviceEventLogOption,
+    wirelessDeviceEventLogOption_event,
+    wirelessDeviceEventLogOption_logLevel,
+
+    -- * WirelessDeviceLogOption
+    WirelessDeviceLogOption (..),
+    newWirelessDeviceLogOption,
+    wirelessDeviceLogOption_events,
+    wirelessDeviceLogOption_type,
+    wirelessDeviceLogOption_logLevel,
+
+    -- * WirelessDeviceStatistics
+    WirelessDeviceStatistics (..),
+    newWirelessDeviceStatistics,
+    wirelessDeviceStatistics_arn,
+    wirelessDeviceStatistics_destinationName,
+    wirelessDeviceStatistics_fuotaDeviceStatus,
+    wirelessDeviceStatistics_id,
+    wirelessDeviceStatistics_lastUplinkReceivedAt,
+    wirelessDeviceStatistics_loRaWAN,
+    wirelessDeviceStatistics_mcGroupId,
+    wirelessDeviceStatistics_multicastDeviceStatus,
+    wirelessDeviceStatistics_name,
+    wirelessDeviceStatistics_sidewalk,
+    wirelessDeviceStatistics_type,
+
+    -- * WirelessGatewayEventLogOption
+    WirelessGatewayEventLogOption (..),
+    newWirelessGatewayEventLogOption,
+    wirelessGatewayEventLogOption_event,
+    wirelessGatewayEventLogOption_logLevel,
+
+    -- * WirelessGatewayLogOption
+    WirelessGatewayLogOption (..),
+    newWirelessGatewayLogOption,
+    wirelessGatewayLogOption_events,
+    wirelessGatewayLogOption_type,
+    wirelessGatewayLogOption_logLevel,
+
+    -- * WirelessGatewayStatistics
+    WirelessGatewayStatistics (..),
+    newWirelessGatewayStatistics,
+    wirelessGatewayStatistics_arn,
+    wirelessGatewayStatistics_description,
+    wirelessGatewayStatistics_id,
+    wirelessGatewayStatistics_lastUplinkReceivedAt,
+    wirelessGatewayStatistics_loRaWAN,
+    wirelessGatewayStatistics_name,
+
+    -- * WirelessMetadata
+    WirelessMetadata (..),
+    newWirelessMetadata,
+    wirelessMetadata_loRaWAN,
+    wirelessMetadata_sidewalk,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.IoTWireless.Types.AbpV1_0_x
+import Amazonka.IoTWireless.Types.AbpV1_1
+import Amazonka.IoTWireless.Types.ApplicationConfig
+import Amazonka.IoTWireless.Types.ApplicationConfigType
+import Amazonka.IoTWireless.Types.BatteryLevel
+import Amazonka.IoTWireless.Types.Beaconing
+import Amazonka.IoTWireless.Types.CdmaLocalId
+import Amazonka.IoTWireless.Types.CdmaNmrObj
+import Amazonka.IoTWireless.Types.CdmaObj
+import Amazonka.IoTWireless.Types.CellTowers
+import Amazonka.IoTWireless.Types.CertificateList
+import Amazonka.IoTWireless.Types.ConnectionStatus
+import Amazonka.IoTWireless.Types.ConnectionStatusEventConfiguration
+import Amazonka.IoTWireless.Types.ConnectionStatusResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.Destinations
+import Amazonka.IoTWireless.Types.DeviceProfile
+import Amazonka.IoTWireless.Types.DeviceRegistrationStateEventConfiguration
+import Amazonka.IoTWireless.Types.DeviceRegistrationStateResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.DeviceState
+import Amazonka.IoTWireless.Types.DlClass
+import Amazonka.IoTWireless.Types.DownlinkMode
+import Amazonka.IoTWireless.Types.DownlinkQueueMessage
+import Amazonka.IoTWireless.Types.Event
+import Amazonka.IoTWireless.Types.EventConfigurationItem
+import Amazonka.IoTWireless.Types.EventNotificationItemConfigurations
+import Amazonka.IoTWireless.Types.EventNotificationPartnerType
+import Amazonka.IoTWireless.Types.EventNotificationResourceType
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import Amazonka.IoTWireless.Types.ExpressionType
+import Amazonka.IoTWireless.Types.FPorts
+import Amazonka.IoTWireless.Types.FuotaDeviceStatus
+import Amazonka.IoTWireless.Types.FuotaTask
+import Amazonka.IoTWireless.Types.FuotaTaskStatus
+import Amazonka.IoTWireless.Types.GatewayListItem
+import Amazonka.IoTWireless.Types.GlobalIdentity
+import Amazonka.IoTWireless.Types.Gnss
+import Amazonka.IoTWireless.Types.GsmLocalId
+import Amazonka.IoTWireless.Types.GsmNmrObj
+import Amazonka.IoTWireless.Types.GsmObj
+import Amazonka.IoTWireless.Types.IdentifierType
+import Amazonka.IoTWireless.Types.Ip
+import Amazonka.IoTWireless.Types.JoinEventConfiguration
+import Amazonka.IoTWireless.Types.JoinResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.LoRaWANConnectionStatusEventNotificationConfigurations
+import Amazonka.IoTWireless.Types.LoRaWANConnectionStatusResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.LoRaWANDevice
+import Amazonka.IoTWireless.Types.LoRaWANDeviceMetadata
+import Amazonka.IoTWireless.Types.LoRaWANDeviceProfile
+import Amazonka.IoTWireless.Types.LoRaWANFuotaTask
+import Amazonka.IoTWireless.Types.LoRaWANFuotaTaskGetInfo
+import Amazonka.IoTWireless.Types.LoRaWANGateway
+import Amazonka.IoTWireless.Types.LoRaWANGatewayCurrentVersion
+import Amazonka.IoTWireless.Types.LoRaWANGatewayMetadata
+import Amazonka.IoTWireless.Types.LoRaWANGatewayVersion
+import Amazonka.IoTWireless.Types.LoRaWANGetServiceProfileInfo
+import Amazonka.IoTWireless.Types.LoRaWANJoinEventNotificationConfigurations
+import Amazonka.IoTWireless.Types.LoRaWANJoinResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.LoRaWANListDevice
+import Amazonka.IoTWireless.Types.LoRaWANMulticast
+import Amazonka.IoTWireless.Types.LoRaWANMulticastGet
+import Amazonka.IoTWireless.Types.LoRaWANMulticastMetadata
+import Amazonka.IoTWireless.Types.LoRaWANMulticastSession
+import Amazonka.IoTWireless.Types.LoRaWANSendDataToDevice
+import Amazonka.IoTWireless.Types.LoRaWANServiceProfile
+import Amazonka.IoTWireless.Types.LoRaWANStartFuotaTask
+import Amazonka.IoTWireless.Types.LoRaWANUpdateDevice
+import Amazonka.IoTWireless.Types.LoRaWANUpdateGatewayTaskCreate
+import Amazonka.IoTWireless.Types.LoRaWANUpdateGatewayTaskEntry
+import Amazonka.IoTWireless.Types.LogLevel
+import Amazonka.IoTWireless.Types.LteLocalId
+import Amazonka.IoTWireless.Types.LteNmrObj
+import Amazonka.IoTWireless.Types.LteObj
+import Amazonka.IoTWireless.Types.MessageDeliveryStatusEventConfiguration
+import Amazonka.IoTWireless.Types.MessageDeliveryStatusResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.MessageType
+import Amazonka.IoTWireless.Types.MulticastGroup
+import Amazonka.IoTWireless.Types.MulticastGroupByFuotaTask
+import Amazonka.IoTWireless.Types.MulticastWirelessMetadata
+import Amazonka.IoTWireless.Types.NetworkAnalyzerConfigurations
+import Amazonka.IoTWireless.Types.OtaaV1_0_x
+import Amazonka.IoTWireless.Types.OtaaV1_1
+import Amazonka.IoTWireless.Types.ParticipatingGateways
+import Amazonka.IoTWireless.Types.PartnerType
+import Amazonka.IoTWireless.Types.PositionResourceType
+import Amazonka.IoTWireless.Types.Positioning
+import Amazonka.IoTWireless.Types.PositioningConfigStatus
+import Amazonka.IoTWireless.Types.ProximityEventConfiguration
+import Amazonka.IoTWireless.Types.ProximityResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.ServiceProfile
+import Amazonka.IoTWireless.Types.SessionKeysAbpV1_0_x
+import Amazonka.IoTWireless.Types.SessionKeysAbpV1_1
+import Amazonka.IoTWireless.Types.SidewalkAccountInfo
+import Amazonka.IoTWireless.Types.SidewalkAccountInfoWithFingerprint
+import Amazonka.IoTWireless.Types.SidewalkDevice
+import Amazonka.IoTWireless.Types.SidewalkDeviceMetadata
+import Amazonka.IoTWireless.Types.SidewalkEventNotificationConfigurations
+import Amazonka.IoTWireless.Types.SidewalkListDevice
+import Amazonka.IoTWireless.Types.SidewalkResourceTypeEventConfiguration
+import Amazonka.IoTWireless.Types.SidewalkSendDataToDevice
+import Amazonka.IoTWireless.Types.SidewalkUpdateAccount
+import Amazonka.IoTWireless.Types.SigningAlg
+import Amazonka.IoTWireless.Types.SupportedRfRegion
+import Amazonka.IoTWireless.Types.Tag
+import Amazonka.IoTWireless.Types.TdscdmaLocalId
+import Amazonka.IoTWireless.Types.TdscdmaNmrObj
+import Amazonka.IoTWireless.Types.TdscdmaObj
+import Amazonka.IoTWireless.Types.TraceContent
+import Amazonka.IoTWireless.Types.UpdateAbpV1_0_x
+import Amazonka.IoTWireless.Types.UpdateAbpV1_1
+import Amazonka.IoTWireless.Types.UpdateFPorts
+import Amazonka.IoTWireless.Types.UpdateWirelessGatewayTaskCreate
+import Amazonka.IoTWireless.Types.UpdateWirelessGatewayTaskEntry
+import Amazonka.IoTWireless.Types.WcdmaLocalId
+import Amazonka.IoTWireless.Types.WcdmaNmrObj
+import Amazonka.IoTWireless.Types.WcdmaObj
+import Amazonka.IoTWireless.Types.WiFiAccessPoint
+import Amazonka.IoTWireless.Types.WirelessDeviceEvent
+import Amazonka.IoTWireless.Types.WirelessDeviceEventLogOption
+import Amazonka.IoTWireless.Types.WirelessDeviceFrameInfo
+import Amazonka.IoTWireless.Types.WirelessDeviceIdType
+import Amazonka.IoTWireless.Types.WirelessDeviceLogOption
+import Amazonka.IoTWireless.Types.WirelessDeviceStatistics
+import Amazonka.IoTWireless.Types.WirelessDeviceType
+import Amazonka.IoTWireless.Types.WirelessGatewayEvent
+import Amazonka.IoTWireless.Types.WirelessGatewayEventLogOption
+import Amazonka.IoTWireless.Types.WirelessGatewayIdType
+import Amazonka.IoTWireless.Types.WirelessGatewayLogOption
+import Amazonka.IoTWireless.Types.WirelessGatewayServiceType
+import Amazonka.IoTWireless.Types.WirelessGatewayStatistics
+import Amazonka.IoTWireless.Types.WirelessGatewayTaskDefinitionType
+import Amazonka.IoTWireless.Types.WirelessGatewayTaskStatus
+import Amazonka.IoTWireless.Types.WirelessGatewayType
+import Amazonka.IoTWireless.Types.WirelessMetadata
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-11-22@ of the Amazon IoT Wireless SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "IoTWireless",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "api.iotwireless",
+      Core.signingName = "iotwireless",
+      Core.version = "2020-11-22",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "IoTWireless",
+      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
+
+-- | User does not have permission to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | Adding, updating, or deleting the resource can cause an inconsistent
+-- state.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | An unexpected error occurred while processing a request.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | Resource does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The request was denied because it exceeded the allowed API request rate.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The request was denied because the resource can\'t have any more tags.
+_TooManyTagsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyTagsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyTagsException"
+    Prelude.. Core.hasStatus 400
+
+-- | The input did not meet the specified constraints.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/IoTWireless/Types/AbpV1_0_x.hs b/gen/Amazonka/IoTWireless/Types/AbpV1_0_x.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/AbpV1_0_x.hs
@@ -0,0 +1,107 @@
+{-# 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.IoTWireless.Types.AbpV1_0_x
+-- 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.IoTWireless.Types.AbpV1_0_x where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.SessionKeysAbpV1_0_x
+import qualified Amazonka.Prelude as Prelude
+
+-- | ABP device object for LoRaWAN specification v1.0.x
+--
+-- /See:/ 'newAbpV1_0_x' smart constructor.
+data AbpV1_0_x = AbpV1_0_x'
+  { -- | The DevAddr value.
+    devAddr :: Prelude.Maybe Prelude.Text,
+    -- | The FCnt init value.
+    fCntStart :: Prelude.Maybe Prelude.Natural,
+    -- | Session keys for ABP v1.0.x
+    sessionKeys :: Prelude.Maybe SessionKeysAbpV1_0_x
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AbpV1_0_x' 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:
+--
+-- 'devAddr', 'abpV1_0_x_devAddr' - The DevAddr value.
+--
+-- 'fCntStart', 'abpV1_0_x_fCntStart' - The FCnt init value.
+--
+-- 'sessionKeys', 'abpV1_0_x_sessionKeys' - Session keys for ABP v1.0.x
+newAbpV1_0_x ::
+  AbpV1_0_x
+newAbpV1_0_x =
+  AbpV1_0_x'
+    { devAddr = Prelude.Nothing,
+      fCntStart = Prelude.Nothing,
+      sessionKeys = Prelude.Nothing
+    }
+
+-- | The DevAddr value.
+abpV1_0_x_devAddr :: Lens.Lens' AbpV1_0_x (Prelude.Maybe Prelude.Text)
+abpV1_0_x_devAddr = Lens.lens (\AbpV1_0_x' {devAddr} -> devAddr) (\s@AbpV1_0_x' {} a -> s {devAddr = a} :: AbpV1_0_x)
+
+-- | The FCnt init value.
+abpV1_0_x_fCntStart :: Lens.Lens' AbpV1_0_x (Prelude.Maybe Prelude.Natural)
+abpV1_0_x_fCntStart = Lens.lens (\AbpV1_0_x' {fCntStart} -> fCntStart) (\s@AbpV1_0_x' {} a -> s {fCntStart = a} :: AbpV1_0_x)
+
+-- | Session keys for ABP v1.0.x
+abpV1_0_x_sessionKeys :: Lens.Lens' AbpV1_0_x (Prelude.Maybe SessionKeysAbpV1_0_x)
+abpV1_0_x_sessionKeys = Lens.lens (\AbpV1_0_x' {sessionKeys} -> sessionKeys) (\s@AbpV1_0_x' {} a -> s {sessionKeys = a} :: AbpV1_0_x)
+
+instance Data.FromJSON AbpV1_0_x where
+  parseJSON =
+    Data.withObject
+      "AbpV1_0_x"
+      ( \x ->
+          AbpV1_0_x'
+            Prelude.<$> (x Data..:? "DevAddr")
+            Prelude.<*> (x Data..:? "FCntStart")
+            Prelude.<*> (x Data..:? "SessionKeys")
+      )
+
+instance Prelude.Hashable AbpV1_0_x where
+  hashWithSalt _salt AbpV1_0_x' {..} =
+    _salt
+      `Prelude.hashWithSalt` devAddr
+      `Prelude.hashWithSalt` fCntStart
+      `Prelude.hashWithSalt` sessionKeys
+
+instance Prelude.NFData AbpV1_0_x where
+  rnf AbpV1_0_x' {..} =
+    Prelude.rnf devAddr
+      `Prelude.seq` Prelude.rnf fCntStart
+      `Prelude.seq` Prelude.rnf sessionKeys
+
+instance Data.ToJSON AbpV1_0_x where
+  toJSON AbpV1_0_x' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DevAddr" Data..=) Prelude.<$> devAddr,
+            ("FCntStart" Data..=) Prelude.<$> fCntStart,
+            ("SessionKeys" Data..=) Prelude.<$> sessionKeys
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/AbpV1_1.hs b/gen/Amazonka/IoTWireless/Types/AbpV1_1.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/AbpV1_1.hs
@@ -0,0 +1,107 @@
+{-# 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.IoTWireless.Types.AbpV1_1
+-- 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.IoTWireless.Types.AbpV1_1 where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.SessionKeysAbpV1_1
+import qualified Amazonka.Prelude as Prelude
+
+-- | ABP device object for LoRaWAN specification v1.1
+--
+-- /See:/ 'newAbpV1_1' smart constructor.
+data AbpV1_1 = AbpV1_1'
+  { -- | The DevAddr value.
+    devAddr :: Prelude.Maybe Prelude.Text,
+    -- | The FCnt init value.
+    fCntStart :: Prelude.Maybe Prelude.Natural,
+    -- | Session keys for ABP v1.1
+    sessionKeys :: Prelude.Maybe SessionKeysAbpV1_1
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AbpV1_1' 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:
+--
+-- 'devAddr', 'abpV1_1_devAddr' - The DevAddr value.
+--
+-- 'fCntStart', 'abpV1_1_fCntStart' - The FCnt init value.
+--
+-- 'sessionKeys', 'abpV1_1_sessionKeys' - Session keys for ABP v1.1
+newAbpV1_1 ::
+  AbpV1_1
+newAbpV1_1 =
+  AbpV1_1'
+    { devAddr = Prelude.Nothing,
+      fCntStart = Prelude.Nothing,
+      sessionKeys = Prelude.Nothing
+    }
+
+-- | The DevAddr value.
+abpV1_1_devAddr :: Lens.Lens' AbpV1_1 (Prelude.Maybe Prelude.Text)
+abpV1_1_devAddr = Lens.lens (\AbpV1_1' {devAddr} -> devAddr) (\s@AbpV1_1' {} a -> s {devAddr = a} :: AbpV1_1)
+
+-- | The FCnt init value.
+abpV1_1_fCntStart :: Lens.Lens' AbpV1_1 (Prelude.Maybe Prelude.Natural)
+abpV1_1_fCntStart = Lens.lens (\AbpV1_1' {fCntStart} -> fCntStart) (\s@AbpV1_1' {} a -> s {fCntStart = a} :: AbpV1_1)
+
+-- | Session keys for ABP v1.1
+abpV1_1_sessionKeys :: Lens.Lens' AbpV1_1 (Prelude.Maybe SessionKeysAbpV1_1)
+abpV1_1_sessionKeys = Lens.lens (\AbpV1_1' {sessionKeys} -> sessionKeys) (\s@AbpV1_1' {} a -> s {sessionKeys = a} :: AbpV1_1)
+
+instance Data.FromJSON AbpV1_1 where
+  parseJSON =
+    Data.withObject
+      "AbpV1_1"
+      ( \x ->
+          AbpV1_1'
+            Prelude.<$> (x Data..:? "DevAddr")
+            Prelude.<*> (x Data..:? "FCntStart")
+            Prelude.<*> (x Data..:? "SessionKeys")
+      )
+
+instance Prelude.Hashable AbpV1_1 where
+  hashWithSalt _salt AbpV1_1' {..} =
+    _salt
+      `Prelude.hashWithSalt` devAddr
+      `Prelude.hashWithSalt` fCntStart
+      `Prelude.hashWithSalt` sessionKeys
+
+instance Prelude.NFData AbpV1_1 where
+  rnf AbpV1_1' {..} =
+    Prelude.rnf devAddr
+      `Prelude.seq` Prelude.rnf fCntStart
+      `Prelude.seq` Prelude.rnf sessionKeys
+
+instance Data.ToJSON AbpV1_1 where
+  toJSON AbpV1_1' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DevAddr" Data..=) Prelude.<$> devAddr,
+            ("FCntStart" Data..=) Prelude.<$> fCntStart,
+            ("SessionKeys" Data..=) Prelude.<$> sessionKeys
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/ApplicationConfig.hs b/gen/Amazonka/IoTWireless/Types/ApplicationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ApplicationConfig.hs
@@ -0,0 +1,118 @@
+{-# 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.IoTWireless.Types.ApplicationConfig
+-- 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.IoTWireless.Types.ApplicationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.ApplicationConfigType
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWAN application configuration, which can be used to perform
+-- geolocation.
+--
+-- /See:/ 'newApplicationConfig' smart constructor.
+data ApplicationConfig = ApplicationConfig'
+  { -- | The name of the position data destination that describes the AWS IoT
+    -- rule that processes the device\'s position data for use by AWS IoT Core
+    -- for LoRaWAN.
+    destinationName :: Prelude.Maybe Prelude.Text,
+    fPort :: Prelude.Maybe Prelude.Natural,
+    -- | Application type, which can be specified to obtain real-time position
+    -- information of your LoRaWAN device.
+    type' :: Prelude.Maybe ApplicationConfigType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplicationConfig' 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:
+--
+-- 'destinationName', 'applicationConfig_destinationName' - The name of the position data destination that describes the AWS IoT
+-- rule that processes the device\'s position data for use by AWS IoT Core
+-- for LoRaWAN.
+--
+-- 'fPort', 'applicationConfig_fPort' - Undocumented member.
+--
+-- 'type'', 'applicationConfig_type' - Application type, which can be specified to obtain real-time position
+-- information of your LoRaWAN device.
+newApplicationConfig ::
+  ApplicationConfig
+newApplicationConfig =
+  ApplicationConfig'
+    { destinationName =
+        Prelude.Nothing,
+      fPort = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The name of the position data destination that describes the AWS IoT
+-- rule that processes the device\'s position data for use by AWS IoT Core
+-- for LoRaWAN.
+applicationConfig_destinationName :: Lens.Lens' ApplicationConfig (Prelude.Maybe Prelude.Text)
+applicationConfig_destinationName = Lens.lens (\ApplicationConfig' {destinationName} -> destinationName) (\s@ApplicationConfig' {} a -> s {destinationName = a} :: ApplicationConfig)
+
+-- | Undocumented member.
+applicationConfig_fPort :: Lens.Lens' ApplicationConfig (Prelude.Maybe Prelude.Natural)
+applicationConfig_fPort = Lens.lens (\ApplicationConfig' {fPort} -> fPort) (\s@ApplicationConfig' {} a -> s {fPort = a} :: ApplicationConfig)
+
+-- | Application type, which can be specified to obtain real-time position
+-- information of your LoRaWAN device.
+applicationConfig_type :: Lens.Lens' ApplicationConfig (Prelude.Maybe ApplicationConfigType)
+applicationConfig_type = Lens.lens (\ApplicationConfig' {type'} -> type') (\s@ApplicationConfig' {} a -> s {type' = a} :: ApplicationConfig)
+
+instance Data.FromJSON ApplicationConfig where
+  parseJSON =
+    Data.withObject
+      "ApplicationConfig"
+      ( \x ->
+          ApplicationConfig'
+            Prelude.<$> (x Data..:? "DestinationName")
+            Prelude.<*> (x Data..:? "FPort")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable ApplicationConfig where
+  hashWithSalt _salt ApplicationConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationName
+      `Prelude.hashWithSalt` fPort
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ApplicationConfig where
+  rnf ApplicationConfig' {..} =
+    Prelude.rnf destinationName
+      `Prelude.seq` Prelude.rnf fPort
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON ApplicationConfig where
+  toJSON ApplicationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DestinationName" Data..=)
+              Prelude.<$> destinationName,
+            ("FPort" Data..=) Prelude.<$> fPort,
+            ("Type" Data..=) Prelude.<$> type'
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/ApplicationConfigType.hs b/gen/Amazonka/IoTWireless/Types/ApplicationConfigType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ApplicationConfigType.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.IoTWireless.Types.ApplicationConfigType
+-- 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.IoTWireless.Types.ApplicationConfigType
+  ( ApplicationConfigType
+      ( ..,
+        ApplicationConfigType_SemtechGeolocation
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplicationConfigType = ApplicationConfigType'
+  { fromApplicationConfigType ::
+      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 ApplicationConfigType_SemtechGeolocation :: ApplicationConfigType
+pattern ApplicationConfigType_SemtechGeolocation = ApplicationConfigType' "SemtechGeolocation"
+
+{-# COMPLETE
+  ApplicationConfigType_SemtechGeolocation,
+  ApplicationConfigType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/BatteryLevel.hs b/gen/Amazonka/IoTWireless/Types/BatteryLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/BatteryLevel.hs
@@ -0,0 +1,77 @@
+{-# 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.IoTWireless.Types.BatteryLevel
+-- 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.IoTWireless.Types.BatteryLevel
+  ( BatteryLevel
+      ( ..,
+        BatteryLevel_Critical,
+        BatteryLevel_Low,
+        BatteryLevel_Normal
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sidewalk device battery level.
+newtype BatteryLevel = BatteryLevel'
+  { fromBatteryLevel ::
+      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 BatteryLevel_Critical :: BatteryLevel
+pattern BatteryLevel_Critical = BatteryLevel' "critical"
+
+pattern BatteryLevel_Low :: BatteryLevel
+pattern BatteryLevel_Low = BatteryLevel' "low"
+
+pattern BatteryLevel_Normal :: BatteryLevel
+pattern BatteryLevel_Normal = BatteryLevel' "normal"
+
+{-# COMPLETE
+  BatteryLevel_Critical,
+  BatteryLevel_Low,
+  BatteryLevel_Normal,
+  BatteryLevel'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/Beaconing.hs b/gen/Amazonka/IoTWireless/Types/Beaconing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/Beaconing.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.IoTWireless.Types.Beaconing
+-- 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.IoTWireless.Types.Beaconing 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
+
+-- | Beaconing parameters for configuring the wireless gateways.
+--
+-- /See:/ 'newBeaconing' smart constructor.
+data Beaconing = Beaconing'
+  { -- | The data rate for gateways that are sending the beacons.
+    dataRate :: Prelude.Maybe Prelude.Natural,
+    -- | The frequency list for the gateways to send the beacons.
+    frequencies :: Prelude.Maybe [Prelude.Natural]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Beaconing' 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:
+--
+-- 'dataRate', 'beaconing_dataRate' - The data rate for gateways that are sending the beacons.
+--
+-- 'frequencies', 'beaconing_frequencies' - The frequency list for the gateways to send the beacons.
+newBeaconing ::
+  Beaconing
+newBeaconing =
+  Beaconing'
+    { dataRate = Prelude.Nothing,
+      frequencies = Prelude.Nothing
+    }
+
+-- | The data rate for gateways that are sending the beacons.
+beaconing_dataRate :: Lens.Lens' Beaconing (Prelude.Maybe Prelude.Natural)
+beaconing_dataRate = Lens.lens (\Beaconing' {dataRate} -> dataRate) (\s@Beaconing' {} a -> s {dataRate = a} :: Beaconing)
+
+-- | The frequency list for the gateways to send the beacons.
+beaconing_frequencies :: Lens.Lens' Beaconing (Prelude.Maybe [Prelude.Natural])
+beaconing_frequencies = Lens.lens (\Beaconing' {frequencies} -> frequencies) (\s@Beaconing' {} a -> s {frequencies = a} :: Beaconing) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Beaconing where
+  parseJSON =
+    Data.withObject
+      "Beaconing"
+      ( \x ->
+          Beaconing'
+            Prelude.<$> (x Data..:? "DataRate")
+            Prelude.<*> (x Data..:? "Frequencies" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Beaconing where
+  hashWithSalt _salt Beaconing' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataRate
+      `Prelude.hashWithSalt` frequencies
+
+instance Prelude.NFData Beaconing where
+  rnf Beaconing' {..} =
+    Prelude.rnf dataRate
+      `Prelude.seq` Prelude.rnf frequencies
+
+instance Data.ToJSON Beaconing where
+  toJSON Beaconing' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataRate" Data..=) Prelude.<$> dataRate,
+            ("Frequencies" Data..=) Prelude.<$> frequencies
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/CdmaLocalId.hs b/gen/Amazonka/IoTWireless/Types/CdmaLocalId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/CdmaLocalId.hs
@@ -0,0 +1,91 @@
+{-# 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.IoTWireless.Types.CdmaLocalId
+-- 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.IoTWireless.Types.CdmaLocalId 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
+
+-- | CDMA local ID information, which corresponds to the local identification
+-- parameters of a CDMA cell.
+--
+-- /See:/ 'newCdmaLocalId' smart constructor.
+data CdmaLocalId = CdmaLocalId'
+  { -- | Pseudo-noise offset, which is a characteristic of the signal from a cell
+    -- on a radio tower.
+    pnOffset :: Prelude.Natural,
+    -- | CDMA channel information.
+    cdmaChannel :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CdmaLocalId' 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:
+--
+-- 'pnOffset', 'cdmaLocalId_pnOffset' - Pseudo-noise offset, which is a characteristic of the signal from a cell
+-- on a radio tower.
+--
+-- 'cdmaChannel', 'cdmaLocalId_cdmaChannel' - CDMA channel information.
+newCdmaLocalId ::
+  -- | 'pnOffset'
+  Prelude.Natural ->
+  -- | 'cdmaChannel'
+  Prelude.Natural ->
+  CdmaLocalId
+newCdmaLocalId pPnOffset_ pCdmaChannel_ =
+  CdmaLocalId'
+    { pnOffset = pPnOffset_,
+      cdmaChannel = pCdmaChannel_
+    }
+
+-- | Pseudo-noise offset, which is a characteristic of the signal from a cell
+-- on a radio tower.
+cdmaLocalId_pnOffset :: Lens.Lens' CdmaLocalId Prelude.Natural
+cdmaLocalId_pnOffset = Lens.lens (\CdmaLocalId' {pnOffset} -> pnOffset) (\s@CdmaLocalId' {} a -> s {pnOffset = a} :: CdmaLocalId)
+
+-- | CDMA channel information.
+cdmaLocalId_cdmaChannel :: Lens.Lens' CdmaLocalId Prelude.Natural
+cdmaLocalId_cdmaChannel = Lens.lens (\CdmaLocalId' {cdmaChannel} -> cdmaChannel) (\s@CdmaLocalId' {} a -> s {cdmaChannel = a} :: CdmaLocalId)
+
+instance Prelude.Hashable CdmaLocalId where
+  hashWithSalt _salt CdmaLocalId' {..} =
+    _salt
+      `Prelude.hashWithSalt` pnOffset
+      `Prelude.hashWithSalt` cdmaChannel
+
+instance Prelude.NFData CdmaLocalId where
+  rnf CdmaLocalId' {..} =
+    Prelude.rnf pnOffset
+      `Prelude.seq` Prelude.rnf cdmaChannel
+
+instance Data.ToJSON CdmaLocalId where
+  toJSON CdmaLocalId' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("PnOffset" Data..= pnOffset),
+            Prelude.Just ("CdmaChannel" Data..= cdmaChannel)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/CdmaNmrObj.hs b/gen/Amazonka/IoTWireless/Types/CdmaNmrObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/CdmaNmrObj.hs
@@ -0,0 +1,117 @@
+{-# 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.IoTWireless.Types.CdmaNmrObj
+-- 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.IoTWireless.Types.CdmaNmrObj 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
+
+-- | CDMA object for network measurement reports.
+--
+-- /See:/ 'newCdmaNmrObj' smart constructor.
+data CdmaNmrObj = CdmaNmrObj'
+  { -- | CDMA base station ID (BSID).
+    baseStationId :: Prelude.Maybe Prelude.Natural,
+    -- | Transmit power level of the pilot signal, measured in dBm
+    -- (decibel-milliwatts).
+    pilotPower :: Prelude.Maybe Prelude.Int,
+    -- | Pseudo-noise offset, which is a characteristic of the signal from a cell
+    -- on a radio tower.
+    pnOffset :: Prelude.Natural,
+    -- | CDMA channel information.
+    cdmaChannel :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CdmaNmrObj' 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:
+--
+-- 'baseStationId', 'cdmaNmrObj_baseStationId' - CDMA base station ID (BSID).
+--
+-- 'pilotPower', 'cdmaNmrObj_pilotPower' - Transmit power level of the pilot signal, measured in dBm
+-- (decibel-milliwatts).
+--
+-- 'pnOffset', 'cdmaNmrObj_pnOffset' - Pseudo-noise offset, which is a characteristic of the signal from a cell
+-- on a radio tower.
+--
+-- 'cdmaChannel', 'cdmaNmrObj_cdmaChannel' - CDMA channel information.
+newCdmaNmrObj ::
+  -- | 'pnOffset'
+  Prelude.Natural ->
+  -- | 'cdmaChannel'
+  Prelude.Natural ->
+  CdmaNmrObj
+newCdmaNmrObj pPnOffset_ pCdmaChannel_ =
+  CdmaNmrObj'
+    { baseStationId = Prelude.Nothing,
+      pilotPower = Prelude.Nothing,
+      pnOffset = pPnOffset_,
+      cdmaChannel = pCdmaChannel_
+    }
+
+-- | CDMA base station ID (BSID).
+cdmaNmrObj_baseStationId :: Lens.Lens' CdmaNmrObj (Prelude.Maybe Prelude.Natural)
+cdmaNmrObj_baseStationId = Lens.lens (\CdmaNmrObj' {baseStationId} -> baseStationId) (\s@CdmaNmrObj' {} a -> s {baseStationId = a} :: CdmaNmrObj)
+
+-- | Transmit power level of the pilot signal, measured in dBm
+-- (decibel-milliwatts).
+cdmaNmrObj_pilotPower :: Lens.Lens' CdmaNmrObj (Prelude.Maybe Prelude.Int)
+cdmaNmrObj_pilotPower = Lens.lens (\CdmaNmrObj' {pilotPower} -> pilotPower) (\s@CdmaNmrObj' {} a -> s {pilotPower = a} :: CdmaNmrObj)
+
+-- | Pseudo-noise offset, which is a characteristic of the signal from a cell
+-- on a radio tower.
+cdmaNmrObj_pnOffset :: Lens.Lens' CdmaNmrObj Prelude.Natural
+cdmaNmrObj_pnOffset = Lens.lens (\CdmaNmrObj' {pnOffset} -> pnOffset) (\s@CdmaNmrObj' {} a -> s {pnOffset = a} :: CdmaNmrObj)
+
+-- | CDMA channel information.
+cdmaNmrObj_cdmaChannel :: Lens.Lens' CdmaNmrObj Prelude.Natural
+cdmaNmrObj_cdmaChannel = Lens.lens (\CdmaNmrObj' {cdmaChannel} -> cdmaChannel) (\s@CdmaNmrObj' {} a -> s {cdmaChannel = a} :: CdmaNmrObj)
+
+instance Prelude.Hashable CdmaNmrObj where
+  hashWithSalt _salt CdmaNmrObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` baseStationId
+      `Prelude.hashWithSalt` pilotPower
+      `Prelude.hashWithSalt` pnOffset
+      `Prelude.hashWithSalt` cdmaChannel
+
+instance Prelude.NFData CdmaNmrObj where
+  rnf CdmaNmrObj' {..} =
+    Prelude.rnf baseStationId
+      `Prelude.seq` Prelude.rnf pilotPower
+      `Prelude.seq` Prelude.rnf pnOffset
+      `Prelude.seq` Prelude.rnf cdmaChannel
+
+instance Data.ToJSON CdmaNmrObj where
+  toJSON CdmaNmrObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BaseStationId" Data..=) Prelude.<$> baseStationId,
+            ("PilotPower" Data..=) Prelude.<$> pilotPower,
+            Prelude.Just ("PnOffset" Data..= pnOffset),
+            Prelude.Just ("CdmaChannel" Data..= cdmaChannel)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/CdmaObj.hs b/gen/Amazonka/IoTWireless/Types/CdmaObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/CdmaObj.hs
@@ -0,0 +1,180 @@
+{-# 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.IoTWireless.Types.CdmaObj
+-- 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.IoTWireless.Types.CdmaObj where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.CdmaLocalId
+import Amazonka.IoTWireless.Types.CdmaNmrObj
+import qualified Amazonka.Prelude as Prelude
+
+-- | CDMA (Code-division multiple access) object.
+--
+-- /See:/ 'newCdmaObj' smart constructor.
+data CdmaObj = CdmaObj'
+  { -- | CDMA base station latitude in degrees.
+    baseLat :: Prelude.Maybe Prelude.Double,
+    -- | CDMA base station longtitude in degrees.
+    baseLng :: Prelude.Maybe Prelude.Double,
+    -- | CDMA local identification (local ID) parameters.
+    cdmaLocalId :: Prelude.Maybe CdmaLocalId,
+    -- | CDMA network measurement reports.
+    cdmaNmr :: Prelude.Maybe (Prelude.NonEmpty CdmaNmrObj),
+    -- | Transmit power level of the pilot signal, measured in dBm
+    -- (decibel-milliwatts).
+    pilotPower :: Prelude.Maybe Prelude.Int,
+    -- | CDMA registration zone (RZ).
+    registrationZone :: Prelude.Maybe Prelude.Natural,
+    -- | CDMA system ID (SID).
+    systemId :: Prelude.Natural,
+    -- | CDMA network ID (NID).
+    networkId :: Prelude.Natural,
+    -- | CDMA base station ID (BSID).
+    baseStationId :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CdmaObj' 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:
+--
+-- 'baseLat', 'cdmaObj_baseLat' - CDMA base station latitude in degrees.
+--
+-- 'baseLng', 'cdmaObj_baseLng' - CDMA base station longtitude in degrees.
+--
+-- 'cdmaLocalId', 'cdmaObj_cdmaLocalId' - CDMA local identification (local ID) parameters.
+--
+-- 'cdmaNmr', 'cdmaObj_cdmaNmr' - CDMA network measurement reports.
+--
+-- 'pilotPower', 'cdmaObj_pilotPower' - Transmit power level of the pilot signal, measured in dBm
+-- (decibel-milliwatts).
+--
+-- 'registrationZone', 'cdmaObj_registrationZone' - CDMA registration zone (RZ).
+--
+-- 'systemId', 'cdmaObj_systemId' - CDMA system ID (SID).
+--
+-- 'networkId', 'cdmaObj_networkId' - CDMA network ID (NID).
+--
+-- 'baseStationId', 'cdmaObj_baseStationId' - CDMA base station ID (BSID).
+newCdmaObj ::
+  -- | 'systemId'
+  Prelude.Natural ->
+  -- | 'networkId'
+  Prelude.Natural ->
+  -- | 'baseStationId'
+  Prelude.Natural ->
+  CdmaObj
+newCdmaObj pSystemId_ pNetworkId_ pBaseStationId_ =
+  CdmaObj'
+    { baseLat = Prelude.Nothing,
+      baseLng = Prelude.Nothing,
+      cdmaLocalId = Prelude.Nothing,
+      cdmaNmr = Prelude.Nothing,
+      pilotPower = Prelude.Nothing,
+      registrationZone = Prelude.Nothing,
+      systemId = pSystemId_,
+      networkId = pNetworkId_,
+      baseStationId = pBaseStationId_
+    }
+
+-- | CDMA base station latitude in degrees.
+cdmaObj_baseLat :: Lens.Lens' CdmaObj (Prelude.Maybe Prelude.Double)
+cdmaObj_baseLat = Lens.lens (\CdmaObj' {baseLat} -> baseLat) (\s@CdmaObj' {} a -> s {baseLat = a} :: CdmaObj)
+
+-- | CDMA base station longtitude in degrees.
+cdmaObj_baseLng :: Lens.Lens' CdmaObj (Prelude.Maybe Prelude.Double)
+cdmaObj_baseLng = Lens.lens (\CdmaObj' {baseLng} -> baseLng) (\s@CdmaObj' {} a -> s {baseLng = a} :: CdmaObj)
+
+-- | CDMA local identification (local ID) parameters.
+cdmaObj_cdmaLocalId :: Lens.Lens' CdmaObj (Prelude.Maybe CdmaLocalId)
+cdmaObj_cdmaLocalId = Lens.lens (\CdmaObj' {cdmaLocalId} -> cdmaLocalId) (\s@CdmaObj' {} a -> s {cdmaLocalId = a} :: CdmaObj)
+
+-- | CDMA network measurement reports.
+cdmaObj_cdmaNmr :: Lens.Lens' CdmaObj (Prelude.Maybe (Prelude.NonEmpty CdmaNmrObj))
+cdmaObj_cdmaNmr = Lens.lens (\CdmaObj' {cdmaNmr} -> cdmaNmr) (\s@CdmaObj' {} a -> s {cdmaNmr = a} :: CdmaObj) Prelude.. Lens.mapping Lens.coerced
+
+-- | Transmit power level of the pilot signal, measured in dBm
+-- (decibel-milliwatts).
+cdmaObj_pilotPower :: Lens.Lens' CdmaObj (Prelude.Maybe Prelude.Int)
+cdmaObj_pilotPower = Lens.lens (\CdmaObj' {pilotPower} -> pilotPower) (\s@CdmaObj' {} a -> s {pilotPower = a} :: CdmaObj)
+
+-- | CDMA registration zone (RZ).
+cdmaObj_registrationZone :: Lens.Lens' CdmaObj (Prelude.Maybe Prelude.Natural)
+cdmaObj_registrationZone = Lens.lens (\CdmaObj' {registrationZone} -> registrationZone) (\s@CdmaObj' {} a -> s {registrationZone = a} :: CdmaObj)
+
+-- | CDMA system ID (SID).
+cdmaObj_systemId :: Lens.Lens' CdmaObj Prelude.Natural
+cdmaObj_systemId = Lens.lens (\CdmaObj' {systemId} -> systemId) (\s@CdmaObj' {} a -> s {systemId = a} :: CdmaObj)
+
+-- | CDMA network ID (NID).
+cdmaObj_networkId :: Lens.Lens' CdmaObj Prelude.Natural
+cdmaObj_networkId = Lens.lens (\CdmaObj' {networkId} -> networkId) (\s@CdmaObj' {} a -> s {networkId = a} :: CdmaObj)
+
+-- | CDMA base station ID (BSID).
+cdmaObj_baseStationId :: Lens.Lens' CdmaObj Prelude.Natural
+cdmaObj_baseStationId = Lens.lens (\CdmaObj' {baseStationId} -> baseStationId) (\s@CdmaObj' {} a -> s {baseStationId = a} :: CdmaObj)
+
+instance Prelude.Hashable CdmaObj where
+  hashWithSalt _salt CdmaObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` baseLat
+      `Prelude.hashWithSalt` baseLng
+      `Prelude.hashWithSalt` cdmaLocalId
+      `Prelude.hashWithSalt` cdmaNmr
+      `Prelude.hashWithSalt` pilotPower
+      `Prelude.hashWithSalt` registrationZone
+      `Prelude.hashWithSalt` systemId
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` baseStationId
+
+instance Prelude.NFData CdmaObj where
+  rnf CdmaObj' {..} =
+    Prelude.rnf baseLat
+      `Prelude.seq` Prelude.rnf baseLng
+      `Prelude.seq` Prelude.rnf cdmaLocalId
+      `Prelude.seq` Prelude.rnf cdmaNmr
+      `Prelude.seq` Prelude.rnf pilotPower
+      `Prelude.seq` Prelude.rnf registrationZone
+      `Prelude.seq` Prelude.rnf systemId
+      `Prelude.seq` Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf baseStationId
+
+instance Data.ToJSON CdmaObj where
+  toJSON CdmaObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BaseLat" Data..=) Prelude.<$> baseLat,
+            ("BaseLng" Data..=) Prelude.<$> baseLng,
+            ("CdmaLocalId" Data..=) Prelude.<$> cdmaLocalId,
+            ("CdmaNmr" Data..=) Prelude.<$> cdmaNmr,
+            ("PilotPower" Data..=) Prelude.<$> pilotPower,
+            ("RegistrationZone" Data..=)
+              Prelude.<$> registrationZone,
+            Prelude.Just ("SystemId" Data..= systemId),
+            Prelude.Just ("NetworkId" Data..= networkId),
+            Prelude.Just
+              ("BaseStationId" Data..= baseStationId)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/CellTowers.hs b/gen/Amazonka/IoTWireless/Types/CellTowers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/CellTowers.hs
@@ -0,0 +1,124 @@
+{-# 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.IoTWireless.Types.CellTowers
+-- 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.IoTWireless.Types.CellTowers where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.CdmaObj
+import Amazonka.IoTWireless.Types.GsmObj
+import Amazonka.IoTWireless.Types.LteObj
+import Amazonka.IoTWireless.Types.TdscdmaObj
+import Amazonka.IoTWireless.Types.WcdmaObj
+import qualified Amazonka.Prelude as Prelude
+
+-- | The cell towers that were used to perform the measurements.
+--
+-- /See:/ 'newCellTowers' smart constructor.
+data CellTowers = CellTowers'
+  { -- | CDMA object information.
+    cdma :: Prelude.Maybe (Prelude.NonEmpty CdmaObj),
+    -- | GSM object information.
+    gsm :: Prelude.Maybe (Prelude.NonEmpty GsmObj),
+    -- | LTE object information.
+    lte :: Prelude.Maybe (Prelude.NonEmpty LteObj),
+    -- | TD-SCDMA object information.
+    tdscdma :: Prelude.Maybe (Prelude.NonEmpty TdscdmaObj),
+    -- | WCDMA object information.
+    wcdma :: Prelude.Maybe (Prelude.NonEmpty WcdmaObj)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CellTowers' 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:
+--
+-- 'cdma', 'cellTowers_cdma' - CDMA object information.
+--
+-- 'gsm', 'cellTowers_gsm' - GSM object information.
+--
+-- 'lte', 'cellTowers_lte' - LTE object information.
+--
+-- 'tdscdma', 'cellTowers_tdscdma' - TD-SCDMA object information.
+--
+-- 'wcdma', 'cellTowers_wcdma' - WCDMA object information.
+newCellTowers ::
+  CellTowers
+newCellTowers =
+  CellTowers'
+    { cdma = Prelude.Nothing,
+      gsm = Prelude.Nothing,
+      lte = Prelude.Nothing,
+      tdscdma = Prelude.Nothing,
+      wcdma = Prelude.Nothing
+    }
+
+-- | CDMA object information.
+cellTowers_cdma :: Lens.Lens' CellTowers (Prelude.Maybe (Prelude.NonEmpty CdmaObj))
+cellTowers_cdma = Lens.lens (\CellTowers' {cdma} -> cdma) (\s@CellTowers' {} a -> s {cdma = a} :: CellTowers) Prelude.. Lens.mapping Lens.coerced
+
+-- | GSM object information.
+cellTowers_gsm :: Lens.Lens' CellTowers (Prelude.Maybe (Prelude.NonEmpty GsmObj))
+cellTowers_gsm = Lens.lens (\CellTowers' {gsm} -> gsm) (\s@CellTowers' {} a -> s {gsm = a} :: CellTowers) Prelude.. Lens.mapping Lens.coerced
+
+-- | LTE object information.
+cellTowers_lte :: Lens.Lens' CellTowers (Prelude.Maybe (Prelude.NonEmpty LteObj))
+cellTowers_lte = Lens.lens (\CellTowers' {lte} -> lte) (\s@CellTowers' {} a -> s {lte = a} :: CellTowers) Prelude.. Lens.mapping Lens.coerced
+
+-- | TD-SCDMA object information.
+cellTowers_tdscdma :: Lens.Lens' CellTowers (Prelude.Maybe (Prelude.NonEmpty TdscdmaObj))
+cellTowers_tdscdma = Lens.lens (\CellTowers' {tdscdma} -> tdscdma) (\s@CellTowers' {} a -> s {tdscdma = a} :: CellTowers) Prelude.. Lens.mapping Lens.coerced
+
+-- | WCDMA object information.
+cellTowers_wcdma :: Lens.Lens' CellTowers (Prelude.Maybe (Prelude.NonEmpty WcdmaObj))
+cellTowers_wcdma = Lens.lens (\CellTowers' {wcdma} -> wcdma) (\s@CellTowers' {} a -> s {wcdma = a} :: CellTowers) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable CellTowers where
+  hashWithSalt _salt CellTowers' {..} =
+    _salt
+      `Prelude.hashWithSalt` cdma
+      `Prelude.hashWithSalt` gsm
+      `Prelude.hashWithSalt` lte
+      `Prelude.hashWithSalt` tdscdma
+      `Prelude.hashWithSalt` wcdma
+
+instance Prelude.NFData CellTowers where
+  rnf CellTowers' {..} =
+    Prelude.rnf cdma
+      `Prelude.seq` Prelude.rnf gsm
+      `Prelude.seq` Prelude.rnf lte
+      `Prelude.seq` Prelude.rnf tdscdma
+      `Prelude.seq` Prelude.rnf wcdma
+
+instance Data.ToJSON CellTowers where
+  toJSON CellTowers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Cdma" Data..=) Prelude.<$> cdma,
+            ("Gsm" Data..=) Prelude.<$> gsm,
+            ("Lte" Data..=) Prelude.<$> lte,
+            ("Tdscdma" Data..=) Prelude.<$> tdscdma,
+            ("Wcdma" Data..=) Prelude.<$> wcdma
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/CertificateList.hs b/gen/Amazonka/IoTWireless/Types/CertificateList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/CertificateList.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.IoTWireless.Types.CertificateList
+-- 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.IoTWireless.Types.CertificateList where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.SigningAlg
+import qualified Amazonka.Prelude as Prelude
+
+-- | List of sidewalk certificates.
+--
+-- /See:/ 'newCertificateList' smart constructor.
+data CertificateList = CertificateList'
+  { -- | The certificate chain algorithm provided by sidewalk.
+    signingAlg :: SigningAlg,
+    -- | The value of the chosen sidewalk certificate.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CertificateList' 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:
+--
+-- 'signingAlg', 'certificateList_signingAlg' - The certificate chain algorithm provided by sidewalk.
+--
+-- 'value', 'certificateList_value' - The value of the chosen sidewalk certificate.
+newCertificateList ::
+  -- | 'signingAlg'
+  SigningAlg ->
+  -- | 'value'
+  Prelude.Text ->
+  CertificateList
+newCertificateList pSigningAlg_ pValue_ =
+  CertificateList'
+    { signingAlg = pSigningAlg_,
+      value = pValue_
+    }
+
+-- | The certificate chain algorithm provided by sidewalk.
+certificateList_signingAlg :: Lens.Lens' CertificateList SigningAlg
+certificateList_signingAlg = Lens.lens (\CertificateList' {signingAlg} -> signingAlg) (\s@CertificateList' {} a -> s {signingAlg = a} :: CertificateList)
+
+-- | The value of the chosen sidewalk certificate.
+certificateList_value :: Lens.Lens' CertificateList Prelude.Text
+certificateList_value = Lens.lens (\CertificateList' {value} -> value) (\s@CertificateList' {} a -> s {value = a} :: CertificateList)
+
+instance Data.FromJSON CertificateList where
+  parseJSON =
+    Data.withObject
+      "CertificateList"
+      ( \x ->
+          CertificateList'
+            Prelude.<$> (x Data..: "SigningAlg")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable CertificateList where
+  hashWithSalt _salt CertificateList' {..} =
+    _salt
+      `Prelude.hashWithSalt` signingAlg
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData CertificateList where
+  rnf CertificateList' {..} =
+    Prelude.rnf signingAlg
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/IoTWireless/Types/ConnectionStatus.hs b/gen/Amazonka/IoTWireless/Types/ConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/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.IoTWireless.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.IoTWireless.Types.ConnectionStatus
+  ( ConnectionStatus
+      ( ..,
+        ConnectionStatus_Connected,
+        ConnectionStatus_Disconnected
+      ),
+  )
+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_Connected :: ConnectionStatus
+pattern ConnectionStatus_Connected = ConnectionStatus' "Connected"
+
+pattern ConnectionStatus_Disconnected :: ConnectionStatus
+pattern ConnectionStatus_Disconnected = ConnectionStatus' "Disconnected"
+
+{-# COMPLETE
+  ConnectionStatus_Connected,
+  ConnectionStatus_Disconnected,
+  ConnectionStatus'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/ConnectionStatusEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/ConnectionStatusEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ConnectionStatusEventConfiguration.hs
@@ -0,0 +1,119 @@
+{-# 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.IoTWireless.Types.ConnectionStatusEventConfiguration
+-- 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.IoTWireless.Types.ConnectionStatusEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import Amazonka.IoTWireless.Types.LoRaWANConnectionStatusEventNotificationConfigurations
+import qualified Amazonka.Prelude as Prelude
+
+-- | Connection status event configuration object for enabling or disabling
+-- topic.
+--
+-- /See:/ 'newConnectionStatusEventConfiguration' smart constructor.
+data ConnectionStatusEventConfiguration = ConnectionStatusEventConfiguration'
+  { -- | Connection status event configuration object for enabling or disabling
+    -- LoRaWAN related event topics.
+    loRaWAN :: Prelude.Maybe LoRaWANConnectionStatusEventNotificationConfigurations,
+    -- | Denotes whether the wireless gateway ID connection status event topic is
+    -- enabled or disabled.
+    wirelessGatewayIdEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionStatusEventConfiguration' 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:
+--
+-- 'loRaWAN', 'connectionStatusEventConfiguration_loRaWAN' - Connection status event configuration object for enabling or disabling
+-- LoRaWAN related event topics.
+--
+-- 'wirelessGatewayIdEventTopic', 'connectionStatusEventConfiguration_wirelessGatewayIdEventTopic' - Denotes whether the wireless gateway ID connection status event topic is
+-- enabled or disabled.
+newConnectionStatusEventConfiguration ::
+  ConnectionStatusEventConfiguration
+newConnectionStatusEventConfiguration =
+  ConnectionStatusEventConfiguration'
+    { loRaWAN =
+        Prelude.Nothing,
+      wirelessGatewayIdEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Connection status event configuration object for enabling or disabling
+-- LoRaWAN related event topics.
+connectionStatusEventConfiguration_loRaWAN :: Lens.Lens' ConnectionStatusEventConfiguration (Prelude.Maybe LoRaWANConnectionStatusEventNotificationConfigurations)
+connectionStatusEventConfiguration_loRaWAN = Lens.lens (\ConnectionStatusEventConfiguration' {loRaWAN} -> loRaWAN) (\s@ConnectionStatusEventConfiguration' {} a -> s {loRaWAN = a} :: ConnectionStatusEventConfiguration)
+
+-- | Denotes whether the wireless gateway ID connection status event topic is
+-- enabled or disabled.
+connectionStatusEventConfiguration_wirelessGatewayIdEventTopic :: Lens.Lens' ConnectionStatusEventConfiguration (Prelude.Maybe EventNotificationTopicStatus)
+connectionStatusEventConfiguration_wirelessGatewayIdEventTopic = Lens.lens (\ConnectionStatusEventConfiguration' {wirelessGatewayIdEventTopic} -> wirelessGatewayIdEventTopic) (\s@ConnectionStatusEventConfiguration' {} a -> s {wirelessGatewayIdEventTopic = a} :: ConnectionStatusEventConfiguration)
+
+instance
+  Data.FromJSON
+    ConnectionStatusEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ConnectionStatusEventConfiguration"
+      ( \x ->
+          ConnectionStatusEventConfiguration'
+            Prelude.<$> (x Data..:? "LoRaWAN")
+            Prelude.<*> (x Data..:? "WirelessGatewayIdEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    ConnectionStatusEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    ConnectionStatusEventConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` loRaWAN
+        `Prelude.hashWithSalt` wirelessGatewayIdEventTopic
+
+instance
+  Prelude.NFData
+    ConnectionStatusEventConfiguration
+  where
+  rnf ConnectionStatusEventConfiguration' {..} =
+    Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf wirelessGatewayIdEventTopic
+
+instance
+  Data.ToJSON
+    ConnectionStatusEventConfiguration
+  where
+  toJSON ConnectionStatusEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("WirelessGatewayIdEventTopic" Data..=)
+              Prelude.<$> wirelessGatewayIdEventTopic
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/ConnectionStatusResourceTypeEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/ConnectionStatusResourceTypeEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ConnectionStatusResourceTypeEventConfiguration.hs
@@ -0,0 +1,100 @@
+{-# 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.IoTWireless.Types.ConnectionStatusResourceTypeEventConfiguration
+-- 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.IoTWireless.Types.ConnectionStatusResourceTypeEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANConnectionStatusResourceTypeEventConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Connection status resource type event configuration object for enabling
+-- or disabling topic.
+--
+-- /See:/ 'newConnectionStatusResourceTypeEventConfiguration' smart constructor.
+data ConnectionStatusResourceTypeEventConfiguration = ConnectionStatusResourceTypeEventConfiguration'
+  { -- | Connection status resource type event configuration object for enabling
+    -- or disabling LoRaWAN related event topics.
+    loRaWAN :: Prelude.Maybe LoRaWANConnectionStatusResourceTypeEventConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionStatusResourceTypeEventConfiguration' 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:
+--
+-- 'loRaWAN', 'connectionStatusResourceTypeEventConfiguration_loRaWAN' - Connection status resource type event configuration object for enabling
+-- or disabling LoRaWAN related event topics.
+newConnectionStatusResourceTypeEventConfiguration ::
+  ConnectionStatusResourceTypeEventConfiguration
+newConnectionStatusResourceTypeEventConfiguration =
+  ConnectionStatusResourceTypeEventConfiguration'
+    { loRaWAN =
+        Prelude.Nothing
+    }
+
+-- | Connection status resource type event configuration object for enabling
+-- or disabling LoRaWAN related event topics.
+connectionStatusResourceTypeEventConfiguration_loRaWAN :: Lens.Lens' ConnectionStatusResourceTypeEventConfiguration (Prelude.Maybe LoRaWANConnectionStatusResourceTypeEventConfiguration)
+connectionStatusResourceTypeEventConfiguration_loRaWAN = Lens.lens (\ConnectionStatusResourceTypeEventConfiguration' {loRaWAN} -> loRaWAN) (\s@ConnectionStatusResourceTypeEventConfiguration' {} a -> s {loRaWAN = a} :: ConnectionStatusResourceTypeEventConfiguration)
+
+instance
+  Data.FromJSON
+    ConnectionStatusResourceTypeEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ConnectionStatusResourceTypeEventConfiguration"
+      ( \x ->
+          ConnectionStatusResourceTypeEventConfiguration'
+            Prelude.<$> (x Data..:? "LoRaWAN")
+      )
+
+instance
+  Prelude.Hashable
+    ConnectionStatusResourceTypeEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    ConnectionStatusResourceTypeEventConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` loRaWAN
+
+instance
+  Prelude.NFData
+    ConnectionStatusResourceTypeEventConfiguration
+  where
+  rnf
+    ConnectionStatusResourceTypeEventConfiguration' {..} =
+      Prelude.rnf loRaWAN
+
+instance
+  Data.ToJSON
+    ConnectionStatusResourceTypeEventConfiguration
+  where
+  toJSON
+    ConnectionStatusResourceTypeEventConfiguration' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [("LoRaWAN" Data..=) Prelude.<$> loRaWAN]
+        )
diff --git a/gen/Amazonka/IoTWireless/Types/Destinations.hs b/gen/Amazonka/IoTWireless/Types/Destinations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/Destinations.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.IoTWireless.Types.Destinations
+-- 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.IoTWireless.Types.Destinations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.ExpressionType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a destination.
+--
+-- /See:/ 'newDestinations' smart constructor.
+data Destinations = Destinations'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The rule name or topic rule to send messages to.
+    expression :: Prelude.Maybe Prelude.Text,
+    -- | The type of value in @Expression@.
+    expressionType :: Prelude.Maybe ExpressionType,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IAM Role that authorizes the destination.
+    roleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Destinations' 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', 'destinations_arn' - The Amazon Resource Name of the resource.
+--
+-- 'description', 'destinations_description' - The description of the resource.
+--
+-- 'expression', 'destinations_expression' - The rule name or topic rule to send messages to.
+--
+-- 'expressionType', 'destinations_expressionType' - The type of value in @Expression@.
+--
+-- 'name', 'destinations_name' - The name of the resource.
+--
+-- 'roleArn', 'destinations_roleArn' - The ARN of the IAM Role that authorizes the destination.
+newDestinations ::
+  Destinations
+newDestinations =
+  Destinations'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      expression = Prelude.Nothing,
+      expressionType = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleArn = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name of the resource.
+destinations_arn :: Lens.Lens' Destinations (Prelude.Maybe Prelude.Text)
+destinations_arn = Lens.lens (\Destinations' {arn} -> arn) (\s@Destinations' {} a -> s {arn = a} :: Destinations)
+
+-- | The description of the resource.
+destinations_description :: Lens.Lens' Destinations (Prelude.Maybe Prelude.Text)
+destinations_description = Lens.lens (\Destinations' {description} -> description) (\s@Destinations' {} a -> s {description = a} :: Destinations)
+
+-- | The rule name or topic rule to send messages to.
+destinations_expression :: Lens.Lens' Destinations (Prelude.Maybe Prelude.Text)
+destinations_expression = Lens.lens (\Destinations' {expression} -> expression) (\s@Destinations' {} a -> s {expression = a} :: Destinations)
+
+-- | The type of value in @Expression@.
+destinations_expressionType :: Lens.Lens' Destinations (Prelude.Maybe ExpressionType)
+destinations_expressionType = Lens.lens (\Destinations' {expressionType} -> expressionType) (\s@Destinations' {} a -> s {expressionType = a} :: Destinations)
+
+-- | The name of the resource.
+destinations_name :: Lens.Lens' Destinations (Prelude.Maybe Prelude.Text)
+destinations_name = Lens.lens (\Destinations' {name} -> name) (\s@Destinations' {} a -> s {name = a} :: Destinations)
+
+-- | The ARN of the IAM Role that authorizes the destination.
+destinations_roleArn :: Lens.Lens' Destinations (Prelude.Maybe Prelude.Text)
+destinations_roleArn = Lens.lens (\Destinations' {roleArn} -> roleArn) (\s@Destinations' {} a -> s {roleArn = a} :: Destinations)
+
+instance Data.FromJSON Destinations where
+  parseJSON =
+    Data.withObject
+      "Destinations"
+      ( \x ->
+          Destinations'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Expression")
+            Prelude.<*> (x Data..:? "ExpressionType")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "RoleArn")
+      )
+
+instance Prelude.Hashable Destinations where
+  hashWithSalt _salt Destinations' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` expressionType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData Destinations where
+  rnf Destinations' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf expressionType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleArn
diff --git a/gen/Amazonka/IoTWireless/Types/DeviceProfile.hs b/gen/Amazonka/IoTWireless/Types/DeviceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/DeviceProfile.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.IoTWireless.Types.DeviceProfile
+-- 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.IoTWireless.Types.DeviceProfile 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
+
+-- | Describes a device profile.
+--
+-- /See:/ 'newDeviceProfile' smart constructor.
+data DeviceProfile = DeviceProfile'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the device profile.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceProfile' 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', 'deviceProfile_arn' - The Amazon Resource Name of the resource.
+--
+-- 'id', 'deviceProfile_id' - The ID of the device profile.
+--
+-- 'name', 'deviceProfile_name' - The name of the resource.
+newDeviceProfile ::
+  DeviceProfile
+newDeviceProfile =
+  DeviceProfile'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name of the resource.
+deviceProfile_arn :: Lens.Lens' DeviceProfile (Prelude.Maybe Prelude.Text)
+deviceProfile_arn = Lens.lens (\DeviceProfile' {arn} -> arn) (\s@DeviceProfile' {} a -> s {arn = a} :: DeviceProfile)
+
+-- | The ID of the device profile.
+deviceProfile_id :: Lens.Lens' DeviceProfile (Prelude.Maybe Prelude.Text)
+deviceProfile_id = Lens.lens (\DeviceProfile' {id} -> id) (\s@DeviceProfile' {} a -> s {id = a} :: DeviceProfile)
+
+-- | The name of the resource.
+deviceProfile_name :: Lens.Lens' DeviceProfile (Prelude.Maybe Prelude.Text)
+deviceProfile_name = Lens.lens (\DeviceProfile' {name} -> name) (\s@DeviceProfile' {} a -> s {name = a} :: DeviceProfile)
+
+instance Data.FromJSON DeviceProfile where
+  parseJSON =
+    Data.withObject
+      "DeviceProfile"
+      ( \x ->
+          DeviceProfile'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable DeviceProfile where
+  hashWithSalt _salt DeviceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeviceProfile where
+  rnf DeviceProfile' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTWireless/Types/DeviceRegistrationStateEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/DeviceRegistrationStateEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/DeviceRegistrationStateEventConfiguration.hs
@@ -0,0 +1,119 @@
+{-# 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.IoTWireless.Types.DeviceRegistrationStateEventConfiguration
+-- 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.IoTWireless.Types.DeviceRegistrationStateEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import Amazonka.IoTWireless.Types.SidewalkEventNotificationConfigurations
+import qualified Amazonka.Prelude as Prelude
+
+-- | Device registration state event configuration object for enabling and
+-- disabling relevant topics.
+--
+-- /See:/ 'newDeviceRegistrationStateEventConfiguration' smart constructor.
+data DeviceRegistrationStateEventConfiguration = DeviceRegistrationStateEventConfiguration'
+  { -- | Device registration state event configuration object for enabling or
+    -- disabling Sidewalk related event topics.
+    sidewalk :: Prelude.Maybe SidewalkEventNotificationConfigurations,
+    -- | Denotes whether the wireless device ID device registration state event
+    -- topic is enabled or disabled.
+    wirelessDeviceIdEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceRegistrationStateEventConfiguration' 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:
+--
+-- 'sidewalk', 'deviceRegistrationStateEventConfiguration_sidewalk' - Device registration state event configuration object for enabling or
+-- disabling Sidewalk related event topics.
+--
+-- 'wirelessDeviceIdEventTopic', 'deviceRegistrationStateEventConfiguration_wirelessDeviceIdEventTopic' - Denotes whether the wireless device ID device registration state event
+-- topic is enabled or disabled.
+newDeviceRegistrationStateEventConfiguration ::
+  DeviceRegistrationStateEventConfiguration
+newDeviceRegistrationStateEventConfiguration =
+  DeviceRegistrationStateEventConfiguration'
+    { sidewalk =
+        Prelude.Nothing,
+      wirelessDeviceIdEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Device registration state event configuration object for enabling or
+-- disabling Sidewalk related event topics.
+deviceRegistrationStateEventConfiguration_sidewalk :: Lens.Lens' DeviceRegistrationStateEventConfiguration (Prelude.Maybe SidewalkEventNotificationConfigurations)
+deviceRegistrationStateEventConfiguration_sidewalk = Lens.lens (\DeviceRegistrationStateEventConfiguration' {sidewalk} -> sidewalk) (\s@DeviceRegistrationStateEventConfiguration' {} a -> s {sidewalk = a} :: DeviceRegistrationStateEventConfiguration)
+
+-- | Denotes whether the wireless device ID device registration state event
+-- topic is enabled or disabled.
+deviceRegistrationStateEventConfiguration_wirelessDeviceIdEventTopic :: Lens.Lens' DeviceRegistrationStateEventConfiguration (Prelude.Maybe EventNotificationTopicStatus)
+deviceRegistrationStateEventConfiguration_wirelessDeviceIdEventTopic = Lens.lens (\DeviceRegistrationStateEventConfiguration' {wirelessDeviceIdEventTopic} -> wirelessDeviceIdEventTopic) (\s@DeviceRegistrationStateEventConfiguration' {} a -> s {wirelessDeviceIdEventTopic = a} :: DeviceRegistrationStateEventConfiguration)
+
+instance
+  Data.FromJSON
+    DeviceRegistrationStateEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "DeviceRegistrationStateEventConfiguration"
+      ( \x ->
+          DeviceRegistrationStateEventConfiguration'
+            Prelude.<$> (x Data..:? "Sidewalk")
+            Prelude.<*> (x Data..:? "WirelessDeviceIdEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    DeviceRegistrationStateEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeviceRegistrationStateEventConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` sidewalk
+        `Prelude.hashWithSalt` wirelessDeviceIdEventTopic
+
+instance
+  Prelude.NFData
+    DeviceRegistrationStateEventConfiguration
+  where
+  rnf DeviceRegistrationStateEventConfiguration' {..} =
+    Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf wirelessDeviceIdEventTopic
+
+instance
+  Data.ToJSON
+    DeviceRegistrationStateEventConfiguration
+  where
+  toJSON DeviceRegistrationStateEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Sidewalk" Data..=) Prelude.<$> sidewalk,
+            ("WirelessDeviceIdEventTopic" Data..=)
+              Prelude.<$> wirelessDeviceIdEventTopic
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/DeviceRegistrationStateResourceTypeEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/DeviceRegistrationStateResourceTypeEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/DeviceRegistrationStateResourceTypeEventConfiguration.hs
@@ -0,0 +1,100 @@
+{-# 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.IoTWireless.Types.DeviceRegistrationStateResourceTypeEventConfiguration
+-- 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.IoTWireless.Types.DeviceRegistrationStateResourceTypeEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.SidewalkResourceTypeEventConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Device registration state resource type event configuration object for
+-- enabling or disabling topic.
+--
+-- /See:/ 'newDeviceRegistrationStateResourceTypeEventConfiguration' smart constructor.
+data DeviceRegistrationStateResourceTypeEventConfiguration = DeviceRegistrationStateResourceTypeEventConfiguration'
+  { -- | Device registration resource type state event configuration object for
+    -- enabling or disabling Sidewalk related event topics.
+    sidewalk :: Prelude.Maybe SidewalkResourceTypeEventConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceRegistrationStateResourceTypeEventConfiguration' 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:
+--
+-- 'sidewalk', 'deviceRegistrationStateResourceTypeEventConfiguration_sidewalk' - Device registration resource type state event configuration object for
+-- enabling or disabling Sidewalk related event topics.
+newDeviceRegistrationStateResourceTypeEventConfiguration ::
+  DeviceRegistrationStateResourceTypeEventConfiguration
+newDeviceRegistrationStateResourceTypeEventConfiguration =
+  DeviceRegistrationStateResourceTypeEventConfiguration'
+    { sidewalk =
+        Prelude.Nothing
+    }
+
+-- | Device registration resource type state event configuration object for
+-- enabling or disabling Sidewalk related event topics.
+deviceRegistrationStateResourceTypeEventConfiguration_sidewalk :: Lens.Lens' DeviceRegistrationStateResourceTypeEventConfiguration (Prelude.Maybe SidewalkResourceTypeEventConfiguration)
+deviceRegistrationStateResourceTypeEventConfiguration_sidewalk = Lens.lens (\DeviceRegistrationStateResourceTypeEventConfiguration' {sidewalk} -> sidewalk) (\s@DeviceRegistrationStateResourceTypeEventConfiguration' {} a -> s {sidewalk = a} :: DeviceRegistrationStateResourceTypeEventConfiguration)
+
+instance
+  Data.FromJSON
+    DeviceRegistrationStateResourceTypeEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "DeviceRegistrationStateResourceTypeEventConfiguration"
+      ( \x ->
+          DeviceRegistrationStateResourceTypeEventConfiguration'
+            Prelude.<$> (x Data..:? "Sidewalk")
+      )
+
+instance
+  Prelude.Hashable
+    DeviceRegistrationStateResourceTypeEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeviceRegistrationStateResourceTypeEventConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` sidewalk
+
+instance
+  Prelude.NFData
+    DeviceRegistrationStateResourceTypeEventConfiguration
+  where
+  rnf
+    DeviceRegistrationStateResourceTypeEventConfiguration' {..} =
+      Prelude.rnf sidewalk
+
+instance
+  Data.ToJSON
+    DeviceRegistrationStateResourceTypeEventConfiguration
+  where
+  toJSON
+    DeviceRegistrationStateResourceTypeEventConfiguration' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [("Sidewalk" Data..=) Prelude.<$> sidewalk]
+        )
diff --git a/gen/Amazonka/IoTWireless/Types/DeviceState.hs b/gen/Amazonka/IoTWireless/Types/DeviceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/DeviceState.hs
@@ -0,0 +1,82 @@
+{-# 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.IoTWireless.Types.DeviceState
+-- 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.IoTWireless.Types.DeviceState
+  ( DeviceState
+      ( ..,
+        DeviceState_Provisioned,
+        DeviceState_RegisteredNotSeen,
+        DeviceState_RegisteredReachable,
+        DeviceState_RegisteredUnreachable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Device state defines the device status of sidewalk device.
+newtype DeviceState = DeviceState'
+  { fromDeviceState ::
+      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 DeviceState_Provisioned :: DeviceState
+pattern DeviceState_Provisioned = DeviceState' "Provisioned"
+
+pattern DeviceState_RegisteredNotSeen :: DeviceState
+pattern DeviceState_RegisteredNotSeen = DeviceState' "RegisteredNotSeen"
+
+pattern DeviceState_RegisteredReachable :: DeviceState
+pattern DeviceState_RegisteredReachable = DeviceState' "RegisteredReachable"
+
+pattern DeviceState_RegisteredUnreachable :: DeviceState
+pattern DeviceState_RegisteredUnreachable = DeviceState' "RegisteredUnreachable"
+
+{-# COMPLETE
+  DeviceState_Provisioned,
+  DeviceState_RegisteredNotSeen,
+  DeviceState_RegisteredReachable,
+  DeviceState_RegisteredUnreachable,
+  DeviceState'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/DlClass.hs b/gen/Amazonka/IoTWireless/Types/DlClass.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/DlClass.hs
@@ -0,0 +1,69 @@
+{-# 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.IoTWireless.Types.DlClass
+-- 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.IoTWireless.Types.DlClass
+  ( DlClass
+      ( ..,
+        DlClass_ClassB,
+        DlClass_ClassC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | DlClass for LoRaWAM, valid values are ClassB and ClassC.
+newtype DlClass = DlClass' {fromDlClass :: 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 DlClass_ClassB :: DlClass
+pattern DlClass_ClassB = DlClass' "ClassB"
+
+pattern DlClass_ClassC :: DlClass
+pattern DlClass_ClassC = DlClass' "ClassC"
+
+{-# COMPLETE
+  DlClass_ClassB,
+  DlClass_ClassC,
+  DlClass'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/DownlinkMode.hs b/gen/Amazonka/IoTWireless/Types/DownlinkMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/DownlinkMode.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.IoTWireless.Types.DownlinkMode
+-- 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.IoTWireless.Types.DownlinkMode
+  ( DownlinkMode
+      ( ..,
+        DownlinkMode_CONCURRENT,
+        DownlinkMode_SEQUENTIAL,
+        DownlinkMode_USING_UPLINK_GATEWAY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DownlinkMode = DownlinkMode'
+  { fromDownlinkMode ::
+      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 DownlinkMode_CONCURRENT :: DownlinkMode
+pattern DownlinkMode_CONCURRENT = DownlinkMode' "CONCURRENT"
+
+pattern DownlinkMode_SEQUENTIAL :: DownlinkMode
+pattern DownlinkMode_SEQUENTIAL = DownlinkMode' "SEQUENTIAL"
+
+pattern DownlinkMode_USING_UPLINK_GATEWAY :: DownlinkMode
+pattern DownlinkMode_USING_UPLINK_GATEWAY = DownlinkMode' "USING_UPLINK_GATEWAY"
+
+{-# COMPLETE
+  DownlinkMode_CONCURRENT,
+  DownlinkMode_SEQUENTIAL,
+  DownlinkMode_USING_UPLINK_GATEWAY,
+  DownlinkMode'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/DownlinkQueueMessage.hs b/gen/Amazonka/IoTWireless/Types/DownlinkQueueMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/DownlinkQueueMessage.hs
@@ -0,0 +1,114 @@
+{-# 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.IoTWireless.Types.DownlinkQueueMessage
+-- 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.IoTWireless.Types.DownlinkQueueMessage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANSendDataToDevice
+import qualified Amazonka.Prelude as Prelude
+
+-- | The message in the downlink queue.
+--
+-- /See:/ 'newDownlinkQueueMessage' smart constructor.
+data DownlinkQueueMessage = DownlinkQueueMessage'
+  { loRaWAN :: Prelude.Maybe LoRaWANSendDataToDevice,
+    -- | The message ID assigned by IoT Wireless to each downlink message, which
+    -- helps identify the message.
+    messageId :: Prelude.Maybe Prelude.Text,
+    -- | The time at which Iot Wireless received the downlink message.
+    receivedAt :: Prelude.Maybe Prelude.Text,
+    -- | The transmit mode to use for sending data to the wireless device. This
+    -- can be @0@ for UM (unacknowledge mode) or @1@ for AM (acknowledge mode).
+    transmitMode :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DownlinkQueueMessage' 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:
+--
+-- 'loRaWAN', 'downlinkQueueMessage_loRaWAN' - Undocumented member.
+--
+-- 'messageId', 'downlinkQueueMessage_messageId' - The message ID assigned by IoT Wireless to each downlink message, which
+-- helps identify the message.
+--
+-- 'receivedAt', 'downlinkQueueMessage_receivedAt' - The time at which Iot Wireless received the downlink message.
+--
+-- 'transmitMode', 'downlinkQueueMessage_transmitMode' - The transmit mode to use for sending data to the wireless device. This
+-- can be @0@ for UM (unacknowledge mode) or @1@ for AM (acknowledge mode).
+newDownlinkQueueMessage ::
+  DownlinkQueueMessage
+newDownlinkQueueMessage =
+  DownlinkQueueMessage'
+    { loRaWAN = Prelude.Nothing,
+      messageId = Prelude.Nothing,
+      receivedAt = Prelude.Nothing,
+      transmitMode = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+downlinkQueueMessage_loRaWAN :: Lens.Lens' DownlinkQueueMessage (Prelude.Maybe LoRaWANSendDataToDevice)
+downlinkQueueMessage_loRaWAN = Lens.lens (\DownlinkQueueMessage' {loRaWAN} -> loRaWAN) (\s@DownlinkQueueMessage' {} a -> s {loRaWAN = a} :: DownlinkQueueMessage)
+
+-- | The message ID assigned by IoT Wireless to each downlink message, which
+-- helps identify the message.
+downlinkQueueMessage_messageId :: Lens.Lens' DownlinkQueueMessage (Prelude.Maybe Prelude.Text)
+downlinkQueueMessage_messageId = Lens.lens (\DownlinkQueueMessage' {messageId} -> messageId) (\s@DownlinkQueueMessage' {} a -> s {messageId = a} :: DownlinkQueueMessage)
+
+-- | The time at which Iot Wireless received the downlink message.
+downlinkQueueMessage_receivedAt :: Lens.Lens' DownlinkQueueMessage (Prelude.Maybe Prelude.Text)
+downlinkQueueMessage_receivedAt = Lens.lens (\DownlinkQueueMessage' {receivedAt} -> receivedAt) (\s@DownlinkQueueMessage' {} a -> s {receivedAt = a} :: DownlinkQueueMessage)
+
+-- | The transmit mode to use for sending data to the wireless device. This
+-- can be @0@ for UM (unacknowledge mode) or @1@ for AM (acknowledge mode).
+downlinkQueueMessage_transmitMode :: Lens.Lens' DownlinkQueueMessage (Prelude.Maybe Prelude.Natural)
+downlinkQueueMessage_transmitMode = Lens.lens (\DownlinkQueueMessage' {transmitMode} -> transmitMode) (\s@DownlinkQueueMessage' {} a -> s {transmitMode = a} :: DownlinkQueueMessage)
+
+instance Data.FromJSON DownlinkQueueMessage where
+  parseJSON =
+    Data.withObject
+      "DownlinkQueueMessage"
+      ( \x ->
+          DownlinkQueueMessage'
+            Prelude.<$> (x Data..:? "LoRaWAN")
+            Prelude.<*> (x Data..:? "MessageId")
+            Prelude.<*> (x Data..:? "ReceivedAt")
+            Prelude.<*> (x Data..:? "TransmitMode")
+      )
+
+instance Prelude.Hashable DownlinkQueueMessage where
+  hashWithSalt _salt DownlinkQueueMessage' {..} =
+    _salt
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` messageId
+      `Prelude.hashWithSalt` receivedAt
+      `Prelude.hashWithSalt` transmitMode
+
+instance Prelude.NFData DownlinkQueueMessage where
+  rnf DownlinkQueueMessage' {..} =
+    Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf messageId
+      `Prelude.seq` Prelude.rnf receivedAt
+      `Prelude.seq` Prelude.rnf transmitMode
diff --git a/gen/Amazonka/IoTWireless/Types/Event.hs b/gen/Amazonka/IoTWireless/Types/Event.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/Event.hs
@@ -0,0 +1,84 @@
+{-# 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.IoTWireless.Types.Event
+-- 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.IoTWireless.Types.Event
+  ( Event
+      ( ..,
+        Event_Ack,
+        Event_Discovered,
+        Event_Lost,
+        Event_Nack,
+        Event_Passthrough
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sidewalk device status notification.
+newtype Event = Event' {fromEvent :: 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 Event_Ack :: Event
+pattern Event_Ack = Event' "ack"
+
+pattern Event_Discovered :: Event
+pattern Event_Discovered = Event' "discovered"
+
+pattern Event_Lost :: Event
+pattern Event_Lost = Event' "lost"
+
+pattern Event_Nack :: Event
+pattern Event_Nack = Event' "nack"
+
+pattern Event_Passthrough :: Event
+pattern Event_Passthrough = Event' "passthrough"
+
+{-# COMPLETE
+  Event_Ack,
+  Event_Discovered,
+  Event_Lost,
+  Event_Nack,
+  Event_Passthrough,
+  Event'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/EventConfigurationItem.hs b/gen/Amazonka/IoTWireless/Types/EventConfigurationItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/EventConfigurationItem.hs
@@ -0,0 +1,113 @@
+{-# 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.IoTWireless.Types.EventConfigurationItem
+-- 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.IoTWireless.Types.EventConfigurationItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationItemConfigurations
+import Amazonka.IoTWireless.Types.EventNotificationPartnerType
+import Amazonka.IoTWireless.Types.IdentifierType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Event configuration object for a single resource.
+--
+-- /See:/ 'newEventConfigurationItem' smart constructor.
+data EventConfigurationItem = EventConfigurationItem'
+  { events :: Prelude.Maybe EventNotificationItemConfigurations,
+    -- | Resource identifier opted in for event messaging.
+    identifier :: Prelude.Maybe Prelude.Text,
+    -- | Identifier type of the particular resource identifier for event
+    -- configuration.
+    identifierType :: Prelude.Maybe IdentifierType,
+    -- | Partner type of the resource if the identifier type is PartnerAccountId.
+    partnerType :: Prelude.Maybe EventNotificationPartnerType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventConfigurationItem' 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:
+--
+-- 'events', 'eventConfigurationItem_events' - Undocumented member.
+--
+-- 'identifier', 'eventConfigurationItem_identifier' - Resource identifier opted in for event messaging.
+--
+-- 'identifierType', 'eventConfigurationItem_identifierType' - Identifier type of the particular resource identifier for event
+-- configuration.
+--
+-- 'partnerType', 'eventConfigurationItem_partnerType' - Partner type of the resource if the identifier type is PartnerAccountId.
+newEventConfigurationItem ::
+  EventConfigurationItem
+newEventConfigurationItem =
+  EventConfigurationItem'
+    { events = Prelude.Nothing,
+      identifier = Prelude.Nothing,
+      identifierType = Prelude.Nothing,
+      partnerType = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+eventConfigurationItem_events :: Lens.Lens' EventConfigurationItem (Prelude.Maybe EventNotificationItemConfigurations)
+eventConfigurationItem_events = Lens.lens (\EventConfigurationItem' {events} -> events) (\s@EventConfigurationItem' {} a -> s {events = a} :: EventConfigurationItem)
+
+-- | Resource identifier opted in for event messaging.
+eventConfigurationItem_identifier :: Lens.Lens' EventConfigurationItem (Prelude.Maybe Prelude.Text)
+eventConfigurationItem_identifier = Lens.lens (\EventConfigurationItem' {identifier} -> identifier) (\s@EventConfigurationItem' {} a -> s {identifier = a} :: EventConfigurationItem)
+
+-- | Identifier type of the particular resource identifier for event
+-- configuration.
+eventConfigurationItem_identifierType :: Lens.Lens' EventConfigurationItem (Prelude.Maybe IdentifierType)
+eventConfigurationItem_identifierType = Lens.lens (\EventConfigurationItem' {identifierType} -> identifierType) (\s@EventConfigurationItem' {} a -> s {identifierType = a} :: EventConfigurationItem)
+
+-- | Partner type of the resource if the identifier type is PartnerAccountId.
+eventConfigurationItem_partnerType :: Lens.Lens' EventConfigurationItem (Prelude.Maybe EventNotificationPartnerType)
+eventConfigurationItem_partnerType = Lens.lens (\EventConfigurationItem' {partnerType} -> partnerType) (\s@EventConfigurationItem' {} a -> s {partnerType = a} :: EventConfigurationItem)
+
+instance Data.FromJSON EventConfigurationItem where
+  parseJSON =
+    Data.withObject
+      "EventConfigurationItem"
+      ( \x ->
+          EventConfigurationItem'
+            Prelude.<$> (x Data..:? "Events")
+            Prelude.<*> (x Data..:? "Identifier")
+            Prelude.<*> (x Data..:? "IdentifierType")
+            Prelude.<*> (x Data..:? "PartnerType")
+      )
+
+instance Prelude.Hashable EventConfigurationItem where
+  hashWithSalt _salt EventConfigurationItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` identifier
+      `Prelude.hashWithSalt` identifierType
+      `Prelude.hashWithSalt` partnerType
+
+instance Prelude.NFData EventConfigurationItem where
+  rnf EventConfigurationItem' {..} =
+    Prelude.rnf events
+      `Prelude.seq` Prelude.rnf identifier
+      `Prelude.seq` Prelude.rnf identifierType
+      `Prelude.seq` Prelude.rnf partnerType
diff --git a/gen/Amazonka/IoTWireless/Types/EventNotificationItemConfigurations.hs b/gen/Amazonka/IoTWireless/Types/EventNotificationItemConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/EventNotificationItemConfigurations.hs
@@ -0,0 +1,145 @@
+{-# 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.IoTWireless.Types.EventNotificationItemConfigurations
+-- 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.IoTWireless.Types.EventNotificationItemConfigurations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.ConnectionStatusEventConfiguration
+import Amazonka.IoTWireless.Types.DeviceRegistrationStateEventConfiguration
+import Amazonka.IoTWireless.Types.JoinEventConfiguration
+import Amazonka.IoTWireless.Types.MessageDeliveryStatusEventConfiguration
+import Amazonka.IoTWireless.Types.ProximityEventConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Object of all event configurations and the status of the event topics.
+--
+-- /See:/ 'newEventNotificationItemConfigurations' smart constructor.
+data EventNotificationItemConfigurations = EventNotificationItemConfigurations'
+  { -- | Connection status event configuration for an event configuration item.
+    connectionStatus :: Prelude.Maybe ConnectionStatusEventConfiguration,
+    -- | Device registration state event configuration for an event configuration
+    -- item.
+    deviceRegistrationState :: Prelude.Maybe DeviceRegistrationStateEventConfiguration,
+    -- | Join event configuration for an event configuration item.
+    join :: Prelude.Maybe JoinEventConfiguration,
+    -- | Message delivery status event configuration for an event configuration
+    -- item.
+    messageDeliveryStatus :: Prelude.Maybe MessageDeliveryStatusEventConfiguration,
+    -- | Proximity event configuration for an event configuration item.
+    proximity :: Prelude.Maybe ProximityEventConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventNotificationItemConfigurations' 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', 'eventNotificationItemConfigurations_connectionStatus' - Connection status event configuration for an event configuration item.
+--
+-- 'deviceRegistrationState', 'eventNotificationItemConfigurations_deviceRegistrationState' - Device registration state event configuration for an event configuration
+-- item.
+--
+-- 'join', 'eventNotificationItemConfigurations_join' - Join event configuration for an event configuration item.
+--
+-- 'messageDeliveryStatus', 'eventNotificationItemConfigurations_messageDeliveryStatus' - Message delivery status event configuration for an event configuration
+-- item.
+--
+-- 'proximity', 'eventNotificationItemConfigurations_proximity' - Proximity event configuration for an event configuration item.
+newEventNotificationItemConfigurations ::
+  EventNotificationItemConfigurations
+newEventNotificationItemConfigurations =
+  EventNotificationItemConfigurations'
+    { connectionStatus =
+        Prelude.Nothing,
+      deviceRegistrationState =
+        Prelude.Nothing,
+      join = Prelude.Nothing,
+      messageDeliveryStatus =
+        Prelude.Nothing,
+      proximity = Prelude.Nothing
+    }
+
+-- | Connection status event configuration for an event configuration item.
+eventNotificationItemConfigurations_connectionStatus :: Lens.Lens' EventNotificationItemConfigurations (Prelude.Maybe ConnectionStatusEventConfiguration)
+eventNotificationItemConfigurations_connectionStatus = Lens.lens (\EventNotificationItemConfigurations' {connectionStatus} -> connectionStatus) (\s@EventNotificationItemConfigurations' {} a -> s {connectionStatus = a} :: EventNotificationItemConfigurations)
+
+-- | Device registration state event configuration for an event configuration
+-- item.
+eventNotificationItemConfigurations_deviceRegistrationState :: Lens.Lens' EventNotificationItemConfigurations (Prelude.Maybe DeviceRegistrationStateEventConfiguration)
+eventNotificationItemConfigurations_deviceRegistrationState = Lens.lens (\EventNotificationItemConfigurations' {deviceRegistrationState} -> deviceRegistrationState) (\s@EventNotificationItemConfigurations' {} a -> s {deviceRegistrationState = a} :: EventNotificationItemConfigurations)
+
+-- | Join event configuration for an event configuration item.
+eventNotificationItemConfigurations_join :: Lens.Lens' EventNotificationItemConfigurations (Prelude.Maybe JoinEventConfiguration)
+eventNotificationItemConfigurations_join = Lens.lens (\EventNotificationItemConfigurations' {join} -> join) (\s@EventNotificationItemConfigurations' {} a -> s {join = a} :: EventNotificationItemConfigurations)
+
+-- | Message delivery status event configuration for an event configuration
+-- item.
+eventNotificationItemConfigurations_messageDeliveryStatus :: Lens.Lens' EventNotificationItemConfigurations (Prelude.Maybe MessageDeliveryStatusEventConfiguration)
+eventNotificationItemConfigurations_messageDeliveryStatus = Lens.lens (\EventNotificationItemConfigurations' {messageDeliveryStatus} -> messageDeliveryStatus) (\s@EventNotificationItemConfigurations' {} a -> s {messageDeliveryStatus = a} :: EventNotificationItemConfigurations)
+
+-- | Proximity event configuration for an event configuration item.
+eventNotificationItemConfigurations_proximity :: Lens.Lens' EventNotificationItemConfigurations (Prelude.Maybe ProximityEventConfiguration)
+eventNotificationItemConfigurations_proximity = Lens.lens (\EventNotificationItemConfigurations' {proximity} -> proximity) (\s@EventNotificationItemConfigurations' {} a -> s {proximity = a} :: EventNotificationItemConfigurations)
+
+instance
+  Data.FromJSON
+    EventNotificationItemConfigurations
+  where
+  parseJSON =
+    Data.withObject
+      "EventNotificationItemConfigurations"
+      ( \x ->
+          EventNotificationItemConfigurations'
+            Prelude.<$> (x Data..:? "ConnectionStatus")
+            Prelude.<*> (x Data..:? "DeviceRegistrationState")
+            Prelude.<*> (x Data..:? "Join")
+            Prelude.<*> (x Data..:? "MessageDeliveryStatus")
+            Prelude.<*> (x Data..:? "Proximity")
+      )
+
+instance
+  Prelude.Hashable
+    EventNotificationItemConfigurations
+  where
+  hashWithSalt
+    _salt
+    EventNotificationItemConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` connectionStatus
+        `Prelude.hashWithSalt` deviceRegistrationState
+        `Prelude.hashWithSalt` join
+        `Prelude.hashWithSalt` messageDeliveryStatus
+        `Prelude.hashWithSalt` proximity
+
+instance
+  Prelude.NFData
+    EventNotificationItemConfigurations
+  where
+  rnf EventNotificationItemConfigurations' {..} =
+    Prelude.rnf connectionStatus
+      `Prelude.seq` Prelude.rnf deviceRegistrationState
+      `Prelude.seq` Prelude.rnf join
+      `Prelude.seq` Prelude.rnf messageDeliveryStatus
+      `Prelude.seq` Prelude.rnf proximity
diff --git a/gen/Amazonka/IoTWireless/Types/EventNotificationPartnerType.hs b/gen/Amazonka/IoTWireless/Types/EventNotificationPartnerType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/EventNotificationPartnerType.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.IoTWireless.Types.EventNotificationPartnerType
+-- 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.IoTWireless.Types.EventNotificationPartnerType
+  ( EventNotificationPartnerType
+      ( ..,
+        EventNotificationPartnerType_Sidewalk
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventNotificationPartnerType = EventNotificationPartnerType'
+  { fromEventNotificationPartnerType ::
+      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 EventNotificationPartnerType_Sidewalk :: EventNotificationPartnerType
+pattern EventNotificationPartnerType_Sidewalk = EventNotificationPartnerType' "Sidewalk"
+
+{-# COMPLETE
+  EventNotificationPartnerType_Sidewalk,
+  EventNotificationPartnerType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/EventNotificationResourceType.hs b/gen/Amazonka/IoTWireless/Types/EventNotificationResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/EventNotificationResourceType.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.IoTWireless.Types.EventNotificationResourceType
+-- 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.IoTWireless.Types.EventNotificationResourceType
+  ( EventNotificationResourceType
+      ( ..,
+        EventNotificationResourceType_SidewalkAccount,
+        EventNotificationResourceType_WirelessDevice,
+        EventNotificationResourceType_WirelessGateway
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventNotificationResourceType = EventNotificationResourceType'
+  { fromEventNotificationResourceType ::
+      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 EventNotificationResourceType_SidewalkAccount :: EventNotificationResourceType
+pattern EventNotificationResourceType_SidewalkAccount = EventNotificationResourceType' "SidewalkAccount"
+
+pattern EventNotificationResourceType_WirelessDevice :: EventNotificationResourceType
+pattern EventNotificationResourceType_WirelessDevice = EventNotificationResourceType' "WirelessDevice"
+
+pattern EventNotificationResourceType_WirelessGateway :: EventNotificationResourceType
+pattern EventNotificationResourceType_WirelessGateway = EventNotificationResourceType' "WirelessGateway"
+
+{-# COMPLETE
+  EventNotificationResourceType_SidewalkAccount,
+  EventNotificationResourceType_WirelessDevice,
+  EventNotificationResourceType_WirelessGateway,
+  EventNotificationResourceType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/EventNotificationTopicStatus.hs b/gen/Amazonka/IoTWireless/Types/EventNotificationTopicStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/EventNotificationTopicStatus.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.IoTWireless.Types.EventNotificationTopicStatus
+-- 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.IoTWireless.Types.EventNotificationTopicStatus
+  ( EventNotificationTopicStatus
+      ( ..,
+        EventNotificationTopicStatus_Disabled,
+        EventNotificationTopicStatus_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventNotificationTopicStatus = EventNotificationTopicStatus'
+  { fromEventNotificationTopicStatus ::
+      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 EventNotificationTopicStatus_Disabled :: EventNotificationTopicStatus
+pattern EventNotificationTopicStatus_Disabled = EventNotificationTopicStatus' "Disabled"
+
+pattern EventNotificationTopicStatus_Enabled :: EventNotificationTopicStatus
+pattern EventNotificationTopicStatus_Enabled = EventNotificationTopicStatus' "Enabled"
+
+{-# COMPLETE
+  EventNotificationTopicStatus_Disabled,
+  EventNotificationTopicStatus_Enabled,
+  EventNotificationTopicStatus'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/ExpressionType.hs b/gen/Amazonka/IoTWireless/Types/ExpressionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ExpressionType.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.IoTWireless.Types.ExpressionType
+-- 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.IoTWireless.Types.ExpressionType
+  ( ExpressionType
+      ( ..,
+        ExpressionType_MqttTopic,
+        ExpressionType_RuleName
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExpressionType = ExpressionType'
+  { fromExpressionType ::
+      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 ExpressionType_MqttTopic :: ExpressionType
+pattern ExpressionType_MqttTopic = ExpressionType' "MqttTopic"
+
+pattern ExpressionType_RuleName :: ExpressionType
+pattern ExpressionType_RuleName = ExpressionType' "RuleName"
+
+{-# COMPLETE
+  ExpressionType_MqttTopic,
+  ExpressionType_RuleName,
+  ExpressionType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/FPorts.hs b/gen/Amazonka/IoTWireless/Types/FPorts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/FPorts.hs
@@ -0,0 +1,137 @@
+{-# 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.IoTWireless.Types.FPorts
+-- 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.IoTWireless.Types.FPorts where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.ApplicationConfig
+import Amazonka.IoTWireless.Types.Positioning
+import qualified Amazonka.Prelude as Prelude
+
+-- | List of FPort assigned for different LoRaWAN application packages to use
+--
+-- /See:/ 'newFPorts' smart constructor.
+data FPorts = FPorts'
+  { -- | Optional LoRaWAN application information, which can be used for
+    -- geolocation.
+    applications :: Prelude.Maybe [ApplicationConfig],
+    clockSync :: Prelude.Maybe Prelude.Natural,
+    fuota :: Prelude.Maybe Prelude.Natural,
+    multicast :: Prelude.Maybe Prelude.Natural,
+    -- | FPort values for the GNSS, stream, and ClockSync functions of the
+    -- positioning information.
+    positioning :: Prelude.Maybe Positioning
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FPorts' 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:
+--
+-- 'applications', 'fPorts_applications' - Optional LoRaWAN application information, which can be used for
+-- geolocation.
+--
+-- 'clockSync', 'fPorts_clockSync' - Undocumented member.
+--
+-- 'fuota', 'fPorts_fuota' - Undocumented member.
+--
+-- 'multicast', 'fPorts_multicast' - Undocumented member.
+--
+-- 'positioning', 'fPorts_positioning' - FPort values for the GNSS, stream, and ClockSync functions of the
+-- positioning information.
+newFPorts ::
+  FPorts
+newFPorts =
+  FPorts'
+    { applications = Prelude.Nothing,
+      clockSync = Prelude.Nothing,
+      fuota = Prelude.Nothing,
+      multicast = Prelude.Nothing,
+      positioning = Prelude.Nothing
+    }
+
+-- | Optional LoRaWAN application information, which can be used for
+-- geolocation.
+fPorts_applications :: Lens.Lens' FPorts (Prelude.Maybe [ApplicationConfig])
+fPorts_applications = Lens.lens (\FPorts' {applications} -> applications) (\s@FPorts' {} a -> s {applications = a} :: FPorts) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+fPorts_clockSync :: Lens.Lens' FPorts (Prelude.Maybe Prelude.Natural)
+fPorts_clockSync = Lens.lens (\FPorts' {clockSync} -> clockSync) (\s@FPorts' {} a -> s {clockSync = a} :: FPorts)
+
+-- | Undocumented member.
+fPorts_fuota :: Lens.Lens' FPorts (Prelude.Maybe Prelude.Natural)
+fPorts_fuota = Lens.lens (\FPorts' {fuota} -> fuota) (\s@FPorts' {} a -> s {fuota = a} :: FPorts)
+
+-- | Undocumented member.
+fPorts_multicast :: Lens.Lens' FPorts (Prelude.Maybe Prelude.Natural)
+fPorts_multicast = Lens.lens (\FPorts' {multicast} -> multicast) (\s@FPorts' {} a -> s {multicast = a} :: FPorts)
+
+-- | FPort values for the GNSS, stream, and ClockSync functions of the
+-- positioning information.
+fPorts_positioning :: Lens.Lens' FPorts (Prelude.Maybe Positioning)
+fPorts_positioning = Lens.lens (\FPorts' {positioning} -> positioning) (\s@FPorts' {} a -> s {positioning = a} :: FPorts)
+
+instance Data.FromJSON FPorts where
+  parseJSON =
+    Data.withObject
+      "FPorts"
+      ( \x ->
+          FPorts'
+            Prelude.<$> (x Data..:? "Applications" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ClockSync")
+            Prelude.<*> (x Data..:? "Fuota")
+            Prelude.<*> (x Data..:? "Multicast")
+            Prelude.<*> (x Data..:? "Positioning")
+      )
+
+instance Prelude.Hashable FPorts where
+  hashWithSalt _salt FPorts' {..} =
+    _salt
+      `Prelude.hashWithSalt` applications
+      `Prelude.hashWithSalt` clockSync
+      `Prelude.hashWithSalt` fuota
+      `Prelude.hashWithSalt` multicast
+      `Prelude.hashWithSalt` positioning
+
+instance Prelude.NFData FPorts where
+  rnf FPorts' {..} =
+    Prelude.rnf applications
+      `Prelude.seq` Prelude.rnf clockSync
+      `Prelude.seq` Prelude.rnf fuota
+      `Prelude.seq` Prelude.rnf multicast
+      `Prelude.seq` Prelude.rnf positioning
+
+instance Data.ToJSON FPorts where
+  toJSON FPorts' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Applications" Data..=) Prelude.<$> applications,
+            ("ClockSync" Data..=) Prelude.<$> clockSync,
+            ("Fuota" Data..=) Prelude.<$> fuota,
+            ("Multicast" Data..=) Prelude.<$> multicast,
+            ("Positioning" Data..=) Prelude.<$> positioning
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/FuotaDeviceStatus.hs b/gen/Amazonka/IoTWireless/Types/FuotaDeviceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/FuotaDeviceStatus.hs
@@ -0,0 +1,117 @@
+{-# 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.IoTWireless.Types.FuotaDeviceStatus
+-- 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.IoTWireless.Types.FuotaDeviceStatus
+  ( FuotaDeviceStatus
+      ( ..,
+        FuotaDeviceStatus_FragAlgo_unsupported,
+        FuotaDeviceStatus_FragIndex_unsupported,
+        FuotaDeviceStatus_Initial,
+        FuotaDeviceStatus_MICError,
+        FuotaDeviceStatus_MemoryError,
+        FuotaDeviceStatus_MissingFrag,
+        FuotaDeviceStatus_Not_enough_memory,
+        FuotaDeviceStatus_Package_Not_Supported,
+        FuotaDeviceStatus_SessionCnt_replay,
+        FuotaDeviceStatus_Successful,
+        FuotaDeviceStatus_Wrong_descriptor
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of a wireless device in a FUOTA task.
+newtype FuotaDeviceStatus = FuotaDeviceStatus'
+  { fromFuotaDeviceStatus ::
+      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 FuotaDeviceStatus_FragAlgo_unsupported :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_FragAlgo_unsupported = FuotaDeviceStatus' "FragAlgo_unsupported"
+
+pattern FuotaDeviceStatus_FragIndex_unsupported :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_FragIndex_unsupported = FuotaDeviceStatus' "FragIndex_unsupported"
+
+pattern FuotaDeviceStatus_Initial :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_Initial = FuotaDeviceStatus' "Initial"
+
+pattern FuotaDeviceStatus_MICError :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_MICError = FuotaDeviceStatus' "MICError"
+
+pattern FuotaDeviceStatus_MemoryError :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_MemoryError = FuotaDeviceStatus' "MemoryError"
+
+pattern FuotaDeviceStatus_MissingFrag :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_MissingFrag = FuotaDeviceStatus' "MissingFrag"
+
+pattern FuotaDeviceStatus_Not_enough_memory :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_Not_enough_memory = FuotaDeviceStatus' "Not_enough_memory"
+
+pattern FuotaDeviceStatus_Package_Not_Supported :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_Package_Not_Supported = FuotaDeviceStatus' "Package_Not_Supported"
+
+pattern FuotaDeviceStatus_SessionCnt_replay :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_SessionCnt_replay = FuotaDeviceStatus' "SessionCnt_replay"
+
+pattern FuotaDeviceStatus_Successful :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_Successful = FuotaDeviceStatus' "Successful"
+
+pattern FuotaDeviceStatus_Wrong_descriptor :: FuotaDeviceStatus
+pattern FuotaDeviceStatus_Wrong_descriptor = FuotaDeviceStatus' "Wrong_descriptor"
+
+{-# COMPLETE
+  FuotaDeviceStatus_FragAlgo_unsupported,
+  FuotaDeviceStatus_FragIndex_unsupported,
+  FuotaDeviceStatus_Initial,
+  FuotaDeviceStatus_MICError,
+  FuotaDeviceStatus_MemoryError,
+  FuotaDeviceStatus_MissingFrag,
+  FuotaDeviceStatus_Not_enough_memory,
+  FuotaDeviceStatus_Package_Not_Supported,
+  FuotaDeviceStatus_SessionCnt_replay,
+  FuotaDeviceStatus_Successful,
+  FuotaDeviceStatus_Wrong_descriptor,
+  FuotaDeviceStatus'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/FuotaTask.hs b/gen/Amazonka/IoTWireless/Types/FuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/FuotaTask.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.IoTWireless.Types.FuotaTask
+-- 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.IoTWireless.Types.FuotaTask 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 FUOTA task.
+--
+-- /See:/ 'newFuotaTask' smart constructor.
+data FuotaTask = FuotaTask'
+  { arn :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FuotaTask' 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', 'fuotaTask_arn' - Undocumented member.
+--
+-- 'id', 'fuotaTask_id' - Undocumented member.
+--
+-- 'name', 'fuotaTask_name' - Undocumented member.
+newFuotaTask ::
+  FuotaTask
+newFuotaTask =
+  FuotaTask'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+fuotaTask_arn :: Lens.Lens' FuotaTask (Prelude.Maybe Prelude.Text)
+fuotaTask_arn = Lens.lens (\FuotaTask' {arn} -> arn) (\s@FuotaTask' {} a -> s {arn = a} :: FuotaTask)
+
+-- | Undocumented member.
+fuotaTask_id :: Lens.Lens' FuotaTask (Prelude.Maybe Prelude.Text)
+fuotaTask_id = Lens.lens (\FuotaTask' {id} -> id) (\s@FuotaTask' {} a -> s {id = a} :: FuotaTask)
+
+-- | Undocumented member.
+fuotaTask_name :: Lens.Lens' FuotaTask (Prelude.Maybe Prelude.Text)
+fuotaTask_name = Lens.lens (\FuotaTask' {name} -> name) (\s@FuotaTask' {} a -> s {name = a} :: FuotaTask)
+
+instance Data.FromJSON FuotaTask where
+  parseJSON =
+    Data.withObject
+      "FuotaTask"
+      ( \x ->
+          FuotaTask'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable FuotaTask where
+  hashWithSalt _salt FuotaTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData FuotaTask where
+  rnf FuotaTask' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTWireless/Types/FuotaTaskStatus.hs b/gen/Amazonka/IoTWireless/Types/FuotaTaskStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/FuotaTaskStatus.hs
@@ -0,0 +1,87 @@
+{-# 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.IoTWireless.Types.FuotaTaskStatus
+-- 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.IoTWireless.Types.FuotaTaskStatus
+  ( FuotaTaskStatus
+      ( ..,
+        FuotaTaskStatus_Delete_Waiting,
+        FuotaTaskStatus_FuotaDone,
+        FuotaTaskStatus_FuotaSession_Waiting,
+        FuotaTaskStatus_In_FuotaSession,
+        FuotaTaskStatus_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of a FUOTA task.
+newtype FuotaTaskStatus = FuotaTaskStatus'
+  { fromFuotaTaskStatus ::
+      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 FuotaTaskStatus_Delete_Waiting :: FuotaTaskStatus
+pattern FuotaTaskStatus_Delete_Waiting = FuotaTaskStatus' "Delete_Waiting"
+
+pattern FuotaTaskStatus_FuotaDone :: FuotaTaskStatus
+pattern FuotaTaskStatus_FuotaDone = FuotaTaskStatus' "FuotaDone"
+
+pattern FuotaTaskStatus_FuotaSession_Waiting :: FuotaTaskStatus
+pattern FuotaTaskStatus_FuotaSession_Waiting = FuotaTaskStatus' "FuotaSession_Waiting"
+
+pattern FuotaTaskStatus_In_FuotaSession :: FuotaTaskStatus
+pattern FuotaTaskStatus_In_FuotaSession = FuotaTaskStatus' "In_FuotaSession"
+
+pattern FuotaTaskStatus_Pending :: FuotaTaskStatus
+pattern FuotaTaskStatus_Pending = FuotaTaskStatus' "Pending"
+
+{-# COMPLETE
+  FuotaTaskStatus_Delete_Waiting,
+  FuotaTaskStatus_FuotaDone,
+  FuotaTaskStatus_FuotaSession_Waiting,
+  FuotaTaskStatus_In_FuotaSession,
+  FuotaTaskStatus_Pending,
+  FuotaTaskStatus'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/GatewayListItem.hs b/gen/Amazonka/IoTWireless/Types/GatewayListItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/GatewayListItem.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.IoTWireless.Types.GatewayListItem
+-- 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.IoTWireless.Types.GatewayListItem 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
+
+-- | Gateway list item object that specifies the frequency and list of
+-- gateways for which the downlink message should be sent.
+--
+-- /See:/ 'newGatewayListItem' smart constructor.
+data GatewayListItem = GatewayListItem'
+  { -- | The ID of the wireless gateways that you want to add to the list of
+    -- gateways when sending downlink messages.
+    gatewayId :: Prelude.Text,
+    -- | The frequency to use for the gateways when sending a downlink message to
+    -- the wireless device.
+    downlinkFrequency :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GatewayListItem' 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:
+--
+-- 'gatewayId', 'gatewayListItem_gatewayId' - The ID of the wireless gateways that you want to add to the list of
+-- gateways when sending downlink messages.
+--
+-- 'downlinkFrequency', 'gatewayListItem_downlinkFrequency' - The frequency to use for the gateways when sending a downlink message to
+-- the wireless device.
+newGatewayListItem ::
+  -- | 'gatewayId'
+  Prelude.Text ->
+  -- | 'downlinkFrequency'
+  Prelude.Natural ->
+  GatewayListItem
+newGatewayListItem pGatewayId_ pDownlinkFrequency_ =
+  GatewayListItem'
+    { gatewayId = pGatewayId_,
+      downlinkFrequency = pDownlinkFrequency_
+    }
+
+-- | The ID of the wireless gateways that you want to add to the list of
+-- gateways when sending downlink messages.
+gatewayListItem_gatewayId :: Lens.Lens' GatewayListItem Prelude.Text
+gatewayListItem_gatewayId = Lens.lens (\GatewayListItem' {gatewayId} -> gatewayId) (\s@GatewayListItem' {} a -> s {gatewayId = a} :: GatewayListItem)
+
+-- | The frequency to use for the gateways when sending a downlink message to
+-- the wireless device.
+gatewayListItem_downlinkFrequency :: Lens.Lens' GatewayListItem Prelude.Natural
+gatewayListItem_downlinkFrequency = Lens.lens (\GatewayListItem' {downlinkFrequency} -> downlinkFrequency) (\s@GatewayListItem' {} a -> s {downlinkFrequency = a} :: GatewayListItem)
+
+instance Data.FromJSON GatewayListItem where
+  parseJSON =
+    Data.withObject
+      "GatewayListItem"
+      ( \x ->
+          GatewayListItem'
+            Prelude.<$> (x Data..: "GatewayId")
+            Prelude.<*> (x Data..: "DownlinkFrequency")
+      )
+
+instance Prelude.Hashable GatewayListItem where
+  hashWithSalt _salt GatewayListItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` downlinkFrequency
+
+instance Prelude.NFData GatewayListItem where
+  rnf GatewayListItem' {..} =
+    Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf downlinkFrequency
+
+instance Data.ToJSON GatewayListItem where
+  toJSON GatewayListItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("GatewayId" Data..= gatewayId),
+            Prelude.Just
+              ("DownlinkFrequency" Data..= downlinkFrequency)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/GlobalIdentity.hs b/gen/Amazonka/IoTWireless/Types/GlobalIdentity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/GlobalIdentity.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.IoTWireless.Types.GlobalIdentity
+-- 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.IoTWireless.Types.GlobalIdentity 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
+
+-- | Global identity information.
+--
+-- /See:/ 'newGlobalIdentity' smart constructor.
+data GlobalIdentity = GlobalIdentity'
+  { -- | Location area code of the global identity.
+    lac :: Prelude.Natural,
+    -- | GERAN (GSM EDGE Radio Access Network) cell global identifier.
+    geranCid :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GlobalIdentity' 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:
+--
+-- 'lac', 'globalIdentity_lac' - Location area code of the global identity.
+--
+-- 'geranCid', 'globalIdentity_geranCid' - GERAN (GSM EDGE Radio Access Network) cell global identifier.
+newGlobalIdentity ::
+  -- | 'lac'
+  Prelude.Natural ->
+  -- | 'geranCid'
+  Prelude.Natural ->
+  GlobalIdentity
+newGlobalIdentity pLac_ pGeranCid_ =
+  GlobalIdentity' {lac = pLac_, geranCid = pGeranCid_}
+
+-- | Location area code of the global identity.
+globalIdentity_lac :: Lens.Lens' GlobalIdentity Prelude.Natural
+globalIdentity_lac = Lens.lens (\GlobalIdentity' {lac} -> lac) (\s@GlobalIdentity' {} a -> s {lac = a} :: GlobalIdentity)
+
+-- | GERAN (GSM EDGE Radio Access Network) cell global identifier.
+globalIdentity_geranCid :: Lens.Lens' GlobalIdentity Prelude.Natural
+globalIdentity_geranCid = Lens.lens (\GlobalIdentity' {geranCid} -> geranCid) (\s@GlobalIdentity' {} a -> s {geranCid = a} :: GlobalIdentity)
+
+instance Prelude.Hashable GlobalIdentity where
+  hashWithSalt _salt GlobalIdentity' {..} =
+    _salt
+      `Prelude.hashWithSalt` lac
+      `Prelude.hashWithSalt` geranCid
+
+instance Prelude.NFData GlobalIdentity where
+  rnf GlobalIdentity' {..} =
+    Prelude.rnf lac `Prelude.seq` Prelude.rnf geranCid
+
+instance Data.ToJSON GlobalIdentity where
+  toJSON GlobalIdentity' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Lac" Data..= lac),
+            Prelude.Just ("GeranCid" Data..= geranCid)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/Gnss.hs b/gen/Amazonka/IoTWireless/Types/Gnss.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/Gnss.hs
@@ -0,0 +1,166 @@
+{-# 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.IoTWireless.Types.Gnss
+-- 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.IoTWireless.Types.Gnss 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
+
+-- | Global navigation satellite system (GNSS) object used for positioning.
+--
+-- /See:/ 'newGnss' smart constructor.
+data Gnss = Gnss'
+  { -- | Optional assistance altitude, which is the altitude of the device at
+    -- capture time, specified in meters above the WGS84 reference ellipsoid.
+    assistAltitude :: Prelude.Maybe Prelude.Double,
+    -- | Optional assistance position information, specified using latitude and
+    -- longitude values in degrees. The co-ordinates are inside the WGS84
+    -- reference frame.
+    assistPosition :: Prelude.Maybe (Prelude.NonEmpty Prelude.Double),
+    -- | Optional parameter that gives an estimate of the time when the GNSS scan
+    -- information is taken, in seconds GPS time (GPST). If capture time is not
+    -- specified, the local server time is used.
+    captureTime :: Prelude.Maybe Prelude.Double,
+    -- | Optional value that gives the capture time estimate accuracy, in
+    -- seconds. If capture time accuracy is not specified, default value of 300
+    -- is used.
+    captureTimeAccuracy :: Prelude.Maybe Prelude.Double,
+    -- | Optional parameter that forces 2D solve, which modifies the positioning
+    -- algorithm to a 2D solution problem. When this parameter is specified,
+    -- the assistance altitude should have an accuracy of at least 10 meters.
+    use2DSolver :: Prelude.Maybe Prelude.Bool,
+    -- | Payload that contains the GNSS scan result, or NAV message, in
+    -- hexadecimal notation.
+    payload :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Gnss' 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:
+--
+-- 'assistAltitude', 'gnss_assistAltitude' - Optional assistance altitude, which is the altitude of the device at
+-- capture time, specified in meters above the WGS84 reference ellipsoid.
+--
+-- 'assistPosition', 'gnss_assistPosition' - Optional assistance position information, specified using latitude and
+-- longitude values in degrees. The co-ordinates are inside the WGS84
+-- reference frame.
+--
+-- 'captureTime', 'gnss_captureTime' - Optional parameter that gives an estimate of the time when the GNSS scan
+-- information is taken, in seconds GPS time (GPST). If capture time is not
+-- specified, the local server time is used.
+--
+-- 'captureTimeAccuracy', 'gnss_captureTimeAccuracy' - Optional value that gives the capture time estimate accuracy, in
+-- seconds. If capture time accuracy is not specified, default value of 300
+-- is used.
+--
+-- 'use2DSolver', 'gnss_use2DSolver' - Optional parameter that forces 2D solve, which modifies the positioning
+-- algorithm to a 2D solution problem. When this parameter is specified,
+-- the assistance altitude should have an accuracy of at least 10 meters.
+--
+-- 'payload', 'gnss_payload' - Payload that contains the GNSS scan result, or NAV message, in
+-- hexadecimal notation.
+newGnss ::
+  -- | 'payload'
+  Prelude.Text ->
+  Gnss
+newGnss pPayload_ =
+  Gnss'
+    { assistAltitude = Prelude.Nothing,
+      assistPosition = Prelude.Nothing,
+      captureTime = Prelude.Nothing,
+      captureTimeAccuracy = Prelude.Nothing,
+      use2DSolver = Prelude.Nothing,
+      payload = pPayload_
+    }
+
+-- | Optional assistance altitude, which is the altitude of the device at
+-- capture time, specified in meters above the WGS84 reference ellipsoid.
+gnss_assistAltitude :: Lens.Lens' Gnss (Prelude.Maybe Prelude.Double)
+gnss_assistAltitude = Lens.lens (\Gnss' {assistAltitude} -> assistAltitude) (\s@Gnss' {} a -> s {assistAltitude = a} :: Gnss)
+
+-- | Optional assistance position information, specified using latitude and
+-- longitude values in degrees. The co-ordinates are inside the WGS84
+-- reference frame.
+gnss_assistPosition :: Lens.Lens' Gnss (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+gnss_assistPosition = Lens.lens (\Gnss' {assistPosition} -> assistPosition) (\s@Gnss' {} a -> s {assistPosition = a} :: Gnss) Prelude.. Lens.mapping Lens.coerced
+
+-- | Optional parameter that gives an estimate of the time when the GNSS scan
+-- information is taken, in seconds GPS time (GPST). If capture time is not
+-- specified, the local server time is used.
+gnss_captureTime :: Lens.Lens' Gnss (Prelude.Maybe Prelude.Double)
+gnss_captureTime = Lens.lens (\Gnss' {captureTime} -> captureTime) (\s@Gnss' {} a -> s {captureTime = a} :: Gnss)
+
+-- | Optional value that gives the capture time estimate accuracy, in
+-- seconds. If capture time accuracy is not specified, default value of 300
+-- is used.
+gnss_captureTimeAccuracy :: Lens.Lens' Gnss (Prelude.Maybe Prelude.Double)
+gnss_captureTimeAccuracy = Lens.lens (\Gnss' {captureTimeAccuracy} -> captureTimeAccuracy) (\s@Gnss' {} a -> s {captureTimeAccuracy = a} :: Gnss)
+
+-- | Optional parameter that forces 2D solve, which modifies the positioning
+-- algorithm to a 2D solution problem. When this parameter is specified,
+-- the assistance altitude should have an accuracy of at least 10 meters.
+gnss_use2DSolver :: Lens.Lens' Gnss (Prelude.Maybe Prelude.Bool)
+gnss_use2DSolver = Lens.lens (\Gnss' {use2DSolver} -> use2DSolver) (\s@Gnss' {} a -> s {use2DSolver = a} :: Gnss)
+
+-- | Payload that contains the GNSS scan result, or NAV message, in
+-- hexadecimal notation.
+gnss_payload :: Lens.Lens' Gnss Prelude.Text
+gnss_payload = Lens.lens (\Gnss' {payload} -> payload) (\s@Gnss' {} a -> s {payload = a} :: Gnss)
+
+instance Prelude.Hashable Gnss where
+  hashWithSalt _salt Gnss' {..} =
+    _salt
+      `Prelude.hashWithSalt` assistAltitude
+      `Prelude.hashWithSalt` assistPosition
+      `Prelude.hashWithSalt` captureTime
+      `Prelude.hashWithSalt` captureTimeAccuracy
+      `Prelude.hashWithSalt` use2DSolver
+      `Prelude.hashWithSalt` payload
+
+instance Prelude.NFData Gnss where
+  rnf Gnss' {..} =
+    Prelude.rnf assistAltitude
+      `Prelude.seq` Prelude.rnf assistPosition
+      `Prelude.seq` Prelude.rnf captureTime
+      `Prelude.seq` Prelude.rnf captureTimeAccuracy
+      `Prelude.seq` Prelude.rnf use2DSolver
+      `Prelude.seq` Prelude.rnf payload
+
+instance Data.ToJSON Gnss where
+  toJSON Gnss' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AssistAltitude" Data..=)
+              Prelude.<$> assistAltitude,
+            ("AssistPosition" Data..=)
+              Prelude.<$> assistPosition,
+            ("CaptureTime" Data..=) Prelude.<$> captureTime,
+            ("CaptureTimeAccuracy" Data..=)
+              Prelude.<$> captureTimeAccuracy,
+            ("Use2DSolver" Data..=) Prelude.<$> use2DSolver,
+            Prelude.Just ("Payload" Data..= payload)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/GsmLocalId.hs b/gen/Amazonka/IoTWireless/Types/GsmLocalId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/GsmLocalId.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.IoTWireless.Types.GsmLocalId
+-- 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.IoTWireless.Types.GsmLocalId 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
+
+-- | GSM local ID information, which corresponds to the local identification
+-- parameters of a GSM cell.
+--
+-- /See:/ 'newGsmLocalId' smart constructor.
+data GsmLocalId = GsmLocalId'
+  { -- | GSM base station identity code (BSIC).
+    bsic :: Prelude.Natural,
+    -- | GSM broadcast control channel.
+    bcch :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GsmLocalId' 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:
+--
+-- 'bsic', 'gsmLocalId_bsic' - GSM base station identity code (BSIC).
+--
+-- 'bcch', 'gsmLocalId_bcch' - GSM broadcast control channel.
+newGsmLocalId ::
+  -- | 'bsic'
+  Prelude.Natural ->
+  -- | 'bcch'
+  Prelude.Natural ->
+  GsmLocalId
+newGsmLocalId pBsic_ pBcch_ =
+  GsmLocalId' {bsic = pBsic_, bcch = pBcch_}
+
+-- | GSM base station identity code (BSIC).
+gsmLocalId_bsic :: Lens.Lens' GsmLocalId Prelude.Natural
+gsmLocalId_bsic = Lens.lens (\GsmLocalId' {bsic} -> bsic) (\s@GsmLocalId' {} a -> s {bsic = a} :: GsmLocalId)
+
+-- | GSM broadcast control channel.
+gsmLocalId_bcch :: Lens.Lens' GsmLocalId Prelude.Natural
+gsmLocalId_bcch = Lens.lens (\GsmLocalId' {bcch} -> bcch) (\s@GsmLocalId' {} a -> s {bcch = a} :: GsmLocalId)
+
+instance Prelude.Hashable GsmLocalId where
+  hashWithSalt _salt GsmLocalId' {..} =
+    _salt
+      `Prelude.hashWithSalt` bsic
+      `Prelude.hashWithSalt` bcch
+
+instance Prelude.NFData GsmLocalId where
+  rnf GsmLocalId' {..} =
+    Prelude.rnf bsic `Prelude.seq` Prelude.rnf bcch
+
+instance Data.ToJSON GsmLocalId where
+  toJSON GsmLocalId' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Bsic" Data..= bsic),
+            Prelude.Just ("Bcch" Data..= bcch)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/GsmNmrObj.hs b/gen/Amazonka/IoTWireless/Types/GsmNmrObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/GsmNmrObj.hs
@@ -0,0 +1,116 @@
+{-# 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.IoTWireless.Types.GsmNmrObj
+-- 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.IoTWireless.Types.GsmNmrObj where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.GlobalIdentity
+import qualified Amazonka.Prelude as Prelude
+
+-- | GSM object for network measurement reports.
+--
+-- /See:/ 'newGsmNmrObj' smart constructor.
+data GsmNmrObj = GsmNmrObj'
+  { -- | Global identity information of the GSM object.
+    globalIdentity :: Prelude.Maybe GlobalIdentity,
+    -- | Rx level, which is the received signal power, measured in dBm
+    -- (decibel-milliwatts).
+    rxLevel :: Prelude.Maybe Prelude.Int,
+    -- | GSM base station identity code (BSIC).
+    bsic :: Prelude.Natural,
+    -- | GSM broadcast control channel.
+    bcch :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GsmNmrObj' 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:
+--
+-- 'globalIdentity', 'gsmNmrObj_globalIdentity' - Global identity information of the GSM object.
+--
+-- 'rxLevel', 'gsmNmrObj_rxLevel' - Rx level, which is the received signal power, measured in dBm
+-- (decibel-milliwatts).
+--
+-- 'bsic', 'gsmNmrObj_bsic' - GSM base station identity code (BSIC).
+--
+-- 'bcch', 'gsmNmrObj_bcch' - GSM broadcast control channel.
+newGsmNmrObj ::
+  -- | 'bsic'
+  Prelude.Natural ->
+  -- | 'bcch'
+  Prelude.Natural ->
+  GsmNmrObj
+newGsmNmrObj pBsic_ pBcch_ =
+  GsmNmrObj'
+    { globalIdentity = Prelude.Nothing,
+      rxLevel = Prelude.Nothing,
+      bsic = pBsic_,
+      bcch = pBcch_
+    }
+
+-- | Global identity information of the GSM object.
+gsmNmrObj_globalIdentity :: Lens.Lens' GsmNmrObj (Prelude.Maybe GlobalIdentity)
+gsmNmrObj_globalIdentity = Lens.lens (\GsmNmrObj' {globalIdentity} -> globalIdentity) (\s@GsmNmrObj' {} a -> s {globalIdentity = a} :: GsmNmrObj)
+
+-- | Rx level, which is the received signal power, measured in dBm
+-- (decibel-milliwatts).
+gsmNmrObj_rxLevel :: Lens.Lens' GsmNmrObj (Prelude.Maybe Prelude.Int)
+gsmNmrObj_rxLevel = Lens.lens (\GsmNmrObj' {rxLevel} -> rxLevel) (\s@GsmNmrObj' {} a -> s {rxLevel = a} :: GsmNmrObj)
+
+-- | GSM base station identity code (BSIC).
+gsmNmrObj_bsic :: Lens.Lens' GsmNmrObj Prelude.Natural
+gsmNmrObj_bsic = Lens.lens (\GsmNmrObj' {bsic} -> bsic) (\s@GsmNmrObj' {} a -> s {bsic = a} :: GsmNmrObj)
+
+-- | GSM broadcast control channel.
+gsmNmrObj_bcch :: Lens.Lens' GsmNmrObj Prelude.Natural
+gsmNmrObj_bcch = Lens.lens (\GsmNmrObj' {bcch} -> bcch) (\s@GsmNmrObj' {} a -> s {bcch = a} :: GsmNmrObj)
+
+instance Prelude.Hashable GsmNmrObj where
+  hashWithSalt _salt GsmNmrObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` globalIdentity
+      `Prelude.hashWithSalt` rxLevel
+      `Prelude.hashWithSalt` bsic
+      `Prelude.hashWithSalt` bcch
+
+instance Prelude.NFData GsmNmrObj where
+  rnf GsmNmrObj' {..} =
+    Prelude.rnf globalIdentity
+      `Prelude.seq` Prelude.rnf rxLevel
+      `Prelude.seq` Prelude.rnf bsic
+      `Prelude.seq` Prelude.rnf bcch
+
+instance Data.ToJSON GsmNmrObj where
+  toJSON GsmNmrObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("GlobalIdentity" Data..=)
+              Prelude.<$> globalIdentity,
+            ("RxLevel" Data..=) Prelude.<$> rxLevel,
+            Prelude.Just ("Bsic" Data..= bsic),
+            Prelude.Just ("Bcch" Data..= bcch)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/GsmObj.hs b/gen/Amazonka/IoTWireless/Types/GsmObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/GsmObj.hs
@@ -0,0 +1,172 @@
+{-# 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.IoTWireless.Types.GsmObj
+-- 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.IoTWireless.Types.GsmObj where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.GsmLocalId
+import Amazonka.IoTWireless.Types.GsmNmrObj
+import qualified Amazonka.Prelude as Prelude
+
+-- | GSM object.
+--
+-- /See:/ 'newGsmObj' smart constructor.
+data GsmObj = GsmObj'
+  { -- | GSM local identification (local ID) information.
+    gsmLocalId :: Prelude.Maybe GsmLocalId,
+    -- | GSM object for network measurement reports.
+    gsmNmr :: Prelude.Maybe (Prelude.NonEmpty GsmNmrObj),
+    -- | Timing advance value, which corresponds to the length of time a signal
+    -- takes to reach the base station from a mobile phone.
+    gsmTimingAdvance :: Prelude.Maybe Prelude.Natural,
+    -- | Rx level, which is the received signal power, measured in dBm
+    -- (decibel-milliwatts).
+    rxLevel :: Prelude.Maybe Prelude.Int,
+    -- | Mobile Country Code.
+    mcc :: Prelude.Natural,
+    -- | Mobile Network Code.
+    mnc :: Prelude.Natural,
+    -- | Location area code.
+    lac :: Prelude.Natural,
+    -- | GERAN (GSM EDGE Radio Access Network) Cell Global Identifier.
+    geranCid :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GsmObj' 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:
+--
+-- 'gsmLocalId', 'gsmObj_gsmLocalId' - GSM local identification (local ID) information.
+--
+-- 'gsmNmr', 'gsmObj_gsmNmr' - GSM object for network measurement reports.
+--
+-- 'gsmTimingAdvance', 'gsmObj_gsmTimingAdvance' - Timing advance value, which corresponds to the length of time a signal
+-- takes to reach the base station from a mobile phone.
+--
+-- 'rxLevel', 'gsmObj_rxLevel' - Rx level, which is the received signal power, measured in dBm
+-- (decibel-milliwatts).
+--
+-- 'mcc', 'gsmObj_mcc' - Mobile Country Code.
+--
+-- 'mnc', 'gsmObj_mnc' - Mobile Network Code.
+--
+-- 'lac', 'gsmObj_lac' - Location area code.
+--
+-- 'geranCid', 'gsmObj_geranCid' - GERAN (GSM EDGE Radio Access Network) Cell Global Identifier.
+newGsmObj ::
+  -- | 'mcc'
+  Prelude.Natural ->
+  -- | 'mnc'
+  Prelude.Natural ->
+  -- | 'lac'
+  Prelude.Natural ->
+  -- | 'geranCid'
+  Prelude.Natural ->
+  GsmObj
+newGsmObj pMcc_ pMnc_ pLac_ pGeranCid_ =
+  GsmObj'
+    { gsmLocalId = Prelude.Nothing,
+      gsmNmr = Prelude.Nothing,
+      gsmTimingAdvance = Prelude.Nothing,
+      rxLevel = Prelude.Nothing,
+      mcc = pMcc_,
+      mnc = pMnc_,
+      lac = pLac_,
+      geranCid = pGeranCid_
+    }
+
+-- | GSM local identification (local ID) information.
+gsmObj_gsmLocalId :: Lens.Lens' GsmObj (Prelude.Maybe GsmLocalId)
+gsmObj_gsmLocalId = Lens.lens (\GsmObj' {gsmLocalId} -> gsmLocalId) (\s@GsmObj' {} a -> s {gsmLocalId = a} :: GsmObj)
+
+-- | GSM object for network measurement reports.
+gsmObj_gsmNmr :: Lens.Lens' GsmObj (Prelude.Maybe (Prelude.NonEmpty GsmNmrObj))
+gsmObj_gsmNmr = Lens.lens (\GsmObj' {gsmNmr} -> gsmNmr) (\s@GsmObj' {} a -> s {gsmNmr = a} :: GsmObj) Prelude.. Lens.mapping Lens.coerced
+
+-- | Timing advance value, which corresponds to the length of time a signal
+-- takes to reach the base station from a mobile phone.
+gsmObj_gsmTimingAdvance :: Lens.Lens' GsmObj (Prelude.Maybe Prelude.Natural)
+gsmObj_gsmTimingAdvance = Lens.lens (\GsmObj' {gsmTimingAdvance} -> gsmTimingAdvance) (\s@GsmObj' {} a -> s {gsmTimingAdvance = a} :: GsmObj)
+
+-- | Rx level, which is the received signal power, measured in dBm
+-- (decibel-milliwatts).
+gsmObj_rxLevel :: Lens.Lens' GsmObj (Prelude.Maybe Prelude.Int)
+gsmObj_rxLevel = Lens.lens (\GsmObj' {rxLevel} -> rxLevel) (\s@GsmObj' {} a -> s {rxLevel = a} :: GsmObj)
+
+-- | Mobile Country Code.
+gsmObj_mcc :: Lens.Lens' GsmObj Prelude.Natural
+gsmObj_mcc = Lens.lens (\GsmObj' {mcc} -> mcc) (\s@GsmObj' {} a -> s {mcc = a} :: GsmObj)
+
+-- | Mobile Network Code.
+gsmObj_mnc :: Lens.Lens' GsmObj Prelude.Natural
+gsmObj_mnc = Lens.lens (\GsmObj' {mnc} -> mnc) (\s@GsmObj' {} a -> s {mnc = a} :: GsmObj)
+
+-- | Location area code.
+gsmObj_lac :: Lens.Lens' GsmObj Prelude.Natural
+gsmObj_lac = Lens.lens (\GsmObj' {lac} -> lac) (\s@GsmObj' {} a -> s {lac = a} :: GsmObj)
+
+-- | GERAN (GSM EDGE Radio Access Network) Cell Global Identifier.
+gsmObj_geranCid :: Lens.Lens' GsmObj Prelude.Natural
+gsmObj_geranCid = Lens.lens (\GsmObj' {geranCid} -> geranCid) (\s@GsmObj' {} a -> s {geranCid = a} :: GsmObj)
+
+instance Prelude.Hashable GsmObj where
+  hashWithSalt _salt GsmObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` gsmLocalId
+      `Prelude.hashWithSalt` gsmNmr
+      `Prelude.hashWithSalt` gsmTimingAdvance
+      `Prelude.hashWithSalt` rxLevel
+      `Prelude.hashWithSalt` mcc
+      `Prelude.hashWithSalt` mnc
+      `Prelude.hashWithSalt` lac
+      `Prelude.hashWithSalt` geranCid
+
+instance Prelude.NFData GsmObj where
+  rnf GsmObj' {..} =
+    Prelude.rnf gsmLocalId
+      `Prelude.seq` Prelude.rnf gsmNmr
+      `Prelude.seq` Prelude.rnf gsmTimingAdvance
+      `Prelude.seq` Prelude.rnf rxLevel
+      `Prelude.seq` Prelude.rnf mcc
+      `Prelude.seq` Prelude.rnf mnc
+      `Prelude.seq` Prelude.rnf lac
+      `Prelude.seq` Prelude.rnf geranCid
+
+instance Data.ToJSON GsmObj where
+  toJSON GsmObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("GsmLocalId" Data..=) Prelude.<$> gsmLocalId,
+            ("GsmNmr" Data..=) Prelude.<$> gsmNmr,
+            ("GsmTimingAdvance" Data..=)
+              Prelude.<$> gsmTimingAdvance,
+            ("RxLevel" Data..=) Prelude.<$> rxLevel,
+            Prelude.Just ("Mcc" Data..= mcc),
+            Prelude.Just ("Mnc" Data..= mnc),
+            Prelude.Just ("Lac" Data..= lac),
+            Prelude.Just ("GeranCid" Data..= geranCid)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/IdentifierType.hs b/gen/Amazonka/IoTWireless/Types/IdentifierType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/IdentifierType.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.IoTWireless.Types.IdentifierType
+-- 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.IoTWireless.Types.IdentifierType
+  ( IdentifierType
+      ( ..,
+        IdentifierType_DevEui,
+        IdentifierType_GatewayEui,
+        IdentifierType_PartnerAccountId,
+        IdentifierType_WirelessDeviceId,
+        IdentifierType_WirelessGatewayId
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IdentifierType = IdentifierType'
+  { fromIdentifierType ::
+      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 IdentifierType_DevEui :: IdentifierType
+pattern IdentifierType_DevEui = IdentifierType' "DevEui"
+
+pattern IdentifierType_GatewayEui :: IdentifierType
+pattern IdentifierType_GatewayEui = IdentifierType' "GatewayEui"
+
+pattern IdentifierType_PartnerAccountId :: IdentifierType
+pattern IdentifierType_PartnerAccountId = IdentifierType' "PartnerAccountId"
+
+pattern IdentifierType_WirelessDeviceId :: IdentifierType
+pattern IdentifierType_WirelessDeviceId = IdentifierType' "WirelessDeviceId"
+
+pattern IdentifierType_WirelessGatewayId :: IdentifierType
+pattern IdentifierType_WirelessGatewayId = IdentifierType' "WirelessGatewayId"
+
+{-# COMPLETE
+  IdentifierType_DevEui,
+  IdentifierType_GatewayEui,
+  IdentifierType_PartnerAccountId,
+  IdentifierType_WirelessDeviceId,
+  IdentifierType_WirelessGatewayId,
+  IdentifierType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/Ip.hs b/gen/Amazonka/IoTWireless/Types/Ip.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/Ip.hs
@@ -0,0 +1,67 @@
+{-# 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.IoTWireless.Types.Ip
+-- 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.IoTWireless.Types.Ip 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
+
+-- | IP address used for resolving device location.
+--
+-- /See:/ 'newIp' smart constructor.
+data Ip = Ip'
+  { -- | IP address information.
+    ipAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ip' 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:
+--
+-- 'ipAddress', 'ip_ipAddress' - IP address information.
+newIp ::
+  -- | 'ipAddress'
+  Prelude.Text ->
+  Ip
+newIp pIpAddress_ = Ip' {ipAddress = pIpAddress_}
+
+-- | IP address information.
+ip_ipAddress :: Lens.Lens' Ip Prelude.Text
+ip_ipAddress = Lens.lens (\Ip' {ipAddress} -> ipAddress) (\s@Ip' {} a -> s {ipAddress = a} :: Ip)
+
+instance Prelude.Hashable Ip where
+  hashWithSalt _salt Ip' {..} =
+    _salt `Prelude.hashWithSalt` ipAddress
+
+instance Prelude.NFData Ip where
+  rnf Ip' {..} = Prelude.rnf ipAddress
+
+instance Data.ToJSON Ip where
+  toJSON Ip' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("IpAddress" Data..= ipAddress)]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/JoinEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/JoinEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/JoinEventConfiguration.hs
@@ -0,0 +1,102 @@
+{-# 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.IoTWireless.Types.JoinEventConfiguration
+-- 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.IoTWireless.Types.JoinEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import Amazonka.IoTWireless.Types.LoRaWANJoinEventNotificationConfigurations
+import qualified Amazonka.Prelude as Prelude
+
+-- | Join event configuration object for enabling or disabling topic.
+--
+-- /See:/ 'newJoinEventConfiguration' smart constructor.
+data JoinEventConfiguration = JoinEventConfiguration'
+  { -- | Join event configuration object for enabling or disabling LoRaWAN
+    -- related event topics.
+    loRaWAN :: Prelude.Maybe LoRaWANJoinEventNotificationConfigurations,
+    -- | Denotes whether the wireless device ID join event topic is enabled or
+    -- disabled.
+    wirelessDeviceIdEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JoinEventConfiguration' 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:
+--
+-- 'loRaWAN', 'joinEventConfiguration_loRaWAN' - Join event configuration object for enabling or disabling LoRaWAN
+-- related event topics.
+--
+-- 'wirelessDeviceIdEventTopic', 'joinEventConfiguration_wirelessDeviceIdEventTopic' - Denotes whether the wireless device ID join event topic is enabled or
+-- disabled.
+newJoinEventConfiguration ::
+  JoinEventConfiguration
+newJoinEventConfiguration =
+  JoinEventConfiguration'
+    { loRaWAN = Prelude.Nothing,
+      wirelessDeviceIdEventTopic = Prelude.Nothing
+    }
+
+-- | Join event configuration object for enabling or disabling LoRaWAN
+-- related event topics.
+joinEventConfiguration_loRaWAN :: Lens.Lens' JoinEventConfiguration (Prelude.Maybe LoRaWANJoinEventNotificationConfigurations)
+joinEventConfiguration_loRaWAN = Lens.lens (\JoinEventConfiguration' {loRaWAN} -> loRaWAN) (\s@JoinEventConfiguration' {} a -> s {loRaWAN = a} :: JoinEventConfiguration)
+
+-- | Denotes whether the wireless device ID join event topic is enabled or
+-- disabled.
+joinEventConfiguration_wirelessDeviceIdEventTopic :: Lens.Lens' JoinEventConfiguration (Prelude.Maybe EventNotificationTopicStatus)
+joinEventConfiguration_wirelessDeviceIdEventTopic = Lens.lens (\JoinEventConfiguration' {wirelessDeviceIdEventTopic} -> wirelessDeviceIdEventTopic) (\s@JoinEventConfiguration' {} a -> s {wirelessDeviceIdEventTopic = a} :: JoinEventConfiguration)
+
+instance Data.FromJSON JoinEventConfiguration where
+  parseJSON =
+    Data.withObject
+      "JoinEventConfiguration"
+      ( \x ->
+          JoinEventConfiguration'
+            Prelude.<$> (x Data..:? "LoRaWAN")
+            Prelude.<*> (x Data..:? "WirelessDeviceIdEventTopic")
+      )
+
+instance Prelude.Hashable JoinEventConfiguration where
+  hashWithSalt _salt JoinEventConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` wirelessDeviceIdEventTopic
+
+instance Prelude.NFData JoinEventConfiguration where
+  rnf JoinEventConfiguration' {..} =
+    Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf wirelessDeviceIdEventTopic
+
+instance Data.ToJSON JoinEventConfiguration where
+  toJSON JoinEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("WirelessDeviceIdEventTopic" Data..=)
+              Prelude.<$> wirelessDeviceIdEventTopic
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/JoinResourceTypeEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/JoinResourceTypeEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/JoinResourceTypeEventConfiguration.hs
@@ -0,0 +1,98 @@
+{-# 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.IoTWireless.Types.JoinResourceTypeEventConfiguration
+-- 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.IoTWireless.Types.JoinResourceTypeEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANJoinResourceTypeEventConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Join resource type event configuration object for enabling or disabling
+-- topic.
+--
+-- /See:/ 'newJoinResourceTypeEventConfiguration' smart constructor.
+data JoinResourceTypeEventConfiguration = JoinResourceTypeEventConfiguration'
+  { -- | Join resource type event configuration object for enabling or disabling
+    -- LoRaWAN related event topics.
+    loRaWAN :: Prelude.Maybe LoRaWANJoinResourceTypeEventConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JoinResourceTypeEventConfiguration' 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:
+--
+-- 'loRaWAN', 'joinResourceTypeEventConfiguration_loRaWAN' - Join resource type event configuration object for enabling or disabling
+-- LoRaWAN related event topics.
+newJoinResourceTypeEventConfiguration ::
+  JoinResourceTypeEventConfiguration
+newJoinResourceTypeEventConfiguration =
+  JoinResourceTypeEventConfiguration'
+    { loRaWAN =
+        Prelude.Nothing
+    }
+
+-- | Join resource type event configuration object for enabling or disabling
+-- LoRaWAN related event topics.
+joinResourceTypeEventConfiguration_loRaWAN :: Lens.Lens' JoinResourceTypeEventConfiguration (Prelude.Maybe LoRaWANJoinResourceTypeEventConfiguration)
+joinResourceTypeEventConfiguration_loRaWAN = Lens.lens (\JoinResourceTypeEventConfiguration' {loRaWAN} -> loRaWAN) (\s@JoinResourceTypeEventConfiguration' {} a -> s {loRaWAN = a} :: JoinResourceTypeEventConfiguration)
+
+instance
+  Data.FromJSON
+    JoinResourceTypeEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "JoinResourceTypeEventConfiguration"
+      ( \x ->
+          JoinResourceTypeEventConfiguration'
+            Prelude.<$> (x Data..:? "LoRaWAN")
+      )
+
+instance
+  Prelude.Hashable
+    JoinResourceTypeEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    JoinResourceTypeEventConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` loRaWAN
+
+instance
+  Prelude.NFData
+    JoinResourceTypeEventConfiguration
+  where
+  rnf JoinResourceTypeEventConfiguration' {..} =
+    Prelude.rnf loRaWAN
+
+instance
+  Data.ToJSON
+    JoinResourceTypeEventConfiguration
+  where
+  toJSON JoinResourceTypeEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("LoRaWAN" Data..=) Prelude.<$> loRaWAN]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANConnectionStatusEventNotificationConfigurations.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANConnectionStatusEventNotificationConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANConnectionStatusEventNotificationConfigurations.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.IoTWireless.Types.LoRaWANConnectionStatusEventNotificationConfigurations
+-- 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.IoTWireless.Types.LoRaWANConnectionStatusEventNotificationConfigurations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Object for LoRaWAN connection status resource type event configuration.
+--
+-- /See:/ 'newLoRaWANConnectionStatusEventNotificationConfigurations' smart constructor.
+data LoRaWANConnectionStatusEventNotificationConfigurations = LoRaWANConnectionStatusEventNotificationConfigurations'
+  { -- | Denotes whether the gateway EUI connection status event topic is enabled
+    -- or disabled.
+    gatewayEuiEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANConnectionStatusEventNotificationConfigurations' 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:
+--
+-- 'gatewayEuiEventTopic', 'loRaWANConnectionStatusEventNotificationConfigurations_gatewayEuiEventTopic' - Denotes whether the gateway EUI connection status event topic is enabled
+-- or disabled.
+newLoRaWANConnectionStatusEventNotificationConfigurations ::
+  LoRaWANConnectionStatusEventNotificationConfigurations
+newLoRaWANConnectionStatusEventNotificationConfigurations =
+  LoRaWANConnectionStatusEventNotificationConfigurations'
+    { gatewayEuiEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Denotes whether the gateway EUI connection status event topic is enabled
+-- or disabled.
+loRaWANConnectionStatusEventNotificationConfigurations_gatewayEuiEventTopic :: Lens.Lens' LoRaWANConnectionStatusEventNotificationConfigurations (Prelude.Maybe EventNotificationTopicStatus)
+loRaWANConnectionStatusEventNotificationConfigurations_gatewayEuiEventTopic = Lens.lens (\LoRaWANConnectionStatusEventNotificationConfigurations' {gatewayEuiEventTopic} -> gatewayEuiEventTopic) (\s@LoRaWANConnectionStatusEventNotificationConfigurations' {} a -> s {gatewayEuiEventTopic = a} :: LoRaWANConnectionStatusEventNotificationConfigurations)
+
+instance
+  Data.FromJSON
+    LoRaWANConnectionStatusEventNotificationConfigurations
+  where
+  parseJSON =
+    Data.withObject
+      "LoRaWANConnectionStatusEventNotificationConfigurations"
+      ( \x ->
+          LoRaWANConnectionStatusEventNotificationConfigurations'
+            Prelude.<$> (x Data..:? "GatewayEuiEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    LoRaWANConnectionStatusEventNotificationConfigurations
+  where
+  hashWithSalt
+    _salt
+    LoRaWANConnectionStatusEventNotificationConfigurations' {..} =
+      _salt `Prelude.hashWithSalt` gatewayEuiEventTopic
+
+instance
+  Prelude.NFData
+    LoRaWANConnectionStatusEventNotificationConfigurations
+  where
+  rnf
+    LoRaWANConnectionStatusEventNotificationConfigurations' {..} =
+      Prelude.rnf gatewayEuiEventTopic
+
+instance
+  Data.ToJSON
+    LoRaWANConnectionStatusEventNotificationConfigurations
+  where
+  toJSON
+    LoRaWANConnectionStatusEventNotificationConfigurations' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("GatewayEuiEventTopic" Data..=)
+                Prelude.<$> gatewayEuiEventTopic
+            ]
+        )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANConnectionStatusResourceTypeEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANConnectionStatusResourceTypeEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANConnectionStatusResourceTypeEventConfiguration.hs
@@ -0,0 +1,102 @@
+{-# 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.IoTWireless.Types.LoRaWANConnectionStatusResourceTypeEventConfiguration
+-- 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.IoTWireless.Types.LoRaWANConnectionStatusResourceTypeEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Object for LoRaWAN connection status resource type event configuration.
+--
+-- /See:/ 'newLoRaWANConnectionStatusResourceTypeEventConfiguration' smart constructor.
+data LoRaWANConnectionStatusResourceTypeEventConfiguration = LoRaWANConnectionStatusResourceTypeEventConfiguration'
+  { -- | Denotes whether the wireless gateway connection status event topic is
+    -- enabled or disabled.
+    wirelessGatewayEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANConnectionStatusResourceTypeEventConfiguration' 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:
+--
+-- 'wirelessGatewayEventTopic', 'loRaWANConnectionStatusResourceTypeEventConfiguration_wirelessGatewayEventTopic' - Denotes whether the wireless gateway connection status event topic is
+-- enabled or disabled.
+newLoRaWANConnectionStatusResourceTypeEventConfiguration ::
+  LoRaWANConnectionStatusResourceTypeEventConfiguration
+newLoRaWANConnectionStatusResourceTypeEventConfiguration =
+  LoRaWANConnectionStatusResourceTypeEventConfiguration'
+    { wirelessGatewayEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Denotes whether the wireless gateway connection status event topic is
+-- enabled or disabled.
+loRaWANConnectionStatusResourceTypeEventConfiguration_wirelessGatewayEventTopic :: Lens.Lens' LoRaWANConnectionStatusResourceTypeEventConfiguration (Prelude.Maybe EventNotificationTopicStatus)
+loRaWANConnectionStatusResourceTypeEventConfiguration_wirelessGatewayEventTopic = Lens.lens (\LoRaWANConnectionStatusResourceTypeEventConfiguration' {wirelessGatewayEventTopic} -> wirelessGatewayEventTopic) (\s@LoRaWANConnectionStatusResourceTypeEventConfiguration' {} a -> s {wirelessGatewayEventTopic = a} :: LoRaWANConnectionStatusResourceTypeEventConfiguration)
+
+instance
+  Data.FromJSON
+    LoRaWANConnectionStatusResourceTypeEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "LoRaWANConnectionStatusResourceTypeEventConfiguration"
+      ( \x ->
+          LoRaWANConnectionStatusResourceTypeEventConfiguration'
+            Prelude.<$> (x Data..:? "WirelessGatewayEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    LoRaWANConnectionStatusResourceTypeEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    LoRaWANConnectionStatusResourceTypeEventConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` wirelessGatewayEventTopic
+
+instance
+  Prelude.NFData
+    LoRaWANConnectionStatusResourceTypeEventConfiguration
+  where
+  rnf
+    LoRaWANConnectionStatusResourceTypeEventConfiguration' {..} =
+      Prelude.rnf wirelessGatewayEventTopic
+
+instance
+  Data.ToJSON
+    LoRaWANConnectionStatusResourceTypeEventConfiguration
+  where
+  toJSON
+    LoRaWANConnectionStatusResourceTypeEventConfiguration' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("WirelessGatewayEventTopic" Data..=)
+                Prelude.<$> wirelessGatewayEventTopic
+            ]
+        )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANDevice.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANDevice.hs
@@ -0,0 +1,177 @@
+{-# 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.IoTWireless.Types.LoRaWANDevice
+-- 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.IoTWireless.Types.LoRaWANDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.AbpV1_0_x
+import Amazonka.IoTWireless.Types.AbpV1_1
+import Amazonka.IoTWireless.Types.FPorts
+import Amazonka.IoTWireless.Types.OtaaV1_0_x
+import Amazonka.IoTWireless.Types.OtaaV1_1
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWAN object for create functions.
+--
+-- /See:/ 'newLoRaWANDevice' smart constructor.
+data LoRaWANDevice = LoRaWANDevice'
+  { -- | LoRaWAN object for create APIs
+    abpV1_0_x :: Prelude.Maybe AbpV1_0_x,
+    -- | ABP device object for create APIs for v1.1
+    abpV1_1 :: Prelude.Maybe AbpV1_1,
+    -- | The DevEUI value.
+    devEui :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the device profile for the new wireless device.
+    deviceProfileId :: Prelude.Maybe Prelude.Text,
+    fPorts :: Prelude.Maybe FPorts,
+    -- | OTAA device object for create APIs for v1.0.x
+    otaaV1_0_x :: Prelude.Maybe OtaaV1_0_x,
+    -- | OTAA device object for v1.1 for create APIs
+    otaaV1_1 :: Prelude.Maybe OtaaV1_1,
+    -- | The ID of the service profile.
+    serviceProfileId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANDevice' 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:
+--
+-- 'abpV1_0_x', 'loRaWANDevice_abpV1_0_x' - LoRaWAN object for create APIs
+--
+-- 'abpV1_1', 'loRaWANDevice_abpV1_1' - ABP device object for create APIs for v1.1
+--
+-- 'devEui', 'loRaWANDevice_devEui' - The DevEUI value.
+--
+-- 'deviceProfileId', 'loRaWANDevice_deviceProfileId' - The ID of the device profile for the new wireless device.
+--
+-- 'fPorts', 'loRaWANDevice_fPorts' - Undocumented member.
+--
+-- 'otaaV1_0_x', 'loRaWANDevice_otaaV1_0_x' - OTAA device object for create APIs for v1.0.x
+--
+-- 'otaaV1_1', 'loRaWANDevice_otaaV1_1' - OTAA device object for v1.1 for create APIs
+--
+-- 'serviceProfileId', 'loRaWANDevice_serviceProfileId' - The ID of the service profile.
+newLoRaWANDevice ::
+  LoRaWANDevice
+newLoRaWANDevice =
+  LoRaWANDevice'
+    { abpV1_0_x = Prelude.Nothing,
+      abpV1_1 = Prelude.Nothing,
+      devEui = Prelude.Nothing,
+      deviceProfileId = Prelude.Nothing,
+      fPorts = Prelude.Nothing,
+      otaaV1_0_x = Prelude.Nothing,
+      otaaV1_1 = Prelude.Nothing,
+      serviceProfileId = Prelude.Nothing
+    }
+
+-- | LoRaWAN object for create APIs
+loRaWANDevice_abpV1_0_x :: Lens.Lens' LoRaWANDevice (Prelude.Maybe AbpV1_0_x)
+loRaWANDevice_abpV1_0_x = Lens.lens (\LoRaWANDevice' {abpV1_0_x} -> abpV1_0_x) (\s@LoRaWANDevice' {} a -> s {abpV1_0_x = a} :: LoRaWANDevice)
+
+-- | ABP device object for create APIs for v1.1
+loRaWANDevice_abpV1_1 :: Lens.Lens' LoRaWANDevice (Prelude.Maybe AbpV1_1)
+loRaWANDevice_abpV1_1 = Lens.lens (\LoRaWANDevice' {abpV1_1} -> abpV1_1) (\s@LoRaWANDevice' {} a -> s {abpV1_1 = a} :: LoRaWANDevice)
+
+-- | The DevEUI value.
+loRaWANDevice_devEui :: Lens.Lens' LoRaWANDevice (Prelude.Maybe Prelude.Text)
+loRaWANDevice_devEui = Lens.lens (\LoRaWANDevice' {devEui} -> devEui) (\s@LoRaWANDevice' {} a -> s {devEui = a} :: LoRaWANDevice)
+
+-- | The ID of the device profile for the new wireless device.
+loRaWANDevice_deviceProfileId :: Lens.Lens' LoRaWANDevice (Prelude.Maybe Prelude.Text)
+loRaWANDevice_deviceProfileId = Lens.lens (\LoRaWANDevice' {deviceProfileId} -> deviceProfileId) (\s@LoRaWANDevice' {} a -> s {deviceProfileId = a} :: LoRaWANDevice)
+
+-- | Undocumented member.
+loRaWANDevice_fPorts :: Lens.Lens' LoRaWANDevice (Prelude.Maybe FPorts)
+loRaWANDevice_fPorts = Lens.lens (\LoRaWANDevice' {fPorts} -> fPorts) (\s@LoRaWANDevice' {} a -> s {fPorts = a} :: LoRaWANDevice)
+
+-- | OTAA device object for create APIs for v1.0.x
+loRaWANDevice_otaaV1_0_x :: Lens.Lens' LoRaWANDevice (Prelude.Maybe OtaaV1_0_x)
+loRaWANDevice_otaaV1_0_x = Lens.lens (\LoRaWANDevice' {otaaV1_0_x} -> otaaV1_0_x) (\s@LoRaWANDevice' {} a -> s {otaaV1_0_x = a} :: LoRaWANDevice)
+
+-- | OTAA device object for v1.1 for create APIs
+loRaWANDevice_otaaV1_1 :: Lens.Lens' LoRaWANDevice (Prelude.Maybe OtaaV1_1)
+loRaWANDevice_otaaV1_1 = Lens.lens (\LoRaWANDevice' {otaaV1_1} -> otaaV1_1) (\s@LoRaWANDevice' {} a -> s {otaaV1_1 = a} :: LoRaWANDevice)
+
+-- | The ID of the service profile.
+loRaWANDevice_serviceProfileId :: Lens.Lens' LoRaWANDevice (Prelude.Maybe Prelude.Text)
+loRaWANDevice_serviceProfileId = Lens.lens (\LoRaWANDevice' {serviceProfileId} -> serviceProfileId) (\s@LoRaWANDevice' {} a -> s {serviceProfileId = a} :: LoRaWANDevice)
+
+instance Data.FromJSON LoRaWANDevice where
+  parseJSON =
+    Data.withObject
+      "LoRaWANDevice"
+      ( \x ->
+          LoRaWANDevice'
+            Prelude.<$> (x Data..:? "AbpV1_0_x")
+            Prelude.<*> (x Data..:? "AbpV1_1")
+            Prelude.<*> (x Data..:? "DevEui")
+            Prelude.<*> (x Data..:? "DeviceProfileId")
+            Prelude.<*> (x Data..:? "FPorts")
+            Prelude.<*> (x Data..:? "OtaaV1_0_x")
+            Prelude.<*> (x Data..:? "OtaaV1_1")
+            Prelude.<*> (x Data..:? "ServiceProfileId")
+      )
+
+instance Prelude.Hashable LoRaWANDevice where
+  hashWithSalt _salt LoRaWANDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` abpV1_0_x
+      `Prelude.hashWithSalt` abpV1_1
+      `Prelude.hashWithSalt` devEui
+      `Prelude.hashWithSalt` deviceProfileId
+      `Prelude.hashWithSalt` fPorts
+      `Prelude.hashWithSalt` otaaV1_0_x
+      `Prelude.hashWithSalt` otaaV1_1
+      `Prelude.hashWithSalt` serviceProfileId
+
+instance Prelude.NFData LoRaWANDevice where
+  rnf LoRaWANDevice' {..} =
+    Prelude.rnf abpV1_0_x
+      `Prelude.seq` Prelude.rnf abpV1_1
+      `Prelude.seq` Prelude.rnf devEui
+      `Prelude.seq` Prelude.rnf deviceProfileId
+      `Prelude.seq` Prelude.rnf fPorts
+      `Prelude.seq` Prelude.rnf otaaV1_0_x
+      `Prelude.seq` Prelude.rnf otaaV1_1
+      `Prelude.seq` Prelude.rnf serviceProfileId
+
+instance Data.ToJSON LoRaWANDevice where
+  toJSON LoRaWANDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AbpV1_0_x" Data..=) Prelude.<$> abpV1_0_x,
+            ("AbpV1_1" Data..=) Prelude.<$> abpV1_1,
+            ("DevEui" Data..=) Prelude.<$> devEui,
+            ("DeviceProfileId" Data..=)
+              Prelude.<$> deviceProfileId,
+            ("FPorts" Data..=) Prelude.<$> fPorts,
+            ("OtaaV1_0_x" Data..=) Prelude.<$> otaaV1_0_x,
+            ("OtaaV1_1" Data..=) Prelude.<$> otaaV1_1,
+            ("ServiceProfileId" Data..=)
+              Prelude.<$> serviceProfileId
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANDeviceMetadata.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANDeviceMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANDeviceMetadata.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.IoTWireless.Types.LoRaWANDeviceMetadata
+-- 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.IoTWireless.Types.LoRaWANDeviceMetadata where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANGatewayMetadata
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWAN device metatdata.
+--
+-- /See:/ 'newLoRaWANDeviceMetadata' smart constructor.
+data LoRaWANDeviceMetadata = LoRaWANDeviceMetadata'
+  { -- | The DataRate value.
+    dataRate :: Prelude.Maybe Prelude.Int,
+    -- | The DevEUI value.
+    devEui :: Prelude.Maybe Prelude.Text,
+    -- | The FPort value.
+    fPort :: Prelude.Maybe Prelude.Int,
+    -- | The device\'s channel frequency in Hz.
+    frequency :: Prelude.Maybe Prelude.Int,
+    -- | Information about the gateways accessed by the device.
+    gateways :: Prelude.Maybe [LoRaWANGatewayMetadata],
+    -- | The date and time of the metadata.
+    timestamp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANDeviceMetadata' 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:
+--
+-- 'dataRate', 'loRaWANDeviceMetadata_dataRate' - The DataRate value.
+--
+-- 'devEui', 'loRaWANDeviceMetadata_devEui' - The DevEUI value.
+--
+-- 'fPort', 'loRaWANDeviceMetadata_fPort' - The FPort value.
+--
+-- 'frequency', 'loRaWANDeviceMetadata_frequency' - The device\'s channel frequency in Hz.
+--
+-- 'gateways', 'loRaWANDeviceMetadata_gateways' - Information about the gateways accessed by the device.
+--
+-- 'timestamp', 'loRaWANDeviceMetadata_timestamp' - The date and time of the metadata.
+newLoRaWANDeviceMetadata ::
+  LoRaWANDeviceMetadata
+newLoRaWANDeviceMetadata =
+  LoRaWANDeviceMetadata'
+    { dataRate = Prelude.Nothing,
+      devEui = Prelude.Nothing,
+      fPort = Prelude.Nothing,
+      frequency = Prelude.Nothing,
+      gateways = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | The DataRate value.
+loRaWANDeviceMetadata_dataRate :: Lens.Lens' LoRaWANDeviceMetadata (Prelude.Maybe Prelude.Int)
+loRaWANDeviceMetadata_dataRate = Lens.lens (\LoRaWANDeviceMetadata' {dataRate} -> dataRate) (\s@LoRaWANDeviceMetadata' {} a -> s {dataRate = a} :: LoRaWANDeviceMetadata)
+
+-- | The DevEUI value.
+loRaWANDeviceMetadata_devEui :: Lens.Lens' LoRaWANDeviceMetadata (Prelude.Maybe Prelude.Text)
+loRaWANDeviceMetadata_devEui = Lens.lens (\LoRaWANDeviceMetadata' {devEui} -> devEui) (\s@LoRaWANDeviceMetadata' {} a -> s {devEui = a} :: LoRaWANDeviceMetadata)
+
+-- | The FPort value.
+loRaWANDeviceMetadata_fPort :: Lens.Lens' LoRaWANDeviceMetadata (Prelude.Maybe Prelude.Int)
+loRaWANDeviceMetadata_fPort = Lens.lens (\LoRaWANDeviceMetadata' {fPort} -> fPort) (\s@LoRaWANDeviceMetadata' {} a -> s {fPort = a} :: LoRaWANDeviceMetadata)
+
+-- | The device\'s channel frequency in Hz.
+loRaWANDeviceMetadata_frequency :: Lens.Lens' LoRaWANDeviceMetadata (Prelude.Maybe Prelude.Int)
+loRaWANDeviceMetadata_frequency = Lens.lens (\LoRaWANDeviceMetadata' {frequency} -> frequency) (\s@LoRaWANDeviceMetadata' {} a -> s {frequency = a} :: LoRaWANDeviceMetadata)
+
+-- | Information about the gateways accessed by the device.
+loRaWANDeviceMetadata_gateways :: Lens.Lens' LoRaWANDeviceMetadata (Prelude.Maybe [LoRaWANGatewayMetadata])
+loRaWANDeviceMetadata_gateways = Lens.lens (\LoRaWANDeviceMetadata' {gateways} -> gateways) (\s@LoRaWANDeviceMetadata' {} a -> s {gateways = a} :: LoRaWANDeviceMetadata) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time of the metadata.
+loRaWANDeviceMetadata_timestamp :: Lens.Lens' LoRaWANDeviceMetadata (Prelude.Maybe Prelude.Text)
+loRaWANDeviceMetadata_timestamp = Lens.lens (\LoRaWANDeviceMetadata' {timestamp} -> timestamp) (\s@LoRaWANDeviceMetadata' {} a -> s {timestamp = a} :: LoRaWANDeviceMetadata)
+
+instance Data.FromJSON LoRaWANDeviceMetadata where
+  parseJSON =
+    Data.withObject
+      "LoRaWANDeviceMetadata"
+      ( \x ->
+          LoRaWANDeviceMetadata'
+            Prelude.<$> (x Data..:? "DataRate")
+            Prelude.<*> (x Data..:? "DevEui")
+            Prelude.<*> (x Data..:? "FPort")
+            Prelude.<*> (x Data..:? "Frequency")
+            Prelude.<*> (x Data..:? "Gateways" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Timestamp")
+      )
+
+instance Prelude.Hashable LoRaWANDeviceMetadata where
+  hashWithSalt _salt LoRaWANDeviceMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataRate
+      `Prelude.hashWithSalt` devEui
+      `Prelude.hashWithSalt` fPort
+      `Prelude.hashWithSalt` frequency
+      `Prelude.hashWithSalt` gateways
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData LoRaWANDeviceMetadata where
+  rnf LoRaWANDeviceMetadata' {..} =
+    Prelude.rnf dataRate
+      `Prelude.seq` Prelude.rnf devEui
+      `Prelude.seq` Prelude.rnf fPort
+      `Prelude.seq` Prelude.rnf frequency
+      `Prelude.seq` Prelude.rnf gateways
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANDeviceProfile.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANDeviceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANDeviceProfile.hs
@@ -0,0 +1,327 @@
+{-# 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.IoTWireless.Types.LoRaWANDeviceProfile
+-- 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.IoTWireless.Types.LoRaWANDeviceProfile 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
+
+-- | LoRaWANDeviceProfile object.
+--
+-- /See:/ 'newLoRaWANDeviceProfile' smart constructor.
+data LoRaWANDeviceProfile = LoRaWANDeviceProfile'
+  { -- | The ClassBTimeout value.
+    classBTimeout :: Prelude.Maybe Prelude.Natural,
+    -- | The ClassCTimeout value.
+    classCTimeout :: Prelude.Maybe Prelude.Natural,
+    -- | The list of values that make up the FactoryPresetFreqs value.
+    factoryPresetFreqsList :: Prelude.Maybe [Prelude.Natural],
+    -- | The MAC version (such as OTAA 1.1 or OTAA 1.0.3) to use with this device
+    -- profile.
+    macVersion :: Prelude.Maybe Prelude.Text,
+    -- | The MaxDutyCycle value.
+    maxDutyCycle :: Prelude.Maybe Prelude.Natural,
+    -- | The MaxEIRP value.
+    maxEirp :: Prelude.Maybe Prelude.Natural,
+    -- | The PingSlotDR value.
+    pingSlotDr :: Prelude.Maybe Prelude.Natural,
+    -- | The PingSlotFreq value.
+    pingSlotFreq :: Prelude.Maybe Prelude.Natural,
+    -- | The PingSlotPeriod value.
+    pingSlotPeriod :: Prelude.Maybe Prelude.Natural,
+    -- | The version of regional parameters.
+    regParamsRevision :: Prelude.Maybe Prelude.Text,
+    -- | The frequency band (RFRegion) value.
+    rfRegion :: Prelude.Maybe Prelude.Text,
+    -- | The RXDataRate2 value.
+    rxDataRate2 :: Prelude.Maybe Prelude.Natural,
+    -- | The RXDelay1 value.
+    rxDelay1 :: Prelude.Maybe Prelude.Natural,
+    -- | The RXDROffset1 value.
+    rxDrOffset1 :: Prelude.Maybe Prelude.Natural,
+    -- | The RXFreq2 value.
+    rxFreq2 :: Prelude.Maybe Prelude.Natural,
+    -- | The Supports32BitFCnt value.
+    supports32BitFCnt :: Prelude.Maybe Prelude.Bool,
+    -- | The SupportsClassB value.
+    supportsClassB :: Prelude.Maybe Prelude.Bool,
+    -- | The SupportsClassC value.
+    supportsClassC :: Prelude.Maybe Prelude.Bool,
+    -- | The SupportsJoin value.
+    supportsJoin :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANDeviceProfile' 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:
+--
+-- 'classBTimeout', 'loRaWANDeviceProfile_classBTimeout' - The ClassBTimeout value.
+--
+-- 'classCTimeout', 'loRaWANDeviceProfile_classCTimeout' - The ClassCTimeout value.
+--
+-- 'factoryPresetFreqsList', 'loRaWANDeviceProfile_factoryPresetFreqsList' - The list of values that make up the FactoryPresetFreqs value.
+--
+-- 'macVersion', 'loRaWANDeviceProfile_macVersion' - The MAC version (such as OTAA 1.1 or OTAA 1.0.3) to use with this device
+-- profile.
+--
+-- 'maxDutyCycle', 'loRaWANDeviceProfile_maxDutyCycle' - The MaxDutyCycle value.
+--
+-- 'maxEirp', 'loRaWANDeviceProfile_maxEirp' - The MaxEIRP value.
+--
+-- 'pingSlotDr', 'loRaWANDeviceProfile_pingSlotDr' - The PingSlotDR value.
+--
+-- 'pingSlotFreq', 'loRaWANDeviceProfile_pingSlotFreq' - The PingSlotFreq value.
+--
+-- 'pingSlotPeriod', 'loRaWANDeviceProfile_pingSlotPeriod' - The PingSlotPeriod value.
+--
+-- 'regParamsRevision', 'loRaWANDeviceProfile_regParamsRevision' - The version of regional parameters.
+--
+-- 'rfRegion', 'loRaWANDeviceProfile_rfRegion' - The frequency band (RFRegion) value.
+--
+-- 'rxDataRate2', 'loRaWANDeviceProfile_rxDataRate2' - The RXDataRate2 value.
+--
+-- 'rxDelay1', 'loRaWANDeviceProfile_rxDelay1' - The RXDelay1 value.
+--
+-- 'rxDrOffset1', 'loRaWANDeviceProfile_rxDrOffset1' - The RXDROffset1 value.
+--
+-- 'rxFreq2', 'loRaWANDeviceProfile_rxFreq2' - The RXFreq2 value.
+--
+-- 'supports32BitFCnt', 'loRaWANDeviceProfile_supports32BitFCnt' - The Supports32BitFCnt value.
+--
+-- 'supportsClassB', 'loRaWANDeviceProfile_supportsClassB' - The SupportsClassB value.
+--
+-- 'supportsClassC', 'loRaWANDeviceProfile_supportsClassC' - The SupportsClassC value.
+--
+-- 'supportsJoin', 'loRaWANDeviceProfile_supportsJoin' - The SupportsJoin value.
+newLoRaWANDeviceProfile ::
+  LoRaWANDeviceProfile
+newLoRaWANDeviceProfile =
+  LoRaWANDeviceProfile'
+    { classBTimeout =
+        Prelude.Nothing,
+      classCTimeout = Prelude.Nothing,
+      factoryPresetFreqsList = Prelude.Nothing,
+      macVersion = Prelude.Nothing,
+      maxDutyCycle = Prelude.Nothing,
+      maxEirp = Prelude.Nothing,
+      pingSlotDr = Prelude.Nothing,
+      pingSlotFreq = Prelude.Nothing,
+      pingSlotPeriod = Prelude.Nothing,
+      regParamsRevision = Prelude.Nothing,
+      rfRegion = Prelude.Nothing,
+      rxDataRate2 = Prelude.Nothing,
+      rxDelay1 = Prelude.Nothing,
+      rxDrOffset1 = Prelude.Nothing,
+      rxFreq2 = Prelude.Nothing,
+      supports32BitFCnt = Prelude.Nothing,
+      supportsClassB = Prelude.Nothing,
+      supportsClassC = Prelude.Nothing,
+      supportsJoin = Prelude.Nothing
+    }
+
+-- | The ClassBTimeout value.
+loRaWANDeviceProfile_classBTimeout :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_classBTimeout = Lens.lens (\LoRaWANDeviceProfile' {classBTimeout} -> classBTimeout) (\s@LoRaWANDeviceProfile' {} a -> s {classBTimeout = a} :: LoRaWANDeviceProfile)
+
+-- | The ClassCTimeout value.
+loRaWANDeviceProfile_classCTimeout :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_classCTimeout = Lens.lens (\LoRaWANDeviceProfile' {classCTimeout} -> classCTimeout) (\s@LoRaWANDeviceProfile' {} a -> s {classCTimeout = a} :: LoRaWANDeviceProfile)
+
+-- | The list of values that make up the FactoryPresetFreqs value.
+loRaWANDeviceProfile_factoryPresetFreqsList :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe [Prelude.Natural])
+loRaWANDeviceProfile_factoryPresetFreqsList = Lens.lens (\LoRaWANDeviceProfile' {factoryPresetFreqsList} -> factoryPresetFreqsList) (\s@LoRaWANDeviceProfile' {} a -> s {factoryPresetFreqsList = a} :: LoRaWANDeviceProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The MAC version (such as OTAA 1.1 or OTAA 1.0.3) to use with this device
+-- profile.
+loRaWANDeviceProfile_macVersion :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Text)
+loRaWANDeviceProfile_macVersion = Lens.lens (\LoRaWANDeviceProfile' {macVersion} -> macVersion) (\s@LoRaWANDeviceProfile' {} a -> s {macVersion = a} :: LoRaWANDeviceProfile)
+
+-- | The MaxDutyCycle value.
+loRaWANDeviceProfile_maxDutyCycle :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_maxDutyCycle = Lens.lens (\LoRaWANDeviceProfile' {maxDutyCycle} -> maxDutyCycle) (\s@LoRaWANDeviceProfile' {} a -> s {maxDutyCycle = a} :: LoRaWANDeviceProfile)
+
+-- | The MaxEIRP value.
+loRaWANDeviceProfile_maxEirp :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_maxEirp = Lens.lens (\LoRaWANDeviceProfile' {maxEirp} -> maxEirp) (\s@LoRaWANDeviceProfile' {} a -> s {maxEirp = a} :: LoRaWANDeviceProfile)
+
+-- | The PingSlotDR value.
+loRaWANDeviceProfile_pingSlotDr :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_pingSlotDr = Lens.lens (\LoRaWANDeviceProfile' {pingSlotDr} -> pingSlotDr) (\s@LoRaWANDeviceProfile' {} a -> s {pingSlotDr = a} :: LoRaWANDeviceProfile)
+
+-- | The PingSlotFreq value.
+loRaWANDeviceProfile_pingSlotFreq :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_pingSlotFreq = Lens.lens (\LoRaWANDeviceProfile' {pingSlotFreq} -> pingSlotFreq) (\s@LoRaWANDeviceProfile' {} a -> s {pingSlotFreq = a} :: LoRaWANDeviceProfile)
+
+-- | The PingSlotPeriod value.
+loRaWANDeviceProfile_pingSlotPeriod :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_pingSlotPeriod = Lens.lens (\LoRaWANDeviceProfile' {pingSlotPeriod} -> pingSlotPeriod) (\s@LoRaWANDeviceProfile' {} a -> s {pingSlotPeriod = a} :: LoRaWANDeviceProfile)
+
+-- | The version of regional parameters.
+loRaWANDeviceProfile_regParamsRevision :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Text)
+loRaWANDeviceProfile_regParamsRevision = Lens.lens (\LoRaWANDeviceProfile' {regParamsRevision} -> regParamsRevision) (\s@LoRaWANDeviceProfile' {} a -> s {regParamsRevision = a} :: LoRaWANDeviceProfile)
+
+-- | The frequency band (RFRegion) value.
+loRaWANDeviceProfile_rfRegion :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Text)
+loRaWANDeviceProfile_rfRegion = Lens.lens (\LoRaWANDeviceProfile' {rfRegion} -> rfRegion) (\s@LoRaWANDeviceProfile' {} a -> s {rfRegion = a} :: LoRaWANDeviceProfile)
+
+-- | The RXDataRate2 value.
+loRaWANDeviceProfile_rxDataRate2 :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_rxDataRate2 = Lens.lens (\LoRaWANDeviceProfile' {rxDataRate2} -> rxDataRate2) (\s@LoRaWANDeviceProfile' {} a -> s {rxDataRate2 = a} :: LoRaWANDeviceProfile)
+
+-- | The RXDelay1 value.
+loRaWANDeviceProfile_rxDelay1 :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_rxDelay1 = Lens.lens (\LoRaWANDeviceProfile' {rxDelay1} -> rxDelay1) (\s@LoRaWANDeviceProfile' {} a -> s {rxDelay1 = a} :: LoRaWANDeviceProfile)
+
+-- | The RXDROffset1 value.
+loRaWANDeviceProfile_rxDrOffset1 :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_rxDrOffset1 = Lens.lens (\LoRaWANDeviceProfile' {rxDrOffset1} -> rxDrOffset1) (\s@LoRaWANDeviceProfile' {} a -> s {rxDrOffset1 = a} :: LoRaWANDeviceProfile)
+
+-- | The RXFreq2 value.
+loRaWANDeviceProfile_rxFreq2 :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANDeviceProfile_rxFreq2 = Lens.lens (\LoRaWANDeviceProfile' {rxFreq2} -> rxFreq2) (\s@LoRaWANDeviceProfile' {} a -> s {rxFreq2 = a} :: LoRaWANDeviceProfile)
+
+-- | The Supports32BitFCnt value.
+loRaWANDeviceProfile_supports32BitFCnt :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Bool)
+loRaWANDeviceProfile_supports32BitFCnt = Lens.lens (\LoRaWANDeviceProfile' {supports32BitFCnt} -> supports32BitFCnt) (\s@LoRaWANDeviceProfile' {} a -> s {supports32BitFCnt = a} :: LoRaWANDeviceProfile)
+
+-- | The SupportsClassB value.
+loRaWANDeviceProfile_supportsClassB :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Bool)
+loRaWANDeviceProfile_supportsClassB = Lens.lens (\LoRaWANDeviceProfile' {supportsClassB} -> supportsClassB) (\s@LoRaWANDeviceProfile' {} a -> s {supportsClassB = a} :: LoRaWANDeviceProfile)
+
+-- | The SupportsClassC value.
+loRaWANDeviceProfile_supportsClassC :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Bool)
+loRaWANDeviceProfile_supportsClassC = Lens.lens (\LoRaWANDeviceProfile' {supportsClassC} -> supportsClassC) (\s@LoRaWANDeviceProfile' {} a -> s {supportsClassC = a} :: LoRaWANDeviceProfile)
+
+-- | The SupportsJoin value.
+loRaWANDeviceProfile_supportsJoin :: Lens.Lens' LoRaWANDeviceProfile (Prelude.Maybe Prelude.Bool)
+loRaWANDeviceProfile_supportsJoin = Lens.lens (\LoRaWANDeviceProfile' {supportsJoin} -> supportsJoin) (\s@LoRaWANDeviceProfile' {} a -> s {supportsJoin = a} :: LoRaWANDeviceProfile)
+
+instance Data.FromJSON LoRaWANDeviceProfile where
+  parseJSON =
+    Data.withObject
+      "LoRaWANDeviceProfile"
+      ( \x ->
+          LoRaWANDeviceProfile'
+            Prelude.<$> (x Data..:? "ClassBTimeout")
+            Prelude.<*> (x Data..:? "ClassCTimeout")
+            Prelude.<*> ( x
+                            Data..:? "FactoryPresetFreqsList"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "MacVersion")
+            Prelude.<*> (x Data..:? "MaxDutyCycle")
+            Prelude.<*> (x Data..:? "MaxEirp")
+            Prelude.<*> (x Data..:? "PingSlotDr")
+            Prelude.<*> (x Data..:? "PingSlotFreq")
+            Prelude.<*> (x Data..:? "PingSlotPeriod")
+            Prelude.<*> (x Data..:? "RegParamsRevision")
+            Prelude.<*> (x Data..:? "RfRegion")
+            Prelude.<*> (x Data..:? "RxDataRate2")
+            Prelude.<*> (x Data..:? "RxDelay1")
+            Prelude.<*> (x Data..:? "RxDrOffset1")
+            Prelude.<*> (x Data..:? "RxFreq2")
+            Prelude.<*> (x Data..:? "Supports32BitFCnt")
+            Prelude.<*> (x Data..:? "SupportsClassB")
+            Prelude.<*> (x Data..:? "SupportsClassC")
+            Prelude.<*> (x Data..:? "SupportsJoin")
+      )
+
+instance Prelude.Hashable LoRaWANDeviceProfile where
+  hashWithSalt _salt LoRaWANDeviceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` classBTimeout
+      `Prelude.hashWithSalt` classCTimeout
+      `Prelude.hashWithSalt` factoryPresetFreqsList
+      `Prelude.hashWithSalt` macVersion
+      `Prelude.hashWithSalt` maxDutyCycle
+      `Prelude.hashWithSalt` maxEirp
+      `Prelude.hashWithSalt` pingSlotDr
+      `Prelude.hashWithSalt` pingSlotFreq
+      `Prelude.hashWithSalt` pingSlotPeriod
+      `Prelude.hashWithSalt` regParamsRevision
+      `Prelude.hashWithSalt` rfRegion
+      `Prelude.hashWithSalt` rxDataRate2
+      `Prelude.hashWithSalt` rxDelay1
+      `Prelude.hashWithSalt` rxDrOffset1
+      `Prelude.hashWithSalt` rxFreq2
+      `Prelude.hashWithSalt` supports32BitFCnt
+      `Prelude.hashWithSalt` supportsClassB
+      `Prelude.hashWithSalt` supportsClassC
+      `Prelude.hashWithSalt` supportsJoin
+
+instance Prelude.NFData LoRaWANDeviceProfile where
+  rnf LoRaWANDeviceProfile' {..} =
+    Prelude.rnf classBTimeout
+      `Prelude.seq` Prelude.rnf classCTimeout
+      `Prelude.seq` Prelude.rnf factoryPresetFreqsList
+      `Prelude.seq` Prelude.rnf macVersion
+      `Prelude.seq` Prelude.rnf maxDutyCycle
+      `Prelude.seq` Prelude.rnf maxEirp
+      `Prelude.seq` Prelude.rnf pingSlotDr
+      `Prelude.seq` Prelude.rnf pingSlotFreq
+      `Prelude.seq` Prelude.rnf pingSlotPeriod
+      `Prelude.seq` Prelude.rnf regParamsRevision
+      `Prelude.seq` Prelude.rnf rfRegion
+      `Prelude.seq` Prelude.rnf rxDataRate2
+      `Prelude.seq` Prelude.rnf rxDelay1
+      `Prelude.seq` Prelude.rnf rxDrOffset1
+      `Prelude.seq` Prelude.rnf rxFreq2
+      `Prelude.seq` Prelude.rnf supports32BitFCnt
+      `Prelude.seq` Prelude.rnf supportsClassB
+      `Prelude.seq` Prelude.rnf supportsClassC
+      `Prelude.seq` Prelude.rnf supportsJoin
+
+instance Data.ToJSON LoRaWANDeviceProfile where
+  toJSON LoRaWANDeviceProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClassBTimeout" Data..=) Prelude.<$> classBTimeout,
+            ("ClassCTimeout" Data..=) Prelude.<$> classCTimeout,
+            ("FactoryPresetFreqsList" Data..=)
+              Prelude.<$> factoryPresetFreqsList,
+            ("MacVersion" Data..=) Prelude.<$> macVersion,
+            ("MaxDutyCycle" Data..=) Prelude.<$> maxDutyCycle,
+            ("MaxEirp" Data..=) Prelude.<$> maxEirp,
+            ("PingSlotDr" Data..=) Prelude.<$> pingSlotDr,
+            ("PingSlotFreq" Data..=) Prelude.<$> pingSlotFreq,
+            ("PingSlotPeriod" Data..=)
+              Prelude.<$> pingSlotPeriod,
+            ("RegParamsRevision" Data..=)
+              Prelude.<$> regParamsRevision,
+            ("RfRegion" Data..=) Prelude.<$> rfRegion,
+            ("RxDataRate2" Data..=) Prelude.<$> rxDataRate2,
+            ("RxDelay1" Data..=) Prelude.<$> rxDelay1,
+            ("RxDrOffset1" Data..=) Prelude.<$> rxDrOffset1,
+            ("RxFreq2" Data..=) Prelude.<$> rxFreq2,
+            ("Supports32BitFCnt" Data..=)
+              Prelude.<$> supports32BitFCnt,
+            ("SupportsClassB" Data..=)
+              Prelude.<$> supportsClassB,
+            ("SupportsClassC" Data..=)
+              Prelude.<$> supportsClassC,
+            ("SupportsJoin" Data..=) Prelude.<$> supportsJoin
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANFuotaTask.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANFuotaTask.hs
@@ -0,0 +1,66 @@
+{-# 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.IoTWireless.Types.LoRaWANFuotaTask
+-- 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.IoTWireless.Types.LoRaWANFuotaTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.SupportedRfRegion
+import qualified Amazonka.Prelude as Prelude
+
+-- | The LoRaWAN information used with a FUOTA task.
+--
+-- /See:/ 'newLoRaWANFuotaTask' smart constructor.
+data LoRaWANFuotaTask = LoRaWANFuotaTask'
+  { rfRegion :: Prelude.Maybe SupportedRfRegion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANFuotaTask' 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:
+--
+-- 'rfRegion', 'loRaWANFuotaTask_rfRegion' - Undocumented member.
+newLoRaWANFuotaTask ::
+  LoRaWANFuotaTask
+newLoRaWANFuotaTask =
+  LoRaWANFuotaTask' {rfRegion = Prelude.Nothing}
+
+-- | Undocumented member.
+loRaWANFuotaTask_rfRegion :: Lens.Lens' LoRaWANFuotaTask (Prelude.Maybe SupportedRfRegion)
+loRaWANFuotaTask_rfRegion = Lens.lens (\LoRaWANFuotaTask' {rfRegion} -> rfRegion) (\s@LoRaWANFuotaTask' {} a -> s {rfRegion = a} :: LoRaWANFuotaTask)
+
+instance Prelude.Hashable LoRaWANFuotaTask where
+  hashWithSalt _salt LoRaWANFuotaTask' {..} =
+    _salt `Prelude.hashWithSalt` rfRegion
+
+instance Prelude.NFData LoRaWANFuotaTask where
+  rnf LoRaWANFuotaTask' {..} = Prelude.rnf rfRegion
+
+instance Data.ToJSON LoRaWANFuotaTask where
+  toJSON LoRaWANFuotaTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("RfRegion" Data..=) Prelude.<$> rfRegion]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANFuotaTaskGetInfo.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANFuotaTaskGetInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANFuotaTaskGetInfo.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.IoTWireless.Types.LoRaWANFuotaTaskGetInfo
+-- 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.IoTWireless.Types.LoRaWANFuotaTaskGetInfo 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 LoRaWAN information returned from getting a FUOTA task.
+--
+-- /See:/ 'newLoRaWANFuotaTaskGetInfo' smart constructor.
+data LoRaWANFuotaTaskGetInfo = LoRaWANFuotaTaskGetInfo'
+  { rfRegion :: Prelude.Maybe Prelude.Text,
+    startTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANFuotaTaskGetInfo' 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:
+--
+-- 'rfRegion', 'loRaWANFuotaTaskGetInfo_rfRegion' - Undocumented member.
+--
+-- 'startTime', 'loRaWANFuotaTaskGetInfo_startTime' - Undocumented member.
+newLoRaWANFuotaTaskGetInfo ::
+  LoRaWANFuotaTaskGetInfo
+newLoRaWANFuotaTaskGetInfo =
+  LoRaWANFuotaTaskGetInfo'
+    { rfRegion =
+        Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+loRaWANFuotaTaskGetInfo_rfRegion :: Lens.Lens' LoRaWANFuotaTaskGetInfo (Prelude.Maybe Prelude.Text)
+loRaWANFuotaTaskGetInfo_rfRegion = Lens.lens (\LoRaWANFuotaTaskGetInfo' {rfRegion} -> rfRegion) (\s@LoRaWANFuotaTaskGetInfo' {} a -> s {rfRegion = a} :: LoRaWANFuotaTaskGetInfo)
+
+-- | Undocumented member.
+loRaWANFuotaTaskGetInfo_startTime :: Lens.Lens' LoRaWANFuotaTaskGetInfo (Prelude.Maybe Prelude.UTCTime)
+loRaWANFuotaTaskGetInfo_startTime = Lens.lens (\LoRaWANFuotaTaskGetInfo' {startTime} -> startTime) (\s@LoRaWANFuotaTaskGetInfo' {} a -> s {startTime = a} :: LoRaWANFuotaTaskGetInfo) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON LoRaWANFuotaTaskGetInfo where
+  parseJSON =
+    Data.withObject
+      "LoRaWANFuotaTaskGetInfo"
+      ( \x ->
+          LoRaWANFuotaTaskGetInfo'
+            Prelude.<$> (x Data..:? "RfRegion")
+            Prelude.<*> (x Data..:? "StartTime")
+      )
+
+instance Prelude.Hashable LoRaWANFuotaTaskGetInfo where
+  hashWithSalt _salt LoRaWANFuotaTaskGetInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` rfRegion
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData LoRaWANFuotaTaskGetInfo where
+  rnf LoRaWANFuotaTaskGetInfo' {..} =
+    Prelude.rnf rfRegion
+      `Prelude.seq` Prelude.rnf startTime
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANGateway.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANGateway.hs
@@ -0,0 +1,147 @@
+{-# 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.IoTWireless.Types.LoRaWANGateway
+-- 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.IoTWireless.Types.LoRaWANGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.Beaconing
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWANGateway object.
+--
+-- /See:/ 'newLoRaWANGateway' smart constructor.
+data LoRaWANGateway = LoRaWANGateway'
+  { -- | Beaconing object information, which consists of the data rate and
+    -- frequency parameters.
+    beaconing :: Prelude.Maybe Beaconing,
+    -- | The gateway\'s EUI value.
+    gatewayEui :: Prelude.Maybe Prelude.Text,
+    joinEuiFilters :: Prelude.Maybe [Prelude.NonEmpty Prelude.Text],
+    netIdFilters :: Prelude.Maybe [Prelude.Text],
+    -- | The frequency band (RFRegion) value.
+    rfRegion :: Prelude.Maybe Prelude.Text,
+    subBands :: Prelude.Maybe [Prelude.Natural]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANGateway' 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:
+--
+-- 'beaconing', 'loRaWANGateway_beaconing' - Beaconing object information, which consists of the data rate and
+-- frequency parameters.
+--
+-- 'gatewayEui', 'loRaWANGateway_gatewayEui' - The gateway\'s EUI value.
+--
+-- 'joinEuiFilters', 'loRaWANGateway_joinEuiFilters' - Undocumented member.
+--
+-- 'netIdFilters', 'loRaWANGateway_netIdFilters' - Undocumented member.
+--
+-- 'rfRegion', 'loRaWANGateway_rfRegion' - The frequency band (RFRegion) value.
+--
+-- 'subBands', 'loRaWANGateway_subBands' - Undocumented member.
+newLoRaWANGateway ::
+  LoRaWANGateway
+newLoRaWANGateway =
+  LoRaWANGateway'
+    { beaconing = Prelude.Nothing,
+      gatewayEui = Prelude.Nothing,
+      joinEuiFilters = Prelude.Nothing,
+      netIdFilters = Prelude.Nothing,
+      rfRegion = Prelude.Nothing,
+      subBands = Prelude.Nothing
+    }
+
+-- | Beaconing object information, which consists of the data rate and
+-- frequency parameters.
+loRaWANGateway_beaconing :: Lens.Lens' LoRaWANGateway (Prelude.Maybe Beaconing)
+loRaWANGateway_beaconing = Lens.lens (\LoRaWANGateway' {beaconing} -> beaconing) (\s@LoRaWANGateway' {} a -> s {beaconing = a} :: LoRaWANGateway)
+
+-- | The gateway\'s EUI value.
+loRaWANGateway_gatewayEui :: Lens.Lens' LoRaWANGateway (Prelude.Maybe Prelude.Text)
+loRaWANGateway_gatewayEui = Lens.lens (\LoRaWANGateway' {gatewayEui} -> gatewayEui) (\s@LoRaWANGateway' {} a -> s {gatewayEui = a} :: LoRaWANGateway)
+
+-- | Undocumented member.
+loRaWANGateway_joinEuiFilters :: Lens.Lens' LoRaWANGateway (Prelude.Maybe [Prelude.NonEmpty Prelude.Text])
+loRaWANGateway_joinEuiFilters = Lens.lens (\LoRaWANGateway' {joinEuiFilters} -> joinEuiFilters) (\s@LoRaWANGateway' {} a -> s {joinEuiFilters = a} :: LoRaWANGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+loRaWANGateway_netIdFilters :: Lens.Lens' LoRaWANGateway (Prelude.Maybe [Prelude.Text])
+loRaWANGateway_netIdFilters = Lens.lens (\LoRaWANGateway' {netIdFilters} -> netIdFilters) (\s@LoRaWANGateway' {} a -> s {netIdFilters = a} :: LoRaWANGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The frequency band (RFRegion) value.
+loRaWANGateway_rfRegion :: Lens.Lens' LoRaWANGateway (Prelude.Maybe Prelude.Text)
+loRaWANGateway_rfRegion = Lens.lens (\LoRaWANGateway' {rfRegion} -> rfRegion) (\s@LoRaWANGateway' {} a -> s {rfRegion = a} :: LoRaWANGateway)
+
+-- | Undocumented member.
+loRaWANGateway_subBands :: Lens.Lens' LoRaWANGateway (Prelude.Maybe [Prelude.Natural])
+loRaWANGateway_subBands = Lens.lens (\LoRaWANGateway' {subBands} -> subBands) (\s@LoRaWANGateway' {} a -> s {subBands = a} :: LoRaWANGateway) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON LoRaWANGateway where
+  parseJSON =
+    Data.withObject
+      "LoRaWANGateway"
+      ( \x ->
+          LoRaWANGateway'
+            Prelude.<$> (x Data..:? "Beaconing")
+            Prelude.<*> (x Data..:? "GatewayEui")
+            Prelude.<*> (x Data..:? "JoinEuiFilters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "NetIdFilters" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "RfRegion")
+            Prelude.<*> (x Data..:? "SubBands" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable LoRaWANGateway where
+  hashWithSalt _salt LoRaWANGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` beaconing
+      `Prelude.hashWithSalt` gatewayEui
+      `Prelude.hashWithSalt` joinEuiFilters
+      `Prelude.hashWithSalt` netIdFilters
+      `Prelude.hashWithSalt` rfRegion
+      `Prelude.hashWithSalt` subBands
+
+instance Prelude.NFData LoRaWANGateway where
+  rnf LoRaWANGateway' {..} =
+    Prelude.rnf beaconing
+      `Prelude.seq` Prelude.rnf gatewayEui
+      `Prelude.seq` Prelude.rnf joinEuiFilters
+      `Prelude.seq` Prelude.rnf netIdFilters
+      `Prelude.seq` Prelude.rnf rfRegion
+      `Prelude.seq` Prelude.rnf subBands
+
+instance Data.ToJSON LoRaWANGateway where
+  toJSON LoRaWANGateway' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Beaconing" Data..=) Prelude.<$> beaconing,
+            ("GatewayEui" Data..=) Prelude.<$> gatewayEui,
+            ("JoinEuiFilters" Data..=)
+              Prelude.<$> joinEuiFilters,
+            ("NetIdFilters" Data..=) Prelude.<$> netIdFilters,
+            ("RfRegion" Data..=) Prelude.<$> rfRegion,
+            ("SubBands" Data..=) Prelude.<$> subBands
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayCurrentVersion.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayCurrentVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayCurrentVersion.hs
@@ -0,0 +1,76 @@
+{-# 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.IoTWireless.Types.LoRaWANGatewayCurrentVersion
+-- 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.IoTWireless.Types.LoRaWANGatewayCurrentVersion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANGatewayVersion
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWANGatewayCurrentVersion object.
+--
+-- /See:/ 'newLoRaWANGatewayCurrentVersion' smart constructor.
+data LoRaWANGatewayCurrentVersion = LoRaWANGatewayCurrentVersion'
+  { -- | The version of the gateways that should receive the update.
+    currentVersion :: Prelude.Maybe LoRaWANGatewayVersion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANGatewayCurrentVersion' 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:
+--
+-- 'currentVersion', 'loRaWANGatewayCurrentVersion_currentVersion' - The version of the gateways that should receive the update.
+newLoRaWANGatewayCurrentVersion ::
+  LoRaWANGatewayCurrentVersion
+newLoRaWANGatewayCurrentVersion =
+  LoRaWANGatewayCurrentVersion'
+    { currentVersion =
+        Prelude.Nothing
+    }
+
+-- | The version of the gateways that should receive the update.
+loRaWANGatewayCurrentVersion_currentVersion :: Lens.Lens' LoRaWANGatewayCurrentVersion (Prelude.Maybe LoRaWANGatewayVersion)
+loRaWANGatewayCurrentVersion_currentVersion = Lens.lens (\LoRaWANGatewayCurrentVersion' {currentVersion} -> currentVersion) (\s@LoRaWANGatewayCurrentVersion' {} a -> s {currentVersion = a} :: LoRaWANGatewayCurrentVersion)
+
+instance Data.FromJSON LoRaWANGatewayCurrentVersion where
+  parseJSON =
+    Data.withObject
+      "LoRaWANGatewayCurrentVersion"
+      ( \x ->
+          LoRaWANGatewayCurrentVersion'
+            Prelude.<$> (x Data..:? "CurrentVersion")
+      )
+
+instance
+  Prelude.Hashable
+    LoRaWANGatewayCurrentVersion
+  where
+  hashWithSalt _salt LoRaWANGatewayCurrentVersion' {..} =
+    _salt `Prelude.hashWithSalt` currentVersion
+
+instance Prelude.NFData LoRaWANGatewayCurrentVersion where
+  rnf LoRaWANGatewayCurrentVersion' {..} =
+    Prelude.rnf currentVersion
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayMetadata.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayMetadata.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.IoTWireless.Types.LoRaWANGatewayMetadata
+-- 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.IoTWireless.Types.LoRaWANGatewayMetadata 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
+
+-- | LoRaWAN gateway metatdata.
+--
+-- /See:/ 'newLoRaWANGatewayMetadata' smart constructor.
+data LoRaWANGatewayMetadata = LoRaWANGatewayMetadata'
+  { -- | The gateway\'s EUI value.
+    gatewayEui :: Prelude.Maybe Prelude.Text,
+    -- | The RSSI value.
+    rssi :: Prelude.Maybe Prelude.Double,
+    -- | The SNR value.
+    snr :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANGatewayMetadata' 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:
+--
+-- 'gatewayEui', 'loRaWANGatewayMetadata_gatewayEui' - The gateway\'s EUI value.
+--
+-- 'rssi', 'loRaWANGatewayMetadata_rssi' - The RSSI value.
+--
+-- 'snr', 'loRaWANGatewayMetadata_snr' - The SNR value.
+newLoRaWANGatewayMetadata ::
+  LoRaWANGatewayMetadata
+newLoRaWANGatewayMetadata =
+  LoRaWANGatewayMetadata'
+    { gatewayEui =
+        Prelude.Nothing,
+      rssi = Prelude.Nothing,
+      snr = Prelude.Nothing
+    }
+
+-- | The gateway\'s EUI value.
+loRaWANGatewayMetadata_gatewayEui :: Lens.Lens' LoRaWANGatewayMetadata (Prelude.Maybe Prelude.Text)
+loRaWANGatewayMetadata_gatewayEui = Lens.lens (\LoRaWANGatewayMetadata' {gatewayEui} -> gatewayEui) (\s@LoRaWANGatewayMetadata' {} a -> s {gatewayEui = a} :: LoRaWANGatewayMetadata)
+
+-- | The RSSI value.
+loRaWANGatewayMetadata_rssi :: Lens.Lens' LoRaWANGatewayMetadata (Prelude.Maybe Prelude.Double)
+loRaWANGatewayMetadata_rssi = Lens.lens (\LoRaWANGatewayMetadata' {rssi} -> rssi) (\s@LoRaWANGatewayMetadata' {} a -> s {rssi = a} :: LoRaWANGatewayMetadata)
+
+-- | The SNR value.
+loRaWANGatewayMetadata_snr :: Lens.Lens' LoRaWANGatewayMetadata (Prelude.Maybe Prelude.Double)
+loRaWANGatewayMetadata_snr = Lens.lens (\LoRaWANGatewayMetadata' {snr} -> snr) (\s@LoRaWANGatewayMetadata' {} a -> s {snr = a} :: LoRaWANGatewayMetadata)
+
+instance Data.FromJSON LoRaWANGatewayMetadata where
+  parseJSON =
+    Data.withObject
+      "LoRaWANGatewayMetadata"
+      ( \x ->
+          LoRaWANGatewayMetadata'
+            Prelude.<$> (x Data..:? "GatewayEui")
+            Prelude.<*> (x Data..:? "Rssi")
+            Prelude.<*> (x Data..:? "Snr")
+      )
+
+instance Prelude.Hashable LoRaWANGatewayMetadata where
+  hashWithSalt _salt LoRaWANGatewayMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` gatewayEui
+      `Prelude.hashWithSalt` rssi
+      `Prelude.hashWithSalt` snr
+
+instance Prelude.NFData LoRaWANGatewayMetadata where
+  rnf LoRaWANGatewayMetadata' {..} =
+    Prelude.rnf gatewayEui
+      `Prelude.seq` Prelude.rnf rssi
+      `Prelude.seq` Prelude.rnf snr
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayVersion.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANGatewayVersion.hs
@@ -0,0 +1,107 @@
+{-# 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.IoTWireless.Types.LoRaWANGatewayVersion
+-- 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.IoTWireless.Types.LoRaWANGatewayVersion 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
+
+-- | LoRaWANGatewayVersion object.
+--
+-- /See:/ 'newLoRaWANGatewayVersion' smart constructor.
+data LoRaWANGatewayVersion = LoRaWANGatewayVersion'
+  { -- | The model number of the wireless gateway.
+    model :: Prelude.Maybe Prelude.Text,
+    -- | The version of the wireless gateway firmware.
+    packageVersion :: Prelude.Maybe Prelude.Text,
+    -- | The basic station version of the wireless gateway.
+    station :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANGatewayVersion' 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:
+--
+-- 'model', 'loRaWANGatewayVersion_model' - The model number of the wireless gateway.
+--
+-- 'packageVersion', 'loRaWANGatewayVersion_packageVersion' - The version of the wireless gateway firmware.
+--
+-- 'station', 'loRaWANGatewayVersion_station' - The basic station version of the wireless gateway.
+newLoRaWANGatewayVersion ::
+  LoRaWANGatewayVersion
+newLoRaWANGatewayVersion =
+  LoRaWANGatewayVersion'
+    { model = Prelude.Nothing,
+      packageVersion = Prelude.Nothing,
+      station = Prelude.Nothing
+    }
+
+-- | The model number of the wireless gateway.
+loRaWANGatewayVersion_model :: Lens.Lens' LoRaWANGatewayVersion (Prelude.Maybe Prelude.Text)
+loRaWANGatewayVersion_model = Lens.lens (\LoRaWANGatewayVersion' {model} -> model) (\s@LoRaWANGatewayVersion' {} a -> s {model = a} :: LoRaWANGatewayVersion)
+
+-- | The version of the wireless gateway firmware.
+loRaWANGatewayVersion_packageVersion :: Lens.Lens' LoRaWANGatewayVersion (Prelude.Maybe Prelude.Text)
+loRaWANGatewayVersion_packageVersion = Lens.lens (\LoRaWANGatewayVersion' {packageVersion} -> packageVersion) (\s@LoRaWANGatewayVersion' {} a -> s {packageVersion = a} :: LoRaWANGatewayVersion)
+
+-- | The basic station version of the wireless gateway.
+loRaWANGatewayVersion_station :: Lens.Lens' LoRaWANGatewayVersion (Prelude.Maybe Prelude.Text)
+loRaWANGatewayVersion_station = Lens.lens (\LoRaWANGatewayVersion' {station} -> station) (\s@LoRaWANGatewayVersion' {} a -> s {station = a} :: LoRaWANGatewayVersion)
+
+instance Data.FromJSON LoRaWANGatewayVersion where
+  parseJSON =
+    Data.withObject
+      "LoRaWANGatewayVersion"
+      ( \x ->
+          LoRaWANGatewayVersion'
+            Prelude.<$> (x Data..:? "Model")
+            Prelude.<*> (x Data..:? "PackageVersion")
+            Prelude.<*> (x Data..:? "Station")
+      )
+
+instance Prelude.Hashable LoRaWANGatewayVersion where
+  hashWithSalt _salt LoRaWANGatewayVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` model
+      `Prelude.hashWithSalt` packageVersion
+      `Prelude.hashWithSalt` station
+
+instance Prelude.NFData LoRaWANGatewayVersion where
+  rnf LoRaWANGatewayVersion' {..} =
+    Prelude.rnf model
+      `Prelude.seq` Prelude.rnf packageVersion
+      `Prelude.seq` Prelude.rnf station
+
+instance Data.ToJSON LoRaWANGatewayVersion where
+  toJSON LoRaWANGatewayVersion' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Model" Data..=) Prelude.<$> model,
+            ("PackageVersion" Data..=)
+              Prelude.<$> packageVersion,
+            ("Station" Data..=) Prelude.<$> station
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANGetServiceProfileInfo.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANGetServiceProfileInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANGetServiceProfileInfo.hs
@@ -0,0 +1,295 @@
+{-# 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.IoTWireless.Types.LoRaWANGetServiceProfileInfo
+-- 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.IoTWireless.Types.LoRaWANGetServiceProfileInfo 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
+
+-- | LoRaWANGetServiceProfileInfo object.
+--
+-- /See:/ 'newLoRaWANGetServiceProfileInfo' smart constructor.
+data LoRaWANGetServiceProfileInfo = LoRaWANGetServiceProfileInfo'
+  { -- | The AddGWMetaData value.
+    addGwMetadata :: Prelude.Maybe Prelude.Bool,
+    -- | The ChannelMask value.
+    channelMask :: Prelude.Maybe Prelude.Text,
+    -- | The DevStatusReqFreq value.
+    devStatusReqFreq :: Prelude.Maybe Prelude.Natural,
+    -- | The DLBucketSize value.
+    dlBucketSize :: Prelude.Maybe Prelude.Natural,
+    -- | The DLRate value.
+    dlRate :: Prelude.Maybe Prelude.Natural,
+    -- | The DLRatePolicy value.
+    dlRatePolicy :: Prelude.Maybe Prelude.Text,
+    -- | The DRMax value.
+    drMax :: Prelude.Maybe Prelude.Natural,
+    -- | The DRMin value.
+    drMin :: Prelude.Maybe Prelude.Natural,
+    -- | The HRAllowed value that describes whether handover roaming is allowed.
+    hrAllowed :: Prelude.Maybe Prelude.Bool,
+    -- | The MinGwDiversity value.
+    minGwDiversity :: Prelude.Maybe Prelude.Natural,
+    -- | The NwkGeoLoc value.
+    nwkGeoLoc :: Prelude.Maybe Prelude.Bool,
+    -- | The PRAllowed value that describes whether passive roaming is allowed.
+    prAllowed :: Prelude.Maybe Prelude.Bool,
+    -- | The RAAllowed value that describes whether roaming activation is
+    -- allowed.
+    raAllowed :: Prelude.Maybe Prelude.Bool,
+    -- | The ReportDevStatusBattery value.
+    reportDevStatusBattery :: Prelude.Maybe Prelude.Bool,
+    -- | The ReportDevStatusMargin value.
+    reportDevStatusMargin :: Prelude.Maybe Prelude.Bool,
+    -- | The TargetPER value.
+    targetPer :: Prelude.Maybe Prelude.Natural,
+    -- | The ULBucketSize value.
+    ulBucketSize :: Prelude.Maybe Prelude.Natural,
+    -- | The ULRate value.
+    ulRate :: Prelude.Maybe Prelude.Natural,
+    -- | The ULRatePolicy value.
+    ulRatePolicy :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANGetServiceProfileInfo' 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:
+--
+-- 'addGwMetadata', 'loRaWANGetServiceProfileInfo_addGwMetadata' - The AddGWMetaData value.
+--
+-- 'channelMask', 'loRaWANGetServiceProfileInfo_channelMask' - The ChannelMask value.
+--
+-- 'devStatusReqFreq', 'loRaWANGetServiceProfileInfo_devStatusReqFreq' - The DevStatusReqFreq value.
+--
+-- 'dlBucketSize', 'loRaWANGetServiceProfileInfo_dlBucketSize' - The DLBucketSize value.
+--
+-- 'dlRate', 'loRaWANGetServiceProfileInfo_dlRate' - The DLRate value.
+--
+-- 'dlRatePolicy', 'loRaWANGetServiceProfileInfo_dlRatePolicy' - The DLRatePolicy value.
+--
+-- 'drMax', 'loRaWANGetServiceProfileInfo_drMax' - The DRMax value.
+--
+-- 'drMin', 'loRaWANGetServiceProfileInfo_drMin' - The DRMin value.
+--
+-- 'hrAllowed', 'loRaWANGetServiceProfileInfo_hrAllowed' - The HRAllowed value that describes whether handover roaming is allowed.
+--
+-- 'minGwDiversity', 'loRaWANGetServiceProfileInfo_minGwDiversity' - The MinGwDiversity value.
+--
+-- 'nwkGeoLoc', 'loRaWANGetServiceProfileInfo_nwkGeoLoc' - The NwkGeoLoc value.
+--
+-- 'prAllowed', 'loRaWANGetServiceProfileInfo_prAllowed' - The PRAllowed value that describes whether passive roaming is allowed.
+--
+-- 'raAllowed', 'loRaWANGetServiceProfileInfo_raAllowed' - The RAAllowed value that describes whether roaming activation is
+-- allowed.
+--
+-- 'reportDevStatusBattery', 'loRaWANGetServiceProfileInfo_reportDevStatusBattery' - The ReportDevStatusBattery value.
+--
+-- 'reportDevStatusMargin', 'loRaWANGetServiceProfileInfo_reportDevStatusMargin' - The ReportDevStatusMargin value.
+--
+-- 'targetPer', 'loRaWANGetServiceProfileInfo_targetPer' - The TargetPER value.
+--
+-- 'ulBucketSize', 'loRaWANGetServiceProfileInfo_ulBucketSize' - The ULBucketSize value.
+--
+-- 'ulRate', 'loRaWANGetServiceProfileInfo_ulRate' - The ULRate value.
+--
+-- 'ulRatePolicy', 'loRaWANGetServiceProfileInfo_ulRatePolicy' - The ULRatePolicy value.
+newLoRaWANGetServiceProfileInfo ::
+  LoRaWANGetServiceProfileInfo
+newLoRaWANGetServiceProfileInfo =
+  LoRaWANGetServiceProfileInfo'
+    { addGwMetadata =
+        Prelude.Nothing,
+      channelMask = Prelude.Nothing,
+      devStatusReqFreq = Prelude.Nothing,
+      dlBucketSize = Prelude.Nothing,
+      dlRate = Prelude.Nothing,
+      dlRatePolicy = Prelude.Nothing,
+      drMax = Prelude.Nothing,
+      drMin = Prelude.Nothing,
+      hrAllowed = Prelude.Nothing,
+      minGwDiversity = Prelude.Nothing,
+      nwkGeoLoc = Prelude.Nothing,
+      prAllowed = Prelude.Nothing,
+      raAllowed = Prelude.Nothing,
+      reportDevStatusBattery = Prelude.Nothing,
+      reportDevStatusMargin = Prelude.Nothing,
+      targetPer = Prelude.Nothing,
+      ulBucketSize = Prelude.Nothing,
+      ulRate = Prelude.Nothing,
+      ulRatePolicy = Prelude.Nothing
+    }
+
+-- | The AddGWMetaData value.
+loRaWANGetServiceProfileInfo_addGwMetadata :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Bool)
+loRaWANGetServiceProfileInfo_addGwMetadata = Lens.lens (\LoRaWANGetServiceProfileInfo' {addGwMetadata} -> addGwMetadata) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {addGwMetadata = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The ChannelMask value.
+loRaWANGetServiceProfileInfo_channelMask :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Text)
+loRaWANGetServiceProfileInfo_channelMask = Lens.lens (\LoRaWANGetServiceProfileInfo' {channelMask} -> channelMask) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {channelMask = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The DevStatusReqFreq value.
+loRaWANGetServiceProfileInfo_devStatusReqFreq :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_devStatusReqFreq = Lens.lens (\LoRaWANGetServiceProfileInfo' {devStatusReqFreq} -> devStatusReqFreq) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {devStatusReqFreq = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The DLBucketSize value.
+loRaWANGetServiceProfileInfo_dlBucketSize :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_dlBucketSize = Lens.lens (\LoRaWANGetServiceProfileInfo' {dlBucketSize} -> dlBucketSize) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {dlBucketSize = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The DLRate value.
+loRaWANGetServiceProfileInfo_dlRate :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_dlRate = Lens.lens (\LoRaWANGetServiceProfileInfo' {dlRate} -> dlRate) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {dlRate = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The DLRatePolicy value.
+loRaWANGetServiceProfileInfo_dlRatePolicy :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Text)
+loRaWANGetServiceProfileInfo_dlRatePolicy = Lens.lens (\LoRaWANGetServiceProfileInfo' {dlRatePolicy} -> dlRatePolicy) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {dlRatePolicy = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The DRMax value.
+loRaWANGetServiceProfileInfo_drMax :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_drMax = Lens.lens (\LoRaWANGetServiceProfileInfo' {drMax} -> drMax) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {drMax = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The DRMin value.
+loRaWANGetServiceProfileInfo_drMin :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_drMin = Lens.lens (\LoRaWANGetServiceProfileInfo' {drMin} -> drMin) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {drMin = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The HRAllowed value that describes whether handover roaming is allowed.
+loRaWANGetServiceProfileInfo_hrAllowed :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Bool)
+loRaWANGetServiceProfileInfo_hrAllowed = Lens.lens (\LoRaWANGetServiceProfileInfo' {hrAllowed} -> hrAllowed) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {hrAllowed = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The MinGwDiversity value.
+loRaWANGetServiceProfileInfo_minGwDiversity :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_minGwDiversity = Lens.lens (\LoRaWANGetServiceProfileInfo' {minGwDiversity} -> minGwDiversity) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {minGwDiversity = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The NwkGeoLoc value.
+loRaWANGetServiceProfileInfo_nwkGeoLoc :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Bool)
+loRaWANGetServiceProfileInfo_nwkGeoLoc = Lens.lens (\LoRaWANGetServiceProfileInfo' {nwkGeoLoc} -> nwkGeoLoc) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {nwkGeoLoc = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The PRAllowed value that describes whether passive roaming is allowed.
+loRaWANGetServiceProfileInfo_prAllowed :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Bool)
+loRaWANGetServiceProfileInfo_prAllowed = Lens.lens (\LoRaWANGetServiceProfileInfo' {prAllowed} -> prAllowed) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {prAllowed = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The RAAllowed value that describes whether roaming activation is
+-- allowed.
+loRaWANGetServiceProfileInfo_raAllowed :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Bool)
+loRaWANGetServiceProfileInfo_raAllowed = Lens.lens (\LoRaWANGetServiceProfileInfo' {raAllowed} -> raAllowed) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {raAllowed = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The ReportDevStatusBattery value.
+loRaWANGetServiceProfileInfo_reportDevStatusBattery :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Bool)
+loRaWANGetServiceProfileInfo_reportDevStatusBattery = Lens.lens (\LoRaWANGetServiceProfileInfo' {reportDevStatusBattery} -> reportDevStatusBattery) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {reportDevStatusBattery = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The ReportDevStatusMargin value.
+loRaWANGetServiceProfileInfo_reportDevStatusMargin :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Bool)
+loRaWANGetServiceProfileInfo_reportDevStatusMargin = Lens.lens (\LoRaWANGetServiceProfileInfo' {reportDevStatusMargin} -> reportDevStatusMargin) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {reportDevStatusMargin = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The TargetPER value.
+loRaWANGetServiceProfileInfo_targetPer :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_targetPer = Lens.lens (\LoRaWANGetServiceProfileInfo' {targetPer} -> targetPer) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {targetPer = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The ULBucketSize value.
+loRaWANGetServiceProfileInfo_ulBucketSize :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_ulBucketSize = Lens.lens (\LoRaWANGetServiceProfileInfo' {ulBucketSize} -> ulBucketSize) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {ulBucketSize = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The ULRate value.
+loRaWANGetServiceProfileInfo_ulRate :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Natural)
+loRaWANGetServiceProfileInfo_ulRate = Lens.lens (\LoRaWANGetServiceProfileInfo' {ulRate} -> ulRate) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {ulRate = a} :: LoRaWANGetServiceProfileInfo)
+
+-- | The ULRatePolicy value.
+loRaWANGetServiceProfileInfo_ulRatePolicy :: Lens.Lens' LoRaWANGetServiceProfileInfo (Prelude.Maybe Prelude.Text)
+loRaWANGetServiceProfileInfo_ulRatePolicy = Lens.lens (\LoRaWANGetServiceProfileInfo' {ulRatePolicy} -> ulRatePolicy) (\s@LoRaWANGetServiceProfileInfo' {} a -> s {ulRatePolicy = a} :: LoRaWANGetServiceProfileInfo)
+
+instance Data.FromJSON LoRaWANGetServiceProfileInfo where
+  parseJSON =
+    Data.withObject
+      "LoRaWANGetServiceProfileInfo"
+      ( \x ->
+          LoRaWANGetServiceProfileInfo'
+            Prelude.<$> (x Data..:? "AddGwMetadata")
+            Prelude.<*> (x Data..:? "ChannelMask")
+            Prelude.<*> (x Data..:? "DevStatusReqFreq")
+            Prelude.<*> (x Data..:? "DlBucketSize")
+            Prelude.<*> (x Data..:? "DlRate")
+            Prelude.<*> (x Data..:? "DlRatePolicy")
+            Prelude.<*> (x Data..:? "DrMax")
+            Prelude.<*> (x Data..:? "DrMin")
+            Prelude.<*> (x Data..:? "HrAllowed")
+            Prelude.<*> (x Data..:? "MinGwDiversity")
+            Prelude.<*> (x Data..:? "NwkGeoLoc")
+            Prelude.<*> (x Data..:? "PrAllowed")
+            Prelude.<*> (x Data..:? "RaAllowed")
+            Prelude.<*> (x Data..:? "ReportDevStatusBattery")
+            Prelude.<*> (x Data..:? "ReportDevStatusMargin")
+            Prelude.<*> (x Data..:? "TargetPer")
+            Prelude.<*> (x Data..:? "UlBucketSize")
+            Prelude.<*> (x Data..:? "UlRate")
+            Prelude.<*> (x Data..:? "UlRatePolicy")
+      )
+
+instance
+  Prelude.Hashable
+    LoRaWANGetServiceProfileInfo
+  where
+  hashWithSalt _salt LoRaWANGetServiceProfileInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` addGwMetadata
+      `Prelude.hashWithSalt` channelMask
+      `Prelude.hashWithSalt` devStatusReqFreq
+      `Prelude.hashWithSalt` dlBucketSize
+      `Prelude.hashWithSalt` dlRate
+      `Prelude.hashWithSalt` dlRatePolicy
+      `Prelude.hashWithSalt` drMax
+      `Prelude.hashWithSalt` drMin
+      `Prelude.hashWithSalt` hrAllowed
+      `Prelude.hashWithSalt` minGwDiversity
+      `Prelude.hashWithSalt` nwkGeoLoc
+      `Prelude.hashWithSalt` prAllowed
+      `Prelude.hashWithSalt` raAllowed
+      `Prelude.hashWithSalt` reportDevStatusBattery
+      `Prelude.hashWithSalt` reportDevStatusMargin
+      `Prelude.hashWithSalt` targetPer
+      `Prelude.hashWithSalt` ulBucketSize
+      `Prelude.hashWithSalt` ulRate
+      `Prelude.hashWithSalt` ulRatePolicy
+
+instance Prelude.NFData LoRaWANGetServiceProfileInfo where
+  rnf LoRaWANGetServiceProfileInfo' {..} =
+    Prelude.rnf addGwMetadata
+      `Prelude.seq` Prelude.rnf channelMask
+      `Prelude.seq` Prelude.rnf devStatusReqFreq
+      `Prelude.seq` Prelude.rnf dlBucketSize
+      `Prelude.seq` Prelude.rnf dlRate
+      `Prelude.seq` Prelude.rnf dlRatePolicy
+      `Prelude.seq` Prelude.rnf drMax
+      `Prelude.seq` Prelude.rnf drMin
+      `Prelude.seq` Prelude.rnf hrAllowed
+      `Prelude.seq` Prelude.rnf minGwDiversity
+      `Prelude.seq` Prelude.rnf nwkGeoLoc
+      `Prelude.seq` Prelude.rnf prAllowed
+      `Prelude.seq` Prelude.rnf raAllowed
+      `Prelude.seq` Prelude.rnf reportDevStatusBattery
+      `Prelude.seq` Prelude.rnf reportDevStatusMargin
+      `Prelude.seq` Prelude.rnf targetPer
+      `Prelude.seq` Prelude.rnf ulBucketSize
+      `Prelude.seq` Prelude.rnf ulRate
+      `Prelude.seq` Prelude.rnf ulRatePolicy
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANJoinEventNotificationConfigurations.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANJoinEventNotificationConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANJoinEventNotificationConfigurations.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.IoTWireless.Types.LoRaWANJoinEventNotificationConfigurations
+-- 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.IoTWireless.Types.LoRaWANJoinEventNotificationConfigurations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Object for LoRaWAN join resource type event configuration.
+--
+-- /See:/ 'newLoRaWANJoinEventNotificationConfigurations' smart constructor.
+data LoRaWANJoinEventNotificationConfigurations = LoRaWANJoinEventNotificationConfigurations'
+  { -- | Denotes whether the Dev EUI join event topic is enabled or disabled.
+    devEuiEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANJoinEventNotificationConfigurations' 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:
+--
+-- 'devEuiEventTopic', 'loRaWANJoinEventNotificationConfigurations_devEuiEventTopic' - Denotes whether the Dev EUI join event topic is enabled or disabled.
+newLoRaWANJoinEventNotificationConfigurations ::
+  LoRaWANJoinEventNotificationConfigurations
+newLoRaWANJoinEventNotificationConfigurations =
+  LoRaWANJoinEventNotificationConfigurations'
+    { devEuiEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Denotes whether the Dev EUI join event topic is enabled or disabled.
+loRaWANJoinEventNotificationConfigurations_devEuiEventTopic :: Lens.Lens' LoRaWANJoinEventNotificationConfigurations (Prelude.Maybe EventNotificationTopicStatus)
+loRaWANJoinEventNotificationConfigurations_devEuiEventTopic = Lens.lens (\LoRaWANJoinEventNotificationConfigurations' {devEuiEventTopic} -> devEuiEventTopic) (\s@LoRaWANJoinEventNotificationConfigurations' {} a -> s {devEuiEventTopic = a} :: LoRaWANJoinEventNotificationConfigurations)
+
+instance
+  Data.FromJSON
+    LoRaWANJoinEventNotificationConfigurations
+  where
+  parseJSON =
+    Data.withObject
+      "LoRaWANJoinEventNotificationConfigurations"
+      ( \x ->
+          LoRaWANJoinEventNotificationConfigurations'
+            Prelude.<$> (x Data..:? "DevEuiEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    LoRaWANJoinEventNotificationConfigurations
+  where
+  hashWithSalt
+    _salt
+    LoRaWANJoinEventNotificationConfigurations' {..} =
+      _salt `Prelude.hashWithSalt` devEuiEventTopic
+
+instance
+  Prelude.NFData
+    LoRaWANJoinEventNotificationConfigurations
+  where
+  rnf LoRaWANJoinEventNotificationConfigurations' {..} =
+    Prelude.rnf devEuiEventTopic
+
+instance
+  Data.ToJSON
+    LoRaWANJoinEventNotificationConfigurations
+  where
+  toJSON
+    LoRaWANJoinEventNotificationConfigurations' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("DevEuiEventTopic" Data..=)
+                Prelude.<$> devEuiEventTopic
+            ]
+        )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANJoinResourceTypeEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANJoinResourceTypeEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANJoinResourceTypeEventConfiguration.hs
@@ -0,0 +1,100 @@
+{-# 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.IoTWireless.Types.LoRaWANJoinResourceTypeEventConfiguration
+-- 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.IoTWireless.Types.LoRaWANJoinResourceTypeEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Object for LoRaWAN join resource type event configuration.
+--
+-- /See:/ 'newLoRaWANJoinResourceTypeEventConfiguration' smart constructor.
+data LoRaWANJoinResourceTypeEventConfiguration = LoRaWANJoinResourceTypeEventConfiguration'
+  { -- | Denotes whether the wireless device join event topic is enabled or
+    -- disabled.
+    wirelessDeviceEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANJoinResourceTypeEventConfiguration' 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:
+--
+-- 'wirelessDeviceEventTopic', 'loRaWANJoinResourceTypeEventConfiguration_wirelessDeviceEventTopic' - Denotes whether the wireless device join event topic is enabled or
+-- disabled.
+newLoRaWANJoinResourceTypeEventConfiguration ::
+  LoRaWANJoinResourceTypeEventConfiguration
+newLoRaWANJoinResourceTypeEventConfiguration =
+  LoRaWANJoinResourceTypeEventConfiguration'
+    { wirelessDeviceEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Denotes whether the wireless device join event topic is enabled or
+-- disabled.
+loRaWANJoinResourceTypeEventConfiguration_wirelessDeviceEventTopic :: Lens.Lens' LoRaWANJoinResourceTypeEventConfiguration (Prelude.Maybe EventNotificationTopicStatus)
+loRaWANJoinResourceTypeEventConfiguration_wirelessDeviceEventTopic = Lens.lens (\LoRaWANJoinResourceTypeEventConfiguration' {wirelessDeviceEventTopic} -> wirelessDeviceEventTopic) (\s@LoRaWANJoinResourceTypeEventConfiguration' {} a -> s {wirelessDeviceEventTopic = a} :: LoRaWANJoinResourceTypeEventConfiguration)
+
+instance
+  Data.FromJSON
+    LoRaWANJoinResourceTypeEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "LoRaWANJoinResourceTypeEventConfiguration"
+      ( \x ->
+          LoRaWANJoinResourceTypeEventConfiguration'
+            Prelude.<$> (x Data..:? "WirelessDeviceEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    LoRaWANJoinResourceTypeEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    LoRaWANJoinResourceTypeEventConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` wirelessDeviceEventTopic
+
+instance
+  Prelude.NFData
+    LoRaWANJoinResourceTypeEventConfiguration
+  where
+  rnf LoRaWANJoinResourceTypeEventConfiguration' {..} =
+    Prelude.rnf wirelessDeviceEventTopic
+
+instance
+  Data.ToJSON
+    LoRaWANJoinResourceTypeEventConfiguration
+  where
+  toJSON LoRaWANJoinResourceTypeEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("WirelessDeviceEventTopic" Data..=)
+              Prelude.<$> wirelessDeviceEventTopic
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANListDevice.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANListDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANListDevice.hs
@@ -0,0 +1,67 @@
+{-# 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.IoTWireless.Types.LoRaWANListDevice
+-- 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.IoTWireless.Types.LoRaWANListDevice 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
+
+-- | LoRaWAN object for list functions.
+--
+-- /See:/ 'newLoRaWANListDevice' smart constructor.
+data LoRaWANListDevice = LoRaWANListDevice'
+  { -- | The DevEUI value.
+    devEui :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANListDevice' 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:
+--
+-- 'devEui', 'loRaWANListDevice_devEui' - The DevEUI value.
+newLoRaWANListDevice ::
+  LoRaWANListDevice
+newLoRaWANListDevice =
+  LoRaWANListDevice' {devEui = Prelude.Nothing}
+
+-- | The DevEUI value.
+loRaWANListDevice_devEui :: Lens.Lens' LoRaWANListDevice (Prelude.Maybe Prelude.Text)
+loRaWANListDevice_devEui = Lens.lens (\LoRaWANListDevice' {devEui} -> devEui) (\s@LoRaWANListDevice' {} a -> s {devEui = a} :: LoRaWANListDevice)
+
+instance Data.FromJSON LoRaWANListDevice where
+  parseJSON =
+    Data.withObject
+      "LoRaWANListDevice"
+      ( \x ->
+          LoRaWANListDevice' Prelude.<$> (x Data..:? "DevEui")
+      )
+
+instance Prelude.Hashable LoRaWANListDevice where
+  hashWithSalt _salt LoRaWANListDevice' {..} =
+    _salt `Prelude.hashWithSalt` devEui
+
+instance Prelude.NFData LoRaWANListDevice where
+  rnf LoRaWANListDevice' {..} = Prelude.rnf devEui
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANMulticast.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANMulticast.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANMulticast.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.IoTWireless.Types.LoRaWANMulticast
+-- 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.IoTWireless.Types.LoRaWANMulticast where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.DlClass
+import Amazonka.IoTWireless.Types.SupportedRfRegion
+import qualified Amazonka.Prelude as Prelude
+
+-- | The LoRaWAN information that is to be used with the multicast group.
+--
+-- /See:/ 'newLoRaWANMulticast' smart constructor.
+data LoRaWANMulticast = LoRaWANMulticast'
+  { dlClass :: Prelude.Maybe DlClass,
+    rfRegion :: Prelude.Maybe SupportedRfRegion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANMulticast' 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:
+--
+-- 'dlClass', 'loRaWANMulticast_dlClass' - Undocumented member.
+--
+-- 'rfRegion', 'loRaWANMulticast_rfRegion' - Undocumented member.
+newLoRaWANMulticast ::
+  LoRaWANMulticast
+newLoRaWANMulticast =
+  LoRaWANMulticast'
+    { dlClass = Prelude.Nothing,
+      rfRegion = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+loRaWANMulticast_dlClass :: Lens.Lens' LoRaWANMulticast (Prelude.Maybe DlClass)
+loRaWANMulticast_dlClass = Lens.lens (\LoRaWANMulticast' {dlClass} -> dlClass) (\s@LoRaWANMulticast' {} a -> s {dlClass = a} :: LoRaWANMulticast)
+
+-- | Undocumented member.
+loRaWANMulticast_rfRegion :: Lens.Lens' LoRaWANMulticast (Prelude.Maybe SupportedRfRegion)
+loRaWANMulticast_rfRegion = Lens.lens (\LoRaWANMulticast' {rfRegion} -> rfRegion) (\s@LoRaWANMulticast' {} a -> s {rfRegion = a} :: LoRaWANMulticast)
+
+instance Prelude.Hashable LoRaWANMulticast where
+  hashWithSalt _salt LoRaWANMulticast' {..} =
+    _salt
+      `Prelude.hashWithSalt` dlClass
+      `Prelude.hashWithSalt` rfRegion
+
+instance Prelude.NFData LoRaWANMulticast where
+  rnf LoRaWANMulticast' {..} =
+    Prelude.rnf dlClass
+      `Prelude.seq` Prelude.rnf rfRegion
+
+instance Data.ToJSON LoRaWANMulticast where
+  toJSON LoRaWANMulticast' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DlClass" Data..=) Prelude.<$> dlClass,
+            ("RfRegion" Data..=) Prelude.<$> rfRegion
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastGet.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastGet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastGet.hs
@@ -0,0 +1,107 @@
+{-# 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.IoTWireless.Types.LoRaWANMulticastGet
+-- 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.IoTWireless.Types.LoRaWANMulticastGet where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.DlClass
+import Amazonka.IoTWireless.Types.SupportedRfRegion
+import qualified Amazonka.Prelude as Prelude
+
+-- | The LoRaWAN information that is to be returned from getting multicast
+-- group information.
+--
+-- /See:/ 'newLoRaWANMulticastGet' smart constructor.
+data LoRaWANMulticastGet = LoRaWANMulticastGet'
+  { dlClass :: Prelude.Maybe DlClass,
+    numberOfDevicesInGroup :: Prelude.Maybe Prelude.Int,
+    numberOfDevicesRequested :: Prelude.Maybe Prelude.Int,
+    rfRegion :: Prelude.Maybe SupportedRfRegion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANMulticastGet' 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:
+--
+-- 'dlClass', 'loRaWANMulticastGet_dlClass' - Undocumented member.
+--
+-- 'numberOfDevicesInGroup', 'loRaWANMulticastGet_numberOfDevicesInGroup' - Undocumented member.
+--
+-- 'numberOfDevicesRequested', 'loRaWANMulticastGet_numberOfDevicesRequested' - Undocumented member.
+--
+-- 'rfRegion', 'loRaWANMulticastGet_rfRegion' - Undocumented member.
+newLoRaWANMulticastGet ::
+  LoRaWANMulticastGet
+newLoRaWANMulticastGet =
+  LoRaWANMulticastGet'
+    { dlClass = Prelude.Nothing,
+      numberOfDevicesInGroup = Prelude.Nothing,
+      numberOfDevicesRequested = Prelude.Nothing,
+      rfRegion = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+loRaWANMulticastGet_dlClass :: Lens.Lens' LoRaWANMulticastGet (Prelude.Maybe DlClass)
+loRaWANMulticastGet_dlClass = Lens.lens (\LoRaWANMulticastGet' {dlClass} -> dlClass) (\s@LoRaWANMulticastGet' {} a -> s {dlClass = a} :: LoRaWANMulticastGet)
+
+-- | Undocumented member.
+loRaWANMulticastGet_numberOfDevicesInGroup :: Lens.Lens' LoRaWANMulticastGet (Prelude.Maybe Prelude.Int)
+loRaWANMulticastGet_numberOfDevicesInGroup = Lens.lens (\LoRaWANMulticastGet' {numberOfDevicesInGroup} -> numberOfDevicesInGroup) (\s@LoRaWANMulticastGet' {} a -> s {numberOfDevicesInGroup = a} :: LoRaWANMulticastGet)
+
+-- | Undocumented member.
+loRaWANMulticastGet_numberOfDevicesRequested :: Lens.Lens' LoRaWANMulticastGet (Prelude.Maybe Prelude.Int)
+loRaWANMulticastGet_numberOfDevicesRequested = Lens.lens (\LoRaWANMulticastGet' {numberOfDevicesRequested} -> numberOfDevicesRequested) (\s@LoRaWANMulticastGet' {} a -> s {numberOfDevicesRequested = a} :: LoRaWANMulticastGet)
+
+-- | Undocumented member.
+loRaWANMulticastGet_rfRegion :: Lens.Lens' LoRaWANMulticastGet (Prelude.Maybe SupportedRfRegion)
+loRaWANMulticastGet_rfRegion = Lens.lens (\LoRaWANMulticastGet' {rfRegion} -> rfRegion) (\s@LoRaWANMulticastGet' {} a -> s {rfRegion = a} :: LoRaWANMulticastGet)
+
+instance Data.FromJSON LoRaWANMulticastGet where
+  parseJSON =
+    Data.withObject
+      "LoRaWANMulticastGet"
+      ( \x ->
+          LoRaWANMulticastGet'
+            Prelude.<$> (x Data..:? "DlClass")
+            Prelude.<*> (x Data..:? "NumberOfDevicesInGroup")
+            Prelude.<*> (x Data..:? "NumberOfDevicesRequested")
+            Prelude.<*> (x Data..:? "RfRegion")
+      )
+
+instance Prelude.Hashable LoRaWANMulticastGet where
+  hashWithSalt _salt LoRaWANMulticastGet' {..} =
+    _salt
+      `Prelude.hashWithSalt` dlClass
+      `Prelude.hashWithSalt` numberOfDevicesInGroup
+      `Prelude.hashWithSalt` numberOfDevicesRequested
+      `Prelude.hashWithSalt` rfRegion
+
+instance Prelude.NFData LoRaWANMulticastGet where
+  rnf LoRaWANMulticastGet' {..} =
+    Prelude.rnf dlClass
+      `Prelude.seq` Prelude.rnf numberOfDevicesInGroup
+      `Prelude.seq` Prelude.rnf numberOfDevicesRequested
+      `Prelude.seq` Prelude.rnf rfRegion
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastMetadata.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastMetadata.hs
@@ -0,0 +1,65 @@
+{-# 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.IoTWireless.Types.LoRaWANMulticastMetadata
+-- 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.IoTWireless.Types.LoRaWANMulticastMetadata 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 metadata information of the LoRaWAN multicast group.
+--
+-- /See:/ 'newLoRaWANMulticastMetadata' smart constructor.
+data LoRaWANMulticastMetadata = LoRaWANMulticastMetadata'
+  { fPort :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANMulticastMetadata' 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:
+--
+-- 'fPort', 'loRaWANMulticastMetadata_fPort' - Undocumented member.
+newLoRaWANMulticastMetadata ::
+  LoRaWANMulticastMetadata
+newLoRaWANMulticastMetadata =
+  LoRaWANMulticastMetadata' {fPort = Prelude.Nothing}
+
+-- | Undocumented member.
+loRaWANMulticastMetadata_fPort :: Lens.Lens' LoRaWANMulticastMetadata (Prelude.Maybe Prelude.Natural)
+loRaWANMulticastMetadata_fPort = Lens.lens (\LoRaWANMulticastMetadata' {fPort} -> fPort) (\s@LoRaWANMulticastMetadata' {} a -> s {fPort = a} :: LoRaWANMulticastMetadata)
+
+instance Prelude.Hashable LoRaWANMulticastMetadata where
+  hashWithSalt _salt LoRaWANMulticastMetadata' {..} =
+    _salt `Prelude.hashWithSalt` fPort
+
+instance Prelude.NFData LoRaWANMulticastMetadata where
+  rnf LoRaWANMulticastMetadata' {..} = Prelude.rnf fPort
+
+instance Data.ToJSON LoRaWANMulticastMetadata where
+  toJSON LoRaWANMulticastMetadata' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("FPort" Data..=) Prelude.<$> fPort]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastSession.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANMulticastSession.hs
@@ -0,0 +1,117 @@
+{-# 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.IoTWireless.Types.LoRaWANMulticastSession
+-- 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.IoTWireless.Types.LoRaWANMulticastSession 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 LoRaWAN information used with the multicast session.
+--
+-- /See:/ 'newLoRaWANMulticastSession' smart constructor.
+data LoRaWANMulticastSession = LoRaWANMulticastSession'
+  { dlDr :: Prelude.Maybe Prelude.Natural,
+    dlFreq :: Prelude.Maybe Prelude.Natural,
+    sessionStartTime :: Prelude.Maybe Data.ISO8601,
+    sessionTimeout :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANMulticastSession' 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:
+--
+-- 'dlDr', 'loRaWANMulticastSession_dlDr' - Undocumented member.
+--
+-- 'dlFreq', 'loRaWANMulticastSession_dlFreq' - Undocumented member.
+--
+-- 'sessionStartTime', 'loRaWANMulticastSession_sessionStartTime' - Undocumented member.
+--
+-- 'sessionTimeout', 'loRaWANMulticastSession_sessionTimeout' - Undocumented member.
+newLoRaWANMulticastSession ::
+  LoRaWANMulticastSession
+newLoRaWANMulticastSession =
+  LoRaWANMulticastSession'
+    { dlDr = Prelude.Nothing,
+      dlFreq = Prelude.Nothing,
+      sessionStartTime = Prelude.Nothing,
+      sessionTimeout = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+loRaWANMulticastSession_dlDr :: Lens.Lens' LoRaWANMulticastSession (Prelude.Maybe Prelude.Natural)
+loRaWANMulticastSession_dlDr = Lens.lens (\LoRaWANMulticastSession' {dlDr} -> dlDr) (\s@LoRaWANMulticastSession' {} a -> s {dlDr = a} :: LoRaWANMulticastSession)
+
+-- | Undocumented member.
+loRaWANMulticastSession_dlFreq :: Lens.Lens' LoRaWANMulticastSession (Prelude.Maybe Prelude.Natural)
+loRaWANMulticastSession_dlFreq = Lens.lens (\LoRaWANMulticastSession' {dlFreq} -> dlFreq) (\s@LoRaWANMulticastSession' {} a -> s {dlFreq = a} :: LoRaWANMulticastSession)
+
+-- | Undocumented member.
+loRaWANMulticastSession_sessionStartTime :: Lens.Lens' LoRaWANMulticastSession (Prelude.Maybe Prelude.UTCTime)
+loRaWANMulticastSession_sessionStartTime = Lens.lens (\LoRaWANMulticastSession' {sessionStartTime} -> sessionStartTime) (\s@LoRaWANMulticastSession' {} a -> s {sessionStartTime = a} :: LoRaWANMulticastSession) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+loRaWANMulticastSession_sessionTimeout :: Lens.Lens' LoRaWANMulticastSession (Prelude.Maybe Prelude.Natural)
+loRaWANMulticastSession_sessionTimeout = Lens.lens (\LoRaWANMulticastSession' {sessionTimeout} -> sessionTimeout) (\s@LoRaWANMulticastSession' {} a -> s {sessionTimeout = a} :: LoRaWANMulticastSession)
+
+instance Data.FromJSON LoRaWANMulticastSession where
+  parseJSON =
+    Data.withObject
+      "LoRaWANMulticastSession"
+      ( \x ->
+          LoRaWANMulticastSession'
+            Prelude.<$> (x Data..:? "DlDr")
+            Prelude.<*> (x Data..:? "DlFreq")
+            Prelude.<*> (x Data..:? "SessionStartTime")
+            Prelude.<*> (x Data..:? "SessionTimeout")
+      )
+
+instance Prelude.Hashable LoRaWANMulticastSession where
+  hashWithSalt _salt LoRaWANMulticastSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` dlDr
+      `Prelude.hashWithSalt` dlFreq
+      `Prelude.hashWithSalt` sessionStartTime
+      `Prelude.hashWithSalt` sessionTimeout
+
+instance Prelude.NFData LoRaWANMulticastSession where
+  rnf LoRaWANMulticastSession' {..} =
+    Prelude.rnf dlDr
+      `Prelude.seq` Prelude.rnf dlFreq
+      `Prelude.seq` Prelude.rnf sessionStartTime
+      `Prelude.seq` Prelude.rnf sessionTimeout
+
+instance Data.ToJSON LoRaWANMulticastSession where
+  toJSON LoRaWANMulticastSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DlDr" Data..=) Prelude.<$> dlDr,
+            ("DlFreq" Data..=) Prelude.<$> dlFreq,
+            ("SessionStartTime" Data..=)
+              Prelude.<$> sessionStartTime,
+            ("SessionTimeout" Data..=)
+              Prelude.<$> sessionTimeout
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANSendDataToDevice.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANSendDataToDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANSendDataToDevice.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.IoTWireless.Types.LoRaWANSendDataToDevice
+-- 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.IoTWireless.Types.LoRaWANSendDataToDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.ParticipatingGateways
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWAN router info.
+--
+-- /See:/ 'newLoRaWANSendDataToDevice' smart constructor.
+data LoRaWANSendDataToDevice = LoRaWANSendDataToDevice'
+  { fPort :: Prelude.Maybe Prelude.Natural,
+    -- | Choose the gateways that you want to use for the downlink data traffic
+    -- when the wireless device is running in class B or class C mode.
+    participatingGateways :: Prelude.Maybe ParticipatingGateways
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANSendDataToDevice' 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:
+--
+-- 'fPort', 'loRaWANSendDataToDevice_fPort' - Undocumented member.
+--
+-- 'participatingGateways', 'loRaWANSendDataToDevice_participatingGateways' - Choose the gateways that you want to use for the downlink data traffic
+-- when the wireless device is running in class B or class C mode.
+newLoRaWANSendDataToDevice ::
+  LoRaWANSendDataToDevice
+newLoRaWANSendDataToDevice =
+  LoRaWANSendDataToDevice'
+    { fPort = Prelude.Nothing,
+      participatingGateways = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+loRaWANSendDataToDevice_fPort :: Lens.Lens' LoRaWANSendDataToDevice (Prelude.Maybe Prelude.Natural)
+loRaWANSendDataToDevice_fPort = Lens.lens (\LoRaWANSendDataToDevice' {fPort} -> fPort) (\s@LoRaWANSendDataToDevice' {} a -> s {fPort = a} :: LoRaWANSendDataToDevice)
+
+-- | Choose the gateways that you want to use for the downlink data traffic
+-- when the wireless device is running in class B or class C mode.
+loRaWANSendDataToDevice_participatingGateways :: Lens.Lens' LoRaWANSendDataToDevice (Prelude.Maybe ParticipatingGateways)
+loRaWANSendDataToDevice_participatingGateways = Lens.lens (\LoRaWANSendDataToDevice' {participatingGateways} -> participatingGateways) (\s@LoRaWANSendDataToDevice' {} a -> s {participatingGateways = a} :: LoRaWANSendDataToDevice)
+
+instance Data.FromJSON LoRaWANSendDataToDevice where
+  parseJSON =
+    Data.withObject
+      "LoRaWANSendDataToDevice"
+      ( \x ->
+          LoRaWANSendDataToDevice'
+            Prelude.<$> (x Data..:? "FPort")
+            Prelude.<*> (x Data..:? "ParticipatingGateways")
+      )
+
+instance Prelude.Hashable LoRaWANSendDataToDevice where
+  hashWithSalt _salt LoRaWANSendDataToDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` fPort
+      `Prelude.hashWithSalt` participatingGateways
+
+instance Prelude.NFData LoRaWANSendDataToDevice where
+  rnf LoRaWANSendDataToDevice' {..} =
+    Prelude.rnf fPort
+      `Prelude.seq` Prelude.rnf participatingGateways
+
+instance Data.ToJSON LoRaWANSendDataToDevice where
+  toJSON LoRaWANSendDataToDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FPort" Data..=) Prelude.<$> fPort,
+            ("ParticipatingGateways" Data..=)
+              Prelude.<$> participatingGateways
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANServiceProfile.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANServiceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANServiceProfile.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.IoTWireless.Types.LoRaWANServiceProfile
+-- 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.IoTWireless.Types.LoRaWANServiceProfile 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
+
+-- | LoRaWANServiceProfile object.
+--
+-- /See:/ 'newLoRaWANServiceProfile' smart constructor.
+data LoRaWANServiceProfile = LoRaWANServiceProfile'
+  { -- | The AddGWMetaData value.
+    addGwMetadata :: Prelude.Maybe Prelude.Bool,
+    -- | The DrMax value.
+    drMax :: Prelude.Maybe Prelude.Natural,
+    -- | The DrMin value.
+    drMin :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANServiceProfile' 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:
+--
+-- 'addGwMetadata', 'loRaWANServiceProfile_addGwMetadata' - The AddGWMetaData value.
+--
+-- 'drMax', 'loRaWANServiceProfile_drMax' - The DrMax value.
+--
+-- 'drMin', 'loRaWANServiceProfile_drMin' - The DrMin value.
+newLoRaWANServiceProfile ::
+  LoRaWANServiceProfile
+newLoRaWANServiceProfile =
+  LoRaWANServiceProfile'
+    { addGwMetadata =
+        Prelude.Nothing,
+      drMax = Prelude.Nothing,
+      drMin = Prelude.Nothing
+    }
+
+-- | The AddGWMetaData value.
+loRaWANServiceProfile_addGwMetadata :: Lens.Lens' LoRaWANServiceProfile (Prelude.Maybe Prelude.Bool)
+loRaWANServiceProfile_addGwMetadata = Lens.lens (\LoRaWANServiceProfile' {addGwMetadata} -> addGwMetadata) (\s@LoRaWANServiceProfile' {} a -> s {addGwMetadata = a} :: LoRaWANServiceProfile)
+
+-- | The DrMax value.
+loRaWANServiceProfile_drMax :: Lens.Lens' LoRaWANServiceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANServiceProfile_drMax = Lens.lens (\LoRaWANServiceProfile' {drMax} -> drMax) (\s@LoRaWANServiceProfile' {} a -> s {drMax = a} :: LoRaWANServiceProfile)
+
+-- | The DrMin value.
+loRaWANServiceProfile_drMin :: Lens.Lens' LoRaWANServiceProfile (Prelude.Maybe Prelude.Natural)
+loRaWANServiceProfile_drMin = Lens.lens (\LoRaWANServiceProfile' {drMin} -> drMin) (\s@LoRaWANServiceProfile' {} a -> s {drMin = a} :: LoRaWANServiceProfile)
+
+instance Prelude.Hashable LoRaWANServiceProfile where
+  hashWithSalt _salt LoRaWANServiceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` addGwMetadata
+      `Prelude.hashWithSalt` drMax
+      `Prelude.hashWithSalt` drMin
+
+instance Prelude.NFData LoRaWANServiceProfile where
+  rnf LoRaWANServiceProfile' {..} =
+    Prelude.rnf addGwMetadata
+      `Prelude.seq` Prelude.rnf drMax
+      `Prelude.seq` Prelude.rnf drMin
+
+instance Data.ToJSON LoRaWANServiceProfile where
+  toJSON LoRaWANServiceProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AddGwMetadata" Data..=) Prelude.<$> addGwMetadata,
+            ("DrMax" Data..=) Prelude.<$> drMax,
+            ("DrMin" Data..=) Prelude.<$> drMin
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANStartFuotaTask.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANStartFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANStartFuotaTask.hs
@@ -0,0 +1,66 @@
+{-# 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.IoTWireless.Types.LoRaWANStartFuotaTask
+-- 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.IoTWireless.Types.LoRaWANStartFuotaTask 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 LoRaWAN information used to start a FUOTA task.
+--
+-- /See:/ 'newLoRaWANStartFuotaTask' smart constructor.
+data LoRaWANStartFuotaTask = LoRaWANStartFuotaTask'
+  { startTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANStartFuotaTask' 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:
+--
+-- 'startTime', 'loRaWANStartFuotaTask_startTime' - Undocumented member.
+newLoRaWANStartFuotaTask ::
+  LoRaWANStartFuotaTask
+newLoRaWANStartFuotaTask =
+  LoRaWANStartFuotaTask' {startTime = Prelude.Nothing}
+
+-- | Undocumented member.
+loRaWANStartFuotaTask_startTime :: Lens.Lens' LoRaWANStartFuotaTask (Prelude.Maybe Prelude.UTCTime)
+loRaWANStartFuotaTask_startTime = Lens.lens (\LoRaWANStartFuotaTask' {startTime} -> startTime) (\s@LoRaWANStartFuotaTask' {} a -> s {startTime = a} :: LoRaWANStartFuotaTask) Prelude.. Lens.mapping Data._Time
+
+instance Prelude.Hashable LoRaWANStartFuotaTask where
+  hashWithSalt _salt LoRaWANStartFuotaTask' {..} =
+    _salt `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData LoRaWANStartFuotaTask where
+  rnf LoRaWANStartFuotaTask' {..} =
+    Prelude.rnf startTime
+
+instance Data.ToJSON LoRaWANStartFuotaTask where
+  toJSON LoRaWANStartFuotaTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("StartTime" Data..=) Prelude.<$> startTime]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateDevice.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateDevice.hs
@@ -0,0 +1,124 @@
+{-# 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.IoTWireless.Types.LoRaWANUpdateDevice
+-- 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.IoTWireless.Types.LoRaWANUpdateDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.UpdateAbpV1_0_x
+import Amazonka.IoTWireless.Types.UpdateAbpV1_1
+import Amazonka.IoTWireless.Types.UpdateFPorts
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWAN object for update functions.
+--
+-- /See:/ 'newLoRaWANUpdateDevice' smart constructor.
+data LoRaWANUpdateDevice = LoRaWANUpdateDevice'
+  { -- | ABP device object for update APIs for v1.0.x
+    abpV1_0_x :: Prelude.Maybe UpdateAbpV1_0_x,
+    -- | ABP device object for update APIs for v1.1
+    abpV1_1 :: Prelude.Maybe UpdateAbpV1_1,
+    -- | The ID of the device profile for the wireless device.
+    deviceProfileId :: Prelude.Maybe Prelude.Text,
+    -- | FPorts object for the positioning information of the device.
+    fPorts :: Prelude.Maybe UpdateFPorts,
+    -- | The ID of the service profile.
+    serviceProfileId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANUpdateDevice' 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:
+--
+-- 'abpV1_0_x', 'loRaWANUpdateDevice_abpV1_0_x' - ABP device object for update APIs for v1.0.x
+--
+-- 'abpV1_1', 'loRaWANUpdateDevice_abpV1_1' - ABP device object for update APIs for v1.1
+--
+-- 'deviceProfileId', 'loRaWANUpdateDevice_deviceProfileId' - The ID of the device profile for the wireless device.
+--
+-- 'fPorts', 'loRaWANUpdateDevice_fPorts' - FPorts object for the positioning information of the device.
+--
+-- 'serviceProfileId', 'loRaWANUpdateDevice_serviceProfileId' - The ID of the service profile.
+newLoRaWANUpdateDevice ::
+  LoRaWANUpdateDevice
+newLoRaWANUpdateDevice =
+  LoRaWANUpdateDevice'
+    { abpV1_0_x = Prelude.Nothing,
+      abpV1_1 = Prelude.Nothing,
+      deviceProfileId = Prelude.Nothing,
+      fPorts = Prelude.Nothing,
+      serviceProfileId = Prelude.Nothing
+    }
+
+-- | ABP device object for update APIs for v1.0.x
+loRaWANUpdateDevice_abpV1_0_x :: Lens.Lens' LoRaWANUpdateDevice (Prelude.Maybe UpdateAbpV1_0_x)
+loRaWANUpdateDevice_abpV1_0_x = Lens.lens (\LoRaWANUpdateDevice' {abpV1_0_x} -> abpV1_0_x) (\s@LoRaWANUpdateDevice' {} a -> s {abpV1_0_x = a} :: LoRaWANUpdateDevice)
+
+-- | ABP device object for update APIs for v1.1
+loRaWANUpdateDevice_abpV1_1 :: Lens.Lens' LoRaWANUpdateDevice (Prelude.Maybe UpdateAbpV1_1)
+loRaWANUpdateDevice_abpV1_1 = Lens.lens (\LoRaWANUpdateDevice' {abpV1_1} -> abpV1_1) (\s@LoRaWANUpdateDevice' {} a -> s {abpV1_1 = a} :: LoRaWANUpdateDevice)
+
+-- | The ID of the device profile for the wireless device.
+loRaWANUpdateDevice_deviceProfileId :: Lens.Lens' LoRaWANUpdateDevice (Prelude.Maybe Prelude.Text)
+loRaWANUpdateDevice_deviceProfileId = Lens.lens (\LoRaWANUpdateDevice' {deviceProfileId} -> deviceProfileId) (\s@LoRaWANUpdateDevice' {} a -> s {deviceProfileId = a} :: LoRaWANUpdateDevice)
+
+-- | FPorts object for the positioning information of the device.
+loRaWANUpdateDevice_fPorts :: Lens.Lens' LoRaWANUpdateDevice (Prelude.Maybe UpdateFPorts)
+loRaWANUpdateDevice_fPorts = Lens.lens (\LoRaWANUpdateDevice' {fPorts} -> fPorts) (\s@LoRaWANUpdateDevice' {} a -> s {fPorts = a} :: LoRaWANUpdateDevice)
+
+-- | The ID of the service profile.
+loRaWANUpdateDevice_serviceProfileId :: Lens.Lens' LoRaWANUpdateDevice (Prelude.Maybe Prelude.Text)
+loRaWANUpdateDevice_serviceProfileId = Lens.lens (\LoRaWANUpdateDevice' {serviceProfileId} -> serviceProfileId) (\s@LoRaWANUpdateDevice' {} a -> s {serviceProfileId = a} :: LoRaWANUpdateDevice)
+
+instance Prelude.Hashable LoRaWANUpdateDevice where
+  hashWithSalt _salt LoRaWANUpdateDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` abpV1_0_x
+      `Prelude.hashWithSalt` abpV1_1
+      `Prelude.hashWithSalt` deviceProfileId
+      `Prelude.hashWithSalt` fPorts
+      `Prelude.hashWithSalt` serviceProfileId
+
+instance Prelude.NFData LoRaWANUpdateDevice where
+  rnf LoRaWANUpdateDevice' {..} =
+    Prelude.rnf abpV1_0_x
+      `Prelude.seq` Prelude.rnf abpV1_1
+      `Prelude.seq` Prelude.rnf deviceProfileId
+      `Prelude.seq` Prelude.rnf fPorts
+      `Prelude.seq` Prelude.rnf serviceProfileId
+
+instance Data.ToJSON LoRaWANUpdateDevice where
+  toJSON LoRaWANUpdateDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AbpV1_0_x" Data..=) Prelude.<$> abpV1_0_x,
+            ("AbpV1_1" Data..=) Prelude.<$> abpV1_1,
+            ("DeviceProfileId" Data..=)
+              Prelude.<$> deviceProfileId,
+            ("FPorts" Data..=) Prelude.<$> fPorts,
+            ("ServiceProfileId" Data..=)
+              Prelude.<$> serviceProfileId
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateGatewayTaskCreate.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateGatewayTaskCreate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateGatewayTaskCreate.hs
@@ -0,0 +1,131 @@
+{-# 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.IoTWireless.Types.LoRaWANUpdateGatewayTaskCreate
+-- 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.IoTWireless.Types.LoRaWANUpdateGatewayTaskCreate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANGatewayVersion
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWANUpdateGatewayTaskCreate object.
+--
+-- /See:/ 'newLoRaWANUpdateGatewayTaskCreate' smart constructor.
+data LoRaWANUpdateGatewayTaskCreate = LoRaWANUpdateGatewayTaskCreate'
+  { -- | The version of the gateways that should receive the update.
+    currentVersion :: Prelude.Maybe LoRaWANGatewayVersion,
+    -- | The CRC of the signature private key to check.
+    sigKeyCrc :: Prelude.Maybe Prelude.Natural,
+    -- | The signature used to verify the update firmware.
+    updateSignature :: Prelude.Maybe Prelude.Text,
+    -- | The firmware version to update the gateway to.
+    updateVersion :: Prelude.Maybe LoRaWANGatewayVersion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANUpdateGatewayTaskCreate' 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:
+--
+-- 'currentVersion', 'loRaWANUpdateGatewayTaskCreate_currentVersion' - The version of the gateways that should receive the update.
+--
+-- 'sigKeyCrc', 'loRaWANUpdateGatewayTaskCreate_sigKeyCrc' - The CRC of the signature private key to check.
+--
+-- 'updateSignature', 'loRaWANUpdateGatewayTaskCreate_updateSignature' - The signature used to verify the update firmware.
+--
+-- 'updateVersion', 'loRaWANUpdateGatewayTaskCreate_updateVersion' - The firmware version to update the gateway to.
+newLoRaWANUpdateGatewayTaskCreate ::
+  LoRaWANUpdateGatewayTaskCreate
+newLoRaWANUpdateGatewayTaskCreate =
+  LoRaWANUpdateGatewayTaskCreate'
+    { currentVersion =
+        Prelude.Nothing,
+      sigKeyCrc = Prelude.Nothing,
+      updateSignature = Prelude.Nothing,
+      updateVersion = Prelude.Nothing
+    }
+
+-- | The version of the gateways that should receive the update.
+loRaWANUpdateGatewayTaskCreate_currentVersion :: Lens.Lens' LoRaWANUpdateGatewayTaskCreate (Prelude.Maybe LoRaWANGatewayVersion)
+loRaWANUpdateGatewayTaskCreate_currentVersion = Lens.lens (\LoRaWANUpdateGatewayTaskCreate' {currentVersion} -> currentVersion) (\s@LoRaWANUpdateGatewayTaskCreate' {} a -> s {currentVersion = a} :: LoRaWANUpdateGatewayTaskCreate)
+
+-- | The CRC of the signature private key to check.
+loRaWANUpdateGatewayTaskCreate_sigKeyCrc :: Lens.Lens' LoRaWANUpdateGatewayTaskCreate (Prelude.Maybe Prelude.Natural)
+loRaWANUpdateGatewayTaskCreate_sigKeyCrc = Lens.lens (\LoRaWANUpdateGatewayTaskCreate' {sigKeyCrc} -> sigKeyCrc) (\s@LoRaWANUpdateGatewayTaskCreate' {} a -> s {sigKeyCrc = a} :: LoRaWANUpdateGatewayTaskCreate)
+
+-- | The signature used to verify the update firmware.
+loRaWANUpdateGatewayTaskCreate_updateSignature :: Lens.Lens' LoRaWANUpdateGatewayTaskCreate (Prelude.Maybe Prelude.Text)
+loRaWANUpdateGatewayTaskCreate_updateSignature = Lens.lens (\LoRaWANUpdateGatewayTaskCreate' {updateSignature} -> updateSignature) (\s@LoRaWANUpdateGatewayTaskCreate' {} a -> s {updateSignature = a} :: LoRaWANUpdateGatewayTaskCreate)
+
+-- | The firmware version to update the gateway to.
+loRaWANUpdateGatewayTaskCreate_updateVersion :: Lens.Lens' LoRaWANUpdateGatewayTaskCreate (Prelude.Maybe LoRaWANGatewayVersion)
+loRaWANUpdateGatewayTaskCreate_updateVersion = Lens.lens (\LoRaWANUpdateGatewayTaskCreate' {updateVersion} -> updateVersion) (\s@LoRaWANUpdateGatewayTaskCreate' {} a -> s {updateVersion = a} :: LoRaWANUpdateGatewayTaskCreate)
+
+instance Data.FromJSON LoRaWANUpdateGatewayTaskCreate where
+  parseJSON =
+    Data.withObject
+      "LoRaWANUpdateGatewayTaskCreate"
+      ( \x ->
+          LoRaWANUpdateGatewayTaskCreate'
+            Prelude.<$> (x Data..:? "CurrentVersion")
+            Prelude.<*> (x Data..:? "SigKeyCrc")
+            Prelude.<*> (x Data..:? "UpdateSignature")
+            Prelude.<*> (x Data..:? "UpdateVersion")
+      )
+
+instance
+  Prelude.Hashable
+    LoRaWANUpdateGatewayTaskCreate
+  where
+  hashWithSalt
+    _salt
+    LoRaWANUpdateGatewayTaskCreate' {..} =
+      _salt
+        `Prelude.hashWithSalt` currentVersion
+        `Prelude.hashWithSalt` sigKeyCrc
+        `Prelude.hashWithSalt` updateSignature
+        `Prelude.hashWithSalt` updateVersion
+
+instance
+  Prelude.NFData
+    LoRaWANUpdateGatewayTaskCreate
+  where
+  rnf LoRaWANUpdateGatewayTaskCreate' {..} =
+    Prelude.rnf currentVersion
+      `Prelude.seq` Prelude.rnf sigKeyCrc
+      `Prelude.seq` Prelude.rnf updateSignature
+      `Prelude.seq` Prelude.rnf updateVersion
+
+instance Data.ToJSON LoRaWANUpdateGatewayTaskCreate where
+  toJSON LoRaWANUpdateGatewayTaskCreate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CurrentVersion" Data..=)
+              Prelude.<$> currentVersion,
+            ("SigKeyCrc" Data..=) Prelude.<$> sigKeyCrc,
+            ("UpdateSignature" Data..=)
+              Prelude.<$> updateSignature,
+            ("UpdateVersion" Data..=) Prelude.<$> updateVersion
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateGatewayTaskEntry.hs b/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateGatewayTaskEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LoRaWANUpdateGatewayTaskEntry.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.IoTWireless.Types.LoRaWANUpdateGatewayTaskEntry
+-- 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.IoTWireless.Types.LoRaWANUpdateGatewayTaskEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANGatewayVersion
+import qualified Amazonka.Prelude as Prelude
+
+-- | LoRaWANUpdateGatewayTaskEntry object.
+--
+-- /See:/ 'newLoRaWANUpdateGatewayTaskEntry' smart constructor.
+data LoRaWANUpdateGatewayTaskEntry = LoRaWANUpdateGatewayTaskEntry'
+  { -- | The version of the gateways that should receive the update.
+    currentVersion :: Prelude.Maybe LoRaWANGatewayVersion,
+    -- | The firmware version to update the gateway to.
+    updateVersion :: Prelude.Maybe LoRaWANGatewayVersion
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoRaWANUpdateGatewayTaskEntry' 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:
+--
+-- 'currentVersion', 'loRaWANUpdateGatewayTaskEntry_currentVersion' - The version of the gateways that should receive the update.
+--
+-- 'updateVersion', 'loRaWANUpdateGatewayTaskEntry_updateVersion' - The firmware version to update the gateway to.
+newLoRaWANUpdateGatewayTaskEntry ::
+  LoRaWANUpdateGatewayTaskEntry
+newLoRaWANUpdateGatewayTaskEntry =
+  LoRaWANUpdateGatewayTaskEntry'
+    { currentVersion =
+        Prelude.Nothing,
+      updateVersion = Prelude.Nothing
+    }
+
+-- | The version of the gateways that should receive the update.
+loRaWANUpdateGatewayTaskEntry_currentVersion :: Lens.Lens' LoRaWANUpdateGatewayTaskEntry (Prelude.Maybe LoRaWANGatewayVersion)
+loRaWANUpdateGatewayTaskEntry_currentVersion = Lens.lens (\LoRaWANUpdateGatewayTaskEntry' {currentVersion} -> currentVersion) (\s@LoRaWANUpdateGatewayTaskEntry' {} a -> s {currentVersion = a} :: LoRaWANUpdateGatewayTaskEntry)
+
+-- | The firmware version to update the gateway to.
+loRaWANUpdateGatewayTaskEntry_updateVersion :: Lens.Lens' LoRaWANUpdateGatewayTaskEntry (Prelude.Maybe LoRaWANGatewayVersion)
+loRaWANUpdateGatewayTaskEntry_updateVersion = Lens.lens (\LoRaWANUpdateGatewayTaskEntry' {updateVersion} -> updateVersion) (\s@LoRaWANUpdateGatewayTaskEntry' {} a -> s {updateVersion = a} :: LoRaWANUpdateGatewayTaskEntry)
+
+instance Data.FromJSON LoRaWANUpdateGatewayTaskEntry where
+  parseJSON =
+    Data.withObject
+      "LoRaWANUpdateGatewayTaskEntry"
+      ( \x ->
+          LoRaWANUpdateGatewayTaskEntry'
+            Prelude.<$> (x Data..:? "CurrentVersion")
+            Prelude.<*> (x Data..:? "UpdateVersion")
+      )
+
+instance
+  Prelude.Hashable
+    LoRaWANUpdateGatewayTaskEntry
+  where
+  hashWithSalt _salt LoRaWANUpdateGatewayTaskEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentVersion
+      `Prelude.hashWithSalt` updateVersion
+
+instance Prelude.NFData LoRaWANUpdateGatewayTaskEntry where
+  rnf LoRaWANUpdateGatewayTaskEntry' {..} =
+    Prelude.rnf currentVersion
+      `Prelude.seq` Prelude.rnf updateVersion
diff --git a/gen/Amazonka/IoTWireless/Types/LogLevel.hs b/gen/Amazonka/IoTWireless/Types/LogLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LogLevel.hs
@@ -0,0 +1,79 @@
+{-# 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.IoTWireless.Types.LogLevel
+-- 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.IoTWireless.Types.LogLevel
+  ( LogLevel
+      ( ..,
+        LogLevel_DISABLED,
+        LogLevel_ERROR,
+        LogLevel_INFO
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The log level for a log message. The log levels can be disabled, or set
+-- to @ERROR@ to display less verbose logs containing only error
+-- information, or to @INFO@ for more detailed logs.
+newtype LogLevel = LogLevel'
+  { fromLogLevel ::
+      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 LogLevel_DISABLED :: LogLevel
+pattern LogLevel_DISABLED = LogLevel' "DISABLED"
+
+pattern LogLevel_ERROR :: LogLevel
+pattern LogLevel_ERROR = LogLevel' "ERROR"
+
+pattern LogLevel_INFO :: LogLevel
+pattern LogLevel_INFO = LogLevel' "INFO"
+
+{-# COMPLETE
+  LogLevel_DISABLED,
+  LogLevel_ERROR,
+  LogLevel_INFO,
+  LogLevel'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/LteLocalId.hs b/gen/Amazonka/IoTWireless/Types/LteLocalId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LteLocalId.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.IoTWireless.Types.LteLocalId
+-- 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.IoTWireless.Types.LteLocalId 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
+
+-- | LTE local identification (local ID) information.
+--
+-- /See:/ 'newLteLocalId' smart constructor.
+data LteLocalId = LteLocalId'
+  { -- | Physical cell ID.
+    pci :: Prelude.Natural,
+    -- | Evolved universal terrestrial radio access (E-UTRA) absolute radio
+    -- frequency channel number (FCN).
+    earfcn :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LteLocalId' 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:
+--
+-- 'pci', 'lteLocalId_pci' - Physical cell ID.
+--
+-- 'earfcn', 'lteLocalId_earfcn' - Evolved universal terrestrial radio access (E-UTRA) absolute radio
+-- frequency channel number (FCN).
+newLteLocalId ::
+  -- | 'pci'
+  Prelude.Natural ->
+  -- | 'earfcn'
+  Prelude.Natural ->
+  LteLocalId
+newLteLocalId pPci_ pEarfcn_ =
+  LteLocalId' {pci = pPci_, earfcn = pEarfcn_}
+
+-- | Physical cell ID.
+lteLocalId_pci :: Lens.Lens' LteLocalId Prelude.Natural
+lteLocalId_pci = Lens.lens (\LteLocalId' {pci} -> pci) (\s@LteLocalId' {} a -> s {pci = a} :: LteLocalId)
+
+-- | Evolved universal terrestrial radio access (E-UTRA) absolute radio
+-- frequency channel number (FCN).
+lteLocalId_earfcn :: Lens.Lens' LteLocalId Prelude.Natural
+lteLocalId_earfcn = Lens.lens (\LteLocalId' {earfcn} -> earfcn) (\s@LteLocalId' {} a -> s {earfcn = a} :: LteLocalId)
+
+instance Prelude.Hashable LteLocalId where
+  hashWithSalt _salt LteLocalId' {..} =
+    _salt
+      `Prelude.hashWithSalt` pci
+      `Prelude.hashWithSalt` earfcn
+
+instance Prelude.NFData LteLocalId where
+  rnf LteLocalId' {..} =
+    Prelude.rnf pci `Prelude.seq` Prelude.rnf earfcn
+
+instance Data.ToJSON LteLocalId where
+  toJSON LteLocalId' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Pci" Data..= pci),
+            Prelude.Just ("Earfcn" Data..= earfcn)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LteNmrObj.hs b/gen/Amazonka/IoTWireless/Types/LteNmrObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LteNmrObj.hs
@@ -0,0 +1,137 @@
+{-# 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.IoTWireless.Types.LteNmrObj
+-- 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.IoTWireless.Types.LteNmrObj 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
+
+-- | LTE object for network measurement reports.
+--
+-- /See:/ 'newLteNmrObj' smart constructor.
+data LteNmrObj = LteNmrObj'
+  { -- | Signal power of the reference signal received, measured in dBm
+    -- (decibel-milliwatts).
+    rsrp :: Prelude.Maybe Prelude.Int,
+    -- | Signal quality of the reference Signal received, measured in decibels
+    -- (dB).
+    rsrq :: Prelude.Maybe Prelude.Double,
+    -- | Physical cell ID.
+    pci :: Prelude.Natural,
+    -- | E-UTRA (Evolved universal terrestrial Radio Access) absolute radio
+    -- frequency channel Number (EARFCN).
+    earfcn :: Prelude.Natural,
+    -- | E-UTRAN (Evolved Universal Terrestrial Radio Access Network) cell global
+    -- identifier (EUTRANCID).
+    eutranCid :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LteNmrObj' 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:
+--
+-- 'rsrp', 'lteNmrObj_rsrp' - Signal power of the reference signal received, measured in dBm
+-- (decibel-milliwatts).
+--
+-- 'rsrq', 'lteNmrObj_rsrq' - Signal quality of the reference Signal received, measured in decibels
+-- (dB).
+--
+-- 'pci', 'lteNmrObj_pci' - Physical cell ID.
+--
+-- 'earfcn', 'lteNmrObj_earfcn' - E-UTRA (Evolved universal terrestrial Radio Access) absolute radio
+-- frequency channel Number (EARFCN).
+--
+-- 'eutranCid', 'lteNmrObj_eutranCid' - E-UTRAN (Evolved Universal Terrestrial Radio Access Network) cell global
+-- identifier (EUTRANCID).
+newLteNmrObj ::
+  -- | 'pci'
+  Prelude.Natural ->
+  -- | 'earfcn'
+  Prelude.Natural ->
+  -- | 'eutranCid'
+  Prelude.Natural ->
+  LteNmrObj
+newLteNmrObj pPci_ pEarfcn_ pEutranCid_ =
+  LteNmrObj'
+    { rsrp = Prelude.Nothing,
+      rsrq = Prelude.Nothing,
+      pci = pPci_,
+      earfcn = pEarfcn_,
+      eutranCid = pEutranCid_
+    }
+
+-- | Signal power of the reference signal received, measured in dBm
+-- (decibel-milliwatts).
+lteNmrObj_rsrp :: Lens.Lens' LteNmrObj (Prelude.Maybe Prelude.Int)
+lteNmrObj_rsrp = Lens.lens (\LteNmrObj' {rsrp} -> rsrp) (\s@LteNmrObj' {} a -> s {rsrp = a} :: LteNmrObj)
+
+-- | Signal quality of the reference Signal received, measured in decibels
+-- (dB).
+lteNmrObj_rsrq :: Lens.Lens' LteNmrObj (Prelude.Maybe Prelude.Double)
+lteNmrObj_rsrq = Lens.lens (\LteNmrObj' {rsrq} -> rsrq) (\s@LteNmrObj' {} a -> s {rsrq = a} :: LteNmrObj)
+
+-- | Physical cell ID.
+lteNmrObj_pci :: Lens.Lens' LteNmrObj Prelude.Natural
+lteNmrObj_pci = Lens.lens (\LteNmrObj' {pci} -> pci) (\s@LteNmrObj' {} a -> s {pci = a} :: LteNmrObj)
+
+-- | E-UTRA (Evolved universal terrestrial Radio Access) absolute radio
+-- frequency channel Number (EARFCN).
+lteNmrObj_earfcn :: Lens.Lens' LteNmrObj Prelude.Natural
+lteNmrObj_earfcn = Lens.lens (\LteNmrObj' {earfcn} -> earfcn) (\s@LteNmrObj' {} a -> s {earfcn = a} :: LteNmrObj)
+
+-- | E-UTRAN (Evolved Universal Terrestrial Radio Access Network) cell global
+-- identifier (EUTRANCID).
+lteNmrObj_eutranCid :: Lens.Lens' LteNmrObj Prelude.Natural
+lteNmrObj_eutranCid = Lens.lens (\LteNmrObj' {eutranCid} -> eutranCid) (\s@LteNmrObj' {} a -> s {eutranCid = a} :: LteNmrObj)
+
+instance Prelude.Hashable LteNmrObj where
+  hashWithSalt _salt LteNmrObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` rsrp
+      `Prelude.hashWithSalt` rsrq
+      `Prelude.hashWithSalt` pci
+      `Prelude.hashWithSalt` earfcn
+      `Prelude.hashWithSalt` eutranCid
+
+instance Prelude.NFData LteNmrObj where
+  rnf LteNmrObj' {..} =
+    Prelude.rnf rsrp
+      `Prelude.seq` Prelude.rnf rsrq
+      `Prelude.seq` Prelude.rnf pci
+      `Prelude.seq` Prelude.rnf earfcn
+      `Prelude.seq` Prelude.rnf eutranCid
+
+instance Data.ToJSON LteNmrObj where
+  toJSON LteNmrObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Rsrp" Data..=) Prelude.<$> rsrp,
+            ("Rsrq" Data..=) Prelude.<$> rsrq,
+            Prelude.Just ("Pci" Data..= pci),
+            Prelude.Just ("Earfcn" Data..= earfcn),
+            Prelude.Just ("EutranCid" Data..= eutranCid)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/LteObj.hs b/gen/Amazonka/IoTWireless/Types/LteObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/LteObj.hs
@@ -0,0 +1,200 @@
+{-# 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.IoTWireless.Types.LteObj
+-- 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.IoTWireless.Types.LteObj where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LteLocalId
+import Amazonka.IoTWireless.Types.LteNmrObj
+import qualified Amazonka.Prelude as Prelude
+
+-- | LTE object.
+--
+-- /See:/ 'newLteObj' smart constructor.
+data LteObj = LteObj'
+  { -- | LTE local identification (local ID) information.
+    lteLocalId :: Prelude.Maybe LteLocalId,
+    -- | LTE object for network measurement reports.
+    lteNmr :: Prelude.Maybe (Prelude.NonEmpty LteNmrObj),
+    -- | LTE timing advance.
+    lteTimingAdvance :: Prelude.Maybe Prelude.Natural,
+    -- | Parameter that determines whether the LTE object is capable of
+    -- supporting NR (new radio).
+    nrCapable :: Prelude.Maybe Prelude.Bool,
+    -- | Signal power of the reference signal received, measured in dBm
+    -- (decibel-milliwatts).
+    rsrp :: Prelude.Maybe Prelude.Int,
+    -- | Signal quality of the reference Signal received, measured in decibels
+    -- (dB).
+    rsrq :: Prelude.Maybe Prelude.Double,
+    -- | LTE tracking area code.
+    tac :: Prelude.Maybe Prelude.Natural,
+    -- | Mobile Country Code.
+    mcc :: Prelude.Natural,
+    -- | Mobile Network Code.
+    mnc :: Prelude.Natural,
+    -- | E-UTRAN (Evolved Universal Terrestrial Radio Access Network) Cell Global
+    -- Identifier.
+    eutranCid :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LteObj' 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:
+--
+-- 'lteLocalId', 'lteObj_lteLocalId' - LTE local identification (local ID) information.
+--
+-- 'lteNmr', 'lteObj_lteNmr' - LTE object for network measurement reports.
+--
+-- 'lteTimingAdvance', 'lteObj_lteTimingAdvance' - LTE timing advance.
+--
+-- 'nrCapable', 'lteObj_nrCapable' - Parameter that determines whether the LTE object is capable of
+-- supporting NR (new radio).
+--
+-- 'rsrp', 'lteObj_rsrp' - Signal power of the reference signal received, measured in dBm
+-- (decibel-milliwatts).
+--
+-- 'rsrq', 'lteObj_rsrq' - Signal quality of the reference Signal received, measured in decibels
+-- (dB).
+--
+-- 'tac', 'lteObj_tac' - LTE tracking area code.
+--
+-- 'mcc', 'lteObj_mcc' - Mobile Country Code.
+--
+-- 'mnc', 'lteObj_mnc' - Mobile Network Code.
+--
+-- 'eutranCid', 'lteObj_eutranCid' - E-UTRAN (Evolved Universal Terrestrial Radio Access Network) Cell Global
+-- Identifier.
+newLteObj ::
+  -- | 'mcc'
+  Prelude.Natural ->
+  -- | 'mnc'
+  Prelude.Natural ->
+  -- | 'eutranCid'
+  Prelude.Natural ->
+  LteObj
+newLteObj pMcc_ pMnc_ pEutranCid_ =
+  LteObj'
+    { lteLocalId = Prelude.Nothing,
+      lteNmr = Prelude.Nothing,
+      lteTimingAdvance = Prelude.Nothing,
+      nrCapable = Prelude.Nothing,
+      rsrp = Prelude.Nothing,
+      rsrq = Prelude.Nothing,
+      tac = Prelude.Nothing,
+      mcc = pMcc_,
+      mnc = pMnc_,
+      eutranCid = pEutranCid_
+    }
+
+-- | LTE local identification (local ID) information.
+lteObj_lteLocalId :: Lens.Lens' LteObj (Prelude.Maybe LteLocalId)
+lteObj_lteLocalId = Lens.lens (\LteObj' {lteLocalId} -> lteLocalId) (\s@LteObj' {} a -> s {lteLocalId = a} :: LteObj)
+
+-- | LTE object for network measurement reports.
+lteObj_lteNmr :: Lens.Lens' LteObj (Prelude.Maybe (Prelude.NonEmpty LteNmrObj))
+lteObj_lteNmr = Lens.lens (\LteObj' {lteNmr} -> lteNmr) (\s@LteObj' {} a -> s {lteNmr = a} :: LteObj) Prelude.. Lens.mapping Lens.coerced
+
+-- | LTE timing advance.
+lteObj_lteTimingAdvance :: Lens.Lens' LteObj (Prelude.Maybe Prelude.Natural)
+lteObj_lteTimingAdvance = Lens.lens (\LteObj' {lteTimingAdvance} -> lteTimingAdvance) (\s@LteObj' {} a -> s {lteTimingAdvance = a} :: LteObj)
+
+-- | Parameter that determines whether the LTE object is capable of
+-- supporting NR (new radio).
+lteObj_nrCapable :: Lens.Lens' LteObj (Prelude.Maybe Prelude.Bool)
+lteObj_nrCapable = Lens.lens (\LteObj' {nrCapable} -> nrCapable) (\s@LteObj' {} a -> s {nrCapable = a} :: LteObj)
+
+-- | Signal power of the reference signal received, measured in dBm
+-- (decibel-milliwatts).
+lteObj_rsrp :: Lens.Lens' LteObj (Prelude.Maybe Prelude.Int)
+lteObj_rsrp = Lens.lens (\LteObj' {rsrp} -> rsrp) (\s@LteObj' {} a -> s {rsrp = a} :: LteObj)
+
+-- | Signal quality of the reference Signal received, measured in decibels
+-- (dB).
+lteObj_rsrq :: Lens.Lens' LteObj (Prelude.Maybe Prelude.Double)
+lteObj_rsrq = Lens.lens (\LteObj' {rsrq} -> rsrq) (\s@LteObj' {} a -> s {rsrq = a} :: LteObj)
+
+-- | LTE tracking area code.
+lteObj_tac :: Lens.Lens' LteObj (Prelude.Maybe Prelude.Natural)
+lteObj_tac = Lens.lens (\LteObj' {tac} -> tac) (\s@LteObj' {} a -> s {tac = a} :: LteObj)
+
+-- | Mobile Country Code.
+lteObj_mcc :: Lens.Lens' LteObj Prelude.Natural
+lteObj_mcc = Lens.lens (\LteObj' {mcc} -> mcc) (\s@LteObj' {} a -> s {mcc = a} :: LteObj)
+
+-- | Mobile Network Code.
+lteObj_mnc :: Lens.Lens' LteObj Prelude.Natural
+lteObj_mnc = Lens.lens (\LteObj' {mnc} -> mnc) (\s@LteObj' {} a -> s {mnc = a} :: LteObj)
+
+-- | E-UTRAN (Evolved Universal Terrestrial Radio Access Network) Cell Global
+-- Identifier.
+lteObj_eutranCid :: Lens.Lens' LteObj Prelude.Natural
+lteObj_eutranCid = Lens.lens (\LteObj' {eutranCid} -> eutranCid) (\s@LteObj' {} a -> s {eutranCid = a} :: LteObj)
+
+instance Prelude.Hashable LteObj where
+  hashWithSalt _salt LteObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` lteLocalId
+      `Prelude.hashWithSalt` lteNmr
+      `Prelude.hashWithSalt` lteTimingAdvance
+      `Prelude.hashWithSalt` nrCapable
+      `Prelude.hashWithSalt` rsrp
+      `Prelude.hashWithSalt` rsrq
+      `Prelude.hashWithSalt` tac
+      `Prelude.hashWithSalt` mcc
+      `Prelude.hashWithSalt` mnc
+      `Prelude.hashWithSalt` eutranCid
+
+instance Prelude.NFData LteObj where
+  rnf LteObj' {..} =
+    Prelude.rnf lteLocalId
+      `Prelude.seq` Prelude.rnf lteNmr
+      `Prelude.seq` Prelude.rnf lteTimingAdvance
+      `Prelude.seq` Prelude.rnf nrCapable
+      `Prelude.seq` Prelude.rnf rsrp
+      `Prelude.seq` Prelude.rnf rsrq
+      `Prelude.seq` Prelude.rnf tac
+      `Prelude.seq` Prelude.rnf mcc
+      `Prelude.seq` Prelude.rnf mnc
+      `Prelude.seq` Prelude.rnf eutranCid
+
+instance Data.ToJSON LteObj where
+  toJSON LteObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LteLocalId" Data..=) Prelude.<$> lteLocalId,
+            ("LteNmr" Data..=) Prelude.<$> lteNmr,
+            ("LteTimingAdvance" Data..=)
+              Prelude.<$> lteTimingAdvance,
+            ("NrCapable" Data..=) Prelude.<$> nrCapable,
+            ("Rsrp" Data..=) Prelude.<$> rsrp,
+            ("Rsrq" Data..=) Prelude.<$> rsrq,
+            ("Tac" Data..=) Prelude.<$> tac,
+            Prelude.Just ("Mcc" Data..= mcc),
+            Prelude.Just ("Mnc" Data..= mnc),
+            Prelude.Just ("EutranCid" Data..= eutranCid)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/MessageDeliveryStatusEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/MessageDeliveryStatusEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/MessageDeliveryStatusEventConfiguration.hs
@@ -0,0 +1,115 @@
+{-# 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.IoTWireless.Types.MessageDeliveryStatusEventConfiguration
+-- 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.IoTWireless.Types.MessageDeliveryStatusEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import Amazonka.IoTWireless.Types.SidewalkEventNotificationConfigurations
+import qualified Amazonka.Prelude as Prelude
+
+-- | Message delivery status event configuration object for enabling and
+-- disabling relevant topics.
+--
+-- /See:/ 'newMessageDeliveryStatusEventConfiguration' smart constructor.
+data MessageDeliveryStatusEventConfiguration = MessageDeliveryStatusEventConfiguration'
+  { sidewalk :: Prelude.Maybe SidewalkEventNotificationConfigurations,
+    -- | Denotes whether the wireless device ID message delivery status event
+    -- topic is enabled or disabled.
+    wirelessDeviceIdEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MessageDeliveryStatusEventConfiguration' 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:
+--
+-- 'sidewalk', 'messageDeliveryStatusEventConfiguration_sidewalk' - Undocumented member.
+--
+-- 'wirelessDeviceIdEventTopic', 'messageDeliveryStatusEventConfiguration_wirelessDeviceIdEventTopic' - Denotes whether the wireless device ID message delivery status event
+-- topic is enabled or disabled.
+newMessageDeliveryStatusEventConfiguration ::
+  MessageDeliveryStatusEventConfiguration
+newMessageDeliveryStatusEventConfiguration =
+  MessageDeliveryStatusEventConfiguration'
+    { sidewalk =
+        Prelude.Nothing,
+      wirelessDeviceIdEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Undocumented member.
+messageDeliveryStatusEventConfiguration_sidewalk :: Lens.Lens' MessageDeliveryStatusEventConfiguration (Prelude.Maybe SidewalkEventNotificationConfigurations)
+messageDeliveryStatusEventConfiguration_sidewalk = Lens.lens (\MessageDeliveryStatusEventConfiguration' {sidewalk} -> sidewalk) (\s@MessageDeliveryStatusEventConfiguration' {} a -> s {sidewalk = a} :: MessageDeliveryStatusEventConfiguration)
+
+-- | Denotes whether the wireless device ID message delivery status event
+-- topic is enabled or disabled.
+messageDeliveryStatusEventConfiguration_wirelessDeviceIdEventTopic :: Lens.Lens' MessageDeliveryStatusEventConfiguration (Prelude.Maybe EventNotificationTopicStatus)
+messageDeliveryStatusEventConfiguration_wirelessDeviceIdEventTopic = Lens.lens (\MessageDeliveryStatusEventConfiguration' {wirelessDeviceIdEventTopic} -> wirelessDeviceIdEventTopic) (\s@MessageDeliveryStatusEventConfiguration' {} a -> s {wirelessDeviceIdEventTopic = a} :: MessageDeliveryStatusEventConfiguration)
+
+instance
+  Data.FromJSON
+    MessageDeliveryStatusEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "MessageDeliveryStatusEventConfiguration"
+      ( \x ->
+          MessageDeliveryStatusEventConfiguration'
+            Prelude.<$> (x Data..:? "Sidewalk")
+            Prelude.<*> (x Data..:? "WirelessDeviceIdEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    MessageDeliveryStatusEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    MessageDeliveryStatusEventConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` sidewalk
+        `Prelude.hashWithSalt` wirelessDeviceIdEventTopic
+
+instance
+  Prelude.NFData
+    MessageDeliveryStatusEventConfiguration
+  where
+  rnf MessageDeliveryStatusEventConfiguration' {..} =
+    Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf wirelessDeviceIdEventTopic
+
+instance
+  Data.ToJSON
+    MessageDeliveryStatusEventConfiguration
+  where
+  toJSON MessageDeliveryStatusEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Sidewalk" Data..=) Prelude.<$> sidewalk,
+            ("WirelessDeviceIdEventTopic" Data..=)
+              Prelude.<$> wirelessDeviceIdEventTopic
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/MessageDeliveryStatusResourceTypeEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/MessageDeliveryStatusResourceTypeEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/MessageDeliveryStatusResourceTypeEventConfiguration.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.IoTWireless.Types.MessageDeliveryStatusResourceTypeEventConfiguration
+-- 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.IoTWireless.Types.MessageDeliveryStatusResourceTypeEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.SidewalkResourceTypeEventConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Message delivery status resource type event configuration object for
+-- enabling or disabling relevant topic.
+--
+-- /See:/ 'newMessageDeliveryStatusResourceTypeEventConfiguration' smart constructor.
+data MessageDeliveryStatusResourceTypeEventConfiguration = MessageDeliveryStatusResourceTypeEventConfiguration'
+  { sidewalk :: Prelude.Maybe SidewalkResourceTypeEventConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MessageDeliveryStatusResourceTypeEventConfiguration' 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:
+--
+-- 'sidewalk', 'messageDeliveryStatusResourceTypeEventConfiguration_sidewalk' - Undocumented member.
+newMessageDeliveryStatusResourceTypeEventConfiguration ::
+  MessageDeliveryStatusResourceTypeEventConfiguration
+newMessageDeliveryStatusResourceTypeEventConfiguration =
+  MessageDeliveryStatusResourceTypeEventConfiguration'
+    { sidewalk =
+        Prelude.Nothing
+    }
+
+-- | Undocumented member.
+messageDeliveryStatusResourceTypeEventConfiguration_sidewalk :: Lens.Lens' MessageDeliveryStatusResourceTypeEventConfiguration (Prelude.Maybe SidewalkResourceTypeEventConfiguration)
+messageDeliveryStatusResourceTypeEventConfiguration_sidewalk = Lens.lens (\MessageDeliveryStatusResourceTypeEventConfiguration' {sidewalk} -> sidewalk) (\s@MessageDeliveryStatusResourceTypeEventConfiguration' {} a -> s {sidewalk = a} :: MessageDeliveryStatusResourceTypeEventConfiguration)
+
+instance
+  Data.FromJSON
+    MessageDeliveryStatusResourceTypeEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "MessageDeliveryStatusResourceTypeEventConfiguration"
+      ( \x ->
+          MessageDeliveryStatusResourceTypeEventConfiguration'
+            Prelude.<$> (x Data..:? "Sidewalk")
+      )
+
+instance
+  Prelude.Hashable
+    MessageDeliveryStatusResourceTypeEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    MessageDeliveryStatusResourceTypeEventConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` sidewalk
+
+instance
+  Prelude.NFData
+    MessageDeliveryStatusResourceTypeEventConfiguration
+  where
+  rnf
+    MessageDeliveryStatusResourceTypeEventConfiguration' {..} =
+      Prelude.rnf sidewalk
+
+instance
+  Data.ToJSON
+    MessageDeliveryStatusResourceTypeEventConfiguration
+  where
+  toJSON
+    MessageDeliveryStatusResourceTypeEventConfiguration' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [("Sidewalk" Data..=) Prelude.<$> sidewalk]
+        )
diff --git a/gen/Amazonka/IoTWireless/Types/MessageType.hs b/gen/Amazonka/IoTWireless/Types/MessageType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/MessageType.hs
@@ -0,0 +1,83 @@
+{-# 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.IoTWireless.Types.MessageType
+-- 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.IoTWireless.Types.MessageType
+  ( MessageType
+      ( ..,
+        MessageType_CUSTOM_COMMAND_ID_GET,
+        MessageType_CUSTOM_COMMAND_ID_NOTIFY,
+        MessageType_CUSTOM_COMMAND_ID_RESP,
+        MessageType_CUSTOM_COMMAND_ID_SET
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sidewalk device message type. Default value is
+-- @CUSTOM_COMMAND_ID_NOTIFY@.
+newtype MessageType = MessageType'
+  { fromMessageType ::
+      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 MessageType_CUSTOM_COMMAND_ID_GET :: MessageType
+pattern MessageType_CUSTOM_COMMAND_ID_GET = MessageType' "CUSTOM_COMMAND_ID_GET"
+
+pattern MessageType_CUSTOM_COMMAND_ID_NOTIFY :: MessageType
+pattern MessageType_CUSTOM_COMMAND_ID_NOTIFY = MessageType' "CUSTOM_COMMAND_ID_NOTIFY"
+
+pattern MessageType_CUSTOM_COMMAND_ID_RESP :: MessageType
+pattern MessageType_CUSTOM_COMMAND_ID_RESP = MessageType' "CUSTOM_COMMAND_ID_RESP"
+
+pattern MessageType_CUSTOM_COMMAND_ID_SET :: MessageType
+pattern MessageType_CUSTOM_COMMAND_ID_SET = MessageType' "CUSTOM_COMMAND_ID_SET"
+
+{-# COMPLETE
+  MessageType_CUSTOM_COMMAND_ID_GET,
+  MessageType_CUSTOM_COMMAND_ID_NOTIFY,
+  MessageType_CUSTOM_COMMAND_ID_RESP,
+  MessageType_CUSTOM_COMMAND_ID_SET,
+  MessageType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/MulticastGroup.hs b/gen/Amazonka/IoTWireless/Types/MulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/MulticastGroup.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.IoTWireless.Types.MulticastGroup
+-- 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.IoTWireless.Types.MulticastGroup 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 multicast group.
+--
+-- /See:/ 'newMulticastGroup' smart constructor.
+data MulticastGroup = MulticastGroup'
+  { arn :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MulticastGroup' 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', 'multicastGroup_arn' - Undocumented member.
+--
+-- 'id', 'multicastGroup_id' - Undocumented member.
+--
+-- 'name', 'multicastGroup_name' - Undocumented member.
+newMulticastGroup ::
+  MulticastGroup
+newMulticastGroup =
+  MulticastGroup'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+multicastGroup_arn :: Lens.Lens' MulticastGroup (Prelude.Maybe Prelude.Text)
+multicastGroup_arn = Lens.lens (\MulticastGroup' {arn} -> arn) (\s@MulticastGroup' {} a -> s {arn = a} :: MulticastGroup)
+
+-- | Undocumented member.
+multicastGroup_id :: Lens.Lens' MulticastGroup (Prelude.Maybe Prelude.Text)
+multicastGroup_id = Lens.lens (\MulticastGroup' {id} -> id) (\s@MulticastGroup' {} a -> s {id = a} :: MulticastGroup)
+
+-- | Undocumented member.
+multicastGroup_name :: Lens.Lens' MulticastGroup (Prelude.Maybe Prelude.Text)
+multicastGroup_name = Lens.lens (\MulticastGroup' {name} -> name) (\s@MulticastGroup' {} a -> s {name = a} :: MulticastGroup)
+
+instance Data.FromJSON MulticastGroup where
+  parseJSON =
+    Data.withObject
+      "MulticastGroup"
+      ( \x ->
+          MulticastGroup'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable MulticastGroup where
+  hashWithSalt _salt MulticastGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData MulticastGroup where
+  rnf MulticastGroup' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTWireless/Types/MulticastGroupByFuotaTask.hs b/gen/Amazonka/IoTWireless/Types/MulticastGroupByFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/MulticastGroupByFuotaTask.hs
@@ -0,0 +1,67 @@
+{-# 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.IoTWireless.Types.MulticastGroupByFuotaTask
+-- 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.IoTWireless.Types.MulticastGroupByFuotaTask 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 multicast group that is associated with a FUOTA task.
+--
+-- /See:/ 'newMulticastGroupByFuotaTask' smart constructor.
+data MulticastGroupByFuotaTask = MulticastGroupByFuotaTask'
+  { id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MulticastGroupByFuotaTask' 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:
+--
+-- 'id', 'multicastGroupByFuotaTask_id' - Undocumented member.
+newMulticastGroupByFuotaTask ::
+  MulticastGroupByFuotaTask
+newMulticastGroupByFuotaTask =
+  MulticastGroupByFuotaTask' {id = Prelude.Nothing}
+
+-- | Undocumented member.
+multicastGroupByFuotaTask_id :: Lens.Lens' MulticastGroupByFuotaTask (Prelude.Maybe Prelude.Text)
+multicastGroupByFuotaTask_id = Lens.lens (\MulticastGroupByFuotaTask' {id} -> id) (\s@MulticastGroupByFuotaTask' {} a -> s {id = a} :: MulticastGroupByFuotaTask)
+
+instance Data.FromJSON MulticastGroupByFuotaTask where
+  parseJSON =
+    Data.withObject
+      "MulticastGroupByFuotaTask"
+      ( \x ->
+          MulticastGroupByFuotaTask'
+            Prelude.<$> (x Data..:? "Id")
+      )
+
+instance Prelude.Hashable MulticastGroupByFuotaTask where
+  hashWithSalt _salt MulticastGroupByFuotaTask' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData MulticastGroupByFuotaTask where
+  rnf MulticastGroupByFuotaTask' {..} = Prelude.rnf id
diff --git a/gen/Amazonka/IoTWireless/Types/MulticastWirelessMetadata.hs b/gen/Amazonka/IoTWireless/Types/MulticastWirelessMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/MulticastWirelessMetadata.hs
@@ -0,0 +1,70 @@
+{-# 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.IoTWireless.Types.MulticastWirelessMetadata
+-- 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.IoTWireless.Types.MulticastWirelessMetadata where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANMulticastMetadata
+import qualified Amazonka.Prelude as Prelude
+
+-- | Wireless metadata that is to be sent to multicast group.
+--
+-- /See:/ 'newMulticastWirelessMetadata' smart constructor.
+data MulticastWirelessMetadata = MulticastWirelessMetadata'
+  { loRaWAN :: Prelude.Maybe LoRaWANMulticastMetadata
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MulticastWirelessMetadata' 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:
+--
+-- 'loRaWAN', 'multicastWirelessMetadata_loRaWAN' - Undocumented member.
+newMulticastWirelessMetadata ::
+  MulticastWirelessMetadata
+newMulticastWirelessMetadata =
+  MulticastWirelessMetadata'
+    { loRaWAN =
+        Prelude.Nothing
+    }
+
+-- | Undocumented member.
+multicastWirelessMetadata_loRaWAN :: Lens.Lens' MulticastWirelessMetadata (Prelude.Maybe LoRaWANMulticastMetadata)
+multicastWirelessMetadata_loRaWAN = Lens.lens (\MulticastWirelessMetadata' {loRaWAN} -> loRaWAN) (\s@MulticastWirelessMetadata' {} a -> s {loRaWAN = a} :: MulticastWirelessMetadata)
+
+instance Prelude.Hashable MulticastWirelessMetadata where
+  hashWithSalt _salt MulticastWirelessMetadata' {..} =
+    _salt `Prelude.hashWithSalt` loRaWAN
+
+instance Prelude.NFData MulticastWirelessMetadata where
+  rnf MulticastWirelessMetadata' {..} =
+    Prelude.rnf loRaWAN
+
+instance Data.ToJSON MulticastWirelessMetadata where
+  toJSON MulticastWirelessMetadata' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("LoRaWAN" Data..=) Prelude.<$> loRaWAN]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/NetworkAnalyzerConfigurations.hs b/gen/Amazonka/IoTWireless/Types/NetworkAnalyzerConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/NetworkAnalyzerConfigurations.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.IoTWireless.Types.NetworkAnalyzerConfigurations
+-- 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.IoTWireless.Types.NetworkAnalyzerConfigurations 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
+
+-- | Network analyzer configurations.
+--
+-- /See:/ 'newNetworkAnalyzerConfigurations' smart constructor.
+data NetworkAnalyzerConfigurations = NetworkAnalyzerConfigurations'
+  { -- | The Amazon Resource Name of the new resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkAnalyzerConfigurations' 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', 'networkAnalyzerConfigurations_arn' - The Amazon Resource Name of the new resource.
+--
+-- 'name', 'networkAnalyzerConfigurations_name' - Undocumented member.
+newNetworkAnalyzerConfigurations ::
+  NetworkAnalyzerConfigurations
+newNetworkAnalyzerConfigurations =
+  NetworkAnalyzerConfigurations'
+    { arn =
+        Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name of the new resource.
+networkAnalyzerConfigurations_arn :: Lens.Lens' NetworkAnalyzerConfigurations (Prelude.Maybe Prelude.Text)
+networkAnalyzerConfigurations_arn = Lens.lens (\NetworkAnalyzerConfigurations' {arn} -> arn) (\s@NetworkAnalyzerConfigurations' {} a -> s {arn = a} :: NetworkAnalyzerConfigurations)
+
+-- | Undocumented member.
+networkAnalyzerConfigurations_name :: Lens.Lens' NetworkAnalyzerConfigurations (Prelude.Maybe Prelude.Text)
+networkAnalyzerConfigurations_name = Lens.lens (\NetworkAnalyzerConfigurations' {name} -> name) (\s@NetworkAnalyzerConfigurations' {} a -> s {name = a} :: NetworkAnalyzerConfigurations)
+
+instance Data.FromJSON NetworkAnalyzerConfigurations where
+  parseJSON =
+    Data.withObject
+      "NetworkAnalyzerConfigurations"
+      ( \x ->
+          NetworkAnalyzerConfigurations'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance
+  Prelude.Hashable
+    NetworkAnalyzerConfigurations
+  where
+  hashWithSalt _salt NetworkAnalyzerConfigurations' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData NetworkAnalyzerConfigurations where
+  rnf NetworkAnalyzerConfigurations' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTWireless/Types/OtaaV1_0_x.hs b/gen/Amazonka/IoTWireless/Types/OtaaV1_0_x.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/OtaaV1_0_x.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.IoTWireless.Types.OtaaV1_0_x
+-- 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.IoTWireless.Types.OtaaV1_0_x 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
+
+-- | OTAA device object for v1.0.x
+--
+-- /See:/ 'newOtaaV1_0_x' smart constructor.
+data OtaaV1_0_x = OtaaV1_0_x'
+  { -- | The AppEUI value.
+    appEui :: Prelude.Maybe Prelude.Text,
+    -- | The AppKey value.
+    appKey :: Prelude.Maybe Prelude.Text,
+    -- | The GenAppKey value.
+    genAppKey :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OtaaV1_0_x' 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:
+--
+-- 'appEui', 'otaaV1_0_x_appEui' - The AppEUI value.
+--
+-- 'appKey', 'otaaV1_0_x_appKey' - The AppKey value.
+--
+-- 'genAppKey', 'otaaV1_0_x_genAppKey' - The GenAppKey value.
+newOtaaV1_0_x ::
+  OtaaV1_0_x
+newOtaaV1_0_x =
+  OtaaV1_0_x'
+    { appEui = Prelude.Nothing,
+      appKey = Prelude.Nothing,
+      genAppKey = Prelude.Nothing
+    }
+
+-- | The AppEUI value.
+otaaV1_0_x_appEui :: Lens.Lens' OtaaV1_0_x (Prelude.Maybe Prelude.Text)
+otaaV1_0_x_appEui = Lens.lens (\OtaaV1_0_x' {appEui} -> appEui) (\s@OtaaV1_0_x' {} a -> s {appEui = a} :: OtaaV1_0_x)
+
+-- | The AppKey value.
+otaaV1_0_x_appKey :: Lens.Lens' OtaaV1_0_x (Prelude.Maybe Prelude.Text)
+otaaV1_0_x_appKey = Lens.lens (\OtaaV1_0_x' {appKey} -> appKey) (\s@OtaaV1_0_x' {} a -> s {appKey = a} :: OtaaV1_0_x)
+
+-- | The GenAppKey value.
+otaaV1_0_x_genAppKey :: Lens.Lens' OtaaV1_0_x (Prelude.Maybe Prelude.Text)
+otaaV1_0_x_genAppKey = Lens.lens (\OtaaV1_0_x' {genAppKey} -> genAppKey) (\s@OtaaV1_0_x' {} a -> s {genAppKey = a} :: OtaaV1_0_x)
+
+instance Data.FromJSON OtaaV1_0_x where
+  parseJSON =
+    Data.withObject
+      "OtaaV1_0_x"
+      ( \x ->
+          OtaaV1_0_x'
+            Prelude.<$> (x Data..:? "AppEui")
+            Prelude.<*> (x Data..:? "AppKey")
+            Prelude.<*> (x Data..:? "GenAppKey")
+      )
+
+instance Prelude.Hashable OtaaV1_0_x where
+  hashWithSalt _salt OtaaV1_0_x' {..} =
+    _salt
+      `Prelude.hashWithSalt` appEui
+      `Prelude.hashWithSalt` appKey
+      `Prelude.hashWithSalt` genAppKey
+
+instance Prelude.NFData OtaaV1_0_x where
+  rnf OtaaV1_0_x' {..} =
+    Prelude.rnf appEui
+      `Prelude.seq` Prelude.rnf appKey
+      `Prelude.seq` Prelude.rnf genAppKey
+
+instance Data.ToJSON OtaaV1_0_x where
+  toJSON OtaaV1_0_x' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppEui" Data..=) Prelude.<$> appEui,
+            ("AppKey" Data..=) Prelude.<$> appKey,
+            ("GenAppKey" Data..=) Prelude.<$> genAppKey
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/OtaaV1_1.hs b/gen/Amazonka/IoTWireless/Types/OtaaV1_1.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/OtaaV1_1.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.IoTWireless.Types.OtaaV1_1
+-- 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.IoTWireless.Types.OtaaV1_1 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
+
+-- | OTAA device object for v1.1
+--
+-- /See:/ 'newOtaaV1_1' smart constructor.
+data OtaaV1_1 = OtaaV1_1'
+  { -- | The AppKey value.
+    appKey :: Prelude.Maybe Prelude.Text,
+    -- | The JoinEUI value.
+    joinEui :: Prelude.Maybe Prelude.Text,
+    -- | The NwkKey value.
+    nwkKey :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OtaaV1_1' 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:
+--
+-- 'appKey', 'otaaV1_1_appKey' - The AppKey value.
+--
+-- 'joinEui', 'otaaV1_1_joinEui' - The JoinEUI value.
+--
+-- 'nwkKey', 'otaaV1_1_nwkKey' - The NwkKey value.
+newOtaaV1_1 ::
+  OtaaV1_1
+newOtaaV1_1 =
+  OtaaV1_1'
+    { appKey = Prelude.Nothing,
+      joinEui = Prelude.Nothing,
+      nwkKey = Prelude.Nothing
+    }
+
+-- | The AppKey value.
+otaaV1_1_appKey :: Lens.Lens' OtaaV1_1 (Prelude.Maybe Prelude.Text)
+otaaV1_1_appKey = Lens.lens (\OtaaV1_1' {appKey} -> appKey) (\s@OtaaV1_1' {} a -> s {appKey = a} :: OtaaV1_1)
+
+-- | The JoinEUI value.
+otaaV1_1_joinEui :: Lens.Lens' OtaaV1_1 (Prelude.Maybe Prelude.Text)
+otaaV1_1_joinEui = Lens.lens (\OtaaV1_1' {joinEui} -> joinEui) (\s@OtaaV1_1' {} a -> s {joinEui = a} :: OtaaV1_1)
+
+-- | The NwkKey value.
+otaaV1_1_nwkKey :: Lens.Lens' OtaaV1_1 (Prelude.Maybe Prelude.Text)
+otaaV1_1_nwkKey = Lens.lens (\OtaaV1_1' {nwkKey} -> nwkKey) (\s@OtaaV1_1' {} a -> s {nwkKey = a} :: OtaaV1_1)
+
+instance Data.FromJSON OtaaV1_1 where
+  parseJSON =
+    Data.withObject
+      "OtaaV1_1"
+      ( \x ->
+          OtaaV1_1'
+            Prelude.<$> (x Data..:? "AppKey")
+            Prelude.<*> (x Data..:? "JoinEui")
+            Prelude.<*> (x Data..:? "NwkKey")
+      )
+
+instance Prelude.Hashable OtaaV1_1 where
+  hashWithSalt _salt OtaaV1_1' {..} =
+    _salt
+      `Prelude.hashWithSalt` appKey
+      `Prelude.hashWithSalt` joinEui
+      `Prelude.hashWithSalt` nwkKey
+
+instance Prelude.NFData OtaaV1_1 where
+  rnf OtaaV1_1' {..} =
+    Prelude.rnf appKey
+      `Prelude.seq` Prelude.rnf joinEui
+      `Prelude.seq` Prelude.rnf nwkKey
+
+instance Data.ToJSON OtaaV1_1 where
+  toJSON OtaaV1_1' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppKey" Data..=) Prelude.<$> appKey,
+            ("JoinEui" Data..=) Prelude.<$> joinEui,
+            ("NwkKey" Data..=) Prelude.<$> nwkKey
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/ParticipatingGateways.hs b/gen/Amazonka/IoTWireless/Types/ParticipatingGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ParticipatingGateways.hs
@@ -0,0 +1,131 @@
+{-# 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.IoTWireless.Types.ParticipatingGateways
+-- 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.IoTWireless.Types.ParticipatingGateways where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.DownlinkMode
+import Amazonka.IoTWireless.Types.GatewayListItem
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specify the list of gateways to which you want to send downlink data
+-- traffic when the wireless device is running in class B or class C mode.
+--
+-- /See:/ 'newParticipatingGateways' smart constructor.
+data ParticipatingGateways = ParticipatingGateways'
+  { -- | Indicates whether to send the downlink message in sequential mode or
+    -- concurrent mode, or to use only the chosen gateways from the previous
+    -- uplink message transmission.
+    downlinkMode :: DownlinkMode,
+    -- | The list of gateways that you want to use for sending the downlink data
+    -- traffic.
+    gatewayList :: [GatewayListItem],
+    -- | The duration of time for which AWS IoT Core for LoRaWAN will wait before
+    -- transmitting the payload to the next gateway.
+    transmissionInterval :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ParticipatingGateways' 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:
+--
+-- 'downlinkMode', 'participatingGateways_downlinkMode' - Indicates whether to send the downlink message in sequential mode or
+-- concurrent mode, or to use only the chosen gateways from the previous
+-- uplink message transmission.
+--
+-- 'gatewayList', 'participatingGateways_gatewayList' - The list of gateways that you want to use for sending the downlink data
+-- traffic.
+--
+-- 'transmissionInterval', 'participatingGateways_transmissionInterval' - The duration of time for which AWS IoT Core for LoRaWAN will wait before
+-- transmitting the payload to the next gateway.
+newParticipatingGateways ::
+  -- | 'downlinkMode'
+  DownlinkMode ->
+  -- | 'transmissionInterval'
+  Prelude.Natural ->
+  ParticipatingGateways
+newParticipatingGateways
+  pDownlinkMode_
+  pTransmissionInterval_ =
+    ParticipatingGateways'
+      { downlinkMode =
+          pDownlinkMode_,
+        gatewayList = Prelude.mempty,
+        transmissionInterval = pTransmissionInterval_
+      }
+
+-- | Indicates whether to send the downlink message in sequential mode or
+-- concurrent mode, or to use only the chosen gateways from the previous
+-- uplink message transmission.
+participatingGateways_downlinkMode :: Lens.Lens' ParticipatingGateways DownlinkMode
+participatingGateways_downlinkMode = Lens.lens (\ParticipatingGateways' {downlinkMode} -> downlinkMode) (\s@ParticipatingGateways' {} a -> s {downlinkMode = a} :: ParticipatingGateways)
+
+-- | The list of gateways that you want to use for sending the downlink data
+-- traffic.
+participatingGateways_gatewayList :: Lens.Lens' ParticipatingGateways [GatewayListItem]
+participatingGateways_gatewayList = Lens.lens (\ParticipatingGateways' {gatewayList} -> gatewayList) (\s@ParticipatingGateways' {} a -> s {gatewayList = a} :: ParticipatingGateways) Prelude.. Lens.coerced
+
+-- | The duration of time for which AWS IoT Core for LoRaWAN will wait before
+-- transmitting the payload to the next gateway.
+participatingGateways_transmissionInterval :: Lens.Lens' ParticipatingGateways Prelude.Natural
+participatingGateways_transmissionInterval = Lens.lens (\ParticipatingGateways' {transmissionInterval} -> transmissionInterval) (\s@ParticipatingGateways' {} a -> s {transmissionInterval = a} :: ParticipatingGateways)
+
+instance Data.FromJSON ParticipatingGateways where
+  parseJSON =
+    Data.withObject
+      "ParticipatingGateways"
+      ( \x ->
+          ParticipatingGateways'
+            Prelude.<$> (x Data..: "DownlinkMode")
+            Prelude.<*> (x Data..:? "GatewayList" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "TransmissionInterval")
+      )
+
+instance Prelude.Hashable ParticipatingGateways where
+  hashWithSalt _salt ParticipatingGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` downlinkMode
+      `Prelude.hashWithSalt` gatewayList
+      `Prelude.hashWithSalt` transmissionInterval
+
+instance Prelude.NFData ParticipatingGateways where
+  rnf ParticipatingGateways' {..} =
+    Prelude.rnf downlinkMode
+      `Prelude.seq` Prelude.rnf gatewayList
+      `Prelude.seq` Prelude.rnf transmissionInterval
+
+instance Data.ToJSON ParticipatingGateways where
+  toJSON ParticipatingGateways' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("DownlinkMode" Data..= downlinkMode),
+            Prelude.Just ("GatewayList" Data..= gatewayList),
+            Prelude.Just
+              ( "TransmissionInterval"
+                  Data..= transmissionInterval
+              )
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/PartnerType.hs b/gen/Amazonka/IoTWireless/Types/PartnerType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/PartnerType.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.IoTWireless.Types.PartnerType
+-- 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.IoTWireless.Types.PartnerType
+  ( PartnerType
+      ( ..,
+        PartnerType_Sidewalk
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PartnerType = PartnerType'
+  { fromPartnerType ::
+      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 PartnerType_Sidewalk :: PartnerType
+pattern PartnerType_Sidewalk = PartnerType' "Sidewalk"
+
+{-# COMPLETE
+  PartnerType_Sidewalk,
+  PartnerType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/PositionResourceType.hs b/gen/Amazonka/IoTWireless/Types/PositionResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/PositionResourceType.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.IoTWireless.Types.PositionResourceType
+-- 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.IoTWireless.Types.PositionResourceType
+  ( PositionResourceType
+      ( ..,
+        PositionResourceType_WirelessDevice,
+        PositionResourceType_WirelessGateway
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PositionResourceType = PositionResourceType'
+  { fromPositionResourceType ::
+      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 PositionResourceType_WirelessDevice :: PositionResourceType
+pattern PositionResourceType_WirelessDevice = PositionResourceType' "WirelessDevice"
+
+pattern PositionResourceType_WirelessGateway :: PositionResourceType
+pattern PositionResourceType_WirelessGateway = PositionResourceType' "WirelessGateway"
+
+{-# COMPLETE
+  PositionResourceType_WirelessDevice,
+  PositionResourceType_WirelessGateway,
+  PositionResourceType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/Positioning.hs b/gen/Amazonka/IoTWireless/Types/Positioning.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/Positioning.hs
@@ -0,0 +1,103 @@
+{-# 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.IoTWireless.Types.Positioning
+-- 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.IoTWireless.Types.Positioning 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 FPorts for the position information.
+--
+-- /See:/ 'newPositioning' smart constructor.
+data Positioning = Positioning'
+  { clockSync :: Prelude.Maybe Prelude.Natural,
+    gnss :: Prelude.Maybe Prelude.Natural,
+    stream :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Positioning' 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:
+--
+-- 'clockSync', 'positioning_clockSync' - Undocumented member.
+--
+-- 'gnss', 'positioning_gnss' - Undocumented member.
+--
+-- 'stream', 'positioning_stream' - Undocumented member.
+newPositioning ::
+  Positioning
+newPositioning =
+  Positioning'
+    { clockSync = Prelude.Nothing,
+      gnss = Prelude.Nothing,
+      stream = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+positioning_clockSync :: Lens.Lens' Positioning (Prelude.Maybe Prelude.Natural)
+positioning_clockSync = Lens.lens (\Positioning' {clockSync} -> clockSync) (\s@Positioning' {} a -> s {clockSync = a} :: Positioning)
+
+-- | Undocumented member.
+positioning_gnss :: Lens.Lens' Positioning (Prelude.Maybe Prelude.Natural)
+positioning_gnss = Lens.lens (\Positioning' {gnss} -> gnss) (\s@Positioning' {} a -> s {gnss = a} :: Positioning)
+
+-- | Undocumented member.
+positioning_stream :: Lens.Lens' Positioning (Prelude.Maybe Prelude.Natural)
+positioning_stream = Lens.lens (\Positioning' {stream} -> stream) (\s@Positioning' {} a -> s {stream = a} :: Positioning)
+
+instance Data.FromJSON Positioning where
+  parseJSON =
+    Data.withObject
+      "Positioning"
+      ( \x ->
+          Positioning'
+            Prelude.<$> (x Data..:? "ClockSync")
+            Prelude.<*> (x Data..:? "Gnss")
+            Prelude.<*> (x Data..:? "Stream")
+      )
+
+instance Prelude.Hashable Positioning where
+  hashWithSalt _salt Positioning' {..} =
+    _salt
+      `Prelude.hashWithSalt` clockSync
+      `Prelude.hashWithSalt` gnss
+      `Prelude.hashWithSalt` stream
+
+instance Prelude.NFData Positioning where
+  rnf Positioning' {..} =
+    Prelude.rnf clockSync
+      `Prelude.seq` Prelude.rnf gnss
+      `Prelude.seq` Prelude.rnf stream
+
+instance Data.ToJSON Positioning where
+  toJSON Positioning' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ClockSync" Data..=) Prelude.<$> clockSync,
+            ("Gnss" Data..=) Prelude.<$> gnss,
+            ("Stream" Data..=) Prelude.<$> stream
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/PositioningConfigStatus.hs b/gen/Amazonka/IoTWireless/Types/PositioningConfigStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/PositioningConfigStatus.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.IoTWireless.Types.PositioningConfigStatus
+-- 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.IoTWireless.Types.PositioningConfigStatus
+  ( PositioningConfigStatus
+      ( ..,
+        PositioningConfigStatus_Disabled,
+        PositioningConfigStatus_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PositioningConfigStatus = PositioningConfigStatus'
+  { fromPositioningConfigStatus ::
+      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 PositioningConfigStatus_Disabled :: PositioningConfigStatus
+pattern PositioningConfigStatus_Disabled = PositioningConfigStatus' "Disabled"
+
+pattern PositioningConfigStatus_Enabled :: PositioningConfigStatus
+pattern PositioningConfigStatus_Enabled = PositioningConfigStatus' "Enabled"
+
+{-# COMPLETE
+  PositioningConfigStatus_Disabled,
+  PositioningConfigStatus_Enabled,
+  PositioningConfigStatus'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/ProximityEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/ProximityEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ProximityEventConfiguration.hs
@@ -0,0 +1,104 @@
+{-# 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.IoTWireless.Types.ProximityEventConfiguration
+-- 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.IoTWireless.Types.ProximityEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import Amazonka.IoTWireless.Types.SidewalkEventNotificationConfigurations
+import qualified Amazonka.Prelude as Prelude
+
+-- | Proximity event configuration object for enabling and disabling relevant
+-- topics.
+--
+-- /See:/ 'newProximityEventConfiguration' smart constructor.
+data ProximityEventConfiguration = ProximityEventConfiguration'
+  { -- | Proximity event configuration object for enabling or disabling Sidewalk
+    -- related event topics.
+    sidewalk :: Prelude.Maybe SidewalkEventNotificationConfigurations,
+    -- | Denotes whether the wireless device ID proximity event topic is enabled
+    -- or disabled.
+    wirelessDeviceIdEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProximityEventConfiguration' 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:
+--
+-- 'sidewalk', 'proximityEventConfiguration_sidewalk' - Proximity event configuration object for enabling or disabling Sidewalk
+-- related event topics.
+--
+-- 'wirelessDeviceIdEventTopic', 'proximityEventConfiguration_wirelessDeviceIdEventTopic' - Denotes whether the wireless device ID proximity event topic is enabled
+-- or disabled.
+newProximityEventConfiguration ::
+  ProximityEventConfiguration
+newProximityEventConfiguration =
+  ProximityEventConfiguration'
+    { sidewalk =
+        Prelude.Nothing,
+      wirelessDeviceIdEventTopic = Prelude.Nothing
+    }
+
+-- | Proximity event configuration object for enabling or disabling Sidewalk
+-- related event topics.
+proximityEventConfiguration_sidewalk :: Lens.Lens' ProximityEventConfiguration (Prelude.Maybe SidewalkEventNotificationConfigurations)
+proximityEventConfiguration_sidewalk = Lens.lens (\ProximityEventConfiguration' {sidewalk} -> sidewalk) (\s@ProximityEventConfiguration' {} a -> s {sidewalk = a} :: ProximityEventConfiguration)
+
+-- | Denotes whether the wireless device ID proximity event topic is enabled
+-- or disabled.
+proximityEventConfiguration_wirelessDeviceIdEventTopic :: Lens.Lens' ProximityEventConfiguration (Prelude.Maybe EventNotificationTopicStatus)
+proximityEventConfiguration_wirelessDeviceIdEventTopic = Lens.lens (\ProximityEventConfiguration' {wirelessDeviceIdEventTopic} -> wirelessDeviceIdEventTopic) (\s@ProximityEventConfiguration' {} a -> s {wirelessDeviceIdEventTopic = a} :: ProximityEventConfiguration)
+
+instance Data.FromJSON ProximityEventConfiguration where
+  parseJSON =
+    Data.withObject
+      "ProximityEventConfiguration"
+      ( \x ->
+          ProximityEventConfiguration'
+            Prelude.<$> (x Data..:? "Sidewalk")
+            Prelude.<*> (x Data..:? "WirelessDeviceIdEventTopic")
+      )
+
+instance Prelude.Hashable ProximityEventConfiguration where
+  hashWithSalt _salt ProximityEventConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` sidewalk
+      `Prelude.hashWithSalt` wirelessDeviceIdEventTopic
+
+instance Prelude.NFData ProximityEventConfiguration where
+  rnf ProximityEventConfiguration' {..} =
+    Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf wirelessDeviceIdEventTopic
+
+instance Data.ToJSON ProximityEventConfiguration where
+  toJSON ProximityEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Sidewalk" Data..=) Prelude.<$> sidewalk,
+            ("WirelessDeviceIdEventTopic" Data..=)
+              Prelude.<$> wirelessDeviceIdEventTopic
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/ProximityResourceTypeEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/ProximityResourceTypeEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ProximityResourceTypeEventConfiguration.hs
@@ -0,0 +1,98 @@
+{-# 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.IoTWireless.Types.ProximityResourceTypeEventConfiguration
+-- 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.IoTWireless.Types.ProximityResourceTypeEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.SidewalkResourceTypeEventConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Proximity resource type event configuration object for enabling or
+-- disabling topic.
+--
+-- /See:/ 'newProximityResourceTypeEventConfiguration' smart constructor.
+data ProximityResourceTypeEventConfiguration = ProximityResourceTypeEventConfiguration'
+  { -- | Proximity resource type event configuration object for enabling and
+    -- disabling wireless device topic.
+    sidewalk :: Prelude.Maybe SidewalkResourceTypeEventConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProximityResourceTypeEventConfiguration' 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:
+--
+-- 'sidewalk', 'proximityResourceTypeEventConfiguration_sidewalk' - Proximity resource type event configuration object for enabling and
+-- disabling wireless device topic.
+newProximityResourceTypeEventConfiguration ::
+  ProximityResourceTypeEventConfiguration
+newProximityResourceTypeEventConfiguration =
+  ProximityResourceTypeEventConfiguration'
+    { sidewalk =
+        Prelude.Nothing
+    }
+
+-- | Proximity resource type event configuration object for enabling and
+-- disabling wireless device topic.
+proximityResourceTypeEventConfiguration_sidewalk :: Lens.Lens' ProximityResourceTypeEventConfiguration (Prelude.Maybe SidewalkResourceTypeEventConfiguration)
+proximityResourceTypeEventConfiguration_sidewalk = Lens.lens (\ProximityResourceTypeEventConfiguration' {sidewalk} -> sidewalk) (\s@ProximityResourceTypeEventConfiguration' {} a -> s {sidewalk = a} :: ProximityResourceTypeEventConfiguration)
+
+instance
+  Data.FromJSON
+    ProximityResourceTypeEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ProximityResourceTypeEventConfiguration"
+      ( \x ->
+          ProximityResourceTypeEventConfiguration'
+            Prelude.<$> (x Data..:? "Sidewalk")
+      )
+
+instance
+  Prelude.Hashable
+    ProximityResourceTypeEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    ProximityResourceTypeEventConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` sidewalk
+
+instance
+  Prelude.NFData
+    ProximityResourceTypeEventConfiguration
+  where
+  rnf ProximityResourceTypeEventConfiguration' {..} =
+    Prelude.rnf sidewalk
+
+instance
+  Data.ToJSON
+    ProximityResourceTypeEventConfiguration
+  where
+  toJSON ProximityResourceTypeEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Sidewalk" Data..=) Prelude.<$> sidewalk]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/ServiceProfile.hs b/gen/Amazonka/IoTWireless/Types/ServiceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/ServiceProfile.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.IoTWireless.Types.ServiceProfile
+-- 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.IoTWireless.Types.ServiceProfile 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 about a service profile.
+--
+-- /See:/ 'newServiceProfile' smart constructor.
+data ServiceProfile = ServiceProfile'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the service profile.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceProfile' 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', 'serviceProfile_arn' - The Amazon Resource Name of the resource.
+--
+-- 'id', 'serviceProfile_id' - The ID of the service profile.
+--
+-- 'name', 'serviceProfile_name' - The name of the resource.
+newServiceProfile ::
+  ServiceProfile
+newServiceProfile =
+  ServiceProfile'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name of the resource.
+serviceProfile_arn :: Lens.Lens' ServiceProfile (Prelude.Maybe Prelude.Text)
+serviceProfile_arn = Lens.lens (\ServiceProfile' {arn} -> arn) (\s@ServiceProfile' {} a -> s {arn = a} :: ServiceProfile)
+
+-- | The ID of the service profile.
+serviceProfile_id :: Lens.Lens' ServiceProfile (Prelude.Maybe Prelude.Text)
+serviceProfile_id = Lens.lens (\ServiceProfile' {id} -> id) (\s@ServiceProfile' {} a -> s {id = a} :: ServiceProfile)
+
+-- | The name of the resource.
+serviceProfile_name :: Lens.Lens' ServiceProfile (Prelude.Maybe Prelude.Text)
+serviceProfile_name = Lens.lens (\ServiceProfile' {name} -> name) (\s@ServiceProfile' {} a -> s {name = a} :: ServiceProfile)
+
+instance Data.FromJSON ServiceProfile where
+  parseJSON =
+    Data.withObject
+      "ServiceProfile"
+      ( \x ->
+          ServiceProfile'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable ServiceProfile where
+  hashWithSalt _salt ServiceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ServiceProfile where
+  rnf ServiceProfile' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTWireless/Types/SessionKeysAbpV1_0_x.hs b/gen/Amazonka/IoTWireless/Types/SessionKeysAbpV1_0_x.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SessionKeysAbpV1_0_x.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.IoTWireless.Types.SessionKeysAbpV1_0_x
+-- 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.IoTWireless.Types.SessionKeysAbpV1_0_x 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
+
+-- | Session keys for ABP v1.1
+--
+-- /See:/ 'newSessionKeysAbpV1_0_x' smart constructor.
+data SessionKeysAbpV1_0_x = SessionKeysAbpV1_0_x'
+  { -- | The AppSKey value.
+    appSKey :: Prelude.Maybe Prelude.Text,
+    -- | The NwkSKey value.
+    nwkSKey :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SessionKeysAbpV1_0_x' 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:
+--
+-- 'appSKey', 'sessionKeysAbpV1_0_x_appSKey' - The AppSKey value.
+--
+-- 'nwkSKey', 'sessionKeysAbpV1_0_x_nwkSKey' - The NwkSKey value.
+newSessionKeysAbpV1_0_x ::
+  SessionKeysAbpV1_0_x
+newSessionKeysAbpV1_0_x =
+  SessionKeysAbpV1_0_x'
+    { appSKey = Prelude.Nothing,
+      nwkSKey = Prelude.Nothing
+    }
+
+-- | The AppSKey value.
+sessionKeysAbpV1_0_x_appSKey :: Lens.Lens' SessionKeysAbpV1_0_x (Prelude.Maybe Prelude.Text)
+sessionKeysAbpV1_0_x_appSKey = Lens.lens (\SessionKeysAbpV1_0_x' {appSKey} -> appSKey) (\s@SessionKeysAbpV1_0_x' {} a -> s {appSKey = a} :: SessionKeysAbpV1_0_x)
+
+-- | The NwkSKey value.
+sessionKeysAbpV1_0_x_nwkSKey :: Lens.Lens' SessionKeysAbpV1_0_x (Prelude.Maybe Prelude.Text)
+sessionKeysAbpV1_0_x_nwkSKey = Lens.lens (\SessionKeysAbpV1_0_x' {nwkSKey} -> nwkSKey) (\s@SessionKeysAbpV1_0_x' {} a -> s {nwkSKey = a} :: SessionKeysAbpV1_0_x)
+
+instance Data.FromJSON SessionKeysAbpV1_0_x where
+  parseJSON =
+    Data.withObject
+      "SessionKeysAbpV1_0_x"
+      ( \x ->
+          SessionKeysAbpV1_0_x'
+            Prelude.<$> (x Data..:? "AppSKey")
+            Prelude.<*> (x Data..:? "NwkSKey")
+      )
+
+instance Prelude.Hashable SessionKeysAbpV1_0_x where
+  hashWithSalt _salt SessionKeysAbpV1_0_x' {..} =
+    _salt
+      `Prelude.hashWithSalt` appSKey
+      `Prelude.hashWithSalt` nwkSKey
+
+instance Prelude.NFData SessionKeysAbpV1_0_x where
+  rnf SessionKeysAbpV1_0_x' {..} =
+    Prelude.rnf appSKey
+      `Prelude.seq` Prelude.rnf nwkSKey
+
+instance Data.ToJSON SessionKeysAbpV1_0_x where
+  toJSON SessionKeysAbpV1_0_x' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppSKey" Data..=) Prelude.<$> appSKey,
+            ("NwkSKey" Data..=) Prelude.<$> nwkSKey
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/SessionKeysAbpV1_1.hs b/gen/Amazonka/IoTWireless/Types/SessionKeysAbpV1_1.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SessionKeysAbpV1_1.hs
@@ -0,0 +1,119 @@
+{-# 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.IoTWireless.Types.SessionKeysAbpV1_1
+-- 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.IoTWireless.Types.SessionKeysAbpV1_1 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
+
+-- | Session keys for ABP v1.1
+--
+-- /See:/ 'newSessionKeysAbpV1_1' smart constructor.
+data SessionKeysAbpV1_1 = SessionKeysAbpV1_1'
+  { -- | The AppSKey value.
+    appSKey :: Prelude.Maybe Prelude.Text,
+    -- | The FNwkSIntKey value.
+    fNwkSIntKey :: Prelude.Maybe Prelude.Text,
+    -- | The NwkSEncKey value.
+    nwkSEncKey :: Prelude.Maybe Prelude.Text,
+    -- | The SNwkSIntKey value.
+    sNwkSIntKey :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SessionKeysAbpV1_1' 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:
+--
+-- 'appSKey', 'sessionKeysAbpV1_1_appSKey' - The AppSKey value.
+--
+-- 'fNwkSIntKey', 'sessionKeysAbpV1_1_fNwkSIntKey' - The FNwkSIntKey value.
+--
+-- 'nwkSEncKey', 'sessionKeysAbpV1_1_nwkSEncKey' - The NwkSEncKey value.
+--
+-- 'sNwkSIntKey', 'sessionKeysAbpV1_1_sNwkSIntKey' - The SNwkSIntKey value.
+newSessionKeysAbpV1_1 ::
+  SessionKeysAbpV1_1
+newSessionKeysAbpV1_1 =
+  SessionKeysAbpV1_1'
+    { appSKey = Prelude.Nothing,
+      fNwkSIntKey = Prelude.Nothing,
+      nwkSEncKey = Prelude.Nothing,
+      sNwkSIntKey = Prelude.Nothing
+    }
+
+-- | The AppSKey value.
+sessionKeysAbpV1_1_appSKey :: Lens.Lens' SessionKeysAbpV1_1 (Prelude.Maybe Prelude.Text)
+sessionKeysAbpV1_1_appSKey = Lens.lens (\SessionKeysAbpV1_1' {appSKey} -> appSKey) (\s@SessionKeysAbpV1_1' {} a -> s {appSKey = a} :: SessionKeysAbpV1_1)
+
+-- | The FNwkSIntKey value.
+sessionKeysAbpV1_1_fNwkSIntKey :: Lens.Lens' SessionKeysAbpV1_1 (Prelude.Maybe Prelude.Text)
+sessionKeysAbpV1_1_fNwkSIntKey = Lens.lens (\SessionKeysAbpV1_1' {fNwkSIntKey} -> fNwkSIntKey) (\s@SessionKeysAbpV1_1' {} a -> s {fNwkSIntKey = a} :: SessionKeysAbpV1_1)
+
+-- | The NwkSEncKey value.
+sessionKeysAbpV1_1_nwkSEncKey :: Lens.Lens' SessionKeysAbpV1_1 (Prelude.Maybe Prelude.Text)
+sessionKeysAbpV1_1_nwkSEncKey = Lens.lens (\SessionKeysAbpV1_1' {nwkSEncKey} -> nwkSEncKey) (\s@SessionKeysAbpV1_1' {} a -> s {nwkSEncKey = a} :: SessionKeysAbpV1_1)
+
+-- | The SNwkSIntKey value.
+sessionKeysAbpV1_1_sNwkSIntKey :: Lens.Lens' SessionKeysAbpV1_1 (Prelude.Maybe Prelude.Text)
+sessionKeysAbpV1_1_sNwkSIntKey = Lens.lens (\SessionKeysAbpV1_1' {sNwkSIntKey} -> sNwkSIntKey) (\s@SessionKeysAbpV1_1' {} a -> s {sNwkSIntKey = a} :: SessionKeysAbpV1_1)
+
+instance Data.FromJSON SessionKeysAbpV1_1 where
+  parseJSON =
+    Data.withObject
+      "SessionKeysAbpV1_1"
+      ( \x ->
+          SessionKeysAbpV1_1'
+            Prelude.<$> (x Data..:? "AppSKey")
+            Prelude.<*> (x Data..:? "FNwkSIntKey")
+            Prelude.<*> (x Data..:? "NwkSEncKey")
+            Prelude.<*> (x Data..:? "SNwkSIntKey")
+      )
+
+instance Prelude.Hashable SessionKeysAbpV1_1 where
+  hashWithSalt _salt SessionKeysAbpV1_1' {..} =
+    _salt
+      `Prelude.hashWithSalt` appSKey
+      `Prelude.hashWithSalt` fNwkSIntKey
+      `Prelude.hashWithSalt` nwkSEncKey
+      `Prelude.hashWithSalt` sNwkSIntKey
+
+instance Prelude.NFData SessionKeysAbpV1_1 where
+  rnf SessionKeysAbpV1_1' {..} =
+    Prelude.rnf appSKey
+      `Prelude.seq` Prelude.rnf fNwkSIntKey
+      `Prelude.seq` Prelude.rnf nwkSEncKey
+      `Prelude.seq` Prelude.rnf sNwkSIntKey
+
+instance Data.ToJSON SessionKeysAbpV1_1 where
+  toJSON SessionKeysAbpV1_1' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppSKey" Data..=) Prelude.<$> appSKey,
+            ("FNwkSIntKey" Data..=) Prelude.<$> fNwkSIntKey,
+            ("NwkSEncKey" Data..=) Prelude.<$> nwkSEncKey,
+            ("SNwkSIntKey" Data..=) Prelude.<$> sNwkSIntKey
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkAccountInfo.hs b/gen/Amazonka/IoTWireless/Types/SidewalkAccountInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkAccountInfo.hs
@@ -0,0 +1,94 @@
+{-# 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.IoTWireless.Types.SidewalkAccountInfo
+-- 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.IoTWireless.Types.SidewalkAccountInfo 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 about a Sidewalk account.
+--
+-- /See:/ 'newSidewalkAccountInfo' smart constructor.
+data SidewalkAccountInfo = SidewalkAccountInfo'
+  { -- | The Sidewalk Amazon ID.
+    amazonId :: Prelude.Maybe Prelude.Text,
+    -- | The Sidewalk application server private key.
+    appServerPrivateKey :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkAccountInfo' 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:
+--
+-- 'amazonId', 'sidewalkAccountInfo_amazonId' - The Sidewalk Amazon ID.
+--
+-- 'appServerPrivateKey', 'sidewalkAccountInfo_appServerPrivateKey' - The Sidewalk application server private key.
+newSidewalkAccountInfo ::
+  SidewalkAccountInfo
+newSidewalkAccountInfo =
+  SidewalkAccountInfo'
+    { amazonId = Prelude.Nothing,
+      appServerPrivateKey = Prelude.Nothing
+    }
+
+-- | The Sidewalk Amazon ID.
+sidewalkAccountInfo_amazonId :: Lens.Lens' SidewalkAccountInfo (Prelude.Maybe Prelude.Text)
+sidewalkAccountInfo_amazonId = Lens.lens (\SidewalkAccountInfo' {amazonId} -> amazonId) (\s@SidewalkAccountInfo' {} a -> s {amazonId = a} :: SidewalkAccountInfo)
+
+-- | The Sidewalk application server private key.
+sidewalkAccountInfo_appServerPrivateKey :: Lens.Lens' SidewalkAccountInfo (Prelude.Maybe Prelude.Text)
+sidewalkAccountInfo_appServerPrivateKey = Lens.lens (\SidewalkAccountInfo' {appServerPrivateKey} -> appServerPrivateKey) (\s@SidewalkAccountInfo' {} a -> s {appServerPrivateKey = a} :: SidewalkAccountInfo) Prelude.. Lens.mapping Data._Sensitive
+
+instance Data.FromJSON SidewalkAccountInfo where
+  parseJSON =
+    Data.withObject
+      "SidewalkAccountInfo"
+      ( \x ->
+          SidewalkAccountInfo'
+            Prelude.<$> (x Data..:? "AmazonId")
+            Prelude.<*> (x Data..:? "AppServerPrivateKey")
+      )
+
+instance Prelude.Hashable SidewalkAccountInfo where
+  hashWithSalt _salt SidewalkAccountInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonId
+      `Prelude.hashWithSalt` appServerPrivateKey
+
+instance Prelude.NFData SidewalkAccountInfo where
+  rnf SidewalkAccountInfo' {..} =
+    Prelude.rnf amazonId
+      `Prelude.seq` Prelude.rnf appServerPrivateKey
+
+instance Data.ToJSON SidewalkAccountInfo where
+  toJSON SidewalkAccountInfo' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AmazonId" Data..=) Prelude.<$> amazonId,
+            ("AppServerPrivateKey" Data..=)
+              Prelude.<$> appServerPrivateKey
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkAccountInfoWithFingerprint.hs b/gen/Amazonka/IoTWireless/Types/SidewalkAccountInfoWithFingerprint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkAccountInfoWithFingerprint.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.IoTWireless.Types.SidewalkAccountInfoWithFingerprint
+-- 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.IoTWireless.Types.SidewalkAccountInfoWithFingerprint 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 about a Sidewalk account.
+--
+-- /See:/ 'newSidewalkAccountInfoWithFingerprint' smart constructor.
+data SidewalkAccountInfoWithFingerprint = SidewalkAccountInfoWithFingerprint'
+  { -- | The Sidewalk Amazon ID.
+    amazonId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The fingerprint of the Sidewalk application server private key.
+    fingerprint :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkAccountInfoWithFingerprint' 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:
+--
+-- 'amazonId', 'sidewalkAccountInfoWithFingerprint_amazonId' - The Sidewalk Amazon ID.
+--
+-- 'arn', 'sidewalkAccountInfoWithFingerprint_arn' - The Amazon Resource Name of the resource.
+--
+-- 'fingerprint', 'sidewalkAccountInfoWithFingerprint_fingerprint' - The fingerprint of the Sidewalk application server private key.
+newSidewalkAccountInfoWithFingerprint ::
+  SidewalkAccountInfoWithFingerprint
+newSidewalkAccountInfoWithFingerprint =
+  SidewalkAccountInfoWithFingerprint'
+    { amazonId =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      fingerprint = Prelude.Nothing
+    }
+
+-- | The Sidewalk Amazon ID.
+sidewalkAccountInfoWithFingerprint_amazonId :: Lens.Lens' SidewalkAccountInfoWithFingerprint (Prelude.Maybe Prelude.Text)
+sidewalkAccountInfoWithFingerprint_amazonId = Lens.lens (\SidewalkAccountInfoWithFingerprint' {amazonId} -> amazonId) (\s@SidewalkAccountInfoWithFingerprint' {} a -> s {amazonId = a} :: SidewalkAccountInfoWithFingerprint)
+
+-- | The Amazon Resource Name of the resource.
+sidewalkAccountInfoWithFingerprint_arn :: Lens.Lens' SidewalkAccountInfoWithFingerprint (Prelude.Maybe Prelude.Text)
+sidewalkAccountInfoWithFingerprint_arn = Lens.lens (\SidewalkAccountInfoWithFingerprint' {arn} -> arn) (\s@SidewalkAccountInfoWithFingerprint' {} a -> s {arn = a} :: SidewalkAccountInfoWithFingerprint)
+
+-- | The fingerprint of the Sidewalk application server private key.
+sidewalkAccountInfoWithFingerprint_fingerprint :: Lens.Lens' SidewalkAccountInfoWithFingerprint (Prelude.Maybe Prelude.Text)
+sidewalkAccountInfoWithFingerprint_fingerprint = Lens.lens (\SidewalkAccountInfoWithFingerprint' {fingerprint} -> fingerprint) (\s@SidewalkAccountInfoWithFingerprint' {} a -> s {fingerprint = a} :: SidewalkAccountInfoWithFingerprint) Prelude.. Lens.mapping Data._Sensitive
+
+instance
+  Data.FromJSON
+    SidewalkAccountInfoWithFingerprint
+  where
+  parseJSON =
+    Data.withObject
+      "SidewalkAccountInfoWithFingerprint"
+      ( \x ->
+          SidewalkAccountInfoWithFingerprint'
+            Prelude.<$> (x Data..:? "AmazonId")
+            Prelude.<*> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Fingerprint")
+      )
+
+instance
+  Prelude.Hashable
+    SidewalkAccountInfoWithFingerprint
+  where
+  hashWithSalt
+    _salt
+    SidewalkAccountInfoWithFingerprint' {..} =
+      _salt
+        `Prelude.hashWithSalt` amazonId
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` fingerprint
+
+instance
+  Prelude.NFData
+    SidewalkAccountInfoWithFingerprint
+  where
+  rnf SidewalkAccountInfoWithFingerprint' {..} =
+    Prelude.rnf amazonId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf fingerprint
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkDevice.hs b/gen/Amazonka/IoTWireless/Types/SidewalkDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkDevice.hs
@@ -0,0 +1,111 @@
+{-# 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.IoTWireless.Types.SidewalkDevice
+-- 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.IoTWireless.Types.SidewalkDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.CertificateList
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sidewalk device object.
+--
+-- /See:/ 'newSidewalkDevice' smart constructor.
+data SidewalkDevice = SidewalkDevice'
+  { amazonId :: Prelude.Maybe Prelude.Text,
+    -- | The sidewalk device certificates for Ed25519 and P256r1.
+    deviceCertificates :: Prelude.Maybe [CertificateList],
+    -- | The sidewalk device identification.
+    sidewalkId :: Prelude.Maybe Prelude.Text,
+    -- | The Sidewalk manufacturing series number.
+    sidewalkManufacturingSn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkDevice' 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:
+--
+-- 'amazonId', 'sidewalkDevice_amazonId' - Undocumented member.
+--
+-- 'deviceCertificates', 'sidewalkDevice_deviceCertificates' - The sidewalk device certificates for Ed25519 and P256r1.
+--
+-- 'sidewalkId', 'sidewalkDevice_sidewalkId' - The sidewalk device identification.
+--
+-- 'sidewalkManufacturingSn', 'sidewalkDevice_sidewalkManufacturingSn' - The Sidewalk manufacturing series number.
+newSidewalkDevice ::
+  SidewalkDevice
+newSidewalkDevice =
+  SidewalkDevice'
+    { amazonId = Prelude.Nothing,
+      deviceCertificates = Prelude.Nothing,
+      sidewalkId = Prelude.Nothing,
+      sidewalkManufacturingSn = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+sidewalkDevice_amazonId :: Lens.Lens' SidewalkDevice (Prelude.Maybe Prelude.Text)
+sidewalkDevice_amazonId = Lens.lens (\SidewalkDevice' {amazonId} -> amazonId) (\s@SidewalkDevice' {} a -> s {amazonId = a} :: SidewalkDevice)
+
+-- | The sidewalk device certificates for Ed25519 and P256r1.
+sidewalkDevice_deviceCertificates :: Lens.Lens' SidewalkDevice (Prelude.Maybe [CertificateList])
+sidewalkDevice_deviceCertificates = Lens.lens (\SidewalkDevice' {deviceCertificates} -> deviceCertificates) (\s@SidewalkDevice' {} a -> s {deviceCertificates = a} :: SidewalkDevice) Prelude.. Lens.mapping Lens.coerced
+
+-- | The sidewalk device identification.
+sidewalkDevice_sidewalkId :: Lens.Lens' SidewalkDevice (Prelude.Maybe Prelude.Text)
+sidewalkDevice_sidewalkId = Lens.lens (\SidewalkDevice' {sidewalkId} -> sidewalkId) (\s@SidewalkDevice' {} a -> s {sidewalkId = a} :: SidewalkDevice)
+
+-- | The Sidewalk manufacturing series number.
+sidewalkDevice_sidewalkManufacturingSn :: Lens.Lens' SidewalkDevice (Prelude.Maybe Prelude.Text)
+sidewalkDevice_sidewalkManufacturingSn = Lens.lens (\SidewalkDevice' {sidewalkManufacturingSn} -> sidewalkManufacturingSn) (\s@SidewalkDevice' {} a -> s {sidewalkManufacturingSn = a} :: SidewalkDevice)
+
+instance Data.FromJSON SidewalkDevice where
+  parseJSON =
+    Data.withObject
+      "SidewalkDevice"
+      ( \x ->
+          SidewalkDevice'
+            Prelude.<$> (x Data..:? "AmazonId")
+            Prelude.<*> ( x
+                            Data..:? "DeviceCertificates"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "SidewalkId")
+            Prelude.<*> (x Data..:? "SidewalkManufacturingSn")
+      )
+
+instance Prelude.Hashable SidewalkDevice where
+  hashWithSalt _salt SidewalkDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonId
+      `Prelude.hashWithSalt` deviceCertificates
+      `Prelude.hashWithSalt` sidewalkId
+      `Prelude.hashWithSalt` sidewalkManufacturingSn
+
+instance Prelude.NFData SidewalkDevice where
+  rnf SidewalkDevice' {..} =
+    Prelude.rnf amazonId
+      `Prelude.seq` Prelude.rnf deviceCertificates
+      `Prelude.seq` Prelude.rnf sidewalkId
+      `Prelude.seq` Prelude.rnf sidewalkManufacturingSn
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkDeviceMetadata.hs b/gen/Amazonka/IoTWireless/Types/SidewalkDeviceMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkDeviceMetadata.hs
@@ -0,0 +1,112 @@
+{-# 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.IoTWireless.Types.SidewalkDeviceMetadata
+-- 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.IoTWireless.Types.SidewalkDeviceMetadata where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.BatteryLevel
+import Amazonka.IoTWireless.Types.DeviceState
+import Amazonka.IoTWireless.Types.Event
+import qualified Amazonka.Prelude as Prelude
+
+-- | MetaData for Sidewalk device.
+--
+-- /See:/ 'newSidewalkDeviceMetadata' smart constructor.
+data SidewalkDeviceMetadata = SidewalkDeviceMetadata'
+  { -- | Sidewalk device battery level.
+    batteryLevel :: Prelude.Maybe BatteryLevel,
+    -- | Device state defines the device status of sidewalk device.
+    deviceState :: Prelude.Maybe DeviceState,
+    -- | Sidewalk device status notification.
+    event :: Prelude.Maybe Event,
+    -- | The RSSI value.
+    rssi :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkDeviceMetadata' 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:
+--
+-- 'batteryLevel', 'sidewalkDeviceMetadata_batteryLevel' - Sidewalk device battery level.
+--
+-- 'deviceState', 'sidewalkDeviceMetadata_deviceState' - Device state defines the device status of sidewalk device.
+--
+-- 'event', 'sidewalkDeviceMetadata_event' - Sidewalk device status notification.
+--
+-- 'rssi', 'sidewalkDeviceMetadata_rssi' - The RSSI value.
+newSidewalkDeviceMetadata ::
+  SidewalkDeviceMetadata
+newSidewalkDeviceMetadata =
+  SidewalkDeviceMetadata'
+    { batteryLevel =
+        Prelude.Nothing,
+      deviceState = Prelude.Nothing,
+      event = Prelude.Nothing,
+      rssi = Prelude.Nothing
+    }
+
+-- | Sidewalk device battery level.
+sidewalkDeviceMetadata_batteryLevel :: Lens.Lens' SidewalkDeviceMetadata (Prelude.Maybe BatteryLevel)
+sidewalkDeviceMetadata_batteryLevel = Lens.lens (\SidewalkDeviceMetadata' {batteryLevel} -> batteryLevel) (\s@SidewalkDeviceMetadata' {} a -> s {batteryLevel = a} :: SidewalkDeviceMetadata)
+
+-- | Device state defines the device status of sidewalk device.
+sidewalkDeviceMetadata_deviceState :: Lens.Lens' SidewalkDeviceMetadata (Prelude.Maybe DeviceState)
+sidewalkDeviceMetadata_deviceState = Lens.lens (\SidewalkDeviceMetadata' {deviceState} -> deviceState) (\s@SidewalkDeviceMetadata' {} a -> s {deviceState = a} :: SidewalkDeviceMetadata)
+
+-- | Sidewalk device status notification.
+sidewalkDeviceMetadata_event :: Lens.Lens' SidewalkDeviceMetadata (Prelude.Maybe Event)
+sidewalkDeviceMetadata_event = Lens.lens (\SidewalkDeviceMetadata' {event} -> event) (\s@SidewalkDeviceMetadata' {} a -> s {event = a} :: SidewalkDeviceMetadata)
+
+-- | The RSSI value.
+sidewalkDeviceMetadata_rssi :: Lens.Lens' SidewalkDeviceMetadata (Prelude.Maybe Prelude.Int)
+sidewalkDeviceMetadata_rssi = Lens.lens (\SidewalkDeviceMetadata' {rssi} -> rssi) (\s@SidewalkDeviceMetadata' {} a -> s {rssi = a} :: SidewalkDeviceMetadata)
+
+instance Data.FromJSON SidewalkDeviceMetadata where
+  parseJSON =
+    Data.withObject
+      "SidewalkDeviceMetadata"
+      ( \x ->
+          SidewalkDeviceMetadata'
+            Prelude.<$> (x Data..:? "BatteryLevel")
+            Prelude.<*> (x Data..:? "DeviceState")
+            Prelude.<*> (x Data..:? "Event")
+            Prelude.<*> (x Data..:? "Rssi")
+      )
+
+instance Prelude.Hashable SidewalkDeviceMetadata where
+  hashWithSalt _salt SidewalkDeviceMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` batteryLevel
+      `Prelude.hashWithSalt` deviceState
+      `Prelude.hashWithSalt` event
+      `Prelude.hashWithSalt` rssi
+
+instance Prelude.NFData SidewalkDeviceMetadata where
+  rnf SidewalkDeviceMetadata' {..} =
+    Prelude.rnf batteryLevel
+      `Prelude.seq` Prelude.rnf deviceState
+      `Prelude.seq` Prelude.rnf event
+      `Prelude.seq` Prelude.rnf rssi
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkEventNotificationConfigurations.hs b/gen/Amazonka/IoTWireless/Types/SidewalkEventNotificationConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkEventNotificationConfigurations.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.IoTWireless.Types.SidewalkEventNotificationConfigurations
+-- 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.IoTWireless.Types.SidewalkEventNotificationConfigurations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | @SidewalkEventNotificationConfigurations@ object, which is the event
+-- configuration object for Sidewalk-related event topics.
+--
+-- /See:/ 'newSidewalkEventNotificationConfigurations' smart constructor.
+data SidewalkEventNotificationConfigurations = SidewalkEventNotificationConfigurations'
+  { -- | Denotes whether the Amazon ID event topic is enabled or disabled.
+    amazonIdEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkEventNotificationConfigurations' 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:
+--
+-- 'amazonIdEventTopic', 'sidewalkEventNotificationConfigurations_amazonIdEventTopic' - Denotes whether the Amazon ID event topic is enabled or disabled.
+newSidewalkEventNotificationConfigurations ::
+  SidewalkEventNotificationConfigurations
+newSidewalkEventNotificationConfigurations =
+  SidewalkEventNotificationConfigurations'
+    { amazonIdEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Denotes whether the Amazon ID event topic is enabled or disabled.
+sidewalkEventNotificationConfigurations_amazonIdEventTopic :: Lens.Lens' SidewalkEventNotificationConfigurations (Prelude.Maybe EventNotificationTopicStatus)
+sidewalkEventNotificationConfigurations_amazonIdEventTopic = Lens.lens (\SidewalkEventNotificationConfigurations' {amazonIdEventTopic} -> amazonIdEventTopic) (\s@SidewalkEventNotificationConfigurations' {} a -> s {amazonIdEventTopic = a} :: SidewalkEventNotificationConfigurations)
+
+instance
+  Data.FromJSON
+    SidewalkEventNotificationConfigurations
+  where
+  parseJSON =
+    Data.withObject
+      "SidewalkEventNotificationConfigurations"
+      ( \x ->
+          SidewalkEventNotificationConfigurations'
+            Prelude.<$> (x Data..:? "AmazonIdEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    SidewalkEventNotificationConfigurations
+  where
+  hashWithSalt
+    _salt
+    SidewalkEventNotificationConfigurations' {..} =
+      _salt `Prelude.hashWithSalt` amazonIdEventTopic
+
+instance
+  Prelude.NFData
+    SidewalkEventNotificationConfigurations
+  where
+  rnf SidewalkEventNotificationConfigurations' {..} =
+    Prelude.rnf amazonIdEventTopic
+
+instance
+  Data.ToJSON
+    SidewalkEventNotificationConfigurations
+  where
+  toJSON SidewalkEventNotificationConfigurations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AmazonIdEventTopic" Data..=)
+              Prelude.<$> amazonIdEventTopic
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkListDevice.hs b/gen/Amazonka/IoTWireless/Types/SidewalkListDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkListDevice.hs
@@ -0,0 +1,112 @@
+{-# 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.IoTWireless.Types.SidewalkListDevice
+-- 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.IoTWireless.Types.SidewalkListDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.CertificateList
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sidewalk object used by list functions.
+--
+-- /See:/ 'newSidewalkListDevice' smart constructor.
+data SidewalkListDevice = SidewalkListDevice'
+  { -- | The Sidewalk Amazon ID.
+    amazonId :: Prelude.Maybe Prelude.Text,
+    -- | The sidewalk device certificates for Ed25519 and P256r1.
+    deviceCertificates :: Prelude.Maybe [CertificateList],
+    -- | The sidewalk device identification.
+    sidewalkId :: Prelude.Maybe Prelude.Text,
+    -- | The Sidewalk manufacturing series number.
+    sidewalkManufacturingSn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkListDevice' 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:
+--
+-- 'amazonId', 'sidewalkListDevice_amazonId' - The Sidewalk Amazon ID.
+--
+-- 'deviceCertificates', 'sidewalkListDevice_deviceCertificates' - The sidewalk device certificates for Ed25519 and P256r1.
+--
+-- 'sidewalkId', 'sidewalkListDevice_sidewalkId' - The sidewalk device identification.
+--
+-- 'sidewalkManufacturingSn', 'sidewalkListDevice_sidewalkManufacturingSn' - The Sidewalk manufacturing series number.
+newSidewalkListDevice ::
+  SidewalkListDevice
+newSidewalkListDevice =
+  SidewalkListDevice'
+    { amazonId = Prelude.Nothing,
+      deviceCertificates = Prelude.Nothing,
+      sidewalkId = Prelude.Nothing,
+      sidewalkManufacturingSn = Prelude.Nothing
+    }
+
+-- | The Sidewalk Amazon ID.
+sidewalkListDevice_amazonId :: Lens.Lens' SidewalkListDevice (Prelude.Maybe Prelude.Text)
+sidewalkListDevice_amazonId = Lens.lens (\SidewalkListDevice' {amazonId} -> amazonId) (\s@SidewalkListDevice' {} a -> s {amazonId = a} :: SidewalkListDevice)
+
+-- | The sidewalk device certificates for Ed25519 and P256r1.
+sidewalkListDevice_deviceCertificates :: Lens.Lens' SidewalkListDevice (Prelude.Maybe [CertificateList])
+sidewalkListDevice_deviceCertificates = Lens.lens (\SidewalkListDevice' {deviceCertificates} -> deviceCertificates) (\s@SidewalkListDevice' {} a -> s {deviceCertificates = a} :: SidewalkListDevice) Prelude.. Lens.mapping Lens.coerced
+
+-- | The sidewalk device identification.
+sidewalkListDevice_sidewalkId :: Lens.Lens' SidewalkListDevice (Prelude.Maybe Prelude.Text)
+sidewalkListDevice_sidewalkId = Lens.lens (\SidewalkListDevice' {sidewalkId} -> sidewalkId) (\s@SidewalkListDevice' {} a -> s {sidewalkId = a} :: SidewalkListDevice)
+
+-- | The Sidewalk manufacturing series number.
+sidewalkListDevice_sidewalkManufacturingSn :: Lens.Lens' SidewalkListDevice (Prelude.Maybe Prelude.Text)
+sidewalkListDevice_sidewalkManufacturingSn = Lens.lens (\SidewalkListDevice' {sidewalkManufacturingSn} -> sidewalkManufacturingSn) (\s@SidewalkListDevice' {} a -> s {sidewalkManufacturingSn = a} :: SidewalkListDevice)
+
+instance Data.FromJSON SidewalkListDevice where
+  parseJSON =
+    Data.withObject
+      "SidewalkListDevice"
+      ( \x ->
+          SidewalkListDevice'
+            Prelude.<$> (x Data..:? "AmazonId")
+            Prelude.<*> ( x
+                            Data..:? "DeviceCertificates"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "SidewalkId")
+            Prelude.<*> (x Data..:? "SidewalkManufacturingSn")
+      )
+
+instance Prelude.Hashable SidewalkListDevice where
+  hashWithSalt _salt SidewalkListDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonId
+      `Prelude.hashWithSalt` deviceCertificates
+      `Prelude.hashWithSalt` sidewalkId
+      `Prelude.hashWithSalt` sidewalkManufacturingSn
+
+instance Prelude.NFData SidewalkListDevice where
+  rnf SidewalkListDevice' {..} =
+    Prelude.rnf amazonId
+      `Prelude.seq` Prelude.rnf deviceCertificates
+      `Prelude.seq` Prelude.rnf sidewalkId
+      `Prelude.seq` Prelude.rnf sidewalkManufacturingSn
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkResourceTypeEventConfiguration.hs b/gen/Amazonka/IoTWireless/Types/SidewalkResourceTypeEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkResourceTypeEventConfiguration.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.IoTWireless.Types.SidewalkResourceTypeEventConfiguration
+-- 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.IoTWireless.Types.SidewalkResourceTypeEventConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.EventNotificationTopicStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Sidewalk resource type event configuration object for enabling or
+-- disabling topic.
+--
+-- /See:/ 'newSidewalkResourceTypeEventConfiguration' smart constructor.
+data SidewalkResourceTypeEventConfiguration = SidewalkResourceTypeEventConfiguration'
+  { -- | Denotes whether the wireless device join event topic is enabled or
+    -- disabled.
+    wirelessDeviceEventTopic :: Prelude.Maybe EventNotificationTopicStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkResourceTypeEventConfiguration' 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:
+--
+-- 'wirelessDeviceEventTopic', 'sidewalkResourceTypeEventConfiguration_wirelessDeviceEventTopic' - Denotes whether the wireless device join event topic is enabled or
+-- disabled.
+newSidewalkResourceTypeEventConfiguration ::
+  SidewalkResourceTypeEventConfiguration
+newSidewalkResourceTypeEventConfiguration =
+  SidewalkResourceTypeEventConfiguration'
+    { wirelessDeviceEventTopic =
+        Prelude.Nothing
+    }
+
+-- | Denotes whether the wireless device join event topic is enabled or
+-- disabled.
+sidewalkResourceTypeEventConfiguration_wirelessDeviceEventTopic :: Lens.Lens' SidewalkResourceTypeEventConfiguration (Prelude.Maybe EventNotificationTopicStatus)
+sidewalkResourceTypeEventConfiguration_wirelessDeviceEventTopic = Lens.lens (\SidewalkResourceTypeEventConfiguration' {wirelessDeviceEventTopic} -> wirelessDeviceEventTopic) (\s@SidewalkResourceTypeEventConfiguration' {} a -> s {wirelessDeviceEventTopic = a} :: SidewalkResourceTypeEventConfiguration)
+
+instance
+  Data.FromJSON
+    SidewalkResourceTypeEventConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "SidewalkResourceTypeEventConfiguration"
+      ( \x ->
+          SidewalkResourceTypeEventConfiguration'
+            Prelude.<$> (x Data..:? "WirelessDeviceEventTopic")
+      )
+
+instance
+  Prelude.Hashable
+    SidewalkResourceTypeEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    SidewalkResourceTypeEventConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` wirelessDeviceEventTopic
+
+instance
+  Prelude.NFData
+    SidewalkResourceTypeEventConfiguration
+  where
+  rnf SidewalkResourceTypeEventConfiguration' {..} =
+    Prelude.rnf wirelessDeviceEventTopic
+
+instance
+  Data.ToJSON
+    SidewalkResourceTypeEventConfiguration
+  where
+  toJSON SidewalkResourceTypeEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("WirelessDeviceEventTopic" Data..=)
+              Prelude.<$> wirelessDeviceEventTopic
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkSendDataToDevice.hs b/gen/Amazonka/IoTWireless/Types/SidewalkSendDataToDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkSendDataToDevice.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.IoTWireless.Types.SidewalkSendDataToDevice
+-- 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.IoTWireless.Types.SidewalkSendDataToDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.MessageType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a Sidewalk router.
+--
+-- /See:/ 'newSidewalkSendDataToDevice' smart constructor.
+data SidewalkSendDataToDevice = SidewalkSendDataToDevice'
+  { -- | The duration of time in seconds to retry sending the ACK.
+    ackModeRetryDurationSecs :: Prelude.Maybe Prelude.Natural,
+    messageType :: Prelude.Maybe MessageType,
+    -- | The sequence number.
+    seq :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkSendDataToDevice' 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:
+--
+-- 'ackModeRetryDurationSecs', 'sidewalkSendDataToDevice_ackModeRetryDurationSecs' - The duration of time in seconds to retry sending the ACK.
+--
+-- 'messageType', 'sidewalkSendDataToDevice_messageType' - Undocumented member.
+--
+-- 'seq', 'sidewalkSendDataToDevice_seq' - The sequence number.
+newSidewalkSendDataToDevice ::
+  SidewalkSendDataToDevice
+newSidewalkSendDataToDevice =
+  SidewalkSendDataToDevice'
+    { ackModeRetryDurationSecs =
+        Prelude.Nothing,
+      messageType = Prelude.Nothing,
+      seq = Prelude.Nothing
+    }
+
+-- | The duration of time in seconds to retry sending the ACK.
+sidewalkSendDataToDevice_ackModeRetryDurationSecs :: Lens.Lens' SidewalkSendDataToDevice (Prelude.Maybe Prelude.Natural)
+sidewalkSendDataToDevice_ackModeRetryDurationSecs = Lens.lens (\SidewalkSendDataToDevice' {ackModeRetryDurationSecs} -> ackModeRetryDurationSecs) (\s@SidewalkSendDataToDevice' {} a -> s {ackModeRetryDurationSecs = a} :: SidewalkSendDataToDevice)
+
+-- | Undocumented member.
+sidewalkSendDataToDevice_messageType :: Lens.Lens' SidewalkSendDataToDevice (Prelude.Maybe MessageType)
+sidewalkSendDataToDevice_messageType = Lens.lens (\SidewalkSendDataToDevice' {messageType} -> messageType) (\s@SidewalkSendDataToDevice' {} a -> s {messageType = a} :: SidewalkSendDataToDevice)
+
+-- | The sequence number.
+sidewalkSendDataToDevice_seq :: Lens.Lens' SidewalkSendDataToDevice (Prelude.Maybe Prelude.Natural)
+sidewalkSendDataToDevice_seq = Lens.lens (\SidewalkSendDataToDevice' {seq} -> seq) (\s@SidewalkSendDataToDevice' {} a -> s {seq = a} :: SidewalkSendDataToDevice)
+
+instance Prelude.Hashable SidewalkSendDataToDevice where
+  hashWithSalt _salt SidewalkSendDataToDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` ackModeRetryDurationSecs
+      `Prelude.hashWithSalt` messageType
+      `Prelude.hashWithSalt` seq
+
+instance Prelude.NFData SidewalkSendDataToDevice where
+  rnf SidewalkSendDataToDevice' {..} =
+    Prelude.rnf ackModeRetryDurationSecs
+      `Prelude.seq` Prelude.rnf messageType
+      `Prelude.seq` Prelude.rnf seq
+
+instance Data.ToJSON SidewalkSendDataToDevice where
+  toJSON SidewalkSendDataToDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AckModeRetryDurationSecs" Data..=)
+              Prelude.<$> ackModeRetryDurationSecs,
+            ("MessageType" Data..=) Prelude.<$> messageType,
+            ("Seq" Data..=) Prelude.<$> seq
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/SidewalkUpdateAccount.hs b/gen/Amazonka/IoTWireless/Types/SidewalkUpdateAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SidewalkUpdateAccount.hs
@@ -0,0 +1,72 @@
+{-# 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.IoTWireless.Types.SidewalkUpdateAccount
+-- 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.IoTWireless.Types.SidewalkUpdateAccount 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
+
+-- | Sidewalk update.
+--
+-- /See:/ 'newSidewalkUpdateAccount' smart constructor.
+data SidewalkUpdateAccount = SidewalkUpdateAccount'
+  { -- | The new Sidewalk application server private key.
+    appServerPrivateKey :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SidewalkUpdateAccount' 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:
+--
+-- 'appServerPrivateKey', 'sidewalkUpdateAccount_appServerPrivateKey' - The new Sidewalk application server private key.
+newSidewalkUpdateAccount ::
+  SidewalkUpdateAccount
+newSidewalkUpdateAccount =
+  SidewalkUpdateAccount'
+    { appServerPrivateKey =
+        Prelude.Nothing
+    }
+
+-- | The new Sidewalk application server private key.
+sidewalkUpdateAccount_appServerPrivateKey :: Lens.Lens' SidewalkUpdateAccount (Prelude.Maybe Prelude.Text)
+sidewalkUpdateAccount_appServerPrivateKey = Lens.lens (\SidewalkUpdateAccount' {appServerPrivateKey} -> appServerPrivateKey) (\s@SidewalkUpdateAccount' {} a -> s {appServerPrivateKey = a} :: SidewalkUpdateAccount) Prelude.. Lens.mapping Data._Sensitive
+
+instance Prelude.Hashable SidewalkUpdateAccount where
+  hashWithSalt _salt SidewalkUpdateAccount' {..} =
+    _salt `Prelude.hashWithSalt` appServerPrivateKey
+
+instance Prelude.NFData SidewalkUpdateAccount where
+  rnf SidewalkUpdateAccount' {..} =
+    Prelude.rnf appServerPrivateKey
+
+instance Data.ToJSON SidewalkUpdateAccount where
+  toJSON SidewalkUpdateAccount' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppServerPrivateKey" Data..=)
+              Prelude.<$> appServerPrivateKey
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/SigningAlg.hs b/gen/Amazonka/IoTWireless/Types/SigningAlg.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SigningAlg.hs
@@ -0,0 +1,72 @@
+{-# 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.IoTWireless.Types.SigningAlg
+-- 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.IoTWireless.Types.SigningAlg
+  ( SigningAlg
+      ( ..,
+        SigningAlg_Ed25519,
+        SigningAlg_P256r1
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The certificate chain algorithm provided by sidewalk.
+newtype SigningAlg = SigningAlg'
+  { fromSigningAlg ::
+      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 SigningAlg_Ed25519 :: SigningAlg
+pattern SigningAlg_Ed25519 = SigningAlg' "Ed25519"
+
+pattern SigningAlg_P256r1 :: SigningAlg
+pattern SigningAlg_P256r1 = SigningAlg' "P256r1"
+
+{-# COMPLETE
+  SigningAlg_Ed25519,
+  SigningAlg_P256r1,
+  SigningAlg'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/SupportedRfRegion.hs b/gen/Amazonka/IoTWireless/Types/SupportedRfRegion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/SupportedRfRegion.hs
@@ -0,0 +1,82 @@
+{-# 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.IoTWireless.Types.SupportedRfRegion
+-- 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.IoTWireless.Types.SupportedRfRegion
+  ( SupportedRfRegion
+      ( ..,
+        SupportedRfRegion_AS923_1,
+        SupportedRfRegion_AU915,
+        SupportedRfRegion_EU868,
+        SupportedRfRegion_US915
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Supported RfRegions
+newtype SupportedRfRegion = SupportedRfRegion'
+  { fromSupportedRfRegion ::
+      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 SupportedRfRegion_AS923_1 :: SupportedRfRegion
+pattern SupportedRfRegion_AS923_1 = SupportedRfRegion' "AS923-1"
+
+pattern SupportedRfRegion_AU915 :: SupportedRfRegion
+pattern SupportedRfRegion_AU915 = SupportedRfRegion' "AU915"
+
+pattern SupportedRfRegion_EU868 :: SupportedRfRegion
+pattern SupportedRfRegion_EU868 = SupportedRfRegion' "EU868"
+
+pattern SupportedRfRegion_US915 :: SupportedRfRegion
+pattern SupportedRfRegion_US915 = SupportedRfRegion' "US915"
+
+{-# COMPLETE
+  SupportedRfRegion_AS923_1,
+  SupportedRfRegion_AU915,
+  SupportedRfRegion_EU868,
+  SupportedRfRegion_US915,
+  SupportedRfRegion'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/Tag.hs b/gen/Amazonka/IoTWireless/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/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.IoTWireless.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.IoTWireless.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 simple label consisting of a customer-defined key-value pair
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The tag\'s key value.
+    key :: Prelude.Text,
+    -- | The tag\'s value.
+    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 tag\'s key value.
+--
+-- 'value', 'tag_value' - The tag\'s value.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The tag\'s key value.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The tag\'s value.
+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/IoTWireless/Types/TdscdmaLocalId.hs b/gen/Amazonka/IoTWireless/Types/TdscdmaLocalId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/TdscdmaLocalId.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.IoTWireless.Types.TdscdmaLocalId
+-- 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.IoTWireless.Types.TdscdmaLocalId 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
+
+-- | TD-SCDMA local identification (local Id) information.
+--
+-- /See:/ 'newTdscdmaLocalId' smart constructor.
+data TdscdmaLocalId = TdscdmaLocalId'
+  { -- | TD-SCDMA UTRA (Universal Terrestrial Radio Access Network) absolute RF
+    -- channel number (UARFCN).
+    uarfcn :: Prelude.Natural,
+    -- | Cell parameters for TD-SCDMA.
+    cellParams :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TdscdmaLocalId' 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:
+--
+-- 'uarfcn', 'tdscdmaLocalId_uarfcn' - TD-SCDMA UTRA (Universal Terrestrial Radio Access Network) absolute RF
+-- channel number (UARFCN).
+--
+-- 'cellParams', 'tdscdmaLocalId_cellParams' - Cell parameters for TD-SCDMA.
+newTdscdmaLocalId ::
+  -- | 'uarfcn'
+  Prelude.Natural ->
+  -- | 'cellParams'
+  Prelude.Natural ->
+  TdscdmaLocalId
+newTdscdmaLocalId pUarfcn_ pCellParams_ =
+  TdscdmaLocalId'
+    { uarfcn = pUarfcn_,
+      cellParams = pCellParams_
+    }
+
+-- | TD-SCDMA UTRA (Universal Terrestrial Radio Access Network) absolute RF
+-- channel number (UARFCN).
+tdscdmaLocalId_uarfcn :: Lens.Lens' TdscdmaLocalId Prelude.Natural
+tdscdmaLocalId_uarfcn = Lens.lens (\TdscdmaLocalId' {uarfcn} -> uarfcn) (\s@TdscdmaLocalId' {} a -> s {uarfcn = a} :: TdscdmaLocalId)
+
+-- | Cell parameters for TD-SCDMA.
+tdscdmaLocalId_cellParams :: Lens.Lens' TdscdmaLocalId Prelude.Natural
+tdscdmaLocalId_cellParams = Lens.lens (\TdscdmaLocalId' {cellParams} -> cellParams) (\s@TdscdmaLocalId' {} a -> s {cellParams = a} :: TdscdmaLocalId)
+
+instance Prelude.Hashable TdscdmaLocalId where
+  hashWithSalt _salt TdscdmaLocalId' {..} =
+    _salt
+      `Prelude.hashWithSalt` uarfcn
+      `Prelude.hashWithSalt` cellParams
+
+instance Prelude.NFData TdscdmaLocalId where
+  rnf TdscdmaLocalId' {..} =
+    Prelude.rnf uarfcn
+      `Prelude.seq` Prelude.rnf cellParams
+
+instance Data.ToJSON TdscdmaLocalId where
+  toJSON TdscdmaLocalId' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Uarfcn" Data..= uarfcn),
+            Prelude.Just ("CellParams" Data..= cellParams)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/TdscdmaNmrObj.hs b/gen/Amazonka/IoTWireless/Types/TdscdmaNmrObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/TdscdmaNmrObj.hs
@@ -0,0 +1,129 @@
+{-# 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.IoTWireless.Types.TdscdmaNmrObj
+-- 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.IoTWireless.Types.TdscdmaNmrObj 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
+
+-- | TD-SCDMA object for network measurement reports.
+--
+-- /See:/ 'newTdscdmaNmrObj' smart constructor.
+data TdscdmaNmrObj = TdscdmaNmrObj'
+  { -- | Path loss, or path attenuation, is the reduction in power density of an
+    -- electromagnetic wave as it propagates through space.
+    pathLoss :: Prelude.Maybe Prelude.Natural,
+    -- | Code power of the received signal, measured in decibel-milliwatts (dBm).
+    rscp :: Prelude.Maybe Prelude.Int,
+    -- | UTRAN (UMTS Terrestrial Radio Access Network) cell global identifier.
+    utranCid :: Prelude.Maybe Prelude.Natural,
+    -- | TD-SCDMA UTRA (Universal Terrestrial Radio Access Network) absolute RF
+    -- channel number.
+    uarfcn :: Prelude.Natural,
+    -- | Cell parameters for TD-SCDMA network measurement reports object.
+    cellParams :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TdscdmaNmrObj' 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:
+--
+-- 'pathLoss', 'tdscdmaNmrObj_pathLoss' - Path loss, or path attenuation, is the reduction in power density of an
+-- electromagnetic wave as it propagates through space.
+--
+-- 'rscp', 'tdscdmaNmrObj_rscp' - Code power of the received signal, measured in decibel-milliwatts (dBm).
+--
+-- 'utranCid', 'tdscdmaNmrObj_utranCid' - UTRAN (UMTS Terrestrial Radio Access Network) cell global identifier.
+--
+-- 'uarfcn', 'tdscdmaNmrObj_uarfcn' - TD-SCDMA UTRA (Universal Terrestrial Radio Access Network) absolute RF
+-- channel number.
+--
+-- 'cellParams', 'tdscdmaNmrObj_cellParams' - Cell parameters for TD-SCDMA network measurement reports object.
+newTdscdmaNmrObj ::
+  -- | 'uarfcn'
+  Prelude.Natural ->
+  -- | 'cellParams'
+  Prelude.Natural ->
+  TdscdmaNmrObj
+newTdscdmaNmrObj pUarfcn_ pCellParams_ =
+  TdscdmaNmrObj'
+    { pathLoss = Prelude.Nothing,
+      rscp = Prelude.Nothing,
+      utranCid = Prelude.Nothing,
+      uarfcn = pUarfcn_,
+      cellParams = pCellParams_
+    }
+
+-- | Path loss, or path attenuation, is the reduction in power density of an
+-- electromagnetic wave as it propagates through space.
+tdscdmaNmrObj_pathLoss :: Lens.Lens' TdscdmaNmrObj (Prelude.Maybe Prelude.Natural)
+tdscdmaNmrObj_pathLoss = Lens.lens (\TdscdmaNmrObj' {pathLoss} -> pathLoss) (\s@TdscdmaNmrObj' {} a -> s {pathLoss = a} :: TdscdmaNmrObj)
+
+-- | Code power of the received signal, measured in decibel-milliwatts (dBm).
+tdscdmaNmrObj_rscp :: Lens.Lens' TdscdmaNmrObj (Prelude.Maybe Prelude.Int)
+tdscdmaNmrObj_rscp = Lens.lens (\TdscdmaNmrObj' {rscp} -> rscp) (\s@TdscdmaNmrObj' {} a -> s {rscp = a} :: TdscdmaNmrObj)
+
+-- | UTRAN (UMTS Terrestrial Radio Access Network) cell global identifier.
+tdscdmaNmrObj_utranCid :: Lens.Lens' TdscdmaNmrObj (Prelude.Maybe Prelude.Natural)
+tdscdmaNmrObj_utranCid = Lens.lens (\TdscdmaNmrObj' {utranCid} -> utranCid) (\s@TdscdmaNmrObj' {} a -> s {utranCid = a} :: TdscdmaNmrObj)
+
+-- | TD-SCDMA UTRA (Universal Terrestrial Radio Access Network) absolute RF
+-- channel number.
+tdscdmaNmrObj_uarfcn :: Lens.Lens' TdscdmaNmrObj Prelude.Natural
+tdscdmaNmrObj_uarfcn = Lens.lens (\TdscdmaNmrObj' {uarfcn} -> uarfcn) (\s@TdscdmaNmrObj' {} a -> s {uarfcn = a} :: TdscdmaNmrObj)
+
+-- | Cell parameters for TD-SCDMA network measurement reports object.
+tdscdmaNmrObj_cellParams :: Lens.Lens' TdscdmaNmrObj Prelude.Natural
+tdscdmaNmrObj_cellParams = Lens.lens (\TdscdmaNmrObj' {cellParams} -> cellParams) (\s@TdscdmaNmrObj' {} a -> s {cellParams = a} :: TdscdmaNmrObj)
+
+instance Prelude.Hashable TdscdmaNmrObj where
+  hashWithSalt _salt TdscdmaNmrObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` pathLoss
+      `Prelude.hashWithSalt` rscp
+      `Prelude.hashWithSalt` utranCid
+      `Prelude.hashWithSalt` uarfcn
+      `Prelude.hashWithSalt` cellParams
+
+instance Prelude.NFData TdscdmaNmrObj where
+  rnf TdscdmaNmrObj' {..} =
+    Prelude.rnf pathLoss
+      `Prelude.seq` Prelude.rnf rscp
+      `Prelude.seq` Prelude.rnf utranCid
+      `Prelude.seq` Prelude.rnf uarfcn
+      `Prelude.seq` Prelude.rnf cellParams
+
+instance Data.ToJSON TdscdmaNmrObj where
+  toJSON TdscdmaNmrObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("PathLoss" Data..=) Prelude.<$> pathLoss,
+            ("Rscp" Data..=) Prelude.<$> rscp,
+            ("UtranCid" Data..=) Prelude.<$> utranCid,
+            Prelude.Just ("Uarfcn" Data..= uarfcn),
+            Prelude.Just ("CellParams" Data..= cellParams)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/TdscdmaObj.hs b/gen/Amazonka/IoTWireless/Types/TdscdmaObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/TdscdmaObj.hs
@@ -0,0 +1,183 @@
+{-# 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.IoTWireless.Types.TdscdmaObj
+-- 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.IoTWireless.Types.TdscdmaObj where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.TdscdmaLocalId
+import Amazonka.IoTWireless.Types.TdscdmaNmrObj
+import qualified Amazonka.Prelude as Prelude
+
+-- | TD-SCDMA object.
+--
+-- /See:/ 'newTdscdmaObj' smart constructor.
+data TdscdmaObj = TdscdmaObj'
+  { -- | Location Area Code.
+    lac :: Prelude.Maybe Prelude.Natural,
+    -- | Path loss, or path attenuation, is the reduction in power density of an
+    -- electromagnetic wave as it propagates through space.
+    pathLoss :: Prelude.Maybe Prelude.Natural,
+    -- | Signal power of the received signal (Received Signal Code Power),
+    -- measured in decibel-milliwatts (dBm).
+    rscp :: Prelude.Maybe Prelude.Int,
+    -- | TD-SCDMA local identification (local ID) information.
+    tdscdmaLocalId :: Prelude.Maybe TdscdmaLocalId,
+    -- | TD-SCDMA object for network measurement reports.
+    tdscdmaNmr :: Prelude.Maybe (Prelude.NonEmpty TdscdmaNmrObj),
+    -- | TD-SCDMA Timing advance.
+    tdscdmaTimingAdvance :: Prelude.Maybe Prelude.Natural,
+    -- | Mobile Country Code.
+    mcc :: Prelude.Natural,
+    -- | Mobile Network Code.
+    mnc :: Prelude.Natural,
+    -- | UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+    utranCid :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TdscdmaObj' 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:
+--
+-- 'lac', 'tdscdmaObj_lac' - Location Area Code.
+--
+-- 'pathLoss', 'tdscdmaObj_pathLoss' - Path loss, or path attenuation, is the reduction in power density of an
+-- electromagnetic wave as it propagates through space.
+--
+-- 'rscp', 'tdscdmaObj_rscp' - Signal power of the received signal (Received Signal Code Power),
+-- measured in decibel-milliwatts (dBm).
+--
+-- 'tdscdmaLocalId', 'tdscdmaObj_tdscdmaLocalId' - TD-SCDMA local identification (local ID) information.
+--
+-- 'tdscdmaNmr', 'tdscdmaObj_tdscdmaNmr' - TD-SCDMA object for network measurement reports.
+--
+-- 'tdscdmaTimingAdvance', 'tdscdmaObj_tdscdmaTimingAdvance' - TD-SCDMA Timing advance.
+--
+-- 'mcc', 'tdscdmaObj_mcc' - Mobile Country Code.
+--
+-- 'mnc', 'tdscdmaObj_mnc' - Mobile Network Code.
+--
+-- 'utranCid', 'tdscdmaObj_utranCid' - UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+newTdscdmaObj ::
+  -- | 'mcc'
+  Prelude.Natural ->
+  -- | 'mnc'
+  Prelude.Natural ->
+  -- | 'utranCid'
+  Prelude.Natural ->
+  TdscdmaObj
+newTdscdmaObj pMcc_ pMnc_ pUtranCid_ =
+  TdscdmaObj'
+    { lac = Prelude.Nothing,
+      pathLoss = Prelude.Nothing,
+      rscp = Prelude.Nothing,
+      tdscdmaLocalId = Prelude.Nothing,
+      tdscdmaNmr = Prelude.Nothing,
+      tdscdmaTimingAdvance = Prelude.Nothing,
+      mcc = pMcc_,
+      mnc = pMnc_,
+      utranCid = pUtranCid_
+    }
+
+-- | Location Area Code.
+tdscdmaObj_lac :: Lens.Lens' TdscdmaObj (Prelude.Maybe Prelude.Natural)
+tdscdmaObj_lac = Lens.lens (\TdscdmaObj' {lac} -> lac) (\s@TdscdmaObj' {} a -> s {lac = a} :: TdscdmaObj)
+
+-- | Path loss, or path attenuation, is the reduction in power density of an
+-- electromagnetic wave as it propagates through space.
+tdscdmaObj_pathLoss :: Lens.Lens' TdscdmaObj (Prelude.Maybe Prelude.Natural)
+tdscdmaObj_pathLoss = Lens.lens (\TdscdmaObj' {pathLoss} -> pathLoss) (\s@TdscdmaObj' {} a -> s {pathLoss = a} :: TdscdmaObj)
+
+-- | Signal power of the received signal (Received Signal Code Power),
+-- measured in decibel-milliwatts (dBm).
+tdscdmaObj_rscp :: Lens.Lens' TdscdmaObj (Prelude.Maybe Prelude.Int)
+tdscdmaObj_rscp = Lens.lens (\TdscdmaObj' {rscp} -> rscp) (\s@TdscdmaObj' {} a -> s {rscp = a} :: TdscdmaObj)
+
+-- | TD-SCDMA local identification (local ID) information.
+tdscdmaObj_tdscdmaLocalId :: Lens.Lens' TdscdmaObj (Prelude.Maybe TdscdmaLocalId)
+tdscdmaObj_tdscdmaLocalId = Lens.lens (\TdscdmaObj' {tdscdmaLocalId} -> tdscdmaLocalId) (\s@TdscdmaObj' {} a -> s {tdscdmaLocalId = a} :: TdscdmaObj)
+
+-- | TD-SCDMA object for network measurement reports.
+tdscdmaObj_tdscdmaNmr :: Lens.Lens' TdscdmaObj (Prelude.Maybe (Prelude.NonEmpty TdscdmaNmrObj))
+tdscdmaObj_tdscdmaNmr = Lens.lens (\TdscdmaObj' {tdscdmaNmr} -> tdscdmaNmr) (\s@TdscdmaObj' {} a -> s {tdscdmaNmr = a} :: TdscdmaObj) Prelude.. Lens.mapping Lens.coerced
+
+-- | TD-SCDMA Timing advance.
+tdscdmaObj_tdscdmaTimingAdvance :: Lens.Lens' TdscdmaObj (Prelude.Maybe Prelude.Natural)
+tdscdmaObj_tdscdmaTimingAdvance = Lens.lens (\TdscdmaObj' {tdscdmaTimingAdvance} -> tdscdmaTimingAdvance) (\s@TdscdmaObj' {} a -> s {tdscdmaTimingAdvance = a} :: TdscdmaObj)
+
+-- | Mobile Country Code.
+tdscdmaObj_mcc :: Lens.Lens' TdscdmaObj Prelude.Natural
+tdscdmaObj_mcc = Lens.lens (\TdscdmaObj' {mcc} -> mcc) (\s@TdscdmaObj' {} a -> s {mcc = a} :: TdscdmaObj)
+
+-- | Mobile Network Code.
+tdscdmaObj_mnc :: Lens.Lens' TdscdmaObj Prelude.Natural
+tdscdmaObj_mnc = Lens.lens (\TdscdmaObj' {mnc} -> mnc) (\s@TdscdmaObj' {} a -> s {mnc = a} :: TdscdmaObj)
+
+-- | UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+tdscdmaObj_utranCid :: Lens.Lens' TdscdmaObj Prelude.Natural
+tdscdmaObj_utranCid = Lens.lens (\TdscdmaObj' {utranCid} -> utranCid) (\s@TdscdmaObj' {} a -> s {utranCid = a} :: TdscdmaObj)
+
+instance Prelude.Hashable TdscdmaObj where
+  hashWithSalt _salt TdscdmaObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` lac
+      `Prelude.hashWithSalt` pathLoss
+      `Prelude.hashWithSalt` rscp
+      `Prelude.hashWithSalt` tdscdmaLocalId
+      `Prelude.hashWithSalt` tdscdmaNmr
+      `Prelude.hashWithSalt` tdscdmaTimingAdvance
+      `Prelude.hashWithSalt` mcc
+      `Prelude.hashWithSalt` mnc
+      `Prelude.hashWithSalt` utranCid
+
+instance Prelude.NFData TdscdmaObj where
+  rnf TdscdmaObj' {..} =
+    Prelude.rnf lac
+      `Prelude.seq` Prelude.rnf pathLoss
+      `Prelude.seq` Prelude.rnf rscp
+      `Prelude.seq` Prelude.rnf tdscdmaLocalId
+      `Prelude.seq` Prelude.rnf tdscdmaNmr
+      `Prelude.seq` Prelude.rnf tdscdmaTimingAdvance
+      `Prelude.seq` Prelude.rnf mcc
+      `Prelude.seq` Prelude.rnf mnc
+      `Prelude.seq` Prelude.rnf utranCid
+
+instance Data.ToJSON TdscdmaObj where
+  toJSON TdscdmaObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Lac" Data..=) Prelude.<$> lac,
+            ("PathLoss" Data..=) Prelude.<$> pathLoss,
+            ("Rscp" Data..=) Prelude.<$> rscp,
+            ("TdscdmaLocalId" Data..=)
+              Prelude.<$> tdscdmaLocalId,
+            ("TdscdmaNmr" Data..=) Prelude.<$> tdscdmaNmr,
+            ("TdscdmaTimingAdvance" Data..=)
+              Prelude.<$> tdscdmaTimingAdvance,
+            Prelude.Just ("Mcc" Data..= mcc),
+            Prelude.Just ("Mnc" Data..= mnc),
+            Prelude.Just ("UtranCid" Data..= utranCid)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/TraceContent.hs b/gen/Amazonka/IoTWireless/Types/TraceContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/TraceContent.hs
@@ -0,0 +1,94 @@
+{-# 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.IoTWireless.Types.TraceContent
+-- 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.IoTWireless.Types.TraceContent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LogLevel
+import Amazonka.IoTWireless.Types.WirelessDeviceFrameInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Trace content for your wireless gateway and wireless device resources.
+--
+-- /See:/ 'newTraceContent' smart constructor.
+data TraceContent = TraceContent'
+  { logLevel :: Prelude.Maybe LogLevel,
+    wirelessDeviceFrameInfo :: Prelude.Maybe WirelessDeviceFrameInfo
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TraceContent' 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:
+--
+-- 'logLevel', 'traceContent_logLevel' - Undocumented member.
+--
+-- 'wirelessDeviceFrameInfo', 'traceContent_wirelessDeviceFrameInfo' - Undocumented member.
+newTraceContent ::
+  TraceContent
+newTraceContent =
+  TraceContent'
+    { logLevel = Prelude.Nothing,
+      wirelessDeviceFrameInfo = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+traceContent_logLevel :: Lens.Lens' TraceContent (Prelude.Maybe LogLevel)
+traceContent_logLevel = Lens.lens (\TraceContent' {logLevel} -> logLevel) (\s@TraceContent' {} a -> s {logLevel = a} :: TraceContent)
+
+-- | Undocumented member.
+traceContent_wirelessDeviceFrameInfo :: Lens.Lens' TraceContent (Prelude.Maybe WirelessDeviceFrameInfo)
+traceContent_wirelessDeviceFrameInfo = Lens.lens (\TraceContent' {wirelessDeviceFrameInfo} -> wirelessDeviceFrameInfo) (\s@TraceContent' {} a -> s {wirelessDeviceFrameInfo = a} :: TraceContent)
+
+instance Data.FromJSON TraceContent where
+  parseJSON =
+    Data.withObject
+      "TraceContent"
+      ( \x ->
+          TraceContent'
+            Prelude.<$> (x Data..:? "LogLevel")
+            Prelude.<*> (x Data..:? "WirelessDeviceFrameInfo")
+      )
+
+instance Prelude.Hashable TraceContent where
+  hashWithSalt _salt TraceContent' {..} =
+    _salt
+      `Prelude.hashWithSalt` logLevel
+      `Prelude.hashWithSalt` wirelessDeviceFrameInfo
+
+instance Prelude.NFData TraceContent where
+  rnf TraceContent' {..} =
+    Prelude.rnf logLevel
+      `Prelude.seq` Prelude.rnf wirelessDeviceFrameInfo
+
+instance Data.ToJSON TraceContent where
+  toJSON TraceContent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LogLevel" Data..=) Prelude.<$> logLevel,
+            ("WirelessDeviceFrameInfo" Data..=)
+              Prelude.<$> wirelessDeviceFrameInfo
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/UpdateAbpV1_0_x.hs b/gen/Amazonka/IoTWireless/Types/UpdateAbpV1_0_x.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/UpdateAbpV1_0_x.hs
@@ -0,0 +1,66 @@
+{-# 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.IoTWireless.Types.UpdateAbpV1_0_x
+-- 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.IoTWireless.Types.UpdateAbpV1_0_x 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
+
+-- | ABP device object for LoRaWAN specification v1.0.x
+--
+-- /See:/ 'newUpdateAbpV1_0_x' smart constructor.
+data UpdateAbpV1_0_x = UpdateAbpV1_0_x'
+  { -- | The FCnt init value.
+    fCntStart :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAbpV1_0_x' 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:
+--
+-- 'fCntStart', 'updateAbpV1_0_x_fCntStart' - The FCnt init value.
+newUpdateAbpV1_0_x ::
+  UpdateAbpV1_0_x
+newUpdateAbpV1_0_x =
+  UpdateAbpV1_0_x' {fCntStart = Prelude.Nothing}
+
+-- | The FCnt init value.
+updateAbpV1_0_x_fCntStart :: Lens.Lens' UpdateAbpV1_0_x (Prelude.Maybe Prelude.Natural)
+updateAbpV1_0_x_fCntStart = Lens.lens (\UpdateAbpV1_0_x' {fCntStart} -> fCntStart) (\s@UpdateAbpV1_0_x' {} a -> s {fCntStart = a} :: UpdateAbpV1_0_x)
+
+instance Prelude.Hashable UpdateAbpV1_0_x where
+  hashWithSalt _salt UpdateAbpV1_0_x' {..} =
+    _salt `Prelude.hashWithSalt` fCntStart
+
+instance Prelude.NFData UpdateAbpV1_0_x where
+  rnf UpdateAbpV1_0_x' {..} = Prelude.rnf fCntStart
+
+instance Data.ToJSON UpdateAbpV1_0_x where
+  toJSON UpdateAbpV1_0_x' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("FCntStart" Data..=) Prelude.<$> fCntStart]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/UpdateAbpV1_1.hs b/gen/Amazonka/IoTWireless/Types/UpdateAbpV1_1.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/UpdateAbpV1_1.hs
@@ -0,0 +1,66 @@
+{-# 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.IoTWireless.Types.UpdateAbpV1_1
+-- 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.IoTWireless.Types.UpdateAbpV1_1 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
+
+-- | ABP device object for LoRaWAN specification v1.1
+--
+-- /See:/ 'newUpdateAbpV1_1' smart constructor.
+data UpdateAbpV1_1 = UpdateAbpV1_1'
+  { -- | The FCnt init value.
+    fCntStart :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAbpV1_1' 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:
+--
+-- 'fCntStart', 'updateAbpV1_1_fCntStart' - The FCnt init value.
+newUpdateAbpV1_1 ::
+  UpdateAbpV1_1
+newUpdateAbpV1_1 =
+  UpdateAbpV1_1' {fCntStart = Prelude.Nothing}
+
+-- | The FCnt init value.
+updateAbpV1_1_fCntStart :: Lens.Lens' UpdateAbpV1_1 (Prelude.Maybe Prelude.Natural)
+updateAbpV1_1_fCntStart = Lens.lens (\UpdateAbpV1_1' {fCntStart} -> fCntStart) (\s@UpdateAbpV1_1' {} a -> s {fCntStart = a} :: UpdateAbpV1_1)
+
+instance Prelude.Hashable UpdateAbpV1_1 where
+  hashWithSalt _salt UpdateAbpV1_1' {..} =
+    _salt `Prelude.hashWithSalt` fCntStart
+
+instance Prelude.NFData UpdateAbpV1_1 where
+  rnf UpdateAbpV1_1' {..} = Prelude.rnf fCntStart
+
+instance Data.ToJSON UpdateAbpV1_1 where
+  toJSON UpdateAbpV1_1' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("FCntStart" Data..=) Prelude.<$> fCntStart]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/UpdateFPorts.hs b/gen/Amazonka/IoTWireless/Types/UpdateFPorts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/UpdateFPorts.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.IoTWireless.Types.UpdateFPorts
+-- 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.IoTWireless.Types.UpdateFPorts where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.ApplicationConfig
+import Amazonka.IoTWireless.Types.Positioning
+import qualified Amazonka.Prelude as Prelude
+
+-- | Object for updating the FPorts information.
+--
+-- /See:/ 'newUpdateFPorts' smart constructor.
+data UpdateFPorts = UpdateFPorts'
+  { -- | LoRaWAN application, which can be used for geolocation by activating
+    -- positioning.
+    applications :: Prelude.Maybe [ApplicationConfig],
+    -- | Positioning FPorts for the ClockSync, Stream, and GNSS functions.
+    positioning :: Prelude.Maybe Positioning
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFPorts' 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:
+--
+-- 'applications', 'updateFPorts_applications' - LoRaWAN application, which can be used for geolocation by activating
+-- positioning.
+--
+-- 'positioning', 'updateFPorts_positioning' - Positioning FPorts for the ClockSync, Stream, and GNSS functions.
+newUpdateFPorts ::
+  UpdateFPorts
+newUpdateFPorts =
+  UpdateFPorts'
+    { applications = Prelude.Nothing,
+      positioning = Prelude.Nothing
+    }
+
+-- | LoRaWAN application, which can be used for geolocation by activating
+-- positioning.
+updateFPorts_applications :: Lens.Lens' UpdateFPorts (Prelude.Maybe [ApplicationConfig])
+updateFPorts_applications = Lens.lens (\UpdateFPorts' {applications} -> applications) (\s@UpdateFPorts' {} a -> s {applications = a} :: UpdateFPorts) Prelude.. Lens.mapping Lens.coerced
+
+-- | Positioning FPorts for the ClockSync, Stream, and GNSS functions.
+updateFPorts_positioning :: Lens.Lens' UpdateFPorts (Prelude.Maybe Positioning)
+updateFPorts_positioning = Lens.lens (\UpdateFPorts' {positioning} -> positioning) (\s@UpdateFPorts' {} a -> s {positioning = a} :: UpdateFPorts)
+
+instance Prelude.Hashable UpdateFPorts where
+  hashWithSalt _salt UpdateFPorts' {..} =
+    _salt
+      `Prelude.hashWithSalt` applications
+      `Prelude.hashWithSalt` positioning
+
+instance Prelude.NFData UpdateFPorts where
+  rnf UpdateFPorts' {..} =
+    Prelude.rnf applications
+      `Prelude.seq` Prelude.rnf positioning
+
+instance Data.ToJSON UpdateFPorts where
+  toJSON UpdateFPorts' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Applications" Data..=) Prelude.<$> applications,
+            ("Positioning" Data..=) Prelude.<$> positioning
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/UpdateWirelessGatewayTaskCreate.hs b/gen/Amazonka/IoTWireless/Types/UpdateWirelessGatewayTaskCreate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/UpdateWirelessGatewayTaskCreate.hs
@@ -0,0 +1,121 @@
+{-# 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.IoTWireless.Types.UpdateWirelessGatewayTaskCreate
+-- 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.IoTWireless.Types.UpdateWirelessGatewayTaskCreate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANUpdateGatewayTaskCreate
+import qualified Amazonka.Prelude as Prelude
+
+-- | UpdateWirelessGatewayTaskCreate object.
+--
+-- /See:/ 'newUpdateWirelessGatewayTaskCreate' smart constructor.
+data UpdateWirelessGatewayTaskCreate = UpdateWirelessGatewayTaskCreate'
+  { -- | The properties that relate to the LoRaWAN wireless gateway.
+    loRaWAN :: Prelude.Maybe LoRaWANUpdateGatewayTaskCreate,
+    -- | The IAM role used to read data from the S3 bucket.
+    updateDataRole :: Prelude.Maybe Prelude.Text,
+    -- | The link to the S3 bucket.
+    updateDataSource :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWirelessGatewayTaskCreate' 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:
+--
+-- 'loRaWAN', 'updateWirelessGatewayTaskCreate_loRaWAN' - The properties that relate to the LoRaWAN wireless gateway.
+--
+-- 'updateDataRole', 'updateWirelessGatewayTaskCreate_updateDataRole' - The IAM role used to read data from the S3 bucket.
+--
+-- 'updateDataSource', 'updateWirelessGatewayTaskCreate_updateDataSource' - The link to the S3 bucket.
+newUpdateWirelessGatewayTaskCreate ::
+  UpdateWirelessGatewayTaskCreate
+newUpdateWirelessGatewayTaskCreate =
+  UpdateWirelessGatewayTaskCreate'
+    { loRaWAN =
+        Prelude.Nothing,
+      updateDataRole = Prelude.Nothing,
+      updateDataSource = Prelude.Nothing
+    }
+
+-- | The properties that relate to the LoRaWAN wireless gateway.
+updateWirelessGatewayTaskCreate_loRaWAN :: Lens.Lens' UpdateWirelessGatewayTaskCreate (Prelude.Maybe LoRaWANUpdateGatewayTaskCreate)
+updateWirelessGatewayTaskCreate_loRaWAN = Lens.lens (\UpdateWirelessGatewayTaskCreate' {loRaWAN} -> loRaWAN) (\s@UpdateWirelessGatewayTaskCreate' {} a -> s {loRaWAN = a} :: UpdateWirelessGatewayTaskCreate)
+
+-- | The IAM role used to read data from the S3 bucket.
+updateWirelessGatewayTaskCreate_updateDataRole :: Lens.Lens' UpdateWirelessGatewayTaskCreate (Prelude.Maybe Prelude.Text)
+updateWirelessGatewayTaskCreate_updateDataRole = Lens.lens (\UpdateWirelessGatewayTaskCreate' {updateDataRole} -> updateDataRole) (\s@UpdateWirelessGatewayTaskCreate' {} a -> s {updateDataRole = a} :: UpdateWirelessGatewayTaskCreate)
+
+-- | The link to the S3 bucket.
+updateWirelessGatewayTaskCreate_updateDataSource :: Lens.Lens' UpdateWirelessGatewayTaskCreate (Prelude.Maybe Prelude.Text)
+updateWirelessGatewayTaskCreate_updateDataSource = Lens.lens (\UpdateWirelessGatewayTaskCreate' {updateDataSource} -> updateDataSource) (\s@UpdateWirelessGatewayTaskCreate' {} a -> s {updateDataSource = a} :: UpdateWirelessGatewayTaskCreate)
+
+instance
+  Data.FromJSON
+    UpdateWirelessGatewayTaskCreate
+  where
+  parseJSON =
+    Data.withObject
+      "UpdateWirelessGatewayTaskCreate"
+      ( \x ->
+          UpdateWirelessGatewayTaskCreate'
+            Prelude.<$> (x Data..:? "LoRaWAN")
+            Prelude.<*> (x Data..:? "UpdateDataRole")
+            Prelude.<*> (x Data..:? "UpdateDataSource")
+      )
+
+instance
+  Prelude.Hashable
+    UpdateWirelessGatewayTaskCreate
+  where
+  hashWithSalt
+    _salt
+    UpdateWirelessGatewayTaskCreate' {..} =
+      _salt
+        `Prelude.hashWithSalt` loRaWAN
+        `Prelude.hashWithSalt` updateDataRole
+        `Prelude.hashWithSalt` updateDataSource
+
+instance
+  Prelude.NFData
+    UpdateWirelessGatewayTaskCreate
+  where
+  rnf UpdateWirelessGatewayTaskCreate' {..} =
+    Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf updateDataRole
+      `Prelude.seq` Prelude.rnf updateDataSource
+
+instance Data.ToJSON UpdateWirelessGatewayTaskCreate where
+  toJSON UpdateWirelessGatewayTaskCreate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("UpdateDataRole" Data..=)
+              Prelude.<$> updateDataRole,
+            ("UpdateDataSource" Data..=)
+              Prelude.<$> updateDataSource
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/UpdateWirelessGatewayTaskEntry.hs b/gen/Amazonka/IoTWireless/Types/UpdateWirelessGatewayTaskEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/UpdateWirelessGatewayTaskEntry.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.IoTWireless.Types.UpdateWirelessGatewayTaskEntry
+-- 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.IoTWireless.Types.UpdateWirelessGatewayTaskEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANUpdateGatewayTaskEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | UpdateWirelessGatewayTaskEntry object.
+--
+-- /See:/ 'newUpdateWirelessGatewayTaskEntry' smart constructor.
+data UpdateWirelessGatewayTaskEntry = UpdateWirelessGatewayTaskEntry'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the new wireless gateway task entry.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The properties that relate to the LoRaWAN wireless gateway.
+    loRaWAN :: Prelude.Maybe LoRaWANUpdateGatewayTaskEntry
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWirelessGatewayTaskEntry' 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', 'updateWirelessGatewayTaskEntry_arn' - The Amazon Resource Name of the resource.
+--
+-- 'id', 'updateWirelessGatewayTaskEntry_id' - The ID of the new wireless gateway task entry.
+--
+-- 'loRaWAN', 'updateWirelessGatewayTaskEntry_loRaWAN' - The properties that relate to the LoRaWAN wireless gateway.
+newUpdateWirelessGatewayTaskEntry ::
+  UpdateWirelessGatewayTaskEntry
+newUpdateWirelessGatewayTaskEntry =
+  UpdateWirelessGatewayTaskEntry'
+    { arn =
+        Prelude.Nothing,
+      id = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name of the resource.
+updateWirelessGatewayTaskEntry_arn :: Lens.Lens' UpdateWirelessGatewayTaskEntry (Prelude.Maybe Prelude.Text)
+updateWirelessGatewayTaskEntry_arn = Lens.lens (\UpdateWirelessGatewayTaskEntry' {arn} -> arn) (\s@UpdateWirelessGatewayTaskEntry' {} a -> s {arn = a} :: UpdateWirelessGatewayTaskEntry)
+
+-- | The ID of the new wireless gateway task entry.
+updateWirelessGatewayTaskEntry_id :: Lens.Lens' UpdateWirelessGatewayTaskEntry (Prelude.Maybe Prelude.Text)
+updateWirelessGatewayTaskEntry_id = Lens.lens (\UpdateWirelessGatewayTaskEntry' {id} -> id) (\s@UpdateWirelessGatewayTaskEntry' {} a -> s {id = a} :: UpdateWirelessGatewayTaskEntry)
+
+-- | The properties that relate to the LoRaWAN wireless gateway.
+updateWirelessGatewayTaskEntry_loRaWAN :: Lens.Lens' UpdateWirelessGatewayTaskEntry (Prelude.Maybe LoRaWANUpdateGatewayTaskEntry)
+updateWirelessGatewayTaskEntry_loRaWAN = Lens.lens (\UpdateWirelessGatewayTaskEntry' {loRaWAN} -> loRaWAN) (\s@UpdateWirelessGatewayTaskEntry' {} a -> s {loRaWAN = a} :: UpdateWirelessGatewayTaskEntry)
+
+instance Data.FromJSON UpdateWirelessGatewayTaskEntry where
+  parseJSON =
+    Data.withObject
+      "UpdateWirelessGatewayTaskEntry"
+      ( \x ->
+          UpdateWirelessGatewayTaskEntry'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LoRaWAN")
+      )
+
+instance
+  Prelude.Hashable
+    UpdateWirelessGatewayTaskEntry
+  where
+  hashWithSalt
+    _salt
+    UpdateWirelessGatewayTaskEntry' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` id
+        `Prelude.hashWithSalt` loRaWAN
+
+instance
+  Prelude.NFData
+    UpdateWirelessGatewayTaskEntry
+  where
+  rnf UpdateWirelessGatewayTaskEntry' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf loRaWAN
diff --git a/gen/Amazonka/IoTWireless/Types/WcdmaLocalId.hs b/gen/Amazonka/IoTWireless/Types/WcdmaLocalId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WcdmaLocalId.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.IoTWireless.Types.WcdmaLocalId
+-- 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.IoTWireless.Types.WcdmaLocalId 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
+
+-- | WCDMA local identification (local ID) information.
+--
+-- /See:/ 'newWcdmaLocalId' smart constructor.
+data WcdmaLocalId = WcdmaLocalId'
+  { -- | WCDMA UTRA Absolute RF Channel Number downlink.
+    uarfcndl :: Prelude.Natural,
+    -- | Primary Scrambling Code.
+    psc :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WcdmaLocalId' 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:
+--
+-- 'uarfcndl', 'wcdmaLocalId_uarfcndl' - WCDMA UTRA Absolute RF Channel Number downlink.
+--
+-- 'psc', 'wcdmaLocalId_psc' - Primary Scrambling Code.
+newWcdmaLocalId ::
+  -- | 'uarfcndl'
+  Prelude.Natural ->
+  -- | 'psc'
+  Prelude.Natural ->
+  WcdmaLocalId
+newWcdmaLocalId pUarfcndl_ pPsc_ =
+  WcdmaLocalId' {uarfcndl = pUarfcndl_, psc = pPsc_}
+
+-- | WCDMA UTRA Absolute RF Channel Number downlink.
+wcdmaLocalId_uarfcndl :: Lens.Lens' WcdmaLocalId Prelude.Natural
+wcdmaLocalId_uarfcndl = Lens.lens (\WcdmaLocalId' {uarfcndl} -> uarfcndl) (\s@WcdmaLocalId' {} a -> s {uarfcndl = a} :: WcdmaLocalId)
+
+-- | Primary Scrambling Code.
+wcdmaLocalId_psc :: Lens.Lens' WcdmaLocalId Prelude.Natural
+wcdmaLocalId_psc = Lens.lens (\WcdmaLocalId' {psc} -> psc) (\s@WcdmaLocalId' {} a -> s {psc = a} :: WcdmaLocalId)
+
+instance Prelude.Hashable WcdmaLocalId where
+  hashWithSalt _salt WcdmaLocalId' {..} =
+    _salt
+      `Prelude.hashWithSalt` uarfcndl
+      `Prelude.hashWithSalt` psc
+
+instance Prelude.NFData WcdmaLocalId where
+  rnf WcdmaLocalId' {..} =
+    Prelude.rnf uarfcndl `Prelude.seq` Prelude.rnf psc
+
+instance Data.ToJSON WcdmaLocalId where
+  toJSON WcdmaLocalId' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Uarfcndl" Data..= uarfcndl),
+            Prelude.Just ("Psc" Data..= psc)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/WcdmaNmrObj.hs b/gen/Amazonka/IoTWireless/Types/WcdmaNmrObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WcdmaNmrObj.hs
@@ -0,0 +1,128 @@
+{-# 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.IoTWireless.Types.WcdmaNmrObj
+-- 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.IoTWireless.Types.WcdmaNmrObj 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
+
+-- | Network Measurement Reports.
+--
+-- /See:/ 'newWcdmaNmrObj' smart constructor.
+data WcdmaNmrObj = WcdmaNmrObj'
+  { -- | Path loss, or path attenuation, is the reduction in power density of an
+    -- electromagnetic wave as it propagates through space.
+    pathLoss :: Prelude.Maybe Prelude.Natural,
+    -- | Received Signal Code Power (signal power) (dBm)
+    rscp :: Prelude.Maybe Prelude.Int,
+    -- | WCDMA UTRA Absolute RF Channel Number downlink.
+    uarfcndl :: Prelude.Natural,
+    -- | Primary Scrambling Code.
+    psc :: Prelude.Natural,
+    -- | UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+    utranCid :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WcdmaNmrObj' 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:
+--
+-- 'pathLoss', 'wcdmaNmrObj_pathLoss' - Path loss, or path attenuation, is the reduction in power density of an
+-- electromagnetic wave as it propagates through space.
+--
+-- 'rscp', 'wcdmaNmrObj_rscp' - Received Signal Code Power (signal power) (dBm)
+--
+-- 'uarfcndl', 'wcdmaNmrObj_uarfcndl' - WCDMA UTRA Absolute RF Channel Number downlink.
+--
+-- 'psc', 'wcdmaNmrObj_psc' - Primary Scrambling Code.
+--
+-- 'utranCid', 'wcdmaNmrObj_utranCid' - UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+newWcdmaNmrObj ::
+  -- | 'uarfcndl'
+  Prelude.Natural ->
+  -- | 'psc'
+  Prelude.Natural ->
+  -- | 'utranCid'
+  Prelude.Natural ->
+  WcdmaNmrObj
+newWcdmaNmrObj pUarfcndl_ pPsc_ pUtranCid_ =
+  WcdmaNmrObj'
+    { pathLoss = Prelude.Nothing,
+      rscp = Prelude.Nothing,
+      uarfcndl = pUarfcndl_,
+      psc = pPsc_,
+      utranCid = pUtranCid_
+    }
+
+-- | Path loss, or path attenuation, is the reduction in power density of an
+-- electromagnetic wave as it propagates through space.
+wcdmaNmrObj_pathLoss :: Lens.Lens' WcdmaNmrObj (Prelude.Maybe Prelude.Natural)
+wcdmaNmrObj_pathLoss = Lens.lens (\WcdmaNmrObj' {pathLoss} -> pathLoss) (\s@WcdmaNmrObj' {} a -> s {pathLoss = a} :: WcdmaNmrObj)
+
+-- | Received Signal Code Power (signal power) (dBm)
+wcdmaNmrObj_rscp :: Lens.Lens' WcdmaNmrObj (Prelude.Maybe Prelude.Int)
+wcdmaNmrObj_rscp = Lens.lens (\WcdmaNmrObj' {rscp} -> rscp) (\s@WcdmaNmrObj' {} a -> s {rscp = a} :: WcdmaNmrObj)
+
+-- | WCDMA UTRA Absolute RF Channel Number downlink.
+wcdmaNmrObj_uarfcndl :: Lens.Lens' WcdmaNmrObj Prelude.Natural
+wcdmaNmrObj_uarfcndl = Lens.lens (\WcdmaNmrObj' {uarfcndl} -> uarfcndl) (\s@WcdmaNmrObj' {} a -> s {uarfcndl = a} :: WcdmaNmrObj)
+
+-- | Primary Scrambling Code.
+wcdmaNmrObj_psc :: Lens.Lens' WcdmaNmrObj Prelude.Natural
+wcdmaNmrObj_psc = Lens.lens (\WcdmaNmrObj' {psc} -> psc) (\s@WcdmaNmrObj' {} a -> s {psc = a} :: WcdmaNmrObj)
+
+-- | UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+wcdmaNmrObj_utranCid :: Lens.Lens' WcdmaNmrObj Prelude.Natural
+wcdmaNmrObj_utranCid = Lens.lens (\WcdmaNmrObj' {utranCid} -> utranCid) (\s@WcdmaNmrObj' {} a -> s {utranCid = a} :: WcdmaNmrObj)
+
+instance Prelude.Hashable WcdmaNmrObj where
+  hashWithSalt _salt WcdmaNmrObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` pathLoss
+      `Prelude.hashWithSalt` rscp
+      `Prelude.hashWithSalt` uarfcndl
+      `Prelude.hashWithSalt` psc
+      `Prelude.hashWithSalt` utranCid
+
+instance Prelude.NFData WcdmaNmrObj where
+  rnf WcdmaNmrObj' {..} =
+    Prelude.rnf pathLoss
+      `Prelude.seq` Prelude.rnf rscp
+      `Prelude.seq` Prelude.rnf uarfcndl
+      `Prelude.seq` Prelude.rnf psc
+      `Prelude.seq` Prelude.rnf utranCid
+
+instance Data.ToJSON WcdmaNmrObj where
+  toJSON WcdmaNmrObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("PathLoss" Data..=) Prelude.<$> pathLoss,
+            ("Rscp" Data..=) Prelude.<$> rscp,
+            Prelude.Just ("Uarfcndl" Data..= uarfcndl),
+            Prelude.Just ("Psc" Data..= psc),
+            Prelude.Just ("UtranCid" Data..= utranCid)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/WcdmaObj.hs b/gen/Amazonka/IoTWireless/Types/WcdmaObj.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WcdmaObj.hs
@@ -0,0 +1,166 @@
+{-# 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.IoTWireless.Types.WcdmaObj
+-- 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.IoTWireless.Types.WcdmaObj where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.WcdmaLocalId
+import Amazonka.IoTWireless.Types.WcdmaNmrObj
+import qualified Amazonka.Prelude as Prelude
+
+-- | WCDMA.
+--
+-- /See:/ 'newWcdmaObj' smart constructor.
+data WcdmaObj = WcdmaObj'
+  { -- | Location Area Code.
+    lac :: Prelude.Maybe Prelude.Natural,
+    -- | Path loss, or path attenuation, is the reduction in power density of an
+    -- electromagnetic wave as it propagates through space.
+    pathLoss :: Prelude.Maybe Prelude.Natural,
+    -- | Received Signal Code Power (signal power) (dBm).
+    rscp :: Prelude.Maybe Prelude.Int,
+    -- | WCDMA local ID information.
+    wcdmaLocalId :: Prelude.Maybe WcdmaLocalId,
+    -- | WCDMA object for network measurement reports.
+    wcdmaNmr :: Prelude.Maybe (Prelude.NonEmpty WcdmaNmrObj),
+    -- | Mobile Country Code.
+    mcc :: Prelude.Natural,
+    -- | Mobile Network Code.
+    mnc :: Prelude.Natural,
+    -- | UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+    utranCid :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WcdmaObj' 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:
+--
+-- 'lac', 'wcdmaObj_lac' - Location Area Code.
+--
+-- 'pathLoss', 'wcdmaObj_pathLoss' - Path loss, or path attenuation, is the reduction in power density of an
+-- electromagnetic wave as it propagates through space.
+--
+-- 'rscp', 'wcdmaObj_rscp' - Received Signal Code Power (signal power) (dBm).
+--
+-- 'wcdmaLocalId', 'wcdmaObj_wcdmaLocalId' - WCDMA local ID information.
+--
+-- 'wcdmaNmr', 'wcdmaObj_wcdmaNmr' - WCDMA object for network measurement reports.
+--
+-- 'mcc', 'wcdmaObj_mcc' - Mobile Country Code.
+--
+-- 'mnc', 'wcdmaObj_mnc' - Mobile Network Code.
+--
+-- 'utranCid', 'wcdmaObj_utranCid' - UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+newWcdmaObj ::
+  -- | 'mcc'
+  Prelude.Natural ->
+  -- | 'mnc'
+  Prelude.Natural ->
+  -- | 'utranCid'
+  Prelude.Natural ->
+  WcdmaObj
+newWcdmaObj pMcc_ pMnc_ pUtranCid_ =
+  WcdmaObj'
+    { lac = Prelude.Nothing,
+      pathLoss = Prelude.Nothing,
+      rscp = Prelude.Nothing,
+      wcdmaLocalId = Prelude.Nothing,
+      wcdmaNmr = Prelude.Nothing,
+      mcc = pMcc_,
+      mnc = pMnc_,
+      utranCid = pUtranCid_
+    }
+
+-- | Location Area Code.
+wcdmaObj_lac :: Lens.Lens' WcdmaObj (Prelude.Maybe Prelude.Natural)
+wcdmaObj_lac = Lens.lens (\WcdmaObj' {lac} -> lac) (\s@WcdmaObj' {} a -> s {lac = a} :: WcdmaObj)
+
+-- | Path loss, or path attenuation, is the reduction in power density of an
+-- electromagnetic wave as it propagates through space.
+wcdmaObj_pathLoss :: Lens.Lens' WcdmaObj (Prelude.Maybe Prelude.Natural)
+wcdmaObj_pathLoss = Lens.lens (\WcdmaObj' {pathLoss} -> pathLoss) (\s@WcdmaObj' {} a -> s {pathLoss = a} :: WcdmaObj)
+
+-- | Received Signal Code Power (signal power) (dBm).
+wcdmaObj_rscp :: Lens.Lens' WcdmaObj (Prelude.Maybe Prelude.Int)
+wcdmaObj_rscp = Lens.lens (\WcdmaObj' {rscp} -> rscp) (\s@WcdmaObj' {} a -> s {rscp = a} :: WcdmaObj)
+
+-- | WCDMA local ID information.
+wcdmaObj_wcdmaLocalId :: Lens.Lens' WcdmaObj (Prelude.Maybe WcdmaLocalId)
+wcdmaObj_wcdmaLocalId = Lens.lens (\WcdmaObj' {wcdmaLocalId} -> wcdmaLocalId) (\s@WcdmaObj' {} a -> s {wcdmaLocalId = a} :: WcdmaObj)
+
+-- | WCDMA object for network measurement reports.
+wcdmaObj_wcdmaNmr :: Lens.Lens' WcdmaObj (Prelude.Maybe (Prelude.NonEmpty WcdmaNmrObj))
+wcdmaObj_wcdmaNmr = Lens.lens (\WcdmaObj' {wcdmaNmr} -> wcdmaNmr) (\s@WcdmaObj' {} a -> s {wcdmaNmr = a} :: WcdmaObj) Prelude.. Lens.mapping Lens.coerced
+
+-- | Mobile Country Code.
+wcdmaObj_mcc :: Lens.Lens' WcdmaObj Prelude.Natural
+wcdmaObj_mcc = Lens.lens (\WcdmaObj' {mcc} -> mcc) (\s@WcdmaObj' {} a -> s {mcc = a} :: WcdmaObj)
+
+-- | Mobile Network Code.
+wcdmaObj_mnc :: Lens.Lens' WcdmaObj Prelude.Natural
+wcdmaObj_mnc = Lens.lens (\WcdmaObj' {mnc} -> mnc) (\s@WcdmaObj' {} a -> s {mnc = a} :: WcdmaObj)
+
+-- | UTRAN (UMTS Terrestrial Radio Access Network) Cell Global Identifier.
+wcdmaObj_utranCid :: Lens.Lens' WcdmaObj Prelude.Natural
+wcdmaObj_utranCid = Lens.lens (\WcdmaObj' {utranCid} -> utranCid) (\s@WcdmaObj' {} a -> s {utranCid = a} :: WcdmaObj)
+
+instance Prelude.Hashable WcdmaObj where
+  hashWithSalt _salt WcdmaObj' {..} =
+    _salt
+      `Prelude.hashWithSalt` lac
+      `Prelude.hashWithSalt` pathLoss
+      `Prelude.hashWithSalt` rscp
+      `Prelude.hashWithSalt` wcdmaLocalId
+      `Prelude.hashWithSalt` wcdmaNmr
+      `Prelude.hashWithSalt` mcc
+      `Prelude.hashWithSalt` mnc
+      `Prelude.hashWithSalt` utranCid
+
+instance Prelude.NFData WcdmaObj where
+  rnf WcdmaObj' {..} =
+    Prelude.rnf lac
+      `Prelude.seq` Prelude.rnf pathLoss
+      `Prelude.seq` Prelude.rnf rscp
+      `Prelude.seq` Prelude.rnf wcdmaLocalId
+      `Prelude.seq` Prelude.rnf wcdmaNmr
+      `Prelude.seq` Prelude.rnf mcc
+      `Prelude.seq` Prelude.rnf mnc
+      `Prelude.seq` Prelude.rnf utranCid
+
+instance Data.ToJSON WcdmaObj where
+  toJSON WcdmaObj' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Lac" Data..=) Prelude.<$> lac,
+            ("PathLoss" Data..=) Prelude.<$> pathLoss,
+            ("Rscp" Data..=) Prelude.<$> rscp,
+            ("WcdmaLocalId" Data..=) Prelude.<$> wcdmaLocalId,
+            ("WcdmaNmr" Data..=) Prelude.<$> wcdmaNmr,
+            Prelude.Just ("Mcc" Data..= mcc),
+            Prelude.Just ("Mnc" Data..= mnc),
+            Prelude.Just ("UtranCid" Data..= utranCid)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/WiFiAccessPoint.hs b/gen/Amazonka/IoTWireless/Types/WiFiAccessPoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WiFiAccessPoint.hs
@@ -0,0 +1,87 @@
+{-# 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.IoTWireless.Types.WiFiAccessPoint
+-- 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.IoTWireless.Types.WiFiAccessPoint 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
+
+-- | Wi-Fi access point.
+--
+-- /See:/ 'newWiFiAccessPoint' smart constructor.
+data WiFiAccessPoint = WiFiAccessPoint'
+  { -- | Wi-Fi MAC Address.
+    macAddress :: Prelude.Text,
+    -- | Recived signal strength of the WLAN measurement data.
+    rss :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WiFiAccessPoint' 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:
+--
+-- 'macAddress', 'wiFiAccessPoint_macAddress' - Wi-Fi MAC Address.
+--
+-- 'rss', 'wiFiAccessPoint_rss' - Recived signal strength of the WLAN measurement data.
+newWiFiAccessPoint ::
+  -- | 'macAddress'
+  Prelude.Text ->
+  -- | 'rss'
+  Prelude.Int ->
+  WiFiAccessPoint
+newWiFiAccessPoint pMacAddress_ pRss_ =
+  WiFiAccessPoint'
+    { macAddress = pMacAddress_,
+      rss = pRss_
+    }
+
+-- | Wi-Fi MAC Address.
+wiFiAccessPoint_macAddress :: Lens.Lens' WiFiAccessPoint Prelude.Text
+wiFiAccessPoint_macAddress = Lens.lens (\WiFiAccessPoint' {macAddress} -> macAddress) (\s@WiFiAccessPoint' {} a -> s {macAddress = a} :: WiFiAccessPoint)
+
+-- | Recived signal strength of the WLAN measurement data.
+wiFiAccessPoint_rss :: Lens.Lens' WiFiAccessPoint Prelude.Int
+wiFiAccessPoint_rss = Lens.lens (\WiFiAccessPoint' {rss} -> rss) (\s@WiFiAccessPoint' {} a -> s {rss = a} :: WiFiAccessPoint)
+
+instance Prelude.Hashable WiFiAccessPoint where
+  hashWithSalt _salt WiFiAccessPoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` macAddress
+      `Prelude.hashWithSalt` rss
+
+instance Prelude.NFData WiFiAccessPoint where
+  rnf WiFiAccessPoint' {..} =
+    Prelude.rnf macAddress
+      `Prelude.seq` Prelude.rnf rss
+
+instance Data.ToJSON WiFiAccessPoint where
+  toJSON WiFiAccessPoint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("MacAddress" Data..= macAddress),
+            Prelude.Just ("Rss" Data..= rss)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessDeviceEvent.hs b/gen/Amazonka/IoTWireless/Types/WirelessDeviceEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessDeviceEvent.hs
@@ -0,0 +1,88 @@
+{-# 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.IoTWireless.Types.WirelessDeviceEvent
+-- 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.IoTWireless.Types.WirelessDeviceEvent
+  ( WirelessDeviceEvent
+      ( ..,
+        WirelessDeviceEvent_Downlink_Data,
+        WirelessDeviceEvent_Join,
+        WirelessDeviceEvent_Registration,
+        WirelessDeviceEvent_Rejoin,
+        WirelessDeviceEvent_Uplink_Data
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The event for a log message, if the log message is tied to a wireless
+-- device.
+newtype WirelessDeviceEvent = WirelessDeviceEvent'
+  { fromWirelessDeviceEvent ::
+      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 WirelessDeviceEvent_Downlink_Data :: WirelessDeviceEvent
+pattern WirelessDeviceEvent_Downlink_Data = WirelessDeviceEvent' "Downlink_Data"
+
+pattern WirelessDeviceEvent_Join :: WirelessDeviceEvent
+pattern WirelessDeviceEvent_Join = WirelessDeviceEvent' "Join"
+
+pattern WirelessDeviceEvent_Registration :: WirelessDeviceEvent
+pattern WirelessDeviceEvent_Registration = WirelessDeviceEvent' "Registration"
+
+pattern WirelessDeviceEvent_Rejoin :: WirelessDeviceEvent
+pattern WirelessDeviceEvent_Rejoin = WirelessDeviceEvent' "Rejoin"
+
+pattern WirelessDeviceEvent_Uplink_Data :: WirelessDeviceEvent
+pattern WirelessDeviceEvent_Uplink_Data = WirelessDeviceEvent' "Uplink_Data"
+
+{-# COMPLETE
+  WirelessDeviceEvent_Downlink_Data,
+  WirelessDeviceEvent_Join,
+  WirelessDeviceEvent_Registration,
+  WirelessDeviceEvent_Rejoin,
+  WirelessDeviceEvent_Uplink_Data,
+  WirelessDeviceEvent'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessDeviceEventLogOption.hs b/gen/Amazonka/IoTWireless/Types/WirelessDeviceEventLogOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessDeviceEventLogOption.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.IoTWireless.Types.WirelessDeviceEventLogOption
+-- 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.IoTWireless.Types.WirelessDeviceEventLogOption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LogLevel
+import Amazonka.IoTWireless.Types.WirelessDeviceEvent
+import qualified Amazonka.Prelude as Prelude
+
+-- | The log options for a wireless device event and can be used to set log
+-- levels for a specific wireless device event.
+--
+-- For a LoRaWAN device, possible events for a log messsage are: @Join@,
+-- @Rejoin@, @Downlink_Data@, and @Uplink_Data@. For a Sidewalk device,
+-- possible events for a log message are @Registration@, @Downlink_Data@,
+-- and @Uplink_Data@.
+--
+-- /See:/ 'newWirelessDeviceEventLogOption' smart constructor.
+data WirelessDeviceEventLogOption = WirelessDeviceEventLogOption'
+  { event :: WirelessDeviceEvent,
+    logLevel :: LogLevel
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WirelessDeviceEventLogOption' 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:
+--
+-- 'event', 'wirelessDeviceEventLogOption_event' - Undocumented member.
+--
+-- 'logLevel', 'wirelessDeviceEventLogOption_logLevel' - Undocumented member.
+newWirelessDeviceEventLogOption ::
+  -- | 'event'
+  WirelessDeviceEvent ->
+  -- | 'logLevel'
+  LogLevel ->
+  WirelessDeviceEventLogOption
+newWirelessDeviceEventLogOption pEvent_ pLogLevel_ =
+  WirelessDeviceEventLogOption'
+    { event = pEvent_,
+      logLevel = pLogLevel_
+    }
+
+-- | Undocumented member.
+wirelessDeviceEventLogOption_event :: Lens.Lens' WirelessDeviceEventLogOption WirelessDeviceEvent
+wirelessDeviceEventLogOption_event = Lens.lens (\WirelessDeviceEventLogOption' {event} -> event) (\s@WirelessDeviceEventLogOption' {} a -> s {event = a} :: WirelessDeviceEventLogOption)
+
+-- | Undocumented member.
+wirelessDeviceEventLogOption_logLevel :: Lens.Lens' WirelessDeviceEventLogOption LogLevel
+wirelessDeviceEventLogOption_logLevel = Lens.lens (\WirelessDeviceEventLogOption' {logLevel} -> logLevel) (\s@WirelessDeviceEventLogOption' {} a -> s {logLevel = a} :: WirelessDeviceEventLogOption)
+
+instance Data.FromJSON WirelessDeviceEventLogOption where
+  parseJSON =
+    Data.withObject
+      "WirelessDeviceEventLogOption"
+      ( \x ->
+          WirelessDeviceEventLogOption'
+            Prelude.<$> (x Data..: "Event")
+            Prelude.<*> (x Data..: "LogLevel")
+      )
+
+instance
+  Prelude.Hashable
+    WirelessDeviceEventLogOption
+  where
+  hashWithSalt _salt WirelessDeviceEventLogOption' {..} =
+    _salt
+      `Prelude.hashWithSalt` event
+      `Prelude.hashWithSalt` logLevel
+
+instance Prelude.NFData WirelessDeviceEventLogOption where
+  rnf WirelessDeviceEventLogOption' {..} =
+    Prelude.rnf event
+      `Prelude.seq` Prelude.rnf logLevel
+
+instance Data.ToJSON WirelessDeviceEventLogOption where
+  toJSON WirelessDeviceEventLogOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Event" Data..= event),
+            Prelude.Just ("LogLevel" Data..= logLevel)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessDeviceFrameInfo.hs b/gen/Amazonka/IoTWireless/Types/WirelessDeviceFrameInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessDeviceFrameInfo.hs
@@ -0,0 +1,74 @@
+{-# 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.IoTWireless.Types.WirelessDeviceFrameInfo
+-- 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.IoTWireless.Types.WirelessDeviceFrameInfo
+  ( WirelessDeviceFrameInfo
+      ( ..,
+        WirelessDeviceFrameInfo_DISABLED,
+        WirelessDeviceFrameInfo_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | @FrameInfo@ of your wireless device resources for the trace content. Use
+-- FrameInfo to debug the communication between your LoRaWAN end devices
+-- and the network server.
+newtype WirelessDeviceFrameInfo = WirelessDeviceFrameInfo'
+  { fromWirelessDeviceFrameInfo ::
+      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 WirelessDeviceFrameInfo_DISABLED :: WirelessDeviceFrameInfo
+pattern WirelessDeviceFrameInfo_DISABLED = WirelessDeviceFrameInfo' "DISABLED"
+
+pattern WirelessDeviceFrameInfo_ENABLED :: WirelessDeviceFrameInfo
+pattern WirelessDeviceFrameInfo_ENABLED = WirelessDeviceFrameInfo' "ENABLED"
+
+{-# COMPLETE
+  WirelessDeviceFrameInfo_DISABLED,
+  WirelessDeviceFrameInfo_ENABLED,
+  WirelessDeviceFrameInfo'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessDeviceIdType.hs b/gen/Amazonka/IoTWireless/Types/WirelessDeviceIdType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessDeviceIdType.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.IoTWireless.Types.WirelessDeviceIdType
+-- 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.IoTWireless.Types.WirelessDeviceIdType
+  ( WirelessDeviceIdType
+      ( ..,
+        WirelessDeviceIdType_DevEui,
+        WirelessDeviceIdType_SidewalkManufacturingSn,
+        WirelessDeviceIdType_ThingName,
+        WirelessDeviceIdType_WirelessDeviceId
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WirelessDeviceIdType = WirelessDeviceIdType'
+  { fromWirelessDeviceIdType ::
+      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 WirelessDeviceIdType_DevEui :: WirelessDeviceIdType
+pattern WirelessDeviceIdType_DevEui = WirelessDeviceIdType' "DevEui"
+
+pattern WirelessDeviceIdType_SidewalkManufacturingSn :: WirelessDeviceIdType
+pattern WirelessDeviceIdType_SidewalkManufacturingSn = WirelessDeviceIdType' "SidewalkManufacturingSn"
+
+pattern WirelessDeviceIdType_ThingName :: WirelessDeviceIdType
+pattern WirelessDeviceIdType_ThingName = WirelessDeviceIdType' "ThingName"
+
+pattern WirelessDeviceIdType_WirelessDeviceId :: WirelessDeviceIdType
+pattern WirelessDeviceIdType_WirelessDeviceId = WirelessDeviceIdType' "WirelessDeviceId"
+
+{-# COMPLETE
+  WirelessDeviceIdType_DevEui,
+  WirelessDeviceIdType_SidewalkManufacturingSn,
+  WirelessDeviceIdType_ThingName,
+  WirelessDeviceIdType_WirelessDeviceId,
+  WirelessDeviceIdType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessDeviceLogOption.hs b/gen/Amazonka/IoTWireless/Types/WirelessDeviceLogOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessDeviceLogOption.hs
@@ -0,0 +1,112 @@
+{-# 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.IoTWireless.Types.WirelessDeviceLogOption
+-- 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.IoTWireless.Types.WirelessDeviceLogOption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LogLevel
+import Amazonka.IoTWireless.Types.WirelessDeviceEventLogOption
+import Amazonka.IoTWireless.Types.WirelessDeviceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The log options for wireless devices and can be used to set log levels
+-- for a specific type of wireless device.
+--
+-- /See:/ 'newWirelessDeviceLogOption' smart constructor.
+data WirelessDeviceLogOption = WirelessDeviceLogOption'
+  { events :: Prelude.Maybe [WirelessDeviceEventLogOption],
+    -- | The wireless device type.
+    type' :: WirelessDeviceType,
+    logLevel :: LogLevel
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WirelessDeviceLogOption' 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:
+--
+-- 'events', 'wirelessDeviceLogOption_events' - Undocumented member.
+--
+-- 'type'', 'wirelessDeviceLogOption_type' - The wireless device type.
+--
+-- 'logLevel', 'wirelessDeviceLogOption_logLevel' - Undocumented member.
+newWirelessDeviceLogOption ::
+  -- | 'type''
+  WirelessDeviceType ->
+  -- | 'logLevel'
+  LogLevel ->
+  WirelessDeviceLogOption
+newWirelessDeviceLogOption pType_ pLogLevel_ =
+  WirelessDeviceLogOption'
+    { events = Prelude.Nothing,
+      type' = pType_,
+      logLevel = pLogLevel_
+    }
+
+-- | Undocumented member.
+wirelessDeviceLogOption_events :: Lens.Lens' WirelessDeviceLogOption (Prelude.Maybe [WirelessDeviceEventLogOption])
+wirelessDeviceLogOption_events = Lens.lens (\WirelessDeviceLogOption' {events} -> events) (\s@WirelessDeviceLogOption' {} a -> s {events = a} :: WirelessDeviceLogOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | The wireless device type.
+wirelessDeviceLogOption_type :: Lens.Lens' WirelessDeviceLogOption WirelessDeviceType
+wirelessDeviceLogOption_type = Lens.lens (\WirelessDeviceLogOption' {type'} -> type') (\s@WirelessDeviceLogOption' {} a -> s {type' = a} :: WirelessDeviceLogOption)
+
+-- | Undocumented member.
+wirelessDeviceLogOption_logLevel :: Lens.Lens' WirelessDeviceLogOption LogLevel
+wirelessDeviceLogOption_logLevel = Lens.lens (\WirelessDeviceLogOption' {logLevel} -> logLevel) (\s@WirelessDeviceLogOption' {} a -> s {logLevel = a} :: WirelessDeviceLogOption)
+
+instance Data.FromJSON WirelessDeviceLogOption where
+  parseJSON =
+    Data.withObject
+      "WirelessDeviceLogOption"
+      ( \x ->
+          WirelessDeviceLogOption'
+            Prelude.<$> (x Data..:? "Events" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Type")
+            Prelude.<*> (x Data..: "LogLevel")
+      )
+
+instance Prelude.Hashable WirelessDeviceLogOption where
+  hashWithSalt _salt WirelessDeviceLogOption' {..} =
+    _salt
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` logLevel
+
+instance Prelude.NFData WirelessDeviceLogOption where
+  rnf WirelessDeviceLogOption' {..} =
+    Prelude.rnf events
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf logLevel
+
+instance Data.ToJSON WirelessDeviceLogOption where
+  toJSON WirelessDeviceLogOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Events" Data..=) Prelude.<$> events,
+            Prelude.Just ("Type" Data..= type'),
+            Prelude.Just ("LogLevel" Data..= logLevel)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessDeviceStatistics.hs b/gen/Amazonka/IoTWireless/Types/WirelessDeviceStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessDeviceStatistics.hs
@@ -0,0 +1,194 @@
+{-# 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.IoTWireless.Types.WirelessDeviceStatistics
+-- 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.IoTWireless.Types.WirelessDeviceStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.FuotaDeviceStatus
+import Amazonka.IoTWireless.Types.LoRaWANListDevice
+import Amazonka.IoTWireless.Types.SidewalkListDevice
+import Amazonka.IoTWireless.Types.WirelessDeviceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a wireless device\'s operation.
+--
+-- /See:/ 'newWirelessDeviceStatistics' smart constructor.
+data WirelessDeviceStatistics = WirelessDeviceStatistics'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the destination to which the device is assigned.
+    destinationName :: Prelude.Maybe Prelude.Text,
+    fuotaDeviceStatus :: Prelude.Maybe FuotaDeviceStatus,
+    -- | The ID of the wireless device reporting the data.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the most recent uplink was received.
+    lastUplinkReceivedAt :: Prelude.Maybe Prelude.Text,
+    -- | LoRaWAN device info.
+    loRaWAN :: Prelude.Maybe LoRaWANListDevice,
+    mcGroupId :: Prelude.Maybe Prelude.Natural,
+    -- | The status of the wireless device in the multicast group.
+    multicastDeviceStatus :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The Sidewalk account credentials.
+    sidewalk :: Prelude.Maybe SidewalkListDevice,
+    -- | The wireless device type.
+    type' :: Prelude.Maybe WirelessDeviceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WirelessDeviceStatistics' 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', 'wirelessDeviceStatistics_arn' - The Amazon Resource Name of the resource.
+--
+-- 'destinationName', 'wirelessDeviceStatistics_destinationName' - The name of the destination to which the device is assigned.
+--
+-- 'fuotaDeviceStatus', 'wirelessDeviceStatistics_fuotaDeviceStatus' - Undocumented member.
+--
+-- 'id', 'wirelessDeviceStatistics_id' - The ID of the wireless device reporting the data.
+--
+-- 'lastUplinkReceivedAt', 'wirelessDeviceStatistics_lastUplinkReceivedAt' - The date and time when the most recent uplink was received.
+--
+-- 'loRaWAN', 'wirelessDeviceStatistics_loRaWAN' - LoRaWAN device info.
+--
+-- 'mcGroupId', 'wirelessDeviceStatistics_mcGroupId' - Undocumented member.
+--
+-- 'multicastDeviceStatus', 'wirelessDeviceStatistics_multicastDeviceStatus' - The status of the wireless device in the multicast group.
+--
+-- 'name', 'wirelessDeviceStatistics_name' - The name of the resource.
+--
+-- 'sidewalk', 'wirelessDeviceStatistics_sidewalk' - The Sidewalk account credentials.
+--
+-- 'type'', 'wirelessDeviceStatistics_type' - The wireless device type.
+newWirelessDeviceStatistics ::
+  WirelessDeviceStatistics
+newWirelessDeviceStatistics =
+  WirelessDeviceStatistics'
+    { arn = Prelude.Nothing,
+      destinationName = Prelude.Nothing,
+      fuotaDeviceStatus = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUplinkReceivedAt = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      mcGroupId = Prelude.Nothing,
+      multicastDeviceStatus = Prelude.Nothing,
+      name = Prelude.Nothing,
+      sidewalk = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name of the resource.
+wirelessDeviceStatistics_arn :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe Prelude.Text)
+wirelessDeviceStatistics_arn = Lens.lens (\WirelessDeviceStatistics' {arn} -> arn) (\s@WirelessDeviceStatistics' {} a -> s {arn = a} :: WirelessDeviceStatistics)
+
+-- | The name of the destination to which the device is assigned.
+wirelessDeviceStatistics_destinationName :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe Prelude.Text)
+wirelessDeviceStatistics_destinationName = Lens.lens (\WirelessDeviceStatistics' {destinationName} -> destinationName) (\s@WirelessDeviceStatistics' {} a -> s {destinationName = a} :: WirelessDeviceStatistics)
+
+-- | Undocumented member.
+wirelessDeviceStatistics_fuotaDeviceStatus :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe FuotaDeviceStatus)
+wirelessDeviceStatistics_fuotaDeviceStatus = Lens.lens (\WirelessDeviceStatistics' {fuotaDeviceStatus} -> fuotaDeviceStatus) (\s@WirelessDeviceStatistics' {} a -> s {fuotaDeviceStatus = a} :: WirelessDeviceStatistics)
+
+-- | The ID of the wireless device reporting the data.
+wirelessDeviceStatistics_id :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe Prelude.Text)
+wirelessDeviceStatistics_id = Lens.lens (\WirelessDeviceStatistics' {id} -> id) (\s@WirelessDeviceStatistics' {} a -> s {id = a} :: WirelessDeviceStatistics)
+
+-- | The date and time when the most recent uplink was received.
+wirelessDeviceStatistics_lastUplinkReceivedAt :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe Prelude.Text)
+wirelessDeviceStatistics_lastUplinkReceivedAt = Lens.lens (\WirelessDeviceStatistics' {lastUplinkReceivedAt} -> lastUplinkReceivedAt) (\s@WirelessDeviceStatistics' {} a -> s {lastUplinkReceivedAt = a} :: WirelessDeviceStatistics)
+
+-- | LoRaWAN device info.
+wirelessDeviceStatistics_loRaWAN :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe LoRaWANListDevice)
+wirelessDeviceStatistics_loRaWAN = Lens.lens (\WirelessDeviceStatistics' {loRaWAN} -> loRaWAN) (\s@WirelessDeviceStatistics' {} a -> s {loRaWAN = a} :: WirelessDeviceStatistics)
+
+-- | Undocumented member.
+wirelessDeviceStatistics_mcGroupId :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe Prelude.Natural)
+wirelessDeviceStatistics_mcGroupId = Lens.lens (\WirelessDeviceStatistics' {mcGroupId} -> mcGroupId) (\s@WirelessDeviceStatistics' {} a -> s {mcGroupId = a} :: WirelessDeviceStatistics)
+
+-- | The status of the wireless device in the multicast group.
+wirelessDeviceStatistics_multicastDeviceStatus :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe Prelude.Text)
+wirelessDeviceStatistics_multicastDeviceStatus = Lens.lens (\WirelessDeviceStatistics' {multicastDeviceStatus} -> multicastDeviceStatus) (\s@WirelessDeviceStatistics' {} a -> s {multicastDeviceStatus = a} :: WirelessDeviceStatistics)
+
+-- | The name of the resource.
+wirelessDeviceStatistics_name :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe Prelude.Text)
+wirelessDeviceStatistics_name = Lens.lens (\WirelessDeviceStatistics' {name} -> name) (\s@WirelessDeviceStatistics' {} a -> s {name = a} :: WirelessDeviceStatistics)
+
+-- | The Sidewalk account credentials.
+wirelessDeviceStatistics_sidewalk :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe SidewalkListDevice)
+wirelessDeviceStatistics_sidewalk = Lens.lens (\WirelessDeviceStatistics' {sidewalk} -> sidewalk) (\s@WirelessDeviceStatistics' {} a -> s {sidewalk = a} :: WirelessDeviceStatistics)
+
+-- | The wireless device type.
+wirelessDeviceStatistics_type :: Lens.Lens' WirelessDeviceStatistics (Prelude.Maybe WirelessDeviceType)
+wirelessDeviceStatistics_type = Lens.lens (\WirelessDeviceStatistics' {type'} -> type') (\s@WirelessDeviceStatistics' {} a -> s {type' = a} :: WirelessDeviceStatistics)
+
+instance Data.FromJSON WirelessDeviceStatistics where
+  parseJSON =
+    Data.withObject
+      "WirelessDeviceStatistics"
+      ( \x ->
+          WirelessDeviceStatistics'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "DestinationName")
+            Prelude.<*> (x Data..:? "FuotaDeviceStatus")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LastUplinkReceivedAt")
+            Prelude.<*> (x Data..:? "LoRaWAN")
+            Prelude.<*> (x Data..:? "McGroupId")
+            Prelude.<*> (x Data..:? "MulticastDeviceStatus")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Sidewalk")
+            Prelude.<*> (x Data..:? "Type")
+      )
+
+instance Prelude.Hashable WirelessDeviceStatistics where
+  hashWithSalt _salt WirelessDeviceStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` destinationName
+      `Prelude.hashWithSalt` fuotaDeviceStatus
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastUplinkReceivedAt
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` mcGroupId
+      `Prelude.hashWithSalt` multicastDeviceStatus
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sidewalk
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData WirelessDeviceStatistics where
+  rnf WirelessDeviceStatistics' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf destinationName
+      `Prelude.seq` Prelude.rnf fuotaDeviceStatus
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUplinkReceivedAt
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf mcGroupId
+      `Prelude.seq` Prelude.rnf multicastDeviceStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessDeviceType.hs b/gen/Amazonka/IoTWireless/Types/WirelessDeviceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessDeviceType.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.IoTWireless.Types.WirelessDeviceType
+-- 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.IoTWireless.Types.WirelessDeviceType
+  ( WirelessDeviceType
+      ( ..,
+        WirelessDeviceType_LoRaWAN,
+        WirelessDeviceType_Sidewalk
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WirelessDeviceType = WirelessDeviceType'
+  { fromWirelessDeviceType ::
+      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 WirelessDeviceType_LoRaWAN :: WirelessDeviceType
+pattern WirelessDeviceType_LoRaWAN = WirelessDeviceType' "LoRaWAN"
+
+pattern WirelessDeviceType_Sidewalk :: WirelessDeviceType
+pattern WirelessDeviceType_Sidewalk = WirelessDeviceType' "Sidewalk"
+
+{-# COMPLETE
+  WirelessDeviceType_LoRaWAN,
+  WirelessDeviceType_Sidewalk,
+  WirelessDeviceType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayEvent.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayEvent.hs
@@ -0,0 +1,73 @@
+{-# 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.IoTWireless.Types.WirelessGatewayEvent
+-- 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.IoTWireless.Types.WirelessGatewayEvent
+  ( WirelessGatewayEvent
+      ( ..,
+        WirelessGatewayEvent_CUPS_Request,
+        WirelessGatewayEvent_Certificate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The event for a log message, if the log message is tied to a wireless
+-- gateway.
+newtype WirelessGatewayEvent = WirelessGatewayEvent'
+  { fromWirelessGatewayEvent ::
+      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 WirelessGatewayEvent_CUPS_Request :: WirelessGatewayEvent
+pattern WirelessGatewayEvent_CUPS_Request = WirelessGatewayEvent' "CUPS_Request"
+
+pattern WirelessGatewayEvent_Certificate :: WirelessGatewayEvent
+pattern WirelessGatewayEvent_Certificate = WirelessGatewayEvent' "Certificate"
+
+{-# COMPLETE
+  WirelessGatewayEvent_CUPS_Request,
+  WirelessGatewayEvent_Certificate,
+  WirelessGatewayEvent'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayEventLogOption.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayEventLogOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayEventLogOption.hs
@@ -0,0 +1,104 @@
+{-# 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.IoTWireless.Types.WirelessGatewayEventLogOption
+-- 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.IoTWireless.Types.WirelessGatewayEventLogOption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LogLevel
+import Amazonka.IoTWireless.Types.WirelessGatewayEvent
+import qualified Amazonka.Prelude as Prelude
+
+-- | The log options for a wireless gateway event and can be used to set log
+-- levels for a specific wireless gateway event.
+--
+-- For a LoRaWAN gateway, possible events for a log message are
+-- @CUPS_Request@ and @Certificate@.
+--
+-- /See:/ 'newWirelessGatewayEventLogOption' smart constructor.
+data WirelessGatewayEventLogOption = WirelessGatewayEventLogOption'
+  { event :: WirelessGatewayEvent,
+    logLevel :: LogLevel
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WirelessGatewayEventLogOption' 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:
+--
+-- 'event', 'wirelessGatewayEventLogOption_event' - Undocumented member.
+--
+-- 'logLevel', 'wirelessGatewayEventLogOption_logLevel' - Undocumented member.
+newWirelessGatewayEventLogOption ::
+  -- | 'event'
+  WirelessGatewayEvent ->
+  -- | 'logLevel'
+  LogLevel ->
+  WirelessGatewayEventLogOption
+newWirelessGatewayEventLogOption pEvent_ pLogLevel_ =
+  WirelessGatewayEventLogOption'
+    { event = pEvent_,
+      logLevel = pLogLevel_
+    }
+
+-- | Undocumented member.
+wirelessGatewayEventLogOption_event :: Lens.Lens' WirelessGatewayEventLogOption WirelessGatewayEvent
+wirelessGatewayEventLogOption_event = Lens.lens (\WirelessGatewayEventLogOption' {event} -> event) (\s@WirelessGatewayEventLogOption' {} a -> s {event = a} :: WirelessGatewayEventLogOption)
+
+-- | Undocumented member.
+wirelessGatewayEventLogOption_logLevel :: Lens.Lens' WirelessGatewayEventLogOption LogLevel
+wirelessGatewayEventLogOption_logLevel = Lens.lens (\WirelessGatewayEventLogOption' {logLevel} -> logLevel) (\s@WirelessGatewayEventLogOption' {} a -> s {logLevel = a} :: WirelessGatewayEventLogOption)
+
+instance Data.FromJSON WirelessGatewayEventLogOption where
+  parseJSON =
+    Data.withObject
+      "WirelessGatewayEventLogOption"
+      ( \x ->
+          WirelessGatewayEventLogOption'
+            Prelude.<$> (x Data..: "Event")
+            Prelude.<*> (x Data..: "LogLevel")
+      )
+
+instance
+  Prelude.Hashable
+    WirelessGatewayEventLogOption
+  where
+  hashWithSalt _salt WirelessGatewayEventLogOption' {..} =
+    _salt
+      `Prelude.hashWithSalt` event
+      `Prelude.hashWithSalt` logLevel
+
+instance Prelude.NFData WirelessGatewayEventLogOption where
+  rnf WirelessGatewayEventLogOption' {..} =
+    Prelude.rnf event
+      `Prelude.seq` Prelude.rnf logLevel
+
+instance Data.ToJSON WirelessGatewayEventLogOption where
+  toJSON WirelessGatewayEventLogOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Event" Data..= event),
+            Prelude.Just ("LogLevel" Data..= logLevel)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayIdType.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayIdType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayIdType.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.IoTWireless.Types.WirelessGatewayIdType
+-- 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.IoTWireless.Types.WirelessGatewayIdType
+  ( WirelessGatewayIdType
+      ( ..,
+        WirelessGatewayIdType_GatewayEui,
+        WirelessGatewayIdType_ThingName,
+        WirelessGatewayIdType_WirelessGatewayId
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WirelessGatewayIdType = WirelessGatewayIdType'
+  { fromWirelessGatewayIdType ::
+      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 WirelessGatewayIdType_GatewayEui :: WirelessGatewayIdType
+pattern WirelessGatewayIdType_GatewayEui = WirelessGatewayIdType' "GatewayEui"
+
+pattern WirelessGatewayIdType_ThingName :: WirelessGatewayIdType
+pattern WirelessGatewayIdType_ThingName = WirelessGatewayIdType' "ThingName"
+
+pattern WirelessGatewayIdType_WirelessGatewayId :: WirelessGatewayIdType
+pattern WirelessGatewayIdType_WirelessGatewayId = WirelessGatewayIdType' "WirelessGatewayId"
+
+{-# COMPLETE
+  WirelessGatewayIdType_GatewayEui,
+  WirelessGatewayIdType_ThingName,
+  WirelessGatewayIdType_WirelessGatewayId,
+  WirelessGatewayIdType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayLogOption.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayLogOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayLogOption.hs
@@ -0,0 +1,111 @@
+{-# 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.IoTWireless.Types.WirelessGatewayLogOption
+-- 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.IoTWireless.Types.WirelessGatewayLogOption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LogLevel
+import Amazonka.IoTWireless.Types.WirelessGatewayEventLogOption
+import Amazonka.IoTWireless.Types.WirelessGatewayType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The log options for wireless gateways and can be used to set log levels
+-- for a specific type of wireless gateway.
+--
+-- /See:/ 'newWirelessGatewayLogOption' smart constructor.
+data WirelessGatewayLogOption = WirelessGatewayLogOption'
+  { events :: Prelude.Maybe [WirelessGatewayEventLogOption],
+    type' :: WirelessGatewayType,
+    logLevel :: LogLevel
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WirelessGatewayLogOption' 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:
+--
+-- 'events', 'wirelessGatewayLogOption_events' - Undocumented member.
+--
+-- 'type'', 'wirelessGatewayLogOption_type' - Undocumented member.
+--
+-- 'logLevel', 'wirelessGatewayLogOption_logLevel' - Undocumented member.
+newWirelessGatewayLogOption ::
+  -- | 'type''
+  WirelessGatewayType ->
+  -- | 'logLevel'
+  LogLevel ->
+  WirelessGatewayLogOption
+newWirelessGatewayLogOption pType_ pLogLevel_ =
+  WirelessGatewayLogOption'
+    { events = Prelude.Nothing,
+      type' = pType_,
+      logLevel = pLogLevel_
+    }
+
+-- | Undocumented member.
+wirelessGatewayLogOption_events :: Lens.Lens' WirelessGatewayLogOption (Prelude.Maybe [WirelessGatewayEventLogOption])
+wirelessGatewayLogOption_events = Lens.lens (\WirelessGatewayLogOption' {events} -> events) (\s@WirelessGatewayLogOption' {} a -> s {events = a} :: WirelessGatewayLogOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+wirelessGatewayLogOption_type :: Lens.Lens' WirelessGatewayLogOption WirelessGatewayType
+wirelessGatewayLogOption_type = Lens.lens (\WirelessGatewayLogOption' {type'} -> type') (\s@WirelessGatewayLogOption' {} a -> s {type' = a} :: WirelessGatewayLogOption)
+
+-- | Undocumented member.
+wirelessGatewayLogOption_logLevel :: Lens.Lens' WirelessGatewayLogOption LogLevel
+wirelessGatewayLogOption_logLevel = Lens.lens (\WirelessGatewayLogOption' {logLevel} -> logLevel) (\s@WirelessGatewayLogOption' {} a -> s {logLevel = a} :: WirelessGatewayLogOption)
+
+instance Data.FromJSON WirelessGatewayLogOption where
+  parseJSON =
+    Data.withObject
+      "WirelessGatewayLogOption"
+      ( \x ->
+          WirelessGatewayLogOption'
+            Prelude.<$> (x Data..:? "Events" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Type")
+            Prelude.<*> (x Data..: "LogLevel")
+      )
+
+instance Prelude.Hashable WirelessGatewayLogOption where
+  hashWithSalt _salt WirelessGatewayLogOption' {..} =
+    _salt
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` logLevel
+
+instance Prelude.NFData WirelessGatewayLogOption where
+  rnf WirelessGatewayLogOption' {..} =
+    Prelude.rnf events
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf logLevel
+
+instance Data.ToJSON WirelessGatewayLogOption where
+  toJSON WirelessGatewayLogOption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Events" Data..=) Prelude.<$> events,
+            Prelude.Just ("Type" Data..= type'),
+            Prelude.Just ("LogLevel" Data..= logLevel)
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayServiceType.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayServiceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayServiceType.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.IoTWireless.Types.WirelessGatewayServiceType
+-- 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.IoTWireless.Types.WirelessGatewayServiceType
+  ( WirelessGatewayServiceType
+      ( ..,
+        WirelessGatewayServiceType_CUPS,
+        WirelessGatewayServiceType_LNS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WirelessGatewayServiceType = WirelessGatewayServiceType'
+  { fromWirelessGatewayServiceType ::
+      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 WirelessGatewayServiceType_CUPS :: WirelessGatewayServiceType
+pattern WirelessGatewayServiceType_CUPS = WirelessGatewayServiceType' "CUPS"
+
+pattern WirelessGatewayServiceType_LNS :: WirelessGatewayServiceType
+pattern WirelessGatewayServiceType_LNS = WirelessGatewayServiceType' "LNS"
+
+{-# COMPLETE
+  WirelessGatewayServiceType_CUPS,
+  WirelessGatewayServiceType_LNS,
+  WirelessGatewayServiceType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayStatistics.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayStatistics.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.IoTWireless.Types.WirelessGatewayStatistics
+-- 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.IoTWireless.Types.WirelessGatewayStatistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANGateway
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a wireless gateway\'s operation.
+--
+-- /See:/ 'newWirelessGatewayStatistics' smart constructor.
+data WirelessGatewayStatistics = WirelessGatewayStatistics'
+  { -- | The Amazon Resource Name of the resource.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the wireless gateway reporting the data.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the most recent uplink was received.
+    lastUplinkReceivedAt :: Prelude.Maybe Prelude.Text,
+    -- | LoRaWAN gateway info.
+    loRaWAN :: Prelude.Maybe LoRaWANGateway,
+    -- | The name of the resource.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WirelessGatewayStatistics' 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', 'wirelessGatewayStatistics_arn' - The Amazon Resource Name of the resource.
+--
+-- 'description', 'wirelessGatewayStatistics_description' - The description of the resource.
+--
+-- 'id', 'wirelessGatewayStatistics_id' - The ID of the wireless gateway reporting the data.
+--
+-- 'lastUplinkReceivedAt', 'wirelessGatewayStatistics_lastUplinkReceivedAt' - The date and time when the most recent uplink was received.
+--
+-- 'loRaWAN', 'wirelessGatewayStatistics_loRaWAN' - LoRaWAN gateway info.
+--
+-- 'name', 'wirelessGatewayStatistics_name' - The name of the resource.
+newWirelessGatewayStatistics ::
+  WirelessGatewayStatistics
+newWirelessGatewayStatistics =
+  WirelessGatewayStatistics'
+    { arn = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastUplinkReceivedAt = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name of the resource.
+wirelessGatewayStatistics_arn :: Lens.Lens' WirelessGatewayStatistics (Prelude.Maybe Prelude.Text)
+wirelessGatewayStatistics_arn = Lens.lens (\WirelessGatewayStatistics' {arn} -> arn) (\s@WirelessGatewayStatistics' {} a -> s {arn = a} :: WirelessGatewayStatistics)
+
+-- | The description of the resource.
+wirelessGatewayStatistics_description :: Lens.Lens' WirelessGatewayStatistics (Prelude.Maybe Prelude.Text)
+wirelessGatewayStatistics_description = Lens.lens (\WirelessGatewayStatistics' {description} -> description) (\s@WirelessGatewayStatistics' {} a -> s {description = a} :: WirelessGatewayStatistics)
+
+-- | The ID of the wireless gateway reporting the data.
+wirelessGatewayStatistics_id :: Lens.Lens' WirelessGatewayStatistics (Prelude.Maybe Prelude.Text)
+wirelessGatewayStatistics_id = Lens.lens (\WirelessGatewayStatistics' {id} -> id) (\s@WirelessGatewayStatistics' {} a -> s {id = a} :: WirelessGatewayStatistics)
+
+-- | The date and time when the most recent uplink was received.
+wirelessGatewayStatistics_lastUplinkReceivedAt :: Lens.Lens' WirelessGatewayStatistics (Prelude.Maybe Prelude.Text)
+wirelessGatewayStatistics_lastUplinkReceivedAt = Lens.lens (\WirelessGatewayStatistics' {lastUplinkReceivedAt} -> lastUplinkReceivedAt) (\s@WirelessGatewayStatistics' {} a -> s {lastUplinkReceivedAt = a} :: WirelessGatewayStatistics)
+
+-- | LoRaWAN gateway info.
+wirelessGatewayStatistics_loRaWAN :: Lens.Lens' WirelessGatewayStatistics (Prelude.Maybe LoRaWANGateway)
+wirelessGatewayStatistics_loRaWAN = Lens.lens (\WirelessGatewayStatistics' {loRaWAN} -> loRaWAN) (\s@WirelessGatewayStatistics' {} a -> s {loRaWAN = a} :: WirelessGatewayStatistics)
+
+-- | The name of the resource.
+wirelessGatewayStatistics_name :: Lens.Lens' WirelessGatewayStatistics (Prelude.Maybe Prelude.Text)
+wirelessGatewayStatistics_name = Lens.lens (\WirelessGatewayStatistics' {name} -> name) (\s@WirelessGatewayStatistics' {} a -> s {name = a} :: WirelessGatewayStatistics)
+
+instance Data.FromJSON WirelessGatewayStatistics where
+  parseJSON =
+    Data.withObject
+      "WirelessGatewayStatistics"
+      ( \x ->
+          WirelessGatewayStatistics'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "Id")
+            Prelude.<*> (x Data..:? "LastUplinkReceivedAt")
+            Prelude.<*> (x Data..:? "LoRaWAN")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable WirelessGatewayStatistics where
+  hashWithSalt _salt WirelessGatewayStatistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastUplinkReceivedAt
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData WirelessGatewayStatistics where
+  rnf WirelessGatewayStatistics' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastUplinkReceivedAt
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayTaskDefinitionType.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayTaskDefinitionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayTaskDefinitionType.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.IoTWireless.Types.WirelessGatewayTaskDefinitionType
+-- 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.IoTWireless.Types.WirelessGatewayTaskDefinitionType
+  ( WirelessGatewayTaskDefinitionType
+      ( ..,
+        WirelessGatewayTaskDefinitionType_UPDATE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WirelessGatewayTaskDefinitionType = WirelessGatewayTaskDefinitionType'
+  { fromWirelessGatewayTaskDefinitionType ::
+      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 WirelessGatewayTaskDefinitionType_UPDATE :: WirelessGatewayTaskDefinitionType
+pattern WirelessGatewayTaskDefinitionType_UPDATE = WirelessGatewayTaskDefinitionType' "UPDATE"
+
+{-# COMPLETE
+  WirelessGatewayTaskDefinitionType_UPDATE,
+  WirelessGatewayTaskDefinitionType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayTaskStatus.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayTaskStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayTaskStatus.hs
@@ -0,0 +1,91 @@
+{-# 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.IoTWireless.Types.WirelessGatewayTaskStatus
+-- 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.IoTWireless.Types.WirelessGatewayTaskStatus
+  ( WirelessGatewayTaskStatus
+      ( ..,
+        WirelessGatewayTaskStatus_COMPLETED,
+        WirelessGatewayTaskStatus_FAILED,
+        WirelessGatewayTaskStatus_FIRST_RETRY,
+        WirelessGatewayTaskStatus_IN_PROGRESS,
+        WirelessGatewayTaskStatus_PENDING,
+        WirelessGatewayTaskStatus_SECOND_RETRY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype WirelessGatewayTaskStatus = WirelessGatewayTaskStatus'
+  { fromWirelessGatewayTaskStatus ::
+      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 WirelessGatewayTaskStatus_COMPLETED :: WirelessGatewayTaskStatus
+pattern WirelessGatewayTaskStatus_COMPLETED = WirelessGatewayTaskStatus' "COMPLETED"
+
+pattern WirelessGatewayTaskStatus_FAILED :: WirelessGatewayTaskStatus
+pattern WirelessGatewayTaskStatus_FAILED = WirelessGatewayTaskStatus' "FAILED"
+
+pattern WirelessGatewayTaskStatus_FIRST_RETRY :: WirelessGatewayTaskStatus
+pattern WirelessGatewayTaskStatus_FIRST_RETRY = WirelessGatewayTaskStatus' "FIRST_RETRY"
+
+pattern WirelessGatewayTaskStatus_IN_PROGRESS :: WirelessGatewayTaskStatus
+pattern WirelessGatewayTaskStatus_IN_PROGRESS = WirelessGatewayTaskStatus' "IN_PROGRESS"
+
+pattern WirelessGatewayTaskStatus_PENDING :: WirelessGatewayTaskStatus
+pattern WirelessGatewayTaskStatus_PENDING = WirelessGatewayTaskStatus' "PENDING"
+
+pattern WirelessGatewayTaskStatus_SECOND_RETRY :: WirelessGatewayTaskStatus
+pattern WirelessGatewayTaskStatus_SECOND_RETRY = WirelessGatewayTaskStatus' "SECOND_RETRY"
+
+{-# COMPLETE
+  WirelessGatewayTaskStatus_COMPLETED,
+  WirelessGatewayTaskStatus_FAILED,
+  WirelessGatewayTaskStatus_FIRST_RETRY,
+  WirelessGatewayTaskStatus_IN_PROGRESS,
+  WirelessGatewayTaskStatus_PENDING,
+  WirelessGatewayTaskStatus_SECOND_RETRY,
+  WirelessGatewayTaskStatus'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessGatewayType.hs b/gen/Amazonka/IoTWireless/Types/WirelessGatewayType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessGatewayType.hs
@@ -0,0 +1,67 @@
+{-# 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.IoTWireless.Types.WirelessGatewayType
+-- 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.IoTWireless.Types.WirelessGatewayType
+  ( WirelessGatewayType
+      ( ..,
+        WirelessGatewayType_LoRaWAN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The wireless gateway type.
+newtype WirelessGatewayType = WirelessGatewayType'
+  { fromWirelessGatewayType ::
+      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 WirelessGatewayType_LoRaWAN :: WirelessGatewayType
+pattern WirelessGatewayType_LoRaWAN = WirelessGatewayType' "LoRaWAN"
+
+{-# COMPLETE
+  WirelessGatewayType_LoRaWAN,
+  WirelessGatewayType'
+  #-}
diff --git a/gen/Amazonka/IoTWireless/Types/WirelessMetadata.hs b/gen/Amazonka/IoTWireless/Types/WirelessMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/Types/WirelessMetadata.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.IoTWireless.Types.WirelessMetadata
+-- 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.IoTWireless.Types.WirelessMetadata where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types.LoRaWANSendDataToDevice
+import Amazonka.IoTWireless.Types.SidewalkSendDataToDevice
+import qualified Amazonka.Prelude as Prelude
+
+-- | WirelessMetadata object.
+--
+-- /See:/ 'newWirelessMetadata' smart constructor.
+data WirelessMetadata = WirelessMetadata'
+  { -- | LoRaWAN device info.
+    loRaWAN :: Prelude.Maybe LoRaWANSendDataToDevice,
+    -- | The Sidewalk account credentials.
+    sidewalk :: Prelude.Maybe SidewalkSendDataToDevice
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WirelessMetadata' 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:
+--
+-- 'loRaWAN', 'wirelessMetadata_loRaWAN' - LoRaWAN device info.
+--
+-- 'sidewalk', 'wirelessMetadata_sidewalk' - The Sidewalk account credentials.
+newWirelessMetadata ::
+  WirelessMetadata
+newWirelessMetadata =
+  WirelessMetadata'
+    { loRaWAN = Prelude.Nothing,
+      sidewalk = Prelude.Nothing
+    }
+
+-- | LoRaWAN device info.
+wirelessMetadata_loRaWAN :: Lens.Lens' WirelessMetadata (Prelude.Maybe LoRaWANSendDataToDevice)
+wirelessMetadata_loRaWAN = Lens.lens (\WirelessMetadata' {loRaWAN} -> loRaWAN) (\s@WirelessMetadata' {} a -> s {loRaWAN = a} :: WirelessMetadata)
+
+-- | The Sidewalk account credentials.
+wirelessMetadata_sidewalk :: Lens.Lens' WirelessMetadata (Prelude.Maybe SidewalkSendDataToDevice)
+wirelessMetadata_sidewalk = Lens.lens (\WirelessMetadata' {sidewalk} -> sidewalk) (\s@WirelessMetadata' {} a -> s {sidewalk = a} :: WirelessMetadata)
+
+instance Prelude.Hashable WirelessMetadata where
+  hashWithSalt _salt WirelessMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` sidewalk
+
+instance Prelude.NFData WirelessMetadata where
+  rnf WirelessMetadata' {..} =
+    Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf sidewalk
+
+instance Data.ToJSON WirelessMetadata where
+  toJSON WirelessMetadata' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("Sidewalk" Data..=) Prelude.<$> sidewalk
+          ]
+      )
diff --git a/gen/Amazonka/IoTWireless/UntagResource.hs b/gen/Amazonka/IoTWireless/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UntagResource.hs
@@ -0,0 +1,154 @@
+{-# 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.IoTWireless.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 one or more tags from a resource.
+module Amazonka.IoTWireless.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+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 to remove tags from.
+    resourceArn :: Prelude.Text,
+    -- | A list of the keys of the tags to remove from the resource.
+    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:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The ARN of the resource to remove tags from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A list of the keys of the tags to remove from the resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The ARN of the resource to remove tags from.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | A list of the keys of the tags to remove from the resource.
+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.delete (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` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/tags"
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      [ "resourceArn" Data.=: resourceArn,
+        "tagKeys" Data.=: Data.toQueryList "member" tagKeys
+      ]
+
+-- | /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/IoTWireless/UpdateDestination.hs b/gen/Amazonka/IoTWireless/UpdateDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateDestination.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.IoTWireless.UpdateDestination
+-- 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 properties of a destination.
+module Amazonka.IoTWireless.UpdateDestination
+  ( -- * Creating a Request
+    UpdateDestination (..),
+    newUpdateDestination,
+
+    -- * Request Lenses
+    updateDestination_description,
+    updateDestination_expression,
+    updateDestination_expressionType,
+    updateDestination_roleArn,
+    updateDestination_name,
+
+    -- * Destructuring the Response
+    UpdateDestinationResponse (..),
+    newUpdateDestinationResponse,
+
+    -- * Response Lenses
+    updateDestinationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDestination' smart constructor.
+data UpdateDestination = UpdateDestination'
+  { -- | A new description of the resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The new rule name or topic rule to send messages to.
+    expression :: Prelude.Maybe Prelude.Text,
+    -- | The type of value in @Expression@.
+    expressionType :: Prelude.Maybe ExpressionType,
+    -- | The ARN of the IAM Role that authorizes the destination.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | The new name of the resource.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDestination' 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', 'updateDestination_description' - A new description of the resource.
+--
+-- 'expression', 'updateDestination_expression' - The new rule name or topic rule to send messages to.
+--
+-- 'expressionType', 'updateDestination_expressionType' - The type of value in @Expression@.
+--
+-- 'roleArn', 'updateDestination_roleArn' - The ARN of the IAM Role that authorizes the destination.
+--
+-- 'name', 'updateDestination_name' - The new name of the resource.
+newUpdateDestination ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateDestination
+newUpdateDestination pName_ =
+  UpdateDestination'
+    { description = Prelude.Nothing,
+      expression = Prelude.Nothing,
+      expressionType = Prelude.Nothing,
+      roleArn = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A new description of the resource.
+updateDestination_description :: Lens.Lens' UpdateDestination (Prelude.Maybe Prelude.Text)
+updateDestination_description = Lens.lens (\UpdateDestination' {description} -> description) (\s@UpdateDestination' {} a -> s {description = a} :: UpdateDestination)
+
+-- | The new rule name or topic rule to send messages to.
+updateDestination_expression :: Lens.Lens' UpdateDestination (Prelude.Maybe Prelude.Text)
+updateDestination_expression = Lens.lens (\UpdateDestination' {expression} -> expression) (\s@UpdateDestination' {} a -> s {expression = a} :: UpdateDestination)
+
+-- | The type of value in @Expression@.
+updateDestination_expressionType :: Lens.Lens' UpdateDestination (Prelude.Maybe ExpressionType)
+updateDestination_expressionType = Lens.lens (\UpdateDestination' {expressionType} -> expressionType) (\s@UpdateDestination' {} a -> s {expressionType = a} :: UpdateDestination)
+
+-- | The ARN of the IAM Role that authorizes the destination.
+updateDestination_roleArn :: Lens.Lens' UpdateDestination (Prelude.Maybe Prelude.Text)
+updateDestination_roleArn = Lens.lens (\UpdateDestination' {roleArn} -> roleArn) (\s@UpdateDestination' {} a -> s {roleArn = a} :: UpdateDestination)
+
+-- | The new name of the resource.
+updateDestination_name :: Lens.Lens' UpdateDestination Prelude.Text
+updateDestination_name = Lens.lens (\UpdateDestination' {name} -> name) (\s@UpdateDestination' {} a -> s {name = a} :: UpdateDestination)
+
+instance Core.AWSRequest UpdateDestination where
+  type
+    AWSResponse UpdateDestination =
+      UpdateDestinationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateDestinationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDestination where
+  hashWithSalt _salt UpdateDestination' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` expression
+      `Prelude.hashWithSalt` expressionType
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateDestination where
+  rnf UpdateDestination' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf expressionType
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateDestination where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateDestination where
+  toJSON UpdateDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Expression" Data..=) Prelude.<$> expression,
+            ("ExpressionType" Data..=)
+              Prelude.<$> expressionType,
+            ("RoleArn" Data..=) Prelude.<$> roleArn
+          ]
+      )
+
+instance Data.ToPath UpdateDestination where
+  toPath UpdateDestination' {..} =
+    Prelude.mconcat ["/destinations/", Data.toBS name]
+
+instance Data.ToQuery UpdateDestination where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDestinationResponse' smart constructor.
+data UpdateDestinationResponse = UpdateDestinationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDestinationResponse' 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', 'updateDestinationResponse_httpStatus' - The response's http status code.
+newUpdateDestinationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDestinationResponse
+newUpdateDestinationResponse pHttpStatus_ =
+  UpdateDestinationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateDestinationResponse_httpStatus :: Lens.Lens' UpdateDestinationResponse Prelude.Int
+updateDestinationResponse_httpStatus = Lens.lens (\UpdateDestinationResponse' {httpStatus} -> httpStatus) (\s@UpdateDestinationResponse' {} a -> s {httpStatus = a} :: UpdateDestinationResponse)
+
+instance Prelude.NFData UpdateDestinationResponse where
+  rnf UpdateDestinationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateEventConfigurationByResourceTypes.hs b/gen/Amazonka/IoTWireless/UpdateEventConfigurationByResourceTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateEventConfigurationByResourceTypes.hs
@@ -0,0 +1,251 @@
+{-# 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.IoTWireless.UpdateEventConfigurationByResourceTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the event configuration based on resource types.
+module Amazonka.IoTWireless.UpdateEventConfigurationByResourceTypes
+  ( -- * Creating a Request
+    UpdateEventConfigurationByResourceTypes (..),
+    newUpdateEventConfigurationByResourceTypes,
+
+    -- * Request Lenses
+    updateEventConfigurationByResourceTypes_connectionStatus,
+    updateEventConfigurationByResourceTypes_deviceRegistrationState,
+    updateEventConfigurationByResourceTypes_join,
+    updateEventConfigurationByResourceTypes_messageDeliveryStatus,
+    updateEventConfigurationByResourceTypes_proximity,
+
+    -- * Destructuring the Response
+    UpdateEventConfigurationByResourceTypesResponse (..),
+    newUpdateEventConfigurationByResourceTypesResponse,
+
+    -- * Response Lenses
+    updateEventConfigurationByResourceTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateEventConfigurationByResourceTypes' smart constructor.
+data UpdateEventConfigurationByResourceTypes = UpdateEventConfigurationByResourceTypes'
+  { -- | Connection status resource type event configuration object for enabling
+    -- and disabling wireless gateway topic.
+    connectionStatus :: Prelude.Maybe ConnectionStatusResourceTypeEventConfiguration,
+    -- | Device registration state resource type event configuration object for
+    -- enabling and disabling wireless gateway topic.
+    deviceRegistrationState :: Prelude.Maybe DeviceRegistrationStateResourceTypeEventConfiguration,
+    -- | Join resource type event configuration object for enabling and disabling
+    -- wireless device topic.
+    join :: Prelude.Maybe JoinResourceTypeEventConfiguration,
+    -- | Message delivery status resource type event configuration object for
+    -- enabling and disabling wireless device topic.
+    messageDeliveryStatus :: Prelude.Maybe MessageDeliveryStatusResourceTypeEventConfiguration,
+    -- | Proximity resource type event configuration object for enabling and
+    -- disabling wireless gateway topic.
+    proximity :: Prelude.Maybe ProximityResourceTypeEventConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventConfigurationByResourceTypes' 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', 'updateEventConfigurationByResourceTypes_connectionStatus' - Connection status resource type event configuration object for enabling
+-- and disabling wireless gateway topic.
+--
+-- 'deviceRegistrationState', 'updateEventConfigurationByResourceTypes_deviceRegistrationState' - Device registration state resource type event configuration object for
+-- enabling and disabling wireless gateway topic.
+--
+-- 'join', 'updateEventConfigurationByResourceTypes_join' - Join resource type event configuration object for enabling and disabling
+-- wireless device topic.
+--
+-- 'messageDeliveryStatus', 'updateEventConfigurationByResourceTypes_messageDeliveryStatus' - Message delivery status resource type event configuration object for
+-- enabling and disabling wireless device topic.
+--
+-- 'proximity', 'updateEventConfigurationByResourceTypes_proximity' - Proximity resource type event configuration object for enabling and
+-- disabling wireless gateway topic.
+newUpdateEventConfigurationByResourceTypes ::
+  UpdateEventConfigurationByResourceTypes
+newUpdateEventConfigurationByResourceTypes =
+  UpdateEventConfigurationByResourceTypes'
+    { connectionStatus =
+        Prelude.Nothing,
+      deviceRegistrationState =
+        Prelude.Nothing,
+      join = Prelude.Nothing,
+      messageDeliveryStatus =
+        Prelude.Nothing,
+      proximity = Prelude.Nothing
+    }
+
+-- | Connection status resource type event configuration object for enabling
+-- and disabling wireless gateway topic.
+updateEventConfigurationByResourceTypes_connectionStatus :: Lens.Lens' UpdateEventConfigurationByResourceTypes (Prelude.Maybe ConnectionStatusResourceTypeEventConfiguration)
+updateEventConfigurationByResourceTypes_connectionStatus = Lens.lens (\UpdateEventConfigurationByResourceTypes' {connectionStatus} -> connectionStatus) (\s@UpdateEventConfigurationByResourceTypes' {} a -> s {connectionStatus = a} :: UpdateEventConfigurationByResourceTypes)
+
+-- | Device registration state resource type event configuration object for
+-- enabling and disabling wireless gateway topic.
+updateEventConfigurationByResourceTypes_deviceRegistrationState :: Lens.Lens' UpdateEventConfigurationByResourceTypes (Prelude.Maybe DeviceRegistrationStateResourceTypeEventConfiguration)
+updateEventConfigurationByResourceTypes_deviceRegistrationState = Lens.lens (\UpdateEventConfigurationByResourceTypes' {deviceRegistrationState} -> deviceRegistrationState) (\s@UpdateEventConfigurationByResourceTypes' {} a -> s {deviceRegistrationState = a} :: UpdateEventConfigurationByResourceTypes)
+
+-- | Join resource type event configuration object for enabling and disabling
+-- wireless device topic.
+updateEventConfigurationByResourceTypes_join :: Lens.Lens' UpdateEventConfigurationByResourceTypes (Prelude.Maybe JoinResourceTypeEventConfiguration)
+updateEventConfigurationByResourceTypes_join = Lens.lens (\UpdateEventConfigurationByResourceTypes' {join} -> join) (\s@UpdateEventConfigurationByResourceTypes' {} a -> s {join = a} :: UpdateEventConfigurationByResourceTypes)
+
+-- | Message delivery status resource type event configuration object for
+-- enabling and disabling wireless device topic.
+updateEventConfigurationByResourceTypes_messageDeliveryStatus :: Lens.Lens' UpdateEventConfigurationByResourceTypes (Prelude.Maybe MessageDeliveryStatusResourceTypeEventConfiguration)
+updateEventConfigurationByResourceTypes_messageDeliveryStatus = Lens.lens (\UpdateEventConfigurationByResourceTypes' {messageDeliveryStatus} -> messageDeliveryStatus) (\s@UpdateEventConfigurationByResourceTypes' {} a -> s {messageDeliveryStatus = a} :: UpdateEventConfigurationByResourceTypes)
+
+-- | Proximity resource type event configuration object for enabling and
+-- disabling wireless gateway topic.
+updateEventConfigurationByResourceTypes_proximity :: Lens.Lens' UpdateEventConfigurationByResourceTypes (Prelude.Maybe ProximityResourceTypeEventConfiguration)
+updateEventConfigurationByResourceTypes_proximity = Lens.lens (\UpdateEventConfigurationByResourceTypes' {proximity} -> proximity) (\s@UpdateEventConfigurationByResourceTypes' {} a -> s {proximity = a} :: UpdateEventConfigurationByResourceTypes)
+
+instance
+  Core.AWSRequest
+    UpdateEventConfigurationByResourceTypes
+  where
+  type
+    AWSResponse
+      UpdateEventConfigurationByResourceTypes =
+      UpdateEventConfigurationByResourceTypesResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateEventConfigurationByResourceTypesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateEventConfigurationByResourceTypes
+  where
+  hashWithSalt
+    _salt
+    UpdateEventConfigurationByResourceTypes' {..} =
+      _salt
+        `Prelude.hashWithSalt` connectionStatus
+        `Prelude.hashWithSalt` deviceRegistrationState
+        `Prelude.hashWithSalt` join
+        `Prelude.hashWithSalt` messageDeliveryStatus
+        `Prelude.hashWithSalt` proximity
+
+instance
+  Prelude.NFData
+    UpdateEventConfigurationByResourceTypes
+  where
+  rnf UpdateEventConfigurationByResourceTypes' {..} =
+    Prelude.rnf connectionStatus
+      `Prelude.seq` Prelude.rnf deviceRegistrationState
+      `Prelude.seq` Prelude.rnf join
+      `Prelude.seq` Prelude.rnf messageDeliveryStatus
+      `Prelude.seq` Prelude.rnf proximity
+
+instance
+  Data.ToHeaders
+    UpdateEventConfigurationByResourceTypes
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    UpdateEventConfigurationByResourceTypes
+  where
+  toJSON UpdateEventConfigurationByResourceTypes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConnectionStatus" Data..=)
+              Prelude.<$> connectionStatus,
+            ("DeviceRegistrationState" Data..=)
+              Prelude.<$> deviceRegistrationState,
+            ("Join" Data..=) Prelude.<$> join,
+            ("MessageDeliveryStatus" Data..=)
+              Prelude.<$> messageDeliveryStatus,
+            ("Proximity" Data..=) Prelude.<$> proximity
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateEventConfigurationByResourceTypes
+  where
+  toPath =
+    Prelude.const
+      "/event-configurations-resource-types"
+
+instance
+  Data.ToQuery
+    UpdateEventConfigurationByResourceTypes
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEventConfigurationByResourceTypesResponse' smart constructor.
+data UpdateEventConfigurationByResourceTypesResponse = UpdateEventConfigurationByResourceTypesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventConfigurationByResourceTypesResponse' 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', 'updateEventConfigurationByResourceTypesResponse_httpStatus' - The response's http status code.
+newUpdateEventConfigurationByResourceTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEventConfigurationByResourceTypesResponse
+newUpdateEventConfigurationByResourceTypesResponse
+  pHttpStatus_ =
+    UpdateEventConfigurationByResourceTypesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateEventConfigurationByResourceTypesResponse_httpStatus :: Lens.Lens' UpdateEventConfigurationByResourceTypesResponse Prelude.Int
+updateEventConfigurationByResourceTypesResponse_httpStatus = Lens.lens (\UpdateEventConfigurationByResourceTypesResponse' {httpStatus} -> httpStatus) (\s@UpdateEventConfigurationByResourceTypesResponse' {} a -> s {httpStatus = a} :: UpdateEventConfigurationByResourceTypesResponse)
+
+instance
+  Prelude.NFData
+    UpdateEventConfigurationByResourceTypesResponse
+  where
+  rnf
+    UpdateEventConfigurationByResourceTypesResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateFuotaTask.hs b/gen/Amazonka/IoTWireless/UpdateFuotaTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateFuotaTask.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.IoTWireless.UpdateFuotaTask
+-- 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 properties of a FUOTA task.
+module Amazonka.IoTWireless.UpdateFuotaTask
+  ( -- * Creating a Request
+    UpdateFuotaTask (..),
+    newUpdateFuotaTask,
+
+    -- * Request Lenses
+    updateFuotaTask_description,
+    updateFuotaTask_firmwareUpdateImage,
+    updateFuotaTask_firmwareUpdateRole,
+    updateFuotaTask_loRaWAN,
+    updateFuotaTask_name,
+    updateFuotaTask_id,
+
+    -- * Destructuring the Response
+    UpdateFuotaTaskResponse (..),
+    newUpdateFuotaTaskResponse,
+
+    -- * Response Lenses
+    updateFuotaTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateFuotaTask' smart constructor.
+data UpdateFuotaTask = UpdateFuotaTask'
+  { description :: Prelude.Maybe Prelude.Text,
+    firmwareUpdateImage :: Prelude.Maybe Prelude.Text,
+    firmwareUpdateRole :: Prelude.Maybe Prelude.Text,
+    loRaWAN :: Prelude.Maybe LoRaWANFuotaTask,
+    name :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFuotaTask' 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', 'updateFuotaTask_description' - Undocumented member.
+--
+-- 'firmwareUpdateImage', 'updateFuotaTask_firmwareUpdateImage' - Undocumented member.
+--
+-- 'firmwareUpdateRole', 'updateFuotaTask_firmwareUpdateRole' - Undocumented member.
+--
+-- 'loRaWAN', 'updateFuotaTask_loRaWAN' - Undocumented member.
+--
+-- 'name', 'updateFuotaTask_name' - Undocumented member.
+--
+-- 'id', 'updateFuotaTask_id' - Undocumented member.
+newUpdateFuotaTask ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateFuotaTask
+newUpdateFuotaTask pId_ =
+  UpdateFuotaTask'
+    { description = Prelude.Nothing,
+      firmwareUpdateImage = Prelude.Nothing,
+      firmwareUpdateRole = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updateFuotaTask_description :: Lens.Lens' UpdateFuotaTask (Prelude.Maybe Prelude.Text)
+updateFuotaTask_description = Lens.lens (\UpdateFuotaTask' {description} -> description) (\s@UpdateFuotaTask' {} a -> s {description = a} :: UpdateFuotaTask)
+
+-- | Undocumented member.
+updateFuotaTask_firmwareUpdateImage :: Lens.Lens' UpdateFuotaTask (Prelude.Maybe Prelude.Text)
+updateFuotaTask_firmwareUpdateImage = Lens.lens (\UpdateFuotaTask' {firmwareUpdateImage} -> firmwareUpdateImage) (\s@UpdateFuotaTask' {} a -> s {firmwareUpdateImage = a} :: UpdateFuotaTask)
+
+-- | Undocumented member.
+updateFuotaTask_firmwareUpdateRole :: Lens.Lens' UpdateFuotaTask (Prelude.Maybe Prelude.Text)
+updateFuotaTask_firmwareUpdateRole = Lens.lens (\UpdateFuotaTask' {firmwareUpdateRole} -> firmwareUpdateRole) (\s@UpdateFuotaTask' {} a -> s {firmwareUpdateRole = a} :: UpdateFuotaTask)
+
+-- | Undocumented member.
+updateFuotaTask_loRaWAN :: Lens.Lens' UpdateFuotaTask (Prelude.Maybe LoRaWANFuotaTask)
+updateFuotaTask_loRaWAN = Lens.lens (\UpdateFuotaTask' {loRaWAN} -> loRaWAN) (\s@UpdateFuotaTask' {} a -> s {loRaWAN = a} :: UpdateFuotaTask)
+
+-- | Undocumented member.
+updateFuotaTask_name :: Lens.Lens' UpdateFuotaTask (Prelude.Maybe Prelude.Text)
+updateFuotaTask_name = Lens.lens (\UpdateFuotaTask' {name} -> name) (\s@UpdateFuotaTask' {} a -> s {name = a} :: UpdateFuotaTask)
+
+-- | Undocumented member.
+updateFuotaTask_id :: Lens.Lens' UpdateFuotaTask Prelude.Text
+updateFuotaTask_id = Lens.lens (\UpdateFuotaTask' {id} -> id) (\s@UpdateFuotaTask' {} a -> s {id = a} :: UpdateFuotaTask)
+
+instance Core.AWSRequest UpdateFuotaTask where
+  type
+    AWSResponse UpdateFuotaTask =
+      UpdateFuotaTaskResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateFuotaTaskResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFuotaTask where
+  hashWithSalt _salt UpdateFuotaTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` firmwareUpdateImage
+      `Prelude.hashWithSalt` firmwareUpdateRole
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateFuotaTask where
+  rnf UpdateFuotaTask' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf firmwareUpdateImage
+      `Prelude.seq` Prelude.rnf firmwareUpdateRole
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateFuotaTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateFuotaTask where
+  toJSON UpdateFuotaTask' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("FirmwareUpdateImage" Data..=)
+              Prelude.<$> firmwareUpdateImage,
+            ("FirmwareUpdateRole" Data..=)
+              Prelude.<$> firmwareUpdateRole,
+            ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateFuotaTask where
+  toPath UpdateFuotaTask' {..} =
+    Prelude.mconcat ["/fuota-tasks/", Data.toBS id]
+
+instance Data.ToQuery UpdateFuotaTask where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFuotaTaskResponse' smart constructor.
+data UpdateFuotaTaskResponse = UpdateFuotaTaskResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFuotaTaskResponse' 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', 'updateFuotaTaskResponse_httpStatus' - The response's http status code.
+newUpdateFuotaTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFuotaTaskResponse
+newUpdateFuotaTaskResponse pHttpStatus_ =
+  UpdateFuotaTaskResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateFuotaTaskResponse_httpStatus :: Lens.Lens' UpdateFuotaTaskResponse Prelude.Int
+updateFuotaTaskResponse_httpStatus = Lens.lens (\UpdateFuotaTaskResponse' {httpStatus} -> httpStatus) (\s@UpdateFuotaTaskResponse' {} a -> s {httpStatus = a} :: UpdateFuotaTaskResponse)
+
+instance Prelude.NFData UpdateFuotaTaskResponse where
+  rnf UpdateFuotaTaskResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateLogLevelsByResourceTypes.hs b/gen/Amazonka/IoTWireless/UpdateLogLevelsByResourceTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateLogLevelsByResourceTypes.hs
@@ -0,0 +1,194 @@
+{-# 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.IoTWireless.UpdateLogLevelsByResourceTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Set default log level, or log levels by resource types. This can be for
+-- wireless device log options or wireless gateways log options and is used
+-- to control the log messages that\'ll be displayed in CloudWatch.
+module Amazonka.IoTWireless.UpdateLogLevelsByResourceTypes
+  ( -- * Creating a Request
+    UpdateLogLevelsByResourceTypes (..),
+    newUpdateLogLevelsByResourceTypes,
+
+    -- * Request Lenses
+    updateLogLevelsByResourceTypes_defaultLogLevel,
+    updateLogLevelsByResourceTypes_wirelessDeviceLogOptions,
+    updateLogLevelsByResourceTypes_wirelessGatewayLogOptions,
+
+    -- * Destructuring the Response
+    UpdateLogLevelsByResourceTypesResponse (..),
+    newUpdateLogLevelsByResourceTypesResponse,
+
+    -- * Response Lenses
+    updateLogLevelsByResourceTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateLogLevelsByResourceTypes' smart constructor.
+data UpdateLogLevelsByResourceTypes = UpdateLogLevelsByResourceTypes'
+  { defaultLogLevel :: Prelude.Maybe LogLevel,
+    wirelessDeviceLogOptions :: Prelude.Maybe [WirelessDeviceLogOption],
+    wirelessGatewayLogOptions :: Prelude.Maybe [WirelessGatewayLogOption]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLogLevelsByResourceTypes' 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:
+--
+-- 'defaultLogLevel', 'updateLogLevelsByResourceTypes_defaultLogLevel' - Undocumented member.
+--
+-- 'wirelessDeviceLogOptions', 'updateLogLevelsByResourceTypes_wirelessDeviceLogOptions' - Undocumented member.
+--
+-- 'wirelessGatewayLogOptions', 'updateLogLevelsByResourceTypes_wirelessGatewayLogOptions' - Undocumented member.
+newUpdateLogLevelsByResourceTypes ::
+  UpdateLogLevelsByResourceTypes
+newUpdateLogLevelsByResourceTypes =
+  UpdateLogLevelsByResourceTypes'
+    { defaultLogLevel =
+        Prelude.Nothing,
+      wirelessDeviceLogOptions = Prelude.Nothing,
+      wirelessGatewayLogOptions = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+updateLogLevelsByResourceTypes_defaultLogLevel :: Lens.Lens' UpdateLogLevelsByResourceTypes (Prelude.Maybe LogLevel)
+updateLogLevelsByResourceTypes_defaultLogLevel = Lens.lens (\UpdateLogLevelsByResourceTypes' {defaultLogLevel} -> defaultLogLevel) (\s@UpdateLogLevelsByResourceTypes' {} a -> s {defaultLogLevel = a} :: UpdateLogLevelsByResourceTypes)
+
+-- | Undocumented member.
+updateLogLevelsByResourceTypes_wirelessDeviceLogOptions :: Lens.Lens' UpdateLogLevelsByResourceTypes (Prelude.Maybe [WirelessDeviceLogOption])
+updateLogLevelsByResourceTypes_wirelessDeviceLogOptions = Lens.lens (\UpdateLogLevelsByResourceTypes' {wirelessDeviceLogOptions} -> wirelessDeviceLogOptions) (\s@UpdateLogLevelsByResourceTypes' {} a -> s {wirelessDeviceLogOptions = a} :: UpdateLogLevelsByResourceTypes) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+updateLogLevelsByResourceTypes_wirelessGatewayLogOptions :: Lens.Lens' UpdateLogLevelsByResourceTypes (Prelude.Maybe [WirelessGatewayLogOption])
+updateLogLevelsByResourceTypes_wirelessGatewayLogOptions = Lens.lens (\UpdateLogLevelsByResourceTypes' {wirelessGatewayLogOptions} -> wirelessGatewayLogOptions) (\s@UpdateLogLevelsByResourceTypes' {} a -> s {wirelessGatewayLogOptions = a} :: UpdateLogLevelsByResourceTypes) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSRequest
+    UpdateLogLevelsByResourceTypes
+  where
+  type
+    AWSResponse UpdateLogLevelsByResourceTypes =
+      UpdateLogLevelsByResourceTypesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateLogLevelsByResourceTypesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateLogLevelsByResourceTypes
+  where
+  hashWithSalt
+    _salt
+    UpdateLogLevelsByResourceTypes' {..} =
+      _salt
+        `Prelude.hashWithSalt` defaultLogLevel
+        `Prelude.hashWithSalt` wirelessDeviceLogOptions
+        `Prelude.hashWithSalt` wirelessGatewayLogOptions
+
+instance
+  Prelude.NFData
+    UpdateLogLevelsByResourceTypes
+  where
+  rnf UpdateLogLevelsByResourceTypes' {..} =
+    Prelude.rnf defaultLogLevel
+      `Prelude.seq` Prelude.rnf wirelessDeviceLogOptions
+      `Prelude.seq` Prelude.rnf wirelessGatewayLogOptions
+
+instance
+  Data.ToHeaders
+    UpdateLogLevelsByResourceTypes
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateLogLevelsByResourceTypes where
+  toJSON UpdateLogLevelsByResourceTypes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DefaultLogLevel" Data..=)
+              Prelude.<$> defaultLogLevel,
+            ("WirelessDeviceLogOptions" Data..=)
+              Prelude.<$> wirelessDeviceLogOptions,
+            ("WirelessGatewayLogOptions" Data..=)
+              Prelude.<$> wirelessGatewayLogOptions
+          ]
+      )
+
+instance Data.ToPath UpdateLogLevelsByResourceTypes where
+  toPath = Prelude.const "/log-levels"
+
+instance Data.ToQuery UpdateLogLevelsByResourceTypes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLogLevelsByResourceTypesResponse' smart constructor.
+data UpdateLogLevelsByResourceTypesResponse = UpdateLogLevelsByResourceTypesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLogLevelsByResourceTypesResponse' 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', 'updateLogLevelsByResourceTypesResponse_httpStatus' - The response's http status code.
+newUpdateLogLevelsByResourceTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLogLevelsByResourceTypesResponse
+newUpdateLogLevelsByResourceTypesResponse
+  pHttpStatus_ =
+    UpdateLogLevelsByResourceTypesResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateLogLevelsByResourceTypesResponse_httpStatus :: Lens.Lens' UpdateLogLevelsByResourceTypesResponse Prelude.Int
+updateLogLevelsByResourceTypesResponse_httpStatus = Lens.lens (\UpdateLogLevelsByResourceTypesResponse' {httpStatus} -> httpStatus) (\s@UpdateLogLevelsByResourceTypesResponse' {} a -> s {httpStatus = a} :: UpdateLogLevelsByResourceTypesResponse)
+
+instance
+  Prelude.NFData
+    UpdateLogLevelsByResourceTypesResponse
+  where
+  rnf UpdateLogLevelsByResourceTypesResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateMulticastGroup.hs b/gen/Amazonka/IoTWireless/UpdateMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateMulticastGroup.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.IoTWireless.UpdateMulticastGroup
+-- 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 properties of a multicast group session.
+module Amazonka.IoTWireless.UpdateMulticastGroup
+  ( -- * Creating a Request
+    UpdateMulticastGroup (..),
+    newUpdateMulticastGroup,
+
+    -- * Request Lenses
+    updateMulticastGroup_description,
+    updateMulticastGroup_loRaWAN,
+    updateMulticastGroup_name,
+    updateMulticastGroup_id,
+
+    -- * Destructuring the Response
+    UpdateMulticastGroupResponse (..),
+    newUpdateMulticastGroupResponse,
+
+    -- * Response Lenses
+    updateMulticastGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateMulticastGroup' smart constructor.
+data UpdateMulticastGroup = UpdateMulticastGroup'
+  { description :: Prelude.Maybe Prelude.Text,
+    loRaWAN :: Prelude.Maybe LoRaWANMulticast,
+    name :: Prelude.Maybe Prelude.Text,
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMulticastGroup' 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', 'updateMulticastGroup_description' - Undocumented member.
+--
+-- 'loRaWAN', 'updateMulticastGroup_loRaWAN' - Undocumented member.
+--
+-- 'name', 'updateMulticastGroup_name' - Undocumented member.
+--
+-- 'id', 'updateMulticastGroup_id' - Undocumented member.
+newUpdateMulticastGroup ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateMulticastGroup
+newUpdateMulticastGroup pId_ =
+  UpdateMulticastGroup'
+    { description =
+        Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Undocumented member.
+updateMulticastGroup_description :: Lens.Lens' UpdateMulticastGroup (Prelude.Maybe Prelude.Text)
+updateMulticastGroup_description = Lens.lens (\UpdateMulticastGroup' {description} -> description) (\s@UpdateMulticastGroup' {} a -> s {description = a} :: UpdateMulticastGroup)
+
+-- | Undocumented member.
+updateMulticastGroup_loRaWAN :: Lens.Lens' UpdateMulticastGroup (Prelude.Maybe LoRaWANMulticast)
+updateMulticastGroup_loRaWAN = Lens.lens (\UpdateMulticastGroup' {loRaWAN} -> loRaWAN) (\s@UpdateMulticastGroup' {} a -> s {loRaWAN = a} :: UpdateMulticastGroup)
+
+-- | Undocumented member.
+updateMulticastGroup_name :: Lens.Lens' UpdateMulticastGroup (Prelude.Maybe Prelude.Text)
+updateMulticastGroup_name = Lens.lens (\UpdateMulticastGroup' {name} -> name) (\s@UpdateMulticastGroup' {} a -> s {name = a} :: UpdateMulticastGroup)
+
+-- | Undocumented member.
+updateMulticastGroup_id :: Lens.Lens' UpdateMulticastGroup Prelude.Text
+updateMulticastGroup_id = Lens.lens (\UpdateMulticastGroup' {id} -> id) (\s@UpdateMulticastGroup' {} a -> s {id = a} :: UpdateMulticastGroup)
+
+instance Core.AWSRequest UpdateMulticastGroup where
+  type
+    AWSResponse UpdateMulticastGroup =
+      UpdateMulticastGroupResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateMulticastGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateMulticastGroup where
+  hashWithSalt _salt UpdateMulticastGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateMulticastGroup where
+  rnf UpdateMulticastGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateMulticastGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateMulticastGroup where
+  toJSON UpdateMulticastGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateMulticastGroup where
+  toPath UpdateMulticastGroup' {..} =
+    Prelude.mconcat
+      ["/multicast-groups/", Data.toBS id]
+
+instance Data.ToQuery UpdateMulticastGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateMulticastGroupResponse' smart constructor.
+data UpdateMulticastGroupResponse = UpdateMulticastGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMulticastGroupResponse' 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', 'updateMulticastGroupResponse_httpStatus' - The response's http status code.
+newUpdateMulticastGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateMulticastGroupResponse
+newUpdateMulticastGroupResponse pHttpStatus_ =
+  UpdateMulticastGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateMulticastGroupResponse_httpStatus :: Lens.Lens' UpdateMulticastGroupResponse Prelude.Int
+updateMulticastGroupResponse_httpStatus = Lens.lens (\UpdateMulticastGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateMulticastGroupResponse' {} a -> s {httpStatus = a} :: UpdateMulticastGroupResponse)
+
+instance Prelude.NFData UpdateMulticastGroupResponse where
+  rnf UpdateMulticastGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateNetworkAnalyzerConfiguration.hs b/gen/Amazonka/IoTWireless/UpdateNetworkAnalyzerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateNetworkAnalyzerConfiguration.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.IoTWireless.UpdateNetworkAnalyzerConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update network analyzer configuration.
+module Amazonka.IoTWireless.UpdateNetworkAnalyzerConfiguration
+  ( -- * Creating a Request
+    UpdateNetworkAnalyzerConfiguration (..),
+    newUpdateNetworkAnalyzerConfiguration,
+
+    -- * Request Lenses
+    updateNetworkAnalyzerConfiguration_description,
+    updateNetworkAnalyzerConfiguration_traceContent,
+    updateNetworkAnalyzerConfiguration_wirelessDevicesToAdd,
+    updateNetworkAnalyzerConfiguration_wirelessDevicesToRemove,
+    updateNetworkAnalyzerConfiguration_wirelessGatewaysToAdd,
+    updateNetworkAnalyzerConfiguration_wirelessGatewaysToRemove,
+    updateNetworkAnalyzerConfiguration_configurationName,
+
+    -- * Destructuring the Response
+    UpdateNetworkAnalyzerConfigurationResponse (..),
+    newUpdateNetworkAnalyzerConfigurationResponse,
+
+    -- * Response Lenses
+    updateNetworkAnalyzerConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateNetworkAnalyzerConfiguration' smart constructor.
+data UpdateNetworkAnalyzerConfiguration = UpdateNetworkAnalyzerConfiguration'
+  { description :: Prelude.Maybe Prelude.Text,
+    traceContent :: Prelude.Maybe TraceContent,
+    -- | Wireless device resources to add to the network analyzer configuration.
+    -- Provide the @WirelessDeviceId@ of the resource to add in the input
+    -- array.
+    wirelessDevicesToAdd :: Prelude.Maybe [Prelude.Text],
+    -- | Wireless device resources to remove from the network analyzer
+    -- configuration. Provide the @WirelessDeviceId@ of the resources to remove
+    -- in the input array.
+    wirelessDevicesToRemove :: Prelude.Maybe [Prelude.Text],
+    -- | Wireless gateway resources to add to the network analyzer configuration.
+    -- Provide the @WirelessGatewayId@ of the resource to add in the input
+    -- array.
+    wirelessGatewaysToAdd :: Prelude.Maybe [Prelude.Text],
+    -- | Wireless gateway resources to remove from the network analyzer
+    -- configuration. Provide the @WirelessGatewayId@ of the resources to
+    -- remove in the input array.
+    wirelessGatewaysToRemove :: Prelude.Maybe [Prelude.Text],
+    configurationName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNetworkAnalyzerConfiguration' 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', 'updateNetworkAnalyzerConfiguration_description' - Undocumented member.
+--
+-- 'traceContent', 'updateNetworkAnalyzerConfiguration_traceContent' - Undocumented member.
+--
+-- 'wirelessDevicesToAdd', 'updateNetworkAnalyzerConfiguration_wirelessDevicesToAdd' - Wireless device resources to add to the network analyzer configuration.
+-- Provide the @WirelessDeviceId@ of the resource to add in the input
+-- array.
+--
+-- 'wirelessDevicesToRemove', 'updateNetworkAnalyzerConfiguration_wirelessDevicesToRemove' - Wireless device resources to remove from the network analyzer
+-- configuration. Provide the @WirelessDeviceId@ of the resources to remove
+-- in the input array.
+--
+-- 'wirelessGatewaysToAdd', 'updateNetworkAnalyzerConfiguration_wirelessGatewaysToAdd' - Wireless gateway resources to add to the network analyzer configuration.
+-- Provide the @WirelessGatewayId@ of the resource to add in the input
+-- array.
+--
+-- 'wirelessGatewaysToRemove', 'updateNetworkAnalyzerConfiguration_wirelessGatewaysToRemove' - Wireless gateway resources to remove from the network analyzer
+-- configuration. Provide the @WirelessGatewayId@ of the resources to
+-- remove in the input array.
+--
+-- 'configurationName', 'updateNetworkAnalyzerConfiguration_configurationName' - Undocumented member.
+newUpdateNetworkAnalyzerConfiguration ::
+  -- | 'configurationName'
+  Prelude.Text ->
+  UpdateNetworkAnalyzerConfiguration
+newUpdateNetworkAnalyzerConfiguration
+  pConfigurationName_ =
+    UpdateNetworkAnalyzerConfiguration'
+      { description =
+          Prelude.Nothing,
+        traceContent = Prelude.Nothing,
+        wirelessDevicesToAdd = Prelude.Nothing,
+        wirelessDevicesToRemove =
+          Prelude.Nothing,
+        wirelessGatewaysToAdd = Prelude.Nothing,
+        wirelessGatewaysToRemove =
+          Prelude.Nothing,
+        configurationName = pConfigurationName_
+      }
+
+-- | Undocumented member.
+updateNetworkAnalyzerConfiguration_description :: Lens.Lens' UpdateNetworkAnalyzerConfiguration (Prelude.Maybe Prelude.Text)
+updateNetworkAnalyzerConfiguration_description = Lens.lens (\UpdateNetworkAnalyzerConfiguration' {description} -> description) (\s@UpdateNetworkAnalyzerConfiguration' {} a -> s {description = a} :: UpdateNetworkAnalyzerConfiguration)
+
+-- | Undocumented member.
+updateNetworkAnalyzerConfiguration_traceContent :: Lens.Lens' UpdateNetworkAnalyzerConfiguration (Prelude.Maybe TraceContent)
+updateNetworkAnalyzerConfiguration_traceContent = Lens.lens (\UpdateNetworkAnalyzerConfiguration' {traceContent} -> traceContent) (\s@UpdateNetworkAnalyzerConfiguration' {} a -> s {traceContent = a} :: UpdateNetworkAnalyzerConfiguration)
+
+-- | Wireless device resources to add to the network analyzer configuration.
+-- Provide the @WirelessDeviceId@ of the resource to add in the input
+-- array.
+updateNetworkAnalyzerConfiguration_wirelessDevicesToAdd :: Lens.Lens' UpdateNetworkAnalyzerConfiguration (Prelude.Maybe [Prelude.Text])
+updateNetworkAnalyzerConfiguration_wirelessDevicesToAdd = Lens.lens (\UpdateNetworkAnalyzerConfiguration' {wirelessDevicesToAdd} -> wirelessDevicesToAdd) (\s@UpdateNetworkAnalyzerConfiguration' {} a -> s {wirelessDevicesToAdd = a} :: UpdateNetworkAnalyzerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Wireless device resources to remove from the network analyzer
+-- configuration. Provide the @WirelessDeviceId@ of the resources to remove
+-- in the input array.
+updateNetworkAnalyzerConfiguration_wirelessDevicesToRemove :: Lens.Lens' UpdateNetworkAnalyzerConfiguration (Prelude.Maybe [Prelude.Text])
+updateNetworkAnalyzerConfiguration_wirelessDevicesToRemove = Lens.lens (\UpdateNetworkAnalyzerConfiguration' {wirelessDevicesToRemove} -> wirelessDevicesToRemove) (\s@UpdateNetworkAnalyzerConfiguration' {} a -> s {wirelessDevicesToRemove = a} :: UpdateNetworkAnalyzerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Wireless gateway resources to add to the network analyzer configuration.
+-- Provide the @WirelessGatewayId@ of the resource to add in the input
+-- array.
+updateNetworkAnalyzerConfiguration_wirelessGatewaysToAdd :: Lens.Lens' UpdateNetworkAnalyzerConfiguration (Prelude.Maybe [Prelude.Text])
+updateNetworkAnalyzerConfiguration_wirelessGatewaysToAdd = Lens.lens (\UpdateNetworkAnalyzerConfiguration' {wirelessGatewaysToAdd} -> wirelessGatewaysToAdd) (\s@UpdateNetworkAnalyzerConfiguration' {} a -> s {wirelessGatewaysToAdd = a} :: UpdateNetworkAnalyzerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Wireless gateway resources to remove from the network analyzer
+-- configuration. Provide the @WirelessGatewayId@ of the resources to
+-- remove in the input array.
+updateNetworkAnalyzerConfiguration_wirelessGatewaysToRemove :: Lens.Lens' UpdateNetworkAnalyzerConfiguration (Prelude.Maybe [Prelude.Text])
+updateNetworkAnalyzerConfiguration_wirelessGatewaysToRemove = Lens.lens (\UpdateNetworkAnalyzerConfiguration' {wirelessGatewaysToRemove} -> wirelessGatewaysToRemove) (\s@UpdateNetworkAnalyzerConfiguration' {} a -> s {wirelessGatewaysToRemove = a} :: UpdateNetworkAnalyzerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+updateNetworkAnalyzerConfiguration_configurationName :: Lens.Lens' UpdateNetworkAnalyzerConfiguration Prelude.Text
+updateNetworkAnalyzerConfiguration_configurationName = Lens.lens (\UpdateNetworkAnalyzerConfiguration' {configurationName} -> configurationName) (\s@UpdateNetworkAnalyzerConfiguration' {} a -> s {configurationName = a} :: UpdateNetworkAnalyzerConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateNetworkAnalyzerConfiguration
+  where
+  type
+    AWSResponse UpdateNetworkAnalyzerConfiguration =
+      UpdateNetworkAnalyzerConfigurationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateNetworkAnalyzerConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateNetworkAnalyzerConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateNetworkAnalyzerConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` traceContent
+        `Prelude.hashWithSalt` wirelessDevicesToAdd
+        `Prelude.hashWithSalt` wirelessDevicesToRemove
+        `Prelude.hashWithSalt` wirelessGatewaysToAdd
+        `Prelude.hashWithSalt` wirelessGatewaysToRemove
+        `Prelude.hashWithSalt` configurationName
+
+instance
+  Prelude.NFData
+    UpdateNetworkAnalyzerConfiguration
+  where
+  rnf UpdateNetworkAnalyzerConfiguration' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf traceContent
+      `Prelude.seq` Prelude.rnf wirelessDevicesToAdd
+      `Prelude.seq` Prelude.rnf wirelessDevicesToRemove
+      `Prelude.seq` Prelude.rnf wirelessGatewaysToAdd
+      `Prelude.seq` Prelude.rnf wirelessGatewaysToRemove
+      `Prelude.seq` Prelude.rnf configurationName
+
+instance
+  Data.ToHeaders
+    UpdateNetworkAnalyzerConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToJSON
+    UpdateNetworkAnalyzerConfiguration
+  where
+  toJSON UpdateNetworkAnalyzerConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("TraceContent" Data..=) Prelude.<$> traceContent,
+            ("WirelessDevicesToAdd" Data..=)
+              Prelude.<$> wirelessDevicesToAdd,
+            ("WirelessDevicesToRemove" Data..=)
+              Prelude.<$> wirelessDevicesToRemove,
+            ("WirelessGatewaysToAdd" Data..=)
+              Prelude.<$> wirelessGatewaysToAdd,
+            ("WirelessGatewaysToRemove" Data..=)
+              Prelude.<$> wirelessGatewaysToRemove
+          ]
+      )
+
+instance
+  Data.ToPath
+    UpdateNetworkAnalyzerConfiguration
+  where
+  toPath UpdateNetworkAnalyzerConfiguration' {..} =
+    Prelude.mconcat
+      [ "/network-analyzer-configurations/",
+        Data.toBS configurationName
+      ]
+
+instance
+  Data.ToQuery
+    UpdateNetworkAnalyzerConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateNetworkAnalyzerConfigurationResponse' smart constructor.
+data UpdateNetworkAnalyzerConfigurationResponse = UpdateNetworkAnalyzerConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateNetworkAnalyzerConfigurationResponse' 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', 'updateNetworkAnalyzerConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateNetworkAnalyzerConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateNetworkAnalyzerConfigurationResponse
+newUpdateNetworkAnalyzerConfigurationResponse
+  pHttpStatus_ =
+    UpdateNetworkAnalyzerConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateNetworkAnalyzerConfigurationResponse_httpStatus :: Lens.Lens' UpdateNetworkAnalyzerConfigurationResponse Prelude.Int
+updateNetworkAnalyzerConfigurationResponse_httpStatus = Lens.lens (\UpdateNetworkAnalyzerConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateNetworkAnalyzerConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateNetworkAnalyzerConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateNetworkAnalyzerConfigurationResponse
+  where
+  rnf UpdateNetworkAnalyzerConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdatePartnerAccount.hs b/gen/Amazonka/IoTWireless/UpdatePartnerAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdatePartnerAccount.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.IoTWireless.UpdatePartnerAccount
+-- 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 properties of a partner account.
+module Amazonka.IoTWireless.UpdatePartnerAccount
+  ( -- * Creating a Request
+    UpdatePartnerAccount (..),
+    newUpdatePartnerAccount,
+
+    -- * Request Lenses
+    updatePartnerAccount_sidewalk,
+    updatePartnerAccount_partnerAccountId,
+    updatePartnerAccount_partnerType,
+
+    -- * Destructuring the Response
+    UpdatePartnerAccountResponse (..),
+    newUpdatePartnerAccountResponse,
+
+    -- * Response Lenses
+    updatePartnerAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdatePartnerAccount' smart constructor.
+data UpdatePartnerAccount = UpdatePartnerAccount'
+  { -- | The Sidewalk account credentials.
+    sidewalk :: SidewalkUpdateAccount,
+    -- | The ID of the partner account to update.
+    partnerAccountId :: Prelude.Text,
+    -- | The partner type.
+    partnerType :: PartnerType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdatePartnerAccount' 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:
+--
+-- 'sidewalk', 'updatePartnerAccount_sidewalk' - The Sidewalk account credentials.
+--
+-- 'partnerAccountId', 'updatePartnerAccount_partnerAccountId' - The ID of the partner account to update.
+--
+-- 'partnerType', 'updatePartnerAccount_partnerType' - The partner type.
+newUpdatePartnerAccount ::
+  -- | 'sidewalk'
+  SidewalkUpdateAccount ->
+  -- | 'partnerAccountId'
+  Prelude.Text ->
+  -- | 'partnerType'
+  PartnerType ->
+  UpdatePartnerAccount
+newUpdatePartnerAccount
+  pSidewalk_
+  pPartnerAccountId_
+  pPartnerType_ =
+    UpdatePartnerAccount'
+      { sidewalk = pSidewalk_,
+        partnerAccountId = pPartnerAccountId_,
+        partnerType = pPartnerType_
+      }
+
+-- | The Sidewalk account credentials.
+updatePartnerAccount_sidewalk :: Lens.Lens' UpdatePartnerAccount SidewalkUpdateAccount
+updatePartnerAccount_sidewalk = Lens.lens (\UpdatePartnerAccount' {sidewalk} -> sidewalk) (\s@UpdatePartnerAccount' {} a -> s {sidewalk = a} :: UpdatePartnerAccount)
+
+-- | The ID of the partner account to update.
+updatePartnerAccount_partnerAccountId :: Lens.Lens' UpdatePartnerAccount Prelude.Text
+updatePartnerAccount_partnerAccountId = Lens.lens (\UpdatePartnerAccount' {partnerAccountId} -> partnerAccountId) (\s@UpdatePartnerAccount' {} a -> s {partnerAccountId = a} :: UpdatePartnerAccount)
+
+-- | The partner type.
+updatePartnerAccount_partnerType :: Lens.Lens' UpdatePartnerAccount PartnerType
+updatePartnerAccount_partnerType = Lens.lens (\UpdatePartnerAccount' {partnerType} -> partnerType) (\s@UpdatePartnerAccount' {} a -> s {partnerType = a} :: UpdatePartnerAccount)
+
+instance Core.AWSRequest UpdatePartnerAccount where
+  type
+    AWSResponse UpdatePartnerAccount =
+      UpdatePartnerAccountResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdatePartnerAccountResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdatePartnerAccount where
+  hashWithSalt _salt UpdatePartnerAccount' {..} =
+    _salt
+      `Prelude.hashWithSalt` sidewalk
+      `Prelude.hashWithSalt` partnerAccountId
+      `Prelude.hashWithSalt` partnerType
+
+instance Prelude.NFData UpdatePartnerAccount where
+  rnf UpdatePartnerAccount' {..} =
+    Prelude.rnf sidewalk
+      `Prelude.seq` Prelude.rnf partnerAccountId
+      `Prelude.seq` Prelude.rnf partnerType
+
+instance Data.ToHeaders UpdatePartnerAccount where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdatePartnerAccount where
+  toJSON UpdatePartnerAccount' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Sidewalk" Data..= sidewalk)]
+      )
+
+instance Data.ToPath UpdatePartnerAccount where
+  toPath UpdatePartnerAccount' {..} =
+    Prelude.mconcat
+      ["/partner-accounts/", Data.toBS partnerAccountId]
+
+instance Data.ToQuery UpdatePartnerAccount where
+  toQuery UpdatePartnerAccount' {..} =
+    Prelude.mconcat ["partnerType" Data.=: partnerType]
+
+-- | /See:/ 'newUpdatePartnerAccountResponse' smart constructor.
+data UpdatePartnerAccountResponse = UpdatePartnerAccountResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdatePartnerAccountResponse' 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', 'updatePartnerAccountResponse_httpStatus' - The response's http status code.
+newUpdatePartnerAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdatePartnerAccountResponse
+newUpdatePartnerAccountResponse pHttpStatus_ =
+  UpdatePartnerAccountResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updatePartnerAccountResponse_httpStatus :: Lens.Lens' UpdatePartnerAccountResponse Prelude.Int
+updatePartnerAccountResponse_httpStatus = Lens.lens (\UpdatePartnerAccountResponse' {httpStatus} -> httpStatus) (\s@UpdatePartnerAccountResponse' {} a -> s {httpStatus = a} :: UpdatePartnerAccountResponse)
+
+instance Prelude.NFData UpdatePartnerAccountResponse where
+  rnf UpdatePartnerAccountResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateResourceEventConfiguration.hs b/gen/Amazonka/IoTWireless/UpdateResourceEventConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateResourceEventConfiguration.hs
@@ -0,0 +1,278 @@
+{-# 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.IoTWireless.UpdateResourceEventConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the event configuration for a particular resource identifier.
+module Amazonka.IoTWireless.UpdateResourceEventConfiguration
+  ( -- * Creating a Request
+    UpdateResourceEventConfiguration (..),
+    newUpdateResourceEventConfiguration,
+
+    -- * Request Lenses
+    updateResourceEventConfiguration_connectionStatus,
+    updateResourceEventConfiguration_deviceRegistrationState,
+    updateResourceEventConfiguration_join,
+    updateResourceEventConfiguration_messageDeliveryStatus,
+    updateResourceEventConfiguration_partnerType,
+    updateResourceEventConfiguration_proximity,
+    updateResourceEventConfiguration_identifier,
+    updateResourceEventConfiguration_identifierType,
+
+    -- * Destructuring the Response
+    UpdateResourceEventConfigurationResponse (..),
+    newUpdateResourceEventConfigurationResponse,
+
+    -- * Response Lenses
+    updateResourceEventConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateResourceEventConfiguration' smart constructor.
+data UpdateResourceEventConfiguration = UpdateResourceEventConfiguration'
+  { -- | Event configuration for the connection status event.
+    connectionStatus :: Prelude.Maybe ConnectionStatusEventConfiguration,
+    -- | Event configuration for the device registration state event.
+    deviceRegistrationState :: Prelude.Maybe DeviceRegistrationStateEventConfiguration,
+    -- | Event configuration for the join event.
+    join :: Prelude.Maybe JoinEventConfiguration,
+    -- | Event configuration for the message delivery status event.
+    messageDeliveryStatus :: Prelude.Maybe MessageDeliveryStatusEventConfiguration,
+    -- | Partner type of the resource if the identifier type is
+    -- @PartnerAccountId@
+    partnerType :: Prelude.Maybe EventNotificationPartnerType,
+    -- | Event configuration for the proximity event.
+    proximity :: Prelude.Maybe ProximityEventConfiguration,
+    -- | Resource identifier to opt in for event messaging.
+    identifier :: Prelude.Text,
+    -- | Identifier type of the particular resource identifier for event
+    -- configuration.
+    identifierType :: IdentifierType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceEventConfiguration' 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', 'updateResourceEventConfiguration_connectionStatus' - Event configuration for the connection status event.
+--
+-- 'deviceRegistrationState', 'updateResourceEventConfiguration_deviceRegistrationState' - Event configuration for the device registration state event.
+--
+-- 'join', 'updateResourceEventConfiguration_join' - Event configuration for the join event.
+--
+-- 'messageDeliveryStatus', 'updateResourceEventConfiguration_messageDeliveryStatus' - Event configuration for the message delivery status event.
+--
+-- 'partnerType', 'updateResourceEventConfiguration_partnerType' - Partner type of the resource if the identifier type is
+-- @PartnerAccountId@
+--
+-- 'proximity', 'updateResourceEventConfiguration_proximity' - Event configuration for the proximity event.
+--
+-- 'identifier', 'updateResourceEventConfiguration_identifier' - Resource identifier to opt in for event messaging.
+--
+-- 'identifierType', 'updateResourceEventConfiguration_identifierType' - Identifier type of the particular resource identifier for event
+-- configuration.
+newUpdateResourceEventConfiguration ::
+  -- | 'identifier'
+  Prelude.Text ->
+  -- | 'identifierType'
+  IdentifierType ->
+  UpdateResourceEventConfiguration
+newUpdateResourceEventConfiguration
+  pIdentifier_
+  pIdentifierType_ =
+    UpdateResourceEventConfiguration'
+      { connectionStatus =
+          Prelude.Nothing,
+        deviceRegistrationState = Prelude.Nothing,
+        join = Prelude.Nothing,
+        messageDeliveryStatus = Prelude.Nothing,
+        partnerType = Prelude.Nothing,
+        proximity = Prelude.Nothing,
+        identifier = pIdentifier_,
+        identifierType = pIdentifierType_
+      }
+
+-- | Event configuration for the connection status event.
+updateResourceEventConfiguration_connectionStatus :: Lens.Lens' UpdateResourceEventConfiguration (Prelude.Maybe ConnectionStatusEventConfiguration)
+updateResourceEventConfiguration_connectionStatus = Lens.lens (\UpdateResourceEventConfiguration' {connectionStatus} -> connectionStatus) (\s@UpdateResourceEventConfiguration' {} a -> s {connectionStatus = a} :: UpdateResourceEventConfiguration)
+
+-- | Event configuration for the device registration state event.
+updateResourceEventConfiguration_deviceRegistrationState :: Lens.Lens' UpdateResourceEventConfiguration (Prelude.Maybe DeviceRegistrationStateEventConfiguration)
+updateResourceEventConfiguration_deviceRegistrationState = Lens.lens (\UpdateResourceEventConfiguration' {deviceRegistrationState} -> deviceRegistrationState) (\s@UpdateResourceEventConfiguration' {} a -> s {deviceRegistrationState = a} :: UpdateResourceEventConfiguration)
+
+-- | Event configuration for the join event.
+updateResourceEventConfiguration_join :: Lens.Lens' UpdateResourceEventConfiguration (Prelude.Maybe JoinEventConfiguration)
+updateResourceEventConfiguration_join = Lens.lens (\UpdateResourceEventConfiguration' {join} -> join) (\s@UpdateResourceEventConfiguration' {} a -> s {join = a} :: UpdateResourceEventConfiguration)
+
+-- | Event configuration for the message delivery status event.
+updateResourceEventConfiguration_messageDeliveryStatus :: Lens.Lens' UpdateResourceEventConfiguration (Prelude.Maybe MessageDeliveryStatusEventConfiguration)
+updateResourceEventConfiguration_messageDeliveryStatus = Lens.lens (\UpdateResourceEventConfiguration' {messageDeliveryStatus} -> messageDeliveryStatus) (\s@UpdateResourceEventConfiguration' {} a -> s {messageDeliveryStatus = a} :: UpdateResourceEventConfiguration)
+
+-- | Partner type of the resource if the identifier type is
+-- @PartnerAccountId@
+updateResourceEventConfiguration_partnerType :: Lens.Lens' UpdateResourceEventConfiguration (Prelude.Maybe EventNotificationPartnerType)
+updateResourceEventConfiguration_partnerType = Lens.lens (\UpdateResourceEventConfiguration' {partnerType} -> partnerType) (\s@UpdateResourceEventConfiguration' {} a -> s {partnerType = a} :: UpdateResourceEventConfiguration)
+
+-- | Event configuration for the proximity event.
+updateResourceEventConfiguration_proximity :: Lens.Lens' UpdateResourceEventConfiguration (Prelude.Maybe ProximityEventConfiguration)
+updateResourceEventConfiguration_proximity = Lens.lens (\UpdateResourceEventConfiguration' {proximity} -> proximity) (\s@UpdateResourceEventConfiguration' {} a -> s {proximity = a} :: UpdateResourceEventConfiguration)
+
+-- | Resource identifier to opt in for event messaging.
+updateResourceEventConfiguration_identifier :: Lens.Lens' UpdateResourceEventConfiguration Prelude.Text
+updateResourceEventConfiguration_identifier = Lens.lens (\UpdateResourceEventConfiguration' {identifier} -> identifier) (\s@UpdateResourceEventConfiguration' {} a -> s {identifier = a} :: UpdateResourceEventConfiguration)
+
+-- | Identifier type of the particular resource identifier for event
+-- configuration.
+updateResourceEventConfiguration_identifierType :: Lens.Lens' UpdateResourceEventConfiguration IdentifierType
+updateResourceEventConfiguration_identifierType = Lens.lens (\UpdateResourceEventConfiguration' {identifierType} -> identifierType) (\s@UpdateResourceEventConfiguration' {} a -> s {identifierType = a} :: UpdateResourceEventConfiguration)
+
+instance
+  Core.AWSRequest
+    UpdateResourceEventConfiguration
+  where
+  type
+    AWSResponse UpdateResourceEventConfiguration =
+      UpdateResourceEventConfigurationResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateResourceEventConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateResourceEventConfiguration
+  where
+  hashWithSalt
+    _salt
+    UpdateResourceEventConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` connectionStatus
+        `Prelude.hashWithSalt` deviceRegistrationState
+        `Prelude.hashWithSalt` join
+        `Prelude.hashWithSalt` messageDeliveryStatus
+        `Prelude.hashWithSalt` partnerType
+        `Prelude.hashWithSalt` proximity
+        `Prelude.hashWithSalt` identifier
+        `Prelude.hashWithSalt` identifierType
+
+instance
+  Prelude.NFData
+    UpdateResourceEventConfiguration
+  where
+  rnf UpdateResourceEventConfiguration' {..} =
+    Prelude.rnf connectionStatus
+      `Prelude.seq` Prelude.rnf deviceRegistrationState
+      `Prelude.seq` Prelude.rnf join
+      `Prelude.seq` Prelude.rnf messageDeliveryStatus
+      `Prelude.seq` Prelude.rnf partnerType
+      `Prelude.seq` Prelude.rnf proximity
+      `Prelude.seq` Prelude.rnf identifier
+      `Prelude.seq` Prelude.rnf identifierType
+
+instance
+  Data.ToHeaders
+    UpdateResourceEventConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateResourceEventConfiguration where
+  toJSON UpdateResourceEventConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ConnectionStatus" Data..=)
+              Prelude.<$> connectionStatus,
+            ("DeviceRegistrationState" Data..=)
+              Prelude.<$> deviceRegistrationState,
+            ("Join" Data..=) Prelude.<$> join,
+            ("MessageDeliveryStatus" Data..=)
+              Prelude.<$> messageDeliveryStatus,
+            ("Proximity" Data..=) Prelude.<$> proximity
+          ]
+      )
+
+instance Data.ToPath UpdateResourceEventConfiguration where
+  toPath UpdateResourceEventConfiguration' {..} =
+    Prelude.mconcat
+      ["/event-configurations/", Data.toBS identifier]
+
+instance
+  Data.ToQuery
+    UpdateResourceEventConfiguration
+  where
+  toQuery UpdateResourceEventConfiguration' {..} =
+    Prelude.mconcat
+      [ "partnerType" Data.=: partnerType,
+        "identifierType" Data.=: identifierType
+      ]
+
+-- | /See:/ 'newUpdateResourceEventConfigurationResponse' smart constructor.
+data UpdateResourceEventConfigurationResponse = UpdateResourceEventConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourceEventConfigurationResponse' 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', 'updateResourceEventConfigurationResponse_httpStatus' - The response's http status code.
+newUpdateResourceEventConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateResourceEventConfigurationResponse
+newUpdateResourceEventConfigurationResponse
+  pHttpStatus_ =
+    UpdateResourceEventConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+updateResourceEventConfigurationResponse_httpStatus :: Lens.Lens' UpdateResourceEventConfigurationResponse Prelude.Int
+updateResourceEventConfigurationResponse_httpStatus = Lens.lens (\UpdateResourceEventConfigurationResponse' {httpStatus} -> httpStatus) (\s@UpdateResourceEventConfigurationResponse' {} a -> s {httpStatus = a} :: UpdateResourceEventConfigurationResponse)
+
+instance
+  Prelude.NFData
+    UpdateResourceEventConfigurationResponse
+  where
+  rnf UpdateResourceEventConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateResourcePosition.hs b/gen/Amazonka/IoTWireless/UpdateResourcePosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateResourcePosition.hs
@@ -0,0 +1,203 @@
+{-# 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.IoTWireless.UpdateResourcePosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the position information of a given wireless device or a wireless
+-- gateway resource. The postion coordinates are based on the
+-- <https://gisgeography.com/wgs84-world-geodetic-system/ World Geodetic System (WGS84)>.
+module Amazonka.IoTWireless.UpdateResourcePosition
+  ( -- * Creating a Request
+    UpdateResourcePosition (..),
+    newUpdateResourcePosition,
+
+    -- * Request Lenses
+    updateResourcePosition_geoJsonPayload,
+    updateResourcePosition_resourceIdentifier,
+    updateResourcePosition_resourceType,
+
+    -- * Destructuring the Response
+    UpdateResourcePositionResponse (..),
+    newUpdateResourcePositionResponse,
+
+    -- * Response Lenses
+    updateResourcePositionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateResourcePosition' smart constructor.
+data UpdateResourcePosition = UpdateResourcePosition'
+  { -- | The position information of the resource, displayed as a JSON payload.
+    -- The payload uses the GeoJSON format, which a format that\'s used to
+    -- encode geographic data structures. For more information, see
+    -- <https://geojson.org/ GeoJSON>.
+    geoJsonPayload :: Prelude.Maybe Prelude.ByteString,
+    -- | The identifier of the resource for which position information is
+    -- updated. It can be the wireless device ID or the wireless gateway ID
+    -- depending on the resource type.
+    resourceIdentifier :: Prelude.Text,
+    -- | The type of resource for which position information is updated, which
+    -- can be a wireless device or a wireless gateway.
+    resourceType :: PositionResourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourcePosition' 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:
+--
+-- 'geoJsonPayload', 'updateResourcePosition_geoJsonPayload' - The position information of the resource, displayed as a JSON payload.
+-- The payload uses the GeoJSON format, which a format that\'s used to
+-- encode geographic data structures. For more information, see
+-- <https://geojson.org/ GeoJSON>.
+--
+-- 'resourceIdentifier', 'updateResourcePosition_resourceIdentifier' - The identifier of the resource for which position information is
+-- updated. It can be the wireless device ID or the wireless gateway ID
+-- depending on the resource type.
+--
+-- 'resourceType', 'updateResourcePosition_resourceType' - The type of resource for which position information is updated, which
+-- can be a wireless device or a wireless gateway.
+newUpdateResourcePosition ::
+  -- | 'resourceIdentifier'
+  Prelude.Text ->
+  -- | 'resourceType'
+  PositionResourceType ->
+  UpdateResourcePosition
+newUpdateResourcePosition
+  pResourceIdentifier_
+  pResourceType_ =
+    UpdateResourcePosition'
+      { geoJsonPayload =
+          Prelude.Nothing,
+        resourceIdentifier = pResourceIdentifier_,
+        resourceType = pResourceType_
+      }
+
+-- | The position information of the resource, displayed as a JSON payload.
+-- The payload uses the GeoJSON format, which a format that\'s used to
+-- encode geographic data structures. For more information, see
+-- <https://geojson.org/ GeoJSON>.
+updateResourcePosition_geoJsonPayload :: Lens.Lens' UpdateResourcePosition (Prelude.Maybe Prelude.ByteString)
+updateResourcePosition_geoJsonPayload = Lens.lens (\UpdateResourcePosition' {geoJsonPayload} -> geoJsonPayload) (\s@UpdateResourcePosition' {} a -> s {geoJsonPayload = a} :: UpdateResourcePosition)
+
+-- | The identifier of the resource for which position information is
+-- updated. It can be the wireless device ID or the wireless gateway ID
+-- depending on the resource type.
+updateResourcePosition_resourceIdentifier :: Lens.Lens' UpdateResourcePosition Prelude.Text
+updateResourcePosition_resourceIdentifier = Lens.lens (\UpdateResourcePosition' {resourceIdentifier} -> resourceIdentifier) (\s@UpdateResourcePosition' {} a -> s {resourceIdentifier = a} :: UpdateResourcePosition)
+
+-- | The type of resource for which position information is updated, which
+-- can be a wireless device or a wireless gateway.
+updateResourcePosition_resourceType :: Lens.Lens' UpdateResourcePosition PositionResourceType
+updateResourcePosition_resourceType = Lens.lens (\UpdateResourcePosition' {resourceType} -> resourceType) (\s@UpdateResourcePosition' {} a -> s {resourceType = a} :: UpdateResourcePosition)
+
+instance Core.AWSRequest UpdateResourcePosition where
+  type
+    AWSResponse UpdateResourcePosition =
+      UpdateResourcePositionResponse
+  request overrides =
+    Request.patchBody (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateResourcePositionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateResourcePosition where
+  hashWithSalt _salt UpdateResourcePosition' {..} =
+    _salt
+      `Prelude.hashWithSalt` geoJsonPayload
+      `Prelude.hashWithSalt` resourceIdentifier
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData UpdateResourcePosition where
+  rnf UpdateResourcePosition' {..} =
+    Prelude.rnf geoJsonPayload
+      `Prelude.seq` Prelude.rnf resourceIdentifier
+      `Prelude.seq` Prelude.rnf resourceType
+
+instance Data.ToBody UpdateResourcePosition where
+  toBody UpdateResourcePosition' {..} =
+    Data.toBody geoJsonPayload
+
+instance Data.ToHeaders UpdateResourcePosition where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath UpdateResourcePosition where
+  toPath UpdateResourcePosition' {..} =
+    Prelude.mconcat
+      [ "/resource-positions/",
+        Data.toBS resourceIdentifier
+      ]
+
+instance Data.ToQuery UpdateResourcePosition where
+  toQuery UpdateResourcePosition' {..} =
+    Prelude.mconcat
+      ["resourceType" Data.=: resourceType]
+
+-- | /See:/ 'newUpdateResourcePositionResponse' smart constructor.
+data UpdateResourcePositionResponse = UpdateResourcePositionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateResourcePositionResponse' 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', 'updateResourcePositionResponse_httpStatus' - The response's http status code.
+newUpdateResourcePositionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateResourcePositionResponse
+newUpdateResourcePositionResponse pHttpStatus_ =
+  UpdateResourcePositionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateResourcePositionResponse_httpStatus :: Lens.Lens' UpdateResourcePositionResponse Prelude.Int
+updateResourcePositionResponse_httpStatus = Lens.lens (\UpdateResourcePositionResponse' {httpStatus} -> httpStatus) (\s@UpdateResourcePositionResponse' {} a -> s {httpStatus = a} :: UpdateResourcePositionResponse)
+
+instance
+  Prelude.NFData
+    UpdateResourcePositionResponse
+  where
+  rnf UpdateResourcePositionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateWirelessDevice.hs b/gen/Amazonka/IoTWireless/UpdateWirelessDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateWirelessDevice.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.IoTWireless.UpdateWirelessDevice
+-- 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 properties of a wireless device.
+module Amazonka.IoTWireless.UpdateWirelessDevice
+  ( -- * Creating a Request
+    UpdateWirelessDevice (..),
+    newUpdateWirelessDevice,
+
+    -- * Request Lenses
+    updateWirelessDevice_description,
+    updateWirelessDevice_destinationName,
+    updateWirelessDevice_loRaWAN,
+    updateWirelessDevice_name,
+    updateWirelessDevice_positioning,
+    updateWirelessDevice_id,
+
+    -- * Destructuring the Response
+    UpdateWirelessDeviceResponse (..),
+    newUpdateWirelessDeviceResponse,
+
+    -- * Response Lenses
+    updateWirelessDeviceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateWirelessDevice' smart constructor.
+data UpdateWirelessDevice = UpdateWirelessDevice'
+  { -- | A new description of the resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the new destination for the device.
+    destinationName :: Prelude.Maybe Prelude.Text,
+    -- | The updated wireless device\'s configuration.
+    loRaWAN :: Prelude.Maybe LoRaWANUpdateDevice,
+    -- | The new name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | FPort values for the GNSS, stream, and ClockSync functions of the
+    -- positioning information.
+    positioning :: Prelude.Maybe PositioningConfigStatus,
+    -- | The ID of the resource to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWirelessDevice' 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', 'updateWirelessDevice_description' - A new description of the resource.
+--
+-- 'destinationName', 'updateWirelessDevice_destinationName' - The name of the new destination for the device.
+--
+-- 'loRaWAN', 'updateWirelessDevice_loRaWAN' - The updated wireless device\'s configuration.
+--
+-- 'name', 'updateWirelessDevice_name' - The new name of the resource.
+--
+-- 'positioning', 'updateWirelessDevice_positioning' - FPort values for the GNSS, stream, and ClockSync functions of the
+-- positioning information.
+--
+-- 'id', 'updateWirelessDevice_id' - The ID of the resource to update.
+newUpdateWirelessDevice ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateWirelessDevice
+newUpdateWirelessDevice pId_ =
+  UpdateWirelessDevice'
+    { description =
+        Prelude.Nothing,
+      destinationName = Prelude.Nothing,
+      loRaWAN = Prelude.Nothing,
+      name = Prelude.Nothing,
+      positioning = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | A new description of the resource.
+updateWirelessDevice_description :: Lens.Lens' UpdateWirelessDevice (Prelude.Maybe Prelude.Text)
+updateWirelessDevice_description = Lens.lens (\UpdateWirelessDevice' {description} -> description) (\s@UpdateWirelessDevice' {} a -> s {description = a} :: UpdateWirelessDevice)
+
+-- | The name of the new destination for the device.
+updateWirelessDevice_destinationName :: Lens.Lens' UpdateWirelessDevice (Prelude.Maybe Prelude.Text)
+updateWirelessDevice_destinationName = Lens.lens (\UpdateWirelessDevice' {destinationName} -> destinationName) (\s@UpdateWirelessDevice' {} a -> s {destinationName = a} :: UpdateWirelessDevice)
+
+-- | The updated wireless device\'s configuration.
+updateWirelessDevice_loRaWAN :: Lens.Lens' UpdateWirelessDevice (Prelude.Maybe LoRaWANUpdateDevice)
+updateWirelessDevice_loRaWAN = Lens.lens (\UpdateWirelessDevice' {loRaWAN} -> loRaWAN) (\s@UpdateWirelessDevice' {} a -> s {loRaWAN = a} :: UpdateWirelessDevice)
+
+-- | The new name of the resource.
+updateWirelessDevice_name :: Lens.Lens' UpdateWirelessDevice (Prelude.Maybe Prelude.Text)
+updateWirelessDevice_name = Lens.lens (\UpdateWirelessDevice' {name} -> name) (\s@UpdateWirelessDevice' {} a -> s {name = a} :: UpdateWirelessDevice)
+
+-- | FPort values for the GNSS, stream, and ClockSync functions of the
+-- positioning information.
+updateWirelessDevice_positioning :: Lens.Lens' UpdateWirelessDevice (Prelude.Maybe PositioningConfigStatus)
+updateWirelessDevice_positioning = Lens.lens (\UpdateWirelessDevice' {positioning} -> positioning) (\s@UpdateWirelessDevice' {} a -> s {positioning = a} :: UpdateWirelessDevice)
+
+-- | The ID of the resource to update.
+updateWirelessDevice_id :: Lens.Lens' UpdateWirelessDevice Prelude.Text
+updateWirelessDevice_id = Lens.lens (\UpdateWirelessDevice' {id} -> id) (\s@UpdateWirelessDevice' {} a -> s {id = a} :: UpdateWirelessDevice)
+
+instance Core.AWSRequest UpdateWirelessDevice where
+  type
+    AWSResponse UpdateWirelessDevice =
+      UpdateWirelessDeviceResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateWirelessDeviceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateWirelessDevice where
+  hashWithSalt _salt UpdateWirelessDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destinationName
+      `Prelude.hashWithSalt` loRaWAN
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` positioning
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateWirelessDevice where
+  rnf UpdateWirelessDevice' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationName
+      `Prelude.seq` Prelude.rnf loRaWAN
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf positioning
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateWirelessDevice where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateWirelessDevice where
+  toJSON UpdateWirelessDevice' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("DestinationName" Data..=)
+              Prelude.<$> destinationName,
+            ("LoRaWAN" Data..=) Prelude.<$> loRaWAN,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Positioning" Data..=) Prelude.<$> positioning
+          ]
+      )
+
+instance Data.ToPath UpdateWirelessDevice where
+  toPath UpdateWirelessDevice' {..} =
+    Prelude.mconcat
+      ["/wireless-devices/", Data.toBS id]
+
+instance Data.ToQuery UpdateWirelessDevice where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWirelessDeviceResponse' smart constructor.
+data UpdateWirelessDeviceResponse = UpdateWirelessDeviceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWirelessDeviceResponse' 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', 'updateWirelessDeviceResponse_httpStatus' - The response's http status code.
+newUpdateWirelessDeviceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateWirelessDeviceResponse
+newUpdateWirelessDeviceResponse pHttpStatus_ =
+  UpdateWirelessDeviceResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateWirelessDeviceResponse_httpStatus :: Lens.Lens' UpdateWirelessDeviceResponse Prelude.Int
+updateWirelessDeviceResponse_httpStatus = Lens.lens (\UpdateWirelessDeviceResponse' {httpStatus} -> httpStatus) (\s@UpdateWirelessDeviceResponse' {} a -> s {httpStatus = a} :: UpdateWirelessDeviceResponse)
+
+instance Prelude.NFData UpdateWirelessDeviceResponse where
+  rnf UpdateWirelessDeviceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/UpdateWirelessGateway.hs b/gen/Amazonka/IoTWireless/UpdateWirelessGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/UpdateWirelessGateway.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.IoTWireless.UpdateWirelessGateway
+-- 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 properties of a wireless gateway.
+module Amazonka.IoTWireless.UpdateWirelessGateway
+  ( -- * Creating a Request
+    UpdateWirelessGateway (..),
+    newUpdateWirelessGateway,
+
+    -- * Request Lenses
+    updateWirelessGateway_description,
+    updateWirelessGateway_joinEuiFilters,
+    updateWirelessGateway_name,
+    updateWirelessGateway_netIdFilters,
+    updateWirelessGateway_id,
+
+    -- * Destructuring the Response
+    UpdateWirelessGatewayResponse (..),
+    newUpdateWirelessGatewayResponse,
+
+    -- * Response Lenses
+    updateWirelessGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateWirelessGateway' smart constructor.
+data UpdateWirelessGateway = UpdateWirelessGateway'
+  { -- | A new description of the resource.
+    description :: Prelude.Maybe Prelude.Text,
+    joinEuiFilters :: Prelude.Maybe [Prelude.NonEmpty Prelude.Text],
+    -- | The new name of the resource.
+    name :: Prelude.Maybe Prelude.Text,
+    netIdFilters :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the resource to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWirelessGateway' 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', 'updateWirelessGateway_description' - A new description of the resource.
+--
+-- 'joinEuiFilters', 'updateWirelessGateway_joinEuiFilters' - Undocumented member.
+--
+-- 'name', 'updateWirelessGateway_name' - The new name of the resource.
+--
+-- 'netIdFilters', 'updateWirelessGateway_netIdFilters' - Undocumented member.
+--
+-- 'id', 'updateWirelessGateway_id' - The ID of the resource to update.
+newUpdateWirelessGateway ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateWirelessGateway
+newUpdateWirelessGateway pId_ =
+  UpdateWirelessGateway'
+    { description =
+        Prelude.Nothing,
+      joinEuiFilters = Prelude.Nothing,
+      name = Prelude.Nothing,
+      netIdFilters = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | A new description of the resource.
+updateWirelessGateway_description :: Lens.Lens' UpdateWirelessGateway (Prelude.Maybe Prelude.Text)
+updateWirelessGateway_description = Lens.lens (\UpdateWirelessGateway' {description} -> description) (\s@UpdateWirelessGateway' {} a -> s {description = a} :: UpdateWirelessGateway)
+
+-- | Undocumented member.
+updateWirelessGateway_joinEuiFilters :: Lens.Lens' UpdateWirelessGateway (Prelude.Maybe [Prelude.NonEmpty Prelude.Text])
+updateWirelessGateway_joinEuiFilters = Lens.lens (\UpdateWirelessGateway' {joinEuiFilters} -> joinEuiFilters) (\s@UpdateWirelessGateway' {} a -> s {joinEuiFilters = a} :: UpdateWirelessGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The new name of the resource.
+updateWirelessGateway_name :: Lens.Lens' UpdateWirelessGateway (Prelude.Maybe Prelude.Text)
+updateWirelessGateway_name = Lens.lens (\UpdateWirelessGateway' {name} -> name) (\s@UpdateWirelessGateway' {} a -> s {name = a} :: UpdateWirelessGateway)
+
+-- | Undocumented member.
+updateWirelessGateway_netIdFilters :: Lens.Lens' UpdateWirelessGateway (Prelude.Maybe [Prelude.Text])
+updateWirelessGateway_netIdFilters = Lens.lens (\UpdateWirelessGateway' {netIdFilters} -> netIdFilters) (\s@UpdateWirelessGateway' {} a -> s {netIdFilters = a} :: UpdateWirelessGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the resource to update.
+updateWirelessGateway_id :: Lens.Lens' UpdateWirelessGateway Prelude.Text
+updateWirelessGateway_id = Lens.lens (\UpdateWirelessGateway' {id} -> id) (\s@UpdateWirelessGateway' {} a -> s {id = a} :: UpdateWirelessGateway)
+
+instance Core.AWSRequest UpdateWirelessGateway where
+  type
+    AWSResponse UpdateWirelessGateway =
+      UpdateWirelessGatewayResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateWirelessGatewayResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateWirelessGateway where
+  hashWithSalt _salt UpdateWirelessGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` joinEuiFilters
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` netIdFilters
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateWirelessGateway where
+  rnf UpdateWirelessGateway' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf joinEuiFilters
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf netIdFilters
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateWirelessGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToJSON UpdateWirelessGateway where
+  toJSON UpdateWirelessGateway' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("JoinEuiFilters" Data..=)
+              Prelude.<$> joinEuiFilters,
+            ("Name" Data..=) Prelude.<$> name,
+            ("NetIdFilters" Data..=) Prelude.<$> netIdFilters
+          ]
+      )
+
+instance Data.ToPath UpdateWirelessGateway where
+  toPath UpdateWirelessGateway' {..} =
+    Prelude.mconcat
+      ["/wireless-gateways/", Data.toBS id]
+
+instance Data.ToQuery UpdateWirelessGateway where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateWirelessGatewayResponse' smart constructor.
+data UpdateWirelessGatewayResponse = UpdateWirelessGatewayResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateWirelessGatewayResponse' 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', 'updateWirelessGatewayResponse_httpStatus' - The response's http status code.
+newUpdateWirelessGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateWirelessGatewayResponse
+newUpdateWirelessGatewayResponse pHttpStatus_ =
+  UpdateWirelessGatewayResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateWirelessGatewayResponse_httpStatus :: Lens.Lens' UpdateWirelessGatewayResponse Prelude.Int
+updateWirelessGatewayResponse_httpStatus = Lens.lens (\UpdateWirelessGatewayResponse' {httpStatus} -> httpStatus) (\s@UpdateWirelessGatewayResponse' {} a -> s {httpStatus = a} :: UpdateWirelessGatewayResponse)
+
+instance Prelude.NFData UpdateWirelessGatewayResponse where
+  rnf UpdateWirelessGatewayResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTWireless/Waiters.hs b/gen/Amazonka/IoTWireless/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTWireless/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.IoTWireless.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.IoTWireless.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTWireless.Lens
+import Amazonka.IoTWireless.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- 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 Main (main) where
+
+import Test.Amazonka.IoTWireless
+import Test.Amazonka.IoTWireless.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "IoTWireless"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/IoTWireless.hs b/test/Test/Amazonka/Gen/IoTWireless.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/IoTWireless.hs
@@ -0,0 +1,1958 @@
+{-# 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.IoTWireless
+-- 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.IoTWireless where
+
+import Amazonka.IoTWireless
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.IoTWireless.Internal
+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"
+--         [ requestAssociateAwsAccountWithPartnerAccount $
+--             newAssociateAwsAccountWithPartnerAccount
+--
+--         , requestAssociateMulticastGroupWithFuotaTask $
+--             newAssociateMulticastGroupWithFuotaTask
+--
+--         , requestAssociateWirelessDeviceWithFuotaTask $
+--             newAssociateWirelessDeviceWithFuotaTask
+--
+--         , requestAssociateWirelessDeviceWithMulticastGroup $
+--             newAssociateWirelessDeviceWithMulticastGroup
+--
+--         , requestAssociateWirelessDeviceWithThing $
+--             newAssociateWirelessDeviceWithThing
+--
+--         , requestAssociateWirelessGatewayWithCertificate $
+--             newAssociateWirelessGatewayWithCertificate
+--
+--         , requestAssociateWirelessGatewayWithThing $
+--             newAssociateWirelessGatewayWithThing
+--
+--         , requestCancelMulticastGroupSession $
+--             newCancelMulticastGroupSession
+--
+--         , requestCreateDestination $
+--             newCreateDestination
+--
+--         , requestCreateDeviceProfile $
+--             newCreateDeviceProfile
+--
+--         , requestCreateFuotaTask $
+--             newCreateFuotaTask
+--
+--         , requestCreateMulticastGroup $
+--             newCreateMulticastGroup
+--
+--         , requestCreateNetworkAnalyzerConfiguration $
+--             newCreateNetworkAnalyzerConfiguration
+--
+--         , requestCreateServiceProfile $
+--             newCreateServiceProfile
+--
+--         , requestCreateWirelessDevice $
+--             newCreateWirelessDevice
+--
+--         , requestCreateWirelessGateway $
+--             newCreateWirelessGateway
+--
+--         , requestCreateWirelessGatewayTask $
+--             newCreateWirelessGatewayTask
+--
+--         , requestCreateWirelessGatewayTaskDefinition $
+--             newCreateWirelessGatewayTaskDefinition
+--
+--         , requestDeleteDestination $
+--             newDeleteDestination
+--
+--         , requestDeleteDeviceProfile $
+--             newDeleteDeviceProfile
+--
+--         , requestDeleteFuotaTask $
+--             newDeleteFuotaTask
+--
+--         , requestDeleteMulticastGroup $
+--             newDeleteMulticastGroup
+--
+--         , requestDeleteNetworkAnalyzerConfiguration $
+--             newDeleteNetworkAnalyzerConfiguration
+--
+--         , requestDeleteQueuedMessages $
+--             newDeleteQueuedMessages
+--
+--         , requestDeleteServiceProfile $
+--             newDeleteServiceProfile
+--
+--         , requestDeleteWirelessDevice $
+--             newDeleteWirelessDevice
+--
+--         , requestDeleteWirelessGateway $
+--             newDeleteWirelessGateway
+--
+--         , requestDeleteWirelessGatewayTask $
+--             newDeleteWirelessGatewayTask
+--
+--         , requestDeleteWirelessGatewayTaskDefinition $
+--             newDeleteWirelessGatewayTaskDefinition
+--
+--         , requestDisassociateAwsAccountFromPartnerAccount $
+--             newDisassociateAwsAccountFromPartnerAccount
+--
+--         , requestDisassociateMulticastGroupFromFuotaTask $
+--             newDisassociateMulticastGroupFromFuotaTask
+--
+--         , requestDisassociateWirelessDeviceFromFuotaTask $
+--             newDisassociateWirelessDeviceFromFuotaTask
+--
+--         , requestDisassociateWirelessDeviceFromMulticastGroup $
+--             newDisassociateWirelessDeviceFromMulticastGroup
+--
+--         , requestDisassociateWirelessDeviceFromThing $
+--             newDisassociateWirelessDeviceFromThing
+--
+--         , requestDisassociateWirelessGatewayFromCertificate $
+--             newDisassociateWirelessGatewayFromCertificate
+--
+--         , requestDisassociateWirelessGatewayFromThing $
+--             newDisassociateWirelessGatewayFromThing
+--
+--         , requestGetDestination $
+--             newGetDestination
+--
+--         , requestGetDeviceProfile $
+--             newGetDeviceProfile
+--
+--         , requestGetEventConfigurationByResourceTypes $
+--             newGetEventConfigurationByResourceTypes
+--
+--         , requestGetFuotaTask $
+--             newGetFuotaTask
+--
+--         , requestGetLogLevelsByResourceTypes $
+--             newGetLogLevelsByResourceTypes
+--
+--         , requestGetMulticastGroup $
+--             newGetMulticastGroup
+--
+--         , requestGetMulticastGroupSession $
+--             newGetMulticastGroupSession
+--
+--         , requestGetNetworkAnalyzerConfiguration $
+--             newGetNetworkAnalyzerConfiguration
+--
+--         , requestGetPartnerAccount $
+--             newGetPartnerAccount
+--
+--         , requestGetPositionEstimate $
+--             newGetPositionEstimate
+--
+--         , requestGetResourceEventConfiguration $
+--             newGetResourceEventConfiguration
+--
+--         , requestGetResourceLogLevel $
+--             newGetResourceLogLevel
+--
+--         , requestGetResourcePosition $
+--             newGetResourcePosition
+--
+--         , requestGetServiceEndpoint $
+--             newGetServiceEndpoint
+--
+--         , requestGetServiceProfile $
+--             newGetServiceProfile
+--
+--         , requestGetWirelessDevice $
+--             newGetWirelessDevice
+--
+--         , requestGetWirelessDeviceStatistics $
+--             newGetWirelessDeviceStatistics
+--
+--         , requestGetWirelessGateway $
+--             newGetWirelessGateway
+--
+--         , requestGetWirelessGatewayCertificate $
+--             newGetWirelessGatewayCertificate
+--
+--         , requestGetWirelessGatewayFirmwareInformation $
+--             newGetWirelessGatewayFirmwareInformation
+--
+--         , requestGetWirelessGatewayStatistics $
+--             newGetWirelessGatewayStatistics
+--
+--         , requestGetWirelessGatewayTask $
+--             newGetWirelessGatewayTask
+--
+--         , requestGetWirelessGatewayTaskDefinition $
+--             newGetWirelessGatewayTaskDefinition
+--
+--         , requestListDestinations $
+--             newListDestinations
+--
+--         , requestListDeviceProfiles $
+--             newListDeviceProfiles
+--
+--         , requestListEventConfigurations $
+--             newListEventConfigurations
+--
+--         , requestListFuotaTasks $
+--             newListFuotaTasks
+--
+--         , requestListMulticastGroups $
+--             newListMulticastGroups
+--
+--         , requestListMulticastGroupsByFuotaTask $
+--             newListMulticastGroupsByFuotaTask
+--
+--         , requestListNetworkAnalyzerConfigurations $
+--             newListNetworkAnalyzerConfigurations
+--
+--         , requestListPartnerAccounts $
+--             newListPartnerAccounts
+--
+--         , requestListQueuedMessages $
+--             newListQueuedMessages
+--
+--         , requestListServiceProfiles $
+--             newListServiceProfiles
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListWirelessDevices $
+--             newListWirelessDevices
+--
+--         , requestListWirelessGatewayTaskDefinitions $
+--             newListWirelessGatewayTaskDefinitions
+--
+--         , requestListWirelessGateways $
+--             newListWirelessGateways
+--
+--         , requestPutResourceLogLevel $
+--             newPutResourceLogLevel
+--
+--         , requestResetAllResourceLogLevels $
+--             newResetAllResourceLogLevels
+--
+--         , requestResetResourceLogLevel $
+--             newResetResourceLogLevel
+--
+--         , requestSendDataToMulticastGroup $
+--             newSendDataToMulticastGroup
+--
+--         , requestSendDataToWirelessDevice $
+--             newSendDataToWirelessDevice
+--
+--         , requestStartBulkAssociateWirelessDeviceWithMulticastGroup $
+--             newStartBulkAssociateWirelessDeviceWithMulticastGroup
+--
+--         , requestStartBulkDisassociateWirelessDeviceFromMulticastGroup $
+--             newStartBulkDisassociateWirelessDeviceFromMulticastGroup
+--
+--         , requestStartFuotaTask $
+--             newStartFuotaTask
+--
+--         , requestStartMulticastGroupSession $
+--             newStartMulticastGroupSession
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestTestWirelessDevice $
+--             newTestWirelessDevice
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateDestination $
+--             newUpdateDestination
+--
+--         , requestUpdateEventConfigurationByResourceTypes $
+--             newUpdateEventConfigurationByResourceTypes
+--
+--         , requestUpdateFuotaTask $
+--             newUpdateFuotaTask
+--
+--         , requestUpdateLogLevelsByResourceTypes $
+--             newUpdateLogLevelsByResourceTypes
+--
+--         , requestUpdateMulticastGroup $
+--             newUpdateMulticastGroup
+--
+--         , requestUpdateNetworkAnalyzerConfiguration $
+--             newUpdateNetworkAnalyzerConfiguration
+--
+--         , requestUpdatePartnerAccount $
+--             newUpdatePartnerAccount
+--
+--         , requestUpdateResourceEventConfiguration $
+--             newUpdateResourceEventConfiguration
+--
+--         , requestUpdateResourcePosition $
+--             newUpdateResourcePosition
+--
+--         , requestUpdateWirelessDevice $
+--             newUpdateWirelessDevice
+--
+--         , requestUpdateWirelessGateway $
+--             newUpdateWirelessGateway
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateAwsAccountWithPartnerAccount $
+--             newAssociateAwsAccountWithPartnerAccountResponse
+--
+--         , responseAssociateMulticastGroupWithFuotaTask $
+--             newAssociateMulticastGroupWithFuotaTaskResponse
+--
+--         , responseAssociateWirelessDeviceWithFuotaTask $
+--             newAssociateWirelessDeviceWithFuotaTaskResponse
+--
+--         , responseAssociateWirelessDeviceWithMulticastGroup $
+--             newAssociateWirelessDeviceWithMulticastGroupResponse
+--
+--         , responseAssociateWirelessDeviceWithThing $
+--             newAssociateWirelessDeviceWithThingResponse
+--
+--         , responseAssociateWirelessGatewayWithCertificate $
+--             newAssociateWirelessGatewayWithCertificateResponse
+--
+--         , responseAssociateWirelessGatewayWithThing $
+--             newAssociateWirelessGatewayWithThingResponse
+--
+--         , responseCancelMulticastGroupSession $
+--             newCancelMulticastGroupSessionResponse
+--
+--         , responseCreateDestination $
+--             newCreateDestinationResponse
+--
+--         , responseCreateDeviceProfile $
+--             newCreateDeviceProfileResponse
+--
+--         , responseCreateFuotaTask $
+--             newCreateFuotaTaskResponse
+--
+--         , responseCreateMulticastGroup $
+--             newCreateMulticastGroupResponse
+--
+--         , responseCreateNetworkAnalyzerConfiguration $
+--             newCreateNetworkAnalyzerConfigurationResponse
+--
+--         , responseCreateServiceProfile $
+--             newCreateServiceProfileResponse
+--
+--         , responseCreateWirelessDevice $
+--             newCreateWirelessDeviceResponse
+--
+--         , responseCreateWirelessGateway $
+--             newCreateWirelessGatewayResponse
+--
+--         , responseCreateWirelessGatewayTask $
+--             newCreateWirelessGatewayTaskResponse
+--
+--         , responseCreateWirelessGatewayTaskDefinition $
+--             newCreateWirelessGatewayTaskDefinitionResponse
+--
+--         , responseDeleteDestination $
+--             newDeleteDestinationResponse
+--
+--         , responseDeleteDeviceProfile $
+--             newDeleteDeviceProfileResponse
+--
+--         , responseDeleteFuotaTask $
+--             newDeleteFuotaTaskResponse
+--
+--         , responseDeleteMulticastGroup $
+--             newDeleteMulticastGroupResponse
+--
+--         , responseDeleteNetworkAnalyzerConfiguration $
+--             newDeleteNetworkAnalyzerConfigurationResponse
+--
+--         , responseDeleteQueuedMessages $
+--             newDeleteQueuedMessagesResponse
+--
+--         , responseDeleteServiceProfile $
+--             newDeleteServiceProfileResponse
+--
+--         , responseDeleteWirelessDevice $
+--             newDeleteWirelessDeviceResponse
+--
+--         , responseDeleteWirelessGateway $
+--             newDeleteWirelessGatewayResponse
+--
+--         , responseDeleteWirelessGatewayTask $
+--             newDeleteWirelessGatewayTaskResponse
+--
+--         , responseDeleteWirelessGatewayTaskDefinition $
+--             newDeleteWirelessGatewayTaskDefinitionResponse
+--
+--         , responseDisassociateAwsAccountFromPartnerAccount $
+--             newDisassociateAwsAccountFromPartnerAccountResponse
+--
+--         , responseDisassociateMulticastGroupFromFuotaTask $
+--             newDisassociateMulticastGroupFromFuotaTaskResponse
+--
+--         , responseDisassociateWirelessDeviceFromFuotaTask $
+--             newDisassociateWirelessDeviceFromFuotaTaskResponse
+--
+--         , responseDisassociateWirelessDeviceFromMulticastGroup $
+--             newDisassociateWirelessDeviceFromMulticastGroupResponse
+--
+--         , responseDisassociateWirelessDeviceFromThing $
+--             newDisassociateWirelessDeviceFromThingResponse
+--
+--         , responseDisassociateWirelessGatewayFromCertificate $
+--             newDisassociateWirelessGatewayFromCertificateResponse
+--
+--         , responseDisassociateWirelessGatewayFromThing $
+--             newDisassociateWirelessGatewayFromThingResponse
+--
+--         , responseGetDestination $
+--             newGetDestinationResponse
+--
+--         , responseGetDeviceProfile $
+--             newGetDeviceProfileResponse
+--
+--         , responseGetEventConfigurationByResourceTypes $
+--             newGetEventConfigurationByResourceTypesResponse
+--
+--         , responseGetFuotaTask $
+--             newGetFuotaTaskResponse
+--
+--         , responseGetLogLevelsByResourceTypes $
+--             newGetLogLevelsByResourceTypesResponse
+--
+--         , responseGetMulticastGroup $
+--             newGetMulticastGroupResponse
+--
+--         , responseGetMulticastGroupSession $
+--             newGetMulticastGroupSessionResponse
+--
+--         , responseGetNetworkAnalyzerConfiguration $
+--             newGetNetworkAnalyzerConfigurationResponse
+--
+--         , responseGetPartnerAccount $
+--             newGetPartnerAccountResponse
+--
+--         , responseGetPositionEstimate $
+--             newGetPositionEstimateResponse
+--
+--         , responseGetResourceEventConfiguration $
+--             newGetResourceEventConfigurationResponse
+--
+--         , responseGetResourceLogLevel $
+--             newGetResourceLogLevelResponse
+--
+--         , responseGetResourcePosition $
+--             newGetResourcePositionResponse
+--
+--         , responseGetServiceEndpoint $
+--             newGetServiceEndpointResponse
+--
+--         , responseGetServiceProfile $
+--             newGetServiceProfileResponse
+--
+--         , responseGetWirelessDevice $
+--             newGetWirelessDeviceResponse
+--
+--         , responseGetWirelessDeviceStatistics $
+--             newGetWirelessDeviceStatisticsResponse
+--
+--         , responseGetWirelessGateway $
+--             newGetWirelessGatewayResponse
+--
+--         , responseGetWirelessGatewayCertificate $
+--             newGetWirelessGatewayCertificateResponse
+--
+--         , responseGetWirelessGatewayFirmwareInformation $
+--             newGetWirelessGatewayFirmwareInformationResponse
+--
+--         , responseGetWirelessGatewayStatistics $
+--             newGetWirelessGatewayStatisticsResponse
+--
+--         , responseGetWirelessGatewayTask $
+--             newGetWirelessGatewayTaskResponse
+--
+--         , responseGetWirelessGatewayTaskDefinition $
+--             newGetWirelessGatewayTaskDefinitionResponse
+--
+--         , responseListDestinations $
+--             newListDestinationsResponse
+--
+--         , responseListDeviceProfiles $
+--             newListDeviceProfilesResponse
+--
+--         , responseListEventConfigurations $
+--             newListEventConfigurationsResponse
+--
+--         , responseListFuotaTasks $
+--             newListFuotaTasksResponse
+--
+--         , responseListMulticastGroups $
+--             newListMulticastGroupsResponse
+--
+--         , responseListMulticastGroupsByFuotaTask $
+--             newListMulticastGroupsByFuotaTaskResponse
+--
+--         , responseListNetworkAnalyzerConfigurations $
+--             newListNetworkAnalyzerConfigurationsResponse
+--
+--         , responseListPartnerAccounts $
+--             newListPartnerAccountsResponse
+--
+--         , responseListQueuedMessages $
+--             newListQueuedMessagesResponse
+--
+--         , responseListServiceProfiles $
+--             newListServiceProfilesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListWirelessDevices $
+--             newListWirelessDevicesResponse
+--
+--         , responseListWirelessGatewayTaskDefinitions $
+--             newListWirelessGatewayTaskDefinitionsResponse
+--
+--         , responseListWirelessGateways $
+--             newListWirelessGatewaysResponse
+--
+--         , responsePutResourceLogLevel $
+--             newPutResourceLogLevelResponse
+--
+--         , responseResetAllResourceLogLevels $
+--             newResetAllResourceLogLevelsResponse
+--
+--         , responseResetResourceLogLevel $
+--             newResetResourceLogLevelResponse
+--
+--         , responseSendDataToMulticastGroup $
+--             newSendDataToMulticastGroupResponse
+--
+--         , responseSendDataToWirelessDevice $
+--             newSendDataToWirelessDeviceResponse
+--
+--         , responseStartBulkAssociateWirelessDeviceWithMulticastGroup $
+--             newStartBulkAssociateWirelessDeviceWithMulticastGroupResponse
+--
+--         , responseStartBulkDisassociateWirelessDeviceFromMulticastGroup $
+--             newStartBulkDisassociateWirelessDeviceFromMulticastGroupResponse
+--
+--         , responseStartFuotaTask $
+--             newStartFuotaTaskResponse
+--
+--         , responseStartMulticastGroupSession $
+--             newStartMulticastGroupSessionResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseTestWirelessDevice $
+--             newTestWirelessDeviceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateDestination $
+--             newUpdateDestinationResponse
+--
+--         , responseUpdateEventConfigurationByResourceTypes $
+--             newUpdateEventConfigurationByResourceTypesResponse
+--
+--         , responseUpdateFuotaTask $
+--             newUpdateFuotaTaskResponse
+--
+--         , responseUpdateLogLevelsByResourceTypes $
+--             newUpdateLogLevelsByResourceTypesResponse
+--
+--         , responseUpdateMulticastGroup $
+--             newUpdateMulticastGroupResponse
+--
+--         , responseUpdateNetworkAnalyzerConfiguration $
+--             newUpdateNetworkAnalyzerConfigurationResponse
+--
+--         , responseUpdatePartnerAccount $
+--             newUpdatePartnerAccountResponse
+--
+--         , responseUpdateResourceEventConfiguration $
+--             newUpdateResourceEventConfigurationResponse
+--
+--         , responseUpdateResourcePosition $
+--             newUpdateResourcePositionResponse
+--
+--         , responseUpdateWirelessDevice $
+--             newUpdateWirelessDeviceResponse
+--
+--         , responseUpdateWirelessGateway $
+--             newUpdateWirelessGatewayResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateAwsAccountWithPartnerAccount :: AssociateAwsAccountWithPartnerAccount -> TestTree
+requestAssociateAwsAccountWithPartnerAccount =
+  req
+    "AssociateAwsAccountWithPartnerAccount"
+    "fixture/AssociateAwsAccountWithPartnerAccount.yaml"
+
+requestAssociateMulticastGroupWithFuotaTask :: AssociateMulticastGroupWithFuotaTask -> TestTree
+requestAssociateMulticastGroupWithFuotaTask =
+  req
+    "AssociateMulticastGroupWithFuotaTask"
+    "fixture/AssociateMulticastGroupWithFuotaTask.yaml"
+
+requestAssociateWirelessDeviceWithFuotaTask :: AssociateWirelessDeviceWithFuotaTask -> TestTree
+requestAssociateWirelessDeviceWithFuotaTask =
+  req
+    "AssociateWirelessDeviceWithFuotaTask"
+    "fixture/AssociateWirelessDeviceWithFuotaTask.yaml"
+
+requestAssociateWirelessDeviceWithMulticastGroup :: AssociateWirelessDeviceWithMulticastGroup -> TestTree
+requestAssociateWirelessDeviceWithMulticastGroup =
+  req
+    "AssociateWirelessDeviceWithMulticastGroup"
+    "fixture/AssociateWirelessDeviceWithMulticastGroup.yaml"
+
+requestAssociateWirelessDeviceWithThing :: AssociateWirelessDeviceWithThing -> TestTree
+requestAssociateWirelessDeviceWithThing =
+  req
+    "AssociateWirelessDeviceWithThing"
+    "fixture/AssociateWirelessDeviceWithThing.yaml"
+
+requestAssociateWirelessGatewayWithCertificate :: AssociateWirelessGatewayWithCertificate -> TestTree
+requestAssociateWirelessGatewayWithCertificate =
+  req
+    "AssociateWirelessGatewayWithCertificate"
+    "fixture/AssociateWirelessGatewayWithCertificate.yaml"
+
+requestAssociateWirelessGatewayWithThing :: AssociateWirelessGatewayWithThing -> TestTree
+requestAssociateWirelessGatewayWithThing =
+  req
+    "AssociateWirelessGatewayWithThing"
+    "fixture/AssociateWirelessGatewayWithThing.yaml"
+
+requestCancelMulticastGroupSession :: CancelMulticastGroupSession -> TestTree
+requestCancelMulticastGroupSession =
+  req
+    "CancelMulticastGroupSession"
+    "fixture/CancelMulticastGroupSession.yaml"
+
+requestCreateDestination :: CreateDestination -> TestTree
+requestCreateDestination =
+  req
+    "CreateDestination"
+    "fixture/CreateDestination.yaml"
+
+requestCreateDeviceProfile :: CreateDeviceProfile -> TestTree
+requestCreateDeviceProfile =
+  req
+    "CreateDeviceProfile"
+    "fixture/CreateDeviceProfile.yaml"
+
+requestCreateFuotaTask :: CreateFuotaTask -> TestTree
+requestCreateFuotaTask =
+  req
+    "CreateFuotaTask"
+    "fixture/CreateFuotaTask.yaml"
+
+requestCreateMulticastGroup :: CreateMulticastGroup -> TestTree
+requestCreateMulticastGroup =
+  req
+    "CreateMulticastGroup"
+    "fixture/CreateMulticastGroup.yaml"
+
+requestCreateNetworkAnalyzerConfiguration :: CreateNetworkAnalyzerConfiguration -> TestTree
+requestCreateNetworkAnalyzerConfiguration =
+  req
+    "CreateNetworkAnalyzerConfiguration"
+    "fixture/CreateNetworkAnalyzerConfiguration.yaml"
+
+requestCreateServiceProfile :: CreateServiceProfile -> TestTree
+requestCreateServiceProfile =
+  req
+    "CreateServiceProfile"
+    "fixture/CreateServiceProfile.yaml"
+
+requestCreateWirelessDevice :: CreateWirelessDevice -> TestTree
+requestCreateWirelessDevice =
+  req
+    "CreateWirelessDevice"
+    "fixture/CreateWirelessDevice.yaml"
+
+requestCreateWirelessGateway :: CreateWirelessGateway -> TestTree
+requestCreateWirelessGateway =
+  req
+    "CreateWirelessGateway"
+    "fixture/CreateWirelessGateway.yaml"
+
+requestCreateWirelessGatewayTask :: CreateWirelessGatewayTask -> TestTree
+requestCreateWirelessGatewayTask =
+  req
+    "CreateWirelessGatewayTask"
+    "fixture/CreateWirelessGatewayTask.yaml"
+
+requestCreateWirelessGatewayTaskDefinition :: CreateWirelessGatewayTaskDefinition -> TestTree
+requestCreateWirelessGatewayTaskDefinition =
+  req
+    "CreateWirelessGatewayTaskDefinition"
+    "fixture/CreateWirelessGatewayTaskDefinition.yaml"
+
+requestDeleteDestination :: DeleteDestination -> TestTree
+requestDeleteDestination =
+  req
+    "DeleteDestination"
+    "fixture/DeleteDestination.yaml"
+
+requestDeleteDeviceProfile :: DeleteDeviceProfile -> TestTree
+requestDeleteDeviceProfile =
+  req
+    "DeleteDeviceProfile"
+    "fixture/DeleteDeviceProfile.yaml"
+
+requestDeleteFuotaTask :: DeleteFuotaTask -> TestTree
+requestDeleteFuotaTask =
+  req
+    "DeleteFuotaTask"
+    "fixture/DeleteFuotaTask.yaml"
+
+requestDeleteMulticastGroup :: DeleteMulticastGroup -> TestTree
+requestDeleteMulticastGroup =
+  req
+    "DeleteMulticastGroup"
+    "fixture/DeleteMulticastGroup.yaml"
+
+requestDeleteNetworkAnalyzerConfiguration :: DeleteNetworkAnalyzerConfiguration -> TestTree
+requestDeleteNetworkAnalyzerConfiguration =
+  req
+    "DeleteNetworkAnalyzerConfiguration"
+    "fixture/DeleteNetworkAnalyzerConfiguration.yaml"
+
+requestDeleteQueuedMessages :: DeleteQueuedMessages -> TestTree
+requestDeleteQueuedMessages =
+  req
+    "DeleteQueuedMessages"
+    "fixture/DeleteQueuedMessages.yaml"
+
+requestDeleteServiceProfile :: DeleteServiceProfile -> TestTree
+requestDeleteServiceProfile =
+  req
+    "DeleteServiceProfile"
+    "fixture/DeleteServiceProfile.yaml"
+
+requestDeleteWirelessDevice :: DeleteWirelessDevice -> TestTree
+requestDeleteWirelessDevice =
+  req
+    "DeleteWirelessDevice"
+    "fixture/DeleteWirelessDevice.yaml"
+
+requestDeleteWirelessGateway :: DeleteWirelessGateway -> TestTree
+requestDeleteWirelessGateway =
+  req
+    "DeleteWirelessGateway"
+    "fixture/DeleteWirelessGateway.yaml"
+
+requestDeleteWirelessGatewayTask :: DeleteWirelessGatewayTask -> TestTree
+requestDeleteWirelessGatewayTask =
+  req
+    "DeleteWirelessGatewayTask"
+    "fixture/DeleteWirelessGatewayTask.yaml"
+
+requestDeleteWirelessGatewayTaskDefinition :: DeleteWirelessGatewayTaskDefinition -> TestTree
+requestDeleteWirelessGatewayTaskDefinition =
+  req
+    "DeleteWirelessGatewayTaskDefinition"
+    "fixture/DeleteWirelessGatewayTaskDefinition.yaml"
+
+requestDisassociateAwsAccountFromPartnerAccount :: DisassociateAwsAccountFromPartnerAccount -> TestTree
+requestDisassociateAwsAccountFromPartnerAccount =
+  req
+    "DisassociateAwsAccountFromPartnerAccount"
+    "fixture/DisassociateAwsAccountFromPartnerAccount.yaml"
+
+requestDisassociateMulticastGroupFromFuotaTask :: DisassociateMulticastGroupFromFuotaTask -> TestTree
+requestDisassociateMulticastGroupFromFuotaTask =
+  req
+    "DisassociateMulticastGroupFromFuotaTask"
+    "fixture/DisassociateMulticastGroupFromFuotaTask.yaml"
+
+requestDisassociateWirelessDeviceFromFuotaTask :: DisassociateWirelessDeviceFromFuotaTask -> TestTree
+requestDisassociateWirelessDeviceFromFuotaTask =
+  req
+    "DisassociateWirelessDeviceFromFuotaTask"
+    "fixture/DisassociateWirelessDeviceFromFuotaTask.yaml"
+
+requestDisassociateWirelessDeviceFromMulticastGroup :: DisassociateWirelessDeviceFromMulticastGroup -> TestTree
+requestDisassociateWirelessDeviceFromMulticastGroup =
+  req
+    "DisassociateWirelessDeviceFromMulticastGroup"
+    "fixture/DisassociateWirelessDeviceFromMulticastGroup.yaml"
+
+requestDisassociateWirelessDeviceFromThing :: DisassociateWirelessDeviceFromThing -> TestTree
+requestDisassociateWirelessDeviceFromThing =
+  req
+    "DisassociateWirelessDeviceFromThing"
+    "fixture/DisassociateWirelessDeviceFromThing.yaml"
+
+requestDisassociateWirelessGatewayFromCertificate :: DisassociateWirelessGatewayFromCertificate -> TestTree
+requestDisassociateWirelessGatewayFromCertificate =
+  req
+    "DisassociateWirelessGatewayFromCertificate"
+    "fixture/DisassociateWirelessGatewayFromCertificate.yaml"
+
+requestDisassociateWirelessGatewayFromThing :: DisassociateWirelessGatewayFromThing -> TestTree
+requestDisassociateWirelessGatewayFromThing =
+  req
+    "DisassociateWirelessGatewayFromThing"
+    "fixture/DisassociateWirelessGatewayFromThing.yaml"
+
+requestGetDestination :: GetDestination -> TestTree
+requestGetDestination =
+  req
+    "GetDestination"
+    "fixture/GetDestination.yaml"
+
+requestGetDeviceProfile :: GetDeviceProfile -> TestTree
+requestGetDeviceProfile =
+  req
+    "GetDeviceProfile"
+    "fixture/GetDeviceProfile.yaml"
+
+requestGetEventConfigurationByResourceTypes :: GetEventConfigurationByResourceTypes -> TestTree
+requestGetEventConfigurationByResourceTypes =
+  req
+    "GetEventConfigurationByResourceTypes"
+    "fixture/GetEventConfigurationByResourceTypes.yaml"
+
+requestGetFuotaTask :: GetFuotaTask -> TestTree
+requestGetFuotaTask =
+  req
+    "GetFuotaTask"
+    "fixture/GetFuotaTask.yaml"
+
+requestGetLogLevelsByResourceTypes :: GetLogLevelsByResourceTypes -> TestTree
+requestGetLogLevelsByResourceTypes =
+  req
+    "GetLogLevelsByResourceTypes"
+    "fixture/GetLogLevelsByResourceTypes.yaml"
+
+requestGetMulticastGroup :: GetMulticastGroup -> TestTree
+requestGetMulticastGroup =
+  req
+    "GetMulticastGroup"
+    "fixture/GetMulticastGroup.yaml"
+
+requestGetMulticastGroupSession :: GetMulticastGroupSession -> TestTree
+requestGetMulticastGroupSession =
+  req
+    "GetMulticastGroupSession"
+    "fixture/GetMulticastGroupSession.yaml"
+
+requestGetNetworkAnalyzerConfiguration :: GetNetworkAnalyzerConfiguration -> TestTree
+requestGetNetworkAnalyzerConfiguration =
+  req
+    "GetNetworkAnalyzerConfiguration"
+    "fixture/GetNetworkAnalyzerConfiguration.yaml"
+
+requestGetPartnerAccount :: GetPartnerAccount -> TestTree
+requestGetPartnerAccount =
+  req
+    "GetPartnerAccount"
+    "fixture/GetPartnerAccount.yaml"
+
+requestGetPositionEstimate :: GetPositionEstimate -> TestTree
+requestGetPositionEstimate =
+  req
+    "GetPositionEstimate"
+    "fixture/GetPositionEstimate.yaml"
+
+requestGetResourceEventConfiguration :: GetResourceEventConfiguration -> TestTree
+requestGetResourceEventConfiguration =
+  req
+    "GetResourceEventConfiguration"
+    "fixture/GetResourceEventConfiguration.yaml"
+
+requestGetResourceLogLevel :: GetResourceLogLevel -> TestTree
+requestGetResourceLogLevel =
+  req
+    "GetResourceLogLevel"
+    "fixture/GetResourceLogLevel.yaml"
+
+requestGetResourcePosition :: GetResourcePosition -> TestTree
+requestGetResourcePosition =
+  req
+    "GetResourcePosition"
+    "fixture/GetResourcePosition.yaml"
+
+requestGetServiceEndpoint :: GetServiceEndpoint -> TestTree
+requestGetServiceEndpoint =
+  req
+    "GetServiceEndpoint"
+    "fixture/GetServiceEndpoint.yaml"
+
+requestGetServiceProfile :: GetServiceProfile -> TestTree
+requestGetServiceProfile =
+  req
+    "GetServiceProfile"
+    "fixture/GetServiceProfile.yaml"
+
+requestGetWirelessDevice :: GetWirelessDevice -> TestTree
+requestGetWirelessDevice =
+  req
+    "GetWirelessDevice"
+    "fixture/GetWirelessDevice.yaml"
+
+requestGetWirelessDeviceStatistics :: GetWirelessDeviceStatistics -> TestTree
+requestGetWirelessDeviceStatistics =
+  req
+    "GetWirelessDeviceStatistics"
+    "fixture/GetWirelessDeviceStatistics.yaml"
+
+requestGetWirelessGateway :: GetWirelessGateway -> TestTree
+requestGetWirelessGateway =
+  req
+    "GetWirelessGateway"
+    "fixture/GetWirelessGateway.yaml"
+
+requestGetWirelessGatewayCertificate :: GetWirelessGatewayCertificate -> TestTree
+requestGetWirelessGatewayCertificate =
+  req
+    "GetWirelessGatewayCertificate"
+    "fixture/GetWirelessGatewayCertificate.yaml"
+
+requestGetWirelessGatewayFirmwareInformation :: GetWirelessGatewayFirmwareInformation -> TestTree
+requestGetWirelessGatewayFirmwareInformation =
+  req
+    "GetWirelessGatewayFirmwareInformation"
+    "fixture/GetWirelessGatewayFirmwareInformation.yaml"
+
+requestGetWirelessGatewayStatistics :: GetWirelessGatewayStatistics -> TestTree
+requestGetWirelessGatewayStatistics =
+  req
+    "GetWirelessGatewayStatistics"
+    "fixture/GetWirelessGatewayStatistics.yaml"
+
+requestGetWirelessGatewayTask :: GetWirelessGatewayTask -> TestTree
+requestGetWirelessGatewayTask =
+  req
+    "GetWirelessGatewayTask"
+    "fixture/GetWirelessGatewayTask.yaml"
+
+requestGetWirelessGatewayTaskDefinition :: GetWirelessGatewayTaskDefinition -> TestTree
+requestGetWirelessGatewayTaskDefinition =
+  req
+    "GetWirelessGatewayTaskDefinition"
+    "fixture/GetWirelessGatewayTaskDefinition.yaml"
+
+requestListDestinations :: ListDestinations -> TestTree
+requestListDestinations =
+  req
+    "ListDestinations"
+    "fixture/ListDestinations.yaml"
+
+requestListDeviceProfiles :: ListDeviceProfiles -> TestTree
+requestListDeviceProfiles =
+  req
+    "ListDeviceProfiles"
+    "fixture/ListDeviceProfiles.yaml"
+
+requestListEventConfigurations :: ListEventConfigurations -> TestTree
+requestListEventConfigurations =
+  req
+    "ListEventConfigurations"
+    "fixture/ListEventConfigurations.yaml"
+
+requestListFuotaTasks :: ListFuotaTasks -> TestTree
+requestListFuotaTasks =
+  req
+    "ListFuotaTasks"
+    "fixture/ListFuotaTasks.yaml"
+
+requestListMulticastGroups :: ListMulticastGroups -> TestTree
+requestListMulticastGroups =
+  req
+    "ListMulticastGroups"
+    "fixture/ListMulticastGroups.yaml"
+
+requestListMulticastGroupsByFuotaTask :: ListMulticastGroupsByFuotaTask -> TestTree
+requestListMulticastGroupsByFuotaTask =
+  req
+    "ListMulticastGroupsByFuotaTask"
+    "fixture/ListMulticastGroupsByFuotaTask.yaml"
+
+requestListNetworkAnalyzerConfigurations :: ListNetworkAnalyzerConfigurations -> TestTree
+requestListNetworkAnalyzerConfigurations =
+  req
+    "ListNetworkAnalyzerConfigurations"
+    "fixture/ListNetworkAnalyzerConfigurations.yaml"
+
+requestListPartnerAccounts :: ListPartnerAccounts -> TestTree
+requestListPartnerAccounts =
+  req
+    "ListPartnerAccounts"
+    "fixture/ListPartnerAccounts.yaml"
+
+requestListQueuedMessages :: ListQueuedMessages -> TestTree
+requestListQueuedMessages =
+  req
+    "ListQueuedMessages"
+    "fixture/ListQueuedMessages.yaml"
+
+requestListServiceProfiles :: ListServiceProfiles -> TestTree
+requestListServiceProfiles =
+  req
+    "ListServiceProfiles"
+    "fixture/ListServiceProfiles.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListWirelessDevices :: ListWirelessDevices -> TestTree
+requestListWirelessDevices =
+  req
+    "ListWirelessDevices"
+    "fixture/ListWirelessDevices.yaml"
+
+requestListWirelessGatewayTaskDefinitions :: ListWirelessGatewayTaskDefinitions -> TestTree
+requestListWirelessGatewayTaskDefinitions =
+  req
+    "ListWirelessGatewayTaskDefinitions"
+    "fixture/ListWirelessGatewayTaskDefinitions.yaml"
+
+requestListWirelessGateways :: ListWirelessGateways -> TestTree
+requestListWirelessGateways =
+  req
+    "ListWirelessGateways"
+    "fixture/ListWirelessGateways.yaml"
+
+requestPutResourceLogLevel :: PutResourceLogLevel -> TestTree
+requestPutResourceLogLevel =
+  req
+    "PutResourceLogLevel"
+    "fixture/PutResourceLogLevel.yaml"
+
+requestResetAllResourceLogLevels :: ResetAllResourceLogLevels -> TestTree
+requestResetAllResourceLogLevels =
+  req
+    "ResetAllResourceLogLevels"
+    "fixture/ResetAllResourceLogLevels.yaml"
+
+requestResetResourceLogLevel :: ResetResourceLogLevel -> TestTree
+requestResetResourceLogLevel =
+  req
+    "ResetResourceLogLevel"
+    "fixture/ResetResourceLogLevel.yaml"
+
+requestSendDataToMulticastGroup :: SendDataToMulticastGroup -> TestTree
+requestSendDataToMulticastGroup =
+  req
+    "SendDataToMulticastGroup"
+    "fixture/SendDataToMulticastGroup.yaml"
+
+requestSendDataToWirelessDevice :: SendDataToWirelessDevice -> TestTree
+requestSendDataToWirelessDevice =
+  req
+    "SendDataToWirelessDevice"
+    "fixture/SendDataToWirelessDevice.yaml"
+
+requestStartBulkAssociateWirelessDeviceWithMulticastGroup :: StartBulkAssociateWirelessDeviceWithMulticastGroup -> TestTree
+requestStartBulkAssociateWirelessDeviceWithMulticastGroup =
+  req
+    "StartBulkAssociateWirelessDeviceWithMulticastGroup"
+    "fixture/StartBulkAssociateWirelessDeviceWithMulticastGroup.yaml"
+
+requestStartBulkDisassociateWirelessDeviceFromMulticastGroup :: StartBulkDisassociateWirelessDeviceFromMulticastGroup -> TestTree
+requestStartBulkDisassociateWirelessDeviceFromMulticastGroup =
+  req
+    "StartBulkDisassociateWirelessDeviceFromMulticastGroup"
+    "fixture/StartBulkDisassociateWirelessDeviceFromMulticastGroup.yaml"
+
+requestStartFuotaTask :: StartFuotaTask -> TestTree
+requestStartFuotaTask =
+  req
+    "StartFuotaTask"
+    "fixture/StartFuotaTask.yaml"
+
+requestStartMulticastGroupSession :: StartMulticastGroupSession -> TestTree
+requestStartMulticastGroupSession =
+  req
+    "StartMulticastGroupSession"
+    "fixture/StartMulticastGroupSession.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestTestWirelessDevice :: TestWirelessDevice -> TestTree
+requestTestWirelessDevice =
+  req
+    "TestWirelessDevice"
+    "fixture/TestWirelessDevice.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateDestination :: UpdateDestination -> TestTree
+requestUpdateDestination =
+  req
+    "UpdateDestination"
+    "fixture/UpdateDestination.yaml"
+
+requestUpdateEventConfigurationByResourceTypes :: UpdateEventConfigurationByResourceTypes -> TestTree
+requestUpdateEventConfigurationByResourceTypes =
+  req
+    "UpdateEventConfigurationByResourceTypes"
+    "fixture/UpdateEventConfigurationByResourceTypes.yaml"
+
+requestUpdateFuotaTask :: UpdateFuotaTask -> TestTree
+requestUpdateFuotaTask =
+  req
+    "UpdateFuotaTask"
+    "fixture/UpdateFuotaTask.yaml"
+
+requestUpdateLogLevelsByResourceTypes :: UpdateLogLevelsByResourceTypes -> TestTree
+requestUpdateLogLevelsByResourceTypes =
+  req
+    "UpdateLogLevelsByResourceTypes"
+    "fixture/UpdateLogLevelsByResourceTypes.yaml"
+
+requestUpdateMulticastGroup :: UpdateMulticastGroup -> TestTree
+requestUpdateMulticastGroup =
+  req
+    "UpdateMulticastGroup"
+    "fixture/UpdateMulticastGroup.yaml"
+
+requestUpdateNetworkAnalyzerConfiguration :: UpdateNetworkAnalyzerConfiguration -> TestTree
+requestUpdateNetworkAnalyzerConfiguration =
+  req
+    "UpdateNetworkAnalyzerConfiguration"
+    "fixture/UpdateNetworkAnalyzerConfiguration.yaml"
+
+requestUpdatePartnerAccount :: UpdatePartnerAccount -> TestTree
+requestUpdatePartnerAccount =
+  req
+    "UpdatePartnerAccount"
+    "fixture/UpdatePartnerAccount.yaml"
+
+requestUpdateResourceEventConfiguration :: UpdateResourceEventConfiguration -> TestTree
+requestUpdateResourceEventConfiguration =
+  req
+    "UpdateResourceEventConfiguration"
+    "fixture/UpdateResourceEventConfiguration.yaml"
+
+requestUpdateResourcePosition :: UpdateResourcePosition -> TestTree
+requestUpdateResourcePosition =
+  req
+    "UpdateResourcePosition"
+    "fixture/UpdateResourcePosition.yaml"
+
+requestUpdateWirelessDevice :: UpdateWirelessDevice -> TestTree
+requestUpdateWirelessDevice =
+  req
+    "UpdateWirelessDevice"
+    "fixture/UpdateWirelessDevice.yaml"
+
+requestUpdateWirelessGateway :: UpdateWirelessGateway -> TestTree
+requestUpdateWirelessGateway =
+  req
+    "UpdateWirelessGateway"
+    "fixture/UpdateWirelessGateway.yaml"
+
+-- Responses
+
+responseAssociateAwsAccountWithPartnerAccount :: AssociateAwsAccountWithPartnerAccountResponse -> TestTree
+responseAssociateAwsAccountWithPartnerAccount =
+  res
+    "AssociateAwsAccountWithPartnerAccountResponse"
+    "fixture/AssociateAwsAccountWithPartnerAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateAwsAccountWithPartnerAccount)
+
+responseAssociateMulticastGroupWithFuotaTask :: AssociateMulticastGroupWithFuotaTaskResponse -> TestTree
+responseAssociateMulticastGroupWithFuotaTask =
+  res
+    "AssociateMulticastGroupWithFuotaTaskResponse"
+    "fixture/AssociateMulticastGroupWithFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateMulticastGroupWithFuotaTask)
+
+responseAssociateWirelessDeviceWithFuotaTask :: AssociateWirelessDeviceWithFuotaTaskResponse -> TestTree
+responseAssociateWirelessDeviceWithFuotaTask =
+  res
+    "AssociateWirelessDeviceWithFuotaTaskResponse"
+    "fixture/AssociateWirelessDeviceWithFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateWirelessDeviceWithFuotaTask)
+
+responseAssociateWirelessDeviceWithMulticastGroup :: AssociateWirelessDeviceWithMulticastGroupResponse -> TestTree
+responseAssociateWirelessDeviceWithMulticastGroup =
+  res
+    "AssociateWirelessDeviceWithMulticastGroupResponse"
+    "fixture/AssociateWirelessDeviceWithMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateWirelessDeviceWithMulticastGroup)
+
+responseAssociateWirelessDeviceWithThing :: AssociateWirelessDeviceWithThingResponse -> TestTree
+responseAssociateWirelessDeviceWithThing =
+  res
+    "AssociateWirelessDeviceWithThingResponse"
+    "fixture/AssociateWirelessDeviceWithThingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateWirelessDeviceWithThing)
+
+responseAssociateWirelessGatewayWithCertificate :: AssociateWirelessGatewayWithCertificateResponse -> TestTree
+responseAssociateWirelessGatewayWithCertificate =
+  res
+    "AssociateWirelessGatewayWithCertificateResponse"
+    "fixture/AssociateWirelessGatewayWithCertificateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateWirelessGatewayWithCertificate)
+
+responseAssociateWirelessGatewayWithThing :: AssociateWirelessGatewayWithThingResponse -> TestTree
+responseAssociateWirelessGatewayWithThing =
+  res
+    "AssociateWirelessGatewayWithThingResponse"
+    "fixture/AssociateWirelessGatewayWithThingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateWirelessGatewayWithThing)
+
+responseCancelMulticastGroupSession :: CancelMulticastGroupSessionResponse -> TestTree
+responseCancelMulticastGroupSession =
+  res
+    "CancelMulticastGroupSessionResponse"
+    "fixture/CancelMulticastGroupSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelMulticastGroupSession)
+
+responseCreateDestination :: CreateDestinationResponse -> TestTree
+responseCreateDestination =
+  res
+    "CreateDestinationResponse"
+    "fixture/CreateDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDestination)
+
+responseCreateDeviceProfile :: CreateDeviceProfileResponse -> TestTree
+responseCreateDeviceProfile =
+  res
+    "CreateDeviceProfileResponse"
+    "fixture/CreateDeviceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDeviceProfile)
+
+responseCreateFuotaTask :: CreateFuotaTaskResponse -> TestTree
+responseCreateFuotaTask =
+  res
+    "CreateFuotaTaskResponse"
+    "fixture/CreateFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFuotaTask)
+
+responseCreateMulticastGroup :: CreateMulticastGroupResponse -> TestTree
+responseCreateMulticastGroup =
+  res
+    "CreateMulticastGroupResponse"
+    "fixture/CreateMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateMulticastGroup)
+
+responseCreateNetworkAnalyzerConfiguration :: CreateNetworkAnalyzerConfigurationResponse -> TestTree
+responseCreateNetworkAnalyzerConfiguration =
+  res
+    "CreateNetworkAnalyzerConfigurationResponse"
+    "fixture/CreateNetworkAnalyzerConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetworkAnalyzerConfiguration)
+
+responseCreateServiceProfile :: CreateServiceProfileResponse -> TestTree
+responseCreateServiceProfile =
+  res
+    "CreateServiceProfileResponse"
+    "fixture/CreateServiceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateServiceProfile)
+
+responseCreateWirelessDevice :: CreateWirelessDeviceResponse -> TestTree
+responseCreateWirelessDevice =
+  res
+    "CreateWirelessDeviceResponse"
+    "fixture/CreateWirelessDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWirelessDevice)
+
+responseCreateWirelessGateway :: CreateWirelessGatewayResponse -> TestTree
+responseCreateWirelessGateway =
+  res
+    "CreateWirelessGatewayResponse"
+    "fixture/CreateWirelessGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWirelessGateway)
+
+responseCreateWirelessGatewayTask :: CreateWirelessGatewayTaskResponse -> TestTree
+responseCreateWirelessGatewayTask =
+  res
+    "CreateWirelessGatewayTaskResponse"
+    "fixture/CreateWirelessGatewayTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWirelessGatewayTask)
+
+responseCreateWirelessGatewayTaskDefinition :: CreateWirelessGatewayTaskDefinitionResponse -> TestTree
+responseCreateWirelessGatewayTaskDefinition =
+  res
+    "CreateWirelessGatewayTaskDefinitionResponse"
+    "fixture/CreateWirelessGatewayTaskDefinitionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWirelessGatewayTaskDefinition)
+
+responseDeleteDestination :: DeleteDestinationResponse -> TestTree
+responseDeleteDestination =
+  res
+    "DeleteDestinationResponse"
+    "fixture/DeleteDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDestination)
+
+responseDeleteDeviceProfile :: DeleteDeviceProfileResponse -> TestTree
+responseDeleteDeviceProfile =
+  res
+    "DeleteDeviceProfileResponse"
+    "fixture/DeleteDeviceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDeviceProfile)
+
+responseDeleteFuotaTask :: DeleteFuotaTaskResponse -> TestTree
+responseDeleteFuotaTask =
+  res
+    "DeleteFuotaTaskResponse"
+    "fixture/DeleteFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFuotaTask)
+
+responseDeleteMulticastGroup :: DeleteMulticastGroupResponse -> TestTree
+responseDeleteMulticastGroup =
+  res
+    "DeleteMulticastGroupResponse"
+    "fixture/DeleteMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteMulticastGroup)
+
+responseDeleteNetworkAnalyzerConfiguration :: DeleteNetworkAnalyzerConfigurationResponse -> TestTree
+responseDeleteNetworkAnalyzerConfiguration =
+  res
+    "DeleteNetworkAnalyzerConfigurationResponse"
+    "fixture/DeleteNetworkAnalyzerConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkAnalyzerConfiguration)
+
+responseDeleteQueuedMessages :: DeleteQueuedMessagesResponse -> TestTree
+responseDeleteQueuedMessages =
+  res
+    "DeleteQueuedMessagesResponse"
+    "fixture/DeleteQueuedMessagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteQueuedMessages)
+
+responseDeleteServiceProfile :: DeleteServiceProfileResponse -> TestTree
+responseDeleteServiceProfile =
+  res
+    "DeleteServiceProfileResponse"
+    "fixture/DeleteServiceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteServiceProfile)
+
+responseDeleteWirelessDevice :: DeleteWirelessDeviceResponse -> TestTree
+responseDeleteWirelessDevice =
+  res
+    "DeleteWirelessDeviceResponse"
+    "fixture/DeleteWirelessDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWirelessDevice)
+
+responseDeleteWirelessGateway :: DeleteWirelessGatewayResponse -> TestTree
+responseDeleteWirelessGateway =
+  res
+    "DeleteWirelessGatewayResponse"
+    "fixture/DeleteWirelessGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWirelessGateway)
+
+responseDeleteWirelessGatewayTask :: DeleteWirelessGatewayTaskResponse -> TestTree
+responseDeleteWirelessGatewayTask =
+  res
+    "DeleteWirelessGatewayTaskResponse"
+    "fixture/DeleteWirelessGatewayTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWirelessGatewayTask)
+
+responseDeleteWirelessGatewayTaskDefinition :: DeleteWirelessGatewayTaskDefinitionResponse -> TestTree
+responseDeleteWirelessGatewayTaskDefinition =
+  res
+    "DeleteWirelessGatewayTaskDefinitionResponse"
+    "fixture/DeleteWirelessGatewayTaskDefinitionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWirelessGatewayTaskDefinition)
+
+responseDisassociateAwsAccountFromPartnerAccount :: DisassociateAwsAccountFromPartnerAccountResponse -> TestTree
+responseDisassociateAwsAccountFromPartnerAccount =
+  res
+    "DisassociateAwsAccountFromPartnerAccountResponse"
+    "fixture/DisassociateAwsAccountFromPartnerAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateAwsAccountFromPartnerAccount)
+
+responseDisassociateMulticastGroupFromFuotaTask :: DisassociateMulticastGroupFromFuotaTaskResponse -> TestTree
+responseDisassociateMulticastGroupFromFuotaTask =
+  res
+    "DisassociateMulticastGroupFromFuotaTaskResponse"
+    "fixture/DisassociateMulticastGroupFromFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateMulticastGroupFromFuotaTask)
+
+responseDisassociateWirelessDeviceFromFuotaTask :: DisassociateWirelessDeviceFromFuotaTaskResponse -> TestTree
+responseDisassociateWirelessDeviceFromFuotaTask =
+  res
+    "DisassociateWirelessDeviceFromFuotaTaskResponse"
+    "fixture/DisassociateWirelessDeviceFromFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateWirelessDeviceFromFuotaTask)
+
+responseDisassociateWirelessDeviceFromMulticastGroup :: DisassociateWirelessDeviceFromMulticastGroupResponse -> TestTree
+responseDisassociateWirelessDeviceFromMulticastGroup =
+  res
+    "DisassociateWirelessDeviceFromMulticastGroupResponse"
+    "fixture/DisassociateWirelessDeviceFromMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateWirelessDeviceFromMulticastGroup)
+
+responseDisassociateWirelessDeviceFromThing :: DisassociateWirelessDeviceFromThingResponse -> TestTree
+responseDisassociateWirelessDeviceFromThing =
+  res
+    "DisassociateWirelessDeviceFromThingResponse"
+    "fixture/DisassociateWirelessDeviceFromThingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateWirelessDeviceFromThing)
+
+responseDisassociateWirelessGatewayFromCertificate :: DisassociateWirelessGatewayFromCertificateResponse -> TestTree
+responseDisassociateWirelessGatewayFromCertificate =
+  res
+    "DisassociateWirelessGatewayFromCertificateResponse"
+    "fixture/DisassociateWirelessGatewayFromCertificateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateWirelessGatewayFromCertificate)
+
+responseDisassociateWirelessGatewayFromThing :: DisassociateWirelessGatewayFromThingResponse -> TestTree
+responseDisassociateWirelessGatewayFromThing =
+  res
+    "DisassociateWirelessGatewayFromThingResponse"
+    "fixture/DisassociateWirelessGatewayFromThingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateWirelessGatewayFromThing)
+
+responseGetDestination :: GetDestinationResponse -> TestTree
+responseGetDestination =
+  res
+    "GetDestinationResponse"
+    "fixture/GetDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDestination)
+
+responseGetDeviceProfile :: GetDeviceProfileResponse -> TestTree
+responseGetDeviceProfile =
+  res
+    "GetDeviceProfileResponse"
+    "fixture/GetDeviceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDeviceProfile)
+
+responseGetEventConfigurationByResourceTypes :: GetEventConfigurationByResourceTypesResponse -> TestTree
+responseGetEventConfigurationByResourceTypes =
+  res
+    "GetEventConfigurationByResourceTypesResponse"
+    "fixture/GetEventConfigurationByResourceTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEventConfigurationByResourceTypes)
+
+responseGetFuotaTask :: GetFuotaTaskResponse -> TestTree
+responseGetFuotaTask =
+  res
+    "GetFuotaTaskResponse"
+    "fixture/GetFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFuotaTask)
+
+responseGetLogLevelsByResourceTypes :: GetLogLevelsByResourceTypesResponse -> TestTree
+responseGetLogLevelsByResourceTypes =
+  res
+    "GetLogLevelsByResourceTypesResponse"
+    "fixture/GetLogLevelsByResourceTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLogLevelsByResourceTypes)
+
+responseGetMulticastGroup :: GetMulticastGroupResponse -> TestTree
+responseGetMulticastGroup =
+  res
+    "GetMulticastGroupResponse"
+    "fixture/GetMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMulticastGroup)
+
+responseGetMulticastGroupSession :: GetMulticastGroupSessionResponse -> TestTree
+responseGetMulticastGroupSession =
+  res
+    "GetMulticastGroupSessionResponse"
+    "fixture/GetMulticastGroupSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMulticastGroupSession)
+
+responseGetNetworkAnalyzerConfiguration :: GetNetworkAnalyzerConfigurationResponse -> TestTree
+responseGetNetworkAnalyzerConfiguration =
+  res
+    "GetNetworkAnalyzerConfigurationResponse"
+    "fixture/GetNetworkAnalyzerConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetNetworkAnalyzerConfiguration)
+
+responseGetPartnerAccount :: GetPartnerAccountResponse -> TestTree
+responseGetPartnerAccount =
+  res
+    "GetPartnerAccountResponse"
+    "fixture/GetPartnerAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPartnerAccount)
+
+responseGetPositionEstimate :: GetPositionEstimateResponse -> TestTree
+responseGetPositionEstimate =
+  res
+    "GetPositionEstimateResponse"
+    "fixture/GetPositionEstimateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPositionEstimate)
+
+responseGetResourceEventConfiguration :: GetResourceEventConfigurationResponse -> TestTree
+responseGetResourceEventConfiguration =
+  res
+    "GetResourceEventConfigurationResponse"
+    "fixture/GetResourceEventConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetResourceEventConfiguration)
+
+responseGetResourceLogLevel :: GetResourceLogLevelResponse -> TestTree
+responseGetResourceLogLevel =
+  res
+    "GetResourceLogLevelResponse"
+    "fixture/GetResourceLogLevelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetResourceLogLevel)
+
+responseGetResourcePosition :: GetResourcePositionResponse -> TestTree
+responseGetResourcePosition =
+  res
+    "GetResourcePositionResponse"
+    "fixture/GetResourcePositionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetResourcePosition)
+
+responseGetServiceEndpoint :: GetServiceEndpointResponse -> TestTree
+responseGetServiceEndpoint =
+  res
+    "GetServiceEndpointResponse"
+    "fixture/GetServiceEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetServiceEndpoint)
+
+responseGetServiceProfile :: GetServiceProfileResponse -> TestTree
+responseGetServiceProfile =
+  res
+    "GetServiceProfileResponse"
+    "fixture/GetServiceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetServiceProfile)
+
+responseGetWirelessDevice :: GetWirelessDeviceResponse -> TestTree
+responseGetWirelessDevice =
+  res
+    "GetWirelessDeviceResponse"
+    "fixture/GetWirelessDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWirelessDevice)
+
+responseGetWirelessDeviceStatistics :: GetWirelessDeviceStatisticsResponse -> TestTree
+responseGetWirelessDeviceStatistics =
+  res
+    "GetWirelessDeviceStatisticsResponse"
+    "fixture/GetWirelessDeviceStatisticsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWirelessDeviceStatistics)
+
+responseGetWirelessGateway :: GetWirelessGatewayResponse -> TestTree
+responseGetWirelessGateway =
+  res
+    "GetWirelessGatewayResponse"
+    "fixture/GetWirelessGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWirelessGateway)
+
+responseGetWirelessGatewayCertificate :: GetWirelessGatewayCertificateResponse -> TestTree
+responseGetWirelessGatewayCertificate =
+  res
+    "GetWirelessGatewayCertificateResponse"
+    "fixture/GetWirelessGatewayCertificateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWirelessGatewayCertificate)
+
+responseGetWirelessGatewayFirmwareInformation :: GetWirelessGatewayFirmwareInformationResponse -> TestTree
+responseGetWirelessGatewayFirmwareInformation =
+  res
+    "GetWirelessGatewayFirmwareInformationResponse"
+    "fixture/GetWirelessGatewayFirmwareInformationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWirelessGatewayFirmwareInformation)
+
+responseGetWirelessGatewayStatistics :: GetWirelessGatewayStatisticsResponse -> TestTree
+responseGetWirelessGatewayStatistics =
+  res
+    "GetWirelessGatewayStatisticsResponse"
+    "fixture/GetWirelessGatewayStatisticsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWirelessGatewayStatistics)
+
+responseGetWirelessGatewayTask :: GetWirelessGatewayTaskResponse -> TestTree
+responseGetWirelessGatewayTask =
+  res
+    "GetWirelessGatewayTaskResponse"
+    "fixture/GetWirelessGatewayTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWirelessGatewayTask)
+
+responseGetWirelessGatewayTaskDefinition :: GetWirelessGatewayTaskDefinitionResponse -> TestTree
+responseGetWirelessGatewayTaskDefinition =
+  res
+    "GetWirelessGatewayTaskDefinitionResponse"
+    "fixture/GetWirelessGatewayTaskDefinitionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetWirelessGatewayTaskDefinition)
+
+responseListDestinations :: ListDestinationsResponse -> TestTree
+responseListDestinations =
+  res
+    "ListDestinationsResponse"
+    "fixture/ListDestinationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDestinations)
+
+responseListDeviceProfiles :: ListDeviceProfilesResponse -> TestTree
+responseListDeviceProfiles =
+  res
+    "ListDeviceProfilesResponse"
+    "fixture/ListDeviceProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDeviceProfiles)
+
+responseListEventConfigurations :: ListEventConfigurationsResponse -> TestTree
+responseListEventConfigurations =
+  res
+    "ListEventConfigurationsResponse"
+    "fixture/ListEventConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEventConfigurations)
+
+responseListFuotaTasks :: ListFuotaTasksResponse -> TestTree
+responseListFuotaTasks =
+  res
+    "ListFuotaTasksResponse"
+    "fixture/ListFuotaTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFuotaTasks)
+
+responseListMulticastGroups :: ListMulticastGroupsResponse -> TestTree
+responseListMulticastGroups =
+  res
+    "ListMulticastGroupsResponse"
+    "fixture/ListMulticastGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMulticastGroups)
+
+responseListMulticastGroupsByFuotaTask :: ListMulticastGroupsByFuotaTaskResponse -> TestTree
+responseListMulticastGroupsByFuotaTask =
+  res
+    "ListMulticastGroupsByFuotaTaskResponse"
+    "fixture/ListMulticastGroupsByFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMulticastGroupsByFuotaTask)
+
+responseListNetworkAnalyzerConfigurations :: ListNetworkAnalyzerConfigurationsResponse -> TestTree
+responseListNetworkAnalyzerConfigurations =
+  res
+    "ListNetworkAnalyzerConfigurationsResponse"
+    "fixture/ListNetworkAnalyzerConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListNetworkAnalyzerConfigurations)
+
+responseListPartnerAccounts :: ListPartnerAccountsResponse -> TestTree
+responseListPartnerAccounts =
+  res
+    "ListPartnerAccountsResponse"
+    "fixture/ListPartnerAccountsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPartnerAccounts)
+
+responseListQueuedMessages :: ListQueuedMessagesResponse -> TestTree
+responseListQueuedMessages =
+  res
+    "ListQueuedMessagesResponse"
+    "fixture/ListQueuedMessagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListQueuedMessages)
+
+responseListServiceProfiles :: ListServiceProfilesResponse -> TestTree
+responseListServiceProfiles =
+  res
+    "ListServiceProfilesResponse"
+    "fixture/ListServiceProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListServiceProfiles)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListWirelessDevices :: ListWirelessDevicesResponse -> TestTree
+responseListWirelessDevices =
+  res
+    "ListWirelessDevicesResponse"
+    "fixture/ListWirelessDevicesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWirelessDevices)
+
+responseListWirelessGatewayTaskDefinitions :: ListWirelessGatewayTaskDefinitionsResponse -> TestTree
+responseListWirelessGatewayTaskDefinitions =
+  res
+    "ListWirelessGatewayTaskDefinitionsResponse"
+    "fixture/ListWirelessGatewayTaskDefinitionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWirelessGatewayTaskDefinitions)
+
+responseListWirelessGateways :: ListWirelessGatewaysResponse -> TestTree
+responseListWirelessGateways =
+  res
+    "ListWirelessGatewaysResponse"
+    "fixture/ListWirelessGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWirelessGateways)
+
+responsePutResourceLogLevel :: PutResourceLogLevelResponse -> TestTree
+responsePutResourceLogLevel =
+  res
+    "PutResourceLogLevelResponse"
+    "fixture/PutResourceLogLevelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutResourceLogLevel)
+
+responseResetAllResourceLogLevels :: ResetAllResourceLogLevelsResponse -> TestTree
+responseResetAllResourceLogLevels =
+  res
+    "ResetAllResourceLogLevelsResponse"
+    "fixture/ResetAllResourceLogLevelsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetAllResourceLogLevels)
+
+responseResetResourceLogLevel :: ResetResourceLogLevelResponse -> TestTree
+responseResetResourceLogLevel =
+  res
+    "ResetResourceLogLevelResponse"
+    "fixture/ResetResourceLogLevelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetResourceLogLevel)
+
+responseSendDataToMulticastGroup :: SendDataToMulticastGroupResponse -> TestTree
+responseSendDataToMulticastGroup =
+  res
+    "SendDataToMulticastGroupResponse"
+    "fixture/SendDataToMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendDataToMulticastGroup)
+
+responseSendDataToWirelessDevice :: SendDataToWirelessDeviceResponse -> TestTree
+responseSendDataToWirelessDevice =
+  res
+    "SendDataToWirelessDeviceResponse"
+    "fixture/SendDataToWirelessDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendDataToWirelessDevice)
+
+responseStartBulkAssociateWirelessDeviceWithMulticastGroup :: StartBulkAssociateWirelessDeviceWithMulticastGroupResponse -> TestTree
+responseStartBulkAssociateWirelessDeviceWithMulticastGroup =
+  res
+    "StartBulkAssociateWirelessDeviceWithMulticastGroupResponse"
+    "fixture/StartBulkAssociateWirelessDeviceWithMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartBulkAssociateWirelessDeviceWithMulticastGroup)
+
+responseStartBulkDisassociateWirelessDeviceFromMulticastGroup :: StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse -> TestTree
+responseStartBulkDisassociateWirelessDeviceFromMulticastGroup =
+  res
+    "StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse"
+    "fixture/StartBulkDisassociateWirelessDeviceFromMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartBulkDisassociateWirelessDeviceFromMulticastGroup)
+
+responseStartFuotaTask :: StartFuotaTaskResponse -> TestTree
+responseStartFuotaTask =
+  res
+    "StartFuotaTaskResponse"
+    "fixture/StartFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartFuotaTask)
+
+responseStartMulticastGroupSession :: StartMulticastGroupSessionResponse -> TestTree
+responseStartMulticastGroupSession =
+  res
+    "StartMulticastGroupSessionResponse"
+    "fixture/StartMulticastGroupSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartMulticastGroupSession)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseTestWirelessDevice :: TestWirelessDeviceResponse -> TestTree
+responseTestWirelessDevice =
+  res
+    "TestWirelessDeviceResponse"
+    "fixture/TestWirelessDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TestWirelessDevice)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateDestination :: UpdateDestinationResponse -> TestTree
+responseUpdateDestination =
+  res
+    "UpdateDestinationResponse"
+    "fixture/UpdateDestinationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDestination)
+
+responseUpdateEventConfigurationByResourceTypes :: UpdateEventConfigurationByResourceTypesResponse -> TestTree
+responseUpdateEventConfigurationByResourceTypes =
+  res
+    "UpdateEventConfigurationByResourceTypesResponse"
+    "fixture/UpdateEventConfigurationByResourceTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEventConfigurationByResourceTypes)
+
+responseUpdateFuotaTask :: UpdateFuotaTaskResponse -> TestTree
+responseUpdateFuotaTask =
+  res
+    "UpdateFuotaTaskResponse"
+    "fixture/UpdateFuotaTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFuotaTask)
+
+responseUpdateLogLevelsByResourceTypes :: UpdateLogLevelsByResourceTypesResponse -> TestTree
+responseUpdateLogLevelsByResourceTypes =
+  res
+    "UpdateLogLevelsByResourceTypesResponse"
+    "fixture/UpdateLogLevelsByResourceTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLogLevelsByResourceTypes)
+
+responseUpdateMulticastGroup :: UpdateMulticastGroupResponse -> TestTree
+responseUpdateMulticastGroup =
+  res
+    "UpdateMulticastGroupResponse"
+    "fixture/UpdateMulticastGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateMulticastGroup)
+
+responseUpdateNetworkAnalyzerConfiguration :: UpdateNetworkAnalyzerConfigurationResponse -> TestTree
+responseUpdateNetworkAnalyzerConfiguration =
+  res
+    "UpdateNetworkAnalyzerConfigurationResponse"
+    "fixture/UpdateNetworkAnalyzerConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateNetworkAnalyzerConfiguration)
+
+responseUpdatePartnerAccount :: UpdatePartnerAccountResponse -> TestTree
+responseUpdatePartnerAccount =
+  res
+    "UpdatePartnerAccountResponse"
+    "fixture/UpdatePartnerAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdatePartnerAccount)
+
+responseUpdateResourceEventConfiguration :: UpdateResourceEventConfigurationResponse -> TestTree
+responseUpdateResourceEventConfiguration =
+  res
+    "UpdateResourceEventConfigurationResponse"
+    "fixture/UpdateResourceEventConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateResourceEventConfiguration)
+
+responseUpdateResourcePosition :: UpdateResourcePositionResponse -> TestTree
+responseUpdateResourcePosition =
+  res
+    "UpdateResourcePositionResponse"
+    "fixture/UpdateResourcePositionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateResourcePosition)
+
+responseUpdateWirelessDevice :: UpdateWirelessDeviceResponse -> TestTree
+responseUpdateWirelessDevice =
+  res
+    "UpdateWirelessDeviceResponse"
+    "fixture/UpdateWirelessDeviceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWirelessDevice)
+
+responseUpdateWirelessGateway :: UpdateWirelessGatewayResponse -> TestTree
+responseUpdateWirelessGateway =
+  res
+    "UpdateWirelessGatewayResponse"
+    "fixture/UpdateWirelessGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateWirelessGateway)
diff --git a/test/Test/Amazonka/IoTWireless.hs b/test/Test/Amazonka/IoTWireless.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTWireless.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.IoTWireless
+-- 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.IoTWireless
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/IoTWireless/Internal.hs b/test/Test/Amazonka/IoTWireless/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTWireless/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.IoTWireless.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.IoTWireless.Internal where
