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 FleetWise SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-06-17@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-iotfleetwise)
+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.IoTFleetWise](http://hackage.haskell.org/package/amazonka-iotfleetwise/docs/Amazonka-IoTFleetWise.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-iotfleetwise` 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-iotfleetwise.cabal b/amazonka-iotfleetwise.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-iotfleetwise.cabal
@@ -0,0 +1,186 @@
+cabal-version:      2.2
+name:               amazonka-iotfleetwise
+version:            2.0
+synopsis:           Amazon IoT FleetWise 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 @2021-06-17@ 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.IoTFleetWise.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.IoTFleetWise" 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-iotfleetwise
+
+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.IoTFleetWise
+    Amazonka.IoTFleetWise.AssociateVehicleFleet
+    Amazonka.IoTFleetWise.BatchCreateVehicle
+    Amazonka.IoTFleetWise.BatchUpdateVehicle
+    Amazonka.IoTFleetWise.CreateCampaign
+    Amazonka.IoTFleetWise.CreateDecoderManifest
+    Amazonka.IoTFleetWise.CreateFleet
+    Amazonka.IoTFleetWise.CreateModelManifest
+    Amazonka.IoTFleetWise.CreateSignalCatalog
+    Amazonka.IoTFleetWise.CreateVehicle
+    Amazonka.IoTFleetWise.DeleteCampaign
+    Amazonka.IoTFleetWise.DeleteDecoderManifest
+    Amazonka.IoTFleetWise.DeleteFleet
+    Amazonka.IoTFleetWise.DeleteModelManifest
+    Amazonka.IoTFleetWise.DeleteSignalCatalog
+    Amazonka.IoTFleetWise.DeleteVehicle
+    Amazonka.IoTFleetWise.DisassociateVehicleFleet
+    Amazonka.IoTFleetWise.GetCampaign
+    Amazonka.IoTFleetWise.GetDecoderManifest
+    Amazonka.IoTFleetWise.GetFleet
+    Amazonka.IoTFleetWise.GetLoggingOptions
+    Amazonka.IoTFleetWise.GetModelManifest
+    Amazonka.IoTFleetWise.GetRegisterAccountStatus
+    Amazonka.IoTFleetWise.GetSignalCatalog
+    Amazonka.IoTFleetWise.GetVehicle
+    Amazonka.IoTFleetWise.GetVehicleStatus
+    Amazonka.IoTFleetWise.ImportDecoderManifest
+    Amazonka.IoTFleetWise.ImportSignalCatalog
+    Amazonka.IoTFleetWise.Lens
+    Amazonka.IoTFleetWise.ListCampaigns
+    Amazonka.IoTFleetWise.ListDecoderManifestNetworkInterfaces
+    Amazonka.IoTFleetWise.ListDecoderManifests
+    Amazonka.IoTFleetWise.ListDecoderManifestSignals
+    Amazonka.IoTFleetWise.ListFleets
+    Amazonka.IoTFleetWise.ListFleetsForVehicle
+    Amazonka.IoTFleetWise.ListModelManifestNodes
+    Amazonka.IoTFleetWise.ListModelManifests
+    Amazonka.IoTFleetWise.ListSignalCatalogNodes
+    Amazonka.IoTFleetWise.ListSignalCatalogs
+    Amazonka.IoTFleetWise.ListTagsForResource
+    Amazonka.IoTFleetWise.ListVehicles
+    Amazonka.IoTFleetWise.ListVehiclesInFleet
+    Amazonka.IoTFleetWise.PutLoggingOptions
+    Amazonka.IoTFleetWise.RegisterAccount
+    Amazonka.IoTFleetWise.TagResource
+    Amazonka.IoTFleetWise.Types
+    Amazonka.IoTFleetWise.Types.Actuator
+    Amazonka.IoTFleetWise.Types.Attribute
+    Amazonka.IoTFleetWise.Types.Branch
+    Amazonka.IoTFleetWise.Types.CampaignStatus
+    Amazonka.IoTFleetWise.Types.CampaignSummary
+    Amazonka.IoTFleetWise.Types.CanDbcDefinition
+    Amazonka.IoTFleetWise.Types.CanInterface
+    Amazonka.IoTFleetWise.Types.CanSignal
+    Amazonka.IoTFleetWise.Types.CloudWatchLogDeliveryOptions
+    Amazonka.IoTFleetWise.Types.CollectionScheme
+    Amazonka.IoTFleetWise.Types.Compression
+    Amazonka.IoTFleetWise.Types.ConditionBasedCollectionScheme
+    Amazonka.IoTFleetWise.Types.CreateVehicleError
+    Amazonka.IoTFleetWise.Types.CreateVehicleRequestItem
+    Amazonka.IoTFleetWise.Types.CreateVehicleResponseItem
+    Amazonka.IoTFleetWise.Types.DecoderManifestSummary
+    Amazonka.IoTFleetWise.Types.DiagnosticsMode
+    Amazonka.IoTFleetWise.Types.FleetSummary
+    Amazonka.IoTFleetWise.Types.FormattedVss
+    Amazonka.IoTFleetWise.Types.IamRegistrationResponse
+    Amazonka.IoTFleetWise.Types.IamResources
+    Amazonka.IoTFleetWise.Types.LogType
+    Amazonka.IoTFleetWise.Types.ManifestStatus
+    Amazonka.IoTFleetWise.Types.ModelManifestSummary
+    Amazonka.IoTFleetWise.Types.NetworkFileDefinition
+    Amazonka.IoTFleetWise.Types.NetworkInterface
+    Amazonka.IoTFleetWise.Types.NetworkInterfaceType
+    Amazonka.IoTFleetWise.Types.Node
+    Amazonka.IoTFleetWise.Types.NodeCounts
+    Amazonka.IoTFleetWise.Types.NodeDataType
+    Amazonka.IoTFleetWise.Types.ObdInterface
+    Amazonka.IoTFleetWise.Types.ObdSignal
+    Amazonka.IoTFleetWise.Types.RegistrationStatus
+    Amazonka.IoTFleetWise.Types.Sensor
+    Amazonka.IoTFleetWise.Types.SignalCatalogSummary
+    Amazonka.IoTFleetWise.Types.SignalDecoder
+    Amazonka.IoTFleetWise.Types.SignalDecoderType
+    Amazonka.IoTFleetWise.Types.SignalInformation
+    Amazonka.IoTFleetWise.Types.SpoolingMode
+    Amazonka.IoTFleetWise.Types.Tag
+    Amazonka.IoTFleetWise.Types.TimeBasedCollectionScheme
+    Amazonka.IoTFleetWise.Types.TimestreamRegistrationResponse
+    Amazonka.IoTFleetWise.Types.TimestreamResources
+    Amazonka.IoTFleetWise.Types.TriggerMode
+    Amazonka.IoTFleetWise.Types.UpdateCampaignAction
+    Amazonka.IoTFleetWise.Types.UpdateMode
+    Amazonka.IoTFleetWise.Types.UpdateVehicleError
+    Amazonka.IoTFleetWise.Types.UpdateVehicleRequestItem
+    Amazonka.IoTFleetWise.Types.UpdateVehicleResponseItem
+    Amazonka.IoTFleetWise.Types.VehicleAssociationBehavior
+    Amazonka.IoTFleetWise.Types.VehicleState
+    Amazonka.IoTFleetWise.Types.VehicleStatus
+    Amazonka.IoTFleetWise.Types.VehicleSummary
+    Amazonka.IoTFleetWise.UntagResource
+    Amazonka.IoTFleetWise.UpdateCampaign
+    Amazonka.IoTFleetWise.UpdateDecoderManifest
+    Amazonka.IoTFleetWise.UpdateFleet
+    Amazonka.IoTFleetWise.UpdateModelManifest
+    Amazonka.IoTFleetWise.UpdateSignalCatalog
+    Amazonka.IoTFleetWise.UpdateVehicle
+    Amazonka.IoTFleetWise.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-iotfleetwise-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.IoTFleetWise
+    Test.Amazonka.IoTFleetWise
+    Test.Amazonka.IoTFleetWise.Internal
+
+  build-depends:
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-iotfleetwise
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateVehicleFleet.yaml b/fixture/AssociateVehicleFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateVehicleFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/AssociateVehicleFleetResponse.proto b/fixture/AssociateVehicleFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateVehicleFleetResponse.proto
diff --git a/fixture/BatchCreateVehicle.yaml b/fixture/BatchCreateVehicle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreateVehicle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/BatchCreateVehicleResponse.proto b/fixture/BatchCreateVehicleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreateVehicleResponse.proto
diff --git a/fixture/BatchUpdateVehicle.yaml b/fixture/BatchUpdateVehicle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchUpdateVehicle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/BatchUpdateVehicleResponse.proto b/fixture/BatchUpdateVehicleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchUpdateVehicleResponse.proto
diff --git a/fixture/CreateCampaign.yaml b/fixture/CreateCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/CreateCampaignResponse.proto b/fixture/CreateCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCampaignResponse.proto
diff --git a/fixture/CreateDecoderManifest.yaml b/fixture/CreateDecoderManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDecoderManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/CreateDecoderManifestResponse.proto b/fixture/CreateDecoderManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDecoderManifestResponse.proto
diff --git a/fixture/CreateFleet.yaml b/fixture/CreateFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/CreateFleetResponse.proto b/fixture/CreateFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFleetResponse.proto
diff --git a/fixture/CreateModelManifest.yaml b/fixture/CreateModelManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateModelManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/CreateModelManifestResponse.proto b/fixture/CreateModelManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateModelManifestResponse.proto
diff --git a/fixture/CreateSignalCatalog.yaml b/fixture/CreateSignalCatalog.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSignalCatalog.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/CreateSignalCatalogResponse.proto b/fixture/CreateSignalCatalogResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSignalCatalogResponse.proto
diff --git a/fixture/CreateVehicle.yaml b/fixture/CreateVehicle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVehicle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/CreateVehicleResponse.proto b/fixture/CreateVehicleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVehicleResponse.proto
diff --git a/fixture/DeleteCampaign.yaml b/fixture/DeleteCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/DeleteCampaignResponse.proto b/fixture/DeleteCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCampaignResponse.proto
diff --git a/fixture/DeleteDecoderManifest.yaml b/fixture/DeleteDecoderManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDecoderManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/DeleteDecoderManifestResponse.proto b/fixture/DeleteDecoderManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDecoderManifestResponse.proto
diff --git a/fixture/DeleteFleet.yaml b/fixture/DeleteFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/DeleteFleetResponse.proto b/fixture/DeleteFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFleetResponse.proto
diff --git a/fixture/DeleteModelManifest.yaml b/fixture/DeleteModelManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteModelManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/DeleteModelManifestResponse.proto b/fixture/DeleteModelManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteModelManifestResponse.proto
diff --git a/fixture/DeleteSignalCatalog.yaml b/fixture/DeleteSignalCatalog.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSignalCatalog.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/DeleteSignalCatalogResponse.proto b/fixture/DeleteSignalCatalogResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSignalCatalogResponse.proto
diff --git a/fixture/DeleteVehicle.yaml b/fixture/DeleteVehicle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVehicle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/DeleteVehicleResponse.proto b/fixture/DeleteVehicleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVehicleResponse.proto
diff --git a/fixture/DisassociateVehicleFleet.yaml b/fixture/DisassociateVehicleFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateVehicleFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/DisassociateVehicleFleetResponse.proto b/fixture/DisassociateVehicleFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateVehicleFleetResponse.proto
diff --git a/fixture/GetCampaign.yaml b/fixture/GetCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetCampaignResponse.proto b/fixture/GetCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCampaignResponse.proto
diff --git a/fixture/GetDecoderManifest.yaml b/fixture/GetDecoderManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDecoderManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetDecoderManifestResponse.proto b/fixture/GetDecoderManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDecoderManifestResponse.proto
diff --git a/fixture/GetFleet.yaml b/fixture/GetFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetFleetResponse.proto b/fixture/GetFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFleetResponse.proto
diff --git a/fixture/GetLoggingOptions.yaml b/fixture/GetLoggingOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLoggingOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetLoggingOptionsResponse.proto b/fixture/GetLoggingOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLoggingOptionsResponse.proto
diff --git a/fixture/GetModelManifest.yaml b/fixture/GetModelManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetModelManifestResponse.proto b/fixture/GetModelManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetModelManifestResponse.proto
diff --git a/fixture/GetRegisterAccountStatus.yaml b/fixture/GetRegisterAccountStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRegisterAccountStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetRegisterAccountStatusResponse.proto b/fixture/GetRegisterAccountStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRegisterAccountStatusResponse.proto
diff --git a/fixture/GetSignalCatalog.yaml b/fixture/GetSignalCatalog.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSignalCatalog.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetSignalCatalogResponse.proto b/fixture/GetSignalCatalogResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSignalCatalogResponse.proto
diff --git a/fixture/GetVehicle.yaml b/fixture/GetVehicle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVehicle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetVehicleResponse.proto b/fixture/GetVehicleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVehicleResponse.proto
diff --git a/fixture/GetVehicleStatus.yaml b/fixture/GetVehicleStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVehicleStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/GetVehicleStatusResponse.proto b/fixture/GetVehicleStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVehicleStatusResponse.proto
diff --git a/fixture/ImportDecoderManifest.yaml b/fixture/ImportDecoderManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportDecoderManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ImportDecoderManifestResponse.proto b/fixture/ImportDecoderManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportDecoderManifestResponse.proto
diff --git a/fixture/ImportSignalCatalog.yaml b/fixture/ImportSignalCatalog.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportSignalCatalog.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ImportSignalCatalogResponse.proto b/fixture/ImportSignalCatalogResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportSignalCatalogResponse.proto
diff --git a/fixture/ListCampaigns.yaml b/fixture/ListCampaigns.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCampaigns.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListCampaignsResponse.proto b/fixture/ListCampaignsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCampaignsResponse.proto
diff --git a/fixture/ListDecoderManifestNetworkInterfaces.yaml b/fixture/ListDecoderManifestNetworkInterfaces.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDecoderManifestNetworkInterfaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListDecoderManifestNetworkInterfacesResponse.proto b/fixture/ListDecoderManifestNetworkInterfacesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDecoderManifestNetworkInterfacesResponse.proto
diff --git a/fixture/ListDecoderManifestSignals.yaml b/fixture/ListDecoderManifestSignals.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDecoderManifestSignals.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListDecoderManifestSignalsResponse.proto b/fixture/ListDecoderManifestSignalsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDecoderManifestSignalsResponse.proto
diff --git a/fixture/ListDecoderManifests.yaml b/fixture/ListDecoderManifests.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDecoderManifests.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListDecoderManifestsResponse.proto b/fixture/ListDecoderManifestsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDecoderManifestsResponse.proto
diff --git a/fixture/ListFleets.yaml b/fixture/ListFleets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFleets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListFleetsForVehicle.yaml b/fixture/ListFleetsForVehicle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFleetsForVehicle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListFleetsForVehicleResponse.proto b/fixture/ListFleetsForVehicleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFleetsForVehicleResponse.proto
diff --git a/fixture/ListFleetsResponse.proto b/fixture/ListFleetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFleetsResponse.proto
diff --git a/fixture/ListModelManifestNodes.yaml b/fixture/ListModelManifestNodes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListModelManifestNodes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListModelManifestNodesResponse.proto b/fixture/ListModelManifestNodesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListModelManifestNodesResponse.proto
diff --git a/fixture/ListModelManifests.yaml b/fixture/ListModelManifests.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListModelManifests.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListModelManifestsResponse.proto b/fixture/ListModelManifestsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListModelManifestsResponse.proto
diff --git a/fixture/ListSignalCatalogNodes.yaml b/fixture/ListSignalCatalogNodes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSignalCatalogNodes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListSignalCatalogNodesResponse.proto b/fixture/ListSignalCatalogNodesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSignalCatalogNodesResponse.proto
diff --git a/fixture/ListSignalCatalogs.yaml b/fixture/ListSignalCatalogs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSignalCatalogs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListSignalCatalogsResponse.proto b/fixture/ListSignalCatalogsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSignalCatalogsResponse.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: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListVehicles.yaml b/fixture/ListVehicles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListVehicles.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListVehiclesInFleet.yaml b/fixture/ListVehiclesInFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListVehiclesInFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/ListVehiclesInFleetResponse.proto b/fixture/ListVehiclesInFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListVehiclesInFleetResponse.proto
diff --git a/fixture/ListVehiclesResponse.proto b/fixture/ListVehiclesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListVehiclesResponse.proto
diff --git a/fixture/PutLoggingOptions.yaml b/fixture/PutLoggingOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutLoggingOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/PutLoggingOptionsResponse.proto b/fixture/PutLoggingOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutLoggingOptionsResponse.proto
diff --git a/fixture/RegisterAccount.yaml b/fixture/RegisterAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/RegisterAccountResponse.proto b/fixture/RegisterAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterAccountResponse.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/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/UpdateCampaign.yaml b/fixture/UpdateCampaign.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCampaign.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/UpdateCampaignResponse.proto b/fixture/UpdateCampaignResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCampaignResponse.proto
diff --git a/fixture/UpdateDecoderManifest.yaml b/fixture/UpdateDecoderManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDecoderManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/UpdateDecoderManifestResponse.proto b/fixture/UpdateDecoderManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDecoderManifestResponse.proto
diff --git a/fixture/UpdateFleet.yaml b/fixture/UpdateFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/UpdateFleetResponse.proto b/fixture/UpdateFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFleetResponse.proto
diff --git a/fixture/UpdateModelManifest.yaml b/fixture/UpdateModelManifest.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModelManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/UpdateModelManifestResponse.proto b/fixture/UpdateModelManifestResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateModelManifestResponse.proto
diff --git a/fixture/UpdateSignalCatalog.yaml b/fixture/UpdateSignalCatalog.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSignalCatalog.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/UpdateSignalCatalogResponse.proto b/fixture/UpdateSignalCatalogResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSignalCatalogResponse.proto
diff --git a/fixture/UpdateVehicle.yaml b/fixture/UpdateVehicle.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVehicle.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/iotfleetwise/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  iotfleetwise.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/UpdateVehicleResponse.proto b/fixture/UpdateVehicleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVehicleResponse.proto
diff --git a/gen/Amazonka/IoTFleetWise.hs b/gen/Amazonka/IoTFleetWise.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise.hs
@@ -0,0 +1,647 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.IoTFleetWise
+-- 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 @2021-06-17@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Web Services IoT FleetWise is a fully managed service that you
+-- can use to collect, model, and transfer vehicle data to the Amazon Web
+-- Services cloud at scale. With Amazon Web Services IoT FleetWise, you can
+-- standardize all of your vehicle data models, independent of the
+-- in-vehicle communication architecture, and define data collection rules
+-- to transfer only high-value data to the cloud.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/ What is Amazon Web Services IoT FleetWise?>
+-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
+module Amazonka.IoTFleetWise
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** DecoderManifestValidationException
+    _DecoderManifestValidationException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** InvalidNodeException
+    _InvalidNodeException,
+
+    -- ** InvalidSignalsException
+    _InvalidSignalsException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateVehicleFleet
+    AssociateVehicleFleet (AssociateVehicleFleet'),
+    newAssociateVehicleFleet,
+    AssociateVehicleFleetResponse (AssociateVehicleFleetResponse'),
+    newAssociateVehicleFleetResponse,
+
+    -- ** BatchCreateVehicle
+    BatchCreateVehicle (BatchCreateVehicle'),
+    newBatchCreateVehicle,
+    BatchCreateVehicleResponse (BatchCreateVehicleResponse'),
+    newBatchCreateVehicleResponse,
+
+    -- ** BatchUpdateVehicle
+    BatchUpdateVehicle (BatchUpdateVehicle'),
+    newBatchUpdateVehicle,
+    BatchUpdateVehicleResponse (BatchUpdateVehicleResponse'),
+    newBatchUpdateVehicleResponse,
+
+    -- ** CreateCampaign
+    CreateCampaign (CreateCampaign'),
+    newCreateCampaign,
+    CreateCampaignResponse (CreateCampaignResponse'),
+    newCreateCampaignResponse,
+
+    -- ** CreateDecoderManifest
+    CreateDecoderManifest (CreateDecoderManifest'),
+    newCreateDecoderManifest,
+    CreateDecoderManifestResponse (CreateDecoderManifestResponse'),
+    newCreateDecoderManifestResponse,
+
+    -- ** CreateFleet
+    CreateFleet (CreateFleet'),
+    newCreateFleet,
+    CreateFleetResponse (CreateFleetResponse'),
+    newCreateFleetResponse,
+
+    -- ** CreateModelManifest
+    CreateModelManifest (CreateModelManifest'),
+    newCreateModelManifest,
+    CreateModelManifestResponse (CreateModelManifestResponse'),
+    newCreateModelManifestResponse,
+
+    -- ** CreateSignalCatalog
+    CreateSignalCatalog (CreateSignalCatalog'),
+    newCreateSignalCatalog,
+    CreateSignalCatalogResponse (CreateSignalCatalogResponse'),
+    newCreateSignalCatalogResponse,
+
+    -- ** CreateVehicle
+    CreateVehicle (CreateVehicle'),
+    newCreateVehicle,
+    CreateVehicleResponse (CreateVehicleResponse'),
+    newCreateVehicleResponse,
+
+    -- ** DeleteCampaign
+    DeleteCampaign (DeleteCampaign'),
+    newDeleteCampaign,
+    DeleteCampaignResponse (DeleteCampaignResponse'),
+    newDeleteCampaignResponse,
+
+    -- ** DeleteDecoderManifest
+    DeleteDecoderManifest (DeleteDecoderManifest'),
+    newDeleteDecoderManifest,
+    DeleteDecoderManifestResponse (DeleteDecoderManifestResponse'),
+    newDeleteDecoderManifestResponse,
+
+    -- ** DeleteFleet
+    DeleteFleet (DeleteFleet'),
+    newDeleteFleet,
+    DeleteFleetResponse (DeleteFleetResponse'),
+    newDeleteFleetResponse,
+
+    -- ** DeleteModelManifest
+    DeleteModelManifest (DeleteModelManifest'),
+    newDeleteModelManifest,
+    DeleteModelManifestResponse (DeleteModelManifestResponse'),
+    newDeleteModelManifestResponse,
+
+    -- ** DeleteSignalCatalog
+    DeleteSignalCatalog (DeleteSignalCatalog'),
+    newDeleteSignalCatalog,
+    DeleteSignalCatalogResponse (DeleteSignalCatalogResponse'),
+    newDeleteSignalCatalogResponse,
+
+    -- ** DeleteVehicle
+    DeleteVehicle (DeleteVehicle'),
+    newDeleteVehicle,
+    DeleteVehicleResponse (DeleteVehicleResponse'),
+    newDeleteVehicleResponse,
+
+    -- ** DisassociateVehicleFleet
+    DisassociateVehicleFleet (DisassociateVehicleFleet'),
+    newDisassociateVehicleFleet,
+    DisassociateVehicleFleetResponse (DisassociateVehicleFleetResponse'),
+    newDisassociateVehicleFleetResponse,
+
+    -- ** GetCampaign
+    GetCampaign (GetCampaign'),
+    newGetCampaign,
+    GetCampaignResponse (GetCampaignResponse'),
+    newGetCampaignResponse,
+
+    -- ** GetDecoderManifest
+    GetDecoderManifest (GetDecoderManifest'),
+    newGetDecoderManifest,
+    GetDecoderManifestResponse (GetDecoderManifestResponse'),
+    newGetDecoderManifestResponse,
+
+    -- ** GetFleet
+    GetFleet (GetFleet'),
+    newGetFleet,
+    GetFleetResponse (GetFleetResponse'),
+    newGetFleetResponse,
+
+    -- ** GetLoggingOptions
+    GetLoggingOptions (GetLoggingOptions'),
+    newGetLoggingOptions,
+    GetLoggingOptionsResponse (GetLoggingOptionsResponse'),
+    newGetLoggingOptionsResponse,
+
+    -- ** GetModelManifest
+    GetModelManifest (GetModelManifest'),
+    newGetModelManifest,
+    GetModelManifestResponse (GetModelManifestResponse'),
+    newGetModelManifestResponse,
+
+    -- ** GetRegisterAccountStatus
+    GetRegisterAccountStatus (GetRegisterAccountStatus'),
+    newGetRegisterAccountStatus,
+    GetRegisterAccountStatusResponse (GetRegisterAccountStatusResponse'),
+    newGetRegisterAccountStatusResponse,
+
+    -- ** GetSignalCatalog
+    GetSignalCatalog (GetSignalCatalog'),
+    newGetSignalCatalog,
+    GetSignalCatalogResponse (GetSignalCatalogResponse'),
+    newGetSignalCatalogResponse,
+
+    -- ** GetVehicle
+    GetVehicle (GetVehicle'),
+    newGetVehicle,
+    GetVehicleResponse (GetVehicleResponse'),
+    newGetVehicleResponse,
+
+    -- ** GetVehicleStatus (Paginated)
+    GetVehicleStatus (GetVehicleStatus'),
+    newGetVehicleStatus,
+    GetVehicleStatusResponse (GetVehicleStatusResponse'),
+    newGetVehicleStatusResponse,
+
+    -- ** ImportDecoderManifest
+    ImportDecoderManifest (ImportDecoderManifest'),
+    newImportDecoderManifest,
+    ImportDecoderManifestResponse (ImportDecoderManifestResponse'),
+    newImportDecoderManifestResponse,
+
+    -- ** ImportSignalCatalog
+    ImportSignalCatalog (ImportSignalCatalog'),
+    newImportSignalCatalog,
+    ImportSignalCatalogResponse (ImportSignalCatalogResponse'),
+    newImportSignalCatalogResponse,
+
+    -- ** ListCampaigns (Paginated)
+    ListCampaigns (ListCampaigns'),
+    newListCampaigns,
+    ListCampaignsResponse (ListCampaignsResponse'),
+    newListCampaignsResponse,
+
+    -- ** ListDecoderManifestNetworkInterfaces (Paginated)
+    ListDecoderManifestNetworkInterfaces (ListDecoderManifestNetworkInterfaces'),
+    newListDecoderManifestNetworkInterfaces,
+    ListDecoderManifestNetworkInterfacesResponse (ListDecoderManifestNetworkInterfacesResponse'),
+    newListDecoderManifestNetworkInterfacesResponse,
+
+    -- ** ListDecoderManifestSignals (Paginated)
+    ListDecoderManifestSignals (ListDecoderManifestSignals'),
+    newListDecoderManifestSignals,
+    ListDecoderManifestSignalsResponse (ListDecoderManifestSignalsResponse'),
+    newListDecoderManifestSignalsResponse,
+
+    -- ** ListDecoderManifests (Paginated)
+    ListDecoderManifests (ListDecoderManifests'),
+    newListDecoderManifests,
+    ListDecoderManifestsResponse (ListDecoderManifestsResponse'),
+    newListDecoderManifestsResponse,
+
+    -- ** ListFleets (Paginated)
+    ListFleets (ListFleets'),
+    newListFleets,
+    ListFleetsResponse (ListFleetsResponse'),
+    newListFleetsResponse,
+
+    -- ** ListFleetsForVehicle (Paginated)
+    ListFleetsForVehicle (ListFleetsForVehicle'),
+    newListFleetsForVehicle,
+    ListFleetsForVehicleResponse (ListFleetsForVehicleResponse'),
+    newListFleetsForVehicleResponse,
+
+    -- ** ListModelManifestNodes (Paginated)
+    ListModelManifestNodes (ListModelManifestNodes'),
+    newListModelManifestNodes,
+    ListModelManifestNodesResponse (ListModelManifestNodesResponse'),
+    newListModelManifestNodesResponse,
+
+    -- ** ListModelManifests (Paginated)
+    ListModelManifests (ListModelManifests'),
+    newListModelManifests,
+    ListModelManifestsResponse (ListModelManifestsResponse'),
+    newListModelManifestsResponse,
+
+    -- ** ListSignalCatalogNodes (Paginated)
+    ListSignalCatalogNodes (ListSignalCatalogNodes'),
+    newListSignalCatalogNodes,
+    ListSignalCatalogNodesResponse (ListSignalCatalogNodesResponse'),
+    newListSignalCatalogNodesResponse,
+
+    -- ** ListSignalCatalogs (Paginated)
+    ListSignalCatalogs (ListSignalCatalogs'),
+    newListSignalCatalogs,
+    ListSignalCatalogsResponse (ListSignalCatalogsResponse'),
+    newListSignalCatalogsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListVehicles (Paginated)
+    ListVehicles (ListVehicles'),
+    newListVehicles,
+    ListVehiclesResponse (ListVehiclesResponse'),
+    newListVehiclesResponse,
+
+    -- ** ListVehiclesInFleet (Paginated)
+    ListVehiclesInFleet (ListVehiclesInFleet'),
+    newListVehiclesInFleet,
+    ListVehiclesInFleetResponse (ListVehiclesInFleetResponse'),
+    newListVehiclesInFleetResponse,
+
+    -- ** PutLoggingOptions
+    PutLoggingOptions (PutLoggingOptions'),
+    newPutLoggingOptions,
+    PutLoggingOptionsResponse (PutLoggingOptionsResponse'),
+    newPutLoggingOptionsResponse,
+
+    -- ** RegisterAccount
+    RegisterAccount (RegisterAccount'),
+    newRegisterAccount,
+    RegisterAccountResponse (RegisterAccountResponse'),
+    newRegisterAccountResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateCampaign
+    UpdateCampaign (UpdateCampaign'),
+    newUpdateCampaign,
+    UpdateCampaignResponse (UpdateCampaignResponse'),
+    newUpdateCampaignResponse,
+
+    -- ** UpdateDecoderManifest
+    UpdateDecoderManifest (UpdateDecoderManifest'),
+    newUpdateDecoderManifest,
+    UpdateDecoderManifestResponse (UpdateDecoderManifestResponse'),
+    newUpdateDecoderManifestResponse,
+
+    -- ** UpdateFleet
+    UpdateFleet (UpdateFleet'),
+    newUpdateFleet,
+    UpdateFleetResponse (UpdateFleetResponse'),
+    newUpdateFleetResponse,
+
+    -- ** UpdateModelManifest
+    UpdateModelManifest (UpdateModelManifest'),
+    newUpdateModelManifest,
+    UpdateModelManifestResponse (UpdateModelManifestResponse'),
+    newUpdateModelManifestResponse,
+
+    -- ** UpdateSignalCatalog
+    UpdateSignalCatalog (UpdateSignalCatalog'),
+    newUpdateSignalCatalog,
+    UpdateSignalCatalogResponse (UpdateSignalCatalogResponse'),
+    newUpdateSignalCatalogResponse,
+
+    -- ** UpdateVehicle
+    UpdateVehicle (UpdateVehicle'),
+    newUpdateVehicle,
+    UpdateVehicleResponse (UpdateVehicleResponse'),
+    newUpdateVehicleResponse,
+
+    -- * Types
+
+    -- ** CampaignStatus
+    CampaignStatus (..),
+
+    -- ** Compression
+    Compression (..),
+
+    -- ** DiagnosticsMode
+    DiagnosticsMode (..),
+
+    -- ** LogType
+    LogType (..),
+
+    -- ** ManifestStatus
+    ManifestStatus (..),
+
+    -- ** NetworkInterfaceType
+    NetworkInterfaceType (..),
+
+    -- ** NodeDataType
+    NodeDataType (..),
+
+    -- ** RegistrationStatus
+    RegistrationStatus (..),
+
+    -- ** SignalDecoderType
+    SignalDecoderType (..),
+
+    -- ** SpoolingMode
+    SpoolingMode (..),
+
+    -- ** TriggerMode
+    TriggerMode (..),
+
+    -- ** UpdateCampaignAction
+    UpdateCampaignAction (..),
+
+    -- ** UpdateMode
+    UpdateMode (..),
+
+    -- ** VehicleAssociationBehavior
+    VehicleAssociationBehavior (..),
+
+    -- ** VehicleState
+    VehicleState (..),
+
+    -- ** Actuator
+    Actuator (Actuator'),
+    newActuator,
+
+    -- ** Attribute
+    Attribute (Attribute'),
+    newAttribute,
+
+    -- ** Branch
+    Branch (Branch'),
+    newBranch,
+
+    -- ** CampaignSummary
+    CampaignSummary (CampaignSummary'),
+    newCampaignSummary,
+
+    -- ** CanDbcDefinition
+    CanDbcDefinition (CanDbcDefinition'),
+    newCanDbcDefinition,
+
+    -- ** CanInterface
+    CanInterface (CanInterface'),
+    newCanInterface,
+
+    -- ** CanSignal
+    CanSignal (CanSignal'),
+    newCanSignal,
+
+    -- ** CloudWatchLogDeliveryOptions
+    CloudWatchLogDeliveryOptions (CloudWatchLogDeliveryOptions'),
+    newCloudWatchLogDeliveryOptions,
+
+    -- ** CollectionScheme
+    CollectionScheme (CollectionScheme'),
+    newCollectionScheme,
+
+    -- ** ConditionBasedCollectionScheme
+    ConditionBasedCollectionScheme (ConditionBasedCollectionScheme'),
+    newConditionBasedCollectionScheme,
+
+    -- ** CreateVehicleError
+    CreateVehicleError (CreateVehicleError'),
+    newCreateVehicleError,
+
+    -- ** CreateVehicleRequestItem
+    CreateVehicleRequestItem (CreateVehicleRequestItem'),
+    newCreateVehicleRequestItem,
+
+    -- ** CreateVehicleResponseItem
+    CreateVehicleResponseItem (CreateVehicleResponseItem'),
+    newCreateVehicleResponseItem,
+
+    -- ** DecoderManifestSummary
+    DecoderManifestSummary (DecoderManifestSummary'),
+    newDecoderManifestSummary,
+
+    -- ** FleetSummary
+    FleetSummary (FleetSummary'),
+    newFleetSummary,
+
+    -- ** FormattedVss
+    FormattedVss (FormattedVss'),
+    newFormattedVss,
+
+    -- ** IamRegistrationResponse
+    IamRegistrationResponse (IamRegistrationResponse'),
+    newIamRegistrationResponse,
+
+    -- ** IamResources
+    IamResources (IamResources'),
+    newIamResources,
+
+    -- ** ModelManifestSummary
+    ModelManifestSummary (ModelManifestSummary'),
+    newModelManifestSummary,
+
+    -- ** NetworkFileDefinition
+    NetworkFileDefinition (NetworkFileDefinition'),
+    newNetworkFileDefinition,
+
+    -- ** NetworkInterface
+    NetworkInterface (NetworkInterface'),
+    newNetworkInterface,
+
+    -- ** Node
+    Node (Node'),
+    newNode,
+
+    -- ** NodeCounts
+    NodeCounts (NodeCounts'),
+    newNodeCounts,
+
+    -- ** ObdInterface
+    ObdInterface (ObdInterface'),
+    newObdInterface,
+
+    -- ** ObdSignal
+    ObdSignal (ObdSignal'),
+    newObdSignal,
+
+    -- ** Sensor
+    Sensor (Sensor'),
+    newSensor,
+
+    -- ** SignalCatalogSummary
+    SignalCatalogSummary (SignalCatalogSummary'),
+    newSignalCatalogSummary,
+
+    -- ** SignalDecoder
+    SignalDecoder (SignalDecoder'),
+    newSignalDecoder,
+
+    -- ** SignalInformation
+    SignalInformation (SignalInformation'),
+    newSignalInformation,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TimeBasedCollectionScheme
+    TimeBasedCollectionScheme (TimeBasedCollectionScheme'),
+    newTimeBasedCollectionScheme,
+
+    -- ** TimestreamRegistrationResponse
+    TimestreamRegistrationResponse (TimestreamRegistrationResponse'),
+    newTimestreamRegistrationResponse,
+
+    -- ** TimestreamResources
+    TimestreamResources (TimestreamResources'),
+    newTimestreamResources,
+
+    -- ** UpdateVehicleError
+    UpdateVehicleError (UpdateVehicleError'),
+    newUpdateVehicleError,
+
+    -- ** UpdateVehicleRequestItem
+    UpdateVehicleRequestItem (UpdateVehicleRequestItem'),
+    newUpdateVehicleRequestItem,
+
+    -- ** UpdateVehicleResponseItem
+    UpdateVehicleResponseItem (UpdateVehicleResponseItem'),
+    newUpdateVehicleResponseItem,
+
+    -- ** VehicleStatus
+    VehicleStatus (VehicleStatus'),
+    newVehicleStatus,
+
+    -- ** VehicleSummary
+    VehicleSummary (VehicleSummary'),
+    newVehicleSummary,
+  )
+where
+
+import Amazonka.IoTFleetWise.AssociateVehicleFleet
+import Amazonka.IoTFleetWise.BatchCreateVehicle
+import Amazonka.IoTFleetWise.BatchUpdateVehicle
+import Amazonka.IoTFleetWise.CreateCampaign
+import Amazonka.IoTFleetWise.CreateDecoderManifest
+import Amazonka.IoTFleetWise.CreateFleet
+import Amazonka.IoTFleetWise.CreateModelManifest
+import Amazonka.IoTFleetWise.CreateSignalCatalog
+import Amazonka.IoTFleetWise.CreateVehicle
+import Amazonka.IoTFleetWise.DeleteCampaign
+import Amazonka.IoTFleetWise.DeleteDecoderManifest
+import Amazonka.IoTFleetWise.DeleteFleet
+import Amazonka.IoTFleetWise.DeleteModelManifest
+import Amazonka.IoTFleetWise.DeleteSignalCatalog
+import Amazonka.IoTFleetWise.DeleteVehicle
+import Amazonka.IoTFleetWise.DisassociateVehicleFleet
+import Amazonka.IoTFleetWise.GetCampaign
+import Amazonka.IoTFleetWise.GetDecoderManifest
+import Amazonka.IoTFleetWise.GetFleet
+import Amazonka.IoTFleetWise.GetLoggingOptions
+import Amazonka.IoTFleetWise.GetModelManifest
+import Amazonka.IoTFleetWise.GetRegisterAccountStatus
+import Amazonka.IoTFleetWise.GetSignalCatalog
+import Amazonka.IoTFleetWise.GetVehicle
+import Amazonka.IoTFleetWise.GetVehicleStatus
+import Amazonka.IoTFleetWise.ImportDecoderManifest
+import Amazonka.IoTFleetWise.ImportSignalCatalog
+import Amazonka.IoTFleetWise.Lens
+import Amazonka.IoTFleetWise.ListCampaigns
+import Amazonka.IoTFleetWise.ListDecoderManifestNetworkInterfaces
+import Amazonka.IoTFleetWise.ListDecoderManifestSignals
+import Amazonka.IoTFleetWise.ListDecoderManifests
+import Amazonka.IoTFleetWise.ListFleets
+import Amazonka.IoTFleetWise.ListFleetsForVehicle
+import Amazonka.IoTFleetWise.ListModelManifestNodes
+import Amazonka.IoTFleetWise.ListModelManifests
+import Amazonka.IoTFleetWise.ListSignalCatalogNodes
+import Amazonka.IoTFleetWise.ListSignalCatalogs
+import Amazonka.IoTFleetWise.ListTagsForResource
+import Amazonka.IoTFleetWise.ListVehicles
+import Amazonka.IoTFleetWise.ListVehiclesInFleet
+import Amazonka.IoTFleetWise.PutLoggingOptions
+import Amazonka.IoTFleetWise.RegisterAccount
+import Amazonka.IoTFleetWise.TagResource
+import Amazonka.IoTFleetWise.Types
+import Amazonka.IoTFleetWise.UntagResource
+import Amazonka.IoTFleetWise.UpdateCampaign
+import Amazonka.IoTFleetWise.UpdateDecoderManifest
+import Amazonka.IoTFleetWise.UpdateFleet
+import Amazonka.IoTFleetWise.UpdateModelManifest
+import Amazonka.IoTFleetWise.UpdateSignalCatalog
+import Amazonka.IoTFleetWise.UpdateVehicle
+import Amazonka.IoTFleetWise.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 'IoTFleetWise'.
+
+-- $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/IoTFleetWise/AssociateVehicleFleet.hs b/gen/Amazonka/IoTFleetWise/AssociateVehicleFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/AssociateVehicleFleet.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.AssociateVehicleFleet
+-- 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, or associates, a vehicle with a fleet.
+module Amazonka.IoTFleetWise.AssociateVehicleFleet
+  ( -- * Creating a Request
+    AssociateVehicleFleet (..),
+    newAssociateVehicleFleet,
+
+    -- * Request Lenses
+    associateVehicleFleet_vehicleName,
+    associateVehicleFleet_fleetId,
+
+    -- * Destructuring the Response
+    AssociateVehicleFleetResponse (..),
+    newAssociateVehicleFleetResponse,
+
+    -- * Response Lenses
+    associateVehicleFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateVehicleFleet' smart constructor.
+data AssociateVehicleFleet = AssociateVehicleFleet'
+  { -- | The unique ID of the vehicle to associate with the fleet.
+    vehicleName :: Prelude.Text,
+    -- | The ID of a fleet.
+    fleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateVehicleFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vehicleName', 'associateVehicleFleet_vehicleName' - The unique ID of the vehicle to associate with the fleet.
+--
+-- 'fleetId', 'associateVehicleFleet_fleetId' - The ID of a fleet.
+newAssociateVehicleFleet ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  -- | 'fleetId'
+  Prelude.Text ->
+  AssociateVehicleFleet
+newAssociateVehicleFleet pVehicleName_ pFleetId_ =
+  AssociateVehicleFleet'
+    { vehicleName = pVehicleName_,
+      fleetId = pFleetId_
+    }
+
+-- | The unique ID of the vehicle to associate with the fleet.
+associateVehicleFleet_vehicleName :: Lens.Lens' AssociateVehicleFleet Prelude.Text
+associateVehicleFleet_vehicleName = Lens.lens (\AssociateVehicleFleet' {vehicleName} -> vehicleName) (\s@AssociateVehicleFleet' {} a -> s {vehicleName = a} :: AssociateVehicleFleet)
+
+-- | The ID of a fleet.
+associateVehicleFleet_fleetId :: Lens.Lens' AssociateVehicleFleet Prelude.Text
+associateVehicleFleet_fleetId = Lens.lens (\AssociateVehicleFleet' {fleetId} -> fleetId) (\s@AssociateVehicleFleet' {} a -> s {fleetId = a} :: AssociateVehicleFleet)
+
+instance Core.AWSRequest AssociateVehicleFleet where
+  type
+    AWSResponse AssociateVehicleFleet =
+      AssociateVehicleFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateVehicleFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateVehicleFleet where
+  hashWithSalt _salt AssociateVehicleFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` vehicleName
+      `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData AssociateVehicleFleet where
+  rnf AssociateVehicleFleet' {..} =
+    Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf fleetId
+
+instance Data.ToHeaders AssociateVehicleFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.AssociateVehicleFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateVehicleFleet where
+  toJSON AssociateVehicleFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("vehicleName" Data..= vehicleName),
+            Prelude.Just ("fleetId" Data..= fleetId)
+          ]
+      )
+
+instance Data.ToPath AssociateVehicleFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateVehicleFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateVehicleFleetResponse' smart constructor.
+data AssociateVehicleFleetResponse = AssociateVehicleFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateVehicleFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'associateVehicleFleetResponse_httpStatus' - The response's http status code.
+newAssociateVehicleFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateVehicleFleetResponse
+newAssociateVehicleFleetResponse pHttpStatus_ =
+  AssociateVehicleFleetResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateVehicleFleetResponse_httpStatus :: Lens.Lens' AssociateVehicleFleetResponse Prelude.Int
+associateVehicleFleetResponse_httpStatus = Lens.lens (\AssociateVehicleFleetResponse' {httpStatus} -> httpStatus) (\s@AssociateVehicleFleetResponse' {} a -> s {httpStatus = a} :: AssociateVehicleFleetResponse)
+
+instance Prelude.NFData AssociateVehicleFleetResponse where
+  rnf AssociateVehicleFleetResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/BatchCreateVehicle.hs b/gen/Amazonka/IoTFleetWise/BatchCreateVehicle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/BatchCreateVehicle.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.IoTFleetWise.BatchCreateVehicle
+-- 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 group, or batch, of vehicles.
+--
+-- You must specify a decoder manifest and a vehicle model (model manifest)
+-- for each vehicle.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/create-vehicles-cli.html Create multiple vehicles (AWS CLI)>
+-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
+module Amazonka.IoTFleetWise.BatchCreateVehicle
+  ( -- * Creating a Request
+    BatchCreateVehicle (..),
+    newBatchCreateVehicle,
+
+    -- * Request Lenses
+    batchCreateVehicle_vehicles,
+
+    -- * Destructuring the Response
+    BatchCreateVehicleResponse (..),
+    newBatchCreateVehicleResponse,
+
+    -- * Response Lenses
+    batchCreateVehicleResponse_errors,
+    batchCreateVehicleResponse_vehicles,
+    batchCreateVehicleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchCreateVehicle' smart constructor.
+data BatchCreateVehicle = BatchCreateVehicle'
+  { -- | A list of information about each vehicle to create. For more
+    -- information, see the API data type.
+    vehicles :: [CreateVehicleRequestItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateVehicle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vehicles', 'batchCreateVehicle_vehicles' - A list of information about each vehicle to create. For more
+-- information, see the API data type.
+newBatchCreateVehicle ::
+  BatchCreateVehicle
+newBatchCreateVehicle =
+  BatchCreateVehicle' {vehicles = Prelude.mempty}
+
+-- | A list of information about each vehicle to create. For more
+-- information, see the API data type.
+batchCreateVehicle_vehicles :: Lens.Lens' BatchCreateVehicle [CreateVehicleRequestItem]
+batchCreateVehicle_vehicles = Lens.lens (\BatchCreateVehicle' {vehicles} -> vehicles) (\s@BatchCreateVehicle' {} a -> s {vehicles = a} :: BatchCreateVehicle) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchCreateVehicle where
+  type
+    AWSResponse BatchCreateVehicle =
+      BatchCreateVehicleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchCreateVehicleResponse'
+            Prelude.<$> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "vehicles" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchCreateVehicle where
+  hashWithSalt _salt BatchCreateVehicle' {..} =
+    _salt `Prelude.hashWithSalt` vehicles
+
+instance Prelude.NFData BatchCreateVehicle where
+  rnf BatchCreateVehicle' {..} = Prelude.rnf vehicles
+
+instance Data.ToHeaders BatchCreateVehicle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.BatchCreateVehicle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchCreateVehicle where
+  toJSON BatchCreateVehicle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("vehicles" Data..= vehicles)]
+      )
+
+instance Data.ToPath BatchCreateVehicle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchCreateVehicle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchCreateVehicleResponse' smart constructor.
+data BatchCreateVehicleResponse = BatchCreateVehicleResponse'
+  { -- | A list of information about creation errors, or an empty list if there
+    -- aren\'t any errors.
+    errors :: Prelude.Maybe [CreateVehicleError],
+    -- | A list of information about a batch of created vehicles. For more
+    -- information, see the API data type.
+    vehicles :: Prelude.Maybe [CreateVehicleResponseItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchCreateVehicleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'batchCreateVehicleResponse_errors' - A list of information about creation errors, or an empty list if there
+-- aren\'t any errors.
+--
+-- 'vehicles', 'batchCreateVehicleResponse_vehicles' - A list of information about a batch of created vehicles. For more
+-- information, see the API data type.
+--
+-- 'httpStatus', 'batchCreateVehicleResponse_httpStatus' - The response's http status code.
+newBatchCreateVehicleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchCreateVehicleResponse
+newBatchCreateVehicleResponse pHttpStatus_ =
+  BatchCreateVehicleResponse'
+    { errors =
+        Prelude.Nothing,
+      vehicles = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of information about creation errors, or an empty list if there
+-- aren\'t any errors.
+batchCreateVehicleResponse_errors :: Lens.Lens' BatchCreateVehicleResponse (Prelude.Maybe [CreateVehicleError])
+batchCreateVehicleResponse_errors = Lens.lens (\BatchCreateVehicleResponse' {errors} -> errors) (\s@BatchCreateVehicleResponse' {} a -> s {errors = a} :: BatchCreateVehicleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of information about a batch of created vehicles. For more
+-- information, see the API data type.
+batchCreateVehicleResponse_vehicles :: Lens.Lens' BatchCreateVehicleResponse (Prelude.Maybe [CreateVehicleResponseItem])
+batchCreateVehicleResponse_vehicles = Lens.lens (\BatchCreateVehicleResponse' {vehicles} -> vehicles) (\s@BatchCreateVehicleResponse' {} a -> s {vehicles = a} :: BatchCreateVehicleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchCreateVehicleResponse_httpStatus :: Lens.Lens' BatchCreateVehicleResponse Prelude.Int
+batchCreateVehicleResponse_httpStatus = Lens.lens (\BatchCreateVehicleResponse' {httpStatus} -> httpStatus) (\s@BatchCreateVehicleResponse' {} a -> s {httpStatus = a} :: BatchCreateVehicleResponse)
+
+instance Prelude.NFData BatchCreateVehicleResponse where
+  rnf BatchCreateVehicleResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf vehicles
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/BatchUpdateVehicle.hs b/gen/Amazonka/IoTFleetWise/BatchUpdateVehicle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/BatchUpdateVehicle.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.IoTFleetWise.BatchUpdateVehicle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a group, or batch, of vehicles.
+--
+-- You must specify a decoder manifest and a vehicle model (model manifest)
+-- for each vehicle.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/update-vehicles-cli.html Update multiple vehicles (AWS CLI)>
+-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
+module Amazonka.IoTFleetWise.BatchUpdateVehicle
+  ( -- * Creating a Request
+    BatchUpdateVehicle (..),
+    newBatchUpdateVehicle,
+
+    -- * Request Lenses
+    batchUpdateVehicle_vehicles,
+
+    -- * Destructuring the Response
+    BatchUpdateVehicleResponse (..),
+    newBatchUpdateVehicleResponse,
+
+    -- * Response Lenses
+    batchUpdateVehicleResponse_errors,
+    batchUpdateVehicleResponse_vehicles,
+    batchUpdateVehicleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchUpdateVehicle' smart constructor.
+data BatchUpdateVehicle = BatchUpdateVehicle'
+  { -- | A list of information about the vehicles to update. For more
+    -- information, see the API data type.
+    vehicles :: [UpdateVehicleRequestItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateVehicle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vehicles', 'batchUpdateVehicle_vehicles' - A list of information about the vehicles to update. For more
+-- information, see the API data type.
+newBatchUpdateVehicle ::
+  BatchUpdateVehicle
+newBatchUpdateVehicle =
+  BatchUpdateVehicle' {vehicles = Prelude.mempty}
+
+-- | A list of information about the vehicles to update. For more
+-- information, see the API data type.
+batchUpdateVehicle_vehicles :: Lens.Lens' BatchUpdateVehicle [UpdateVehicleRequestItem]
+batchUpdateVehicle_vehicles = Lens.lens (\BatchUpdateVehicle' {vehicles} -> vehicles) (\s@BatchUpdateVehicle' {} a -> s {vehicles = a} :: BatchUpdateVehicle) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchUpdateVehicle where
+  type
+    AWSResponse BatchUpdateVehicle =
+      BatchUpdateVehicleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchUpdateVehicleResponse'
+            Prelude.<$> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "vehicles" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchUpdateVehicle where
+  hashWithSalt _salt BatchUpdateVehicle' {..} =
+    _salt `Prelude.hashWithSalt` vehicles
+
+instance Prelude.NFData BatchUpdateVehicle where
+  rnf BatchUpdateVehicle' {..} = Prelude.rnf vehicles
+
+instance Data.ToHeaders BatchUpdateVehicle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.BatchUpdateVehicle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchUpdateVehicle where
+  toJSON BatchUpdateVehicle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("vehicles" Data..= vehicles)]
+      )
+
+instance Data.ToPath BatchUpdateVehicle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchUpdateVehicle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchUpdateVehicleResponse' smart constructor.
+data BatchUpdateVehicleResponse = BatchUpdateVehicleResponse'
+  { -- | A list of information about errors returned while updating a batch of
+    -- vehicles, or, if there aren\'t any errors, an empty list.
+    errors :: Prelude.Maybe [UpdateVehicleError],
+    -- | A list of information about the batch of updated vehicles.
+    --
+    -- This list contains only unique IDs for the vehicles that were updated.
+    vehicles :: Prelude.Maybe [UpdateVehicleResponseItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateVehicleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'batchUpdateVehicleResponse_errors' - A list of information about errors returned while updating a batch of
+-- vehicles, or, if there aren\'t any errors, an empty list.
+--
+-- 'vehicles', 'batchUpdateVehicleResponse_vehicles' - A list of information about the batch of updated vehicles.
+--
+-- This list contains only unique IDs for the vehicles that were updated.
+--
+-- 'httpStatus', 'batchUpdateVehicleResponse_httpStatus' - The response's http status code.
+newBatchUpdateVehicleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchUpdateVehicleResponse
+newBatchUpdateVehicleResponse pHttpStatus_ =
+  BatchUpdateVehicleResponse'
+    { errors =
+        Prelude.Nothing,
+      vehicles = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of information about errors returned while updating a batch of
+-- vehicles, or, if there aren\'t any errors, an empty list.
+batchUpdateVehicleResponse_errors :: Lens.Lens' BatchUpdateVehicleResponse (Prelude.Maybe [UpdateVehicleError])
+batchUpdateVehicleResponse_errors = Lens.lens (\BatchUpdateVehicleResponse' {errors} -> errors) (\s@BatchUpdateVehicleResponse' {} a -> s {errors = a} :: BatchUpdateVehicleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of information about the batch of updated vehicles.
+--
+-- This list contains only unique IDs for the vehicles that were updated.
+batchUpdateVehicleResponse_vehicles :: Lens.Lens' BatchUpdateVehicleResponse (Prelude.Maybe [UpdateVehicleResponseItem])
+batchUpdateVehicleResponse_vehicles = Lens.lens (\BatchUpdateVehicleResponse' {vehicles} -> vehicles) (\s@BatchUpdateVehicleResponse' {} a -> s {vehicles = a} :: BatchUpdateVehicleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchUpdateVehicleResponse_httpStatus :: Lens.Lens' BatchUpdateVehicleResponse Prelude.Int
+batchUpdateVehicleResponse_httpStatus = Lens.lens (\BatchUpdateVehicleResponse' {httpStatus} -> httpStatus) (\s@BatchUpdateVehicleResponse' {} a -> s {httpStatus = a} :: BatchUpdateVehicleResponse)
+
+instance Prelude.NFData BatchUpdateVehicleResponse where
+  rnf BatchUpdateVehicleResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf vehicles
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/CreateCampaign.hs b/gen/Amazonka/IoTFleetWise/CreateCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/CreateCampaign.hs
@@ -0,0 +1,514 @@
+{-# 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.IoTFleetWise.CreateCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an orchestration of data collection rules. The Amazon Web
+-- Services IoT FleetWise Edge Agent software running in vehicles uses
+-- campaigns to decide how to collect and transfer data to the cloud. You
+-- create campaigns in the cloud. After you or your team approve campaigns,
+-- Amazon Web Services IoT FleetWise automatically deploys them to
+-- vehicles.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/campaigns.html Collect and transfer data with campaigns>
+-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
+module Amazonka.IoTFleetWise.CreateCampaign
+  ( -- * Creating a Request
+    CreateCampaign (..),
+    newCreateCampaign,
+
+    -- * Request Lenses
+    createCampaign_compression,
+    createCampaign_dataExtraDimensions,
+    createCampaign_description,
+    createCampaign_diagnosticsMode,
+    createCampaign_expiryTime,
+    createCampaign_postTriggerCollectionDuration,
+    createCampaign_priority,
+    createCampaign_signalsToCollect,
+    createCampaign_spoolingMode,
+    createCampaign_startTime,
+    createCampaign_tags,
+    createCampaign_name,
+    createCampaign_signalCatalogArn,
+    createCampaign_targetArn,
+    createCampaign_collectionScheme,
+
+    -- * Destructuring the Response
+    CreateCampaignResponse (..),
+    newCreateCampaignResponse,
+
+    -- * Response Lenses
+    createCampaignResponse_arn,
+    createCampaignResponse_name,
+    createCampaignResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCampaign' smart constructor.
+data CreateCampaign = CreateCampaign'
+  { -- | (Optional) Whether to compress signals before transmitting data to
+    -- Amazon Web Services IoT FleetWise. If you don\'t want to compress the
+    -- signals, use @OFF@. If it\'s not specified, @SNAPPY@ is used.
+    --
+    -- Default: @SNAPPY@
+    compression :: Prelude.Maybe Compression,
+    -- | (Optional) A list of vehicle attributes to associate with a campaign.
+    --
+    -- Enrich the data with specified vehicle attributes. For example, add
+    -- @make@ and @model@ to the campaign, and Amazon Web Services IoT
+    -- FleetWise will associate the data with those attributes as dimensions in
+    -- Amazon Timestream. You can then query the data against @make@ and
+    -- @model@.
+    --
+    -- Default: An empty array
+    dataExtraDimensions :: Prelude.Maybe [Prelude.Text],
+    -- | An optional description of the campaign to help identify its purpose.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | (Optional) Option for a vehicle to send diagnostic trouble codes to
+    -- Amazon Web Services IoT FleetWise. If you want to send diagnostic
+    -- trouble codes, use @SEND_ACTIVE_DTCS@. If it\'s not specified, @OFF@ is
+    -- used.
+    --
+    -- Default: @OFF@
+    diagnosticsMode :: Prelude.Maybe DiagnosticsMode,
+    -- | (Optional) The time the campaign expires, in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time). Vehicle data won\'t be collected
+    -- after the campaign expires.
+    --
+    -- Default: 253402214400 (December 31, 9999, 00:00:00 UTC)
+    expiryTime :: Prelude.Maybe Data.POSIX,
+    -- | (Optional) How long (in milliseconds) to collect raw data after a
+    -- triggering event initiates the collection. If it\'s not specified, @0@
+    -- is used.
+    --
+    -- Default: @0@
+    postTriggerCollectionDuration :: Prelude.Maybe Prelude.Natural,
+    -- | (Optional) A number indicating the priority of one campaign over another
+    -- campaign for a certain vehicle or fleet. A campaign with the lowest
+    -- value is deployed to vehicles before any other campaigns. If it\'s not
+    -- specified, @0@ is used.
+    --
+    -- Default: @0@
+    priority :: Prelude.Maybe Prelude.Natural,
+    -- | (Optional) A list of information about signals to collect.
+    signalsToCollect :: Prelude.Maybe [SignalInformation],
+    -- | (Optional) Whether to store collected data after a vehicle lost a
+    -- connection with the cloud. After a connection is re-established, the
+    -- data is automatically forwarded to Amazon Web Services IoT FleetWise. If
+    -- you want to store collected data when a vehicle loses connection with
+    -- the cloud, use @TO_DISK@. If it\'s not specified, @OFF@ is used.
+    --
+    -- Default: @OFF@
+    spoolingMode :: Prelude.Maybe SpoolingMode,
+    -- | (Optional) The time, in milliseconds, to deliver a campaign after it was
+    -- approved. If it\'s not specified, @0@ is used.
+    --
+    -- Default: @0@
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | Metadata that can be used to manage the campaign.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the campaign to create.
+    name :: Prelude.Text,
+    -- | (Optional) The Amazon Resource Name (ARN) of the signal catalog to
+    -- associate with the campaign.
+    signalCatalogArn :: Prelude.Text,
+    -- | The ARN of the vehicle or fleet to deploy a campaign to.
+    targetArn :: Prelude.Text,
+    -- | The data collection scheme associated with the campaign. You can specify
+    -- a scheme that collects data based on time or an event.
+    collectionScheme :: CollectionScheme
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'compression', 'createCampaign_compression' - (Optional) Whether to compress signals before transmitting data to
+-- Amazon Web Services IoT FleetWise. If you don\'t want to compress the
+-- signals, use @OFF@. If it\'s not specified, @SNAPPY@ is used.
+--
+-- Default: @SNAPPY@
+--
+-- 'dataExtraDimensions', 'createCampaign_dataExtraDimensions' - (Optional) A list of vehicle attributes to associate with a campaign.
+--
+-- Enrich the data with specified vehicle attributes. For example, add
+-- @make@ and @model@ to the campaign, and Amazon Web Services IoT
+-- FleetWise will associate the data with those attributes as dimensions in
+-- Amazon Timestream. You can then query the data against @make@ and
+-- @model@.
+--
+-- Default: An empty array
+--
+-- 'description', 'createCampaign_description' - An optional description of the campaign to help identify its purpose.
+--
+-- 'diagnosticsMode', 'createCampaign_diagnosticsMode' - (Optional) Option for a vehicle to send diagnostic trouble codes to
+-- Amazon Web Services IoT FleetWise. If you want to send diagnostic
+-- trouble codes, use @SEND_ACTIVE_DTCS@. If it\'s not specified, @OFF@ is
+-- used.
+--
+-- Default: @OFF@
+--
+-- 'expiryTime', 'createCampaign_expiryTime' - (Optional) The time the campaign expires, in seconds since epoch
+-- (January 1, 1970 at midnight UTC time). Vehicle data won\'t be collected
+-- after the campaign expires.
+--
+-- Default: 253402214400 (December 31, 9999, 00:00:00 UTC)
+--
+-- 'postTriggerCollectionDuration', 'createCampaign_postTriggerCollectionDuration' - (Optional) How long (in milliseconds) to collect raw data after a
+-- triggering event initiates the collection. If it\'s not specified, @0@
+-- is used.
+--
+-- Default: @0@
+--
+-- 'priority', 'createCampaign_priority' - (Optional) A number indicating the priority of one campaign over another
+-- campaign for a certain vehicle or fleet. A campaign with the lowest
+-- value is deployed to vehicles before any other campaigns. If it\'s not
+-- specified, @0@ is used.
+--
+-- Default: @0@
+--
+-- 'signalsToCollect', 'createCampaign_signalsToCollect' - (Optional) A list of information about signals to collect.
+--
+-- 'spoolingMode', 'createCampaign_spoolingMode' - (Optional) Whether to store collected data after a vehicle lost a
+-- connection with the cloud. After a connection is re-established, the
+-- data is automatically forwarded to Amazon Web Services IoT FleetWise. If
+-- you want to store collected data when a vehicle loses connection with
+-- the cloud, use @TO_DISK@. If it\'s not specified, @OFF@ is used.
+--
+-- Default: @OFF@
+--
+-- 'startTime', 'createCampaign_startTime' - (Optional) The time, in milliseconds, to deliver a campaign after it was
+-- approved. If it\'s not specified, @0@ is used.
+--
+-- Default: @0@
+--
+-- 'tags', 'createCampaign_tags' - Metadata that can be used to manage the campaign.
+--
+-- 'name', 'createCampaign_name' - The name of the campaign to create.
+--
+-- 'signalCatalogArn', 'createCampaign_signalCatalogArn' - (Optional) The Amazon Resource Name (ARN) of the signal catalog to
+-- associate with the campaign.
+--
+-- 'targetArn', 'createCampaign_targetArn' - The ARN of the vehicle or fleet to deploy a campaign to.
+--
+-- 'collectionScheme', 'createCampaign_collectionScheme' - The data collection scheme associated with the campaign. You can specify
+-- a scheme that collects data based on time or an event.
+newCreateCampaign ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'signalCatalogArn'
+  Prelude.Text ->
+  -- | 'targetArn'
+  Prelude.Text ->
+  -- | 'collectionScheme'
+  CollectionScheme ->
+  CreateCampaign
+newCreateCampaign
+  pName_
+  pSignalCatalogArn_
+  pTargetArn_
+  pCollectionScheme_ =
+    CreateCampaign'
+      { compression = Prelude.Nothing,
+        dataExtraDimensions = Prelude.Nothing,
+        description = Prelude.Nothing,
+        diagnosticsMode = Prelude.Nothing,
+        expiryTime = Prelude.Nothing,
+        postTriggerCollectionDuration = Prelude.Nothing,
+        priority = Prelude.Nothing,
+        signalsToCollect = Prelude.Nothing,
+        spoolingMode = Prelude.Nothing,
+        startTime = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        signalCatalogArn = pSignalCatalogArn_,
+        targetArn = pTargetArn_,
+        collectionScheme = pCollectionScheme_
+      }
+
+-- | (Optional) Whether to compress signals before transmitting data to
+-- Amazon Web Services IoT FleetWise. If you don\'t want to compress the
+-- signals, use @OFF@. If it\'s not specified, @SNAPPY@ is used.
+--
+-- Default: @SNAPPY@
+createCampaign_compression :: Lens.Lens' CreateCampaign (Prelude.Maybe Compression)
+createCampaign_compression = Lens.lens (\CreateCampaign' {compression} -> compression) (\s@CreateCampaign' {} a -> s {compression = a} :: CreateCampaign)
+
+-- | (Optional) A list of vehicle attributes to associate with a campaign.
+--
+-- Enrich the data with specified vehicle attributes. For example, add
+-- @make@ and @model@ to the campaign, and Amazon Web Services IoT
+-- FleetWise will associate the data with those attributes as dimensions in
+-- Amazon Timestream. You can then query the data against @make@ and
+-- @model@.
+--
+-- Default: An empty array
+createCampaign_dataExtraDimensions :: Lens.Lens' CreateCampaign (Prelude.Maybe [Prelude.Text])
+createCampaign_dataExtraDimensions = Lens.lens (\CreateCampaign' {dataExtraDimensions} -> dataExtraDimensions) (\s@CreateCampaign' {} a -> s {dataExtraDimensions = a} :: CreateCampaign) Prelude.. Lens.mapping Lens.coerced
+
+-- | An optional description of the campaign to help identify its purpose.
+createCampaign_description :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.Text)
+createCampaign_description = Lens.lens (\CreateCampaign' {description} -> description) (\s@CreateCampaign' {} a -> s {description = a} :: CreateCampaign)
+
+-- | (Optional) Option for a vehicle to send diagnostic trouble codes to
+-- Amazon Web Services IoT FleetWise. If you want to send diagnostic
+-- trouble codes, use @SEND_ACTIVE_DTCS@. If it\'s not specified, @OFF@ is
+-- used.
+--
+-- Default: @OFF@
+createCampaign_diagnosticsMode :: Lens.Lens' CreateCampaign (Prelude.Maybe DiagnosticsMode)
+createCampaign_diagnosticsMode = Lens.lens (\CreateCampaign' {diagnosticsMode} -> diagnosticsMode) (\s@CreateCampaign' {} a -> s {diagnosticsMode = a} :: CreateCampaign)
+
+-- | (Optional) The time the campaign expires, in seconds since epoch
+-- (January 1, 1970 at midnight UTC time). Vehicle data won\'t be collected
+-- after the campaign expires.
+--
+-- Default: 253402214400 (December 31, 9999, 00:00:00 UTC)
+createCampaign_expiryTime :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.UTCTime)
+createCampaign_expiryTime = Lens.lens (\CreateCampaign' {expiryTime} -> expiryTime) (\s@CreateCampaign' {} a -> s {expiryTime = a} :: CreateCampaign) Prelude.. Lens.mapping Data._Time
+
+-- | (Optional) How long (in milliseconds) to collect raw data after a
+-- triggering event initiates the collection. If it\'s not specified, @0@
+-- is used.
+--
+-- Default: @0@
+createCampaign_postTriggerCollectionDuration :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.Natural)
+createCampaign_postTriggerCollectionDuration = Lens.lens (\CreateCampaign' {postTriggerCollectionDuration} -> postTriggerCollectionDuration) (\s@CreateCampaign' {} a -> s {postTriggerCollectionDuration = a} :: CreateCampaign)
+
+-- | (Optional) A number indicating the priority of one campaign over another
+-- campaign for a certain vehicle or fleet. A campaign with the lowest
+-- value is deployed to vehicles before any other campaigns. If it\'s not
+-- specified, @0@ is used.
+--
+-- Default: @0@
+createCampaign_priority :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.Natural)
+createCampaign_priority = Lens.lens (\CreateCampaign' {priority} -> priority) (\s@CreateCampaign' {} a -> s {priority = a} :: CreateCampaign)
+
+-- | (Optional) A list of information about signals to collect.
+createCampaign_signalsToCollect :: Lens.Lens' CreateCampaign (Prelude.Maybe [SignalInformation])
+createCampaign_signalsToCollect = Lens.lens (\CreateCampaign' {signalsToCollect} -> signalsToCollect) (\s@CreateCampaign' {} a -> s {signalsToCollect = a} :: CreateCampaign) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Optional) Whether to store collected data after a vehicle lost a
+-- connection with the cloud. After a connection is re-established, the
+-- data is automatically forwarded to Amazon Web Services IoT FleetWise. If
+-- you want to store collected data when a vehicle loses connection with
+-- the cloud, use @TO_DISK@. If it\'s not specified, @OFF@ is used.
+--
+-- Default: @OFF@
+createCampaign_spoolingMode :: Lens.Lens' CreateCampaign (Prelude.Maybe SpoolingMode)
+createCampaign_spoolingMode = Lens.lens (\CreateCampaign' {spoolingMode} -> spoolingMode) (\s@CreateCampaign' {} a -> s {spoolingMode = a} :: CreateCampaign)
+
+-- | (Optional) The time, in milliseconds, to deliver a campaign after it was
+-- approved. If it\'s not specified, @0@ is used.
+--
+-- Default: @0@
+createCampaign_startTime :: Lens.Lens' CreateCampaign (Prelude.Maybe Prelude.UTCTime)
+createCampaign_startTime = Lens.lens (\CreateCampaign' {startTime} -> startTime) (\s@CreateCampaign' {} a -> s {startTime = a} :: CreateCampaign) Prelude.. Lens.mapping Data._Time
+
+-- | Metadata that can be used to manage the campaign.
+createCampaign_tags :: Lens.Lens' CreateCampaign (Prelude.Maybe [Tag])
+createCampaign_tags = Lens.lens (\CreateCampaign' {tags} -> tags) (\s@CreateCampaign' {} a -> s {tags = a} :: CreateCampaign) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the campaign to create.
+createCampaign_name :: Lens.Lens' CreateCampaign Prelude.Text
+createCampaign_name = Lens.lens (\CreateCampaign' {name} -> name) (\s@CreateCampaign' {} a -> s {name = a} :: CreateCampaign)
+
+-- | (Optional) The Amazon Resource Name (ARN) of the signal catalog to
+-- associate with the campaign.
+createCampaign_signalCatalogArn :: Lens.Lens' CreateCampaign Prelude.Text
+createCampaign_signalCatalogArn = Lens.lens (\CreateCampaign' {signalCatalogArn} -> signalCatalogArn) (\s@CreateCampaign' {} a -> s {signalCatalogArn = a} :: CreateCampaign)
+
+-- | The ARN of the vehicle or fleet to deploy a campaign to.
+createCampaign_targetArn :: Lens.Lens' CreateCampaign Prelude.Text
+createCampaign_targetArn = Lens.lens (\CreateCampaign' {targetArn} -> targetArn) (\s@CreateCampaign' {} a -> s {targetArn = a} :: CreateCampaign)
+
+-- | The data collection scheme associated with the campaign. You can specify
+-- a scheme that collects data based on time or an event.
+createCampaign_collectionScheme :: Lens.Lens' CreateCampaign CollectionScheme
+createCampaign_collectionScheme = Lens.lens (\CreateCampaign' {collectionScheme} -> collectionScheme) (\s@CreateCampaign' {} a -> s {collectionScheme = a} :: CreateCampaign)
+
+instance Core.AWSRequest CreateCampaign where
+  type
+    AWSResponse CreateCampaign =
+      CreateCampaignResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCampaignResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCampaign where
+  hashWithSalt _salt CreateCampaign' {..} =
+    _salt
+      `Prelude.hashWithSalt` compression
+      `Prelude.hashWithSalt` dataExtraDimensions
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` diagnosticsMode
+      `Prelude.hashWithSalt` expiryTime
+      `Prelude.hashWithSalt` postTriggerCollectionDuration
+      `Prelude.hashWithSalt` priority
+      `Prelude.hashWithSalt` signalsToCollect
+      `Prelude.hashWithSalt` spoolingMode
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` signalCatalogArn
+      `Prelude.hashWithSalt` targetArn
+      `Prelude.hashWithSalt` collectionScheme
+
+instance Prelude.NFData CreateCampaign where
+  rnf CreateCampaign' {..} =
+    Prelude.rnf compression
+      `Prelude.seq` Prelude.rnf dataExtraDimensions
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf diagnosticsMode
+      `Prelude.seq` Prelude.rnf expiryTime
+      `Prelude.seq` Prelude.rnf postTriggerCollectionDuration
+      `Prelude.seq` Prelude.rnf priority
+      `Prelude.seq` Prelude.rnf signalsToCollect
+      `Prelude.seq` Prelude.rnf spoolingMode
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+      `Prelude.seq` Prelude.rnf targetArn
+      `Prelude.seq` Prelude.rnf collectionScheme
+
+instance Data.ToHeaders CreateCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.CreateCampaign" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCampaign where
+  toJSON CreateCampaign' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("compression" Data..=) Prelude.<$> compression,
+            ("dataExtraDimensions" Data..=)
+              Prelude.<$> dataExtraDimensions,
+            ("description" Data..=) Prelude.<$> description,
+            ("diagnosticsMode" Data..=)
+              Prelude.<$> diagnosticsMode,
+            ("expiryTime" Data..=) Prelude.<$> expiryTime,
+            ("postTriggerCollectionDuration" Data..=)
+              Prelude.<$> postTriggerCollectionDuration,
+            ("priority" Data..=) Prelude.<$> priority,
+            ("signalsToCollect" Data..=)
+              Prelude.<$> signalsToCollect,
+            ("spoolingMode" Data..=) Prelude.<$> spoolingMode,
+            ("startTime" Data..=) Prelude.<$> startTime,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("signalCatalogArn" Data..= signalCatalogArn),
+            Prelude.Just ("targetArn" Data..= targetArn),
+            Prelude.Just
+              ("collectionScheme" Data..= collectionScheme)
+          ]
+      )
+
+instance Data.ToPath CreateCampaign where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCampaignResponse' smart constructor.
+data CreateCampaignResponse = CreateCampaignResponse'
+  { -- | The ARN of the created campaign.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the created campaign.
+    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 'CreateCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createCampaignResponse_arn' - The ARN of the created campaign.
+--
+-- 'name', 'createCampaignResponse_name' - The name of the created campaign.
+--
+-- 'httpStatus', 'createCampaignResponse_httpStatus' - The response's http status code.
+newCreateCampaignResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCampaignResponse
+newCreateCampaignResponse pHttpStatus_ =
+  CreateCampaignResponse'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the created campaign.
+createCampaignResponse_arn :: Lens.Lens' CreateCampaignResponse (Prelude.Maybe Prelude.Text)
+createCampaignResponse_arn = Lens.lens (\CreateCampaignResponse' {arn} -> arn) (\s@CreateCampaignResponse' {} a -> s {arn = a} :: CreateCampaignResponse)
+
+-- | The name of the created campaign.
+createCampaignResponse_name :: Lens.Lens' CreateCampaignResponse (Prelude.Maybe Prelude.Text)
+createCampaignResponse_name = Lens.lens (\CreateCampaignResponse' {name} -> name) (\s@CreateCampaignResponse' {} a -> s {name = a} :: CreateCampaignResponse)
+
+-- | The response's http status code.
+createCampaignResponse_httpStatus :: Lens.Lens' CreateCampaignResponse Prelude.Int
+createCampaignResponse_httpStatus = Lens.lens (\CreateCampaignResponse' {httpStatus} -> httpStatus) (\s@CreateCampaignResponse' {} a -> s {httpStatus = a} :: CreateCampaignResponse)
+
+instance Prelude.NFData CreateCampaignResponse where
+  rnf CreateCampaignResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/CreateDecoderManifest.hs b/gen/Amazonka/IoTFleetWise/CreateDecoderManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/CreateDecoderManifest.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.CreateDecoderManifest
+-- 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 the decoder manifest associated with a model manifest. To create
+-- a decoder manifest, the following must be true:
+--
+-- -   Every signal decoder has a unique name.
+--
+-- -   Each signal decoder is associated with a network interface.
+--
+-- -   Each network interface has a unique ID.
+--
+-- -   The signal decoders are specified in the model manifest.
+module Amazonka.IoTFleetWise.CreateDecoderManifest
+  ( -- * Creating a Request
+    CreateDecoderManifest (..),
+    newCreateDecoderManifest,
+
+    -- * Request Lenses
+    createDecoderManifest_description,
+    createDecoderManifest_networkInterfaces,
+    createDecoderManifest_signalDecoders,
+    createDecoderManifest_tags,
+    createDecoderManifest_name,
+    createDecoderManifest_modelManifestArn,
+
+    -- * Destructuring the Response
+    CreateDecoderManifestResponse (..),
+    newCreateDecoderManifestResponse,
+
+    -- * Response Lenses
+    createDecoderManifestResponse_httpStatus,
+    createDecoderManifestResponse_name,
+    createDecoderManifestResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDecoderManifest' smart constructor.
+data CreateDecoderManifest = CreateDecoderManifest'
+  { -- | A brief description of the decoder manifest.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about available network interfaces.
+    networkInterfaces :: Prelude.Maybe (Prelude.NonEmpty NetworkInterface),
+    -- | A list of information about signal decoders.
+    signalDecoders :: Prelude.Maybe (Prelude.NonEmpty SignalDecoder),
+    -- | Metadata that can be used to manage the decoder manifest.
+    tags :: Prelude.Maybe [Tag],
+    -- | The unique name of the decoder manifest to create.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the vehicle model (model manifest).
+    modelManifestArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDecoderManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDecoderManifest_description' - A brief description of the decoder manifest.
+--
+-- 'networkInterfaces', 'createDecoderManifest_networkInterfaces' - A list of information about available network interfaces.
+--
+-- 'signalDecoders', 'createDecoderManifest_signalDecoders' - A list of information about signal decoders.
+--
+-- 'tags', 'createDecoderManifest_tags' - Metadata that can be used to manage the decoder manifest.
+--
+-- 'name', 'createDecoderManifest_name' - The unique name of the decoder manifest to create.
+--
+-- 'modelManifestArn', 'createDecoderManifest_modelManifestArn' - The Amazon Resource Name (ARN) of the vehicle model (model manifest).
+newCreateDecoderManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'modelManifestArn'
+  Prelude.Text ->
+  CreateDecoderManifest
+newCreateDecoderManifest pName_ pModelManifestArn_ =
+  CreateDecoderManifest'
+    { description =
+        Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      signalDecoders = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      modelManifestArn = pModelManifestArn_
+    }
+
+-- | A brief description of the decoder manifest.
+createDecoderManifest_description :: Lens.Lens' CreateDecoderManifest (Prelude.Maybe Prelude.Text)
+createDecoderManifest_description = Lens.lens (\CreateDecoderManifest' {description} -> description) (\s@CreateDecoderManifest' {} a -> s {description = a} :: CreateDecoderManifest)
+
+-- | A list of information about available network interfaces.
+createDecoderManifest_networkInterfaces :: Lens.Lens' CreateDecoderManifest (Prelude.Maybe (Prelude.NonEmpty NetworkInterface))
+createDecoderManifest_networkInterfaces = Lens.lens (\CreateDecoderManifest' {networkInterfaces} -> networkInterfaces) (\s@CreateDecoderManifest' {} a -> s {networkInterfaces = a} :: CreateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of information about signal decoders.
+createDecoderManifest_signalDecoders :: Lens.Lens' CreateDecoderManifest (Prelude.Maybe (Prelude.NonEmpty SignalDecoder))
+createDecoderManifest_signalDecoders = Lens.lens (\CreateDecoderManifest' {signalDecoders} -> signalDecoders) (\s@CreateDecoderManifest' {} a -> s {signalDecoders = a} :: CreateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata that can be used to manage the decoder manifest.
+createDecoderManifest_tags :: Lens.Lens' CreateDecoderManifest (Prelude.Maybe [Tag])
+createDecoderManifest_tags = Lens.lens (\CreateDecoderManifest' {tags} -> tags) (\s@CreateDecoderManifest' {} a -> s {tags = a} :: CreateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique name of the decoder manifest to create.
+createDecoderManifest_name :: Lens.Lens' CreateDecoderManifest Prelude.Text
+createDecoderManifest_name = Lens.lens (\CreateDecoderManifest' {name} -> name) (\s@CreateDecoderManifest' {} a -> s {name = a} :: CreateDecoderManifest)
+
+-- | The Amazon Resource Name (ARN) of the vehicle model (model manifest).
+createDecoderManifest_modelManifestArn :: Lens.Lens' CreateDecoderManifest Prelude.Text
+createDecoderManifest_modelManifestArn = Lens.lens (\CreateDecoderManifest' {modelManifestArn} -> modelManifestArn) (\s@CreateDecoderManifest' {} a -> s {modelManifestArn = a} :: CreateDecoderManifest)
+
+instance Core.AWSRequest CreateDecoderManifest where
+  type
+    AWSResponse CreateDecoderManifest =
+      CreateDecoderManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDecoderManifestResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable CreateDecoderManifest where
+  hashWithSalt _salt CreateDecoderManifest' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` signalDecoders
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` modelManifestArn
+
+instance Prelude.NFData CreateDecoderManifest where
+  rnf CreateDecoderManifest' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf signalDecoders
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf modelManifestArn
+
+instance Data.ToHeaders CreateDecoderManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.CreateDecoderManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDecoderManifest where
+  toJSON CreateDecoderManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("networkInterfaces" Data..=)
+              Prelude.<$> networkInterfaces,
+            ("signalDecoders" Data..=)
+              Prelude.<$> signalDecoders,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("modelManifestArn" Data..= modelManifestArn)
+          ]
+      )
+
+instance Data.ToPath CreateDecoderManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDecoderManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDecoderManifestResponse' smart constructor.
+data CreateDecoderManifestResponse = CreateDecoderManifestResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the created decoder manifest.
+    name :: Prelude.Text,
+    -- | The ARN of the created decoder manifest.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDecoderManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDecoderManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createDecoderManifestResponse_name' - The name of the created decoder manifest.
+--
+-- 'arn', 'createDecoderManifestResponse_arn' - The ARN of the created decoder manifest.
+newCreateDecoderManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  CreateDecoderManifestResponse
+newCreateDecoderManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    CreateDecoderManifestResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+createDecoderManifestResponse_httpStatus :: Lens.Lens' CreateDecoderManifestResponse Prelude.Int
+createDecoderManifestResponse_httpStatus = Lens.lens (\CreateDecoderManifestResponse' {httpStatus} -> httpStatus) (\s@CreateDecoderManifestResponse' {} a -> s {httpStatus = a} :: CreateDecoderManifestResponse)
+
+-- | The name of the created decoder manifest.
+createDecoderManifestResponse_name :: Lens.Lens' CreateDecoderManifestResponse Prelude.Text
+createDecoderManifestResponse_name = Lens.lens (\CreateDecoderManifestResponse' {name} -> name) (\s@CreateDecoderManifestResponse' {} a -> s {name = a} :: CreateDecoderManifestResponse)
+
+-- | The ARN of the created decoder manifest.
+createDecoderManifestResponse_arn :: Lens.Lens' CreateDecoderManifestResponse Prelude.Text
+createDecoderManifestResponse_arn = Lens.lens (\CreateDecoderManifestResponse' {arn} -> arn) (\s@CreateDecoderManifestResponse' {} a -> s {arn = a} :: CreateDecoderManifestResponse)
+
+instance Prelude.NFData CreateDecoderManifestResponse where
+  rnf CreateDecoderManifestResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/CreateFleet.hs b/gen/Amazonka/IoTFleetWise/CreateFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/CreateFleet.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.IoTFleetWise.CreateFleet
+-- 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 fleet that represents a group of vehicles.
+--
+-- You must create both a signal catalog and vehicles before you can create
+-- a fleet.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/fleets.html Fleets>
+-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
+module Amazonka.IoTFleetWise.CreateFleet
+  ( -- * Creating a Request
+    CreateFleet (..),
+    newCreateFleet,
+
+    -- * Request Lenses
+    createFleet_description,
+    createFleet_tags,
+    createFleet_fleetId,
+    createFleet_signalCatalogArn,
+
+    -- * Destructuring the Response
+    CreateFleetResponse (..),
+    newCreateFleetResponse,
+
+    -- * Response Lenses
+    createFleetResponse_httpStatus,
+    createFleetResponse_id,
+    createFleetResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFleet' smart constructor.
+data CreateFleet = CreateFleet'
+  { -- | A brief description of the fleet to create.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Metadata that can be used to manage the fleet.
+    tags :: Prelude.Maybe [Tag],
+    -- | The unique ID of the fleet to create.
+    fleetId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a signal catalog.
+    signalCatalogArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createFleet_description' - A brief description of the fleet to create.
+--
+-- 'tags', 'createFleet_tags' - Metadata that can be used to manage the fleet.
+--
+-- 'fleetId', 'createFleet_fleetId' - The unique ID of the fleet to create.
+--
+-- 'signalCatalogArn', 'createFleet_signalCatalogArn' - The Amazon Resource Name (ARN) of a signal catalog.
+newCreateFleet ::
+  -- | 'fleetId'
+  Prelude.Text ->
+  -- | 'signalCatalogArn'
+  Prelude.Text ->
+  CreateFleet
+newCreateFleet pFleetId_ pSignalCatalogArn_ =
+  CreateFleet'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      fleetId = pFleetId_,
+      signalCatalogArn = pSignalCatalogArn_
+    }
+
+-- | A brief description of the fleet to create.
+createFleet_description :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Text)
+createFleet_description = Lens.lens (\CreateFleet' {description} -> description) (\s@CreateFleet' {} a -> s {description = a} :: CreateFleet)
+
+-- | Metadata that can be used to manage the fleet.
+createFleet_tags :: Lens.Lens' CreateFleet (Prelude.Maybe [Tag])
+createFleet_tags = Lens.lens (\CreateFleet' {tags} -> tags) (\s@CreateFleet' {} a -> s {tags = a} :: CreateFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID of the fleet to create.
+createFleet_fleetId :: Lens.Lens' CreateFleet Prelude.Text
+createFleet_fleetId = Lens.lens (\CreateFleet' {fleetId} -> fleetId) (\s@CreateFleet' {} a -> s {fleetId = a} :: CreateFleet)
+
+-- | The Amazon Resource Name (ARN) of a signal catalog.
+createFleet_signalCatalogArn :: Lens.Lens' CreateFleet Prelude.Text
+createFleet_signalCatalogArn = Lens.lens (\CreateFleet' {signalCatalogArn} -> signalCatalogArn) (\s@CreateFleet' {} a -> s {signalCatalogArn = a} :: CreateFleet)
+
+instance Core.AWSRequest CreateFleet where
+  type AWSResponse CreateFleet = CreateFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable CreateFleet where
+  hashWithSalt _salt CreateFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` fleetId
+      `Prelude.hashWithSalt` signalCatalogArn
+
+instance Prelude.NFData CreateFleet where
+  rnf CreateFleet' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf fleetId
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+
+instance Data.ToHeaders CreateFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.CreateFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateFleet where
+  toJSON CreateFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("fleetId" Data..= fleetId),
+            Prelude.Just
+              ("signalCatalogArn" Data..= signalCatalogArn)
+          ]
+      )
+
+instance Data.ToPath CreateFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateFleetResponse' smart constructor.
+data CreateFleetResponse = CreateFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the created fleet.
+    id :: Prelude.Text,
+    -- | The ARN of the created fleet.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createFleetResponse_httpStatus' - The response's http status code.
+--
+-- 'id', 'createFleetResponse_id' - The ID of the created fleet.
+--
+-- 'arn', 'createFleetResponse_arn' - The ARN of the created fleet.
+newCreateFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  CreateFleetResponse
+newCreateFleetResponse pHttpStatus_ pId_ pArn_ =
+  CreateFleetResponse'
+    { httpStatus = pHttpStatus_,
+      id = pId_,
+      arn = pArn_
+    }
+
+-- | The response's http status code.
+createFleetResponse_httpStatus :: Lens.Lens' CreateFleetResponse Prelude.Int
+createFleetResponse_httpStatus = Lens.lens (\CreateFleetResponse' {httpStatus} -> httpStatus) (\s@CreateFleetResponse' {} a -> s {httpStatus = a} :: CreateFleetResponse)
+
+-- | The ID of the created fleet.
+createFleetResponse_id :: Lens.Lens' CreateFleetResponse Prelude.Text
+createFleetResponse_id = Lens.lens (\CreateFleetResponse' {id} -> id) (\s@CreateFleetResponse' {} a -> s {id = a} :: CreateFleetResponse)
+
+-- | The ARN of the created fleet.
+createFleetResponse_arn :: Lens.Lens' CreateFleetResponse Prelude.Text
+createFleetResponse_arn = Lens.lens (\CreateFleetResponse' {arn} -> arn) (\s@CreateFleetResponse' {} a -> s {arn = a} :: CreateFleetResponse)
+
+instance Prelude.NFData CreateFleetResponse where
+  rnf CreateFleetResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/CreateModelManifest.hs b/gen/Amazonka/IoTFleetWise/CreateModelManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/CreateModelManifest.hs
@@ -0,0 +1,252 @@
+{-# 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.IoTFleetWise.CreateModelManifest
+-- 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 vehicle model (model manifest) that specifies signals
+-- (attributes, branches, sensors, and actuators).
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/vehicle-models.html Vehicle models>
+-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
+module Amazonka.IoTFleetWise.CreateModelManifest
+  ( -- * Creating a Request
+    CreateModelManifest (..),
+    newCreateModelManifest,
+
+    -- * Request Lenses
+    createModelManifest_description,
+    createModelManifest_tags,
+    createModelManifest_name,
+    createModelManifest_nodes,
+    createModelManifest_signalCatalogArn,
+
+    -- * Destructuring the Response
+    CreateModelManifestResponse (..),
+    newCreateModelManifestResponse,
+
+    -- * Response Lenses
+    createModelManifestResponse_httpStatus,
+    createModelManifestResponse_name,
+    createModelManifestResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateModelManifest' smart constructor.
+data CreateModelManifest = CreateModelManifest'
+  { -- | A brief description of the vehicle model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Metadata that can be used to manage the vehicle model.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the vehicle model to create.
+    name :: Prelude.Text,
+    -- | A list of nodes, which are a general abstraction of signals.
+    nodes :: [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of a signal catalog.
+    signalCatalogArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateModelManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createModelManifest_description' - A brief description of the vehicle model.
+--
+-- 'tags', 'createModelManifest_tags' - Metadata that can be used to manage the vehicle model.
+--
+-- 'name', 'createModelManifest_name' - The name of the vehicle model to create.
+--
+-- 'nodes', 'createModelManifest_nodes' - A list of nodes, which are a general abstraction of signals.
+--
+-- 'signalCatalogArn', 'createModelManifest_signalCatalogArn' - The Amazon Resource Name (ARN) of a signal catalog.
+newCreateModelManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'signalCatalogArn'
+  Prelude.Text ->
+  CreateModelManifest
+newCreateModelManifest pName_ pSignalCatalogArn_ =
+  CreateModelManifest'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      nodes = Prelude.mempty,
+      signalCatalogArn = pSignalCatalogArn_
+    }
+
+-- | A brief description of the vehicle model.
+createModelManifest_description :: Lens.Lens' CreateModelManifest (Prelude.Maybe Prelude.Text)
+createModelManifest_description = Lens.lens (\CreateModelManifest' {description} -> description) (\s@CreateModelManifest' {} a -> s {description = a} :: CreateModelManifest)
+
+-- | Metadata that can be used to manage the vehicle model.
+createModelManifest_tags :: Lens.Lens' CreateModelManifest (Prelude.Maybe [Tag])
+createModelManifest_tags = Lens.lens (\CreateModelManifest' {tags} -> tags) (\s@CreateModelManifest' {} a -> s {tags = a} :: CreateModelManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the vehicle model to create.
+createModelManifest_name :: Lens.Lens' CreateModelManifest Prelude.Text
+createModelManifest_name = Lens.lens (\CreateModelManifest' {name} -> name) (\s@CreateModelManifest' {} a -> s {name = a} :: CreateModelManifest)
+
+-- | A list of nodes, which are a general abstraction of signals.
+createModelManifest_nodes :: Lens.Lens' CreateModelManifest [Prelude.Text]
+createModelManifest_nodes = Lens.lens (\CreateModelManifest' {nodes} -> nodes) (\s@CreateModelManifest' {} a -> s {nodes = a} :: CreateModelManifest) Prelude.. Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of a signal catalog.
+createModelManifest_signalCatalogArn :: Lens.Lens' CreateModelManifest Prelude.Text
+createModelManifest_signalCatalogArn = Lens.lens (\CreateModelManifest' {signalCatalogArn} -> signalCatalogArn) (\s@CreateModelManifest' {} a -> s {signalCatalogArn = a} :: CreateModelManifest)
+
+instance Core.AWSRequest CreateModelManifest where
+  type
+    AWSResponse CreateModelManifest =
+      CreateModelManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateModelManifestResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable CreateModelManifest where
+  hashWithSalt _salt CreateModelManifest' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nodes
+      `Prelude.hashWithSalt` signalCatalogArn
+
+instance Prelude.NFData CreateModelManifest where
+  rnf CreateModelManifest' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nodes
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+
+instance Data.ToHeaders CreateModelManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.CreateModelManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateModelManifest where
+  toJSON CreateModelManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("nodes" Data..= nodes),
+            Prelude.Just
+              ("signalCatalogArn" Data..= signalCatalogArn)
+          ]
+      )
+
+instance Data.ToPath CreateModelManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateModelManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateModelManifestResponse' smart constructor.
+data CreateModelManifestResponse = CreateModelManifestResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the created vehicle model.
+    name :: Prelude.Text,
+    -- | The ARN of the created vehicle model.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateModelManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createModelManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createModelManifestResponse_name' - The name of the created vehicle model.
+--
+-- 'arn', 'createModelManifestResponse_arn' - The ARN of the created vehicle model.
+newCreateModelManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  CreateModelManifestResponse
+newCreateModelManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    CreateModelManifestResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+createModelManifestResponse_httpStatus :: Lens.Lens' CreateModelManifestResponse Prelude.Int
+createModelManifestResponse_httpStatus = Lens.lens (\CreateModelManifestResponse' {httpStatus} -> httpStatus) (\s@CreateModelManifestResponse' {} a -> s {httpStatus = a} :: CreateModelManifestResponse)
+
+-- | The name of the created vehicle model.
+createModelManifestResponse_name :: Lens.Lens' CreateModelManifestResponse Prelude.Text
+createModelManifestResponse_name = Lens.lens (\CreateModelManifestResponse' {name} -> name) (\s@CreateModelManifestResponse' {} a -> s {name = a} :: CreateModelManifestResponse)
+
+-- | The ARN of the created vehicle model.
+createModelManifestResponse_arn :: Lens.Lens' CreateModelManifestResponse Prelude.Text
+createModelManifestResponse_arn = Lens.lens (\CreateModelManifestResponse' {arn} -> arn) (\s@CreateModelManifestResponse' {} a -> s {arn = a} :: CreateModelManifestResponse)
+
+instance Prelude.NFData CreateModelManifestResponse where
+  rnf CreateModelManifestResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/CreateSignalCatalog.hs b/gen/Amazonka/IoTFleetWise/CreateSignalCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/CreateSignalCatalog.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.IoTFleetWise.CreateSignalCatalog
+-- 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 collection of standardized signals that can be reused to
+-- create vehicle models.
+module Amazonka.IoTFleetWise.CreateSignalCatalog
+  ( -- * Creating a Request
+    CreateSignalCatalog (..),
+    newCreateSignalCatalog,
+
+    -- * Request Lenses
+    createSignalCatalog_description,
+    createSignalCatalog_nodes,
+    createSignalCatalog_tags,
+    createSignalCatalog_name,
+
+    -- * Destructuring the Response
+    CreateSignalCatalogResponse (..),
+    newCreateSignalCatalogResponse,
+
+    -- * Response Lenses
+    createSignalCatalogResponse_httpStatus,
+    createSignalCatalogResponse_name,
+    createSignalCatalogResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSignalCatalog' smart constructor.
+data CreateSignalCatalog = CreateSignalCatalog'
+  { -- | A brief description of the signal catalog.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about nodes, which are a general abstraction of
+    -- signals. For more information, see the API data type.
+    nodes :: Prelude.Maybe [Node],
+    -- | Metadata that can be used to manage the signal catalog.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the signal catalog to create.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSignalCatalog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createSignalCatalog_description' - A brief description of the signal catalog.
+--
+-- 'nodes', 'createSignalCatalog_nodes' - A list of information about nodes, which are a general abstraction of
+-- signals. For more information, see the API data type.
+--
+-- 'tags', 'createSignalCatalog_tags' - Metadata that can be used to manage the signal catalog.
+--
+-- 'name', 'createSignalCatalog_name' - The name of the signal catalog to create.
+newCreateSignalCatalog ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateSignalCatalog
+newCreateSignalCatalog pName_ =
+  CreateSignalCatalog'
+    { description = Prelude.Nothing,
+      nodes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A brief description of the signal catalog.
+createSignalCatalog_description :: Lens.Lens' CreateSignalCatalog (Prelude.Maybe Prelude.Text)
+createSignalCatalog_description = Lens.lens (\CreateSignalCatalog' {description} -> description) (\s@CreateSignalCatalog' {} a -> s {description = a} :: CreateSignalCatalog)
+
+-- | A list of information about nodes, which are a general abstraction of
+-- signals. For more information, see the API data type.
+createSignalCatalog_nodes :: Lens.Lens' CreateSignalCatalog (Prelude.Maybe [Node])
+createSignalCatalog_nodes = Lens.lens (\CreateSignalCatalog' {nodes} -> nodes) (\s@CreateSignalCatalog' {} a -> s {nodes = a} :: CreateSignalCatalog) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata that can be used to manage the signal catalog.
+createSignalCatalog_tags :: Lens.Lens' CreateSignalCatalog (Prelude.Maybe [Tag])
+createSignalCatalog_tags = Lens.lens (\CreateSignalCatalog' {tags} -> tags) (\s@CreateSignalCatalog' {} a -> s {tags = a} :: CreateSignalCatalog) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the signal catalog to create.
+createSignalCatalog_name :: Lens.Lens' CreateSignalCatalog Prelude.Text
+createSignalCatalog_name = Lens.lens (\CreateSignalCatalog' {name} -> name) (\s@CreateSignalCatalog' {} a -> s {name = a} :: CreateSignalCatalog)
+
+instance Core.AWSRequest CreateSignalCatalog where
+  type
+    AWSResponse CreateSignalCatalog =
+      CreateSignalCatalogResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSignalCatalogResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable CreateSignalCatalog where
+  hashWithSalt _salt CreateSignalCatalog' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` nodes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateSignalCatalog where
+  rnf CreateSignalCatalog' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf nodes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateSignalCatalog where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.CreateSignalCatalog" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSignalCatalog where
+  toJSON CreateSignalCatalog' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("nodes" Data..=) Prelude.<$> nodes,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateSignalCatalog where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSignalCatalog where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSignalCatalogResponse' smart constructor.
+data CreateSignalCatalogResponse = CreateSignalCatalogResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the created signal catalog.
+    name :: Prelude.Text,
+    -- | The ARN of the created signal catalog.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSignalCatalogResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createSignalCatalogResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'createSignalCatalogResponse_name' - The name of the created signal catalog.
+--
+-- 'arn', 'createSignalCatalogResponse_arn' - The ARN of the created signal catalog.
+newCreateSignalCatalogResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  CreateSignalCatalogResponse
+newCreateSignalCatalogResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    CreateSignalCatalogResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+createSignalCatalogResponse_httpStatus :: Lens.Lens' CreateSignalCatalogResponse Prelude.Int
+createSignalCatalogResponse_httpStatus = Lens.lens (\CreateSignalCatalogResponse' {httpStatus} -> httpStatus) (\s@CreateSignalCatalogResponse' {} a -> s {httpStatus = a} :: CreateSignalCatalogResponse)
+
+-- | The name of the created signal catalog.
+createSignalCatalogResponse_name :: Lens.Lens' CreateSignalCatalogResponse Prelude.Text
+createSignalCatalogResponse_name = Lens.lens (\CreateSignalCatalogResponse' {name} -> name) (\s@CreateSignalCatalogResponse' {} a -> s {name = a} :: CreateSignalCatalogResponse)
+
+-- | The ARN of the created signal catalog.
+createSignalCatalogResponse_arn :: Lens.Lens' CreateSignalCatalogResponse Prelude.Text
+createSignalCatalogResponse_arn = Lens.lens (\CreateSignalCatalogResponse' {arn} -> arn) (\s@CreateSignalCatalogResponse' {} a -> s {arn = a} :: CreateSignalCatalogResponse)
+
+instance Prelude.NFData CreateSignalCatalogResponse where
+  rnf CreateSignalCatalogResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/CreateVehicle.hs b/gen/Amazonka/IoTFleetWise/CreateVehicle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/CreateVehicle.hs
@@ -0,0 +1,297 @@
+{-# 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.IoTFleetWise.CreateVehicle
+-- 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 vehicle, which is an instance of a vehicle model (model
+-- manifest). Vehicles created from the same vehicle model consist of the
+-- same signals inherited from the vehicle model.
+--
+-- If you have an existing Amazon Web Services IoT Thing, you can use
+-- Amazon Web Services IoT FleetWise to create a vehicle and collect data
+-- from your thing.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/create-vehicle-cli.html Create a vehicle (AWS CLI)>
+-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
+module Amazonka.IoTFleetWise.CreateVehicle
+  ( -- * Creating a Request
+    CreateVehicle (..),
+    newCreateVehicle,
+
+    -- * Request Lenses
+    createVehicle_associationBehavior,
+    createVehicle_attributes,
+    createVehicle_tags,
+    createVehicle_vehicleName,
+    createVehicle_modelManifestArn,
+    createVehicle_decoderManifestArn,
+
+    -- * Destructuring the Response
+    CreateVehicleResponse (..),
+    newCreateVehicleResponse,
+
+    -- * Response Lenses
+    createVehicleResponse_arn,
+    createVehicleResponse_thingArn,
+    createVehicleResponse_vehicleName,
+    createVehicleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVehicle' smart constructor.
+data CreateVehicle = CreateVehicle'
+  { -- | An option to create a new Amazon Web Services IoT thing when creating a
+    -- vehicle, or to validate an existing Amazon Web Services IoT thing as a
+    -- vehicle.
+    --
+    -- Default:
+    associationBehavior :: Prelude.Maybe VehicleAssociationBehavior,
+    -- | Static information about a vehicle in a key-value pair. For example:
+    -- @\"engineType\"@ : @\"1.3 L R2\"@
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Metadata that can be used to manage the vehicle.
+    tags :: Prelude.Maybe [Tag],
+    -- | The unique ID of the vehicle to create.
+    vehicleName :: Prelude.Text,
+    -- | The Amazon Resource Name ARN of a vehicle model.
+    modelManifestArn :: Prelude.Text,
+    -- | The ARN of a decoder manifest.
+    decoderManifestArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVehicle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationBehavior', 'createVehicle_associationBehavior' - An option to create a new Amazon Web Services IoT thing when creating a
+-- vehicle, or to validate an existing Amazon Web Services IoT thing as a
+-- vehicle.
+--
+-- Default:
+--
+-- 'attributes', 'createVehicle_attributes' - Static information about a vehicle in a key-value pair. For example:
+-- @\"engineType\"@ : @\"1.3 L R2\"@
+--
+-- 'tags', 'createVehicle_tags' - Metadata that can be used to manage the vehicle.
+--
+-- 'vehicleName', 'createVehicle_vehicleName' - The unique ID of the vehicle to create.
+--
+-- 'modelManifestArn', 'createVehicle_modelManifestArn' - The Amazon Resource Name ARN of a vehicle model.
+--
+-- 'decoderManifestArn', 'createVehicle_decoderManifestArn' - The ARN of a decoder manifest.
+newCreateVehicle ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  -- | 'modelManifestArn'
+  Prelude.Text ->
+  -- | 'decoderManifestArn'
+  Prelude.Text ->
+  CreateVehicle
+newCreateVehicle
+  pVehicleName_
+  pModelManifestArn_
+  pDecoderManifestArn_ =
+    CreateVehicle'
+      { associationBehavior =
+          Prelude.Nothing,
+        attributes = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        vehicleName = pVehicleName_,
+        modelManifestArn = pModelManifestArn_,
+        decoderManifestArn = pDecoderManifestArn_
+      }
+
+-- | An option to create a new Amazon Web Services IoT thing when creating a
+-- vehicle, or to validate an existing Amazon Web Services IoT thing as a
+-- vehicle.
+--
+-- Default:
+createVehicle_associationBehavior :: Lens.Lens' CreateVehicle (Prelude.Maybe VehicleAssociationBehavior)
+createVehicle_associationBehavior = Lens.lens (\CreateVehicle' {associationBehavior} -> associationBehavior) (\s@CreateVehicle' {} a -> s {associationBehavior = a} :: CreateVehicle)
+
+-- | Static information about a vehicle in a key-value pair. For example:
+-- @\"engineType\"@ : @\"1.3 L R2\"@
+createVehicle_attributes :: Lens.Lens' CreateVehicle (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createVehicle_attributes = Lens.lens (\CreateVehicle' {attributes} -> attributes) (\s@CreateVehicle' {} a -> s {attributes = a} :: CreateVehicle) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata that can be used to manage the vehicle.
+createVehicle_tags :: Lens.Lens' CreateVehicle (Prelude.Maybe [Tag])
+createVehicle_tags = Lens.lens (\CreateVehicle' {tags} -> tags) (\s@CreateVehicle' {} a -> s {tags = a} :: CreateVehicle) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID of the vehicle to create.
+createVehicle_vehicleName :: Lens.Lens' CreateVehicle Prelude.Text
+createVehicle_vehicleName = Lens.lens (\CreateVehicle' {vehicleName} -> vehicleName) (\s@CreateVehicle' {} a -> s {vehicleName = a} :: CreateVehicle)
+
+-- | The Amazon Resource Name ARN of a vehicle model.
+createVehicle_modelManifestArn :: Lens.Lens' CreateVehicle Prelude.Text
+createVehicle_modelManifestArn = Lens.lens (\CreateVehicle' {modelManifestArn} -> modelManifestArn) (\s@CreateVehicle' {} a -> s {modelManifestArn = a} :: CreateVehicle)
+
+-- | The ARN of a decoder manifest.
+createVehicle_decoderManifestArn :: Lens.Lens' CreateVehicle Prelude.Text
+createVehicle_decoderManifestArn = Lens.lens (\CreateVehicle' {decoderManifestArn} -> decoderManifestArn) (\s@CreateVehicle' {} a -> s {decoderManifestArn = a} :: CreateVehicle)
+
+instance Core.AWSRequest CreateVehicle where
+  type
+    AWSResponse CreateVehicle =
+      CreateVehicleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateVehicleResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "thingArn")
+            Prelude.<*> (x Data..?> "vehicleName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVehicle where
+  hashWithSalt _salt CreateVehicle' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationBehavior
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vehicleName
+      `Prelude.hashWithSalt` modelManifestArn
+      `Prelude.hashWithSalt` decoderManifestArn
+
+instance Prelude.NFData CreateVehicle where
+  rnf CreateVehicle' {..} =
+    Prelude.rnf associationBehavior
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf decoderManifestArn
+
+instance Data.ToHeaders CreateVehicle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.CreateVehicle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateVehicle where
+  toJSON CreateVehicle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("associationBehavior" Data..=)
+              Prelude.<$> associationBehavior,
+            ("attributes" Data..=) Prelude.<$> attributes,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("vehicleName" Data..= vehicleName),
+            Prelude.Just
+              ("modelManifestArn" Data..= modelManifestArn),
+            Prelude.Just
+              ("decoderManifestArn" Data..= decoderManifestArn)
+          ]
+      )
+
+instance Data.ToPath CreateVehicle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVehicle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateVehicleResponse' smart constructor.
+data CreateVehicleResponse = CreateVehicleResponse'
+  { -- | The ARN of the created vehicle.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a created or validated Amazon Web Services IoT thing.
+    thingArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the created vehicle.
+    vehicleName :: 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 'CreateVehicleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createVehicleResponse_arn' - The ARN of the created vehicle.
+--
+-- 'thingArn', 'createVehicleResponse_thingArn' - The ARN of a created or validated Amazon Web Services IoT thing.
+--
+-- 'vehicleName', 'createVehicleResponse_vehicleName' - The unique ID of the created vehicle.
+--
+-- 'httpStatus', 'createVehicleResponse_httpStatus' - The response's http status code.
+newCreateVehicleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVehicleResponse
+newCreateVehicleResponse pHttpStatus_ =
+  CreateVehicleResponse'
+    { arn = Prelude.Nothing,
+      thingArn = Prelude.Nothing,
+      vehicleName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the created vehicle.
+createVehicleResponse_arn :: Lens.Lens' CreateVehicleResponse (Prelude.Maybe Prelude.Text)
+createVehicleResponse_arn = Lens.lens (\CreateVehicleResponse' {arn} -> arn) (\s@CreateVehicleResponse' {} a -> s {arn = a} :: CreateVehicleResponse)
+
+-- | The ARN of a created or validated Amazon Web Services IoT thing.
+createVehicleResponse_thingArn :: Lens.Lens' CreateVehicleResponse (Prelude.Maybe Prelude.Text)
+createVehicleResponse_thingArn = Lens.lens (\CreateVehicleResponse' {thingArn} -> thingArn) (\s@CreateVehicleResponse' {} a -> s {thingArn = a} :: CreateVehicleResponse)
+
+-- | The unique ID of the created vehicle.
+createVehicleResponse_vehicleName :: Lens.Lens' CreateVehicleResponse (Prelude.Maybe Prelude.Text)
+createVehicleResponse_vehicleName = Lens.lens (\CreateVehicleResponse' {vehicleName} -> vehicleName) (\s@CreateVehicleResponse' {} a -> s {vehicleName = a} :: CreateVehicleResponse)
+
+-- | The response's http status code.
+createVehicleResponse_httpStatus :: Lens.Lens' CreateVehicleResponse Prelude.Int
+createVehicleResponse_httpStatus = Lens.lens (\CreateVehicleResponse' {httpStatus} -> httpStatus) (\s@CreateVehicleResponse' {} a -> s {httpStatus = a} :: CreateVehicleResponse)
+
+instance Prelude.NFData CreateVehicleResponse where
+  rnf CreateVehicleResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf thingArn
+      `Prelude.seq` Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/DeleteCampaign.hs b/gen/Amazonka/IoTFleetWise/DeleteCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/DeleteCampaign.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.IoTFleetWise.DeleteCampaign
+-- 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 data collection campaign. Deleting a campaign suspends all
+-- data collection and removes it from any vehicles.
+module Amazonka.IoTFleetWise.DeleteCampaign
+  ( -- * Creating a Request
+    DeleteCampaign (..),
+    newDeleteCampaign,
+
+    -- * Request Lenses
+    deleteCampaign_name,
+
+    -- * Destructuring the Response
+    DeleteCampaignResponse (..),
+    newDeleteCampaignResponse,
+
+    -- * Response Lenses
+    deleteCampaignResponse_arn,
+    deleteCampaignResponse_name,
+    deleteCampaignResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCampaign' smart constructor.
+data DeleteCampaign = DeleteCampaign'
+  { -- | The name of the campaign to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteCampaign_name' - The name of the campaign to delete.
+newDeleteCampaign ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteCampaign
+newDeleteCampaign pName_ =
+  DeleteCampaign' {name = pName_}
+
+-- | The name of the campaign to delete.
+deleteCampaign_name :: Lens.Lens' DeleteCampaign Prelude.Text
+deleteCampaign_name = Lens.lens (\DeleteCampaign' {name} -> name) (\s@DeleteCampaign' {} a -> s {name = a} :: DeleteCampaign)
+
+instance Core.AWSRequest DeleteCampaign where
+  type
+    AWSResponse DeleteCampaign =
+      DeleteCampaignResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteCampaignResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCampaign where
+  hashWithSalt _salt DeleteCampaign' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteCampaign where
+  rnf DeleteCampaign' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.DeleteCampaign" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteCampaign where
+  toJSON DeleteCampaign' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteCampaign where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCampaignResponse' smart constructor.
+data DeleteCampaignResponse = DeleteCampaignResponse'
+  { -- | The Amazon Resource Name (ARN) of the deleted campaign.
+    --
+    -- The ARN isn’t returned if a campaign doesn’t exist.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the deleted campaign.
+    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 'DeleteCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteCampaignResponse_arn' - The Amazon Resource Name (ARN) of the deleted campaign.
+--
+-- The ARN isn’t returned if a campaign doesn’t exist.
+--
+-- 'name', 'deleteCampaignResponse_name' - The name of the deleted campaign.
+--
+-- 'httpStatus', 'deleteCampaignResponse_httpStatus' - The response's http status code.
+newDeleteCampaignResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCampaignResponse
+newDeleteCampaignResponse pHttpStatus_ =
+  DeleteCampaignResponse'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the deleted campaign.
+--
+-- The ARN isn’t returned if a campaign doesn’t exist.
+deleteCampaignResponse_arn :: Lens.Lens' DeleteCampaignResponse (Prelude.Maybe Prelude.Text)
+deleteCampaignResponse_arn = Lens.lens (\DeleteCampaignResponse' {arn} -> arn) (\s@DeleteCampaignResponse' {} a -> s {arn = a} :: DeleteCampaignResponse)
+
+-- | The name of the deleted campaign.
+deleteCampaignResponse_name :: Lens.Lens' DeleteCampaignResponse (Prelude.Maybe Prelude.Text)
+deleteCampaignResponse_name = Lens.lens (\DeleteCampaignResponse' {name} -> name) (\s@DeleteCampaignResponse' {} a -> s {name = a} :: DeleteCampaignResponse)
+
+-- | The response's http status code.
+deleteCampaignResponse_httpStatus :: Lens.Lens' DeleteCampaignResponse Prelude.Int
+deleteCampaignResponse_httpStatus = Lens.lens (\DeleteCampaignResponse' {httpStatus} -> httpStatus) (\s@DeleteCampaignResponse' {} a -> s {httpStatus = a} :: DeleteCampaignResponse)
+
+instance Prelude.NFData DeleteCampaignResponse where
+  rnf DeleteCampaignResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/DeleteDecoderManifest.hs b/gen/Amazonka/IoTFleetWise/DeleteDecoderManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/DeleteDecoderManifest.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.IoTFleetWise.DeleteDecoderManifest
+-- 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 decoder manifest. You can\'t delete a decoder manifest if it
+-- has vehicles associated with it.
+--
+-- If the decoder manifest is successfully deleted, Amazon Web Services IoT
+-- FleetWise sends back an HTTP 200 response with an empty body.
+module Amazonka.IoTFleetWise.DeleteDecoderManifest
+  ( -- * Creating a Request
+    DeleteDecoderManifest (..),
+    newDeleteDecoderManifest,
+
+    -- * Request Lenses
+    deleteDecoderManifest_name,
+
+    -- * Destructuring the Response
+    DeleteDecoderManifestResponse (..),
+    newDeleteDecoderManifestResponse,
+
+    -- * Response Lenses
+    deleteDecoderManifestResponse_httpStatus,
+    deleteDecoderManifestResponse_name,
+    deleteDecoderManifestResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDecoderManifest' smart constructor.
+data DeleteDecoderManifest = DeleteDecoderManifest'
+  { -- | The name of the decoder manifest to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDecoderManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDecoderManifest_name' - The name of the decoder manifest to delete.
+newDeleteDecoderManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteDecoderManifest
+newDeleteDecoderManifest pName_ =
+  DeleteDecoderManifest' {name = pName_}
+
+-- | The name of the decoder manifest to delete.
+deleteDecoderManifest_name :: Lens.Lens' DeleteDecoderManifest Prelude.Text
+deleteDecoderManifest_name = Lens.lens (\DeleteDecoderManifest' {name} -> name) (\s@DeleteDecoderManifest' {} a -> s {name = a} :: DeleteDecoderManifest)
+
+instance Core.AWSRequest DeleteDecoderManifest where
+  type
+    AWSResponse DeleteDecoderManifest =
+      DeleteDecoderManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteDecoderManifestResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable DeleteDecoderManifest where
+  hashWithSalt _salt DeleteDecoderManifest' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteDecoderManifest where
+  rnf DeleteDecoderManifest' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteDecoderManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.DeleteDecoderManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDecoderManifest where
+  toJSON DeleteDecoderManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteDecoderManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDecoderManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDecoderManifestResponse' smart constructor.
+data DeleteDecoderManifestResponse = DeleteDecoderManifestResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the deleted decoder manifest.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the deleted decoder manifest.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDecoderManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDecoderManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteDecoderManifestResponse_name' - The name of the deleted decoder manifest.
+--
+-- 'arn', 'deleteDecoderManifestResponse_arn' - The Amazon Resource Name (ARN) of the deleted decoder manifest.
+newDeleteDecoderManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  DeleteDecoderManifestResponse
+newDeleteDecoderManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    DeleteDecoderManifestResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+deleteDecoderManifestResponse_httpStatus :: Lens.Lens' DeleteDecoderManifestResponse Prelude.Int
+deleteDecoderManifestResponse_httpStatus = Lens.lens (\DeleteDecoderManifestResponse' {httpStatus} -> httpStatus) (\s@DeleteDecoderManifestResponse' {} a -> s {httpStatus = a} :: DeleteDecoderManifestResponse)
+
+-- | The name of the deleted decoder manifest.
+deleteDecoderManifestResponse_name :: Lens.Lens' DeleteDecoderManifestResponse Prelude.Text
+deleteDecoderManifestResponse_name = Lens.lens (\DeleteDecoderManifestResponse' {name} -> name) (\s@DeleteDecoderManifestResponse' {} a -> s {name = a} :: DeleteDecoderManifestResponse)
+
+-- | The Amazon Resource Name (ARN) of the deleted decoder manifest.
+deleteDecoderManifestResponse_arn :: Lens.Lens' DeleteDecoderManifestResponse Prelude.Text
+deleteDecoderManifestResponse_arn = Lens.lens (\DeleteDecoderManifestResponse' {arn} -> arn) (\s@DeleteDecoderManifestResponse' {} a -> s {arn = a} :: DeleteDecoderManifestResponse)
+
+instance Prelude.NFData DeleteDecoderManifestResponse where
+  rnf DeleteDecoderManifestResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/DeleteFleet.hs b/gen/Amazonka/IoTFleetWise/DeleteFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/DeleteFleet.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.IoTFleetWise.DeleteFleet
+-- 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 fleet. Before you delete a fleet, all vehicles must be
+-- dissociated from the fleet. For more information, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/delete-fleet-cli.html Delete a fleet (AWS CLI)>
+-- in the /Amazon Web Services IoT FleetWise Developer Guide/.
+--
+-- If the fleet is successfully deleted, Amazon Web Services IoT FleetWise
+-- sends back an HTTP 200 response with an empty body.
+module Amazonka.IoTFleetWise.DeleteFleet
+  ( -- * Creating a Request
+    DeleteFleet (..),
+    newDeleteFleet,
+
+    -- * Request Lenses
+    deleteFleet_fleetId,
+
+    -- * Destructuring the Response
+    DeleteFleetResponse (..),
+    newDeleteFleetResponse,
+
+    -- * Response Lenses
+    deleteFleetResponse_arn,
+    deleteFleetResponse_id,
+    deleteFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFleet' smart constructor.
+data DeleteFleet = DeleteFleet'
+  { -- | The ID of the fleet to delete.
+    fleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetId', 'deleteFleet_fleetId' - The ID of the fleet to delete.
+newDeleteFleet ::
+  -- | 'fleetId'
+  Prelude.Text ->
+  DeleteFleet
+newDeleteFleet pFleetId_ =
+  DeleteFleet' {fleetId = pFleetId_}
+
+-- | The ID of the fleet to delete.
+deleteFleet_fleetId :: Lens.Lens' DeleteFleet Prelude.Text
+deleteFleet_fleetId = Lens.lens (\DeleteFleet' {fleetId} -> fleetId) (\s@DeleteFleet' {} a -> s {fleetId = a} :: DeleteFleet)
+
+instance Core.AWSRequest DeleteFleet where
+  type AWSResponse DeleteFleet = DeleteFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteFleetResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFleet where
+  hashWithSalt _salt DeleteFleet' {..} =
+    _salt `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData DeleteFleet where
+  rnf DeleteFleet' {..} = Prelude.rnf fleetId
+
+instance Data.ToHeaders DeleteFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.DeleteFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteFleet where
+  toJSON DeleteFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("fleetId" Data..= fleetId)]
+      )
+
+instance Data.ToPath DeleteFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteFleetResponse' smart constructor.
+data DeleteFleetResponse = DeleteFleetResponse'
+  { -- | The Amazon Resource Name (ARN) of the deleted fleet.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the deleted fleet.
+    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 'DeleteFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteFleetResponse_arn' - The Amazon Resource Name (ARN) of the deleted fleet.
+--
+-- 'id', 'deleteFleetResponse_id' - The ID of the deleted fleet.
+--
+-- 'httpStatus', 'deleteFleetResponse_httpStatus' - The response's http status code.
+newDeleteFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFleetResponse
+newDeleteFleetResponse pHttpStatus_ =
+  DeleteFleetResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the deleted fleet.
+deleteFleetResponse_arn :: Lens.Lens' DeleteFleetResponse (Prelude.Maybe Prelude.Text)
+deleteFleetResponse_arn = Lens.lens (\DeleteFleetResponse' {arn} -> arn) (\s@DeleteFleetResponse' {} a -> s {arn = a} :: DeleteFleetResponse)
+
+-- | The ID of the deleted fleet.
+deleteFleetResponse_id :: Lens.Lens' DeleteFleetResponse (Prelude.Maybe Prelude.Text)
+deleteFleetResponse_id = Lens.lens (\DeleteFleetResponse' {id} -> id) (\s@DeleteFleetResponse' {} a -> s {id = a} :: DeleteFleetResponse)
+
+-- | The response's http status code.
+deleteFleetResponse_httpStatus :: Lens.Lens' DeleteFleetResponse Prelude.Int
+deleteFleetResponse_httpStatus = Lens.lens (\DeleteFleetResponse' {httpStatus} -> httpStatus) (\s@DeleteFleetResponse' {} a -> s {httpStatus = a} :: DeleteFleetResponse)
+
+instance Prelude.NFData DeleteFleetResponse where
+  rnf DeleteFleetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/DeleteModelManifest.hs b/gen/Amazonka/IoTFleetWise/DeleteModelManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/DeleteModelManifest.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.IoTFleetWise.DeleteModelManifest
+-- 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 vehicle model (model manifest).
+--
+-- If the vehicle model is successfully deleted, Amazon Web Services IoT
+-- FleetWise sends back an HTTP 200 response with an empty body.
+module Amazonka.IoTFleetWise.DeleteModelManifest
+  ( -- * Creating a Request
+    DeleteModelManifest (..),
+    newDeleteModelManifest,
+
+    -- * Request Lenses
+    deleteModelManifest_name,
+
+    -- * Destructuring the Response
+    DeleteModelManifestResponse (..),
+    newDeleteModelManifestResponse,
+
+    -- * Response Lenses
+    deleteModelManifestResponse_httpStatus,
+    deleteModelManifestResponse_name,
+    deleteModelManifestResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteModelManifest' smart constructor.
+data DeleteModelManifest = DeleteModelManifest'
+  { -- | The name of the model manifest to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteModelManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteModelManifest_name' - The name of the model manifest to delete.
+newDeleteModelManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteModelManifest
+newDeleteModelManifest pName_ =
+  DeleteModelManifest' {name = pName_}
+
+-- | The name of the model manifest to delete.
+deleteModelManifest_name :: Lens.Lens' DeleteModelManifest Prelude.Text
+deleteModelManifest_name = Lens.lens (\DeleteModelManifest' {name} -> name) (\s@DeleteModelManifest' {} a -> s {name = a} :: DeleteModelManifest)
+
+instance Core.AWSRequest DeleteModelManifest where
+  type
+    AWSResponse DeleteModelManifest =
+      DeleteModelManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteModelManifestResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable DeleteModelManifest where
+  hashWithSalt _salt DeleteModelManifest' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteModelManifest where
+  rnf DeleteModelManifest' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteModelManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.DeleteModelManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteModelManifest where
+  toJSON DeleteModelManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteModelManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteModelManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteModelManifestResponse' smart constructor.
+data DeleteModelManifestResponse = DeleteModelManifestResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the deleted model manifest.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the deleted model manifest.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteModelManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteModelManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteModelManifestResponse_name' - The name of the deleted model manifest.
+--
+-- 'arn', 'deleteModelManifestResponse_arn' - The Amazon Resource Name (ARN) of the deleted model manifest.
+newDeleteModelManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  DeleteModelManifestResponse
+newDeleteModelManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    DeleteModelManifestResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+deleteModelManifestResponse_httpStatus :: Lens.Lens' DeleteModelManifestResponse Prelude.Int
+deleteModelManifestResponse_httpStatus = Lens.lens (\DeleteModelManifestResponse' {httpStatus} -> httpStatus) (\s@DeleteModelManifestResponse' {} a -> s {httpStatus = a} :: DeleteModelManifestResponse)
+
+-- | The name of the deleted model manifest.
+deleteModelManifestResponse_name :: Lens.Lens' DeleteModelManifestResponse Prelude.Text
+deleteModelManifestResponse_name = Lens.lens (\DeleteModelManifestResponse' {name} -> name) (\s@DeleteModelManifestResponse' {} a -> s {name = a} :: DeleteModelManifestResponse)
+
+-- | The Amazon Resource Name (ARN) of the deleted model manifest.
+deleteModelManifestResponse_arn :: Lens.Lens' DeleteModelManifestResponse Prelude.Text
+deleteModelManifestResponse_arn = Lens.lens (\DeleteModelManifestResponse' {arn} -> arn) (\s@DeleteModelManifestResponse' {} a -> s {arn = a} :: DeleteModelManifestResponse)
+
+instance Prelude.NFData DeleteModelManifestResponse where
+  rnf DeleteModelManifestResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/DeleteSignalCatalog.hs b/gen/Amazonka/IoTFleetWise/DeleteSignalCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/DeleteSignalCatalog.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.IoTFleetWise.DeleteSignalCatalog
+-- 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 signal catalog.
+--
+-- If the signal catalog is successfully deleted, Amazon Web Services IoT
+-- FleetWise sends back an HTTP 200 response with an empty body.
+module Amazonka.IoTFleetWise.DeleteSignalCatalog
+  ( -- * Creating a Request
+    DeleteSignalCatalog (..),
+    newDeleteSignalCatalog,
+
+    -- * Request Lenses
+    deleteSignalCatalog_name,
+
+    -- * Destructuring the Response
+    DeleteSignalCatalogResponse (..),
+    newDeleteSignalCatalogResponse,
+
+    -- * Response Lenses
+    deleteSignalCatalogResponse_httpStatus,
+    deleteSignalCatalogResponse_name,
+    deleteSignalCatalogResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSignalCatalog' smart constructor.
+data DeleteSignalCatalog = DeleteSignalCatalog'
+  { -- | The name of the signal catalog to delete.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSignalCatalog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteSignalCatalog_name' - The name of the signal catalog to delete.
+newDeleteSignalCatalog ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteSignalCatalog
+newDeleteSignalCatalog pName_ =
+  DeleteSignalCatalog' {name = pName_}
+
+-- | The name of the signal catalog to delete.
+deleteSignalCatalog_name :: Lens.Lens' DeleteSignalCatalog Prelude.Text
+deleteSignalCatalog_name = Lens.lens (\DeleteSignalCatalog' {name} -> name) (\s@DeleteSignalCatalog' {} a -> s {name = a} :: DeleteSignalCatalog)
+
+instance Core.AWSRequest DeleteSignalCatalog where
+  type
+    AWSResponse DeleteSignalCatalog =
+      DeleteSignalCatalogResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteSignalCatalogResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable DeleteSignalCatalog where
+  hashWithSalt _salt DeleteSignalCatalog' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteSignalCatalog where
+  rnf DeleteSignalCatalog' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteSignalCatalog where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.DeleteSignalCatalog" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSignalCatalog where
+  toJSON DeleteSignalCatalog' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteSignalCatalog where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSignalCatalog where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSignalCatalogResponse' smart constructor.
+data DeleteSignalCatalogResponse = DeleteSignalCatalogResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the deleted signal catalog.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the deleted signal catalog.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSignalCatalogResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteSignalCatalogResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'deleteSignalCatalogResponse_name' - The name of the deleted signal catalog.
+--
+-- 'arn', 'deleteSignalCatalogResponse_arn' - The Amazon Resource Name (ARN) of the deleted signal catalog.
+newDeleteSignalCatalogResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  DeleteSignalCatalogResponse
+newDeleteSignalCatalogResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    DeleteSignalCatalogResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+deleteSignalCatalogResponse_httpStatus :: Lens.Lens' DeleteSignalCatalogResponse Prelude.Int
+deleteSignalCatalogResponse_httpStatus = Lens.lens (\DeleteSignalCatalogResponse' {httpStatus} -> httpStatus) (\s@DeleteSignalCatalogResponse' {} a -> s {httpStatus = a} :: DeleteSignalCatalogResponse)
+
+-- | The name of the deleted signal catalog.
+deleteSignalCatalogResponse_name :: Lens.Lens' DeleteSignalCatalogResponse Prelude.Text
+deleteSignalCatalogResponse_name = Lens.lens (\DeleteSignalCatalogResponse' {name} -> name) (\s@DeleteSignalCatalogResponse' {} a -> s {name = a} :: DeleteSignalCatalogResponse)
+
+-- | The Amazon Resource Name (ARN) of the deleted signal catalog.
+deleteSignalCatalogResponse_arn :: Lens.Lens' DeleteSignalCatalogResponse Prelude.Text
+deleteSignalCatalogResponse_arn = Lens.lens (\DeleteSignalCatalogResponse' {arn} -> arn) (\s@DeleteSignalCatalogResponse' {} a -> s {arn = a} :: DeleteSignalCatalogResponse)
+
+instance Prelude.NFData DeleteSignalCatalogResponse where
+  rnf DeleteSignalCatalogResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/DeleteVehicle.hs b/gen/Amazonka/IoTFleetWise/DeleteVehicle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/DeleteVehicle.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.IoTFleetWise.DeleteVehicle
+-- 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 vehicle and removes it from any campaigns.
+--
+-- If the vehicle is successfully deleted, Amazon Web Services IoT
+-- FleetWise sends back an HTTP 200 response with an empty body.
+module Amazonka.IoTFleetWise.DeleteVehicle
+  ( -- * Creating a Request
+    DeleteVehicle (..),
+    newDeleteVehicle,
+
+    -- * Request Lenses
+    deleteVehicle_vehicleName,
+
+    -- * Destructuring the Response
+    DeleteVehicleResponse (..),
+    newDeleteVehicleResponse,
+
+    -- * Response Lenses
+    deleteVehicleResponse_httpStatus,
+    deleteVehicleResponse_vehicleName,
+    deleteVehicleResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVehicle' smart constructor.
+data DeleteVehicle = DeleteVehicle'
+  { -- | The ID of the vehicle to delete.
+    vehicleName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVehicle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vehicleName', 'deleteVehicle_vehicleName' - The ID of the vehicle to delete.
+newDeleteVehicle ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  DeleteVehicle
+newDeleteVehicle pVehicleName_ =
+  DeleteVehicle' {vehicleName = pVehicleName_}
+
+-- | The ID of the vehicle to delete.
+deleteVehicle_vehicleName :: Lens.Lens' DeleteVehicle Prelude.Text
+deleteVehicle_vehicleName = Lens.lens (\DeleteVehicle' {vehicleName} -> vehicleName) (\s@DeleteVehicle' {} a -> s {vehicleName = a} :: DeleteVehicle)
+
+instance Core.AWSRequest DeleteVehicle where
+  type
+    AWSResponse DeleteVehicle =
+      DeleteVehicleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteVehicleResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "vehicleName")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable DeleteVehicle where
+  hashWithSalt _salt DeleteVehicle' {..} =
+    _salt `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData DeleteVehicle where
+  rnf DeleteVehicle' {..} = Prelude.rnf vehicleName
+
+instance Data.ToHeaders DeleteVehicle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.DeleteVehicle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteVehicle where
+  toJSON DeleteVehicle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("vehicleName" Data..= vehicleName)]
+      )
+
+instance Data.ToPath DeleteVehicle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVehicle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteVehicleResponse' smart constructor.
+data DeleteVehicleResponse = DeleteVehicleResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the deleted vehicle.
+    vehicleName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the deleted vehicle.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVehicleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteVehicleResponse_httpStatus' - The response's http status code.
+--
+-- 'vehicleName', 'deleteVehicleResponse_vehicleName' - The ID of the deleted vehicle.
+--
+-- 'arn', 'deleteVehicleResponse_arn' - The Amazon Resource Name (ARN) of the deleted vehicle.
+newDeleteVehicleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'vehicleName'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  DeleteVehicleResponse
+newDeleteVehicleResponse
+  pHttpStatus_
+  pVehicleName_
+  pArn_ =
+    DeleteVehicleResponse'
+      { httpStatus = pHttpStatus_,
+        vehicleName = pVehicleName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+deleteVehicleResponse_httpStatus :: Lens.Lens' DeleteVehicleResponse Prelude.Int
+deleteVehicleResponse_httpStatus = Lens.lens (\DeleteVehicleResponse' {httpStatus} -> httpStatus) (\s@DeleteVehicleResponse' {} a -> s {httpStatus = a} :: DeleteVehicleResponse)
+
+-- | The ID of the deleted vehicle.
+deleteVehicleResponse_vehicleName :: Lens.Lens' DeleteVehicleResponse Prelude.Text
+deleteVehicleResponse_vehicleName = Lens.lens (\DeleteVehicleResponse' {vehicleName} -> vehicleName) (\s@DeleteVehicleResponse' {} a -> s {vehicleName = a} :: DeleteVehicleResponse)
+
+-- | The Amazon Resource Name (ARN) of the deleted vehicle.
+deleteVehicleResponse_arn :: Lens.Lens' DeleteVehicleResponse Prelude.Text
+deleteVehicleResponse_arn = Lens.lens (\DeleteVehicleResponse' {arn} -> arn) (\s@DeleteVehicleResponse' {} a -> s {arn = a} :: DeleteVehicleResponse)
+
+instance Prelude.NFData DeleteVehicleResponse where
+  rnf DeleteVehicleResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/DisassociateVehicleFleet.hs b/gen/Amazonka/IoTFleetWise/DisassociateVehicleFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/DisassociateVehicleFleet.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.IoTFleetWise.DisassociateVehicleFleet
+-- 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, or disassociates, a vehicle from a fleet. Disassociating a
+-- vehicle from a fleet doesn\'t delete the vehicle.
+--
+-- If the vehicle is successfully dissociated from a fleet, Amazon Web
+-- Services IoT FleetWise sends back an HTTP 200 response with an empty
+-- body.
+module Amazonka.IoTFleetWise.DisassociateVehicleFleet
+  ( -- * Creating a Request
+    DisassociateVehicleFleet (..),
+    newDisassociateVehicleFleet,
+
+    -- * Request Lenses
+    disassociateVehicleFleet_vehicleName,
+    disassociateVehicleFleet_fleetId,
+
+    -- * Destructuring the Response
+    DisassociateVehicleFleetResponse (..),
+    newDisassociateVehicleFleetResponse,
+
+    -- * Response Lenses
+    disassociateVehicleFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateVehicleFleet' smart constructor.
+data DisassociateVehicleFleet = DisassociateVehicleFleet'
+  { -- | The unique ID of the vehicle to disassociate from the fleet.
+    vehicleName :: Prelude.Text,
+    -- | The unique ID of a fleet.
+    fleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateVehicleFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vehicleName', 'disassociateVehicleFleet_vehicleName' - The unique ID of the vehicle to disassociate from the fleet.
+--
+-- 'fleetId', 'disassociateVehicleFleet_fleetId' - The unique ID of a fleet.
+newDisassociateVehicleFleet ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  -- | 'fleetId'
+  Prelude.Text ->
+  DisassociateVehicleFleet
+newDisassociateVehicleFleet pVehicleName_ pFleetId_ =
+  DisassociateVehicleFleet'
+    { vehicleName =
+        pVehicleName_,
+      fleetId = pFleetId_
+    }
+
+-- | The unique ID of the vehicle to disassociate from the fleet.
+disassociateVehicleFleet_vehicleName :: Lens.Lens' DisassociateVehicleFleet Prelude.Text
+disassociateVehicleFleet_vehicleName = Lens.lens (\DisassociateVehicleFleet' {vehicleName} -> vehicleName) (\s@DisassociateVehicleFleet' {} a -> s {vehicleName = a} :: DisassociateVehicleFleet)
+
+-- | The unique ID of a fleet.
+disassociateVehicleFleet_fleetId :: Lens.Lens' DisassociateVehicleFleet Prelude.Text
+disassociateVehicleFleet_fleetId = Lens.lens (\DisassociateVehicleFleet' {fleetId} -> fleetId) (\s@DisassociateVehicleFleet' {} a -> s {fleetId = a} :: DisassociateVehicleFleet)
+
+instance Core.AWSRequest DisassociateVehicleFleet where
+  type
+    AWSResponse DisassociateVehicleFleet =
+      DisassociateVehicleFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateVehicleFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateVehicleFleet where
+  hashWithSalt _salt DisassociateVehicleFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` vehicleName
+      `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData DisassociateVehicleFleet where
+  rnf DisassociateVehicleFleet' {..} =
+    Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf fleetId
+
+instance Data.ToHeaders DisassociateVehicleFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.DisassociateVehicleFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateVehicleFleet where
+  toJSON DisassociateVehicleFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("vehicleName" Data..= vehicleName),
+            Prelude.Just ("fleetId" Data..= fleetId)
+          ]
+      )
+
+instance Data.ToPath DisassociateVehicleFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateVehicleFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateVehicleFleetResponse' smart constructor.
+data DisassociateVehicleFleetResponse = DisassociateVehicleFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateVehicleFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateVehicleFleetResponse_httpStatus' - The response's http status code.
+newDisassociateVehicleFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateVehicleFleetResponse
+newDisassociateVehicleFleetResponse pHttpStatus_ =
+  DisassociateVehicleFleetResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateVehicleFleetResponse_httpStatus :: Lens.Lens' DisassociateVehicleFleetResponse Prelude.Int
+disassociateVehicleFleetResponse_httpStatus = Lens.lens (\DisassociateVehicleFleetResponse' {httpStatus} -> httpStatus) (\s@DisassociateVehicleFleetResponse' {} a -> s {httpStatus = a} :: DisassociateVehicleFleetResponse)
+
+instance
+  Prelude.NFData
+    DisassociateVehicleFleetResponse
+  where
+  rnf DisassociateVehicleFleetResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/GetCampaign.hs b/gen/Amazonka/IoTFleetWise/GetCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetCampaign.hs
@@ -0,0 +1,413 @@
+{-# 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.IoTFleetWise.GetCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a campaign.
+module Amazonka.IoTFleetWise.GetCampaign
+  ( -- * Creating a Request
+    GetCampaign (..),
+    newGetCampaign,
+
+    -- * Request Lenses
+    getCampaign_name,
+
+    -- * Destructuring the Response
+    GetCampaignResponse (..),
+    newGetCampaignResponse,
+
+    -- * Response Lenses
+    getCampaignResponse_arn,
+    getCampaignResponse_collectionScheme,
+    getCampaignResponse_compression,
+    getCampaignResponse_creationTime,
+    getCampaignResponse_dataExtraDimensions,
+    getCampaignResponse_description,
+    getCampaignResponse_diagnosticsMode,
+    getCampaignResponse_expiryTime,
+    getCampaignResponse_lastModificationTime,
+    getCampaignResponse_name,
+    getCampaignResponse_postTriggerCollectionDuration,
+    getCampaignResponse_priority,
+    getCampaignResponse_signalCatalogArn,
+    getCampaignResponse_signalsToCollect,
+    getCampaignResponse_spoolingMode,
+    getCampaignResponse_startTime,
+    getCampaignResponse_status,
+    getCampaignResponse_targetArn,
+    getCampaignResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetCampaign' smart constructor.
+data GetCampaign = GetCampaign'
+  { -- | The name of the campaign to retrieve information about.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getCampaign_name' - The name of the campaign to retrieve information about.
+newGetCampaign ::
+  -- | 'name'
+  Prelude.Text ->
+  GetCampaign
+newGetCampaign pName_ = GetCampaign' {name = pName_}
+
+-- | The name of the campaign to retrieve information about.
+getCampaign_name :: Lens.Lens' GetCampaign Prelude.Text
+getCampaign_name = Lens.lens (\GetCampaign' {name} -> name) (\s@GetCampaign' {} a -> s {name = a} :: GetCampaign)
+
+instance Core.AWSRequest GetCampaign where
+  type AWSResponse GetCampaign = GetCampaignResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetCampaignResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "collectionScheme")
+            Prelude.<*> (x Data..?> "compression")
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> ( x
+                            Data..?> "dataExtraDimensions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "diagnosticsMode")
+            Prelude.<*> (x Data..?> "expiryTime")
+            Prelude.<*> (x Data..?> "lastModificationTime")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "postTriggerCollectionDuration")
+            Prelude.<*> (x Data..?> "priority")
+            Prelude.<*> (x Data..?> "signalCatalogArn")
+            Prelude.<*> ( x
+                            Data..?> "signalsToCollect"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "spoolingMode")
+            Prelude.<*> (x Data..?> "startTime")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "targetArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCampaign where
+  hashWithSalt _salt GetCampaign' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GetCampaign where
+  rnf GetCampaign' {..} = Prelude.rnf name
+
+instance Data.ToHeaders GetCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetCampaign" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetCampaign where
+  toJSON GetCampaign' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath GetCampaign where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetCampaignResponse' smart constructor.
+data GetCampaignResponse = GetCampaignResponse'
+  { -- | The Amazon Resource Name (ARN) of the campaign.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Information about the data collection scheme associated with the
+    -- campaign.
+    collectionScheme :: Prelude.Maybe CollectionScheme,
+    -- | Whether to compress signals before transmitting data to Amazon Web
+    -- Services IoT FleetWise. If @OFF@ is specified, the signals aren\'t
+    -- compressed. If it\'s not specified, @SNAPPY@ is used.
+    compression :: Prelude.Maybe Compression,
+    -- | The time the campaign was created in seconds since epoch (January 1,
+    -- 1970 at midnight UTC time).
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | A list of vehicle attributes associated with the campaign.
+    dataExtraDimensions :: Prelude.Maybe [Prelude.Text],
+    -- | The description of the campaign.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Option for a vehicle to send diagnostic trouble codes to Amazon Web
+    -- Services IoT FleetWise.
+    diagnosticsMode :: Prelude.Maybe DiagnosticsMode,
+    -- | The time the campaign expires, in seconds since epoch (January 1, 1970
+    -- at midnight UTC time). Vehicle data won\'t be collected after the
+    -- campaign expires.
+    expiryTime :: Prelude.Maybe Data.POSIX,
+    -- | The last time the campaign was modified.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the campaign.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | How long (in seconds) to collect raw data after a triggering event
+    -- initiates the collection.
+    postTriggerCollectionDuration :: Prelude.Maybe Prelude.Natural,
+    -- | A number indicating the priority of one campaign over another campaign
+    -- for a certain vehicle or fleet. A campaign with the lowest value is
+    -- deployed to vehicles before any other campaigns.
+    priority :: Prelude.Maybe Prelude.Natural,
+    -- | The ARN of a signal catalog.
+    signalCatalogArn :: Prelude.Maybe Prelude.Text,
+    -- | Information about a list of signals to collect data on.
+    signalsToCollect :: Prelude.Maybe [SignalInformation],
+    -- | Whether to store collected data after a vehicle lost a connection with
+    -- the cloud. After a connection is re-established, the data is
+    -- automatically forwarded to Amazon Web Services IoT FleetWise.
+    spoolingMode :: Prelude.Maybe SpoolingMode,
+    -- | The time, in milliseconds, to deliver a campaign after it was approved.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The state of the campaign. The status can be one of: @CREATING@,
+    -- @WAITING_FOR_APPROVAL@, @RUNNING@, and @SUSPENDED@.
+    status :: Prelude.Maybe CampaignStatus,
+    -- | The ARN of the vehicle or the fleet targeted by the campaign.
+    targetArn :: 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 'GetCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getCampaignResponse_arn' - The Amazon Resource Name (ARN) of the campaign.
+--
+-- 'collectionScheme', 'getCampaignResponse_collectionScheme' - Information about the data collection scheme associated with the
+-- campaign.
+--
+-- 'compression', 'getCampaignResponse_compression' - Whether to compress signals before transmitting data to Amazon Web
+-- Services IoT FleetWise. If @OFF@ is specified, the signals aren\'t
+-- compressed. If it\'s not specified, @SNAPPY@ is used.
+--
+-- 'creationTime', 'getCampaignResponse_creationTime' - The time the campaign was created in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+--
+-- 'dataExtraDimensions', 'getCampaignResponse_dataExtraDimensions' - A list of vehicle attributes associated with the campaign.
+--
+-- 'description', 'getCampaignResponse_description' - The description of the campaign.
+--
+-- 'diagnosticsMode', 'getCampaignResponse_diagnosticsMode' - Option for a vehicle to send diagnostic trouble codes to Amazon Web
+-- Services IoT FleetWise.
+--
+-- 'expiryTime', 'getCampaignResponse_expiryTime' - The time the campaign expires, in seconds since epoch (January 1, 1970
+-- at midnight UTC time). Vehicle data won\'t be collected after the
+-- campaign expires.
+--
+-- 'lastModificationTime', 'getCampaignResponse_lastModificationTime' - The last time the campaign was modified.
+--
+-- 'name', 'getCampaignResponse_name' - The name of the campaign.
+--
+-- 'postTriggerCollectionDuration', 'getCampaignResponse_postTriggerCollectionDuration' - How long (in seconds) to collect raw data after a triggering event
+-- initiates the collection.
+--
+-- 'priority', 'getCampaignResponse_priority' - A number indicating the priority of one campaign over another campaign
+-- for a certain vehicle or fleet. A campaign with the lowest value is
+-- deployed to vehicles before any other campaigns.
+--
+-- 'signalCatalogArn', 'getCampaignResponse_signalCatalogArn' - The ARN of a signal catalog.
+--
+-- 'signalsToCollect', 'getCampaignResponse_signalsToCollect' - Information about a list of signals to collect data on.
+--
+-- 'spoolingMode', 'getCampaignResponse_spoolingMode' - Whether to store collected data after a vehicle lost a connection with
+-- the cloud. After a connection is re-established, the data is
+-- automatically forwarded to Amazon Web Services IoT FleetWise.
+--
+-- 'startTime', 'getCampaignResponse_startTime' - The time, in milliseconds, to deliver a campaign after it was approved.
+--
+-- 'status', 'getCampaignResponse_status' - The state of the campaign. The status can be one of: @CREATING@,
+-- @WAITING_FOR_APPROVAL@, @RUNNING@, and @SUSPENDED@.
+--
+-- 'targetArn', 'getCampaignResponse_targetArn' - The ARN of the vehicle or the fleet targeted by the campaign.
+--
+-- 'httpStatus', 'getCampaignResponse_httpStatus' - The response's http status code.
+newGetCampaignResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCampaignResponse
+newGetCampaignResponse pHttpStatus_ =
+  GetCampaignResponse'
+    { arn = Prelude.Nothing,
+      collectionScheme = Prelude.Nothing,
+      compression = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      dataExtraDimensions = Prelude.Nothing,
+      description = Prelude.Nothing,
+      diagnosticsMode = Prelude.Nothing,
+      expiryTime = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      postTriggerCollectionDuration = Prelude.Nothing,
+      priority = Prelude.Nothing,
+      signalCatalogArn = Prelude.Nothing,
+      signalsToCollect = Prelude.Nothing,
+      spoolingMode = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      targetArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the campaign.
+getCampaignResponse_arn :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.Text)
+getCampaignResponse_arn = Lens.lens (\GetCampaignResponse' {arn} -> arn) (\s@GetCampaignResponse' {} a -> s {arn = a} :: GetCampaignResponse)
+
+-- | Information about the data collection scheme associated with the
+-- campaign.
+getCampaignResponse_collectionScheme :: Lens.Lens' GetCampaignResponse (Prelude.Maybe CollectionScheme)
+getCampaignResponse_collectionScheme = Lens.lens (\GetCampaignResponse' {collectionScheme} -> collectionScheme) (\s@GetCampaignResponse' {} a -> s {collectionScheme = a} :: GetCampaignResponse)
+
+-- | Whether to compress signals before transmitting data to Amazon Web
+-- Services IoT FleetWise. If @OFF@ is specified, the signals aren\'t
+-- compressed. If it\'s not specified, @SNAPPY@ is used.
+getCampaignResponse_compression :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Compression)
+getCampaignResponse_compression = Lens.lens (\GetCampaignResponse' {compression} -> compression) (\s@GetCampaignResponse' {} a -> s {compression = a} :: GetCampaignResponse)
+
+-- | The time the campaign was created in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+getCampaignResponse_creationTime :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.UTCTime)
+getCampaignResponse_creationTime = Lens.lens (\GetCampaignResponse' {creationTime} -> creationTime) (\s@GetCampaignResponse' {} a -> s {creationTime = a} :: GetCampaignResponse) Prelude.. Lens.mapping Data._Time
+
+-- | A list of vehicle attributes associated with the campaign.
+getCampaignResponse_dataExtraDimensions :: Lens.Lens' GetCampaignResponse (Prelude.Maybe [Prelude.Text])
+getCampaignResponse_dataExtraDimensions = Lens.lens (\GetCampaignResponse' {dataExtraDimensions} -> dataExtraDimensions) (\s@GetCampaignResponse' {} a -> s {dataExtraDimensions = a} :: GetCampaignResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the campaign.
+getCampaignResponse_description :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.Text)
+getCampaignResponse_description = Lens.lens (\GetCampaignResponse' {description} -> description) (\s@GetCampaignResponse' {} a -> s {description = a} :: GetCampaignResponse)
+
+-- | Option for a vehicle to send diagnostic trouble codes to Amazon Web
+-- Services IoT FleetWise.
+getCampaignResponse_diagnosticsMode :: Lens.Lens' GetCampaignResponse (Prelude.Maybe DiagnosticsMode)
+getCampaignResponse_diagnosticsMode = Lens.lens (\GetCampaignResponse' {diagnosticsMode} -> diagnosticsMode) (\s@GetCampaignResponse' {} a -> s {diagnosticsMode = a} :: GetCampaignResponse)
+
+-- | The time the campaign expires, in seconds since epoch (January 1, 1970
+-- at midnight UTC time). Vehicle data won\'t be collected after the
+-- campaign expires.
+getCampaignResponse_expiryTime :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.UTCTime)
+getCampaignResponse_expiryTime = Lens.lens (\GetCampaignResponse' {expiryTime} -> expiryTime) (\s@GetCampaignResponse' {} a -> s {expiryTime = a} :: GetCampaignResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The last time the campaign was modified.
+getCampaignResponse_lastModificationTime :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.UTCTime)
+getCampaignResponse_lastModificationTime = Lens.lens (\GetCampaignResponse' {lastModificationTime} -> lastModificationTime) (\s@GetCampaignResponse' {} a -> s {lastModificationTime = a} :: GetCampaignResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the campaign.
+getCampaignResponse_name :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.Text)
+getCampaignResponse_name = Lens.lens (\GetCampaignResponse' {name} -> name) (\s@GetCampaignResponse' {} a -> s {name = a} :: GetCampaignResponse)
+
+-- | How long (in seconds) to collect raw data after a triggering event
+-- initiates the collection.
+getCampaignResponse_postTriggerCollectionDuration :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.Natural)
+getCampaignResponse_postTriggerCollectionDuration = Lens.lens (\GetCampaignResponse' {postTriggerCollectionDuration} -> postTriggerCollectionDuration) (\s@GetCampaignResponse' {} a -> s {postTriggerCollectionDuration = a} :: GetCampaignResponse)
+
+-- | A number indicating the priority of one campaign over another campaign
+-- for a certain vehicle or fleet. A campaign with the lowest value is
+-- deployed to vehicles before any other campaigns.
+getCampaignResponse_priority :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.Natural)
+getCampaignResponse_priority = Lens.lens (\GetCampaignResponse' {priority} -> priority) (\s@GetCampaignResponse' {} a -> s {priority = a} :: GetCampaignResponse)
+
+-- | The ARN of a signal catalog.
+getCampaignResponse_signalCatalogArn :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.Text)
+getCampaignResponse_signalCatalogArn = Lens.lens (\GetCampaignResponse' {signalCatalogArn} -> signalCatalogArn) (\s@GetCampaignResponse' {} a -> s {signalCatalogArn = a} :: GetCampaignResponse)
+
+-- | Information about a list of signals to collect data on.
+getCampaignResponse_signalsToCollect :: Lens.Lens' GetCampaignResponse (Prelude.Maybe [SignalInformation])
+getCampaignResponse_signalsToCollect = Lens.lens (\GetCampaignResponse' {signalsToCollect} -> signalsToCollect) (\s@GetCampaignResponse' {} a -> s {signalsToCollect = a} :: GetCampaignResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Whether to store collected data after a vehicle lost a connection with
+-- the cloud. After a connection is re-established, the data is
+-- automatically forwarded to Amazon Web Services IoT FleetWise.
+getCampaignResponse_spoolingMode :: Lens.Lens' GetCampaignResponse (Prelude.Maybe SpoolingMode)
+getCampaignResponse_spoolingMode = Lens.lens (\GetCampaignResponse' {spoolingMode} -> spoolingMode) (\s@GetCampaignResponse' {} a -> s {spoolingMode = a} :: GetCampaignResponse)
+
+-- | The time, in milliseconds, to deliver a campaign after it was approved.
+getCampaignResponse_startTime :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.UTCTime)
+getCampaignResponse_startTime = Lens.lens (\GetCampaignResponse' {startTime} -> startTime) (\s@GetCampaignResponse' {} a -> s {startTime = a} :: GetCampaignResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The state of the campaign. The status can be one of: @CREATING@,
+-- @WAITING_FOR_APPROVAL@, @RUNNING@, and @SUSPENDED@.
+getCampaignResponse_status :: Lens.Lens' GetCampaignResponse (Prelude.Maybe CampaignStatus)
+getCampaignResponse_status = Lens.lens (\GetCampaignResponse' {status} -> status) (\s@GetCampaignResponse' {} a -> s {status = a} :: GetCampaignResponse)
+
+-- | The ARN of the vehicle or the fleet targeted by the campaign.
+getCampaignResponse_targetArn :: Lens.Lens' GetCampaignResponse (Prelude.Maybe Prelude.Text)
+getCampaignResponse_targetArn = Lens.lens (\GetCampaignResponse' {targetArn} -> targetArn) (\s@GetCampaignResponse' {} a -> s {targetArn = a} :: GetCampaignResponse)
+
+-- | The response's http status code.
+getCampaignResponse_httpStatus :: Lens.Lens' GetCampaignResponse Prelude.Int
+getCampaignResponse_httpStatus = Lens.lens (\GetCampaignResponse' {httpStatus} -> httpStatus) (\s@GetCampaignResponse' {} a -> s {httpStatus = a} :: GetCampaignResponse)
+
+instance Prelude.NFData GetCampaignResponse where
+  rnf GetCampaignResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf collectionScheme
+      `Prelude.seq` Prelude.rnf compression
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataExtraDimensions
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf diagnosticsMode
+      `Prelude.seq` Prelude.rnf expiryTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf postTriggerCollectionDuration
+      `Prelude.seq` Prelude.rnf priority
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+      `Prelude.seq` Prelude.rnf signalsToCollect
+      `Prelude.seq` Prelude.rnf spoolingMode
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf targetArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/GetDecoderManifest.hs b/gen/Amazonka/IoTFleetWise/GetDecoderManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetDecoderManifest.hs
@@ -0,0 +1,269 @@
+{-# 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.IoTFleetWise.GetDecoderManifest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a created decoder manifest.
+module Amazonka.IoTFleetWise.GetDecoderManifest
+  ( -- * Creating a Request
+    GetDecoderManifest (..),
+    newGetDecoderManifest,
+
+    -- * Request Lenses
+    getDecoderManifest_name,
+
+    -- * Destructuring the Response
+    GetDecoderManifestResponse (..),
+    newGetDecoderManifestResponse,
+
+    -- * Response Lenses
+    getDecoderManifestResponse_description,
+    getDecoderManifestResponse_modelManifestArn,
+    getDecoderManifestResponse_status,
+    getDecoderManifestResponse_httpStatus,
+    getDecoderManifestResponse_name,
+    getDecoderManifestResponse_arn,
+    getDecoderManifestResponse_creationTime,
+    getDecoderManifestResponse_lastModificationTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDecoderManifest' smart constructor.
+data GetDecoderManifest = GetDecoderManifest'
+  { -- | The name of the decoder manifest to retrieve information about.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDecoderManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDecoderManifest_name' - The name of the decoder manifest to retrieve information about.
+newGetDecoderManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  GetDecoderManifest
+newGetDecoderManifest pName_ =
+  GetDecoderManifest' {name = pName_}
+
+-- | The name of the decoder manifest to retrieve information about.
+getDecoderManifest_name :: Lens.Lens' GetDecoderManifest Prelude.Text
+getDecoderManifest_name = Lens.lens (\GetDecoderManifest' {name} -> name) (\s@GetDecoderManifest' {} a -> s {name = a} :: GetDecoderManifest)
+
+instance Core.AWSRequest GetDecoderManifest where
+  type
+    AWSResponse GetDecoderManifest =
+      GetDecoderManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDecoderManifestResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "modelManifestArn")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "lastModificationTime")
+      )
+
+instance Prelude.Hashable GetDecoderManifest where
+  hashWithSalt _salt GetDecoderManifest' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GetDecoderManifest where
+  rnf GetDecoderManifest' {..} = Prelude.rnf name
+
+instance Data.ToHeaders GetDecoderManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetDecoderManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDecoderManifest where
+  toJSON GetDecoderManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath GetDecoderManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetDecoderManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDecoderManifestResponse' smart constructor.
+data GetDecoderManifestResponse = GetDecoderManifestResponse'
+  { -- | A brief description of the decoder manifest.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a vehicle model (model manifest) associated with the decoder
+    -- manifest.
+    modelManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the decoder manifest. If the status is @ACTIVE@, the
+    -- decoder manifest can\'t be edited. If the status is marked @DRAFT@, you
+    -- can edit the decoder manifest.
+    status :: Prelude.Maybe ManifestStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the decoder manifest.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the decoder manifest.
+    arn :: Prelude.Text,
+    -- | The time the decoder manifest was created in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The time the decoder manifest was last updated in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time).
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDecoderManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDecoderManifestResponse_description' - A brief description of the decoder manifest.
+--
+-- 'modelManifestArn', 'getDecoderManifestResponse_modelManifestArn' - The ARN of a vehicle model (model manifest) associated with the decoder
+-- manifest.
+--
+-- 'status', 'getDecoderManifestResponse_status' - The state of the decoder manifest. If the status is @ACTIVE@, the
+-- decoder manifest can\'t be edited. If the status is marked @DRAFT@, you
+-- can edit the decoder manifest.
+--
+-- 'httpStatus', 'getDecoderManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'getDecoderManifestResponse_name' - The name of the decoder manifest.
+--
+-- 'arn', 'getDecoderManifestResponse_arn' - The Amazon Resource Name (ARN) of the decoder manifest.
+--
+-- 'creationTime', 'getDecoderManifestResponse_creationTime' - The time the decoder manifest was created in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+--
+-- 'lastModificationTime', 'getDecoderManifestResponse_lastModificationTime' - The time the decoder manifest was last updated in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+newGetDecoderManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  GetDecoderManifestResponse
+newGetDecoderManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_
+  pCreationTime_
+  pLastModificationTime_ =
+    GetDecoderManifestResponse'
+      { description =
+          Prelude.Nothing,
+        modelManifestArn = Prelude.Nothing,
+        status = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        name = pName_,
+        arn = pArn_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | A brief description of the decoder manifest.
+getDecoderManifestResponse_description :: Lens.Lens' GetDecoderManifestResponse (Prelude.Maybe Prelude.Text)
+getDecoderManifestResponse_description = Lens.lens (\GetDecoderManifestResponse' {description} -> description) (\s@GetDecoderManifestResponse' {} a -> s {description = a} :: GetDecoderManifestResponse)
+
+-- | The ARN of a vehicle model (model manifest) associated with the decoder
+-- manifest.
+getDecoderManifestResponse_modelManifestArn :: Lens.Lens' GetDecoderManifestResponse (Prelude.Maybe Prelude.Text)
+getDecoderManifestResponse_modelManifestArn = Lens.lens (\GetDecoderManifestResponse' {modelManifestArn} -> modelManifestArn) (\s@GetDecoderManifestResponse' {} a -> s {modelManifestArn = a} :: GetDecoderManifestResponse)
+
+-- | The state of the decoder manifest. If the status is @ACTIVE@, the
+-- decoder manifest can\'t be edited. If the status is marked @DRAFT@, you
+-- can edit the decoder manifest.
+getDecoderManifestResponse_status :: Lens.Lens' GetDecoderManifestResponse (Prelude.Maybe ManifestStatus)
+getDecoderManifestResponse_status = Lens.lens (\GetDecoderManifestResponse' {status} -> status) (\s@GetDecoderManifestResponse' {} a -> s {status = a} :: GetDecoderManifestResponse)
+
+-- | The response's http status code.
+getDecoderManifestResponse_httpStatus :: Lens.Lens' GetDecoderManifestResponse Prelude.Int
+getDecoderManifestResponse_httpStatus = Lens.lens (\GetDecoderManifestResponse' {httpStatus} -> httpStatus) (\s@GetDecoderManifestResponse' {} a -> s {httpStatus = a} :: GetDecoderManifestResponse)
+
+-- | The name of the decoder manifest.
+getDecoderManifestResponse_name :: Lens.Lens' GetDecoderManifestResponse Prelude.Text
+getDecoderManifestResponse_name = Lens.lens (\GetDecoderManifestResponse' {name} -> name) (\s@GetDecoderManifestResponse' {} a -> s {name = a} :: GetDecoderManifestResponse)
+
+-- | The Amazon Resource Name (ARN) of the decoder manifest.
+getDecoderManifestResponse_arn :: Lens.Lens' GetDecoderManifestResponse Prelude.Text
+getDecoderManifestResponse_arn = Lens.lens (\GetDecoderManifestResponse' {arn} -> arn) (\s@GetDecoderManifestResponse' {} a -> s {arn = a} :: GetDecoderManifestResponse)
+
+-- | The time the decoder manifest was created in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+getDecoderManifestResponse_creationTime :: Lens.Lens' GetDecoderManifestResponse Prelude.UTCTime
+getDecoderManifestResponse_creationTime = Lens.lens (\GetDecoderManifestResponse' {creationTime} -> creationTime) (\s@GetDecoderManifestResponse' {} a -> s {creationTime = a} :: GetDecoderManifestResponse) Prelude.. Data._Time
+
+-- | The time the decoder manifest was last updated in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+getDecoderManifestResponse_lastModificationTime :: Lens.Lens' GetDecoderManifestResponse Prelude.UTCTime
+getDecoderManifestResponse_lastModificationTime = Lens.lens (\GetDecoderManifestResponse' {lastModificationTime} -> lastModificationTime) (\s@GetDecoderManifestResponse' {} a -> s {lastModificationTime = a} :: GetDecoderManifestResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetDecoderManifestResponse where
+  rnf GetDecoderManifestResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/GetFleet.hs b/gen/Amazonka/IoTFleetWise/GetFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetFleet.hs
@@ -0,0 +1,248 @@
+{-# 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.IoTFleetWise.GetFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a fleet.
+module Amazonka.IoTFleetWise.GetFleet
+  ( -- * Creating a Request
+    GetFleet (..),
+    newGetFleet,
+
+    -- * Request Lenses
+    getFleet_fleetId,
+
+    -- * Destructuring the Response
+    GetFleetResponse (..),
+    newGetFleetResponse,
+
+    -- * Response Lenses
+    getFleetResponse_description,
+    getFleetResponse_httpStatus,
+    getFleetResponse_id,
+    getFleetResponse_arn,
+    getFleetResponse_signalCatalogArn,
+    getFleetResponse_creationTime,
+    getFleetResponse_lastModificationTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFleet' smart constructor.
+data GetFleet = GetFleet'
+  { -- | The ID of the fleet to retrieve information about.
+    fleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetId', 'getFleet_fleetId' - The ID of the fleet to retrieve information about.
+newGetFleet ::
+  -- | 'fleetId'
+  Prelude.Text ->
+  GetFleet
+newGetFleet pFleetId_ =
+  GetFleet' {fleetId = pFleetId_}
+
+-- | The ID of the fleet to retrieve information about.
+getFleet_fleetId :: Lens.Lens' GetFleet Prelude.Text
+getFleet_fleetId = Lens.lens (\GetFleet' {fleetId} -> fleetId) (\s@GetFleet' {} a -> s {fleetId = a} :: GetFleet)
+
+instance Core.AWSRequest GetFleet where
+  type AWSResponse GetFleet = GetFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFleetResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "id")
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "signalCatalogArn")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "lastModificationTime")
+      )
+
+instance Prelude.Hashable GetFleet where
+  hashWithSalt _salt GetFleet' {..} =
+    _salt `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData GetFleet where
+  rnf GetFleet' {..} = Prelude.rnf fleetId
+
+instance Data.ToHeaders GetFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetFleet where
+  toJSON GetFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("fleetId" Data..= fleetId)]
+      )
+
+instance Data.ToPath GetFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFleetResponse' smart constructor.
+data GetFleetResponse = GetFleetResponse'
+  { -- | A brief description of the fleet.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the fleet.
+    id :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the fleet.
+    arn :: Prelude.Text,
+    -- | The ARN of a signal catalog associated with the fleet.
+    signalCatalogArn :: Prelude.Text,
+    -- | The time the fleet was created in seconds since epoch (January 1, 1970
+    -- at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The time the fleet was last updated, in seconds since epoch (January 1,
+    -- 1970 at midnight UTC time).
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getFleetResponse_description' - A brief description of the fleet.
+--
+-- 'httpStatus', 'getFleetResponse_httpStatus' - The response's http status code.
+--
+-- 'id', 'getFleetResponse_id' - The ID of the fleet.
+--
+-- 'arn', 'getFleetResponse_arn' - The Amazon Resource Name (ARN) of the fleet.
+--
+-- 'signalCatalogArn', 'getFleetResponse_signalCatalogArn' - The ARN of a signal catalog associated with the fleet.
+--
+-- 'creationTime', 'getFleetResponse_creationTime' - The time the fleet was created in seconds since epoch (January 1, 1970
+-- at midnight UTC time).
+--
+-- 'lastModificationTime', 'getFleetResponse_lastModificationTime' - The time the fleet was last updated, in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+newGetFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'signalCatalogArn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  GetFleetResponse
+newGetFleetResponse
+  pHttpStatus_
+  pId_
+  pArn_
+  pSignalCatalogArn_
+  pCreationTime_
+  pLastModificationTime_ =
+    GetFleetResponse'
+      { description = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        id = pId_,
+        arn = pArn_,
+        signalCatalogArn = pSignalCatalogArn_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | A brief description of the fleet.
+getFleetResponse_description :: Lens.Lens' GetFleetResponse (Prelude.Maybe Prelude.Text)
+getFleetResponse_description = Lens.lens (\GetFleetResponse' {description} -> description) (\s@GetFleetResponse' {} a -> s {description = a} :: GetFleetResponse)
+
+-- | The response's http status code.
+getFleetResponse_httpStatus :: Lens.Lens' GetFleetResponse Prelude.Int
+getFleetResponse_httpStatus = Lens.lens (\GetFleetResponse' {httpStatus} -> httpStatus) (\s@GetFleetResponse' {} a -> s {httpStatus = a} :: GetFleetResponse)
+
+-- | The ID of the fleet.
+getFleetResponse_id :: Lens.Lens' GetFleetResponse Prelude.Text
+getFleetResponse_id = Lens.lens (\GetFleetResponse' {id} -> id) (\s@GetFleetResponse' {} a -> s {id = a} :: GetFleetResponse)
+
+-- | The Amazon Resource Name (ARN) of the fleet.
+getFleetResponse_arn :: Lens.Lens' GetFleetResponse Prelude.Text
+getFleetResponse_arn = Lens.lens (\GetFleetResponse' {arn} -> arn) (\s@GetFleetResponse' {} a -> s {arn = a} :: GetFleetResponse)
+
+-- | The ARN of a signal catalog associated with the fleet.
+getFleetResponse_signalCatalogArn :: Lens.Lens' GetFleetResponse Prelude.Text
+getFleetResponse_signalCatalogArn = Lens.lens (\GetFleetResponse' {signalCatalogArn} -> signalCatalogArn) (\s@GetFleetResponse' {} a -> s {signalCatalogArn = a} :: GetFleetResponse)
+
+-- | The time the fleet was created in seconds since epoch (January 1, 1970
+-- at midnight UTC time).
+getFleetResponse_creationTime :: Lens.Lens' GetFleetResponse Prelude.UTCTime
+getFleetResponse_creationTime = Lens.lens (\GetFleetResponse' {creationTime} -> creationTime) (\s@GetFleetResponse' {} a -> s {creationTime = a} :: GetFleetResponse) Prelude.. Data._Time
+
+-- | The time the fleet was last updated, in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+getFleetResponse_lastModificationTime :: Lens.Lens' GetFleetResponse Prelude.UTCTime
+getFleetResponse_lastModificationTime = Lens.lens (\GetFleetResponse' {lastModificationTime} -> lastModificationTime) (\s@GetFleetResponse' {} a -> s {lastModificationTime = a} :: GetFleetResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetFleetResponse where
+  rnf GetFleetResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/GetLoggingOptions.hs b/gen/Amazonka/IoTFleetWise/GetLoggingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetLoggingOptions.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.IoTFleetWise.GetLoggingOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the logging options.
+module Amazonka.IoTFleetWise.GetLoggingOptions
+  ( -- * Creating a Request
+    GetLoggingOptions (..),
+    newGetLoggingOptions,
+
+    -- * Destructuring the Response
+    GetLoggingOptionsResponse (..),
+    newGetLoggingOptionsResponse,
+
+    -- * Response Lenses
+    getLoggingOptionsResponse_httpStatus,
+    getLoggingOptionsResponse_cloudWatchLogDelivery,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLoggingOptions' smart constructor.
+data GetLoggingOptions = GetLoggingOptions'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLoggingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetLoggingOptions ::
+  GetLoggingOptions
+newGetLoggingOptions = GetLoggingOptions'
+
+instance Core.AWSRequest GetLoggingOptions where
+  type
+    AWSResponse GetLoggingOptions =
+      GetLoggingOptionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetLoggingOptionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "cloudWatchLogDelivery")
+      )
+
+instance Prelude.Hashable GetLoggingOptions where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetLoggingOptions where
+  rnf _ = ()
+
+instance Data.ToHeaders GetLoggingOptions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetLoggingOptions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetLoggingOptions where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetLoggingOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetLoggingOptions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetLoggingOptionsResponse' smart constructor.
+data GetLoggingOptionsResponse = GetLoggingOptionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Returns information about log delivery to Amazon CloudWatch Logs.
+    cloudWatchLogDelivery :: CloudWatchLogDeliveryOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLoggingOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getLoggingOptionsResponse_httpStatus' - The response's http status code.
+--
+-- 'cloudWatchLogDelivery', 'getLoggingOptionsResponse_cloudWatchLogDelivery' - Returns information about log delivery to Amazon CloudWatch Logs.
+newGetLoggingOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'cloudWatchLogDelivery'
+  CloudWatchLogDeliveryOptions ->
+  GetLoggingOptionsResponse
+newGetLoggingOptionsResponse
+  pHttpStatus_
+  pCloudWatchLogDelivery_ =
+    GetLoggingOptionsResponse'
+      { httpStatus =
+          pHttpStatus_,
+        cloudWatchLogDelivery = pCloudWatchLogDelivery_
+      }
+
+-- | The response's http status code.
+getLoggingOptionsResponse_httpStatus :: Lens.Lens' GetLoggingOptionsResponse Prelude.Int
+getLoggingOptionsResponse_httpStatus = Lens.lens (\GetLoggingOptionsResponse' {httpStatus} -> httpStatus) (\s@GetLoggingOptionsResponse' {} a -> s {httpStatus = a} :: GetLoggingOptionsResponse)
+
+-- | Returns information about log delivery to Amazon CloudWatch Logs.
+getLoggingOptionsResponse_cloudWatchLogDelivery :: Lens.Lens' GetLoggingOptionsResponse CloudWatchLogDeliveryOptions
+getLoggingOptionsResponse_cloudWatchLogDelivery = Lens.lens (\GetLoggingOptionsResponse' {cloudWatchLogDelivery} -> cloudWatchLogDelivery) (\s@GetLoggingOptionsResponse' {} a -> s {cloudWatchLogDelivery = a} :: GetLoggingOptionsResponse)
+
+instance Prelude.NFData GetLoggingOptionsResponse where
+  rnf GetLoggingOptionsResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf cloudWatchLogDelivery
diff --git a/gen/Amazonka/IoTFleetWise/GetModelManifest.hs b/gen/Amazonka/IoTFleetWise/GetModelManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetModelManifest.hs
@@ -0,0 +1,263 @@
+{-# 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.IoTFleetWise.GetModelManifest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a vehicle model (model manifest).
+module Amazonka.IoTFleetWise.GetModelManifest
+  ( -- * Creating a Request
+    GetModelManifest (..),
+    newGetModelManifest,
+
+    -- * Request Lenses
+    getModelManifest_name,
+
+    -- * Destructuring the Response
+    GetModelManifestResponse (..),
+    newGetModelManifestResponse,
+
+    -- * Response Lenses
+    getModelManifestResponse_description,
+    getModelManifestResponse_signalCatalogArn,
+    getModelManifestResponse_status,
+    getModelManifestResponse_httpStatus,
+    getModelManifestResponse_name,
+    getModelManifestResponse_arn,
+    getModelManifestResponse_creationTime,
+    getModelManifestResponse_lastModificationTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetModelManifest' smart constructor.
+data GetModelManifest = GetModelManifest'
+  { -- | The name of the vehicle model to retrieve information about.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModelManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getModelManifest_name' - The name of the vehicle model to retrieve information about.
+newGetModelManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  GetModelManifest
+newGetModelManifest pName_ =
+  GetModelManifest' {name = pName_}
+
+-- | The name of the vehicle model to retrieve information about.
+getModelManifest_name :: Lens.Lens' GetModelManifest Prelude.Text
+getModelManifest_name = Lens.lens (\GetModelManifest' {name} -> name) (\s@GetModelManifest' {} a -> s {name = a} :: GetModelManifest)
+
+instance Core.AWSRequest GetModelManifest where
+  type
+    AWSResponse GetModelManifest =
+      GetModelManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetModelManifestResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "signalCatalogArn")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "lastModificationTime")
+      )
+
+instance Prelude.Hashable GetModelManifest where
+  hashWithSalt _salt GetModelManifest' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GetModelManifest where
+  rnf GetModelManifest' {..} = Prelude.rnf name
+
+instance Data.ToHeaders GetModelManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetModelManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetModelManifest where
+  toJSON GetModelManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath GetModelManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetModelManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetModelManifestResponse' smart constructor.
+data GetModelManifestResponse = GetModelManifestResponse'
+  { -- | A brief description of the vehicle model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the signal catalog associated with the vehicle model.
+    signalCatalogArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+    -- model can\'t be edited. You can edit the vehicle model if the status is
+    -- marked @DRAFT@.
+    status :: Prelude.Maybe ManifestStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the vehicle model.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the vehicle model.
+    arn :: Prelude.Text,
+    -- | The time the vehicle model was created, in seconds since epoch (January
+    -- 1, 1970 at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The last time the vehicle model was modified.
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetModelManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getModelManifestResponse_description' - A brief description of the vehicle model.
+--
+-- 'signalCatalogArn', 'getModelManifestResponse_signalCatalogArn' - The ARN of the signal catalog associated with the vehicle model.
+--
+-- 'status', 'getModelManifestResponse_status' - The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+-- model can\'t be edited. You can edit the vehicle model if the status is
+-- marked @DRAFT@.
+--
+-- 'httpStatus', 'getModelManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'getModelManifestResponse_name' - The name of the vehicle model.
+--
+-- 'arn', 'getModelManifestResponse_arn' - The Amazon Resource Name (ARN) of the vehicle model.
+--
+-- 'creationTime', 'getModelManifestResponse_creationTime' - The time the vehicle model was created, in seconds since epoch (January
+-- 1, 1970 at midnight UTC time).
+--
+-- 'lastModificationTime', 'getModelManifestResponse_lastModificationTime' - The last time the vehicle model was modified.
+newGetModelManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  GetModelManifestResponse
+newGetModelManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_
+  pCreationTime_
+  pLastModificationTime_ =
+    GetModelManifestResponse'
+      { description =
+          Prelude.Nothing,
+        signalCatalogArn = Prelude.Nothing,
+        status = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        name = pName_,
+        arn = pArn_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | A brief description of the vehicle model.
+getModelManifestResponse_description :: Lens.Lens' GetModelManifestResponse (Prelude.Maybe Prelude.Text)
+getModelManifestResponse_description = Lens.lens (\GetModelManifestResponse' {description} -> description) (\s@GetModelManifestResponse' {} a -> s {description = a} :: GetModelManifestResponse)
+
+-- | The ARN of the signal catalog associated with the vehicle model.
+getModelManifestResponse_signalCatalogArn :: Lens.Lens' GetModelManifestResponse (Prelude.Maybe Prelude.Text)
+getModelManifestResponse_signalCatalogArn = Lens.lens (\GetModelManifestResponse' {signalCatalogArn} -> signalCatalogArn) (\s@GetModelManifestResponse' {} a -> s {signalCatalogArn = a} :: GetModelManifestResponse)
+
+-- | The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+-- model can\'t be edited. You can edit the vehicle model if the status is
+-- marked @DRAFT@.
+getModelManifestResponse_status :: Lens.Lens' GetModelManifestResponse (Prelude.Maybe ManifestStatus)
+getModelManifestResponse_status = Lens.lens (\GetModelManifestResponse' {status} -> status) (\s@GetModelManifestResponse' {} a -> s {status = a} :: GetModelManifestResponse)
+
+-- | The response's http status code.
+getModelManifestResponse_httpStatus :: Lens.Lens' GetModelManifestResponse Prelude.Int
+getModelManifestResponse_httpStatus = Lens.lens (\GetModelManifestResponse' {httpStatus} -> httpStatus) (\s@GetModelManifestResponse' {} a -> s {httpStatus = a} :: GetModelManifestResponse)
+
+-- | The name of the vehicle model.
+getModelManifestResponse_name :: Lens.Lens' GetModelManifestResponse Prelude.Text
+getModelManifestResponse_name = Lens.lens (\GetModelManifestResponse' {name} -> name) (\s@GetModelManifestResponse' {} a -> s {name = a} :: GetModelManifestResponse)
+
+-- | The Amazon Resource Name (ARN) of the vehicle model.
+getModelManifestResponse_arn :: Lens.Lens' GetModelManifestResponse Prelude.Text
+getModelManifestResponse_arn = Lens.lens (\GetModelManifestResponse' {arn} -> arn) (\s@GetModelManifestResponse' {} a -> s {arn = a} :: GetModelManifestResponse)
+
+-- | The time the vehicle model was created, in seconds since epoch (January
+-- 1, 1970 at midnight UTC time).
+getModelManifestResponse_creationTime :: Lens.Lens' GetModelManifestResponse Prelude.UTCTime
+getModelManifestResponse_creationTime = Lens.lens (\GetModelManifestResponse' {creationTime} -> creationTime) (\s@GetModelManifestResponse' {} a -> s {creationTime = a} :: GetModelManifestResponse) Prelude.. Data._Time
+
+-- | The last time the vehicle model was modified.
+getModelManifestResponse_lastModificationTime :: Lens.Lens' GetModelManifestResponse Prelude.UTCTime
+getModelManifestResponse_lastModificationTime = Lens.lens (\GetModelManifestResponse' {lastModificationTime} -> lastModificationTime) (\s@GetModelManifestResponse' {} a -> s {lastModificationTime = a} :: GetModelManifestResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetModelManifestResponse where
+  rnf GetModelManifestResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/GetRegisterAccountStatus.hs b/gen/Amazonka/IoTFleetWise/GetRegisterAccountStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetRegisterAccountStatus.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.IoTFleetWise.GetRegisterAccountStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the status of registering your Amazon Web
+-- Services account, IAM, and Amazon Timestream resources so that Amazon
+-- Web Services IoT FleetWise can transfer your vehicle data to the Amazon
+-- Web Services Cloud.
+--
+-- For more information, including step-by-step procedures, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/setting-up.html Setting up Amazon Web Services IoT FleetWise>.
+--
+-- This API operation doesn\'t require input parameters.
+module Amazonka.IoTFleetWise.GetRegisterAccountStatus
+  ( -- * Creating a Request
+    GetRegisterAccountStatus (..),
+    newGetRegisterAccountStatus,
+
+    -- * Destructuring the Response
+    GetRegisterAccountStatusResponse (..),
+    newGetRegisterAccountStatusResponse,
+
+    -- * Response Lenses
+    getRegisterAccountStatusResponse_httpStatus,
+    getRegisterAccountStatusResponse_customerAccountId,
+    getRegisterAccountStatusResponse_accountStatus,
+    getRegisterAccountStatusResponse_timestreamRegistrationResponse,
+    getRegisterAccountStatusResponse_iamRegistrationResponse,
+    getRegisterAccountStatusResponse_creationTime,
+    getRegisterAccountStatusResponse_lastModificationTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRegisterAccountStatus' smart constructor.
+data GetRegisterAccountStatus = GetRegisterAccountStatus'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRegisterAccountStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetRegisterAccountStatus ::
+  GetRegisterAccountStatus
+newGetRegisterAccountStatus =
+  GetRegisterAccountStatus'
+
+instance Core.AWSRequest GetRegisterAccountStatus where
+  type
+    AWSResponse GetRegisterAccountStatus =
+      GetRegisterAccountStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRegisterAccountStatusResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "customerAccountId")
+            Prelude.<*> (x Data..:> "accountStatus")
+            Prelude.<*> (x Data..:> "timestreamRegistrationResponse")
+            Prelude.<*> (x Data..:> "iamRegistrationResponse")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "lastModificationTime")
+      )
+
+instance Prelude.Hashable GetRegisterAccountStatus where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetRegisterAccountStatus where
+  rnf _ = ()
+
+instance Data.ToHeaders GetRegisterAccountStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetRegisterAccountStatus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetRegisterAccountStatus where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetRegisterAccountStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetRegisterAccountStatus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRegisterAccountStatusResponse' smart constructor.
+data GetRegisterAccountStatusResponse = GetRegisterAccountStatusResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The unique ID of the Amazon Web Services account, provided at account
+    -- creation.
+    customerAccountId :: Prelude.Text,
+    -- | The status of registering your account and resources. The status can be
+    -- one of:
+    --
+    -- -   @REGISTRATION_SUCCESS@ - The Amazon Web Services resource is
+    --     successfully registered.
+    --
+    -- -   @REGISTRATION_PENDING@ - Amazon Web Services IoT FleetWise is
+    --     processing the registration request. This process takes
+    --     approximately five minutes to complete.
+    --
+    -- -   @REGISTRATION_FAILURE@ - Amazon Web Services IoT FleetWise can\'t
+    --     register the AWS resource. Try again later.
+    accountStatus :: RegistrationStatus,
+    -- | Information about the registered Amazon Timestream resources or errors,
+    -- if any.
+    timestreamRegistrationResponse :: TimestreamRegistrationResponse,
+    -- | Information about the registered IAM resources or errors, if any.
+    iamRegistrationResponse :: IamRegistrationResponse,
+    -- | The time the account was registered, in seconds since epoch (January 1,
+    -- 1970 at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The time this registration was last updated, in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time).
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRegisterAccountStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getRegisterAccountStatusResponse_httpStatus' - The response's http status code.
+--
+-- 'customerAccountId', 'getRegisterAccountStatusResponse_customerAccountId' - The unique ID of the Amazon Web Services account, provided at account
+-- creation.
+--
+-- 'accountStatus', 'getRegisterAccountStatusResponse_accountStatus' - The status of registering your account and resources. The status can be
+-- one of:
+--
+-- -   @REGISTRATION_SUCCESS@ - The Amazon Web Services resource is
+--     successfully registered.
+--
+-- -   @REGISTRATION_PENDING@ - Amazon Web Services IoT FleetWise is
+--     processing the registration request. This process takes
+--     approximately five minutes to complete.
+--
+-- -   @REGISTRATION_FAILURE@ - Amazon Web Services IoT FleetWise can\'t
+--     register the AWS resource. Try again later.
+--
+-- 'timestreamRegistrationResponse', 'getRegisterAccountStatusResponse_timestreamRegistrationResponse' - Information about the registered Amazon Timestream resources or errors,
+-- if any.
+--
+-- 'iamRegistrationResponse', 'getRegisterAccountStatusResponse_iamRegistrationResponse' - Information about the registered IAM resources or errors, if any.
+--
+-- 'creationTime', 'getRegisterAccountStatusResponse_creationTime' - The time the account was registered, in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+--
+-- 'lastModificationTime', 'getRegisterAccountStatusResponse_lastModificationTime' - The time this registration was last updated, in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+newGetRegisterAccountStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'customerAccountId'
+  Prelude.Text ->
+  -- | 'accountStatus'
+  RegistrationStatus ->
+  -- | 'timestreamRegistrationResponse'
+  TimestreamRegistrationResponse ->
+  -- | 'iamRegistrationResponse'
+  IamRegistrationResponse ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  GetRegisterAccountStatusResponse
+newGetRegisterAccountStatusResponse
+  pHttpStatus_
+  pCustomerAccountId_
+  pAccountStatus_
+  pTimestreamRegistrationResponse_
+  pIamRegistrationResponse_
+  pCreationTime_
+  pLastModificationTime_ =
+    GetRegisterAccountStatusResponse'
+      { httpStatus =
+          pHttpStatus_,
+        customerAccountId = pCustomerAccountId_,
+        accountStatus = pAccountStatus_,
+        timestreamRegistrationResponse =
+          pTimestreamRegistrationResponse_,
+        iamRegistrationResponse =
+          pIamRegistrationResponse_,
+        creationTime =
+          Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time
+            Lens.# pLastModificationTime_
+      }
+
+-- | The response's http status code.
+getRegisterAccountStatusResponse_httpStatus :: Lens.Lens' GetRegisterAccountStatusResponse Prelude.Int
+getRegisterAccountStatusResponse_httpStatus = Lens.lens (\GetRegisterAccountStatusResponse' {httpStatus} -> httpStatus) (\s@GetRegisterAccountStatusResponse' {} a -> s {httpStatus = a} :: GetRegisterAccountStatusResponse)
+
+-- | The unique ID of the Amazon Web Services account, provided at account
+-- creation.
+getRegisterAccountStatusResponse_customerAccountId :: Lens.Lens' GetRegisterAccountStatusResponse Prelude.Text
+getRegisterAccountStatusResponse_customerAccountId = Lens.lens (\GetRegisterAccountStatusResponse' {customerAccountId} -> customerAccountId) (\s@GetRegisterAccountStatusResponse' {} a -> s {customerAccountId = a} :: GetRegisterAccountStatusResponse)
+
+-- | The status of registering your account and resources. The status can be
+-- one of:
+--
+-- -   @REGISTRATION_SUCCESS@ - The Amazon Web Services resource is
+--     successfully registered.
+--
+-- -   @REGISTRATION_PENDING@ - Amazon Web Services IoT FleetWise is
+--     processing the registration request. This process takes
+--     approximately five minutes to complete.
+--
+-- -   @REGISTRATION_FAILURE@ - Amazon Web Services IoT FleetWise can\'t
+--     register the AWS resource. Try again later.
+getRegisterAccountStatusResponse_accountStatus :: Lens.Lens' GetRegisterAccountStatusResponse RegistrationStatus
+getRegisterAccountStatusResponse_accountStatus = Lens.lens (\GetRegisterAccountStatusResponse' {accountStatus} -> accountStatus) (\s@GetRegisterAccountStatusResponse' {} a -> s {accountStatus = a} :: GetRegisterAccountStatusResponse)
+
+-- | Information about the registered Amazon Timestream resources or errors,
+-- if any.
+getRegisterAccountStatusResponse_timestreamRegistrationResponse :: Lens.Lens' GetRegisterAccountStatusResponse TimestreamRegistrationResponse
+getRegisterAccountStatusResponse_timestreamRegistrationResponse = Lens.lens (\GetRegisterAccountStatusResponse' {timestreamRegistrationResponse} -> timestreamRegistrationResponse) (\s@GetRegisterAccountStatusResponse' {} a -> s {timestreamRegistrationResponse = a} :: GetRegisterAccountStatusResponse)
+
+-- | Information about the registered IAM resources or errors, if any.
+getRegisterAccountStatusResponse_iamRegistrationResponse :: Lens.Lens' GetRegisterAccountStatusResponse IamRegistrationResponse
+getRegisterAccountStatusResponse_iamRegistrationResponse = Lens.lens (\GetRegisterAccountStatusResponse' {iamRegistrationResponse} -> iamRegistrationResponse) (\s@GetRegisterAccountStatusResponse' {} a -> s {iamRegistrationResponse = a} :: GetRegisterAccountStatusResponse)
+
+-- | The time the account was registered, in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+getRegisterAccountStatusResponse_creationTime :: Lens.Lens' GetRegisterAccountStatusResponse Prelude.UTCTime
+getRegisterAccountStatusResponse_creationTime = Lens.lens (\GetRegisterAccountStatusResponse' {creationTime} -> creationTime) (\s@GetRegisterAccountStatusResponse' {} a -> s {creationTime = a} :: GetRegisterAccountStatusResponse) Prelude.. Data._Time
+
+-- | The time this registration was last updated, in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+getRegisterAccountStatusResponse_lastModificationTime :: Lens.Lens' GetRegisterAccountStatusResponse Prelude.UTCTime
+getRegisterAccountStatusResponse_lastModificationTime = Lens.lens (\GetRegisterAccountStatusResponse' {lastModificationTime} -> lastModificationTime) (\s@GetRegisterAccountStatusResponse' {} a -> s {lastModificationTime = a} :: GetRegisterAccountStatusResponse) Prelude.. Data._Time
+
+instance
+  Prelude.NFData
+    GetRegisterAccountStatusResponse
+  where
+  rnf GetRegisterAccountStatusResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf customerAccountId
+      `Prelude.seq` Prelude.rnf accountStatus
+      `Prelude.seq` Prelude.rnf timestreamRegistrationResponse
+      `Prelude.seq` Prelude.rnf iamRegistrationResponse
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/GetSignalCatalog.hs b/gen/Amazonka/IoTFleetWise/GetSignalCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetSignalCatalog.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.IoTFleetWise.GetSignalCatalog
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a signal catalog.
+module Amazonka.IoTFleetWise.GetSignalCatalog
+  ( -- * Creating a Request
+    GetSignalCatalog (..),
+    newGetSignalCatalog,
+
+    -- * Request Lenses
+    getSignalCatalog_name,
+
+    -- * Destructuring the Response
+    GetSignalCatalogResponse (..),
+    newGetSignalCatalogResponse,
+
+    -- * Response Lenses
+    getSignalCatalogResponse_description,
+    getSignalCatalogResponse_nodeCounts,
+    getSignalCatalogResponse_httpStatus,
+    getSignalCatalogResponse_name,
+    getSignalCatalogResponse_arn,
+    getSignalCatalogResponse_creationTime,
+    getSignalCatalogResponse_lastModificationTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSignalCatalog' smart constructor.
+data GetSignalCatalog = GetSignalCatalog'
+  { -- | The name of the signal catalog to retrieve information about.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSignalCatalog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getSignalCatalog_name' - The name of the signal catalog to retrieve information about.
+newGetSignalCatalog ::
+  -- | 'name'
+  Prelude.Text ->
+  GetSignalCatalog
+newGetSignalCatalog pName_ =
+  GetSignalCatalog' {name = pName_}
+
+-- | The name of the signal catalog to retrieve information about.
+getSignalCatalog_name :: Lens.Lens' GetSignalCatalog Prelude.Text
+getSignalCatalog_name = Lens.lens (\GetSignalCatalog' {name} -> name) (\s@GetSignalCatalog' {} a -> s {name = a} :: GetSignalCatalog)
+
+instance Core.AWSRequest GetSignalCatalog where
+  type
+    AWSResponse GetSignalCatalog =
+      GetSignalCatalogResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSignalCatalogResponse'
+            Prelude.<$> (x Data..?> "description")
+            Prelude.<*> (x Data..?> "nodeCounts")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "lastModificationTime")
+      )
+
+instance Prelude.Hashable GetSignalCatalog where
+  hashWithSalt _salt GetSignalCatalog' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GetSignalCatalog where
+  rnf GetSignalCatalog' {..} = Prelude.rnf name
+
+instance Data.ToHeaders GetSignalCatalog where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetSignalCatalog" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetSignalCatalog where
+  toJSON GetSignalCatalog' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("name" Data..= name)]
+      )
+
+instance Data.ToPath GetSignalCatalog where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSignalCatalog where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSignalCatalogResponse' smart constructor.
+data GetSignalCatalogResponse = GetSignalCatalogResponse'
+  { -- | A brief description of the signal catalog.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The total number of network nodes specified in a signal catalog.
+    nodeCounts :: Prelude.Maybe NodeCounts,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the signal catalog.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the signal catalog.
+    arn :: Prelude.Text,
+    -- | The time the signal catalog was created in seconds since epoch (January
+    -- 1, 1970 at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The last time the signal catalog was modified.
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSignalCatalogResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getSignalCatalogResponse_description' - A brief description of the signal catalog.
+--
+-- 'nodeCounts', 'getSignalCatalogResponse_nodeCounts' - The total number of network nodes specified in a signal catalog.
+--
+-- 'httpStatus', 'getSignalCatalogResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'getSignalCatalogResponse_name' - The name of the signal catalog.
+--
+-- 'arn', 'getSignalCatalogResponse_arn' - The Amazon Resource Name (ARN) of the signal catalog.
+--
+-- 'creationTime', 'getSignalCatalogResponse_creationTime' - The time the signal catalog was created in seconds since epoch (January
+-- 1, 1970 at midnight UTC time).
+--
+-- 'lastModificationTime', 'getSignalCatalogResponse_lastModificationTime' - The last time the signal catalog was modified.
+newGetSignalCatalogResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  GetSignalCatalogResponse
+newGetSignalCatalogResponse
+  pHttpStatus_
+  pName_
+  pArn_
+  pCreationTime_
+  pLastModificationTime_ =
+    GetSignalCatalogResponse'
+      { description =
+          Prelude.Nothing,
+        nodeCounts = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        name = pName_,
+        arn = pArn_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | A brief description of the signal catalog.
+getSignalCatalogResponse_description :: Lens.Lens' GetSignalCatalogResponse (Prelude.Maybe Prelude.Text)
+getSignalCatalogResponse_description = Lens.lens (\GetSignalCatalogResponse' {description} -> description) (\s@GetSignalCatalogResponse' {} a -> s {description = a} :: GetSignalCatalogResponse)
+
+-- | The total number of network nodes specified in a signal catalog.
+getSignalCatalogResponse_nodeCounts :: Lens.Lens' GetSignalCatalogResponse (Prelude.Maybe NodeCounts)
+getSignalCatalogResponse_nodeCounts = Lens.lens (\GetSignalCatalogResponse' {nodeCounts} -> nodeCounts) (\s@GetSignalCatalogResponse' {} a -> s {nodeCounts = a} :: GetSignalCatalogResponse)
+
+-- | The response's http status code.
+getSignalCatalogResponse_httpStatus :: Lens.Lens' GetSignalCatalogResponse Prelude.Int
+getSignalCatalogResponse_httpStatus = Lens.lens (\GetSignalCatalogResponse' {httpStatus} -> httpStatus) (\s@GetSignalCatalogResponse' {} a -> s {httpStatus = a} :: GetSignalCatalogResponse)
+
+-- | The name of the signal catalog.
+getSignalCatalogResponse_name :: Lens.Lens' GetSignalCatalogResponse Prelude.Text
+getSignalCatalogResponse_name = Lens.lens (\GetSignalCatalogResponse' {name} -> name) (\s@GetSignalCatalogResponse' {} a -> s {name = a} :: GetSignalCatalogResponse)
+
+-- | The Amazon Resource Name (ARN) of the signal catalog.
+getSignalCatalogResponse_arn :: Lens.Lens' GetSignalCatalogResponse Prelude.Text
+getSignalCatalogResponse_arn = Lens.lens (\GetSignalCatalogResponse' {arn} -> arn) (\s@GetSignalCatalogResponse' {} a -> s {arn = a} :: GetSignalCatalogResponse)
+
+-- | The time the signal catalog was created in seconds since epoch (January
+-- 1, 1970 at midnight UTC time).
+getSignalCatalogResponse_creationTime :: Lens.Lens' GetSignalCatalogResponse Prelude.UTCTime
+getSignalCatalogResponse_creationTime = Lens.lens (\GetSignalCatalogResponse' {creationTime} -> creationTime) (\s@GetSignalCatalogResponse' {} a -> s {creationTime = a} :: GetSignalCatalogResponse) Prelude.. Data._Time
+
+-- | The last time the signal catalog was modified.
+getSignalCatalogResponse_lastModificationTime :: Lens.Lens' GetSignalCatalogResponse Prelude.UTCTime
+getSignalCatalogResponse_lastModificationTime = Lens.lens (\GetSignalCatalogResponse' {lastModificationTime} -> lastModificationTime) (\s@GetSignalCatalogResponse' {} a -> s {lastModificationTime = a} :: GetSignalCatalogResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetSignalCatalogResponse where
+  rnf GetSignalCatalogResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf nodeCounts
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/GetVehicle.hs b/gen/Amazonka/IoTFleetWise/GetVehicle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetVehicle.hs
@@ -0,0 +1,252 @@
+{-# 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.IoTFleetWise.GetVehicle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a vehicle.
+module Amazonka.IoTFleetWise.GetVehicle
+  ( -- * Creating a Request
+    GetVehicle (..),
+    newGetVehicle,
+
+    -- * Request Lenses
+    getVehicle_vehicleName,
+
+    -- * Destructuring the Response
+    GetVehicleResponse (..),
+    newGetVehicleResponse,
+
+    -- * Response Lenses
+    getVehicleResponse_arn,
+    getVehicleResponse_attributes,
+    getVehicleResponse_creationTime,
+    getVehicleResponse_decoderManifestArn,
+    getVehicleResponse_lastModificationTime,
+    getVehicleResponse_modelManifestArn,
+    getVehicleResponse_vehicleName,
+    getVehicleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVehicle' smart constructor.
+data GetVehicle = GetVehicle'
+  { -- | The ID of the vehicle to retrieve information about.
+    vehicleName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVehicle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vehicleName', 'getVehicle_vehicleName' - The ID of the vehicle to retrieve information about.
+newGetVehicle ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  GetVehicle
+newGetVehicle pVehicleName_ =
+  GetVehicle' {vehicleName = pVehicleName_}
+
+-- | The ID of the vehicle to retrieve information about.
+getVehicle_vehicleName :: Lens.Lens' GetVehicle Prelude.Text
+getVehicle_vehicleName = Lens.lens (\GetVehicle' {vehicleName} -> vehicleName) (\s@GetVehicle' {} a -> s {vehicleName = a} :: GetVehicle)
+
+instance Core.AWSRequest GetVehicle where
+  type AWSResponse GetVehicle = GetVehicleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetVehicleResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "attributes" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "creationTime")
+            Prelude.<*> (x Data..?> "decoderManifestArn")
+            Prelude.<*> (x Data..?> "lastModificationTime")
+            Prelude.<*> (x Data..?> "modelManifestArn")
+            Prelude.<*> (x Data..?> "vehicleName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetVehicle where
+  hashWithSalt _salt GetVehicle' {..} =
+    _salt `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData GetVehicle where
+  rnf GetVehicle' {..} = Prelude.rnf vehicleName
+
+instance Data.ToHeaders GetVehicle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetVehicle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetVehicle where
+  toJSON GetVehicle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("vehicleName" Data..= vehicleName)]
+      )
+
+instance Data.ToPath GetVehicle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetVehicle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetVehicleResponse' smart constructor.
+data GetVehicleResponse = GetVehicleResponse'
+  { -- | The Amazon Resource Name (ARN) of the vehicle to retrieve information
+    -- about.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Static information about a vehicle in a key-value pair. For example:
+    --
+    -- @\"engineType\"@ : @\"1.3 L R2\"@
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The time the vehicle was created in seconds since epoch (January 1, 1970
+    -- at midnight UTC time).
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of a decoder manifest associated with the vehicle.
+    decoderManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | The time the vehicle was last updated in seconds since epoch (January 1,
+    -- 1970 at midnight UTC time).
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of a vehicle model (model manifest) associated with the vehicle.
+    modelManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the vehicle.
+    vehicleName :: 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 'GetVehicleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getVehicleResponse_arn' - The Amazon Resource Name (ARN) of the vehicle to retrieve information
+-- about.
+--
+-- 'attributes', 'getVehicleResponse_attributes' - Static information about a vehicle in a key-value pair. For example:
+--
+-- @\"engineType\"@ : @\"1.3 L R2\"@
+--
+-- 'creationTime', 'getVehicleResponse_creationTime' - The time the vehicle was created in seconds since epoch (January 1, 1970
+-- at midnight UTC time).
+--
+-- 'decoderManifestArn', 'getVehicleResponse_decoderManifestArn' - The ARN of a decoder manifest associated with the vehicle.
+--
+-- 'lastModificationTime', 'getVehicleResponse_lastModificationTime' - The time the vehicle was last updated in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+--
+-- 'modelManifestArn', 'getVehicleResponse_modelManifestArn' - The ARN of a vehicle model (model manifest) associated with the vehicle.
+--
+-- 'vehicleName', 'getVehicleResponse_vehicleName' - The ID of the vehicle.
+--
+-- 'httpStatus', 'getVehicleResponse_httpStatus' - The response's http status code.
+newGetVehicleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVehicleResponse
+newGetVehicleResponse pHttpStatus_ =
+  GetVehicleResponse'
+    { arn = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      decoderManifestArn = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      modelManifestArn = Prelude.Nothing,
+      vehicleName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the vehicle to retrieve information
+-- about.
+getVehicleResponse_arn :: Lens.Lens' GetVehicleResponse (Prelude.Maybe Prelude.Text)
+getVehicleResponse_arn = Lens.lens (\GetVehicleResponse' {arn} -> arn) (\s@GetVehicleResponse' {} a -> s {arn = a} :: GetVehicleResponse)
+
+-- | Static information about a vehicle in a key-value pair. For example:
+--
+-- @\"engineType\"@ : @\"1.3 L R2\"@
+getVehicleResponse_attributes :: Lens.Lens' GetVehicleResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getVehicleResponse_attributes = Lens.lens (\GetVehicleResponse' {attributes} -> attributes) (\s@GetVehicleResponse' {} a -> s {attributes = a} :: GetVehicleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time the vehicle was created in seconds since epoch (January 1, 1970
+-- at midnight UTC time).
+getVehicleResponse_creationTime :: Lens.Lens' GetVehicleResponse (Prelude.Maybe Prelude.UTCTime)
+getVehicleResponse_creationTime = Lens.lens (\GetVehicleResponse' {creationTime} -> creationTime) (\s@GetVehicleResponse' {} a -> s {creationTime = a} :: GetVehicleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of a decoder manifest associated with the vehicle.
+getVehicleResponse_decoderManifestArn :: Lens.Lens' GetVehicleResponse (Prelude.Maybe Prelude.Text)
+getVehicleResponse_decoderManifestArn = Lens.lens (\GetVehicleResponse' {decoderManifestArn} -> decoderManifestArn) (\s@GetVehicleResponse' {} a -> s {decoderManifestArn = a} :: GetVehicleResponse)
+
+-- | The time the vehicle was last updated in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+getVehicleResponse_lastModificationTime :: Lens.Lens' GetVehicleResponse (Prelude.Maybe Prelude.UTCTime)
+getVehicleResponse_lastModificationTime = Lens.lens (\GetVehicleResponse' {lastModificationTime} -> lastModificationTime) (\s@GetVehicleResponse' {} a -> s {lastModificationTime = a} :: GetVehicleResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of a vehicle model (model manifest) associated with the vehicle.
+getVehicleResponse_modelManifestArn :: Lens.Lens' GetVehicleResponse (Prelude.Maybe Prelude.Text)
+getVehicleResponse_modelManifestArn = Lens.lens (\GetVehicleResponse' {modelManifestArn} -> modelManifestArn) (\s@GetVehicleResponse' {} a -> s {modelManifestArn = a} :: GetVehicleResponse)
+
+-- | The ID of the vehicle.
+getVehicleResponse_vehicleName :: Lens.Lens' GetVehicleResponse (Prelude.Maybe Prelude.Text)
+getVehicleResponse_vehicleName = Lens.lens (\GetVehicleResponse' {vehicleName} -> vehicleName) (\s@GetVehicleResponse' {} a -> s {vehicleName = a} :: GetVehicleResponse)
+
+-- | The response's http status code.
+getVehicleResponse_httpStatus :: Lens.Lens' GetVehicleResponse Prelude.Int
+getVehicleResponse_httpStatus = Lens.lens (\GetVehicleResponse' {httpStatus} -> httpStatus) (\s@GetVehicleResponse' {} a -> s {httpStatus = a} :: GetVehicleResponse)
+
+instance Prelude.NFData GetVehicleResponse where
+  rnf GetVehicleResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf decoderManifestArn
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/GetVehicleStatus.hs b/gen/Amazonka/IoTFleetWise/GetVehicleStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/GetVehicleStatus.hs
@@ -0,0 +1,260 @@
+{-# 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.IoTFleetWise.GetVehicleStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the status of a vehicle with any associated
+-- campaigns.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.GetVehicleStatus
+  ( -- * Creating a Request
+    GetVehicleStatus (..),
+    newGetVehicleStatus,
+
+    -- * Request Lenses
+    getVehicleStatus_maxResults,
+    getVehicleStatus_nextToken,
+    getVehicleStatus_vehicleName,
+
+    -- * Destructuring the Response
+    GetVehicleStatusResponse (..),
+    newGetVehicleStatusResponse,
+
+    -- * Response Lenses
+    getVehicleStatusResponse_campaigns,
+    getVehicleStatusResponse_nextToken,
+    getVehicleStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVehicleStatus' smart constructor.
+data GetVehicleStatus = GetVehicleStatus'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the vehicle to retrieve information about.
+    vehicleName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVehicleStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getVehicleStatus_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'getVehicleStatus_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'vehicleName', 'getVehicleStatus_vehicleName' - The ID of the vehicle to retrieve information about.
+newGetVehicleStatus ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  GetVehicleStatus
+newGetVehicleStatus pVehicleName_ =
+  GetVehicleStatus'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vehicleName = pVehicleName_
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+getVehicleStatus_maxResults :: Lens.Lens' GetVehicleStatus (Prelude.Maybe Prelude.Natural)
+getVehicleStatus_maxResults = Lens.lens (\GetVehicleStatus' {maxResults} -> maxResults) (\s@GetVehicleStatus' {} a -> s {maxResults = a} :: GetVehicleStatus)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+getVehicleStatus_nextToken :: Lens.Lens' GetVehicleStatus (Prelude.Maybe Prelude.Text)
+getVehicleStatus_nextToken = Lens.lens (\GetVehicleStatus' {nextToken} -> nextToken) (\s@GetVehicleStatus' {} a -> s {nextToken = a} :: GetVehicleStatus)
+
+-- | The ID of the vehicle to retrieve information about.
+getVehicleStatus_vehicleName :: Lens.Lens' GetVehicleStatus Prelude.Text
+getVehicleStatus_vehicleName = Lens.lens (\GetVehicleStatus' {vehicleName} -> vehicleName) (\s@GetVehicleStatus' {} a -> s {vehicleName = a} :: GetVehicleStatus)
+
+instance Core.AWSPager GetVehicleStatus where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getVehicleStatusResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getVehicleStatusResponse_campaigns
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getVehicleStatus_nextToken
+          Lens..~ rs
+          Lens.^? getVehicleStatusResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetVehicleStatus where
+  type
+    AWSResponse GetVehicleStatus =
+      GetVehicleStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetVehicleStatusResponse'
+            Prelude.<$> (x Data..?> "campaigns" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetVehicleStatus where
+  hashWithSalt _salt GetVehicleStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData GetVehicleStatus where
+  rnf GetVehicleStatus' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vehicleName
+
+instance Data.ToHeaders GetVehicleStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.GetVehicleStatus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetVehicleStatus where
+  toJSON GetVehicleStatus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("vehicleName" Data..= vehicleName)
+          ]
+      )
+
+instance Data.ToPath GetVehicleStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetVehicleStatus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetVehicleStatusResponse' smart constructor.
+data GetVehicleStatusResponse = GetVehicleStatusResponse'
+  { -- | Lists information about the state of the vehicle with deployed
+    -- campaigns.
+    campaigns :: Prelude.Maybe [VehicleStatus],
+    -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more 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 'GetVehicleStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaigns', 'getVehicleStatusResponse_campaigns' - Lists information about the state of the vehicle with deployed
+-- campaigns.
+--
+-- 'nextToken', 'getVehicleStatusResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'httpStatus', 'getVehicleStatusResponse_httpStatus' - The response's http status code.
+newGetVehicleStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVehicleStatusResponse
+newGetVehicleStatusResponse pHttpStatus_ =
+  GetVehicleStatusResponse'
+    { campaigns =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Lists information about the state of the vehicle with deployed
+-- campaigns.
+getVehicleStatusResponse_campaigns :: Lens.Lens' GetVehicleStatusResponse (Prelude.Maybe [VehicleStatus])
+getVehicleStatusResponse_campaigns = Lens.lens (\GetVehicleStatusResponse' {campaigns} -> campaigns) (\s@GetVehicleStatusResponse' {} a -> s {campaigns = a} :: GetVehicleStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+getVehicleStatusResponse_nextToken :: Lens.Lens' GetVehicleStatusResponse (Prelude.Maybe Prelude.Text)
+getVehicleStatusResponse_nextToken = Lens.lens (\GetVehicleStatusResponse' {nextToken} -> nextToken) (\s@GetVehicleStatusResponse' {} a -> s {nextToken = a} :: GetVehicleStatusResponse)
+
+-- | The response's http status code.
+getVehicleStatusResponse_httpStatus :: Lens.Lens' GetVehicleStatusResponse Prelude.Int
+getVehicleStatusResponse_httpStatus = Lens.lens (\GetVehicleStatusResponse' {httpStatus} -> httpStatus) (\s@GetVehicleStatusResponse' {} a -> s {httpStatus = a} :: GetVehicleStatusResponse)
+
+instance Prelude.NFData GetVehicleStatusResponse where
+  rnf GetVehicleStatusResponse' {..} =
+    Prelude.rnf campaigns
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ImportDecoderManifest.hs b/gen/Amazonka/IoTFleetWise/ImportDecoderManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ImportDecoderManifest.hs
@@ -0,0 +1,212 @@
+{-# 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.IoTFleetWise.ImportDecoderManifest
+-- 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 decoder manifest using your existing CAN DBC file from your
+-- local device.
+module Amazonka.IoTFleetWise.ImportDecoderManifest
+  ( -- * Creating a Request
+    ImportDecoderManifest (..),
+    newImportDecoderManifest,
+
+    -- * Request Lenses
+    importDecoderManifest_name,
+    importDecoderManifest_networkFileDefinitions,
+
+    -- * Destructuring the Response
+    ImportDecoderManifestResponse (..),
+    newImportDecoderManifestResponse,
+
+    -- * Response Lenses
+    importDecoderManifestResponse_httpStatus,
+    importDecoderManifestResponse_name,
+    importDecoderManifestResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportDecoderManifest' smart constructor.
+data ImportDecoderManifest = ImportDecoderManifest'
+  { -- | The name of the decoder manifest to import.
+    name :: Prelude.Text,
+    -- | The file to load into an Amazon Web Services account.
+    networkFileDefinitions :: [NetworkFileDefinition]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportDecoderManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'importDecoderManifest_name' - The name of the decoder manifest to import.
+--
+-- 'networkFileDefinitions', 'importDecoderManifest_networkFileDefinitions' - The file to load into an Amazon Web Services account.
+newImportDecoderManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  ImportDecoderManifest
+newImportDecoderManifest pName_ =
+  ImportDecoderManifest'
+    { name = pName_,
+      networkFileDefinitions = Prelude.mempty
+    }
+
+-- | The name of the decoder manifest to import.
+importDecoderManifest_name :: Lens.Lens' ImportDecoderManifest Prelude.Text
+importDecoderManifest_name = Lens.lens (\ImportDecoderManifest' {name} -> name) (\s@ImportDecoderManifest' {} a -> s {name = a} :: ImportDecoderManifest)
+
+-- | The file to load into an Amazon Web Services account.
+importDecoderManifest_networkFileDefinitions :: Lens.Lens' ImportDecoderManifest [NetworkFileDefinition]
+importDecoderManifest_networkFileDefinitions = Lens.lens (\ImportDecoderManifest' {networkFileDefinitions} -> networkFileDefinitions) (\s@ImportDecoderManifest' {} a -> s {networkFileDefinitions = a} :: ImportDecoderManifest) Prelude.. Lens.coerced
+
+instance Core.AWSRequest ImportDecoderManifest where
+  type
+    AWSResponse ImportDecoderManifest =
+      ImportDecoderManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportDecoderManifestResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable ImportDecoderManifest where
+  hashWithSalt _salt ImportDecoderManifest' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` networkFileDefinitions
+
+instance Prelude.NFData ImportDecoderManifest where
+  rnf ImportDecoderManifest' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf networkFileDefinitions
+
+instance Data.ToHeaders ImportDecoderManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ImportDecoderManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportDecoderManifest where
+  toJSON ImportDecoderManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ( "networkFileDefinitions"
+                  Data..= networkFileDefinitions
+              )
+          ]
+      )
+
+instance Data.ToPath ImportDecoderManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportDecoderManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportDecoderManifestResponse' smart constructor.
+data ImportDecoderManifestResponse = ImportDecoderManifestResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the imported decoder manifest.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the decoder manifest that was
+    -- imported.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportDecoderManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'importDecoderManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'importDecoderManifestResponse_name' - The name of the imported decoder manifest.
+--
+-- 'arn', 'importDecoderManifestResponse_arn' - The Amazon Resource Name (ARN) of the decoder manifest that was
+-- imported.
+newImportDecoderManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  ImportDecoderManifestResponse
+newImportDecoderManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    ImportDecoderManifestResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+importDecoderManifestResponse_httpStatus :: Lens.Lens' ImportDecoderManifestResponse Prelude.Int
+importDecoderManifestResponse_httpStatus = Lens.lens (\ImportDecoderManifestResponse' {httpStatus} -> httpStatus) (\s@ImportDecoderManifestResponse' {} a -> s {httpStatus = a} :: ImportDecoderManifestResponse)
+
+-- | The name of the imported decoder manifest.
+importDecoderManifestResponse_name :: Lens.Lens' ImportDecoderManifestResponse Prelude.Text
+importDecoderManifestResponse_name = Lens.lens (\ImportDecoderManifestResponse' {name} -> name) (\s@ImportDecoderManifestResponse' {} a -> s {name = a} :: ImportDecoderManifestResponse)
+
+-- | The Amazon Resource Name (ARN) of the decoder manifest that was
+-- imported.
+importDecoderManifestResponse_arn :: Lens.Lens' ImportDecoderManifestResponse Prelude.Text
+importDecoderManifestResponse_arn = Lens.lens (\ImportDecoderManifestResponse' {arn} -> arn) (\s@ImportDecoderManifestResponse' {} a -> s {arn = a} :: ImportDecoderManifestResponse)
+
+instance Prelude.NFData ImportDecoderManifestResponse where
+  rnf ImportDecoderManifestResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/ImportSignalCatalog.hs b/gen/Amazonka/IoTFleetWise/ImportSignalCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ImportSignalCatalog.hs
@@ -0,0 +1,238 @@
+{-# 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.IoTFleetWise.ImportSignalCatalog
+-- 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 signal catalog using your existing VSS formatted content from
+-- your local device.
+module Amazonka.IoTFleetWise.ImportSignalCatalog
+  ( -- * Creating a Request
+    ImportSignalCatalog (..),
+    newImportSignalCatalog,
+
+    -- * Request Lenses
+    importSignalCatalog_description,
+    importSignalCatalog_tags,
+    importSignalCatalog_vss,
+    importSignalCatalog_name,
+
+    -- * Destructuring the Response
+    ImportSignalCatalogResponse (..),
+    newImportSignalCatalogResponse,
+
+    -- * Response Lenses
+    importSignalCatalogResponse_httpStatus,
+    importSignalCatalogResponse_name,
+    importSignalCatalogResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportSignalCatalog' smart constructor.
+data ImportSignalCatalog = ImportSignalCatalog'
+  { -- | A brief description of the signal catalog.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Metadata that can be used to manage the signal catalog.
+    tags :: Prelude.Maybe [Tag],
+    -- | The contents of the Vehicle Signal Specification (VSS) configuration.
+    -- VSS is a precise language used to describe and model signals in vehicle
+    -- networks.
+    vss :: Prelude.Maybe FormattedVss,
+    -- | The name of the signal catalog to import.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportSignalCatalog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'importSignalCatalog_description' - A brief description of the signal catalog.
+--
+-- 'tags', 'importSignalCatalog_tags' - Metadata that can be used to manage the signal catalog.
+--
+-- 'vss', 'importSignalCatalog_vss' - The contents of the Vehicle Signal Specification (VSS) configuration.
+-- VSS is a precise language used to describe and model signals in vehicle
+-- networks.
+--
+-- 'name', 'importSignalCatalog_name' - The name of the signal catalog to import.
+newImportSignalCatalog ::
+  -- | 'name'
+  Prelude.Text ->
+  ImportSignalCatalog
+newImportSignalCatalog pName_ =
+  ImportSignalCatalog'
+    { description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vss = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A brief description of the signal catalog.
+importSignalCatalog_description :: Lens.Lens' ImportSignalCatalog (Prelude.Maybe Prelude.Text)
+importSignalCatalog_description = Lens.lens (\ImportSignalCatalog' {description} -> description) (\s@ImportSignalCatalog' {} a -> s {description = a} :: ImportSignalCatalog)
+
+-- | Metadata that can be used to manage the signal catalog.
+importSignalCatalog_tags :: Lens.Lens' ImportSignalCatalog (Prelude.Maybe [Tag])
+importSignalCatalog_tags = Lens.lens (\ImportSignalCatalog' {tags} -> tags) (\s@ImportSignalCatalog' {} a -> s {tags = a} :: ImportSignalCatalog) Prelude.. Lens.mapping Lens.coerced
+
+-- | The contents of the Vehicle Signal Specification (VSS) configuration.
+-- VSS is a precise language used to describe and model signals in vehicle
+-- networks.
+importSignalCatalog_vss :: Lens.Lens' ImportSignalCatalog (Prelude.Maybe FormattedVss)
+importSignalCatalog_vss = Lens.lens (\ImportSignalCatalog' {vss} -> vss) (\s@ImportSignalCatalog' {} a -> s {vss = a} :: ImportSignalCatalog)
+
+-- | The name of the signal catalog to import.
+importSignalCatalog_name :: Lens.Lens' ImportSignalCatalog Prelude.Text
+importSignalCatalog_name = Lens.lens (\ImportSignalCatalog' {name} -> name) (\s@ImportSignalCatalog' {} a -> s {name = a} :: ImportSignalCatalog)
+
+instance Core.AWSRequest ImportSignalCatalog where
+  type
+    AWSResponse ImportSignalCatalog =
+      ImportSignalCatalogResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ImportSignalCatalogResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable ImportSignalCatalog where
+  hashWithSalt _salt ImportSignalCatalog' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vss
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ImportSignalCatalog where
+  rnf ImportSignalCatalog' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vss
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders ImportSignalCatalog where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ImportSignalCatalog" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportSignalCatalog where
+  toJSON ImportSignalCatalog' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("vss" Data..=) Prelude.<$> vss,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath ImportSignalCatalog where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportSignalCatalog where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportSignalCatalogResponse' smart constructor.
+data ImportSignalCatalogResponse = ImportSignalCatalogResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the imported signal catalog.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the imported signal catalog.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportSignalCatalogResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'importSignalCatalogResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'importSignalCatalogResponse_name' - The name of the imported signal catalog.
+--
+-- 'arn', 'importSignalCatalogResponse_arn' - The Amazon Resource Name (ARN) of the imported signal catalog.
+newImportSignalCatalogResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  ImportSignalCatalogResponse
+newImportSignalCatalogResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    ImportSignalCatalogResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+importSignalCatalogResponse_httpStatus :: Lens.Lens' ImportSignalCatalogResponse Prelude.Int
+importSignalCatalogResponse_httpStatus = Lens.lens (\ImportSignalCatalogResponse' {httpStatus} -> httpStatus) (\s@ImportSignalCatalogResponse' {} a -> s {httpStatus = a} :: ImportSignalCatalogResponse)
+
+-- | The name of the imported signal catalog.
+importSignalCatalogResponse_name :: Lens.Lens' ImportSignalCatalogResponse Prelude.Text
+importSignalCatalogResponse_name = Lens.lens (\ImportSignalCatalogResponse' {name} -> name) (\s@ImportSignalCatalogResponse' {} a -> s {name = a} :: ImportSignalCatalogResponse)
+
+-- | The Amazon Resource Name (ARN) of the imported signal catalog.
+importSignalCatalogResponse_arn :: Lens.Lens' ImportSignalCatalogResponse Prelude.Text
+importSignalCatalogResponse_arn = Lens.lens (\ImportSignalCatalogResponse' {arn} -> arn) (\s@ImportSignalCatalogResponse' {} a -> s {arn = a} :: ImportSignalCatalogResponse)
+
+instance Prelude.NFData ImportSignalCatalogResponse where
+  rnf ImportSignalCatalogResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/Lens.hs b/gen/Amazonka/IoTFleetWise/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Lens.hs
@@ -0,0 +1,774 @@
+{-# 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.IoTFleetWise.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.IoTFleetWise.Lens
+  ( -- * Operations
+
+    -- ** AssociateVehicleFleet
+    associateVehicleFleet_vehicleName,
+    associateVehicleFleet_fleetId,
+    associateVehicleFleetResponse_httpStatus,
+
+    -- ** BatchCreateVehicle
+    batchCreateVehicle_vehicles,
+    batchCreateVehicleResponse_errors,
+    batchCreateVehicleResponse_vehicles,
+    batchCreateVehicleResponse_httpStatus,
+
+    -- ** BatchUpdateVehicle
+    batchUpdateVehicle_vehicles,
+    batchUpdateVehicleResponse_errors,
+    batchUpdateVehicleResponse_vehicles,
+    batchUpdateVehicleResponse_httpStatus,
+
+    -- ** CreateCampaign
+    createCampaign_compression,
+    createCampaign_dataExtraDimensions,
+    createCampaign_description,
+    createCampaign_diagnosticsMode,
+    createCampaign_expiryTime,
+    createCampaign_postTriggerCollectionDuration,
+    createCampaign_priority,
+    createCampaign_signalsToCollect,
+    createCampaign_spoolingMode,
+    createCampaign_startTime,
+    createCampaign_tags,
+    createCampaign_name,
+    createCampaign_signalCatalogArn,
+    createCampaign_targetArn,
+    createCampaign_collectionScheme,
+    createCampaignResponse_arn,
+    createCampaignResponse_name,
+    createCampaignResponse_httpStatus,
+
+    -- ** CreateDecoderManifest
+    createDecoderManifest_description,
+    createDecoderManifest_networkInterfaces,
+    createDecoderManifest_signalDecoders,
+    createDecoderManifest_tags,
+    createDecoderManifest_name,
+    createDecoderManifest_modelManifestArn,
+    createDecoderManifestResponse_httpStatus,
+    createDecoderManifestResponse_name,
+    createDecoderManifestResponse_arn,
+
+    -- ** CreateFleet
+    createFleet_description,
+    createFleet_tags,
+    createFleet_fleetId,
+    createFleet_signalCatalogArn,
+    createFleetResponse_httpStatus,
+    createFleetResponse_id,
+    createFleetResponse_arn,
+
+    -- ** CreateModelManifest
+    createModelManifest_description,
+    createModelManifest_tags,
+    createModelManifest_name,
+    createModelManifest_nodes,
+    createModelManifest_signalCatalogArn,
+    createModelManifestResponse_httpStatus,
+    createModelManifestResponse_name,
+    createModelManifestResponse_arn,
+
+    -- ** CreateSignalCatalog
+    createSignalCatalog_description,
+    createSignalCatalog_nodes,
+    createSignalCatalog_tags,
+    createSignalCatalog_name,
+    createSignalCatalogResponse_httpStatus,
+    createSignalCatalogResponse_name,
+    createSignalCatalogResponse_arn,
+
+    -- ** CreateVehicle
+    createVehicle_associationBehavior,
+    createVehicle_attributes,
+    createVehicle_tags,
+    createVehicle_vehicleName,
+    createVehicle_modelManifestArn,
+    createVehicle_decoderManifestArn,
+    createVehicleResponse_arn,
+    createVehicleResponse_thingArn,
+    createVehicleResponse_vehicleName,
+    createVehicleResponse_httpStatus,
+
+    -- ** DeleteCampaign
+    deleteCampaign_name,
+    deleteCampaignResponse_arn,
+    deleteCampaignResponse_name,
+    deleteCampaignResponse_httpStatus,
+
+    -- ** DeleteDecoderManifest
+    deleteDecoderManifest_name,
+    deleteDecoderManifestResponse_httpStatus,
+    deleteDecoderManifestResponse_name,
+    deleteDecoderManifestResponse_arn,
+
+    -- ** DeleteFleet
+    deleteFleet_fleetId,
+    deleteFleetResponse_arn,
+    deleteFleetResponse_id,
+    deleteFleetResponse_httpStatus,
+
+    -- ** DeleteModelManifest
+    deleteModelManifest_name,
+    deleteModelManifestResponse_httpStatus,
+    deleteModelManifestResponse_name,
+    deleteModelManifestResponse_arn,
+
+    -- ** DeleteSignalCatalog
+    deleteSignalCatalog_name,
+    deleteSignalCatalogResponse_httpStatus,
+    deleteSignalCatalogResponse_name,
+    deleteSignalCatalogResponse_arn,
+
+    -- ** DeleteVehicle
+    deleteVehicle_vehicleName,
+    deleteVehicleResponse_httpStatus,
+    deleteVehicleResponse_vehicleName,
+    deleteVehicleResponse_arn,
+
+    -- ** DisassociateVehicleFleet
+    disassociateVehicleFleet_vehicleName,
+    disassociateVehicleFleet_fleetId,
+    disassociateVehicleFleetResponse_httpStatus,
+
+    -- ** GetCampaign
+    getCampaign_name,
+    getCampaignResponse_arn,
+    getCampaignResponse_collectionScheme,
+    getCampaignResponse_compression,
+    getCampaignResponse_creationTime,
+    getCampaignResponse_dataExtraDimensions,
+    getCampaignResponse_description,
+    getCampaignResponse_diagnosticsMode,
+    getCampaignResponse_expiryTime,
+    getCampaignResponse_lastModificationTime,
+    getCampaignResponse_name,
+    getCampaignResponse_postTriggerCollectionDuration,
+    getCampaignResponse_priority,
+    getCampaignResponse_signalCatalogArn,
+    getCampaignResponse_signalsToCollect,
+    getCampaignResponse_spoolingMode,
+    getCampaignResponse_startTime,
+    getCampaignResponse_status,
+    getCampaignResponse_targetArn,
+    getCampaignResponse_httpStatus,
+
+    -- ** GetDecoderManifest
+    getDecoderManifest_name,
+    getDecoderManifestResponse_description,
+    getDecoderManifestResponse_modelManifestArn,
+    getDecoderManifestResponse_status,
+    getDecoderManifestResponse_httpStatus,
+    getDecoderManifestResponse_name,
+    getDecoderManifestResponse_arn,
+    getDecoderManifestResponse_creationTime,
+    getDecoderManifestResponse_lastModificationTime,
+
+    -- ** GetFleet
+    getFleet_fleetId,
+    getFleetResponse_description,
+    getFleetResponse_httpStatus,
+    getFleetResponse_id,
+    getFleetResponse_arn,
+    getFleetResponse_signalCatalogArn,
+    getFleetResponse_creationTime,
+    getFleetResponse_lastModificationTime,
+
+    -- ** GetLoggingOptions
+    getLoggingOptionsResponse_httpStatus,
+    getLoggingOptionsResponse_cloudWatchLogDelivery,
+
+    -- ** GetModelManifest
+    getModelManifest_name,
+    getModelManifestResponse_description,
+    getModelManifestResponse_signalCatalogArn,
+    getModelManifestResponse_status,
+    getModelManifestResponse_httpStatus,
+    getModelManifestResponse_name,
+    getModelManifestResponse_arn,
+    getModelManifestResponse_creationTime,
+    getModelManifestResponse_lastModificationTime,
+
+    -- ** GetRegisterAccountStatus
+    getRegisterAccountStatusResponse_httpStatus,
+    getRegisterAccountStatusResponse_customerAccountId,
+    getRegisterAccountStatusResponse_accountStatus,
+    getRegisterAccountStatusResponse_timestreamRegistrationResponse,
+    getRegisterAccountStatusResponse_iamRegistrationResponse,
+    getRegisterAccountStatusResponse_creationTime,
+    getRegisterAccountStatusResponse_lastModificationTime,
+
+    -- ** GetSignalCatalog
+    getSignalCatalog_name,
+    getSignalCatalogResponse_description,
+    getSignalCatalogResponse_nodeCounts,
+    getSignalCatalogResponse_httpStatus,
+    getSignalCatalogResponse_name,
+    getSignalCatalogResponse_arn,
+    getSignalCatalogResponse_creationTime,
+    getSignalCatalogResponse_lastModificationTime,
+
+    -- ** GetVehicle
+    getVehicle_vehicleName,
+    getVehicleResponse_arn,
+    getVehicleResponse_attributes,
+    getVehicleResponse_creationTime,
+    getVehicleResponse_decoderManifestArn,
+    getVehicleResponse_lastModificationTime,
+    getVehicleResponse_modelManifestArn,
+    getVehicleResponse_vehicleName,
+    getVehicleResponse_httpStatus,
+
+    -- ** GetVehicleStatus
+    getVehicleStatus_maxResults,
+    getVehicleStatus_nextToken,
+    getVehicleStatus_vehicleName,
+    getVehicleStatusResponse_campaigns,
+    getVehicleStatusResponse_nextToken,
+    getVehicleStatusResponse_httpStatus,
+
+    -- ** ImportDecoderManifest
+    importDecoderManifest_name,
+    importDecoderManifest_networkFileDefinitions,
+    importDecoderManifestResponse_httpStatus,
+    importDecoderManifestResponse_name,
+    importDecoderManifestResponse_arn,
+
+    -- ** ImportSignalCatalog
+    importSignalCatalog_description,
+    importSignalCatalog_tags,
+    importSignalCatalog_vss,
+    importSignalCatalog_name,
+    importSignalCatalogResponse_httpStatus,
+    importSignalCatalogResponse_name,
+    importSignalCatalogResponse_arn,
+
+    -- ** ListCampaigns
+    listCampaigns_maxResults,
+    listCampaigns_nextToken,
+    listCampaigns_status,
+    listCampaignsResponse_campaignSummaries,
+    listCampaignsResponse_nextToken,
+    listCampaignsResponse_httpStatus,
+
+    -- ** ListDecoderManifestNetworkInterfaces
+    listDecoderManifestNetworkInterfaces_maxResults,
+    listDecoderManifestNetworkInterfaces_nextToken,
+    listDecoderManifestNetworkInterfaces_name,
+    listDecoderManifestNetworkInterfacesResponse_networkInterfaces,
+    listDecoderManifestNetworkInterfacesResponse_nextToken,
+    listDecoderManifestNetworkInterfacesResponse_httpStatus,
+
+    -- ** ListDecoderManifestSignals
+    listDecoderManifestSignals_maxResults,
+    listDecoderManifestSignals_nextToken,
+    listDecoderManifestSignals_name,
+    listDecoderManifestSignalsResponse_nextToken,
+    listDecoderManifestSignalsResponse_signalDecoders,
+    listDecoderManifestSignalsResponse_httpStatus,
+
+    -- ** ListDecoderManifests
+    listDecoderManifests_maxResults,
+    listDecoderManifests_modelManifestArn,
+    listDecoderManifests_nextToken,
+    listDecoderManifestsResponse_nextToken,
+    listDecoderManifestsResponse_summaries,
+    listDecoderManifestsResponse_httpStatus,
+
+    -- ** ListFleets
+    listFleets_maxResults,
+    listFleets_nextToken,
+    listFleetsResponse_fleetSummaries,
+    listFleetsResponse_nextToken,
+    listFleetsResponse_httpStatus,
+
+    -- ** ListFleetsForVehicle
+    listFleetsForVehicle_maxResults,
+    listFleetsForVehicle_nextToken,
+    listFleetsForVehicle_vehicleName,
+    listFleetsForVehicleResponse_fleets,
+    listFleetsForVehicleResponse_nextToken,
+    listFleetsForVehicleResponse_httpStatus,
+
+    -- ** ListModelManifestNodes
+    listModelManifestNodes_maxResults,
+    listModelManifestNodes_nextToken,
+    listModelManifestNodes_name,
+    listModelManifestNodesResponse_nextToken,
+    listModelManifestNodesResponse_nodes,
+    listModelManifestNodesResponse_httpStatus,
+
+    -- ** ListModelManifests
+    listModelManifests_maxResults,
+    listModelManifests_nextToken,
+    listModelManifests_signalCatalogArn,
+    listModelManifestsResponse_nextToken,
+    listModelManifestsResponse_summaries,
+    listModelManifestsResponse_httpStatus,
+
+    -- ** ListSignalCatalogNodes
+    listSignalCatalogNodes_maxResults,
+    listSignalCatalogNodes_nextToken,
+    listSignalCatalogNodes_name,
+    listSignalCatalogNodesResponse_nextToken,
+    listSignalCatalogNodesResponse_nodes,
+    listSignalCatalogNodesResponse_httpStatus,
+
+    -- ** ListSignalCatalogs
+    listSignalCatalogs_maxResults,
+    listSignalCatalogs_nextToken,
+    listSignalCatalogsResponse_nextToken,
+    listSignalCatalogsResponse_summaries,
+    listSignalCatalogsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceARN,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListVehicles
+    listVehicles_maxResults,
+    listVehicles_modelManifestArn,
+    listVehicles_nextToken,
+    listVehiclesResponse_nextToken,
+    listVehiclesResponse_vehicleSummaries,
+    listVehiclesResponse_httpStatus,
+
+    -- ** ListVehiclesInFleet
+    listVehiclesInFleet_maxResults,
+    listVehiclesInFleet_nextToken,
+    listVehiclesInFleet_fleetId,
+    listVehiclesInFleetResponse_nextToken,
+    listVehiclesInFleetResponse_vehicles,
+    listVehiclesInFleetResponse_httpStatus,
+
+    -- ** PutLoggingOptions
+    putLoggingOptions_cloudWatchLogDelivery,
+    putLoggingOptionsResponse_httpStatus,
+
+    -- ** RegisterAccount
+    registerAccount_iamResources,
+    registerAccount_timestreamResources,
+    registerAccountResponse_httpStatus,
+    registerAccountResponse_registerAccountStatus,
+    registerAccountResponse_timestreamResources,
+    registerAccountResponse_iamResources,
+    registerAccountResponse_creationTime,
+    registerAccountResponse_lastModificationTime,
+
+    -- ** TagResource
+    tagResource_resourceARN,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateCampaign
+    updateCampaign_dataExtraDimensions,
+    updateCampaign_description,
+    updateCampaign_name,
+    updateCampaign_action,
+    updateCampaignResponse_arn,
+    updateCampaignResponse_name,
+    updateCampaignResponse_status,
+    updateCampaignResponse_httpStatus,
+
+    -- ** UpdateDecoderManifest
+    updateDecoderManifest_description,
+    updateDecoderManifest_networkInterfacesToAdd,
+    updateDecoderManifest_networkInterfacesToRemove,
+    updateDecoderManifest_networkInterfacesToUpdate,
+    updateDecoderManifest_signalDecodersToAdd,
+    updateDecoderManifest_signalDecodersToRemove,
+    updateDecoderManifest_signalDecodersToUpdate,
+    updateDecoderManifest_status,
+    updateDecoderManifest_name,
+    updateDecoderManifestResponse_httpStatus,
+    updateDecoderManifestResponse_name,
+    updateDecoderManifestResponse_arn,
+
+    -- ** UpdateFleet
+    updateFleet_description,
+    updateFleet_fleetId,
+    updateFleetResponse_arn,
+    updateFleetResponse_id,
+    updateFleetResponse_httpStatus,
+
+    -- ** UpdateModelManifest
+    updateModelManifest_description,
+    updateModelManifest_nodesToAdd,
+    updateModelManifest_nodesToRemove,
+    updateModelManifest_status,
+    updateModelManifest_name,
+    updateModelManifestResponse_httpStatus,
+    updateModelManifestResponse_name,
+    updateModelManifestResponse_arn,
+
+    -- ** UpdateSignalCatalog
+    updateSignalCatalog_description,
+    updateSignalCatalog_nodesToAdd,
+    updateSignalCatalog_nodesToRemove,
+    updateSignalCatalog_nodesToUpdate,
+    updateSignalCatalog_name,
+    updateSignalCatalogResponse_httpStatus,
+    updateSignalCatalogResponse_name,
+    updateSignalCatalogResponse_arn,
+
+    -- ** UpdateVehicle
+    updateVehicle_attributeUpdateMode,
+    updateVehicle_attributes,
+    updateVehicle_decoderManifestArn,
+    updateVehicle_modelManifestArn,
+    updateVehicle_vehicleName,
+    updateVehicleResponse_arn,
+    updateVehicleResponse_vehicleName,
+    updateVehicleResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Actuator
+    actuator_allowedValues,
+    actuator_assignedValue,
+    actuator_description,
+    actuator_max,
+    actuator_min,
+    actuator_unit,
+    actuator_fullyQualifiedName,
+    actuator_dataType,
+
+    -- ** Attribute
+    attribute_allowedValues,
+    attribute_assignedValue,
+    attribute_defaultValue,
+    attribute_description,
+    attribute_max,
+    attribute_min,
+    attribute_unit,
+    attribute_fullyQualifiedName,
+    attribute_dataType,
+
+    -- ** Branch
+    branch_description,
+    branch_fullyQualifiedName,
+
+    -- ** CampaignSummary
+    campaignSummary_arn,
+    campaignSummary_description,
+    campaignSummary_name,
+    campaignSummary_signalCatalogArn,
+    campaignSummary_status,
+    campaignSummary_targetArn,
+    campaignSummary_creationTime,
+    campaignSummary_lastModificationTime,
+
+    -- ** CanDbcDefinition
+    canDbcDefinition_signalsMap,
+    canDbcDefinition_networkInterface,
+    canDbcDefinition_canDbcFiles,
+
+    -- ** CanInterface
+    canInterface_protocolName,
+    canInterface_protocolVersion,
+    canInterface_name,
+
+    -- ** CanSignal
+    canSignal_name,
+    canSignal_messageId,
+    canSignal_isBigEndian,
+    canSignal_isSigned,
+    canSignal_startBit,
+    canSignal_offset,
+    canSignal_factor,
+    canSignal_length,
+
+    -- ** CloudWatchLogDeliveryOptions
+    cloudWatchLogDeliveryOptions_logGroupName,
+    cloudWatchLogDeliveryOptions_logType,
+
+    -- ** CollectionScheme
+    collectionScheme_conditionBasedCollectionScheme,
+    collectionScheme_timeBasedCollectionScheme,
+
+    -- ** ConditionBasedCollectionScheme
+    conditionBasedCollectionScheme_conditionLanguageVersion,
+    conditionBasedCollectionScheme_minimumTriggerIntervalMs,
+    conditionBasedCollectionScheme_triggerMode,
+    conditionBasedCollectionScheme_expression,
+
+    -- ** CreateVehicleError
+    createVehicleError_code,
+    createVehicleError_message,
+    createVehicleError_vehicleName,
+
+    -- ** CreateVehicleRequestItem
+    createVehicleRequestItem_associationBehavior,
+    createVehicleRequestItem_attributes,
+    createVehicleRequestItem_tags,
+    createVehicleRequestItem_vehicleName,
+    createVehicleRequestItem_modelManifestArn,
+    createVehicleRequestItem_decoderManifestArn,
+
+    -- ** CreateVehicleResponseItem
+    createVehicleResponseItem_arn,
+    createVehicleResponseItem_thingArn,
+    createVehicleResponseItem_vehicleName,
+
+    -- ** DecoderManifestSummary
+    decoderManifestSummary_arn,
+    decoderManifestSummary_description,
+    decoderManifestSummary_modelManifestArn,
+    decoderManifestSummary_name,
+    decoderManifestSummary_status,
+    decoderManifestSummary_creationTime,
+    decoderManifestSummary_lastModificationTime,
+
+    -- ** FleetSummary
+    fleetSummary_description,
+    fleetSummary_lastModificationTime,
+    fleetSummary_id,
+    fleetSummary_arn,
+    fleetSummary_signalCatalogArn,
+    fleetSummary_creationTime,
+
+    -- ** FormattedVss
+    formattedVss_vssJson,
+
+    -- ** IamRegistrationResponse
+    iamRegistrationResponse_errorMessage,
+    iamRegistrationResponse_roleArn,
+    iamRegistrationResponse_registrationStatus,
+
+    -- ** IamResources
+    iamResources_roleArn,
+
+    -- ** ModelManifestSummary
+    modelManifestSummary_arn,
+    modelManifestSummary_description,
+    modelManifestSummary_name,
+    modelManifestSummary_signalCatalogArn,
+    modelManifestSummary_status,
+    modelManifestSummary_creationTime,
+    modelManifestSummary_lastModificationTime,
+
+    -- ** NetworkFileDefinition
+    networkFileDefinition_canDbc,
+
+    -- ** NetworkInterface
+    networkInterface_canInterface,
+    networkInterface_obdInterface,
+    networkInterface_interfaceId,
+    networkInterface_type,
+
+    -- ** Node
+    node_actuator,
+    node_attribute,
+    node_branch,
+    node_sensor,
+
+    -- ** NodeCounts
+    nodeCounts_totalActuators,
+    nodeCounts_totalAttributes,
+    nodeCounts_totalBranches,
+    nodeCounts_totalNodes,
+    nodeCounts_totalSensors,
+
+    -- ** ObdInterface
+    obdInterface_dtcRequestIntervalSeconds,
+    obdInterface_hasTransmissionEcu,
+    obdInterface_obdStandard,
+    obdInterface_pidRequestIntervalSeconds,
+    obdInterface_useExtendedIds,
+    obdInterface_name,
+    obdInterface_requestMessageId,
+
+    -- ** ObdSignal
+    obdSignal_bitMaskLength,
+    obdSignal_bitRightShift,
+    obdSignal_pidResponseLength,
+    obdSignal_serviceMode,
+    obdSignal_pid,
+    obdSignal_scaling,
+    obdSignal_offset,
+    obdSignal_startByte,
+    obdSignal_byteLength,
+
+    -- ** Sensor
+    sensor_allowedValues,
+    sensor_description,
+    sensor_max,
+    sensor_min,
+    sensor_unit,
+    sensor_fullyQualifiedName,
+    sensor_dataType,
+
+    -- ** SignalCatalogSummary
+    signalCatalogSummary_arn,
+    signalCatalogSummary_creationTime,
+    signalCatalogSummary_lastModificationTime,
+    signalCatalogSummary_name,
+
+    -- ** SignalDecoder
+    signalDecoder_canSignal,
+    signalDecoder_obdSignal,
+    signalDecoder_fullyQualifiedName,
+    signalDecoder_type,
+    signalDecoder_interfaceId,
+
+    -- ** SignalInformation
+    signalInformation_maxSampleCount,
+    signalInformation_minimumSamplingIntervalMs,
+    signalInformation_name,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TimeBasedCollectionScheme
+    timeBasedCollectionScheme_periodMs,
+
+    -- ** TimestreamRegistrationResponse
+    timestreamRegistrationResponse_errorMessage,
+    timestreamRegistrationResponse_timestreamDatabaseArn,
+    timestreamRegistrationResponse_timestreamTableArn,
+    timestreamRegistrationResponse_timestreamDatabaseName,
+    timestreamRegistrationResponse_timestreamTableName,
+    timestreamRegistrationResponse_registrationStatus,
+
+    -- ** TimestreamResources
+    timestreamResources_timestreamDatabaseName,
+    timestreamResources_timestreamTableName,
+
+    -- ** UpdateVehicleError
+    updateVehicleError_code,
+    updateVehicleError_message,
+    updateVehicleError_vehicleName,
+
+    -- ** UpdateVehicleRequestItem
+    updateVehicleRequestItem_attributeUpdateMode,
+    updateVehicleRequestItem_attributes,
+    updateVehicleRequestItem_decoderManifestArn,
+    updateVehicleRequestItem_modelManifestArn,
+    updateVehicleRequestItem_vehicleName,
+
+    -- ** UpdateVehicleResponseItem
+    updateVehicleResponseItem_arn,
+    updateVehicleResponseItem_vehicleName,
+
+    -- ** VehicleStatus
+    vehicleStatus_campaignName,
+    vehicleStatus_status,
+    vehicleStatus_vehicleName,
+
+    -- ** VehicleSummary
+    vehicleSummary_vehicleName,
+    vehicleSummary_arn,
+    vehicleSummary_modelManifestArn,
+    vehicleSummary_decoderManifestArn,
+    vehicleSummary_creationTime,
+    vehicleSummary_lastModificationTime,
+  )
+where
+
+import Amazonka.IoTFleetWise.AssociateVehicleFleet
+import Amazonka.IoTFleetWise.BatchCreateVehicle
+import Amazonka.IoTFleetWise.BatchUpdateVehicle
+import Amazonka.IoTFleetWise.CreateCampaign
+import Amazonka.IoTFleetWise.CreateDecoderManifest
+import Amazonka.IoTFleetWise.CreateFleet
+import Amazonka.IoTFleetWise.CreateModelManifest
+import Amazonka.IoTFleetWise.CreateSignalCatalog
+import Amazonka.IoTFleetWise.CreateVehicle
+import Amazonka.IoTFleetWise.DeleteCampaign
+import Amazonka.IoTFleetWise.DeleteDecoderManifest
+import Amazonka.IoTFleetWise.DeleteFleet
+import Amazonka.IoTFleetWise.DeleteModelManifest
+import Amazonka.IoTFleetWise.DeleteSignalCatalog
+import Amazonka.IoTFleetWise.DeleteVehicle
+import Amazonka.IoTFleetWise.DisassociateVehicleFleet
+import Amazonka.IoTFleetWise.GetCampaign
+import Amazonka.IoTFleetWise.GetDecoderManifest
+import Amazonka.IoTFleetWise.GetFleet
+import Amazonka.IoTFleetWise.GetLoggingOptions
+import Amazonka.IoTFleetWise.GetModelManifest
+import Amazonka.IoTFleetWise.GetRegisterAccountStatus
+import Amazonka.IoTFleetWise.GetSignalCatalog
+import Amazonka.IoTFleetWise.GetVehicle
+import Amazonka.IoTFleetWise.GetVehicleStatus
+import Amazonka.IoTFleetWise.ImportDecoderManifest
+import Amazonka.IoTFleetWise.ImportSignalCatalog
+import Amazonka.IoTFleetWise.ListCampaigns
+import Amazonka.IoTFleetWise.ListDecoderManifestNetworkInterfaces
+import Amazonka.IoTFleetWise.ListDecoderManifestSignals
+import Amazonka.IoTFleetWise.ListDecoderManifests
+import Amazonka.IoTFleetWise.ListFleets
+import Amazonka.IoTFleetWise.ListFleetsForVehicle
+import Amazonka.IoTFleetWise.ListModelManifestNodes
+import Amazonka.IoTFleetWise.ListModelManifests
+import Amazonka.IoTFleetWise.ListSignalCatalogNodes
+import Amazonka.IoTFleetWise.ListSignalCatalogs
+import Amazonka.IoTFleetWise.ListTagsForResource
+import Amazonka.IoTFleetWise.ListVehicles
+import Amazonka.IoTFleetWise.ListVehiclesInFleet
+import Amazonka.IoTFleetWise.PutLoggingOptions
+import Amazonka.IoTFleetWise.RegisterAccount
+import Amazonka.IoTFleetWise.TagResource
+import Amazonka.IoTFleetWise.Types.Actuator
+import Amazonka.IoTFleetWise.Types.Attribute
+import Amazonka.IoTFleetWise.Types.Branch
+import Amazonka.IoTFleetWise.Types.CampaignSummary
+import Amazonka.IoTFleetWise.Types.CanDbcDefinition
+import Amazonka.IoTFleetWise.Types.CanInterface
+import Amazonka.IoTFleetWise.Types.CanSignal
+import Amazonka.IoTFleetWise.Types.CloudWatchLogDeliveryOptions
+import Amazonka.IoTFleetWise.Types.CollectionScheme
+import Amazonka.IoTFleetWise.Types.ConditionBasedCollectionScheme
+import Amazonka.IoTFleetWise.Types.CreateVehicleError
+import Amazonka.IoTFleetWise.Types.CreateVehicleRequestItem
+import Amazonka.IoTFleetWise.Types.CreateVehicleResponseItem
+import Amazonka.IoTFleetWise.Types.DecoderManifestSummary
+import Amazonka.IoTFleetWise.Types.FleetSummary
+import Amazonka.IoTFleetWise.Types.FormattedVss
+import Amazonka.IoTFleetWise.Types.IamRegistrationResponse
+import Amazonka.IoTFleetWise.Types.IamResources
+import Amazonka.IoTFleetWise.Types.ModelManifestSummary
+import Amazonka.IoTFleetWise.Types.NetworkFileDefinition
+import Amazonka.IoTFleetWise.Types.NetworkInterface
+import Amazonka.IoTFleetWise.Types.Node
+import Amazonka.IoTFleetWise.Types.NodeCounts
+import Amazonka.IoTFleetWise.Types.ObdInterface
+import Amazonka.IoTFleetWise.Types.ObdSignal
+import Amazonka.IoTFleetWise.Types.Sensor
+import Amazonka.IoTFleetWise.Types.SignalCatalogSummary
+import Amazonka.IoTFleetWise.Types.SignalDecoder
+import Amazonka.IoTFleetWise.Types.SignalInformation
+import Amazonka.IoTFleetWise.Types.Tag
+import Amazonka.IoTFleetWise.Types.TimeBasedCollectionScheme
+import Amazonka.IoTFleetWise.Types.TimestreamRegistrationResponse
+import Amazonka.IoTFleetWise.Types.TimestreamResources
+import Amazonka.IoTFleetWise.Types.UpdateVehicleError
+import Amazonka.IoTFleetWise.Types.UpdateVehicleRequestItem
+import Amazonka.IoTFleetWise.Types.UpdateVehicleResponseItem
+import Amazonka.IoTFleetWise.Types.VehicleStatus
+import Amazonka.IoTFleetWise.Types.VehicleSummary
+import Amazonka.IoTFleetWise.UntagResource
+import Amazonka.IoTFleetWise.UpdateCampaign
+import Amazonka.IoTFleetWise.UpdateDecoderManifest
+import Amazonka.IoTFleetWise.UpdateFleet
+import Amazonka.IoTFleetWise.UpdateModelManifest
+import Amazonka.IoTFleetWise.UpdateSignalCatalog
+import Amazonka.IoTFleetWise.UpdateVehicle
diff --git a/gen/Amazonka/IoTFleetWise/ListCampaigns.hs b/gen/Amazonka/IoTFleetWise/ListCampaigns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListCampaigns.hs
@@ -0,0 +1,266 @@
+{-# 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.IoTFleetWise.ListCampaigns
+-- 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 information about created campaigns.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListCampaigns
+  ( -- * Creating a Request
+    ListCampaigns (..),
+    newListCampaigns,
+
+    -- * Request Lenses
+    listCampaigns_maxResults,
+    listCampaigns_nextToken,
+    listCampaigns_status,
+
+    -- * Destructuring the Response
+    ListCampaignsResponse (..),
+    newListCampaignsResponse,
+
+    -- * Response Lenses
+    listCampaignsResponse_campaignSummaries,
+    listCampaignsResponse_nextToken,
+    listCampaignsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCampaigns' smart constructor.
+data ListCampaigns = ListCampaigns'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Optional parameter to filter the results by the status of each created
+    -- campaign in your account. The status can be one of: @CREATING@,
+    -- @WAITING_FOR_APPROVAL@, @RUNNING@, or @SUSPENDED@.
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCampaigns' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listCampaigns_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listCampaigns_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'status', 'listCampaigns_status' - Optional parameter to filter the results by the status of each created
+-- campaign in your account. The status can be one of: @CREATING@,
+-- @WAITING_FOR_APPROVAL@, @RUNNING@, or @SUSPENDED@.
+newListCampaigns ::
+  ListCampaigns
+newListCampaigns =
+  ListCampaigns'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listCampaigns_maxResults :: Lens.Lens' ListCampaigns (Prelude.Maybe Prelude.Natural)
+listCampaigns_maxResults = Lens.lens (\ListCampaigns' {maxResults} -> maxResults) (\s@ListCampaigns' {} a -> s {maxResults = a} :: ListCampaigns)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listCampaigns_nextToken :: Lens.Lens' ListCampaigns (Prelude.Maybe Prelude.Text)
+listCampaigns_nextToken = Lens.lens (\ListCampaigns' {nextToken} -> nextToken) (\s@ListCampaigns' {} a -> s {nextToken = a} :: ListCampaigns)
+
+-- | Optional parameter to filter the results by the status of each created
+-- campaign in your account. The status can be one of: @CREATING@,
+-- @WAITING_FOR_APPROVAL@, @RUNNING@, or @SUSPENDED@.
+listCampaigns_status :: Lens.Lens' ListCampaigns (Prelude.Maybe Prelude.Text)
+listCampaigns_status = Lens.lens (\ListCampaigns' {status} -> status) (\s@ListCampaigns' {} a -> s {status = a} :: ListCampaigns)
+
+instance Core.AWSPager ListCampaigns where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCampaignsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCampaignsResponse_campaignSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCampaigns_nextToken
+          Lens..~ rs
+          Lens.^? listCampaignsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListCampaigns where
+  type
+    AWSResponse ListCampaigns =
+      ListCampaignsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCampaignsResponse'
+            Prelude.<$> ( x
+                            Data..?> "campaignSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCampaigns where
+  hashWithSalt _salt ListCampaigns' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ListCampaigns where
+  rnf ListCampaigns' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders ListCampaigns where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListCampaigns" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCampaigns where
+  toJSON ListCampaigns' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("status" Data..=) Prelude.<$> status
+          ]
+      )
+
+instance Data.ToPath ListCampaigns where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListCampaigns where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCampaignsResponse' smart constructor.
+data ListCampaignsResponse = ListCampaignsResponse'
+  { -- | A summary of information about each campaign.
+    campaignSummaries :: Prelude.Maybe [CampaignSummary],
+    -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more 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 'ListCampaignsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaignSummaries', 'listCampaignsResponse_campaignSummaries' - A summary of information about each campaign.
+--
+-- 'nextToken', 'listCampaignsResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'httpStatus', 'listCampaignsResponse_httpStatus' - The response's http status code.
+newListCampaignsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCampaignsResponse
+newListCampaignsResponse pHttpStatus_ =
+  ListCampaignsResponse'
+    { campaignSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A summary of information about each campaign.
+listCampaignsResponse_campaignSummaries :: Lens.Lens' ListCampaignsResponse (Prelude.Maybe [CampaignSummary])
+listCampaignsResponse_campaignSummaries = Lens.lens (\ListCampaignsResponse' {campaignSummaries} -> campaignSummaries) (\s@ListCampaignsResponse' {} a -> s {campaignSummaries = a} :: ListCampaignsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listCampaignsResponse_nextToken :: Lens.Lens' ListCampaignsResponse (Prelude.Maybe Prelude.Text)
+listCampaignsResponse_nextToken = Lens.lens (\ListCampaignsResponse' {nextToken} -> nextToken) (\s@ListCampaignsResponse' {} a -> s {nextToken = a} :: ListCampaignsResponse)
+
+-- | The response's http status code.
+listCampaignsResponse_httpStatus :: Lens.Lens' ListCampaignsResponse Prelude.Int
+listCampaignsResponse_httpStatus = Lens.lens (\ListCampaignsResponse' {httpStatus} -> httpStatus) (\s@ListCampaignsResponse' {} a -> s {httpStatus = a} :: ListCampaignsResponse)
+
+instance Prelude.NFData ListCampaignsResponse where
+  rnf ListCampaignsResponse' {..} =
+    Prelude.rnf campaignSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListDecoderManifestNetworkInterfaces.hs b/gen/Amazonka/IoTFleetWise/ListDecoderManifestNetworkInterfaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListDecoderManifestNetworkInterfaces.hs
@@ -0,0 +1,291 @@
+{-# 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.IoTFleetWise.ListDecoderManifestNetworkInterfaces
+-- 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 interfaces specified in a decoder manifest.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListDecoderManifestNetworkInterfaces
+  ( -- * Creating a Request
+    ListDecoderManifestNetworkInterfaces (..),
+    newListDecoderManifestNetworkInterfaces,
+
+    -- * Request Lenses
+    listDecoderManifestNetworkInterfaces_maxResults,
+    listDecoderManifestNetworkInterfaces_nextToken,
+    listDecoderManifestNetworkInterfaces_name,
+
+    -- * Destructuring the Response
+    ListDecoderManifestNetworkInterfacesResponse (..),
+    newListDecoderManifestNetworkInterfacesResponse,
+
+    -- * Response Lenses
+    listDecoderManifestNetworkInterfacesResponse_networkInterfaces,
+    listDecoderManifestNetworkInterfacesResponse_nextToken,
+    listDecoderManifestNetworkInterfacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDecoderManifestNetworkInterfaces' smart constructor.
+data ListDecoderManifestNetworkInterfaces = ListDecoderManifestNetworkInterfaces'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the decoder manifest to list information about.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDecoderManifestNetworkInterfaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDecoderManifestNetworkInterfaces_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listDecoderManifestNetworkInterfaces_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'name', 'listDecoderManifestNetworkInterfaces_name' - The name of the decoder manifest to list information about.
+newListDecoderManifestNetworkInterfaces ::
+  -- | 'name'
+  Prelude.Text ->
+  ListDecoderManifestNetworkInterfaces
+newListDecoderManifestNetworkInterfaces pName_ =
+  ListDecoderManifestNetworkInterfaces'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listDecoderManifestNetworkInterfaces_maxResults :: Lens.Lens' ListDecoderManifestNetworkInterfaces (Prelude.Maybe Prelude.Natural)
+listDecoderManifestNetworkInterfaces_maxResults = Lens.lens (\ListDecoderManifestNetworkInterfaces' {maxResults} -> maxResults) (\s@ListDecoderManifestNetworkInterfaces' {} a -> s {maxResults = a} :: ListDecoderManifestNetworkInterfaces)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listDecoderManifestNetworkInterfaces_nextToken :: Lens.Lens' ListDecoderManifestNetworkInterfaces (Prelude.Maybe Prelude.Text)
+listDecoderManifestNetworkInterfaces_nextToken = Lens.lens (\ListDecoderManifestNetworkInterfaces' {nextToken} -> nextToken) (\s@ListDecoderManifestNetworkInterfaces' {} a -> s {nextToken = a} :: ListDecoderManifestNetworkInterfaces)
+
+-- | The name of the decoder manifest to list information about.
+listDecoderManifestNetworkInterfaces_name :: Lens.Lens' ListDecoderManifestNetworkInterfaces Prelude.Text
+listDecoderManifestNetworkInterfaces_name = Lens.lens (\ListDecoderManifestNetworkInterfaces' {name} -> name) (\s@ListDecoderManifestNetworkInterfaces' {} a -> s {name = a} :: ListDecoderManifestNetworkInterfaces)
+
+instance
+  Core.AWSPager
+    ListDecoderManifestNetworkInterfaces
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDecoderManifestNetworkInterfacesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDecoderManifestNetworkInterfacesResponse_networkInterfaces
+            Prelude.. Lens._Just
+            Prelude.. Lens.to Prelude.toList
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDecoderManifestNetworkInterfaces_nextToken
+          Lens..~ rs
+          Lens.^? listDecoderManifestNetworkInterfacesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListDecoderManifestNetworkInterfaces
+  where
+  type
+    AWSResponse ListDecoderManifestNetworkInterfaces =
+      ListDecoderManifestNetworkInterfacesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDecoderManifestNetworkInterfacesResponse'
+            Prelude.<$> (x Data..?> "networkInterfaces")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListDecoderManifestNetworkInterfaces
+  where
+  hashWithSalt
+    _salt
+    ListDecoderManifestNetworkInterfaces' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    ListDecoderManifestNetworkInterfaces
+  where
+  rnf ListDecoderManifestNetworkInterfaces' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf name
+
+instance
+  Data.ToHeaders
+    ListDecoderManifestNetworkInterfaces
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListDecoderManifestNetworkInterfaces" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    ListDecoderManifestNetworkInterfaces
+  where
+  toJSON ListDecoderManifestNetworkInterfaces' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance
+  Data.ToPath
+    ListDecoderManifestNetworkInterfaces
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ListDecoderManifestNetworkInterfaces
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDecoderManifestNetworkInterfacesResponse' smart constructor.
+data ListDecoderManifestNetworkInterfacesResponse = ListDecoderManifestNetworkInterfacesResponse'
+  { -- | A list of information about network interfaces.
+    networkInterfaces :: Prelude.Maybe (Prelude.NonEmpty NetworkInterface),
+    -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more 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 'ListDecoderManifestNetworkInterfacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInterfaces', 'listDecoderManifestNetworkInterfacesResponse_networkInterfaces' - A list of information about network interfaces.
+--
+-- 'nextToken', 'listDecoderManifestNetworkInterfacesResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'httpStatus', 'listDecoderManifestNetworkInterfacesResponse_httpStatus' - The response's http status code.
+newListDecoderManifestNetworkInterfacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDecoderManifestNetworkInterfacesResponse
+newListDecoderManifestNetworkInterfacesResponse
+  pHttpStatus_ =
+    ListDecoderManifestNetworkInterfacesResponse'
+      { networkInterfaces =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | A list of information about network interfaces.
+listDecoderManifestNetworkInterfacesResponse_networkInterfaces :: Lens.Lens' ListDecoderManifestNetworkInterfacesResponse (Prelude.Maybe (Prelude.NonEmpty NetworkInterface))
+listDecoderManifestNetworkInterfacesResponse_networkInterfaces = Lens.lens (\ListDecoderManifestNetworkInterfacesResponse' {networkInterfaces} -> networkInterfaces) (\s@ListDecoderManifestNetworkInterfacesResponse' {} a -> s {networkInterfaces = a} :: ListDecoderManifestNetworkInterfacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listDecoderManifestNetworkInterfacesResponse_nextToken :: Lens.Lens' ListDecoderManifestNetworkInterfacesResponse (Prelude.Maybe Prelude.Text)
+listDecoderManifestNetworkInterfacesResponse_nextToken = Lens.lens (\ListDecoderManifestNetworkInterfacesResponse' {nextToken} -> nextToken) (\s@ListDecoderManifestNetworkInterfacesResponse' {} a -> s {nextToken = a} :: ListDecoderManifestNetworkInterfacesResponse)
+
+-- | The response's http status code.
+listDecoderManifestNetworkInterfacesResponse_httpStatus :: Lens.Lens' ListDecoderManifestNetworkInterfacesResponse Prelude.Int
+listDecoderManifestNetworkInterfacesResponse_httpStatus = Lens.lens (\ListDecoderManifestNetworkInterfacesResponse' {httpStatus} -> httpStatus) (\s@ListDecoderManifestNetworkInterfacesResponse' {} a -> s {httpStatus = a} :: ListDecoderManifestNetworkInterfacesResponse)
+
+instance
+  Prelude.NFData
+    ListDecoderManifestNetworkInterfacesResponse
+  where
+  rnf ListDecoderManifestNetworkInterfacesResponse' {..} =
+    Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListDecoderManifestSignals.hs b/gen/Amazonka/IoTFleetWise/ListDecoderManifestSignals.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListDecoderManifestSignals.hs
@@ -0,0 +1,265 @@
+{-# 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.IoTFleetWise.ListDecoderManifestSignals
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A list of information about signal decoders specified in a decoder
+-- manifest.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListDecoderManifestSignals
+  ( -- * Creating a Request
+    ListDecoderManifestSignals (..),
+    newListDecoderManifestSignals,
+
+    -- * Request Lenses
+    listDecoderManifestSignals_maxResults,
+    listDecoderManifestSignals_nextToken,
+    listDecoderManifestSignals_name,
+
+    -- * Destructuring the Response
+    ListDecoderManifestSignalsResponse (..),
+    newListDecoderManifestSignalsResponse,
+
+    -- * Response Lenses
+    listDecoderManifestSignalsResponse_nextToken,
+    listDecoderManifestSignalsResponse_signalDecoders,
+    listDecoderManifestSignalsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDecoderManifestSignals' smart constructor.
+data ListDecoderManifestSignals = ListDecoderManifestSignals'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the decoder manifest to list information about.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDecoderManifestSignals' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDecoderManifestSignals_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listDecoderManifestSignals_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'name', 'listDecoderManifestSignals_name' - The name of the decoder manifest to list information about.
+newListDecoderManifestSignals ::
+  -- | 'name'
+  Prelude.Text ->
+  ListDecoderManifestSignals
+newListDecoderManifestSignals pName_ =
+  ListDecoderManifestSignals'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listDecoderManifestSignals_maxResults :: Lens.Lens' ListDecoderManifestSignals (Prelude.Maybe Prelude.Natural)
+listDecoderManifestSignals_maxResults = Lens.lens (\ListDecoderManifestSignals' {maxResults} -> maxResults) (\s@ListDecoderManifestSignals' {} a -> s {maxResults = a} :: ListDecoderManifestSignals)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listDecoderManifestSignals_nextToken :: Lens.Lens' ListDecoderManifestSignals (Prelude.Maybe Prelude.Text)
+listDecoderManifestSignals_nextToken = Lens.lens (\ListDecoderManifestSignals' {nextToken} -> nextToken) (\s@ListDecoderManifestSignals' {} a -> s {nextToken = a} :: ListDecoderManifestSignals)
+
+-- | The name of the decoder manifest to list information about.
+listDecoderManifestSignals_name :: Lens.Lens' ListDecoderManifestSignals Prelude.Text
+listDecoderManifestSignals_name = Lens.lens (\ListDecoderManifestSignals' {name} -> name) (\s@ListDecoderManifestSignals' {} a -> s {name = a} :: ListDecoderManifestSignals)
+
+instance Core.AWSPager ListDecoderManifestSignals where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDecoderManifestSignalsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDecoderManifestSignalsResponse_signalDecoders
+            Prelude.. Lens._Just
+            Prelude.. Lens.to Prelude.toList
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDecoderManifestSignals_nextToken
+          Lens..~ rs
+          Lens.^? listDecoderManifestSignalsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDecoderManifestSignals where
+  type
+    AWSResponse ListDecoderManifestSignals =
+      ListDecoderManifestSignalsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDecoderManifestSignalsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "signalDecoders")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDecoderManifestSignals where
+  hashWithSalt _salt ListDecoderManifestSignals' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ListDecoderManifestSignals where
+  rnf ListDecoderManifestSignals' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders ListDecoderManifestSignals where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListDecoderManifestSignals" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDecoderManifestSignals where
+  toJSON ListDecoderManifestSignals' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath ListDecoderManifestSignals where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDecoderManifestSignals where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDecoderManifestSignalsResponse' smart constructor.
+data ListDecoderManifestSignalsResponse = ListDecoderManifestSignalsResponse'
+  { -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about a list of signals to decode.
+    signalDecoders :: Prelude.Maybe (Prelude.NonEmpty SignalDecoder),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDecoderManifestSignalsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDecoderManifestSignalsResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'signalDecoders', 'listDecoderManifestSignalsResponse_signalDecoders' - Information about a list of signals to decode.
+--
+-- 'httpStatus', 'listDecoderManifestSignalsResponse_httpStatus' - The response's http status code.
+newListDecoderManifestSignalsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDecoderManifestSignalsResponse
+newListDecoderManifestSignalsResponse pHttpStatus_ =
+  ListDecoderManifestSignalsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      signalDecoders = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listDecoderManifestSignalsResponse_nextToken :: Lens.Lens' ListDecoderManifestSignalsResponse (Prelude.Maybe Prelude.Text)
+listDecoderManifestSignalsResponse_nextToken = Lens.lens (\ListDecoderManifestSignalsResponse' {nextToken} -> nextToken) (\s@ListDecoderManifestSignalsResponse' {} a -> s {nextToken = a} :: ListDecoderManifestSignalsResponse)
+
+-- | Information about a list of signals to decode.
+listDecoderManifestSignalsResponse_signalDecoders :: Lens.Lens' ListDecoderManifestSignalsResponse (Prelude.Maybe (Prelude.NonEmpty SignalDecoder))
+listDecoderManifestSignalsResponse_signalDecoders = Lens.lens (\ListDecoderManifestSignalsResponse' {signalDecoders} -> signalDecoders) (\s@ListDecoderManifestSignalsResponse' {} a -> s {signalDecoders = a} :: ListDecoderManifestSignalsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listDecoderManifestSignalsResponse_httpStatus :: Lens.Lens' ListDecoderManifestSignalsResponse Prelude.Int
+listDecoderManifestSignalsResponse_httpStatus = Lens.lens (\ListDecoderManifestSignalsResponse' {httpStatus} -> httpStatus) (\s@ListDecoderManifestSignalsResponse' {} a -> s {httpStatus = a} :: ListDecoderManifestSignalsResponse)
+
+instance
+  Prelude.NFData
+    ListDecoderManifestSignalsResponse
+  where
+  rnf ListDecoderManifestSignalsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf signalDecoders
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListDecoderManifests.hs b/gen/Amazonka/IoTFleetWise/ListDecoderManifests.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListDecoderManifests.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.ListDecoderManifests
+-- 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 decoder manifests.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListDecoderManifests
+  ( -- * Creating a Request
+    ListDecoderManifests (..),
+    newListDecoderManifests,
+
+    -- * Request Lenses
+    listDecoderManifests_maxResults,
+    listDecoderManifests_modelManifestArn,
+    listDecoderManifests_nextToken,
+
+    -- * Destructuring the Response
+    ListDecoderManifestsResponse (..),
+    newListDecoderManifestsResponse,
+
+    -- * Response Lenses
+    listDecoderManifestsResponse_nextToken,
+    listDecoderManifestsResponse_summaries,
+    listDecoderManifestsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDecoderManifests' smart constructor.
+data ListDecoderManifests = ListDecoderManifests'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) of a vehicle model (model manifest)
+    -- associated with the decoder manifest.
+    modelManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDecoderManifests' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDecoderManifests_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'modelManifestArn', 'listDecoderManifests_modelManifestArn' - The Amazon Resource Name (ARN) of a vehicle model (model manifest)
+-- associated with the decoder manifest.
+--
+-- 'nextToken', 'listDecoderManifests_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+newListDecoderManifests ::
+  ListDecoderManifests
+newListDecoderManifests =
+  ListDecoderManifests'
+    { maxResults = Prelude.Nothing,
+      modelManifestArn = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listDecoderManifests_maxResults :: Lens.Lens' ListDecoderManifests (Prelude.Maybe Prelude.Natural)
+listDecoderManifests_maxResults = Lens.lens (\ListDecoderManifests' {maxResults} -> maxResults) (\s@ListDecoderManifests' {} a -> s {maxResults = a} :: ListDecoderManifests)
+
+-- | The Amazon Resource Name (ARN) of a vehicle model (model manifest)
+-- associated with the decoder manifest.
+listDecoderManifests_modelManifestArn :: Lens.Lens' ListDecoderManifests (Prelude.Maybe Prelude.Text)
+listDecoderManifests_modelManifestArn = Lens.lens (\ListDecoderManifests' {modelManifestArn} -> modelManifestArn) (\s@ListDecoderManifests' {} a -> s {modelManifestArn = a} :: ListDecoderManifests)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listDecoderManifests_nextToken :: Lens.Lens' ListDecoderManifests (Prelude.Maybe Prelude.Text)
+listDecoderManifests_nextToken = Lens.lens (\ListDecoderManifests' {nextToken} -> nextToken) (\s@ListDecoderManifests' {} a -> s {nextToken = a} :: ListDecoderManifests)
+
+instance Core.AWSPager ListDecoderManifests where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDecoderManifestsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDecoderManifestsResponse_summaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDecoderManifests_nextToken
+          Lens..~ rs
+          Lens.^? listDecoderManifestsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDecoderManifests where
+  type
+    AWSResponse ListDecoderManifests =
+      ListDecoderManifestsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDecoderManifestsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "summaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDecoderManifests where
+  hashWithSalt _salt ListDecoderManifests' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` modelManifestArn
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDecoderManifests where
+  rnf ListDecoderManifests' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDecoderManifests where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListDecoderManifests" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDecoderManifests where
+  toJSON ListDecoderManifests' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("modelManifestArn" Data..=)
+              Prelude.<$> modelManifestArn,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListDecoderManifests where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDecoderManifests where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDecoderManifestsResponse' smart constructor.
+data ListDecoderManifestsResponse = ListDecoderManifestsResponse'
+  { -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about each decoder manifest.
+    summaries :: Prelude.Maybe [DecoderManifestSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDecoderManifestsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDecoderManifestsResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'summaries', 'listDecoderManifestsResponse_summaries' - A list of information about each decoder manifest.
+--
+-- 'httpStatus', 'listDecoderManifestsResponse_httpStatus' - The response's http status code.
+newListDecoderManifestsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDecoderManifestsResponse
+newListDecoderManifestsResponse pHttpStatus_ =
+  ListDecoderManifestsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      summaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listDecoderManifestsResponse_nextToken :: Lens.Lens' ListDecoderManifestsResponse (Prelude.Maybe Prelude.Text)
+listDecoderManifestsResponse_nextToken = Lens.lens (\ListDecoderManifestsResponse' {nextToken} -> nextToken) (\s@ListDecoderManifestsResponse' {} a -> s {nextToken = a} :: ListDecoderManifestsResponse)
+
+-- | A list of information about each decoder manifest.
+listDecoderManifestsResponse_summaries :: Lens.Lens' ListDecoderManifestsResponse (Prelude.Maybe [DecoderManifestSummary])
+listDecoderManifestsResponse_summaries = Lens.lens (\ListDecoderManifestsResponse' {summaries} -> summaries) (\s@ListDecoderManifestsResponse' {} a -> s {summaries = a} :: ListDecoderManifestsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listDecoderManifestsResponse_httpStatus :: Lens.Lens' ListDecoderManifestsResponse Prelude.Int
+listDecoderManifestsResponse_httpStatus = Lens.lens (\ListDecoderManifestsResponse' {httpStatus} -> httpStatus) (\s@ListDecoderManifestsResponse' {} a -> s {httpStatus = a} :: ListDecoderManifestsResponse)
+
+instance Prelude.NFData ListDecoderManifestsResponse where
+  rnf ListDecoderManifestsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf summaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListFleets.hs b/gen/Amazonka/IoTFleetWise/ListFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListFleets.hs
@@ -0,0 +1,243 @@
+{-# 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.IoTFleetWise.ListFleets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information for each created fleet in an Amazon Web Services
+-- account.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListFleets
+  ( -- * Creating a Request
+    ListFleets (..),
+    newListFleets,
+
+    -- * Request Lenses
+    listFleets_maxResults,
+    listFleets_nextToken,
+
+    -- * Destructuring the Response
+    ListFleetsResponse (..),
+    newListFleetsResponse,
+
+    -- * Response Lenses
+    listFleetsResponse_fleetSummaries,
+    listFleetsResponse_nextToken,
+    listFleetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFleets' smart constructor.
+data ListFleets = ListFleets'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFleets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFleets_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listFleets_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+newListFleets ::
+  ListFleets
+newListFleets =
+  ListFleets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listFleets_maxResults :: Lens.Lens' ListFleets (Prelude.Maybe Prelude.Natural)
+listFleets_maxResults = Lens.lens (\ListFleets' {maxResults} -> maxResults) (\s@ListFleets' {} a -> s {maxResults = a} :: ListFleets)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listFleets_nextToken :: Lens.Lens' ListFleets (Prelude.Maybe Prelude.Text)
+listFleets_nextToken = Lens.lens (\ListFleets' {nextToken} -> nextToken) (\s@ListFleets' {} a -> s {nextToken = a} :: ListFleets)
+
+instance Core.AWSPager ListFleets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listFleetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listFleetsResponse_fleetSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listFleets_nextToken
+          Lens..~ rs
+          Lens.^? listFleetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListFleets where
+  type AWSResponse ListFleets = ListFleetsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFleetsResponse'
+            Prelude.<$> (x Data..?> "fleetSummaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFleets where
+  hashWithSalt _salt ListFleets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListFleets where
+  rnf ListFleets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListFleets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListFleets" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListFleets where
+  toJSON ListFleets' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListFleets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListFleets where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListFleetsResponse' smart constructor.
+data ListFleetsResponse = ListFleetsResponse'
+  { -- | A list of information for each fleet.
+    fleetSummaries :: Prelude.Maybe [FleetSummary],
+    -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more 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 'ListFleetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetSummaries', 'listFleetsResponse_fleetSummaries' - A list of information for each fleet.
+--
+-- 'nextToken', 'listFleetsResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'httpStatus', 'listFleetsResponse_httpStatus' - The response's http status code.
+newListFleetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFleetsResponse
+newListFleetsResponse pHttpStatus_ =
+  ListFleetsResponse'
+    { fleetSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of information for each fleet.
+listFleetsResponse_fleetSummaries :: Lens.Lens' ListFleetsResponse (Prelude.Maybe [FleetSummary])
+listFleetsResponse_fleetSummaries = Lens.lens (\ListFleetsResponse' {fleetSummaries} -> fleetSummaries) (\s@ListFleetsResponse' {} a -> s {fleetSummaries = a} :: ListFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listFleetsResponse_nextToken :: Lens.Lens' ListFleetsResponse (Prelude.Maybe Prelude.Text)
+listFleetsResponse_nextToken = Lens.lens (\ListFleetsResponse' {nextToken} -> nextToken) (\s@ListFleetsResponse' {} a -> s {nextToken = a} :: ListFleetsResponse)
+
+-- | The response's http status code.
+listFleetsResponse_httpStatus :: Lens.Lens' ListFleetsResponse Prelude.Int
+listFleetsResponse_httpStatus = Lens.lens (\ListFleetsResponse' {httpStatus} -> httpStatus) (\s@ListFleetsResponse' {} a -> s {httpStatus = a} :: ListFleetsResponse)
+
+instance Prelude.NFData ListFleetsResponse where
+  rnf ListFleetsResponse' {..} =
+    Prelude.rnf fleetSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListFleetsForVehicle.hs b/gen/Amazonka/IoTFleetWise/ListFleetsForVehicle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListFleetsForVehicle.hs
@@ -0,0 +1,260 @@
+{-# 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.IoTFleetWise.ListFleetsForVehicle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of IDs for all fleets that the vehicle is associated
+-- with.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListFleetsForVehicle
+  ( -- * Creating a Request
+    ListFleetsForVehicle (..),
+    newListFleetsForVehicle,
+
+    -- * Request Lenses
+    listFleetsForVehicle_maxResults,
+    listFleetsForVehicle_nextToken,
+    listFleetsForVehicle_vehicleName,
+
+    -- * Destructuring the Response
+    ListFleetsForVehicleResponse (..),
+    newListFleetsForVehicleResponse,
+
+    -- * Response Lenses
+    listFleetsForVehicleResponse_fleets,
+    listFleetsForVehicleResponse_nextToken,
+    listFleetsForVehicleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListFleetsForVehicle' smart constructor.
+data ListFleetsForVehicle = ListFleetsForVehicle'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the vehicle to retrieve information about.
+    vehicleName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFleetsForVehicle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listFleetsForVehicle_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listFleetsForVehicle_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'vehicleName', 'listFleetsForVehicle_vehicleName' - The ID of the vehicle to retrieve information about.
+newListFleetsForVehicle ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  ListFleetsForVehicle
+newListFleetsForVehicle pVehicleName_ =
+  ListFleetsForVehicle'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vehicleName = pVehicleName_
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listFleetsForVehicle_maxResults :: Lens.Lens' ListFleetsForVehicle (Prelude.Maybe Prelude.Natural)
+listFleetsForVehicle_maxResults = Lens.lens (\ListFleetsForVehicle' {maxResults} -> maxResults) (\s@ListFleetsForVehicle' {} a -> s {maxResults = a} :: ListFleetsForVehicle)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listFleetsForVehicle_nextToken :: Lens.Lens' ListFleetsForVehicle (Prelude.Maybe Prelude.Text)
+listFleetsForVehicle_nextToken = Lens.lens (\ListFleetsForVehicle' {nextToken} -> nextToken) (\s@ListFleetsForVehicle' {} a -> s {nextToken = a} :: ListFleetsForVehicle)
+
+-- | The ID of the vehicle to retrieve information about.
+listFleetsForVehicle_vehicleName :: Lens.Lens' ListFleetsForVehicle Prelude.Text
+listFleetsForVehicle_vehicleName = Lens.lens (\ListFleetsForVehicle' {vehicleName} -> vehicleName) (\s@ListFleetsForVehicle' {} a -> s {vehicleName = a} :: ListFleetsForVehicle)
+
+instance Core.AWSPager ListFleetsForVehicle where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listFleetsForVehicleResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listFleetsForVehicleResponse_fleets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listFleetsForVehicle_nextToken
+          Lens..~ rs
+          Lens.^? listFleetsForVehicleResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListFleetsForVehicle where
+  type
+    AWSResponse ListFleetsForVehicle =
+      ListFleetsForVehicleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFleetsForVehicleResponse'
+            Prelude.<$> (x Data..?> "fleets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListFleetsForVehicle where
+  hashWithSalt _salt ListFleetsForVehicle' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData ListFleetsForVehicle where
+  rnf ListFleetsForVehicle' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vehicleName
+
+instance Data.ToHeaders ListFleetsForVehicle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListFleetsForVehicle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListFleetsForVehicle where
+  toJSON ListFleetsForVehicle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("vehicleName" Data..= vehicleName)
+          ]
+      )
+
+instance Data.ToPath ListFleetsForVehicle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListFleetsForVehicle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListFleetsForVehicleResponse' smart constructor.
+data ListFleetsForVehicleResponse = ListFleetsForVehicleResponse'
+  { -- | A list of fleet IDs that the vehicle is associated with.
+    fleets :: Prelude.Maybe [Prelude.Text],
+    -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more 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 'ListFleetsForVehicleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleets', 'listFleetsForVehicleResponse_fleets' - A list of fleet IDs that the vehicle is associated with.
+--
+-- 'nextToken', 'listFleetsForVehicleResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'httpStatus', 'listFleetsForVehicleResponse_httpStatus' - The response's http status code.
+newListFleetsForVehicleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFleetsForVehicleResponse
+newListFleetsForVehicleResponse pHttpStatus_ =
+  ListFleetsForVehicleResponse'
+    { fleets =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of fleet IDs that the vehicle is associated with.
+listFleetsForVehicleResponse_fleets :: Lens.Lens' ListFleetsForVehicleResponse (Prelude.Maybe [Prelude.Text])
+listFleetsForVehicleResponse_fleets = Lens.lens (\ListFleetsForVehicleResponse' {fleets} -> fleets) (\s@ListFleetsForVehicleResponse' {} a -> s {fleets = a} :: ListFleetsForVehicleResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listFleetsForVehicleResponse_nextToken :: Lens.Lens' ListFleetsForVehicleResponse (Prelude.Maybe Prelude.Text)
+listFleetsForVehicleResponse_nextToken = Lens.lens (\ListFleetsForVehicleResponse' {nextToken} -> nextToken) (\s@ListFleetsForVehicleResponse' {} a -> s {nextToken = a} :: ListFleetsForVehicleResponse)
+
+-- | The response's http status code.
+listFleetsForVehicleResponse_httpStatus :: Lens.Lens' ListFleetsForVehicleResponse Prelude.Int
+listFleetsForVehicleResponse_httpStatus = Lens.lens (\ListFleetsForVehicleResponse' {httpStatus} -> httpStatus) (\s@ListFleetsForVehicleResponse' {} a -> s {httpStatus = a} :: ListFleetsForVehicleResponse)
+
+instance Prelude.NFData ListFleetsForVehicleResponse where
+  rnf ListFleetsForVehicleResponse' {..} =
+    Prelude.rnf fleets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListModelManifestNodes.hs b/gen/Amazonka/IoTFleetWise/ListModelManifestNodes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListModelManifestNodes.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.ListModelManifestNodes
+-- 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 information about nodes specified in a vehicle model (model
+-- manifest).
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListModelManifestNodes
+  ( -- * Creating a Request
+    ListModelManifestNodes (..),
+    newListModelManifestNodes,
+
+    -- * Request Lenses
+    listModelManifestNodes_maxResults,
+    listModelManifestNodes_nextToken,
+    listModelManifestNodes_name,
+
+    -- * Destructuring the Response
+    ListModelManifestNodesResponse (..),
+    newListModelManifestNodesResponse,
+
+    -- * Response Lenses
+    listModelManifestNodesResponse_nextToken,
+    listModelManifestNodesResponse_nodes,
+    listModelManifestNodesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListModelManifestNodes' smart constructor.
+data ListModelManifestNodes = ListModelManifestNodes'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the vehicle model to list information about.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListModelManifestNodes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listModelManifestNodes_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listModelManifestNodes_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'name', 'listModelManifestNodes_name' - The name of the vehicle model to list information about.
+newListModelManifestNodes ::
+  -- | 'name'
+  Prelude.Text ->
+  ListModelManifestNodes
+newListModelManifestNodes pName_ =
+  ListModelManifestNodes'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listModelManifestNodes_maxResults :: Lens.Lens' ListModelManifestNodes (Prelude.Maybe Prelude.Natural)
+listModelManifestNodes_maxResults = Lens.lens (\ListModelManifestNodes' {maxResults} -> maxResults) (\s@ListModelManifestNodes' {} a -> s {maxResults = a} :: ListModelManifestNodes)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listModelManifestNodes_nextToken :: Lens.Lens' ListModelManifestNodes (Prelude.Maybe Prelude.Text)
+listModelManifestNodes_nextToken = Lens.lens (\ListModelManifestNodes' {nextToken} -> nextToken) (\s@ListModelManifestNodes' {} a -> s {nextToken = a} :: ListModelManifestNodes)
+
+-- | The name of the vehicle model to list information about.
+listModelManifestNodes_name :: Lens.Lens' ListModelManifestNodes Prelude.Text
+listModelManifestNodes_name = Lens.lens (\ListModelManifestNodes' {name} -> name) (\s@ListModelManifestNodes' {} a -> s {name = a} :: ListModelManifestNodes)
+
+instance Core.AWSPager ListModelManifestNodes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listModelManifestNodesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listModelManifestNodesResponse_nodes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listModelManifestNodes_nextToken
+          Lens..~ rs
+          Lens.^? listModelManifestNodesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListModelManifestNodes where
+  type
+    AWSResponse ListModelManifestNodes =
+      ListModelManifestNodesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListModelManifestNodesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "nodes" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListModelManifestNodes where
+  hashWithSalt _salt ListModelManifestNodes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ListModelManifestNodes where
+  rnf ListModelManifestNodes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders ListModelManifestNodes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListModelManifestNodes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListModelManifestNodes where
+  toJSON ListModelManifestNodes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath ListModelManifestNodes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListModelManifestNodes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListModelManifestNodesResponse' smart constructor.
+data ListModelManifestNodesResponse = ListModelManifestNodesResponse'
+  { -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about nodes.
+    nodes :: Prelude.Maybe [Node],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListModelManifestNodesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listModelManifestNodesResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'nodes', 'listModelManifestNodesResponse_nodes' - A list of information about nodes.
+--
+-- 'httpStatus', 'listModelManifestNodesResponse_httpStatus' - The response's http status code.
+newListModelManifestNodesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListModelManifestNodesResponse
+newListModelManifestNodesResponse pHttpStatus_ =
+  ListModelManifestNodesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      nodes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listModelManifestNodesResponse_nextToken :: Lens.Lens' ListModelManifestNodesResponse (Prelude.Maybe Prelude.Text)
+listModelManifestNodesResponse_nextToken = Lens.lens (\ListModelManifestNodesResponse' {nextToken} -> nextToken) (\s@ListModelManifestNodesResponse' {} a -> s {nextToken = a} :: ListModelManifestNodesResponse)
+
+-- | A list of information about nodes.
+listModelManifestNodesResponse_nodes :: Lens.Lens' ListModelManifestNodesResponse (Prelude.Maybe [Node])
+listModelManifestNodesResponse_nodes = Lens.lens (\ListModelManifestNodesResponse' {nodes} -> nodes) (\s@ListModelManifestNodesResponse' {} a -> s {nodes = a} :: ListModelManifestNodesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listModelManifestNodesResponse_httpStatus :: Lens.Lens' ListModelManifestNodesResponse Prelude.Int
+listModelManifestNodesResponse_httpStatus = Lens.lens (\ListModelManifestNodesResponse' {httpStatus} -> httpStatus) (\s@ListModelManifestNodesResponse' {} a -> s {httpStatus = a} :: ListModelManifestNodesResponse)
+
+instance
+  Prelude.NFData
+    ListModelManifestNodesResponse
+  where
+  rnf ListModelManifestNodesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf nodes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListModelManifests.hs b/gen/Amazonka/IoTFleetWise/ListModelManifests.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListModelManifests.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.ListModelManifests
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of vehicle models (model manifests).
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListModelManifests
+  ( -- * Creating a Request
+    ListModelManifests (..),
+    newListModelManifests,
+
+    -- * Request Lenses
+    listModelManifests_maxResults,
+    listModelManifests_nextToken,
+    listModelManifests_signalCatalogArn,
+
+    -- * Destructuring the Response
+    ListModelManifestsResponse (..),
+    newListModelManifestsResponse,
+
+    -- * Response Lenses
+    listModelManifestsResponse_nextToken,
+    listModelManifestsResponse_summaries,
+    listModelManifestsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListModelManifests' smart constructor.
+data ListModelManifests = ListModelManifests'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a signal catalog. If you specify a signal catalog, only the
+    -- vehicle models associated with it are returned.
+    signalCatalogArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListModelManifests' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listModelManifests_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listModelManifests_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'signalCatalogArn', 'listModelManifests_signalCatalogArn' - The ARN of a signal catalog. If you specify a signal catalog, only the
+-- vehicle models associated with it are returned.
+newListModelManifests ::
+  ListModelManifests
+newListModelManifests =
+  ListModelManifests'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      signalCatalogArn = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listModelManifests_maxResults :: Lens.Lens' ListModelManifests (Prelude.Maybe Prelude.Natural)
+listModelManifests_maxResults = Lens.lens (\ListModelManifests' {maxResults} -> maxResults) (\s@ListModelManifests' {} a -> s {maxResults = a} :: ListModelManifests)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listModelManifests_nextToken :: Lens.Lens' ListModelManifests (Prelude.Maybe Prelude.Text)
+listModelManifests_nextToken = Lens.lens (\ListModelManifests' {nextToken} -> nextToken) (\s@ListModelManifests' {} a -> s {nextToken = a} :: ListModelManifests)
+
+-- | The ARN of a signal catalog. If you specify a signal catalog, only the
+-- vehicle models associated with it are returned.
+listModelManifests_signalCatalogArn :: Lens.Lens' ListModelManifests (Prelude.Maybe Prelude.Text)
+listModelManifests_signalCatalogArn = Lens.lens (\ListModelManifests' {signalCatalogArn} -> signalCatalogArn) (\s@ListModelManifests' {} a -> s {signalCatalogArn = a} :: ListModelManifests)
+
+instance Core.AWSPager ListModelManifests where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listModelManifestsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listModelManifestsResponse_summaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listModelManifests_nextToken
+          Lens..~ rs
+          Lens.^? listModelManifestsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListModelManifests where
+  type
+    AWSResponse ListModelManifests =
+      ListModelManifestsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListModelManifestsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "summaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListModelManifests where
+  hashWithSalt _salt ListModelManifests' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` signalCatalogArn
+
+instance Prelude.NFData ListModelManifests where
+  rnf ListModelManifests' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+
+instance Data.ToHeaders ListModelManifests where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListModelManifests" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListModelManifests where
+  toJSON ListModelManifests' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("signalCatalogArn" Data..=)
+              Prelude.<$> signalCatalogArn
+          ]
+      )
+
+instance Data.ToPath ListModelManifests where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListModelManifests where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListModelManifestsResponse' smart constructor.
+data ListModelManifestsResponse = ListModelManifestsResponse'
+  { -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about vehicle models.
+    summaries :: Prelude.Maybe [ModelManifestSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListModelManifestsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listModelManifestsResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'summaries', 'listModelManifestsResponse_summaries' - A list of information about vehicle models.
+--
+-- 'httpStatus', 'listModelManifestsResponse_httpStatus' - The response's http status code.
+newListModelManifestsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListModelManifestsResponse
+newListModelManifestsResponse pHttpStatus_ =
+  ListModelManifestsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      summaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listModelManifestsResponse_nextToken :: Lens.Lens' ListModelManifestsResponse (Prelude.Maybe Prelude.Text)
+listModelManifestsResponse_nextToken = Lens.lens (\ListModelManifestsResponse' {nextToken} -> nextToken) (\s@ListModelManifestsResponse' {} a -> s {nextToken = a} :: ListModelManifestsResponse)
+
+-- | A list of information about vehicle models.
+listModelManifestsResponse_summaries :: Lens.Lens' ListModelManifestsResponse (Prelude.Maybe [ModelManifestSummary])
+listModelManifestsResponse_summaries = Lens.lens (\ListModelManifestsResponse' {summaries} -> summaries) (\s@ListModelManifestsResponse' {} a -> s {summaries = a} :: ListModelManifestsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listModelManifestsResponse_httpStatus :: Lens.Lens' ListModelManifestsResponse Prelude.Int
+listModelManifestsResponse_httpStatus = Lens.lens (\ListModelManifestsResponse' {httpStatus} -> httpStatus) (\s@ListModelManifestsResponse' {} a -> s {httpStatus = a} :: ListModelManifestsResponse)
+
+instance Prelude.NFData ListModelManifestsResponse where
+  rnf ListModelManifestsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf summaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListSignalCatalogNodes.hs b/gen/Amazonka/IoTFleetWise/ListSignalCatalogNodes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListSignalCatalogNodes.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.ListSignalCatalogNodes
+-- 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 of information about the signals (nodes) specified in a signal
+-- catalog.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListSignalCatalogNodes
+  ( -- * Creating a Request
+    ListSignalCatalogNodes (..),
+    newListSignalCatalogNodes,
+
+    -- * Request Lenses
+    listSignalCatalogNodes_maxResults,
+    listSignalCatalogNodes_nextToken,
+    listSignalCatalogNodes_name,
+
+    -- * Destructuring the Response
+    ListSignalCatalogNodesResponse (..),
+    newListSignalCatalogNodesResponse,
+
+    -- * Response Lenses
+    listSignalCatalogNodesResponse_nextToken,
+    listSignalCatalogNodesResponse_nodes,
+    listSignalCatalogNodesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSignalCatalogNodes' smart constructor.
+data ListSignalCatalogNodes = ListSignalCatalogNodes'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the signal catalog to list information about.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSignalCatalogNodes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSignalCatalogNodes_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listSignalCatalogNodes_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'name', 'listSignalCatalogNodes_name' - The name of the signal catalog to list information about.
+newListSignalCatalogNodes ::
+  -- | 'name'
+  Prelude.Text ->
+  ListSignalCatalogNodes
+newListSignalCatalogNodes pName_ =
+  ListSignalCatalogNodes'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listSignalCatalogNodes_maxResults :: Lens.Lens' ListSignalCatalogNodes (Prelude.Maybe Prelude.Natural)
+listSignalCatalogNodes_maxResults = Lens.lens (\ListSignalCatalogNodes' {maxResults} -> maxResults) (\s@ListSignalCatalogNodes' {} a -> s {maxResults = a} :: ListSignalCatalogNodes)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listSignalCatalogNodes_nextToken :: Lens.Lens' ListSignalCatalogNodes (Prelude.Maybe Prelude.Text)
+listSignalCatalogNodes_nextToken = Lens.lens (\ListSignalCatalogNodes' {nextToken} -> nextToken) (\s@ListSignalCatalogNodes' {} a -> s {nextToken = a} :: ListSignalCatalogNodes)
+
+-- | The name of the signal catalog to list information about.
+listSignalCatalogNodes_name :: Lens.Lens' ListSignalCatalogNodes Prelude.Text
+listSignalCatalogNodes_name = Lens.lens (\ListSignalCatalogNodes' {name} -> name) (\s@ListSignalCatalogNodes' {} a -> s {name = a} :: ListSignalCatalogNodes)
+
+instance Core.AWSPager ListSignalCatalogNodes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSignalCatalogNodesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSignalCatalogNodesResponse_nodes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSignalCatalogNodes_nextToken
+          Lens..~ rs
+          Lens.^? listSignalCatalogNodesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSignalCatalogNodes where
+  type
+    AWSResponse ListSignalCatalogNodes =
+      ListSignalCatalogNodesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSignalCatalogNodesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "nodes" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSignalCatalogNodes where
+  hashWithSalt _salt ListSignalCatalogNodes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ListSignalCatalogNodes where
+  rnf ListSignalCatalogNodes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders ListSignalCatalogNodes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListSignalCatalogNodes" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSignalCatalogNodes where
+  toJSON ListSignalCatalogNodes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath ListSignalCatalogNodes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSignalCatalogNodes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSignalCatalogNodesResponse' smart constructor.
+data ListSignalCatalogNodesResponse = ListSignalCatalogNodesResponse'
+  { -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about nodes.
+    nodes :: Prelude.Maybe [Node],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSignalCatalogNodesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSignalCatalogNodesResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'nodes', 'listSignalCatalogNodesResponse_nodes' - A list of information about nodes.
+--
+-- 'httpStatus', 'listSignalCatalogNodesResponse_httpStatus' - The response's http status code.
+newListSignalCatalogNodesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSignalCatalogNodesResponse
+newListSignalCatalogNodesResponse pHttpStatus_ =
+  ListSignalCatalogNodesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      nodes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listSignalCatalogNodesResponse_nextToken :: Lens.Lens' ListSignalCatalogNodesResponse (Prelude.Maybe Prelude.Text)
+listSignalCatalogNodesResponse_nextToken = Lens.lens (\ListSignalCatalogNodesResponse' {nextToken} -> nextToken) (\s@ListSignalCatalogNodesResponse' {} a -> s {nextToken = a} :: ListSignalCatalogNodesResponse)
+
+-- | A list of information about nodes.
+listSignalCatalogNodesResponse_nodes :: Lens.Lens' ListSignalCatalogNodesResponse (Prelude.Maybe [Node])
+listSignalCatalogNodesResponse_nodes = Lens.lens (\ListSignalCatalogNodesResponse' {nodes} -> nodes) (\s@ListSignalCatalogNodesResponse' {} a -> s {nodes = a} :: ListSignalCatalogNodesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSignalCatalogNodesResponse_httpStatus :: Lens.Lens' ListSignalCatalogNodesResponse Prelude.Int
+listSignalCatalogNodesResponse_httpStatus = Lens.lens (\ListSignalCatalogNodesResponse' {httpStatus} -> httpStatus) (\s@ListSignalCatalogNodesResponse' {} a -> s {httpStatus = a} :: ListSignalCatalogNodesResponse)
+
+instance
+  Prelude.NFData
+    ListSignalCatalogNodesResponse
+  where
+  rnf ListSignalCatalogNodesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf nodes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListSignalCatalogs.hs b/gen/Amazonka/IoTFleetWise/ListSignalCatalogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListSignalCatalogs.hs
@@ -0,0 +1,247 @@
+{-# 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.IoTFleetWise.ListSignalCatalogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all the created signal catalogs in an Amazon Web Services account.
+--
+-- You can use to list information about each signal (node) specified in a
+-- signal catalog.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListSignalCatalogs
+  ( -- * Creating a Request
+    ListSignalCatalogs (..),
+    newListSignalCatalogs,
+
+    -- * Request Lenses
+    listSignalCatalogs_maxResults,
+    listSignalCatalogs_nextToken,
+
+    -- * Destructuring the Response
+    ListSignalCatalogsResponse (..),
+    newListSignalCatalogsResponse,
+
+    -- * Response Lenses
+    listSignalCatalogsResponse_nextToken,
+    listSignalCatalogsResponse_summaries,
+    listSignalCatalogsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSignalCatalogs' smart constructor.
+data ListSignalCatalogs = ListSignalCatalogs'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSignalCatalogs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSignalCatalogs_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listSignalCatalogs_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+newListSignalCatalogs ::
+  ListSignalCatalogs
+newListSignalCatalogs =
+  ListSignalCatalogs'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listSignalCatalogs_maxResults :: Lens.Lens' ListSignalCatalogs (Prelude.Maybe Prelude.Natural)
+listSignalCatalogs_maxResults = Lens.lens (\ListSignalCatalogs' {maxResults} -> maxResults) (\s@ListSignalCatalogs' {} a -> s {maxResults = a} :: ListSignalCatalogs)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listSignalCatalogs_nextToken :: Lens.Lens' ListSignalCatalogs (Prelude.Maybe Prelude.Text)
+listSignalCatalogs_nextToken = Lens.lens (\ListSignalCatalogs' {nextToken} -> nextToken) (\s@ListSignalCatalogs' {} a -> s {nextToken = a} :: ListSignalCatalogs)
+
+instance Core.AWSPager ListSignalCatalogs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSignalCatalogsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSignalCatalogsResponse_summaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSignalCatalogs_nextToken
+          Lens..~ rs
+          Lens.^? listSignalCatalogsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSignalCatalogs where
+  type
+    AWSResponse ListSignalCatalogs =
+      ListSignalCatalogsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSignalCatalogsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "summaries" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSignalCatalogs where
+  hashWithSalt _salt ListSignalCatalogs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListSignalCatalogs where
+  rnf ListSignalCatalogs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListSignalCatalogs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListSignalCatalogs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSignalCatalogs where
+  toJSON ListSignalCatalogs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListSignalCatalogs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSignalCatalogs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSignalCatalogsResponse' smart constructor.
+data ListSignalCatalogsResponse = ListSignalCatalogsResponse'
+  { -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about each signal catalog.
+    summaries :: Prelude.Maybe [SignalCatalogSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSignalCatalogsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSignalCatalogsResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'summaries', 'listSignalCatalogsResponse_summaries' - A list of information about each signal catalog.
+--
+-- 'httpStatus', 'listSignalCatalogsResponse_httpStatus' - The response's http status code.
+newListSignalCatalogsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSignalCatalogsResponse
+newListSignalCatalogsResponse pHttpStatus_ =
+  ListSignalCatalogsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      summaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listSignalCatalogsResponse_nextToken :: Lens.Lens' ListSignalCatalogsResponse (Prelude.Maybe Prelude.Text)
+listSignalCatalogsResponse_nextToken = Lens.lens (\ListSignalCatalogsResponse' {nextToken} -> nextToken) (\s@ListSignalCatalogsResponse' {} a -> s {nextToken = a} :: ListSignalCatalogsResponse)
+
+-- | A list of information about each signal catalog.
+listSignalCatalogsResponse_summaries :: Lens.Lens' ListSignalCatalogsResponse (Prelude.Maybe [SignalCatalogSummary])
+listSignalCatalogsResponse_summaries = Lens.lens (\ListSignalCatalogsResponse' {summaries} -> summaries) (\s@ListSignalCatalogsResponse' {} a -> s {summaries = a} :: ListSignalCatalogsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSignalCatalogsResponse_httpStatus :: Lens.Lens' ListSignalCatalogsResponse Prelude.Int
+listSignalCatalogsResponse_httpStatus = Lens.lens (\ListSignalCatalogsResponse' {httpStatus} -> httpStatus) (\s@ListSignalCatalogsResponse' {} a -> s {httpStatus = a} :: ListSignalCatalogsResponse)
+
+instance Prelude.NFData ListSignalCatalogsResponse where
+  rnf ListSignalCatalogsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf summaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListTagsForResource.hs b/gen/Amazonka/IoTFleetWise/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListTagsForResource.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.IoTFleetWise.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.IoTFleetWise.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.IoTFleetWise.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.
+    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.
+newListTagsForResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceARN_ =
+  ListTagsForResource' {resourceARN = pResourceARN_}
+
+-- | The ARN of the resource.
+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.postJSON (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.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceARN" Data..= resourceARN)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The list of tags assigned to the 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 list of tags assigned to the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of tags assigned to the 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/IoTFleetWise/ListVehicles.hs b/gen/Amazonka/IoTFleetWise/ListVehicles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListVehicles.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.ListVehicles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of summaries of created vehicles.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListVehicles
+  ( -- * Creating a Request
+    ListVehicles (..),
+    newListVehicles,
+
+    -- * Request Lenses
+    listVehicles_maxResults,
+    listVehicles_modelManifestArn,
+    listVehicles_nextToken,
+
+    -- * Destructuring the Response
+    ListVehiclesResponse (..),
+    newListVehiclesResponse,
+
+    -- * Response Lenses
+    listVehiclesResponse_nextToken,
+    listVehiclesResponse_vehicleSummaries,
+    listVehiclesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListVehicles' smart constructor.
+data ListVehicles = ListVehicles'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The Amazon Resource Name (ARN) of a vehicle model (model manifest). You
+    -- can use this optional parameter to list only the vehicles created from a
+    -- certain vehicle model.
+    modelManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVehicles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listVehicles_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'modelManifestArn', 'listVehicles_modelManifestArn' - The Amazon Resource Name (ARN) of a vehicle model (model manifest). You
+-- can use this optional parameter to list only the vehicles created from a
+-- certain vehicle model.
+--
+-- 'nextToken', 'listVehicles_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+newListVehicles ::
+  ListVehicles
+newListVehicles =
+  ListVehicles'
+    { maxResults = Prelude.Nothing,
+      modelManifestArn = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listVehicles_maxResults :: Lens.Lens' ListVehicles (Prelude.Maybe Prelude.Natural)
+listVehicles_maxResults = Lens.lens (\ListVehicles' {maxResults} -> maxResults) (\s@ListVehicles' {} a -> s {maxResults = a} :: ListVehicles)
+
+-- | The Amazon Resource Name (ARN) of a vehicle model (model manifest). You
+-- can use this optional parameter to list only the vehicles created from a
+-- certain vehicle model.
+listVehicles_modelManifestArn :: Lens.Lens' ListVehicles (Prelude.Maybe Prelude.Text)
+listVehicles_modelManifestArn = Lens.lens (\ListVehicles' {modelManifestArn} -> modelManifestArn) (\s@ListVehicles' {} a -> s {modelManifestArn = a} :: ListVehicles)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listVehicles_nextToken :: Lens.Lens' ListVehicles (Prelude.Maybe Prelude.Text)
+listVehicles_nextToken = Lens.lens (\ListVehicles' {nextToken} -> nextToken) (\s@ListVehicles' {} a -> s {nextToken = a} :: ListVehicles)
+
+instance Core.AWSPager ListVehicles where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listVehiclesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listVehiclesResponse_vehicleSummaries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listVehicles_nextToken
+          Lens..~ rs
+          Lens.^? listVehiclesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListVehicles where
+  type AWSResponse ListVehicles = ListVehiclesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListVehiclesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "vehicleSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListVehicles where
+  hashWithSalt _salt ListVehicles' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` modelManifestArn
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListVehicles where
+  rnf ListVehicles' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListVehicles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListVehicles" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListVehicles where
+  toJSON ListVehicles' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("modelManifestArn" Data..=)
+              Prelude.<$> modelManifestArn,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListVehicles where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListVehicles where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListVehiclesResponse' smart constructor.
+data ListVehiclesResponse = ListVehiclesResponse'
+  { -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of vehicles and information about them.
+    vehicleSummaries :: Prelude.Maybe [VehicleSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVehiclesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listVehiclesResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'vehicleSummaries', 'listVehiclesResponse_vehicleSummaries' - A list of vehicles and information about them.
+--
+-- 'httpStatus', 'listVehiclesResponse_httpStatus' - The response's http status code.
+newListVehiclesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListVehiclesResponse
+newListVehiclesResponse pHttpStatus_ =
+  ListVehiclesResponse'
+    { nextToken = Prelude.Nothing,
+      vehicleSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listVehiclesResponse_nextToken :: Lens.Lens' ListVehiclesResponse (Prelude.Maybe Prelude.Text)
+listVehiclesResponse_nextToken = Lens.lens (\ListVehiclesResponse' {nextToken} -> nextToken) (\s@ListVehiclesResponse' {} a -> s {nextToken = a} :: ListVehiclesResponse)
+
+-- | A list of vehicles and information about them.
+listVehiclesResponse_vehicleSummaries :: Lens.Lens' ListVehiclesResponse (Prelude.Maybe [VehicleSummary])
+listVehiclesResponse_vehicleSummaries = Lens.lens (\ListVehiclesResponse' {vehicleSummaries} -> vehicleSummaries) (\s@ListVehiclesResponse' {} a -> s {vehicleSummaries = a} :: ListVehiclesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listVehiclesResponse_httpStatus :: Lens.Lens' ListVehiclesResponse Prelude.Int
+listVehiclesResponse_httpStatus = Lens.lens (\ListVehiclesResponse' {httpStatus} -> httpStatus) (\s@ListVehiclesResponse' {} a -> s {httpStatus = a} :: ListVehiclesResponse)
+
+instance Prelude.NFData ListVehiclesResponse where
+  rnf ListVehiclesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vehicleSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/ListVehiclesInFleet.hs b/gen/Amazonka/IoTFleetWise/ListVehiclesInFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/ListVehiclesInFleet.hs
@@ -0,0 +1,259 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.ListVehiclesInFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of summaries of all vehicles associated with a fleet.
+--
+-- This API operation uses pagination. Specify the @nextToken@ parameter in
+-- the request to return more results.
+--
+-- This operation returns paginated results.
+module Amazonka.IoTFleetWise.ListVehiclesInFleet
+  ( -- * Creating a Request
+    ListVehiclesInFleet (..),
+    newListVehiclesInFleet,
+
+    -- * Request Lenses
+    listVehiclesInFleet_maxResults,
+    listVehiclesInFleet_nextToken,
+    listVehiclesInFleet_fleetId,
+
+    -- * Destructuring the Response
+    ListVehiclesInFleetResponse (..),
+    newListVehiclesInFleetResponse,
+
+    -- * Response Lenses
+    listVehiclesInFleetResponse_nextToken,
+    listVehiclesInFleetResponse_vehicles,
+    listVehiclesInFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListVehiclesInFleet' smart constructor.
+data ListVehiclesInFleet = ListVehiclesInFleet'
+  { -- | The maximum number of items to return, between 1 and 100, inclusive.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A pagination token for the next set of results.
+    --
+    -- If the results of a search are large, only a portion of the results are
+    -- returned, and a @nextToken@ pagination token is returned in the
+    -- response. To retrieve the next set of results, reissue the search
+    -- request and include the returned token. When all results have been
+    -- returned, the response does not contain a pagination token value.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a fleet.
+    fleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVehiclesInFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listVehiclesInFleet_maxResults' - The maximum number of items to return, between 1 and 100, inclusive.
+--
+-- 'nextToken', 'listVehiclesInFleet_nextToken' - A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+--
+-- 'fleetId', 'listVehiclesInFleet_fleetId' - The ID of a fleet.
+newListVehiclesInFleet ::
+  -- | 'fleetId'
+  Prelude.Text ->
+  ListVehiclesInFleet
+newListVehiclesInFleet pFleetId_ =
+  ListVehiclesInFleet'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      fleetId = pFleetId_
+    }
+
+-- | The maximum number of items to return, between 1 and 100, inclusive.
+listVehiclesInFleet_maxResults :: Lens.Lens' ListVehiclesInFleet (Prelude.Maybe Prelude.Natural)
+listVehiclesInFleet_maxResults = Lens.lens (\ListVehiclesInFleet' {maxResults} -> maxResults) (\s@ListVehiclesInFleet' {} a -> s {maxResults = a} :: ListVehiclesInFleet)
+
+-- | A pagination token for the next set of results.
+--
+-- If the results of a search are large, only a portion of the results are
+-- returned, and a @nextToken@ pagination token is returned in the
+-- response. To retrieve the next set of results, reissue the search
+-- request and include the returned token. When all results have been
+-- returned, the response does not contain a pagination token value.
+listVehiclesInFleet_nextToken :: Lens.Lens' ListVehiclesInFleet (Prelude.Maybe Prelude.Text)
+listVehiclesInFleet_nextToken = Lens.lens (\ListVehiclesInFleet' {nextToken} -> nextToken) (\s@ListVehiclesInFleet' {} a -> s {nextToken = a} :: ListVehiclesInFleet)
+
+-- | The ID of a fleet.
+listVehiclesInFleet_fleetId :: Lens.Lens' ListVehiclesInFleet Prelude.Text
+listVehiclesInFleet_fleetId = Lens.lens (\ListVehiclesInFleet' {fleetId} -> fleetId) (\s@ListVehiclesInFleet' {} a -> s {fleetId = a} :: ListVehiclesInFleet)
+
+instance Core.AWSPager ListVehiclesInFleet where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listVehiclesInFleetResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listVehiclesInFleetResponse_vehicles
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listVehiclesInFleet_nextToken
+          Lens..~ rs
+          Lens.^? listVehiclesInFleetResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListVehiclesInFleet where
+  type
+    AWSResponse ListVehiclesInFleet =
+      ListVehiclesInFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListVehiclesInFleetResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "vehicles" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListVehiclesInFleet where
+  hashWithSalt _salt ListVehiclesInFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData ListVehiclesInFleet where
+  rnf ListVehiclesInFleet' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf fleetId
+
+instance Data.ToHeaders ListVehiclesInFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.ListVehiclesInFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListVehiclesInFleet where
+  toJSON ListVehiclesInFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("fleetId" Data..= fleetId)
+          ]
+      )
+
+instance Data.ToPath ListVehiclesInFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListVehiclesInFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListVehiclesInFleetResponse' smart constructor.
+data ListVehiclesInFleetResponse = ListVehiclesInFleetResponse'
+  { -- | The token to retrieve the next set of results, or @null@ if there are no
+    -- more results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of vehicles associated with the fleet.
+    vehicles :: 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 'ListVehiclesInFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listVehiclesInFleetResponse_nextToken' - The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+--
+-- 'vehicles', 'listVehiclesInFleetResponse_vehicles' - A list of vehicles associated with the fleet.
+--
+-- 'httpStatus', 'listVehiclesInFleetResponse_httpStatus' - The response's http status code.
+newListVehiclesInFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListVehiclesInFleetResponse
+newListVehiclesInFleetResponse pHttpStatus_ =
+  ListVehiclesInFleetResponse'
+    { nextToken =
+        Prelude.Nothing,
+      vehicles = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to retrieve the next set of results, or @null@ if there are no
+-- more results.
+listVehiclesInFleetResponse_nextToken :: Lens.Lens' ListVehiclesInFleetResponse (Prelude.Maybe Prelude.Text)
+listVehiclesInFleetResponse_nextToken = Lens.lens (\ListVehiclesInFleetResponse' {nextToken} -> nextToken) (\s@ListVehiclesInFleetResponse' {} a -> s {nextToken = a} :: ListVehiclesInFleetResponse)
+
+-- | A list of vehicles associated with the fleet.
+listVehiclesInFleetResponse_vehicles :: Lens.Lens' ListVehiclesInFleetResponse (Prelude.Maybe [Prelude.Text])
+listVehiclesInFleetResponse_vehicles = Lens.lens (\ListVehiclesInFleetResponse' {vehicles} -> vehicles) (\s@ListVehiclesInFleetResponse' {} a -> s {vehicles = a} :: ListVehiclesInFleetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listVehiclesInFleetResponse_httpStatus :: Lens.Lens' ListVehiclesInFleetResponse Prelude.Int
+listVehiclesInFleetResponse_httpStatus = Lens.lens (\ListVehiclesInFleetResponse' {httpStatus} -> httpStatus) (\s@ListVehiclesInFleetResponse' {} a -> s {httpStatus = a} :: ListVehiclesInFleetResponse)
+
+instance Prelude.NFData ListVehiclesInFleetResponse where
+  rnf ListVehiclesInFleetResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vehicles
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/PutLoggingOptions.hs b/gen/Amazonka/IoTFleetWise/PutLoggingOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/PutLoggingOptions.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.IoTFleetWise.PutLoggingOptions
+-- 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 or updates the logging option.
+module Amazonka.IoTFleetWise.PutLoggingOptions
+  ( -- * Creating a Request
+    PutLoggingOptions (..),
+    newPutLoggingOptions,
+
+    -- * Request Lenses
+    putLoggingOptions_cloudWatchLogDelivery,
+
+    -- * Destructuring the Response
+    PutLoggingOptionsResponse (..),
+    newPutLoggingOptionsResponse,
+
+    -- * Response Lenses
+    putLoggingOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutLoggingOptions' smart constructor.
+data PutLoggingOptions = PutLoggingOptions'
+  { -- | Creates or updates the log delivery option to Amazon CloudWatch Logs.
+    cloudWatchLogDelivery :: CloudWatchLogDeliveryOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLoggingOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogDelivery', 'putLoggingOptions_cloudWatchLogDelivery' - Creates or updates the log delivery option to Amazon CloudWatch Logs.
+newPutLoggingOptions ::
+  -- | 'cloudWatchLogDelivery'
+  CloudWatchLogDeliveryOptions ->
+  PutLoggingOptions
+newPutLoggingOptions pCloudWatchLogDelivery_ =
+  PutLoggingOptions'
+    { cloudWatchLogDelivery =
+        pCloudWatchLogDelivery_
+    }
+
+-- | Creates or updates the log delivery option to Amazon CloudWatch Logs.
+putLoggingOptions_cloudWatchLogDelivery :: Lens.Lens' PutLoggingOptions CloudWatchLogDeliveryOptions
+putLoggingOptions_cloudWatchLogDelivery = Lens.lens (\PutLoggingOptions' {cloudWatchLogDelivery} -> cloudWatchLogDelivery) (\s@PutLoggingOptions' {} a -> s {cloudWatchLogDelivery = a} :: PutLoggingOptions)
+
+instance Core.AWSRequest PutLoggingOptions where
+  type
+    AWSResponse PutLoggingOptions =
+      PutLoggingOptionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutLoggingOptionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutLoggingOptions where
+  hashWithSalt _salt PutLoggingOptions' {..} =
+    _salt `Prelude.hashWithSalt` cloudWatchLogDelivery
+
+instance Prelude.NFData PutLoggingOptions where
+  rnf PutLoggingOptions' {..} =
+    Prelude.rnf cloudWatchLogDelivery
+
+instance Data.ToHeaders PutLoggingOptions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.PutLoggingOptions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutLoggingOptions where
+  toJSON PutLoggingOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "cloudWatchLogDelivery"
+                  Data..= cloudWatchLogDelivery
+              )
+          ]
+      )
+
+instance Data.ToPath PutLoggingOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutLoggingOptions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutLoggingOptionsResponse' smart constructor.
+data PutLoggingOptionsResponse = PutLoggingOptionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutLoggingOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putLoggingOptionsResponse_httpStatus' - The response's http status code.
+newPutLoggingOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutLoggingOptionsResponse
+newPutLoggingOptionsResponse pHttpStatus_ =
+  PutLoggingOptionsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putLoggingOptionsResponse_httpStatus :: Lens.Lens' PutLoggingOptionsResponse Prelude.Int
+putLoggingOptionsResponse_httpStatus = Lens.lens (\PutLoggingOptionsResponse' {httpStatus} -> httpStatus) (\s@PutLoggingOptionsResponse' {} a -> s {httpStatus = a} :: PutLoggingOptionsResponse)
+
+instance Prelude.NFData PutLoggingOptionsResponse where
+  rnf PutLoggingOptionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/RegisterAccount.hs b/gen/Amazonka/IoTFleetWise/RegisterAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/RegisterAccount.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.RegisterAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Registers your Amazon Web Services account, IAM, and Amazon Timestream
+-- resources so Amazon Web Services IoT FleetWise can transfer your vehicle
+-- data to the Amazon Web Services Cloud. For more information, including
+-- step-by-step procedures, see
+-- <https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/setting-up.html Setting up Amazon Web Services IoT FleetWise>.
+--
+-- An Amazon Web Services account is __not__ the same thing as a \"user
+-- account\". An
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_identity-management.html#intro-identity-users Amazon Web Services user>
+-- is an identity that you create using Identity and Access Management
+-- (IAM) and takes the form of either an
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html IAM user>
+-- or an
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html IAM role, both with credentials>.
+-- A single Amazon Web Services account can, and typically does, contain
+-- many users and roles.
+module Amazonka.IoTFleetWise.RegisterAccount
+  ( -- * Creating a Request
+    RegisterAccount (..),
+    newRegisterAccount,
+
+    -- * Request Lenses
+    registerAccount_iamResources,
+    registerAccount_timestreamResources,
+
+    -- * Destructuring the Response
+    RegisterAccountResponse (..),
+    newRegisterAccountResponse,
+
+    -- * Response Lenses
+    registerAccountResponse_httpStatus,
+    registerAccountResponse_registerAccountStatus,
+    registerAccountResponse_timestreamResources,
+    registerAccountResponse_iamResources,
+    registerAccountResponse_creationTime,
+    registerAccountResponse_lastModificationTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRegisterAccount' smart constructor.
+data RegisterAccount = RegisterAccount'
+  { -- | The IAM resource that allows Amazon Web Services IoT FleetWise to send
+    -- data to Amazon Timestream.
+    iamResources :: Prelude.Maybe IamResources,
+    timestreamResources :: TimestreamResources
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iamResources', 'registerAccount_iamResources' - The IAM resource that allows Amazon Web Services IoT FleetWise to send
+-- data to Amazon Timestream.
+--
+-- 'timestreamResources', 'registerAccount_timestreamResources' - Undocumented member.
+newRegisterAccount ::
+  -- | 'timestreamResources'
+  TimestreamResources ->
+  RegisterAccount
+newRegisterAccount pTimestreamResources_ =
+  RegisterAccount'
+    { iamResources = Prelude.Nothing,
+      timestreamResources = pTimestreamResources_
+    }
+
+-- | The IAM resource that allows Amazon Web Services IoT FleetWise to send
+-- data to Amazon Timestream.
+registerAccount_iamResources :: Lens.Lens' RegisterAccount (Prelude.Maybe IamResources)
+registerAccount_iamResources = Lens.lens (\RegisterAccount' {iamResources} -> iamResources) (\s@RegisterAccount' {} a -> s {iamResources = a} :: RegisterAccount)
+
+-- | Undocumented member.
+registerAccount_timestreamResources :: Lens.Lens' RegisterAccount TimestreamResources
+registerAccount_timestreamResources = Lens.lens (\RegisterAccount' {timestreamResources} -> timestreamResources) (\s@RegisterAccount' {} a -> s {timestreamResources = a} :: RegisterAccount)
+
+instance Core.AWSRequest RegisterAccount where
+  type
+    AWSResponse RegisterAccount =
+      RegisterAccountResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RegisterAccountResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "registerAccountStatus")
+            Prelude.<*> (x Data..:> "timestreamResources")
+            Prelude.<*> (x Data..:> "iamResources")
+            Prelude.<*> (x Data..:> "creationTime")
+            Prelude.<*> (x Data..:> "lastModificationTime")
+      )
+
+instance Prelude.Hashable RegisterAccount where
+  hashWithSalt _salt RegisterAccount' {..} =
+    _salt
+      `Prelude.hashWithSalt` iamResources
+      `Prelude.hashWithSalt` timestreamResources
+
+instance Prelude.NFData RegisterAccount where
+  rnf RegisterAccount' {..} =
+    Prelude.rnf iamResources
+      `Prelude.seq` Prelude.rnf timestreamResources
+
+instance Data.ToHeaders RegisterAccount where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.RegisterAccount" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RegisterAccount where
+  toJSON RegisterAccount' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("iamResources" Data..=) Prelude.<$> iamResources,
+            Prelude.Just
+              ("timestreamResources" Data..= timestreamResources)
+          ]
+      )
+
+instance Data.ToPath RegisterAccount where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RegisterAccount where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRegisterAccountResponse' smart constructor.
+data RegisterAccountResponse = RegisterAccountResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The status of registering your Amazon Web Services account, IAM role,
+    -- and Timestream resources.
+    registerAccountStatus :: RegistrationStatus,
+    timestreamResources :: TimestreamResources,
+    -- | The registered IAM resource that allows Amazon Web Services IoT
+    -- FleetWise to send data to Amazon Timestream.
+    iamResources :: IamResources,
+    -- | The time the account was registered, in seconds since epoch (January 1,
+    -- 1970 at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The time this registration was last updated, in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time).
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'registerAccountResponse_httpStatus' - The response's http status code.
+--
+-- 'registerAccountStatus', 'registerAccountResponse_registerAccountStatus' - The status of registering your Amazon Web Services account, IAM role,
+-- and Timestream resources.
+--
+-- 'timestreamResources', 'registerAccountResponse_timestreamResources' - Undocumented member.
+--
+-- 'iamResources', 'registerAccountResponse_iamResources' - The registered IAM resource that allows Amazon Web Services IoT
+-- FleetWise to send data to Amazon Timestream.
+--
+-- 'creationTime', 'registerAccountResponse_creationTime' - The time the account was registered, in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+--
+-- 'lastModificationTime', 'registerAccountResponse_lastModificationTime' - The time this registration was last updated, in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+newRegisterAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'registerAccountStatus'
+  RegistrationStatus ->
+  -- | 'timestreamResources'
+  TimestreamResources ->
+  -- | 'iamResources'
+  IamResources ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  RegisterAccountResponse
+newRegisterAccountResponse
+  pHttpStatus_
+  pRegisterAccountStatus_
+  pTimestreamResources_
+  pIamResources_
+  pCreationTime_
+  pLastModificationTime_ =
+    RegisterAccountResponse'
+      { httpStatus = pHttpStatus_,
+        registerAccountStatus = pRegisterAccountStatus_,
+        timestreamResources = pTimestreamResources_,
+        iamResources = pIamResources_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | The response's http status code.
+registerAccountResponse_httpStatus :: Lens.Lens' RegisterAccountResponse Prelude.Int
+registerAccountResponse_httpStatus = Lens.lens (\RegisterAccountResponse' {httpStatus} -> httpStatus) (\s@RegisterAccountResponse' {} a -> s {httpStatus = a} :: RegisterAccountResponse)
+
+-- | The status of registering your Amazon Web Services account, IAM role,
+-- and Timestream resources.
+registerAccountResponse_registerAccountStatus :: Lens.Lens' RegisterAccountResponse RegistrationStatus
+registerAccountResponse_registerAccountStatus = Lens.lens (\RegisterAccountResponse' {registerAccountStatus} -> registerAccountStatus) (\s@RegisterAccountResponse' {} a -> s {registerAccountStatus = a} :: RegisterAccountResponse)
+
+-- | Undocumented member.
+registerAccountResponse_timestreamResources :: Lens.Lens' RegisterAccountResponse TimestreamResources
+registerAccountResponse_timestreamResources = Lens.lens (\RegisterAccountResponse' {timestreamResources} -> timestreamResources) (\s@RegisterAccountResponse' {} a -> s {timestreamResources = a} :: RegisterAccountResponse)
+
+-- | The registered IAM resource that allows Amazon Web Services IoT
+-- FleetWise to send data to Amazon Timestream.
+registerAccountResponse_iamResources :: Lens.Lens' RegisterAccountResponse IamResources
+registerAccountResponse_iamResources = Lens.lens (\RegisterAccountResponse' {iamResources} -> iamResources) (\s@RegisterAccountResponse' {} a -> s {iamResources = a} :: RegisterAccountResponse)
+
+-- | The time the account was registered, in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+registerAccountResponse_creationTime :: Lens.Lens' RegisterAccountResponse Prelude.UTCTime
+registerAccountResponse_creationTime = Lens.lens (\RegisterAccountResponse' {creationTime} -> creationTime) (\s@RegisterAccountResponse' {} a -> s {creationTime = a} :: RegisterAccountResponse) Prelude.. Data._Time
+
+-- | The time this registration was last updated, in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+registerAccountResponse_lastModificationTime :: Lens.Lens' RegisterAccountResponse Prelude.UTCTime
+registerAccountResponse_lastModificationTime = Lens.lens (\RegisterAccountResponse' {lastModificationTime} -> lastModificationTime) (\s@RegisterAccountResponse' {} a -> s {lastModificationTime = a} :: RegisterAccountResponse) Prelude.. Data._Time
+
+instance Prelude.NFData RegisterAccountResponse where
+  rnf RegisterAccountResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf registerAccountStatus
+      `Prelude.seq` Prelude.rnf timestreamResources
+      `Prelude.seq` Prelude.rnf iamResources
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/TagResource.hs b/gen/Amazonka/IoTFleetWise/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/TagResource.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.IoTFleetWise.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 to or modifies the tags of the given resource. Tags are metadata
+-- which can be used to manage a resource.
+module Amazonka.IoTFleetWise.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.IoTFleetWise.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.
+    resourceARN :: Prelude.Text,
+    -- | The new or modified tags for the 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.
+--
+-- 'tags', 'tagResource_tags' - The new or modified tags for the resource.
+newTagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceARN_ =
+  TagResource'
+    { resourceARN = pResourceARN_,
+      tags = Prelude.mempty
+    }
+
+-- | The ARN of the resource.
+tagResource_resourceARN :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceARN = Lens.lens (\TagResource' {resourceARN} -> resourceARN) (\s@TagResource' {} a -> s {resourceARN = a} :: TagResource)
+
+-- | The new or modified tags for the 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.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.TagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceARN" Data..= resourceARN),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/Types.hs b/gen/Amazonka/IoTFleetWise/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types.hs
@@ -0,0 +1,600 @@
+{-# 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.IoTFleetWise.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.IoTFleetWise.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _DecoderManifestValidationException,
+    _InternalServerException,
+    _InvalidNodeException,
+    _InvalidSignalsException,
+    _LimitExceededException,
+    _ResourceNotFoundException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * CampaignStatus
+    CampaignStatus (..),
+
+    -- * Compression
+    Compression (..),
+
+    -- * DiagnosticsMode
+    DiagnosticsMode (..),
+
+    -- * LogType
+    LogType (..),
+
+    -- * ManifestStatus
+    ManifestStatus (..),
+
+    -- * NetworkInterfaceType
+    NetworkInterfaceType (..),
+
+    -- * NodeDataType
+    NodeDataType (..),
+
+    -- * RegistrationStatus
+    RegistrationStatus (..),
+
+    -- * SignalDecoderType
+    SignalDecoderType (..),
+
+    -- * SpoolingMode
+    SpoolingMode (..),
+
+    -- * TriggerMode
+    TriggerMode (..),
+
+    -- * UpdateCampaignAction
+    UpdateCampaignAction (..),
+
+    -- * UpdateMode
+    UpdateMode (..),
+
+    -- * VehicleAssociationBehavior
+    VehicleAssociationBehavior (..),
+
+    -- * VehicleState
+    VehicleState (..),
+
+    -- * Actuator
+    Actuator (..),
+    newActuator,
+    actuator_allowedValues,
+    actuator_assignedValue,
+    actuator_description,
+    actuator_max,
+    actuator_min,
+    actuator_unit,
+    actuator_fullyQualifiedName,
+    actuator_dataType,
+
+    -- * Attribute
+    Attribute (..),
+    newAttribute,
+    attribute_allowedValues,
+    attribute_assignedValue,
+    attribute_defaultValue,
+    attribute_description,
+    attribute_max,
+    attribute_min,
+    attribute_unit,
+    attribute_fullyQualifiedName,
+    attribute_dataType,
+
+    -- * Branch
+    Branch (..),
+    newBranch,
+    branch_description,
+    branch_fullyQualifiedName,
+
+    -- * CampaignSummary
+    CampaignSummary (..),
+    newCampaignSummary,
+    campaignSummary_arn,
+    campaignSummary_description,
+    campaignSummary_name,
+    campaignSummary_signalCatalogArn,
+    campaignSummary_status,
+    campaignSummary_targetArn,
+    campaignSummary_creationTime,
+    campaignSummary_lastModificationTime,
+
+    -- * CanDbcDefinition
+    CanDbcDefinition (..),
+    newCanDbcDefinition,
+    canDbcDefinition_signalsMap,
+    canDbcDefinition_networkInterface,
+    canDbcDefinition_canDbcFiles,
+
+    -- * CanInterface
+    CanInterface (..),
+    newCanInterface,
+    canInterface_protocolName,
+    canInterface_protocolVersion,
+    canInterface_name,
+
+    -- * CanSignal
+    CanSignal (..),
+    newCanSignal,
+    canSignal_name,
+    canSignal_messageId,
+    canSignal_isBigEndian,
+    canSignal_isSigned,
+    canSignal_startBit,
+    canSignal_offset,
+    canSignal_factor,
+    canSignal_length,
+
+    -- * CloudWatchLogDeliveryOptions
+    CloudWatchLogDeliveryOptions (..),
+    newCloudWatchLogDeliveryOptions,
+    cloudWatchLogDeliveryOptions_logGroupName,
+    cloudWatchLogDeliveryOptions_logType,
+
+    -- * CollectionScheme
+    CollectionScheme (..),
+    newCollectionScheme,
+    collectionScheme_conditionBasedCollectionScheme,
+    collectionScheme_timeBasedCollectionScheme,
+
+    -- * ConditionBasedCollectionScheme
+    ConditionBasedCollectionScheme (..),
+    newConditionBasedCollectionScheme,
+    conditionBasedCollectionScheme_conditionLanguageVersion,
+    conditionBasedCollectionScheme_minimumTriggerIntervalMs,
+    conditionBasedCollectionScheme_triggerMode,
+    conditionBasedCollectionScheme_expression,
+
+    -- * CreateVehicleError
+    CreateVehicleError (..),
+    newCreateVehicleError,
+    createVehicleError_code,
+    createVehicleError_message,
+    createVehicleError_vehicleName,
+
+    -- * CreateVehicleRequestItem
+    CreateVehicleRequestItem (..),
+    newCreateVehicleRequestItem,
+    createVehicleRequestItem_associationBehavior,
+    createVehicleRequestItem_attributes,
+    createVehicleRequestItem_tags,
+    createVehicleRequestItem_vehicleName,
+    createVehicleRequestItem_modelManifestArn,
+    createVehicleRequestItem_decoderManifestArn,
+
+    -- * CreateVehicleResponseItem
+    CreateVehicleResponseItem (..),
+    newCreateVehicleResponseItem,
+    createVehicleResponseItem_arn,
+    createVehicleResponseItem_thingArn,
+    createVehicleResponseItem_vehicleName,
+
+    -- * DecoderManifestSummary
+    DecoderManifestSummary (..),
+    newDecoderManifestSummary,
+    decoderManifestSummary_arn,
+    decoderManifestSummary_description,
+    decoderManifestSummary_modelManifestArn,
+    decoderManifestSummary_name,
+    decoderManifestSummary_status,
+    decoderManifestSummary_creationTime,
+    decoderManifestSummary_lastModificationTime,
+
+    -- * FleetSummary
+    FleetSummary (..),
+    newFleetSummary,
+    fleetSummary_description,
+    fleetSummary_lastModificationTime,
+    fleetSummary_id,
+    fleetSummary_arn,
+    fleetSummary_signalCatalogArn,
+    fleetSummary_creationTime,
+
+    -- * FormattedVss
+    FormattedVss (..),
+    newFormattedVss,
+    formattedVss_vssJson,
+
+    -- * IamRegistrationResponse
+    IamRegistrationResponse (..),
+    newIamRegistrationResponse,
+    iamRegistrationResponse_errorMessage,
+    iamRegistrationResponse_roleArn,
+    iamRegistrationResponse_registrationStatus,
+
+    -- * IamResources
+    IamResources (..),
+    newIamResources,
+    iamResources_roleArn,
+
+    -- * ModelManifestSummary
+    ModelManifestSummary (..),
+    newModelManifestSummary,
+    modelManifestSummary_arn,
+    modelManifestSummary_description,
+    modelManifestSummary_name,
+    modelManifestSummary_signalCatalogArn,
+    modelManifestSummary_status,
+    modelManifestSummary_creationTime,
+    modelManifestSummary_lastModificationTime,
+
+    -- * NetworkFileDefinition
+    NetworkFileDefinition (..),
+    newNetworkFileDefinition,
+    networkFileDefinition_canDbc,
+
+    -- * NetworkInterface
+    NetworkInterface (..),
+    newNetworkInterface,
+    networkInterface_canInterface,
+    networkInterface_obdInterface,
+    networkInterface_interfaceId,
+    networkInterface_type,
+
+    -- * Node
+    Node (..),
+    newNode,
+    node_actuator,
+    node_attribute,
+    node_branch,
+    node_sensor,
+
+    -- * NodeCounts
+    NodeCounts (..),
+    newNodeCounts,
+    nodeCounts_totalActuators,
+    nodeCounts_totalAttributes,
+    nodeCounts_totalBranches,
+    nodeCounts_totalNodes,
+    nodeCounts_totalSensors,
+
+    -- * ObdInterface
+    ObdInterface (..),
+    newObdInterface,
+    obdInterface_dtcRequestIntervalSeconds,
+    obdInterface_hasTransmissionEcu,
+    obdInterface_obdStandard,
+    obdInterface_pidRequestIntervalSeconds,
+    obdInterface_useExtendedIds,
+    obdInterface_name,
+    obdInterface_requestMessageId,
+
+    -- * ObdSignal
+    ObdSignal (..),
+    newObdSignal,
+    obdSignal_bitMaskLength,
+    obdSignal_bitRightShift,
+    obdSignal_pidResponseLength,
+    obdSignal_serviceMode,
+    obdSignal_pid,
+    obdSignal_scaling,
+    obdSignal_offset,
+    obdSignal_startByte,
+    obdSignal_byteLength,
+
+    -- * Sensor
+    Sensor (..),
+    newSensor,
+    sensor_allowedValues,
+    sensor_description,
+    sensor_max,
+    sensor_min,
+    sensor_unit,
+    sensor_fullyQualifiedName,
+    sensor_dataType,
+
+    -- * SignalCatalogSummary
+    SignalCatalogSummary (..),
+    newSignalCatalogSummary,
+    signalCatalogSummary_arn,
+    signalCatalogSummary_creationTime,
+    signalCatalogSummary_lastModificationTime,
+    signalCatalogSummary_name,
+
+    -- * SignalDecoder
+    SignalDecoder (..),
+    newSignalDecoder,
+    signalDecoder_canSignal,
+    signalDecoder_obdSignal,
+    signalDecoder_fullyQualifiedName,
+    signalDecoder_type,
+    signalDecoder_interfaceId,
+
+    -- * SignalInformation
+    SignalInformation (..),
+    newSignalInformation,
+    signalInformation_maxSampleCount,
+    signalInformation_minimumSamplingIntervalMs,
+    signalInformation_name,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TimeBasedCollectionScheme
+    TimeBasedCollectionScheme (..),
+    newTimeBasedCollectionScheme,
+    timeBasedCollectionScheme_periodMs,
+
+    -- * TimestreamRegistrationResponse
+    TimestreamRegistrationResponse (..),
+    newTimestreamRegistrationResponse,
+    timestreamRegistrationResponse_errorMessage,
+    timestreamRegistrationResponse_timestreamDatabaseArn,
+    timestreamRegistrationResponse_timestreamTableArn,
+    timestreamRegistrationResponse_timestreamDatabaseName,
+    timestreamRegistrationResponse_timestreamTableName,
+    timestreamRegistrationResponse_registrationStatus,
+
+    -- * TimestreamResources
+    TimestreamResources (..),
+    newTimestreamResources,
+    timestreamResources_timestreamDatabaseName,
+    timestreamResources_timestreamTableName,
+
+    -- * UpdateVehicleError
+    UpdateVehicleError (..),
+    newUpdateVehicleError,
+    updateVehicleError_code,
+    updateVehicleError_message,
+    updateVehicleError_vehicleName,
+
+    -- * UpdateVehicleRequestItem
+    UpdateVehicleRequestItem (..),
+    newUpdateVehicleRequestItem,
+    updateVehicleRequestItem_attributeUpdateMode,
+    updateVehicleRequestItem_attributes,
+    updateVehicleRequestItem_decoderManifestArn,
+    updateVehicleRequestItem_modelManifestArn,
+    updateVehicleRequestItem_vehicleName,
+
+    -- * UpdateVehicleResponseItem
+    UpdateVehicleResponseItem (..),
+    newUpdateVehicleResponseItem,
+    updateVehicleResponseItem_arn,
+    updateVehicleResponseItem_vehicleName,
+
+    -- * VehicleStatus
+    VehicleStatus (..),
+    newVehicleStatus,
+    vehicleStatus_campaignName,
+    vehicleStatus_status,
+    vehicleStatus_vehicleName,
+
+    -- * VehicleSummary
+    VehicleSummary (..),
+    newVehicleSummary,
+    vehicleSummary_vehicleName,
+    vehicleSummary_arn,
+    vehicleSummary_modelManifestArn,
+    vehicleSummary_decoderManifestArn,
+    vehicleSummary_creationTime,
+    vehicleSummary_lastModificationTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.IoTFleetWise.Types.Actuator
+import Amazonka.IoTFleetWise.Types.Attribute
+import Amazonka.IoTFleetWise.Types.Branch
+import Amazonka.IoTFleetWise.Types.CampaignStatus
+import Amazonka.IoTFleetWise.Types.CampaignSummary
+import Amazonka.IoTFleetWise.Types.CanDbcDefinition
+import Amazonka.IoTFleetWise.Types.CanInterface
+import Amazonka.IoTFleetWise.Types.CanSignal
+import Amazonka.IoTFleetWise.Types.CloudWatchLogDeliveryOptions
+import Amazonka.IoTFleetWise.Types.CollectionScheme
+import Amazonka.IoTFleetWise.Types.Compression
+import Amazonka.IoTFleetWise.Types.ConditionBasedCollectionScheme
+import Amazonka.IoTFleetWise.Types.CreateVehicleError
+import Amazonka.IoTFleetWise.Types.CreateVehicleRequestItem
+import Amazonka.IoTFleetWise.Types.CreateVehicleResponseItem
+import Amazonka.IoTFleetWise.Types.DecoderManifestSummary
+import Amazonka.IoTFleetWise.Types.DiagnosticsMode
+import Amazonka.IoTFleetWise.Types.FleetSummary
+import Amazonka.IoTFleetWise.Types.FormattedVss
+import Amazonka.IoTFleetWise.Types.IamRegistrationResponse
+import Amazonka.IoTFleetWise.Types.IamResources
+import Amazonka.IoTFleetWise.Types.LogType
+import Amazonka.IoTFleetWise.Types.ManifestStatus
+import Amazonka.IoTFleetWise.Types.ModelManifestSummary
+import Amazonka.IoTFleetWise.Types.NetworkFileDefinition
+import Amazonka.IoTFleetWise.Types.NetworkInterface
+import Amazonka.IoTFleetWise.Types.NetworkInterfaceType
+import Amazonka.IoTFleetWise.Types.Node
+import Amazonka.IoTFleetWise.Types.NodeCounts
+import Amazonka.IoTFleetWise.Types.NodeDataType
+import Amazonka.IoTFleetWise.Types.ObdInterface
+import Amazonka.IoTFleetWise.Types.ObdSignal
+import Amazonka.IoTFleetWise.Types.RegistrationStatus
+import Amazonka.IoTFleetWise.Types.Sensor
+import Amazonka.IoTFleetWise.Types.SignalCatalogSummary
+import Amazonka.IoTFleetWise.Types.SignalDecoder
+import Amazonka.IoTFleetWise.Types.SignalDecoderType
+import Amazonka.IoTFleetWise.Types.SignalInformation
+import Amazonka.IoTFleetWise.Types.SpoolingMode
+import Amazonka.IoTFleetWise.Types.Tag
+import Amazonka.IoTFleetWise.Types.TimeBasedCollectionScheme
+import Amazonka.IoTFleetWise.Types.TimestreamRegistrationResponse
+import Amazonka.IoTFleetWise.Types.TimestreamResources
+import Amazonka.IoTFleetWise.Types.TriggerMode
+import Amazonka.IoTFleetWise.Types.UpdateCampaignAction
+import Amazonka.IoTFleetWise.Types.UpdateMode
+import Amazonka.IoTFleetWise.Types.UpdateVehicleError
+import Amazonka.IoTFleetWise.Types.UpdateVehicleRequestItem
+import Amazonka.IoTFleetWise.Types.UpdateVehicleResponseItem
+import Amazonka.IoTFleetWise.Types.VehicleAssociationBehavior
+import Amazonka.IoTFleetWise.Types.VehicleState
+import Amazonka.IoTFleetWise.Types.VehicleStatus
+import Amazonka.IoTFleetWise.Types.VehicleSummary
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-06-17@ of the Amazon IoT FleetWise SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "IoTFleetWise",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "iotfleetwise",
+      Core.signingName = "iotfleetwise",
+      Core.version = "2021-06-17",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "IoTFleetWise",
+      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
+
+-- | You don\'t have sufficient permission to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+
+-- | The request has conflicting operations. This can occur if you\'re trying
+-- to perform more than one operation on the same resource at the same
+-- time.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+
+-- | The request couldn\'t be completed because it contains signal decoders
+-- with one or more validation errors.
+_DecoderManifestValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DecoderManifestValidationException =
+  Core._MatchServiceError
+    defaultService
+    "DecoderManifestValidationException"
+
+-- | The request couldn\'t be completed because the server temporarily
+-- failed.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+
+-- | The specified node type doesn\'t match the expected node type for a
+-- node. You can specify the node type as branch, sensor, actuator, or
+-- attribute.
+_InvalidNodeException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidNodeException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidNodeException"
+
+-- | The request couldn\'t be completed because it contains signals that
+-- aren\'t valid.
+_InvalidSignalsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidSignalsException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidSignalsException"
+
+-- | A service quota was exceeded.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+
+-- | The resource wasn\'t found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+
+-- | The request couldn\'t be completed due to throttling.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+
+-- | The input fails to satisfy the constraints specified by an Amazon Web
+-- Services service.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
diff --git a/gen/Amazonka/IoTFleetWise/Types/Actuator.hs b/gen/Amazonka/IoTFleetWise/Types/Actuator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/Actuator.hs
@@ -0,0 +1,185 @@
+{-# 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.IoTFleetWise.Types.Actuator
+-- 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.IoTFleetWise.Types.Actuator where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.NodeDataType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A signal that represents a vehicle device such as the engine, heater,
+-- and door locks. Data from an actuator reports the state of a certain
+-- vehicle device.
+--
+-- Updating actuator data can change the state of a device. For example,
+-- you can turn on or off the heater by updating its actuator data.
+--
+-- /See:/ 'newActuator' smart constructor.
+data Actuator = Actuator'
+  { -- | A list of possible values an actuator can take.
+    allowedValues :: Prelude.Maybe [Prelude.Text],
+    -- | A specified value for the actuator.
+    assignedValue :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the actuator.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The specified possible maximum value of an actuator.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The specified possible minimum value of an actuator.
+    min :: Prelude.Maybe Prelude.Double,
+    -- | The scientific unit for the actuator.
+    unit :: Prelude.Maybe Prelude.Text,
+    -- | The fully qualified name of the actuator. For example, the fully
+    -- qualified name of an actuator might be @Vehicle.Front.Left.Door.Lock@.
+    fullyQualifiedName :: Prelude.Text,
+    -- | The specified data type of the actuator.
+    dataType :: NodeDataType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Actuator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowedValues', 'actuator_allowedValues' - A list of possible values an actuator can take.
+--
+-- 'assignedValue', 'actuator_assignedValue' - A specified value for the actuator.
+--
+-- 'description', 'actuator_description' - A brief description of the actuator.
+--
+-- 'max', 'actuator_max' - The specified possible maximum value of an actuator.
+--
+-- 'min', 'actuator_min' - The specified possible minimum value of an actuator.
+--
+-- 'unit', 'actuator_unit' - The scientific unit for the actuator.
+--
+-- 'fullyQualifiedName', 'actuator_fullyQualifiedName' - The fully qualified name of the actuator. For example, the fully
+-- qualified name of an actuator might be @Vehicle.Front.Left.Door.Lock@.
+--
+-- 'dataType', 'actuator_dataType' - The specified data type of the actuator.
+newActuator ::
+  -- | 'fullyQualifiedName'
+  Prelude.Text ->
+  -- | 'dataType'
+  NodeDataType ->
+  Actuator
+newActuator pFullyQualifiedName_ pDataType_ =
+  Actuator'
+    { allowedValues = Prelude.Nothing,
+      assignedValue = Prelude.Nothing,
+      description = Prelude.Nothing,
+      max = Prelude.Nothing,
+      min = Prelude.Nothing,
+      unit = Prelude.Nothing,
+      fullyQualifiedName = pFullyQualifiedName_,
+      dataType = pDataType_
+    }
+
+-- | A list of possible values an actuator can take.
+actuator_allowedValues :: Lens.Lens' Actuator (Prelude.Maybe [Prelude.Text])
+actuator_allowedValues = Lens.lens (\Actuator' {allowedValues} -> allowedValues) (\s@Actuator' {} a -> s {allowedValues = a} :: Actuator) Prelude.. Lens.mapping Lens.coerced
+
+-- | A specified value for the actuator.
+actuator_assignedValue :: Lens.Lens' Actuator (Prelude.Maybe Prelude.Text)
+actuator_assignedValue = Lens.lens (\Actuator' {assignedValue} -> assignedValue) (\s@Actuator' {} a -> s {assignedValue = a} :: Actuator)
+
+-- | A brief description of the actuator.
+actuator_description :: Lens.Lens' Actuator (Prelude.Maybe Prelude.Text)
+actuator_description = Lens.lens (\Actuator' {description} -> description) (\s@Actuator' {} a -> s {description = a} :: Actuator)
+
+-- | The specified possible maximum value of an actuator.
+actuator_max :: Lens.Lens' Actuator (Prelude.Maybe Prelude.Double)
+actuator_max = Lens.lens (\Actuator' {max} -> max) (\s@Actuator' {} a -> s {max = a} :: Actuator)
+
+-- | The specified possible minimum value of an actuator.
+actuator_min :: Lens.Lens' Actuator (Prelude.Maybe Prelude.Double)
+actuator_min = Lens.lens (\Actuator' {min} -> min) (\s@Actuator' {} a -> s {min = a} :: Actuator)
+
+-- | The scientific unit for the actuator.
+actuator_unit :: Lens.Lens' Actuator (Prelude.Maybe Prelude.Text)
+actuator_unit = Lens.lens (\Actuator' {unit} -> unit) (\s@Actuator' {} a -> s {unit = a} :: Actuator)
+
+-- | The fully qualified name of the actuator. For example, the fully
+-- qualified name of an actuator might be @Vehicle.Front.Left.Door.Lock@.
+actuator_fullyQualifiedName :: Lens.Lens' Actuator Prelude.Text
+actuator_fullyQualifiedName = Lens.lens (\Actuator' {fullyQualifiedName} -> fullyQualifiedName) (\s@Actuator' {} a -> s {fullyQualifiedName = a} :: Actuator)
+
+-- | The specified data type of the actuator.
+actuator_dataType :: Lens.Lens' Actuator NodeDataType
+actuator_dataType = Lens.lens (\Actuator' {dataType} -> dataType) (\s@Actuator' {} a -> s {dataType = a} :: Actuator)
+
+instance Data.FromJSON Actuator where
+  parseJSON =
+    Data.withObject
+      "Actuator"
+      ( \x ->
+          Actuator'
+            Prelude.<$> (x Data..:? "allowedValues" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "assignedValue")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "max")
+            Prelude.<*> (x Data..:? "min")
+            Prelude.<*> (x Data..:? "unit")
+            Prelude.<*> (x Data..: "fullyQualifiedName")
+            Prelude.<*> (x Data..: "dataType")
+      )
+
+instance Prelude.Hashable Actuator where
+  hashWithSalt _salt Actuator' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowedValues
+      `Prelude.hashWithSalt` assignedValue
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+      `Prelude.hashWithSalt` unit
+      `Prelude.hashWithSalt` fullyQualifiedName
+      `Prelude.hashWithSalt` dataType
+
+instance Prelude.NFData Actuator where
+  rnf Actuator' {..} =
+    Prelude.rnf allowedValues
+      `Prelude.seq` Prelude.rnf assignedValue
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf max
+      `Prelude.seq` Prelude.rnf min
+      `Prelude.seq` Prelude.rnf unit
+      `Prelude.seq` Prelude.rnf fullyQualifiedName
+      `Prelude.seq` Prelude.rnf dataType
+
+instance Data.ToJSON Actuator where
+  toJSON Actuator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowedValues" Data..=) Prelude.<$> allowedValues,
+            ("assignedValue" Data..=) Prelude.<$> assignedValue,
+            ("description" Data..=) Prelude.<$> description,
+            ("max" Data..=) Prelude.<$> max,
+            ("min" Data..=) Prelude.<$> min,
+            ("unit" Data..=) Prelude.<$> unit,
+            Prelude.Just
+              ("fullyQualifiedName" Data..= fullyQualifiedName),
+            Prelude.Just ("dataType" Data..= dataType)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/Attribute.hs b/gen/Amazonka/IoTFleetWise/Types/Attribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/Attribute.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.IoTFleetWise.Types.Attribute
+-- 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.IoTFleetWise.Types.Attribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.NodeDataType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A signal that represents static information about the vehicle, such as
+-- engine type or manufacturing date.
+--
+-- /See:/ 'newAttribute' smart constructor.
+data Attribute = Attribute'
+  { -- | A list of possible values an attribute can be assigned.
+    allowedValues :: Prelude.Maybe [Prelude.Text],
+    -- | A specified value for the attribute.
+    assignedValue :: Prelude.Maybe Prelude.Text,
+    -- | The default value of the attribute.
+    defaultValue :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the attribute.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The specified possible maximum value of the attribute.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The specified possible minimum value of the attribute.
+    min :: Prelude.Maybe Prelude.Double,
+    -- | The scientific unit for the attribute.
+    unit :: Prelude.Maybe Prelude.Text,
+    -- | The fully qualified name of the attribute. For example, the fully
+    -- qualified name of an attribute might be @Vehicle.Body.Engine.Type@.
+    fullyQualifiedName :: Prelude.Text,
+    -- | The specified data type of the attribute.
+    dataType :: NodeDataType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Attribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowedValues', 'attribute_allowedValues' - A list of possible values an attribute can be assigned.
+--
+-- 'assignedValue', 'attribute_assignedValue' - A specified value for the attribute.
+--
+-- 'defaultValue', 'attribute_defaultValue' - The default value of the attribute.
+--
+-- 'description', 'attribute_description' - A brief description of the attribute.
+--
+-- 'max', 'attribute_max' - The specified possible maximum value of the attribute.
+--
+-- 'min', 'attribute_min' - The specified possible minimum value of the attribute.
+--
+-- 'unit', 'attribute_unit' - The scientific unit for the attribute.
+--
+-- 'fullyQualifiedName', 'attribute_fullyQualifiedName' - The fully qualified name of the attribute. For example, the fully
+-- qualified name of an attribute might be @Vehicle.Body.Engine.Type@.
+--
+-- 'dataType', 'attribute_dataType' - The specified data type of the attribute.
+newAttribute ::
+  -- | 'fullyQualifiedName'
+  Prelude.Text ->
+  -- | 'dataType'
+  NodeDataType ->
+  Attribute
+newAttribute pFullyQualifiedName_ pDataType_ =
+  Attribute'
+    { allowedValues = Prelude.Nothing,
+      assignedValue = Prelude.Nothing,
+      defaultValue = Prelude.Nothing,
+      description = Prelude.Nothing,
+      max = Prelude.Nothing,
+      min = Prelude.Nothing,
+      unit = Prelude.Nothing,
+      fullyQualifiedName = pFullyQualifiedName_,
+      dataType = pDataType_
+    }
+
+-- | A list of possible values an attribute can be assigned.
+attribute_allowedValues :: Lens.Lens' Attribute (Prelude.Maybe [Prelude.Text])
+attribute_allowedValues = Lens.lens (\Attribute' {allowedValues} -> allowedValues) (\s@Attribute' {} a -> s {allowedValues = a} :: Attribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | A specified value for the attribute.
+attribute_assignedValue :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Text)
+attribute_assignedValue = Lens.lens (\Attribute' {assignedValue} -> assignedValue) (\s@Attribute' {} a -> s {assignedValue = a} :: Attribute)
+
+-- | The default value of the attribute.
+attribute_defaultValue :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Text)
+attribute_defaultValue = Lens.lens (\Attribute' {defaultValue} -> defaultValue) (\s@Attribute' {} a -> s {defaultValue = a} :: Attribute)
+
+-- | A brief description of the attribute.
+attribute_description :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Text)
+attribute_description = Lens.lens (\Attribute' {description} -> description) (\s@Attribute' {} a -> s {description = a} :: Attribute)
+
+-- | The specified possible maximum value of the attribute.
+attribute_max :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Double)
+attribute_max = Lens.lens (\Attribute' {max} -> max) (\s@Attribute' {} a -> s {max = a} :: Attribute)
+
+-- | The specified possible minimum value of the attribute.
+attribute_min :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Double)
+attribute_min = Lens.lens (\Attribute' {min} -> min) (\s@Attribute' {} a -> s {min = a} :: Attribute)
+
+-- | The scientific unit for the attribute.
+attribute_unit :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Text)
+attribute_unit = Lens.lens (\Attribute' {unit} -> unit) (\s@Attribute' {} a -> s {unit = a} :: Attribute)
+
+-- | The fully qualified name of the attribute. For example, the fully
+-- qualified name of an attribute might be @Vehicle.Body.Engine.Type@.
+attribute_fullyQualifiedName :: Lens.Lens' Attribute Prelude.Text
+attribute_fullyQualifiedName = Lens.lens (\Attribute' {fullyQualifiedName} -> fullyQualifiedName) (\s@Attribute' {} a -> s {fullyQualifiedName = a} :: Attribute)
+
+-- | The specified data type of the attribute.
+attribute_dataType :: Lens.Lens' Attribute NodeDataType
+attribute_dataType = Lens.lens (\Attribute' {dataType} -> dataType) (\s@Attribute' {} a -> s {dataType = a} :: Attribute)
+
+instance Data.FromJSON Attribute where
+  parseJSON =
+    Data.withObject
+      "Attribute"
+      ( \x ->
+          Attribute'
+            Prelude.<$> (x Data..:? "allowedValues" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "assignedValue")
+            Prelude.<*> (x Data..:? "defaultValue")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "max")
+            Prelude.<*> (x Data..:? "min")
+            Prelude.<*> (x Data..:? "unit")
+            Prelude.<*> (x Data..: "fullyQualifiedName")
+            Prelude.<*> (x Data..: "dataType")
+      )
+
+instance Prelude.Hashable Attribute where
+  hashWithSalt _salt Attribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowedValues
+      `Prelude.hashWithSalt` assignedValue
+      `Prelude.hashWithSalt` defaultValue
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+      `Prelude.hashWithSalt` unit
+      `Prelude.hashWithSalt` fullyQualifiedName
+      `Prelude.hashWithSalt` dataType
+
+instance Prelude.NFData Attribute where
+  rnf Attribute' {..} =
+    Prelude.rnf allowedValues
+      `Prelude.seq` Prelude.rnf assignedValue
+      `Prelude.seq` Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf max
+      `Prelude.seq` Prelude.rnf min
+      `Prelude.seq` Prelude.rnf unit
+      `Prelude.seq` Prelude.rnf fullyQualifiedName
+      `Prelude.seq` Prelude.rnf dataType
+
+instance Data.ToJSON Attribute where
+  toJSON Attribute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowedValues" Data..=) Prelude.<$> allowedValues,
+            ("assignedValue" Data..=) Prelude.<$> assignedValue,
+            ("defaultValue" Data..=) Prelude.<$> defaultValue,
+            ("description" Data..=) Prelude.<$> description,
+            ("max" Data..=) Prelude.<$> max,
+            ("min" Data..=) Prelude.<$> min,
+            ("unit" Data..=) Prelude.<$> unit,
+            Prelude.Just
+              ("fullyQualifiedName" Data..= fullyQualifiedName),
+            Prelude.Just ("dataType" Data..= dataType)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/Branch.hs b/gen/Amazonka/IoTFleetWise/Types/Branch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/Branch.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.Types.Branch
+-- 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.IoTFleetWise.Types.Branch 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 group of signals that are defined in a hierarchical structure.
+--
+-- /See:/ 'newBranch' smart constructor.
+data Branch = Branch'
+  { -- | A brief description of the branch.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The fully qualified name of the branch. For example, the fully qualified
+    -- name of a branch might be @Vehicle.Body.Engine@.
+    fullyQualifiedName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Branch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'branch_description' - A brief description of the branch.
+--
+-- 'fullyQualifiedName', 'branch_fullyQualifiedName' - The fully qualified name of the branch. For example, the fully qualified
+-- name of a branch might be @Vehicle.Body.Engine@.
+newBranch ::
+  -- | 'fullyQualifiedName'
+  Prelude.Text ->
+  Branch
+newBranch pFullyQualifiedName_ =
+  Branch'
+    { description = Prelude.Nothing,
+      fullyQualifiedName = pFullyQualifiedName_
+    }
+
+-- | A brief description of the branch.
+branch_description :: Lens.Lens' Branch (Prelude.Maybe Prelude.Text)
+branch_description = Lens.lens (\Branch' {description} -> description) (\s@Branch' {} a -> s {description = a} :: Branch)
+
+-- | The fully qualified name of the branch. For example, the fully qualified
+-- name of a branch might be @Vehicle.Body.Engine@.
+branch_fullyQualifiedName :: Lens.Lens' Branch Prelude.Text
+branch_fullyQualifiedName = Lens.lens (\Branch' {fullyQualifiedName} -> fullyQualifiedName) (\s@Branch' {} a -> s {fullyQualifiedName = a} :: Branch)
+
+instance Data.FromJSON Branch where
+  parseJSON =
+    Data.withObject
+      "Branch"
+      ( \x ->
+          Branch'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..: "fullyQualifiedName")
+      )
+
+instance Prelude.Hashable Branch where
+  hashWithSalt _salt Branch' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` fullyQualifiedName
+
+instance Prelude.NFData Branch where
+  rnf Branch' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf fullyQualifiedName
+
+instance Data.ToJSON Branch where
+  toJSON Branch' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just
+              ("fullyQualifiedName" Data..= fullyQualifiedName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/CampaignStatus.hs b/gen/Amazonka/IoTFleetWise/Types/CampaignStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CampaignStatus.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.IoTFleetWise.Types.CampaignStatus
+-- 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.IoTFleetWise.Types.CampaignStatus
+  ( CampaignStatus
+      ( ..,
+        CampaignStatus_CREATING,
+        CampaignStatus_RUNNING,
+        CampaignStatus_SUSPENDED,
+        CampaignStatus_WAITING_FOR_APPROVAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CampaignStatus = CampaignStatus'
+  { fromCampaignStatus ::
+      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 CampaignStatus_CREATING :: CampaignStatus
+pattern CampaignStatus_CREATING = CampaignStatus' "CREATING"
+
+pattern CampaignStatus_RUNNING :: CampaignStatus
+pattern CampaignStatus_RUNNING = CampaignStatus' "RUNNING"
+
+pattern CampaignStatus_SUSPENDED :: CampaignStatus
+pattern CampaignStatus_SUSPENDED = CampaignStatus' "SUSPENDED"
+
+pattern CampaignStatus_WAITING_FOR_APPROVAL :: CampaignStatus
+pattern CampaignStatus_WAITING_FOR_APPROVAL = CampaignStatus' "WAITING_FOR_APPROVAL"
+
+{-# COMPLETE
+  CampaignStatus_CREATING,
+  CampaignStatus_RUNNING,
+  CampaignStatus_SUSPENDED,
+  CampaignStatus_WAITING_FOR_APPROVAL,
+  CampaignStatus'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/CampaignSummary.hs b/gen/Amazonka/IoTFleetWise/Types/CampaignSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CampaignSummary.hs
@@ -0,0 +1,206 @@
+{-# 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.IoTFleetWise.Types.CampaignSummary
+-- 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.IoTFleetWise.Types.CampaignSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.CampaignStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a campaign.
+--
+-- You can use the API operation to return this information about multiple
+-- created campaigns.
+--
+-- /See:/ 'newCampaignSummary' smart constructor.
+data CampaignSummary = CampaignSummary'
+  { -- | The Amazon Resource Name (ARN) of a campaign.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The description of the campaign.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of a campaign.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the signal catalog associated with the campaign.
+    signalCatalogArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of a campaign. The status can be one of the following:
+    --
+    -- -   @CREATING@ - Amazon Web Services IoT FleetWise is processing your
+    --     request to create the campaign.
+    --
+    -- -   @WAITING_FOR_APPROVAL@ - After a campaign is created, it enters the
+    --     @WAITING_FOR_APPROVAL@ state. To allow Amazon Web Services IoT
+    --     FleetWise to deploy the campaign to the target vehicle or fleet, use
+    --     the API operation to approve the campaign.
+    --
+    -- -   @RUNNING@ - The campaign is active.
+    --
+    -- -   @SUSPENDED@ - The campaign is suspended. To resume the campaign, use
+    --     the API operation.
+    status :: Prelude.Maybe CampaignStatus,
+    -- | The ARN of a vehicle or fleet to which the campaign is deployed.
+    targetArn :: Prelude.Maybe Prelude.Text,
+    -- | The time the campaign was created.
+    creationTime :: Data.POSIX,
+    -- | The last time the campaign was modified.
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CampaignSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'campaignSummary_arn' - The Amazon Resource Name (ARN) of a campaign.
+--
+-- 'description', 'campaignSummary_description' - The description of the campaign.
+--
+-- 'name', 'campaignSummary_name' - The name of a campaign.
+--
+-- 'signalCatalogArn', 'campaignSummary_signalCatalogArn' - The ARN of the signal catalog associated with the campaign.
+--
+-- 'status', 'campaignSummary_status' - The state of a campaign. The status can be one of the following:
+--
+-- -   @CREATING@ - Amazon Web Services IoT FleetWise is processing your
+--     request to create the campaign.
+--
+-- -   @WAITING_FOR_APPROVAL@ - After a campaign is created, it enters the
+--     @WAITING_FOR_APPROVAL@ state. To allow Amazon Web Services IoT
+--     FleetWise to deploy the campaign to the target vehicle or fleet, use
+--     the API operation to approve the campaign.
+--
+-- -   @RUNNING@ - The campaign is active.
+--
+-- -   @SUSPENDED@ - The campaign is suspended. To resume the campaign, use
+--     the API operation.
+--
+-- 'targetArn', 'campaignSummary_targetArn' - The ARN of a vehicle or fleet to which the campaign is deployed.
+--
+-- 'creationTime', 'campaignSummary_creationTime' - The time the campaign was created.
+--
+-- 'lastModificationTime', 'campaignSummary_lastModificationTime' - The last time the campaign was modified.
+newCampaignSummary ::
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  CampaignSummary
+newCampaignSummary
+  pCreationTime_
+  pLastModificationTime_ =
+    CampaignSummary'
+      { arn = Prelude.Nothing,
+        description = Prelude.Nothing,
+        name = Prelude.Nothing,
+        signalCatalogArn = Prelude.Nothing,
+        status = Prelude.Nothing,
+        targetArn = Prelude.Nothing,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | The Amazon Resource Name (ARN) of a campaign.
+campaignSummary_arn :: Lens.Lens' CampaignSummary (Prelude.Maybe Prelude.Text)
+campaignSummary_arn = Lens.lens (\CampaignSummary' {arn} -> arn) (\s@CampaignSummary' {} a -> s {arn = a} :: CampaignSummary)
+
+-- | The description of the campaign.
+campaignSummary_description :: Lens.Lens' CampaignSummary (Prelude.Maybe Prelude.Text)
+campaignSummary_description = Lens.lens (\CampaignSummary' {description} -> description) (\s@CampaignSummary' {} a -> s {description = a} :: CampaignSummary)
+
+-- | The name of a campaign.
+campaignSummary_name :: Lens.Lens' CampaignSummary (Prelude.Maybe Prelude.Text)
+campaignSummary_name = Lens.lens (\CampaignSummary' {name} -> name) (\s@CampaignSummary' {} a -> s {name = a} :: CampaignSummary)
+
+-- | The ARN of the signal catalog associated with the campaign.
+campaignSummary_signalCatalogArn :: Lens.Lens' CampaignSummary (Prelude.Maybe Prelude.Text)
+campaignSummary_signalCatalogArn = Lens.lens (\CampaignSummary' {signalCatalogArn} -> signalCatalogArn) (\s@CampaignSummary' {} a -> s {signalCatalogArn = a} :: CampaignSummary)
+
+-- | The state of a campaign. The status can be one of the following:
+--
+-- -   @CREATING@ - Amazon Web Services IoT FleetWise is processing your
+--     request to create the campaign.
+--
+-- -   @WAITING_FOR_APPROVAL@ - After a campaign is created, it enters the
+--     @WAITING_FOR_APPROVAL@ state. To allow Amazon Web Services IoT
+--     FleetWise to deploy the campaign to the target vehicle or fleet, use
+--     the API operation to approve the campaign.
+--
+-- -   @RUNNING@ - The campaign is active.
+--
+-- -   @SUSPENDED@ - The campaign is suspended. To resume the campaign, use
+--     the API operation.
+campaignSummary_status :: Lens.Lens' CampaignSummary (Prelude.Maybe CampaignStatus)
+campaignSummary_status = Lens.lens (\CampaignSummary' {status} -> status) (\s@CampaignSummary' {} a -> s {status = a} :: CampaignSummary)
+
+-- | The ARN of a vehicle or fleet to which the campaign is deployed.
+campaignSummary_targetArn :: Lens.Lens' CampaignSummary (Prelude.Maybe Prelude.Text)
+campaignSummary_targetArn = Lens.lens (\CampaignSummary' {targetArn} -> targetArn) (\s@CampaignSummary' {} a -> s {targetArn = a} :: CampaignSummary)
+
+-- | The time the campaign was created.
+campaignSummary_creationTime :: Lens.Lens' CampaignSummary Prelude.UTCTime
+campaignSummary_creationTime = Lens.lens (\CampaignSummary' {creationTime} -> creationTime) (\s@CampaignSummary' {} a -> s {creationTime = a} :: CampaignSummary) Prelude.. Data._Time
+
+-- | The last time the campaign was modified.
+campaignSummary_lastModificationTime :: Lens.Lens' CampaignSummary Prelude.UTCTime
+campaignSummary_lastModificationTime = Lens.lens (\CampaignSummary' {lastModificationTime} -> lastModificationTime) (\s@CampaignSummary' {} a -> s {lastModificationTime = a} :: CampaignSummary) Prelude.. Data._Time
+
+instance Data.FromJSON CampaignSummary where
+  parseJSON =
+    Data.withObject
+      "CampaignSummary"
+      ( \x ->
+          CampaignSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "signalCatalogArn")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "targetArn")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "lastModificationTime")
+      )
+
+instance Prelude.Hashable CampaignSummary where
+  hashWithSalt _salt CampaignSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` signalCatalogArn
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` targetArn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+
+instance Prelude.NFData CampaignSummary where
+  rnf CampaignSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf targetArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/Types/CanDbcDefinition.hs b/gen/Amazonka/IoTFleetWise/Types/CanDbcDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CanDbcDefinition.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.IoTFleetWise.Types.CanDbcDefinition
+-- 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.IoTFleetWise.Types.CanDbcDefinition 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
+
+-- | Configurations used to create a decoder manifest.
+--
+-- /See:/ 'newCanDbcDefinition' smart constructor.
+data CanDbcDefinition = CanDbcDefinition'
+  { -- | Pairs every signal specified in your vehicle model with a signal
+    -- decoder.
+    signalsMap :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Contains information about a network interface.
+    networkInterface :: Prelude.Text,
+    -- | A list of DBC files. You can upload only one DBC file for each network
+    -- interface and specify up to five (inclusive) files in the list.
+    canDbcFiles :: Prelude.NonEmpty Data.Base64
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CanDbcDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'signalsMap', 'canDbcDefinition_signalsMap' - Pairs every signal specified in your vehicle model with a signal
+-- decoder.
+--
+-- 'networkInterface', 'canDbcDefinition_networkInterface' - Contains information about a network interface.
+--
+-- 'canDbcFiles', 'canDbcDefinition_canDbcFiles' - A list of DBC files. You can upload only one DBC file for each network
+-- interface and specify up to five (inclusive) files in the list.
+newCanDbcDefinition ::
+  -- | 'networkInterface'
+  Prelude.Text ->
+  -- | 'canDbcFiles'
+  Prelude.NonEmpty Prelude.ByteString ->
+  CanDbcDefinition
+newCanDbcDefinition pNetworkInterface_ pCanDbcFiles_ =
+  CanDbcDefinition'
+    { signalsMap = Prelude.Nothing,
+      networkInterface = pNetworkInterface_,
+      canDbcFiles = Lens.coerced Lens.# pCanDbcFiles_
+    }
+
+-- | Pairs every signal specified in your vehicle model with a signal
+-- decoder.
+canDbcDefinition_signalsMap :: Lens.Lens' CanDbcDefinition (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+canDbcDefinition_signalsMap = Lens.lens (\CanDbcDefinition' {signalsMap} -> signalsMap) (\s@CanDbcDefinition' {} a -> s {signalsMap = a} :: CanDbcDefinition) Prelude.. Lens.mapping Lens.coerced
+
+-- | Contains information about a network interface.
+canDbcDefinition_networkInterface :: Lens.Lens' CanDbcDefinition Prelude.Text
+canDbcDefinition_networkInterface = Lens.lens (\CanDbcDefinition' {networkInterface} -> networkInterface) (\s@CanDbcDefinition' {} a -> s {networkInterface = a} :: CanDbcDefinition)
+
+-- | A list of DBC files. You can upload only one DBC file for each network
+-- interface and specify up to five (inclusive) files in the list.
+canDbcDefinition_canDbcFiles :: Lens.Lens' CanDbcDefinition (Prelude.NonEmpty Prelude.ByteString)
+canDbcDefinition_canDbcFiles = Lens.lens (\CanDbcDefinition' {canDbcFiles} -> canDbcFiles) (\s@CanDbcDefinition' {} a -> s {canDbcFiles = a} :: CanDbcDefinition) Prelude.. Lens.coerced
+
+instance Prelude.Hashable CanDbcDefinition where
+  hashWithSalt _salt CanDbcDefinition' {..} =
+    _salt
+      `Prelude.hashWithSalt` signalsMap
+      `Prelude.hashWithSalt` networkInterface
+      `Prelude.hashWithSalt` canDbcFiles
+
+instance Prelude.NFData CanDbcDefinition where
+  rnf CanDbcDefinition' {..} =
+    Prelude.rnf signalsMap
+      `Prelude.seq` Prelude.rnf networkInterface
+      `Prelude.seq` Prelude.rnf canDbcFiles
+
+instance Data.ToJSON CanDbcDefinition where
+  toJSON CanDbcDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("signalsMap" Data..=) Prelude.<$> signalsMap,
+            Prelude.Just
+              ("networkInterface" Data..= networkInterface),
+            Prelude.Just ("canDbcFiles" Data..= canDbcFiles)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/CanInterface.hs b/gen/Amazonka/IoTFleetWise/Types/CanInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CanInterface.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.Types.CanInterface
+-- 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.IoTFleetWise.Types.CanInterface 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 single controller area network (CAN) device interface.
+--
+-- /See:/ 'newCanInterface' smart constructor.
+data CanInterface = CanInterface'
+  { -- | The name of the communication protocol for the interface.
+    protocolName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the communication protocol for the interface.
+    protocolVersion :: Prelude.Maybe Prelude.Text,
+    -- | The unique name of the interface.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CanInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'protocolName', 'canInterface_protocolName' - The name of the communication protocol for the interface.
+--
+-- 'protocolVersion', 'canInterface_protocolVersion' - The version of the communication protocol for the interface.
+--
+-- 'name', 'canInterface_name' - The unique name of the interface.
+newCanInterface ::
+  -- | 'name'
+  Prelude.Text ->
+  CanInterface
+newCanInterface pName_ =
+  CanInterface'
+    { protocolName = Prelude.Nothing,
+      protocolVersion = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The name of the communication protocol for the interface.
+canInterface_protocolName :: Lens.Lens' CanInterface (Prelude.Maybe Prelude.Text)
+canInterface_protocolName = Lens.lens (\CanInterface' {protocolName} -> protocolName) (\s@CanInterface' {} a -> s {protocolName = a} :: CanInterface)
+
+-- | The version of the communication protocol for the interface.
+canInterface_protocolVersion :: Lens.Lens' CanInterface (Prelude.Maybe Prelude.Text)
+canInterface_protocolVersion = Lens.lens (\CanInterface' {protocolVersion} -> protocolVersion) (\s@CanInterface' {} a -> s {protocolVersion = a} :: CanInterface)
+
+-- | The unique name of the interface.
+canInterface_name :: Lens.Lens' CanInterface Prelude.Text
+canInterface_name = Lens.lens (\CanInterface' {name} -> name) (\s@CanInterface' {} a -> s {name = a} :: CanInterface)
+
+instance Data.FromJSON CanInterface where
+  parseJSON =
+    Data.withObject
+      "CanInterface"
+      ( \x ->
+          CanInterface'
+            Prelude.<$> (x Data..:? "protocolName")
+            Prelude.<*> (x Data..:? "protocolVersion")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable CanInterface where
+  hashWithSalt _salt CanInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` protocolName
+      `Prelude.hashWithSalt` protocolVersion
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CanInterface where
+  rnf CanInterface' {..} =
+    Prelude.rnf protocolName
+      `Prelude.seq` Prelude.rnf protocolVersion
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToJSON CanInterface where
+  toJSON CanInterface' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("protocolName" Data..=) Prelude.<$> protocolName,
+            ("protocolVersion" Data..=)
+              Prelude.<$> protocolVersion,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/CanSignal.hs b/gen/Amazonka/IoTFleetWise/Types/CanSignal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CanSignal.hs
@@ -0,0 +1,193 @@
+{-# 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.IoTFleetWise.Types.CanSignal
+-- 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.IoTFleetWise.Types.CanSignal 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 single controller area network (CAN) signal and the
+-- messages it receives and transmits.
+--
+-- /See:/ 'newCanSignal' smart constructor.
+data CanSignal = CanSignal'
+  { -- | The name of the signal.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the message.
+    messageId :: Prelude.Natural,
+    -- | Whether the byte ordering of a CAN message is big-endian.
+    isBigEndian :: Prelude.Bool,
+    -- | Whether the message data is specified as a signed value.
+    isSigned :: Prelude.Bool,
+    -- | Indicates the beginning of the CAN message.
+    startBit :: Prelude.Natural,
+    -- | Indicates where data appears in the CAN message.
+    offset :: Prelude.Double,
+    -- | A multiplier used to decode the CAN message.
+    factor :: Prelude.Double,
+    -- | How many bytes of data are in the message.
+    length :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CanSignal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'canSignal_name' - The name of the signal.
+--
+-- 'messageId', 'canSignal_messageId' - The ID of the message.
+--
+-- 'isBigEndian', 'canSignal_isBigEndian' - Whether the byte ordering of a CAN message is big-endian.
+--
+-- 'isSigned', 'canSignal_isSigned' - Whether the message data is specified as a signed value.
+--
+-- 'startBit', 'canSignal_startBit' - Indicates the beginning of the CAN message.
+--
+-- 'offset', 'canSignal_offset' - Indicates where data appears in the CAN message.
+--
+-- 'factor', 'canSignal_factor' - A multiplier used to decode the CAN message.
+--
+-- 'length', 'canSignal_length' - How many bytes of data are in the message.
+newCanSignal ::
+  -- | 'messageId'
+  Prelude.Natural ->
+  -- | 'isBigEndian'
+  Prelude.Bool ->
+  -- | 'isSigned'
+  Prelude.Bool ->
+  -- | 'startBit'
+  Prelude.Natural ->
+  -- | 'offset'
+  Prelude.Double ->
+  -- | 'factor'
+  Prelude.Double ->
+  -- | 'length'
+  Prelude.Natural ->
+  CanSignal
+newCanSignal
+  pMessageId_
+  pIsBigEndian_
+  pIsSigned_
+  pStartBit_
+  pOffset_
+  pFactor_
+  pLength_ =
+    CanSignal'
+      { name = Prelude.Nothing,
+        messageId = pMessageId_,
+        isBigEndian = pIsBigEndian_,
+        isSigned = pIsSigned_,
+        startBit = pStartBit_,
+        offset = pOffset_,
+        factor = pFactor_,
+        length = pLength_
+      }
+
+-- | The name of the signal.
+canSignal_name :: Lens.Lens' CanSignal (Prelude.Maybe Prelude.Text)
+canSignal_name = Lens.lens (\CanSignal' {name} -> name) (\s@CanSignal' {} a -> s {name = a} :: CanSignal)
+
+-- | The ID of the message.
+canSignal_messageId :: Lens.Lens' CanSignal Prelude.Natural
+canSignal_messageId = Lens.lens (\CanSignal' {messageId} -> messageId) (\s@CanSignal' {} a -> s {messageId = a} :: CanSignal)
+
+-- | Whether the byte ordering of a CAN message is big-endian.
+canSignal_isBigEndian :: Lens.Lens' CanSignal Prelude.Bool
+canSignal_isBigEndian = Lens.lens (\CanSignal' {isBigEndian} -> isBigEndian) (\s@CanSignal' {} a -> s {isBigEndian = a} :: CanSignal)
+
+-- | Whether the message data is specified as a signed value.
+canSignal_isSigned :: Lens.Lens' CanSignal Prelude.Bool
+canSignal_isSigned = Lens.lens (\CanSignal' {isSigned} -> isSigned) (\s@CanSignal' {} a -> s {isSigned = a} :: CanSignal)
+
+-- | Indicates the beginning of the CAN message.
+canSignal_startBit :: Lens.Lens' CanSignal Prelude.Natural
+canSignal_startBit = Lens.lens (\CanSignal' {startBit} -> startBit) (\s@CanSignal' {} a -> s {startBit = a} :: CanSignal)
+
+-- | Indicates where data appears in the CAN message.
+canSignal_offset :: Lens.Lens' CanSignal Prelude.Double
+canSignal_offset = Lens.lens (\CanSignal' {offset} -> offset) (\s@CanSignal' {} a -> s {offset = a} :: CanSignal)
+
+-- | A multiplier used to decode the CAN message.
+canSignal_factor :: Lens.Lens' CanSignal Prelude.Double
+canSignal_factor = Lens.lens (\CanSignal' {factor} -> factor) (\s@CanSignal' {} a -> s {factor = a} :: CanSignal)
+
+-- | How many bytes of data are in the message.
+canSignal_length :: Lens.Lens' CanSignal Prelude.Natural
+canSignal_length = Lens.lens (\CanSignal' {length} -> length) (\s@CanSignal' {} a -> s {length = a} :: CanSignal)
+
+instance Data.FromJSON CanSignal where
+  parseJSON =
+    Data.withObject
+      "CanSignal"
+      ( \x ->
+          CanSignal'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..: "messageId")
+            Prelude.<*> (x Data..: "isBigEndian")
+            Prelude.<*> (x Data..: "isSigned")
+            Prelude.<*> (x Data..: "startBit")
+            Prelude.<*> (x Data..: "offset")
+            Prelude.<*> (x Data..: "factor")
+            Prelude.<*> (x Data..: "length")
+      )
+
+instance Prelude.Hashable CanSignal where
+  hashWithSalt _salt CanSignal' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` messageId
+      `Prelude.hashWithSalt` isBigEndian
+      `Prelude.hashWithSalt` isSigned
+      `Prelude.hashWithSalt` startBit
+      `Prelude.hashWithSalt` offset
+      `Prelude.hashWithSalt` factor
+      `Prelude.hashWithSalt` length
+
+instance Prelude.NFData CanSignal where
+  rnf CanSignal' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf messageId
+      `Prelude.seq` Prelude.rnf isBigEndian
+      `Prelude.seq` Prelude.rnf isSigned
+      `Prelude.seq` Prelude.rnf startBit
+      `Prelude.seq` Prelude.rnf offset
+      `Prelude.seq` Prelude.rnf factor
+      `Prelude.seq` Prelude.rnf length
+
+instance Data.ToJSON CanSignal where
+  toJSON CanSignal' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            Prelude.Just ("messageId" Data..= messageId),
+            Prelude.Just ("isBigEndian" Data..= isBigEndian),
+            Prelude.Just ("isSigned" Data..= isSigned),
+            Prelude.Just ("startBit" Data..= startBit),
+            Prelude.Just ("offset" Data..= offset),
+            Prelude.Just ("factor" Data..= factor),
+            Prelude.Just ("length" Data..= length)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/CloudWatchLogDeliveryOptions.hs b/gen/Amazonka/IoTFleetWise/Types/CloudWatchLogDeliveryOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CloudWatchLogDeliveryOptions.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.IoTFleetWise.Types.CloudWatchLogDeliveryOptions
+-- 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.IoTFleetWise.Types.CloudWatchLogDeliveryOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.LogType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The log delivery option to send data to Amazon CloudWatch Logs.
+--
+-- /See:/ 'newCloudWatchLogDeliveryOptions' smart constructor.
+data CloudWatchLogDeliveryOptions = CloudWatchLogDeliveryOptions'
+  { -- | The Amazon CloudWatch Logs group the operation sends data to.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The type of log to send data to Amazon CloudWatch Logs.
+    logType :: LogType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchLogDeliveryOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroupName', 'cloudWatchLogDeliveryOptions_logGroupName' - The Amazon CloudWatch Logs group the operation sends data to.
+--
+-- 'logType', 'cloudWatchLogDeliveryOptions_logType' - The type of log to send data to Amazon CloudWatch Logs.
+newCloudWatchLogDeliveryOptions ::
+  -- | 'logType'
+  LogType ->
+  CloudWatchLogDeliveryOptions
+newCloudWatchLogDeliveryOptions pLogType_ =
+  CloudWatchLogDeliveryOptions'
+    { logGroupName =
+        Prelude.Nothing,
+      logType = pLogType_
+    }
+
+-- | The Amazon CloudWatch Logs group the operation sends data to.
+cloudWatchLogDeliveryOptions_logGroupName :: Lens.Lens' CloudWatchLogDeliveryOptions (Prelude.Maybe Prelude.Text)
+cloudWatchLogDeliveryOptions_logGroupName = Lens.lens (\CloudWatchLogDeliveryOptions' {logGroupName} -> logGroupName) (\s@CloudWatchLogDeliveryOptions' {} a -> s {logGroupName = a} :: CloudWatchLogDeliveryOptions)
+
+-- | The type of log to send data to Amazon CloudWatch Logs.
+cloudWatchLogDeliveryOptions_logType :: Lens.Lens' CloudWatchLogDeliveryOptions LogType
+cloudWatchLogDeliveryOptions_logType = Lens.lens (\CloudWatchLogDeliveryOptions' {logType} -> logType) (\s@CloudWatchLogDeliveryOptions' {} a -> s {logType = a} :: CloudWatchLogDeliveryOptions)
+
+instance Data.FromJSON CloudWatchLogDeliveryOptions where
+  parseJSON =
+    Data.withObject
+      "CloudWatchLogDeliveryOptions"
+      ( \x ->
+          CloudWatchLogDeliveryOptions'
+            Prelude.<$> (x Data..:? "logGroupName")
+            Prelude.<*> (x Data..: "logType")
+      )
+
+instance
+  Prelude.Hashable
+    CloudWatchLogDeliveryOptions
+  where
+  hashWithSalt _salt CloudWatchLogDeliveryOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` logType
+
+instance Prelude.NFData CloudWatchLogDeliveryOptions where
+  rnf CloudWatchLogDeliveryOptions' {..} =
+    Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf logType
+
+instance Data.ToJSON CloudWatchLogDeliveryOptions where
+  toJSON CloudWatchLogDeliveryOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("logGroupName" Data..=) Prelude.<$> logGroupName,
+            Prelude.Just ("logType" Data..= logType)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/CollectionScheme.hs b/gen/Amazonka/IoTFleetWise/Types/CollectionScheme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CollectionScheme.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.IoTFleetWise.Types.CollectionScheme
+-- 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.IoTFleetWise.Types.CollectionScheme where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.ConditionBasedCollectionScheme
+import Amazonka.IoTFleetWise.Types.TimeBasedCollectionScheme
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies what data to collect and how often or when to collect it.
+--
+-- /See:/ 'newCollectionScheme' smart constructor.
+data CollectionScheme = CollectionScheme'
+  { -- | Information about a collection scheme that uses a simple logical
+    -- expression to recognize what data to collect.
+    conditionBasedCollectionScheme :: Prelude.Maybe ConditionBasedCollectionScheme,
+    -- | Information about a collection scheme that uses a time period to decide
+    -- how often to collect data.
+    timeBasedCollectionScheme :: Prelude.Maybe TimeBasedCollectionScheme
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CollectionScheme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conditionBasedCollectionScheme', 'collectionScheme_conditionBasedCollectionScheme' - Information about a collection scheme that uses a simple logical
+-- expression to recognize what data to collect.
+--
+-- 'timeBasedCollectionScheme', 'collectionScheme_timeBasedCollectionScheme' - Information about a collection scheme that uses a time period to decide
+-- how often to collect data.
+newCollectionScheme ::
+  CollectionScheme
+newCollectionScheme =
+  CollectionScheme'
+    { conditionBasedCollectionScheme =
+        Prelude.Nothing,
+      timeBasedCollectionScheme = Prelude.Nothing
+    }
+
+-- | Information about a collection scheme that uses a simple logical
+-- expression to recognize what data to collect.
+collectionScheme_conditionBasedCollectionScheme :: Lens.Lens' CollectionScheme (Prelude.Maybe ConditionBasedCollectionScheme)
+collectionScheme_conditionBasedCollectionScheme = Lens.lens (\CollectionScheme' {conditionBasedCollectionScheme} -> conditionBasedCollectionScheme) (\s@CollectionScheme' {} a -> s {conditionBasedCollectionScheme = a} :: CollectionScheme)
+
+-- | Information about a collection scheme that uses a time period to decide
+-- how often to collect data.
+collectionScheme_timeBasedCollectionScheme :: Lens.Lens' CollectionScheme (Prelude.Maybe TimeBasedCollectionScheme)
+collectionScheme_timeBasedCollectionScheme = Lens.lens (\CollectionScheme' {timeBasedCollectionScheme} -> timeBasedCollectionScheme) (\s@CollectionScheme' {} a -> s {timeBasedCollectionScheme = a} :: CollectionScheme)
+
+instance Data.FromJSON CollectionScheme where
+  parseJSON =
+    Data.withObject
+      "CollectionScheme"
+      ( \x ->
+          CollectionScheme'
+            Prelude.<$> (x Data..:? "conditionBasedCollectionScheme")
+            Prelude.<*> (x Data..:? "timeBasedCollectionScheme")
+      )
+
+instance Prelude.Hashable CollectionScheme where
+  hashWithSalt _salt CollectionScheme' {..} =
+    _salt
+      `Prelude.hashWithSalt` conditionBasedCollectionScheme
+      `Prelude.hashWithSalt` timeBasedCollectionScheme
+
+instance Prelude.NFData CollectionScheme where
+  rnf CollectionScheme' {..} =
+    Prelude.rnf conditionBasedCollectionScheme
+      `Prelude.seq` Prelude.rnf timeBasedCollectionScheme
+
+instance Data.ToJSON CollectionScheme where
+  toJSON CollectionScheme' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("conditionBasedCollectionScheme" Data..=)
+              Prelude.<$> conditionBasedCollectionScheme,
+            ("timeBasedCollectionScheme" Data..=)
+              Prelude.<$> timeBasedCollectionScheme
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/Compression.hs b/gen/Amazonka/IoTFleetWise/Types/Compression.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/Compression.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.IoTFleetWise.Types.Compression
+-- 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.IoTFleetWise.Types.Compression
+  ( Compression
+      ( ..,
+        Compression_OFF,
+        Compression_SNAPPY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Compression = Compression'
+  { fromCompression ::
+      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 Compression_OFF :: Compression
+pattern Compression_OFF = Compression' "OFF"
+
+pattern Compression_SNAPPY :: Compression
+pattern Compression_SNAPPY = Compression' "SNAPPY"
+
+{-# COMPLETE
+  Compression_OFF,
+  Compression_SNAPPY,
+  Compression'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/ConditionBasedCollectionScheme.hs b/gen/Amazonka/IoTFleetWise/Types/ConditionBasedCollectionScheme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/ConditionBasedCollectionScheme.hs
@@ -0,0 +1,161 @@
+{-# 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.IoTFleetWise.Types.ConditionBasedCollectionScheme
+-- 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.IoTFleetWise.Types.ConditionBasedCollectionScheme where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.TriggerMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a collection scheme that uses a simple logical
+-- expression to recognize what data to collect.
+--
+-- /See:/ 'newConditionBasedCollectionScheme' smart constructor.
+data ConditionBasedCollectionScheme = ConditionBasedCollectionScheme'
+  { -- | Specifies the version of the conditional expression language.
+    conditionLanguageVersion :: Prelude.Maybe Prelude.Natural,
+    -- | The minimum duration of time between two triggering events to collect
+    -- data, in milliseconds.
+    --
+    -- If a signal changes often, you might want to collect data at a slower
+    -- rate.
+    minimumTriggerIntervalMs :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to collect data for all triggering events (@ALWAYS@). Specify
+    -- (@RISING_EDGE@), or specify only when the condition first evaluates to
+    -- false. For example, triggering on \"AirbagDeployed\"; Users aren\'t
+    -- interested on triggering when the airbag is already exploded; they only
+    -- care about the change from not deployed => deployed.
+    triggerMode :: Prelude.Maybe TriggerMode,
+    -- | The logical expression used to recognize what data to collect. For
+    -- example, @$variable.Vehicle.OutsideAirTemperature >= 105.0@.
+    expression :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConditionBasedCollectionScheme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conditionLanguageVersion', 'conditionBasedCollectionScheme_conditionLanguageVersion' - Specifies the version of the conditional expression language.
+--
+-- 'minimumTriggerIntervalMs', 'conditionBasedCollectionScheme_minimumTriggerIntervalMs' - The minimum duration of time between two triggering events to collect
+-- data, in milliseconds.
+--
+-- If a signal changes often, you might want to collect data at a slower
+-- rate.
+--
+-- 'triggerMode', 'conditionBasedCollectionScheme_triggerMode' - Whether to collect data for all triggering events (@ALWAYS@). Specify
+-- (@RISING_EDGE@), or specify only when the condition first evaluates to
+-- false. For example, triggering on \"AirbagDeployed\"; Users aren\'t
+-- interested on triggering when the airbag is already exploded; they only
+-- care about the change from not deployed => deployed.
+--
+-- 'expression', 'conditionBasedCollectionScheme_expression' - The logical expression used to recognize what data to collect. For
+-- example, @$variable.Vehicle.OutsideAirTemperature >= 105.0@.
+newConditionBasedCollectionScheme ::
+  -- | 'expression'
+  Prelude.Text ->
+  ConditionBasedCollectionScheme
+newConditionBasedCollectionScheme pExpression_ =
+  ConditionBasedCollectionScheme'
+    { conditionLanguageVersion =
+        Prelude.Nothing,
+      minimumTriggerIntervalMs = Prelude.Nothing,
+      triggerMode = Prelude.Nothing,
+      expression = pExpression_
+    }
+
+-- | Specifies the version of the conditional expression language.
+conditionBasedCollectionScheme_conditionLanguageVersion :: Lens.Lens' ConditionBasedCollectionScheme (Prelude.Maybe Prelude.Natural)
+conditionBasedCollectionScheme_conditionLanguageVersion = Lens.lens (\ConditionBasedCollectionScheme' {conditionLanguageVersion} -> conditionLanguageVersion) (\s@ConditionBasedCollectionScheme' {} a -> s {conditionLanguageVersion = a} :: ConditionBasedCollectionScheme)
+
+-- | The minimum duration of time between two triggering events to collect
+-- data, in milliseconds.
+--
+-- If a signal changes often, you might want to collect data at a slower
+-- rate.
+conditionBasedCollectionScheme_minimumTriggerIntervalMs :: Lens.Lens' ConditionBasedCollectionScheme (Prelude.Maybe Prelude.Natural)
+conditionBasedCollectionScheme_minimumTriggerIntervalMs = Lens.lens (\ConditionBasedCollectionScheme' {minimumTriggerIntervalMs} -> minimumTriggerIntervalMs) (\s@ConditionBasedCollectionScheme' {} a -> s {minimumTriggerIntervalMs = a} :: ConditionBasedCollectionScheme)
+
+-- | Whether to collect data for all triggering events (@ALWAYS@). Specify
+-- (@RISING_EDGE@), or specify only when the condition first evaluates to
+-- false. For example, triggering on \"AirbagDeployed\"; Users aren\'t
+-- interested on triggering when the airbag is already exploded; they only
+-- care about the change from not deployed => deployed.
+conditionBasedCollectionScheme_triggerMode :: Lens.Lens' ConditionBasedCollectionScheme (Prelude.Maybe TriggerMode)
+conditionBasedCollectionScheme_triggerMode = Lens.lens (\ConditionBasedCollectionScheme' {triggerMode} -> triggerMode) (\s@ConditionBasedCollectionScheme' {} a -> s {triggerMode = a} :: ConditionBasedCollectionScheme)
+
+-- | The logical expression used to recognize what data to collect. For
+-- example, @$variable.Vehicle.OutsideAirTemperature >= 105.0@.
+conditionBasedCollectionScheme_expression :: Lens.Lens' ConditionBasedCollectionScheme Prelude.Text
+conditionBasedCollectionScheme_expression = Lens.lens (\ConditionBasedCollectionScheme' {expression} -> expression) (\s@ConditionBasedCollectionScheme' {} a -> s {expression = a} :: ConditionBasedCollectionScheme)
+
+instance Data.FromJSON ConditionBasedCollectionScheme where
+  parseJSON =
+    Data.withObject
+      "ConditionBasedCollectionScheme"
+      ( \x ->
+          ConditionBasedCollectionScheme'
+            Prelude.<$> (x Data..:? "conditionLanguageVersion")
+            Prelude.<*> (x Data..:? "minimumTriggerIntervalMs")
+            Prelude.<*> (x Data..:? "triggerMode")
+            Prelude.<*> (x Data..: "expression")
+      )
+
+instance
+  Prelude.Hashable
+    ConditionBasedCollectionScheme
+  where
+  hashWithSalt
+    _salt
+    ConditionBasedCollectionScheme' {..} =
+      _salt
+        `Prelude.hashWithSalt` conditionLanguageVersion
+        `Prelude.hashWithSalt` minimumTriggerIntervalMs
+        `Prelude.hashWithSalt` triggerMode
+        `Prelude.hashWithSalt` expression
+
+instance
+  Prelude.NFData
+    ConditionBasedCollectionScheme
+  where
+  rnf ConditionBasedCollectionScheme' {..} =
+    Prelude.rnf conditionLanguageVersion
+      `Prelude.seq` Prelude.rnf minimumTriggerIntervalMs
+      `Prelude.seq` Prelude.rnf triggerMode
+      `Prelude.seq` Prelude.rnf expression
+
+instance Data.ToJSON ConditionBasedCollectionScheme where
+  toJSON ConditionBasedCollectionScheme' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("conditionLanguageVersion" Data..=)
+              Prelude.<$> conditionLanguageVersion,
+            ("minimumTriggerIntervalMs" Data..=)
+              Prelude.<$> minimumTriggerIntervalMs,
+            ("triggerMode" Data..=) Prelude.<$> triggerMode,
+            Prelude.Just ("expression" Data..= expression)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/CreateVehicleError.hs b/gen/Amazonka/IoTFleetWise/Types/CreateVehicleError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CreateVehicleError.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.IoTFleetWise.Types.CreateVehicleError
+-- 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.IoTFleetWise.Types.CreateVehicleError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An HTTP error resulting from creating a vehicle.
+--
+-- /See:/ 'newCreateVehicleError' smart constructor.
+data CreateVehicleError = CreateVehicleError'
+  { -- | An HTTP error code.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | A description of the HTTP error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the vehicle with the error.
+    vehicleName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVehicleError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'createVehicleError_code' - An HTTP error code.
+--
+-- 'message', 'createVehicleError_message' - A description of the HTTP error.
+--
+-- 'vehicleName', 'createVehicleError_vehicleName' - The ID of the vehicle with the error.
+newCreateVehicleError ::
+  CreateVehicleError
+newCreateVehicleError =
+  CreateVehicleError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing,
+      vehicleName = Prelude.Nothing
+    }
+
+-- | An HTTP error code.
+createVehicleError_code :: Lens.Lens' CreateVehicleError (Prelude.Maybe Prelude.Text)
+createVehicleError_code = Lens.lens (\CreateVehicleError' {code} -> code) (\s@CreateVehicleError' {} a -> s {code = a} :: CreateVehicleError)
+
+-- | A description of the HTTP error.
+createVehicleError_message :: Lens.Lens' CreateVehicleError (Prelude.Maybe Prelude.Text)
+createVehicleError_message = Lens.lens (\CreateVehicleError' {message} -> message) (\s@CreateVehicleError' {} a -> s {message = a} :: CreateVehicleError)
+
+-- | The ID of the vehicle with the error.
+createVehicleError_vehicleName :: Lens.Lens' CreateVehicleError (Prelude.Maybe Prelude.Text)
+createVehicleError_vehicleName = Lens.lens (\CreateVehicleError' {vehicleName} -> vehicleName) (\s@CreateVehicleError' {} a -> s {vehicleName = a} :: CreateVehicleError)
+
+instance Data.FromJSON CreateVehicleError where
+  parseJSON =
+    Data.withObject
+      "CreateVehicleError"
+      ( \x ->
+          CreateVehicleError'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "vehicleName")
+      )
+
+instance Prelude.Hashable CreateVehicleError where
+  hashWithSalt _salt CreateVehicleError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData CreateVehicleError where
+  rnf CreateVehicleError' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf vehicleName
diff --git a/gen/Amazonka/IoTFleetWise/Types/CreateVehicleRequestItem.hs b/gen/Amazonka/IoTFleetWise/Types/CreateVehicleRequestItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CreateVehicleRequestItem.hs
@@ -0,0 +1,158 @@
+{-# 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.IoTFleetWise.Types.CreateVehicleRequestItem
+-- 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.IoTFleetWise.Types.CreateVehicleRequestItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.Tag
+import Amazonka.IoTFleetWise.Types.VehicleAssociationBehavior
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the vehicle to create.
+--
+-- /See:/ 'newCreateVehicleRequestItem' smart constructor.
+data CreateVehicleRequestItem = CreateVehicleRequestItem'
+  { -- | An option to create a new Amazon Web Services IoT thing when creating a
+    -- vehicle, or to validate an existing thing as a vehicle.
+    associationBehavior :: Prelude.Maybe VehicleAssociationBehavior,
+    -- | Static information about a vehicle in a key-value pair. For example:
+    -- @\"engine Type\"@ : @\"v6\"@
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Metadata which can be used to manage the vehicle.
+    tags :: Prelude.Maybe [Tag],
+    -- | The unique ID of the vehicle to create.
+    vehicleName :: Prelude.Text,
+    -- | The ARN of the vehicle model (model manifest) to create the vehicle
+    -- from.
+    modelManifestArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of a decoder manifest associated with the
+    -- vehicle to create.
+    decoderManifestArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVehicleRequestItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationBehavior', 'createVehicleRequestItem_associationBehavior' - An option to create a new Amazon Web Services IoT thing when creating a
+-- vehicle, or to validate an existing thing as a vehicle.
+--
+-- 'attributes', 'createVehicleRequestItem_attributes' - Static information about a vehicle in a key-value pair. For example:
+-- @\"engine Type\"@ : @\"v6\"@
+--
+-- 'tags', 'createVehicleRequestItem_tags' - Metadata which can be used to manage the vehicle.
+--
+-- 'vehicleName', 'createVehicleRequestItem_vehicleName' - The unique ID of the vehicle to create.
+--
+-- 'modelManifestArn', 'createVehicleRequestItem_modelManifestArn' - The ARN of the vehicle model (model manifest) to create the vehicle
+-- from.
+--
+-- 'decoderManifestArn', 'createVehicleRequestItem_decoderManifestArn' - The Amazon Resource Name (ARN) of a decoder manifest associated with the
+-- vehicle to create.
+newCreateVehicleRequestItem ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  -- | 'modelManifestArn'
+  Prelude.Text ->
+  -- | 'decoderManifestArn'
+  Prelude.Text ->
+  CreateVehicleRequestItem
+newCreateVehicleRequestItem
+  pVehicleName_
+  pModelManifestArn_
+  pDecoderManifestArn_ =
+    CreateVehicleRequestItem'
+      { associationBehavior =
+          Prelude.Nothing,
+        attributes = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        vehicleName = pVehicleName_,
+        modelManifestArn = pModelManifestArn_,
+        decoderManifestArn = pDecoderManifestArn_
+      }
+
+-- | An option to create a new Amazon Web Services IoT thing when creating a
+-- vehicle, or to validate an existing thing as a vehicle.
+createVehicleRequestItem_associationBehavior :: Lens.Lens' CreateVehicleRequestItem (Prelude.Maybe VehicleAssociationBehavior)
+createVehicleRequestItem_associationBehavior = Lens.lens (\CreateVehicleRequestItem' {associationBehavior} -> associationBehavior) (\s@CreateVehicleRequestItem' {} a -> s {associationBehavior = a} :: CreateVehicleRequestItem)
+
+-- | Static information about a vehicle in a key-value pair. For example:
+-- @\"engine Type\"@ : @\"v6\"@
+createVehicleRequestItem_attributes :: Lens.Lens' CreateVehicleRequestItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createVehicleRequestItem_attributes = Lens.lens (\CreateVehicleRequestItem' {attributes} -> attributes) (\s@CreateVehicleRequestItem' {} a -> s {attributes = a} :: CreateVehicleRequestItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | Metadata which can be used to manage the vehicle.
+createVehicleRequestItem_tags :: Lens.Lens' CreateVehicleRequestItem (Prelude.Maybe [Tag])
+createVehicleRequestItem_tags = Lens.lens (\CreateVehicleRequestItem' {tags} -> tags) (\s@CreateVehicleRequestItem' {} a -> s {tags = a} :: CreateVehicleRequestItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID of the vehicle to create.
+createVehicleRequestItem_vehicleName :: Lens.Lens' CreateVehicleRequestItem Prelude.Text
+createVehicleRequestItem_vehicleName = Lens.lens (\CreateVehicleRequestItem' {vehicleName} -> vehicleName) (\s@CreateVehicleRequestItem' {} a -> s {vehicleName = a} :: CreateVehicleRequestItem)
+
+-- | The ARN of the vehicle model (model manifest) to create the vehicle
+-- from.
+createVehicleRequestItem_modelManifestArn :: Lens.Lens' CreateVehicleRequestItem Prelude.Text
+createVehicleRequestItem_modelManifestArn = Lens.lens (\CreateVehicleRequestItem' {modelManifestArn} -> modelManifestArn) (\s@CreateVehicleRequestItem' {} a -> s {modelManifestArn = a} :: CreateVehicleRequestItem)
+
+-- | The Amazon Resource Name (ARN) of a decoder manifest associated with the
+-- vehicle to create.
+createVehicleRequestItem_decoderManifestArn :: Lens.Lens' CreateVehicleRequestItem Prelude.Text
+createVehicleRequestItem_decoderManifestArn = Lens.lens (\CreateVehicleRequestItem' {decoderManifestArn} -> decoderManifestArn) (\s@CreateVehicleRequestItem' {} a -> s {decoderManifestArn = a} :: CreateVehicleRequestItem)
+
+instance Prelude.Hashable CreateVehicleRequestItem where
+  hashWithSalt _salt CreateVehicleRequestItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationBehavior
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vehicleName
+      `Prelude.hashWithSalt` modelManifestArn
+      `Prelude.hashWithSalt` decoderManifestArn
+
+instance Prelude.NFData CreateVehicleRequestItem where
+  rnf CreateVehicleRequestItem' {..} =
+    Prelude.rnf associationBehavior
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf decoderManifestArn
+
+instance Data.ToJSON CreateVehicleRequestItem where
+  toJSON CreateVehicleRequestItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("associationBehavior" Data..=)
+              Prelude.<$> associationBehavior,
+            ("attributes" Data..=) Prelude.<$> attributes,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("vehicleName" Data..= vehicleName),
+            Prelude.Just
+              ("modelManifestArn" Data..= modelManifestArn),
+            Prelude.Just
+              ("decoderManifestArn" Data..= decoderManifestArn)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/CreateVehicleResponseItem.hs b/gen/Amazonka/IoTFleetWise/Types/CreateVehicleResponseItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/CreateVehicleResponseItem.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.IoTFleetWise.Types.CreateVehicleResponseItem
+-- 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.IoTFleetWise.Types.CreateVehicleResponseItem 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 created vehicle.
+--
+-- /See:/ 'newCreateVehicleResponseItem' smart constructor.
+data CreateVehicleResponseItem = CreateVehicleResponseItem'
+  { -- | The ARN of the created vehicle.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a created or validated Amazon Web Services IoT thing.
+    thingArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the vehicle to create.
+    vehicleName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVehicleResponseItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createVehicleResponseItem_arn' - The ARN of the created vehicle.
+--
+-- 'thingArn', 'createVehicleResponseItem_thingArn' - The ARN of a created or validated Amazon Web Services IoT thing.
+--
+-- 'vehicleName', 'createVehicleResponseItem_vehicleName' - The unique ID of the vehicle to create.
+newCreateVehicleResponseItem ::
+  CreateVehicleResponseItem
+newCreateVehicleResponseItem =
+  CreateVehicleResponseItem'
+    { arn = Prelude.Nothing,
+      thingArn = Prelude.Nothing,
+      vehicleName = Prelude.Nothing
+    }
+
+-- | The ARN of the created vehicle.
+createVehicleResponseItem_arn :: Lens.Lens' CreateVehicleResponseItem (Prelude.Maybe Prelude.Text)
+createVehicleResponseItem_arn = Lens.lens (\CreateVehicleResponseItem' {arn} -> arn) (\s@CreateVehicleResponseItem' {} a -> s {arn = a} :: CreateVehicleResponseItem)
+
+-- | The ARN of a created or validated Amazon Web Services IoT thing.
+createVehicleResponseItem_thingArn :: Lens.Lens' CreateVehicleResponseItem (Prelude.Maybe Prelude.Text)
+createVehicleResponseItem_thingArn = Lens.lens (\CreateVehicleResponseItem' {thingArn} -> thingArn) (\s@CreateVehicleResponseItem' {} a -> s {thingArn = a} :: CreateVehicleResponseItem)
+
+-- | The unique ID of the vehicle to create.
+createVehicleResponseItem_vehicleName :: Lens.Lens' CreateVehicleResponseItem (Prelude.Maybe Prelude.Text)
+createVehicleResponseItem_vehicleName = Lens.lens (\CreateVehicleResponseItem' {vehicleName} -> vehicleName) (\s@CreateVehicleResponseItem' {} a -> s {vehicleName = a} :: CreateVehicleResponseItem)
+
+instance Data.FromJSON CreateVehicleResponseItem where
+  parseJSON =
+    Data.withObject
+      "CreateVehicleResponseItem"
+      ( \x ->
+          CreateVehicleResponseItem'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "thingArn")
+            Prelude.<*> (x Data..:? "vehicleName")
+      )
+
+instance Prelude.Hashable CreateVehicleResponseItem where
+  hashWithSalt _salt CreateVehicleResponseItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` thingArn
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData CreateVehicleResponseItem where
+  rnf CreateVehicleResponseItem' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf thingArn
+      `Prelude.seq` Prelude.rnf vehicleName
diff --git a/gen/Amazonka/IoTFleetWise/Types/DecoderManifestSummary.hs b/gen/Amazonka/IoTFleetWise/Types/DecoderManifestSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/DecoderManifestSummary.hs
@@ -0,0 +1,171 @@
+{-# 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.IoTFleetWise.Types.DecoderManifestSummary
+-- 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.IoTFleetWise.Types.DecoderManifestSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.ManifestStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a created decoder manifest. You can use the API
+-- operation to return this information about multiple decoder manifests.
+--
+-- /See:/ 'newDecoderManifestSummary' smart constructor.
+data DecoderManifestSummary = DecoderManifestSummary'
+  { -- | The ARN of a vehicle model (model manifest) associated with the decoder
+    -- manifest.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the decoder manifest.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a vehicle model (model manifest) associated with the decoder
+    -- manifest.
+    modelManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the decoder manifest.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The state of the decoder manifest. If the status is @ACTIVE@, the
+    -- decoder manifest can\'t be edited. If the status is marked @DRAFT@, you
+    -- can edit the decoder manifest.
+    status :: Prelude.Maybe ManifestStatus,
+    -- | The time the decoder manifest was created in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The time the decoder manifest was last updated in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time).
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DecoderManifestSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'decoderManifestSummary_arn' - The ARN of a vehicle model (model manifest) associated with the decoder
+-- manifest.
+--
+-- 'description', 'decoderManifestSummary_description' - A brief description of the decoder manifest.
+--
+-- 'modelManifestArn', 'decoderManifestSummary_modelManifestArn' - The ARN of a vehicle model (model manifest) associated with the decoder
+-- manifest.
+--
+-- 'name', 'decoderManifestSummary_name' - The name of the decoder manifest.
+--
+-- 'status', 'decoderManifestSummary_status' - The state of the decoder manifest. If the status is @ACTIVE@, the
+-- decoder manifest can\'t be edited. If the status is marked @DRAFT@, you
+-- can edit the decoder manifest.
+--
+-- 'creationTime', 'decoderManifestSummary_creationTime' - The time the decoder manifest was created in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+--
+-- 'lastModificationTime', 'decoderManifestSummary_lastModificationTime' - The time the decoder manifest was last updated in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+newDecoderManifestSummary ::
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  DecoderManifestSummary
+newDecoderManifestSummary
+  pCreationTime_
+  pLastModificationTime_ =
+    DecoderManifestSummary'
+      { arn = Prelude.Nothing,
+        description = Prelude.Nothing,
+        modelManifestArn = Prelude.Nothing,
+        name = Prelude.Nothing,
+        status = Prelude.Nothing,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | The ARN of a vehicle model (model manifest) associated with the decoder
+-- manifest.
+decoderManifestSummary_arn :: Lens.Lens' DecoderManifestSummary (Prelude.Maybe Prelude.Text)
+decoderManifestSummary_arn = Lens.lens (\DecoderManifestSummary' {arn} -> arn) (\s@DecoderManifestSummary' {} a -> s {arn = a} :: DecoderManifestSummary)
+
+-- | A brief description of the decoder manifest.
+decoderManifestSummary_description :: Lens.Lens' DecoderManifestSummary (Prelude.Maybe Prelude.Text)
+decoderManifestSummary_description = Lens.lens (\DecoderManifestSummary' {description} -> description) (\s@DecoderManifestSummary' {} a -> s {description = a} :: DecoderManifestSummary)
+
+-- | The ARN of a vehicle model (model manifest) associated with the decoder
+-- manifest.
+decoderManifestSummary_modelManifestArn :: Lens.Lens' DecoderManifestSummary (Prelude.Maybe Prelude.Text)
+decoderManifestSummary_modelManifestArn = Lens.lens (\DecoderManifestSummary' {modelManifestArn} -> modelManifestArn) (\s@DecoderManifestSummary' {} a -> s {modelManifestArn = a} :: DecoderManifestSummary)
+
+-- | The name of the decoder manifest.
+decoderManifestSummary_name :: Lens.Lens' DecoderManifestSummary (Prelude.Maybe Prelude.Text)
+decoderManifestSummary_name = Lens.lens (\DecoderManifestSummary' {name} -> name) (\s@DecoderManifestSummary' {} a -> s {name = a} :: DecoderManifestSummary)
+
+-- | The state of the decoder manifest. If the status is @ACTIVE@, the
+-- decoder manifest can\'t be edited. If the status is marked @DRAFT@, you
+-- can edit the decoder manifest.
+decoderManifestSummary_status :: Lens.Lens' DecoderManifestSummary (Prelude.Maybe ManifestStatus)
+decoderManifestSummary_status = Lens.lens (\DecoderManifestSummary' {status} -> status) (\s@DecoderManifestSummary' {} a -> s {status = a} :: DecoderManifestSummary)
+
+-- | The time the decoder manifest was created in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+decoderManifestSummary_creationTime :: Lens.Lens' DecoderManifestSummary Prelude.UTCTime
+decoderManifestSummary_creationTime = Lens.lens (\DecoderManifestSummary' {creationTime} -> creationTime) (\s@DecoderManifestSummary' {} a -> s {creationTime = a} :: DecoderManifestSummary) Prelude.. Data._Time
+
+-- | The time the decoder manifest was last updated in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+decoderManifestSummary_lastModificationTime :: Lens.Lens' DecoderManifestSummary Prelude.UTCTime
+decoderManifestSummary_lastModificationTime = Lens.lens (\DecoderManifestSummary' {lastModificationTime} -> lastModificationTime) (\s@DecoderManifestSummary' {} a -> s {lastModificationTime = a} :: DecoderManifestSummary) Prelude.. Data._Time
+
+instance Data.FromJSON DecoderManifestSummary where
+  parseJSON =
+    Data.withObject
+      "DecoderManifestSummary"
+      ( \x ->
+          DecoderManifestSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "modelManifestArn")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "lastModificationTime")
+      )
+
+instance Prelude.Hashable DecoderManifestSummary where
+  hashWithSalt _salt DecoderManifestSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` modelManifestArn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+
+instance Prelude.NFData DecoderManifestSummary where
+  rnf DecoderManifestSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/Types/DiagnosticsMode.hs b/gen/Amazonka/IoTFleetWise/Types/DiagnosticsMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/DiagnosticsMode.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.IoTFleetWise.Types.DiagnosticsMode
+-- 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.IoTFleetWise.Types.DiagnosticsMode
+  ( DiagnosticsMode
+      ( ..,
+        DiagnosticsMode_OFF,
+        DiagnosticsMode_SEND_ACTIVE_DTCS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DiagnosticsMode = DiagnosticsMode'
+  { fromDiagnosticsMode ::
+      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 DiagnosticsMode_OFF :: DiagnosticsMode
+pattern DiagnosticsMode_OFF = DiagnosticsMode' "OFF"
+
+pattern DiagnosticsMode_SEND_ACTIVE_DTCS :: DiagnosticsMode
+pattern DiagnosticsMode_SEND_ACTIVE_DTCS = DiagnosticsMode' "SEND_ACTIVE_DTCS"
+
+{-# COMPLETE
+  DiagnosticsMode_OFF,
+  DiagnosticsMode_SEND_ACTIVE_DTCS,
+  DiagnosticsMode'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/FleetSummary.hs b/gen/Amazonka/IoTFleetWise/Types/FleetSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/FleetSummary.hs
@@ -0,0 +1,153 @@
+{-# 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.IoTFleetWise.Types.FleetSummary
+-- 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.IoTFleetWise.Types.FleetSummary 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 fleet.
+--
+-- You can use the API operation to return this information about multiple
+-- fleets.
+--
+-- /See:/ 'newFleetSummary' smart constructor.
+data FleetSummary = FleetSummary'
+  { -- | A brief description of the fleet.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The time the fleet was last updated in seconds since epoch (January 1,
+    -- 1970 at midnight UTC time).
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The unique ID of the fleet.
+    id :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the fleet.
+    arn :: Prelude.Text,
+    -- | The ARN of the signal catalog associated with the fleet.
+    signalCatalogArn :: Prelude.Text,
+    -- | The time the fleet was created, in seconds since epoch (January 1, 1970
+    -- at midnight UTC time).
+    creationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'fleetSummary_description' - A brief description of the fleet.
+--
+-- 'lastModificationTime', 'fleetSummary_lastModificationTime' - The time the fleet was last updated in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+--
+-- 'id', 'fleetSummary_id' - The unique ID of the fleet.
+--
+-- 'arn', 'fleetSummary_arn' - The Amazon Resource Name (ARN) of the fleet.
+--
+-- 'signalCatalogArn', 'fleetSummary_signalCatalogArn' - The ARN of the signal catalog associated with the fleet.
+--
+-- 'creationTime', 'fleetSummary_creationTime' - The time the fleet was created, in seconds since epoch (January 1, 1970
+-- at midnight UTC time).
+newFleetSummary ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'signalCatalogArn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  FleetSummary
+newFleetSummary
+  pId_
+  pArn_
+  pSignalCatalogArn_
+  pCreationTime_ =
+    FleetSummary'
+      { description = Prelude.Nothing,
+        lastModificationTime = Prelude.Nothing,
+        id = pId_,
+        arn = pArn_,
+        signalCatalogArn = pSignalCatalogArn_,
+        creationTime = Data._Time Lens.# pCreationTime_
+      }
+
+-- | A brief description of the fleet.
+fleetSummary_description :: Lens.Lens' FleetSummary (Prelude.Maybe Prelude.Text)
+fleetSummary_description = Lens.lens (\FleetSummary' {description} -> description) (\s@FleetSummary' {} a -> s {description = a} :: FleetSummary)
+
+-- | The time the fleet was last updated in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+fleetSummary_lastModificationTime :: Lens.Lens' FleetSummary (Prelude.Maybe Prelude.UTCTime)
+fleetSummary_lastModificationTime = Lens.lens (\FleetSummary' {lastModificationTime} -> lastModificationTime) (\s@FleetSummary' {} a -> s {lastModificationTime = a} :: FleetSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The unique ID of the fleet.
+fleetSummary_id :: Lens.Lens' FleetSummary Prelude.Text
+fleetSummary_id = Lens.lens (\FleetSummary' {id} -> id) (\s@FleetSummary' {} a -> s {id = a} :: FleetSummary)
+
+-- | The Amazon Resource Name (ARN) of the fleet.
+fleetSummary_arn :: Lens.Lens' FleetSummary Prelude.Text
+fleetSummary_arn = Lens.lens (\FleetSummary' {arn} -> arn) (\s@FleetSummary' {} a -> s {arn = a} :: FleetSummary)
+
+-- | The ARN of the signal catalog associated with the fleet.
+fleetSummary_signalCatalogArn :: Lens.Lens' FleetSummary Prelude.Text
+fleetSummary_signalCatalogArn = Lens.lens (\FleetSummary' {signalCatalogArn} -> signalCatalogArn) (\s@FleetSummary' {} a -> s {signalCatalogArn = a} :: FleetSummary)
+
+-- | The time the fleet was created, in seconds since epoch (January 1, 1970
+-- at midnight UTC time).
+fleetSummary_creationTime :: Lens.Lens' FleetSummary Prelude.UTCTime
+fleetSummary_creationTime = Lens.lens (\FleetSummary' {creationTime} -> creationTime) (\s@FleetSummary' {} a -> s {creationTime = a} :: FleetSummary) Prelude.. Data._Time
+
+instance Data.FromJSON FleetSummary where
+  parseJSON =
+    Data.withObject
+      "FleetSummary"
+      ( \x ->
+          FleetSummary'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastModificationTime")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "signalCatalogArn")
+            Prelude.<*> (x Data..: "creationTime")
+      )
+
+instance Prelude.Hashable FleetSummary where
+  hashWithSalt _salt FleetSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` signalCatalogArn
+      `Prelude.hashWithSalt` creationTime
+
+instance Prelude.NFData FleetSummary where
+  rnf FleetSummary' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+      `Prelude.seq` Prelude.rnf creationTime
diff --git a/gen/Amazonka/IoTFleetWise/Types/FormattedVss.hs b/gen/Amazonka/IoTFleetWise/Types/FormattedVss.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/FormattedVss.hs
@@ -0,0 +1,68 @@
+{-# 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.IoTFleetWise.Types.FormattedVss
+-- 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.IoTFleetWise.Types.FormattedVss 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
+
+-- | Vehicle Signal Specification (VSS) is a precise language used to
+-- describe and model signals in vehicle networks. The JSON file collects
+-- signal specificiations in a VSS format.
+--
+-- /See:/ 'newFormattedVss' smart constructor.
+data FormattedVss = FormattedVss'
+  { -- | Provides the VSS in JSON format.
+    vssJson :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormattedVss' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vssJson', 'formattedVss_vssJson' - Provides the VSS in JSON format.
+newFormattedVss ::
+  FormattedVss
+newFormattedVss =
+  FormattedVss' {vssJson = Prelude.Nothing}
+
+-- | Provides the VSS in JSON format.
+formattedVss_vssJson :: Lens.Lens' FormattedVss (Prelude.Maybe Prelude.Text)
+formattedVss_vssJson = Lens.lens (\FormattedVss' {vssJson} -> vssJson) (\s@FormattedVss' {} a -> s {vssJson = a} :: FormattedVss)
+
+instance Prelude.Hashable FormattedVss where
+  hashWithSalt _salt FormattedVss' {..} =
+    _salt `Prelude.hashWithSalt` vssJson
+
+instance Prelude.NFData FormattedVss where
+  rnf FormattedVss' {..} = Prelude.rnf vssJson
+
+instance Data.ToJSON FormattedVss where
+  toJSON FormattedVss' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("vssJson" Data..=) Prelude.<$> vssJson]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/IamRegistrationResponse.hs b/gen/Amazonka/IoTFleetWise/Types/IamRegistrationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/IamRegistrationResponse.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.Types.IamRegistrationResponse
+-- 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.IoTFleetWise.Types.IamRegistrationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.RegistrationStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about registering an Identity and Access Management (IAM)
+-- resource so Amazon Web Services IoT FleetWise edge agent software can
+-- transfer your vehicle data to Amazon Timestream.
+--
+-- /See:/ 'newIamRegistrationResponse' smart constructor.
+data IamRegistrationResponse = IamRegistrationResponse'
+  { -- | A message associated with a registration error.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the IAM role to register.
+    roleArn :: Prelude.Text,
+    -- | The status of registering your IAM resource. The status can be one of
+    -- @REGISTRATION_SUCCESS@, @REGISTRATION_PENDING@, @REGISTRATION_FAILURE@.
+    registrationStatus :: RegistrationStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IamRegistrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorMessage', 'iamRegistrationResponse_errorMessage' - A message associated with a registration error.
+--
+-- 'roleArn', 'iamRegistrationResponse_roleArn' - The Amazon Resource Name (ARN) of the IAM role to register.
+--
+-- 'registrationStatus', 'iamRegistrationResponse_registrationStatus' - The status of registering your IAM resource. The status can be one of
+-- @REGISTRATION_SUCCESS@, @REGISTRATION_PENDING@, @REGISTRATION_FAILURE@.
+newIamRegistrationResponse ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'registrationStatus'
+  RegistrationStatus ->
+  IamRegistrationResponse
+newIamRegistrationResponse
+  pRoleArn_
+  pRegistrationStatus_ =
+    IamRegistrationResponse'
+      { errorMessage =
+          Prelude.Nothing,
+        roleArn = pRoleArn_,
+        registrationStatus = pRegistrationStatus_
+      }
+
+-- | A message associated with a registration error.
+iamRegistrationResponse_errorMessage :: Lens.Lens' IamRegistrationResponse (Prelude.Maybe Prelude.Text)
+iamRegistrationResponse_errorMessage = Lens.lens (\IamRegistrationResponse' {errorMessage} -> errorMessage) (\s@IamRegistrationResponse' {} a -> s {errorMessage = a} :: IamRegistrationResponse)
+
+-- | The Amazon Resource Name (ARN) of the IAM role to register.
+iamRegistrationResponse_roleArn :: Lens.Lens' IamRegistrationResponse Prelude.Text
+iamRegistrationResponse_roleArn = Lens.lens (\IamRegistrationResponse' {roleArn} -> roleArn) (\s@IamRegistrationResponse' {} a -> s {roleArn = a} :: IamRegistrationResponse)
+
+-- | The status of registering your IAM resource. The status can be one of
+-- @REGISTRATION_SUCCESS@, @REGISTRATION_PENDING@, @REGISTRATION_FAILURE@.
+iamRegistrationResponse_registrationStatus :: Lens.Lens' IamRegistrationResponse RegistrationStatus
+iamRegistrationResponse_registrationStatus = Lens.lens (\IamRegistrationResponse' {registrationStatus} -> registrationStatus) (\s@IamRegistrationResponse' {} a -> s {registrationStatus = a} :: IamRegistrationResponse)
+
+instance Data.FromJSON IamRegistrationResponse where
+  parseJSON =
+    Data.withObject
+      "IamRegistrationResponse"
+      ( \x ->
+          IamRegistrationResponse'
+            Prelude.<$> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..: "roleArn")
+            Prelude.<*> (x Data..: "registrationStatus")
+      )
+
+instance Prelude.Hashable IamRegistrationResponse where
+  hashWithSalt _salt IamRegistrationResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` registrationStatus
+
+instance Prelude.NFData IamRegistrationResponse where
+  rnf IamRegistrationResponse' {..} =
+    Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf registrationStatus
diff --git a/gen/Amazonka/IoTFleetWise/Types/IamResources.hs b/gen/Amazonka/IoTFleetWise/Types/IamResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/IamResources.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.IoTFleetWise.Types.IamResources
+-- 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.IoTFleetWise.Types.IamResources 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 IAM resource that enables Amazon Web Services IoT FleetWise edge
+-- agent software to send data to Amazon Timestream.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html IAM roles>
+-- in the /Identity and Access Management User Guide/.
+--
+-- /See:/ 'newIamResources' smart constructor.
+data IamResources = IamResources'
+  { -- | The Amazon Resource Name (ARN) of the IAM resource that allows Amazon
+    -- Web Services IoT FleetWise to send data to Amazon Timestream. For
+    -- example, @arn:aws:iam::123456789012:role\/SERVICE-ROLE-ARN@.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IamResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roleArn', 'iamResources_roleArn' - The Amazon Resource Name (ARN) of the IAM resource that allows Amazon
+-- Web Services IoT FleetWise to send data to Amazon Timestream. For
+-- example, @arn:aws:iam::123456789012:role\/SERVICE-ROLE-ARN@.
+newIamResources ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  IamResources
+newIamResources pRoleArn_ =
+  IamResources' {roleArn = pRoleArn_}
+
+-- | The Amazon Resource Name (ARN) of the IAM resource that allows Amazon
+-- Web Services IoT FleetWise to send data to Amazon Timestream. For
+-- example, @arn:aws:iam::123456789012:role\/SERVICE-ROLE-ARN@.
+iamResources_roleArn :: Lens.Lens' IamResources Prelude.Text
+iamResources_roleArn = Lens.lens (\IamResources' {roleArn} -> roleArn) (\s@IamResources' {} a -> s {roleArn = a} :: IamResources)
+
+instance Data.FromJSON IamResources where
+  parseJSON =
+    Data.withObject
+      "IamResources"
+      ( \x ->
+          IamResources' Prelude.<$> (x Data..: "roleArn")
+      )
+
+instance Prelude.Hashable IamResources where
+  hashWithSalt _salt IamResources' {..} =
+    _salt `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData IamResources where
+  rnf IamResources' {..} = Prelude.rnf roleArn
+
+instance Data.ToJSON IamResources where
+  toJSON IamResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("roleArn" Data..= roleArn)]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/LogType.hs b/gen/Amazonka/IoTFleetWise/Types/LogType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/LogType.hs
@@ -0,0 +1,68 @@
+{-# 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.IoTFleetWise.Types.LogType
+-- 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.IoTFleetWise.Types.LogType
+  ( LogType
+      ( ..,
+        LogType_ERROR,
+        LogType_OFF
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LogType = LogType' {fromLogType :: 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 LogType_ERROR :: LogType
+pattern LogType_ERROR = LogType' "ERROR"
+
+pattern LogType_OFF :: LogType
+pattern LogType_OFF = LogType' "OFF"
+
+{-# COMPLETE
+  LogType_ERROR,
+  LogType_OFF,
+  LogType'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/ManifestStatus.hs b/gen/Amazonka/IoTFleetWise/Types/ManifestStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/ManifestStatus.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.IoTFleetWise.Types.ManifestStatus
+-- 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.IoTFleetWise.Types.ManifestStatus
+  ( ManifestStatus
+      ( ..,
+        ManifestStatus_ACTIVE,
+        ManifestStatus_DRAFT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ManifestStatus = ManifestStatus'
+  { fromManifestStatus ::
+      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 ManifestStatus_ACTIVE :: ManifestStatus
+pattern ManifestStatus_ACTIVE = ManifestStatus' "ACTIVE"
+
+pattern ManifestStatus_DRAFT :: ManifestStatus
+pattern ManifestStatus_DRAFT = ManifestStatus' "DRAFT"
+
+{-# COMPLETE
+  ManifestStatus_ACTIVE,
+  ManifestStatus_DRAFT,
+  ManifestStatus'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/ModelManifestSummary.hs b/gen/Amazonka/IoTFleetWise/Types/ModelManifestSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/ModelManifestSummary.hs
@@ -0,0 +1,165 @@
+{-# 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.IoTFleetWise.Types.ModelManifestSummary
+-- 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.IoTFleetWise.Types.ModelManifestSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.ManifestStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a vehicle model (model manifest). You can use the API
+-- operation to return this information about multiple vehicle models.
+--
+-- /See:/ 'newModelManifestSummary' smart constructor.
+data ModelManifestSummary = ModelManifestSummary'
+  { -- | The Amazon Resource Name (ARN) of the vehicle model.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the vehicle model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the vehicle model.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the signal catalog associated with the vehicle model.
+    signalCatalogArn :: Prelude.Maybe Prelude.Text,
+    -- | The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+    -- model can\'t be edited. If the status is @DRAFT@, you can edit the
+    -- vehicle model.
+    status :: Prelude.Maybe ManifestStatus,
+    -- | The time the vehicle model was created, in seconds since epoch (January
+    -- 1, 1970 at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The time the vehicle model was last updated, in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time).
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModelManifestSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'modelManifestSummary_arn' - The Amazon Resource Name (ARN) of the vehicle model.
+--
+-- 'description', 'modelManifestSummary_description' - A brief description of the vehicle model.
+--
+-- 'name', 'modelManifestSummary_name' - The name of the vehicle model.
+--
+-- 'signalCatalogArn', 'modelManifestSummary_signalCatalogArn' - The ARN of the signal catalog associated with the vehicle model.
+--
+-- 'status', 'modelManifestSummary_status' - The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+-- model can\'t be edited. If the status is @DRAFT@, you can edit the
+-- vehicle model.
+--
+-- 'creationTime', 'modelManifestSummary_creationTime' - The time the vehicle model was created, in seconds since epoch (January
+-- 1, 1970 at midnight UTC time).
+--
+-- 'lastModificationTime', 'modelManifestSummary_lastModificationTime' - The time the vehicle model was last updated, in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+newModelManifestSummary ::
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  ModelManifestSummary
+newModelManifestSummary
+  pCreationTime_
+  pLastModificationTime_ =
+    ModelManifestSummary'
+      { arn = Prelude.Nothing,
+        description = Prelude.Nothing,
+        name = Prelude.Nothing,
+        signalCatalogArn = Prelude.Nothing,
+        status = Prelude.Nothing,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | The Amazon Resource Name (ARN) of the vehicle model.
+modelManifestSummary_arn :: Lens.Lens' ModelManifestSummary (Prelude.Maybe Prelude.Text)
+modelManifestSummary_arn = Lens.lens (\ModelManifestSummary' {arn} -> arn) (\s@ModelManifestSummary' {} a -> s {arn = a} :: ModelManifestSummary)
+
+-- | A brief description of the vehicle model.
+modelManifestSummary_description :: Lens.Lens' ModelManifestSummary (Prelude.Maybe Prelude.Text)
+modelManifestSummary_description = Lens.lens (\ModelManifestSummary' {description} -> description) (\s@ModelManifestSummary' {} a -> s {description = a} :: ModelManifestSummary)
+
+-- | The name of the vehicle model.
+modelManifestSummary_name :: Lens.Lens' ModelManifestSummary (Prelude.Maybe Prelude.Text)
+modelManifestSummary_name = Lens.lens (\ModelManifestSummary' {name} -> name) (\s@ModelManifestSummary' {} a -> s {name = a} :: ModelManifestSummary)
+
+-- | The ARN of the signal catalog associated with the vehicle model.
+modelManifestSummary_signalCatalogArn :: Lens.Lens' ModelManifestSummary (Prelude.Maybe Prelude.Text)
+modelManifestSummary_signalCatalogArn = Lens.lens (\ModelManifestSummary' {signalCatalogArn} -> signalCatalogArn) (\s@ModelManifestSummary' {} a -> s {signalCatalogArn = a} :: ModelManifestSummary)
+
+-- | The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+-- model can\'t be edited. If the status is @DRAFT@, you can edit the
+-- vehicle model.
+modelManifestSummary_status :: Lens.Lens' ModelManifestSummary (Prelude.Maybe ManifestStatus)
+modelManifestSummary_status = Lens.lens (\ModelManifestSummary' {status} -> status) (\s@ModelManifestSummary' {} a -> s {status = a} :: ModelManifestSummary)
+
+-- | The time the vehicle model was created, in seconds since epoch (January
+-- 1, 1970 at midnight UTC time).
+modelManifestSummary_creationTime :: Lens.Lens' ModelManifestSummary Prelude.UTCTime
+modelManifestSummary_creationTime = Lens.lens (\ModelManifestSummary' {creationTime} -> creationTime) (\s@ModelManifestSummary' {} a -> s {creationTime = a} :: ModelManifestSummary) Prelude.. Data._Time
+
+-- | The time the vehicle model was last updated, in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+modelManifestSummary_lastModificationTime :: Lens.Lens' ModelManifestSummary Prelude.UTCTime
+modelManifestSummary_lastModificationTime = Lens.lens (\ModelManifestSummary' {lastModificationTime} -> lastModificationTime) (\s@ModelManifestSummary' {} a -> s {lastModificationTime = a} :: ModelManifestSummary) Prelude.. Data._Time
+
+instance Data.FromJSON ModelManifestSummary where
+  parseJSON =
+    Data.withObject
+      "ModelManifestSummary"
+      ( \x ->
+          ModelManifestSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "signalCatalogArn")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "lastModificationTime")
+      )
+
+instance Prelude.Hashable ModelManifestSummary where
+  hashWithSalt _salt ModelManifestSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` signalCatalogArn
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+
+instance Prelude.NFData ModelManifestSummary where
+  rnf ModelManifestSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf signalCatalogArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/Types/NetworkFileDefinition.hs b/gen/Amazonka/IoTFleetWise/Types/NetworkFileDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/NetworkFileDefinition.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.IoTFleetWise.Types.NetworkFileDefinition
+-- 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.IoTFleetWise.Types.NetworkFileDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.CanDbcDefinition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifications for defining a vehicle network.
+--
+-- /See:/ 'newNetworkFileDefinition' smart constructor.
+data NetworkFileDefinition = NetworkFileDefinition'
+  { -- | Information, including CAN DBC files, about the configurations used to
+    -- create a decoder manifest.
+    canDbc :: Prelude.Maybe CanDbcDefinition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkFileDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'canDbc', 'networkFileDefinition_canDbc' - Information, including CAN DBC files, about the configurations used to
+-- create a decoder manifest.
+newNetworkFileDefinition ::
+  NetworkFileDefinition
+newNetworkFileDefinition =
+  NetworkFileDefinition' {canDbc = Prelude.Nothing}
+
+-- | Information, including CAN DBC files, about the configurations used to
+-- create a decoder manifest.
+networkFileDefinition_canDbc :: Lens.Lens' NetworkFileDefinition (Prelude.Maybe CanDbcDefinition)
+networkFileDefinition_canDbc = Lens.lens (\NetworkFileDefinition' {canDbc} -> canDbc) (\s@NetworkFileDefinition' {} a -> s {canDbc = a} :: NetworkFileDefinition)
+
+instance Prelude.Hashable NetworkFileDefinition where
+  hashWithSalt _salt NetworkFileDefinition' {..} =
+    _salt `Prelude.hashWithSalt` canDbc
+
+instance Prelude.NFData NetworkFileDefinition where
+  rnf NetworkFileDefinition' {..} = Prelude.rnf canDbc
+
+instance Data.ToJSON NetworkFileDefinition where
+  toJSON NetworkFileDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("canDbc" Data..=) Prelude.<$> canDbc]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/NetworkInterface.hs b/gen/Amazonka/IoTFleetWise/Types/NetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/NetworkInterface.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.IoTFleetWise.Types.NetworkInterface
+-- 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.IoTFleetWise.Types.NetworkInterface where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.CanInterface
+import Amazonka.IoTFleetWise.Types.NetworkInterfaceType
+import Amazonka.IoTFleetWise.Types.ObdInterface
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a node and its specifications in an in-vehicle communication
+-- network. All signal decoders must be associated with a network node.
+--
+-- To return this information about all the network interfaces specified in
+-- a decoder manifest, use the API operation.
+--
+-- /See:/ 'newNetworkInterface' smart constructor.
+data NetworkInterface = NetworkInterface'
+  { -- | Information about a network interface specified by the Controller Area
+    -- Network (CAN) protocol.
+    canInterface :: Prelude.Maybe CanInterface,
+    -- | Information about a network interface specified by the On-board
+    -- diagnostic (OBD) II protocol.
+    obdInterface :: Prelude.Maybe ObdInterface,
+    -- | The ID of the network interface.
+    interfaceId :: Prelude.Text,
+    -- | The network protocol for the vehicle. For example, @CAN_SIGNAL@
+    -- specifies a protocol that defines how data is communicated between
+    -- electronic control units (ECUs). @OBD_SIGNAL@ specifies a protocol that
+    -- defines how self-diagnostic data is communicated between ECUs.
+    type' :: NetworkInterfaceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'canInterface', 'networkInterface_canInterface' - Information about a network interface specified by the Controller Area
+-- Network (CAN) protocol.
+--
+-- 'obdInterface', 'networkInterface_obdInterface' - Information about a network interface specified by the On-board
+-- diagnostic (OBD) II protocol.
+--
+-- 'interfaceId', 'networkInterface_interfaceId' - The ID of the network interface.
+--
+-- 'type'', 'networkInterface_type' - The network protocol for the vehicle. For example, @CAN_SIGNAL@
+-- specifies a protocol that defines how data is communicated between
+-- electronic control units (ECUs). @OBD_SIGNAL@ specifies a protocol that
+-- defines how self-diagnostic data is communicated between ECUs.
+newNetworkInterface ::
+  -- | 'interfaceId'
+  Prelude.Text ->
+  -- | 'type''
+  NetworkInterfaceType ->
+  NetworkInterface
+newNetworkInterface pInterfaceId_ pType_ =
+  NetworkInterface'
+    { canInterface = Prelude.Nothing,
+      obdInterface = Prelude.Nothing,
+      interfaceId = pInterfaceId_,
+      type' = pType_
+    }
+
+-- | Information about a network interface specified by the Controller Area
+-- Network (CAN) protocol.
+networkInterface_canInterface :: Lens.Lens' NetworkInterface (Prelude.Maybe CanInterface)
+networkInterface_canInterface = Lens.lens (\NetworkInterface' {canInterface} -> canInterface) (\s@NetworkInterface' {} a -> s {canInterface = a} :: NetworkInterface)
+
+-- | Information about a network interface specified by the On-board
+-- diagnostic (OBD) II protocol.
+networkInterface_obdInterface :: Lens.Lens' NetworkInterface (Prelude.Maybe ObdInterface)
+networkInterface_obdInterface = Lens.lens (\NetworkInterface' {obdInterface} -> obdInterface) (\s@NetworkInterface' {} a -> s {obdInterface = a} :: NetworkInterface)
+
+-- | The ID of the network interface.
+networkInterface_interfaceId :: Lens.Lens' NetworkInterface Prelude.Text
+networkInterface_interfaceId = Lens.lens (\NetworkInterface' {interfaceId} -> interfaceId) (\s@NetworkInterface' {} a -> s {interfaceId = a} :: NetworkInterface)
+
+-- | The network protocol for the vehicle. For example, @CAN_SIGNAL@
+-- specifies a protocol that defines how data is communicated between
+-- electronic control units (ECUs). @OBD_SIGNAL@ specifies a protocol that
+-- defines how self-diagnostic data is communicated between ECUs.
+networkInterface_type :: Lens.Lens' NetworkInterface NetworkInterfaceType
+networkInterface_type = Lens.lens (\NetworkInterface' {type'} -> type') (\s@NetworkInterface' {} a -> s {type' = a} :: NetworkInterface)
+
+instance Data.FromJSON NetworkInterface where
+  parseJSON =
+    Data.withObject
+      "NetworkInterface"
+      ( \x ->
+          NetworkInterface'
+            Prelude.<$> (x Data..:? "canInterface")
+            Prelude.<*> (x Data..:? "obdInterface")
+            Prelude.<*> (x Data..: "interfaceId")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable NetworkInterface where
+  hashWithSalt _salt NetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` canInterface
+      `Prelude.hashWithSalt` obdInterface
+      `Prelude.hashWithSalt` interfaceId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData NetworkInterface where
+  rnf NetworkInterface' {..} =
+    Prelude.rnf canInterface
+      `Prelude.seq` Prelude.rnf obdInterface
+      `Prelude.seq` Prelude.rnf interfaceId
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON NetworkInterface where
+  toJSON NetworkInterface' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("canInterface" Data..=) Prelude.<$> canInterface,
+            ("obdInterface" Data..=) Prelude.<$> obdInterface,
+            Prelude.Just ("interfaceId" Data..= interfaceId),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/NetworkInterfaceType.hs b/gen/Amazonka/IoTFleetWise/Types/NetworkInterfaceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/NetworkInterfaceType.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.IoTFleetWise.Types.NetworkInterfaceType
+-- 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.IoTFleetWise.Types.NetworkInterfaceType
+  ( NetworkInterfaceType
+      ( ..,
+        NetworkInterfaceType_CAN_INTERFACE,
+        NetworkInterfaceType_OBD_INTERFACE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkInterfaceType = NetworkInterfaceType'
+  { fromNetworkInterfaceType ::
+      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 NetworkInterfaceType_CAN_INTERFACE :: NetworkInterfaceType
+pattern NetworkInterfaceType_CAN_INTERFACE = NetworkInterfaceType' "CAN_INTERFACE"
+
+pattern NetworkInterfaceType_OBD_INTERFACE :: NetworkInterfaceType
+pattern NetworkInterfaceType_OBD_INTERFACE = NetworkInterfaceType' "OBD_INTERFACE"
+
+{-# COMPLETE
+  NetworkInterfaceType_CAN_INTERFACE,
+  NetworkInterfaceType_OBD_INTERFACE,
+  NetworkInterfaceType'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/Node.hs b/gen/Amazonka/IoTFleetWise/Types/Node.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/Node.hs
@@ -0,0 +1,141 @@
+{-# 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.IoTFleetWise.Types.Node
+-- 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.IoTFleetWise.Types.Node where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.Actuator
+import Amazonka.IoTFleetWise.Types.Attribute
+import Amazonka.IoTFleetWise.Types.Branch
+import Amazonka.IoTFleetWise.Types.Sensor
+import qualified Amazonka.Prelude as Prelude
+
+-- | A general abstraction of a signal. A node can be specified as an
+-- actuator, attribute, branch, or sensor.
+--
+-- /See:/ 'newNode' smart constructor.
+data Node = Node'
+  { -- | Information about a node specified as an actuator.
+    --
+    -- An actuator is a digital representation of a vehicle device.
+    actuator :: Prelude.Maybe Actuator,
+    -- | Information about a node specified as an attribute.
+    --
+    -- An attribute represents static information about a vehicle.
+    attribute :: Prelude.Maybe Attribute,
+    -- | Information about a node specified as a branch.
+    --
+    -- A group of signals that are defined in a hierarchical structure.
+    branch :: Prelude.Maybe Branch,
+    sensor :: Prelude.Maybe Sensor
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Node' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actuator', 'node_actuator' - Information about a node specified as an actuator.
+--
+-- An actuator is a digital representation of a vehicle device.
+--
+-- 'attribute', 'node_attribute' - Information about a node specified as an attribute.
+--
+-- An attribute represents static information about a vehicle.
+--
+-- 'branch', 'node_branch' - Information about a node specified as a branch.
+--
+-- A group of signals that are defined in a hierarchical structure.
+--
+-- 'sensor', 'node_sensor' - Undocumented member.
+newNode ::
+  Node
+newNode =
+  Node'
+    { actuator = Prelude.Nothing,
+      attribute = Prelude.Nothing,
+      branch = Prelude.Nothing,
+      sensor = Prelude.Nothing
+    }
+
+-- | Information about a node specified as an actuator.
+--
+-- An actuator is a digital representation of a vehicle device.
+node_actuator :: Lens.Lens' Node (Prelude.Maybe Actuator)
+node_actuator = Lens.lens (\Node' {actuator} -> actuator) (\s@Node' {} a -> s {actuator = a} :: Node)
+
+-- | Information about a node specified as an attribute.
+--
+-- An attribute represents static information about a vehicle.
+node_attribute :: Lens.Lens' Node (Prelude.Maybe Attribute)
+node_attribute = Lens.lens (\Node' {attribute} -> attribute) (\s@Node' {} a -> s {attribute = a} :: Node)
+
+-- | Information about a node specified as a branch.
+--
+-- A group of signals that are defined in a hierarchical structure.
+node_branch :: Lens.Lens' Node (Prelude.Maybe Branch)
+node_branch = Lens.lens (\Node' {branch} -> branch) (\s@Node' {} a -> s {branch = a} :: Node)
+
+-- | Undocumented member.
+node_sensor :: Lens.Lens' Node (Prelude.Maybe Sensor)
+node_sensor = Lens.lens (\Node' {sensor} -> sensor) (\s@Node' {} a -> s {sensor = a} :: Node)
+
+instance Data.FromJSON Node where
+  parseJSON =
+    Data.withObject
+      "Node"
+      ( \x ->
+          Node'
+            Prelude.<$> (x Data..:? "actuator")
+            Prelude.<*> (x Data..:? "attribute")
+            Prelude.<*> (x Data..:? "branch")
+            Prelude.<*> (x Data..:? "sensor")
+      )
+
+instance Prelude.Hashable Node where
+  hashWithSalt _salt Node' {..} =
+    _salt
+      `Prelude.hashWithSalt` actuator
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` branch
+      `Prelude.hashWithSalt` sensor
+
+instance Prelude.NFData Node where
+  rnf Node' {..} =
+    Prelude.rnf actuator
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf branch
+      `Prelude.seq` Prelude.rnf sensor
+
+instance Data.ToJSON Node where
+  toJSON Node' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("actuator" Data..=) Prelude.<$> actuator,
+            ("attribute" Data..=) Prelude.<$> attribute,
+            ("branch" Data..=) Prelude.<$> branch,
+            ("sensor" Data..=) Prelude.<$> sensor
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/NodeCounts.hs b/gen/Amazonka/IoTFleetWise/Types/NodeCounts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/NodeCounts.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.IoTFleetWise.Types.NodeCounts
+-- 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.IoTFleetWise.Types.NodeCounts 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 the number of nodes and node types in a vehicle
+-- network.
+--
+-- /See:/ 'newNodeCounts' smart constructor.
+data NodeCounts = NodeCounts'
+  { -- | The total number of nodes in a vehicle network that represent actuators.
+    totalActuators :: Prelude.Maybe Prelude.Int,
+    -- | The total number of nodes in a vehicle network that represent
+    -- attributes.
+    totalAttributes :: Prelude.Maybe Prelude.Int,
+    -- | The total number of nodes in a vehicle network that represent branches.
+    totalBranches :: Prelude.Maybe Prelude.Int,
+    -- | The total number of nodes in a vehicle network.
+    totalNodes :: Prelude.Maybe Prelude.Int,
+    -- | The total number of nodes in a vehicle network that represent sensors.
+    totalSensors :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NodeCounts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'totalActuators', 'nodeCounts_totalActuators' - The total number of nodes in a vehicle network that represent actuators.
+--
+-- 'totalAttributes', 'nodeCounts_totalAttributes' - The total number of nodes in a vehicle network that represent
+-- attributes.
+--
+-- 'totalBranches', 'nodeCounts_totalBranches' - The total number of nodes in a vehicle network that represent branches.
+--
+-- 'totalNodes', 'nodeCounts_totalNodes' - The total number of nodes in a vehicle network.
+--
+-- 'totalSensors', 'nodeCounts_totalSensors' - The total number of nodes in a vehicle network that represent sensors.
+newNodeCounts ::
+  NodeCounts
+newNodeCounts =
+  NodeCounts'
+    { totalActuators = Prelude.Nothing,
+      totalAttributes = Prelude.Nothing,
+      totalBranches = Prelude.Nothing,
+      totalNodes = Prelude.Nothing,
+      totalSensors = Prelude.Nothing
+    }
+
+-- | The total number of nodes in a vehicle network that represent actuators.
+nodeCounts_totalActuators :: Lens.Lens' NodeCounts (Prelude.Maybe Prelude.Int)
+nodeCounts_totalActuators = Lens.lens (\NodeCounts' {totalActuators} -> totalActuators) (\s@NodeCounts' {} a -> s {totalActuators = a} :: NodeCounts)
+
+-- | The total number of nodes in a vehicle network that represent
+-- attributes.
+nodeCounts_totalAttributes :: Lens.Lens' NodeCounts (Prelude.Maybe Prelude.Int)
+nodeCounts_totalAttributes = Lens.lens (\NodeCounts' {totalAttributes} -> totalAttributes) (\s@NodeCounts' {} a -> s {totalAttributes = a} :: NodeCounts)
+
+-- | The total number of nodes in a vehicle network that represent branches.
+nodeCounts_totalBranches :: Lens.Lens' NodeCounts (Prelude.Maybe Prelude.Int)
+nodeCounts_totalBranches = Lens.lens (\NodeCounts' {totalBranches} -> totalBranches) (\s@NodeCounts' {} a -> s {totalBranches = a} :: NodeCounts)
+
+-- | The total number of nodes in a vehicle network.
+nodeCounts_totalNodes :: Lens.Lens' NodeCounts (Prelude.Maybe Prelude.Int)
+nodeCounts_totalNodes = Lens.lens (\NodeCounts' {totalNodes} -> totalNodes) (\s@NodeCounts' {} a -> s {totalNodes = a} :: NodeCounts)
+
+-- | The total number of nodes in a vehicle network that represent sensors.
+nodeCounts_totalSensors :: Lens.Lens' NodeCounts (Prelude.Maybe Prelude.Int)
+nodeCounts_totalSensors = Lens.lens (\NodeCounts' {totalSensors} -> totalSensors) (\s@NodeCounts' {} a -> s {totalSensors = a} :: NodeCounts)
+
+instance Data.FromJSON NodeCounts where
+  parseJSON =
+    Data.withObject
+      "NodeCounts"
+      ( \x ->
+          NodeCounts'
+            Prelude.<$> (x Data..:? "totalActuators")
+            Prelude.<*> (x Data..:? "totalAttributes")
+            Prelude.<*> (x Data..:? "totalBranches")
+            Prelude.<*> (x Data..:? "totalNodes")
+            Prelude.<*> (x Data..:? "totalSensors")
+      )
+
+instance Prelude.Hashable NodeCounts where
+  hashWithSalt _salt NodeCounts' {..} =
+    _salt
+      `Prelude.hashWithSalt` totalActuators
+      `Prelude.hashWithSalt` totalAttributes
+      `Prelude.hashWithSalt` totalBranches
+      `Prelude.hashWithSalt` totalNodes
+      `Prelude.hashWithSalt` totalSensors
+
+instance Prelude.NFData NodeCounts where
+  rnf NodeCounts' {..} =
+    Prelude.rnf totalActuators
+      `Prelude.seq` Prelude.rnf totalAttributes
+      `Prelude.seq` Prelude.rnf totalBranches
+      `Prelude.seq` Prelude.rnf totalNodes
+      `Prelude.seq` Prelude.rnf totalSensors
diff --git a/gen/Amazonka/IoTFleetWise/Types/NodeDataType.hs b/gen/Amazonka/IoTFleetWise/Types/NodeDataType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/NodeDataType.hs
@@ -0,0 +1,196 @@
+{-# 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.IoTFleetWise.Types.NodeDataType
+-- 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.IoTFleetWise.Types.NodeDataType
+  ( NodeDataType
+      ( ..,
+        NodeDataType_BOOLEAN,
+        NodeDataType_BOOLEAN_ARRAY,
+        NodeDataType_DOUBLE,
+        NodeDataType_DOUBLE_ARRAY,
+        NodeDataType_FLOAT,
+        NodeDataType_FLOAT_ARRAY,
+        NodeDataType_INT16,
+        NodeDataType_INT16_ARRAY,
+        NodeDataType_INT32,
+        NodeDataType_INT32_ARRAY,
+        NodeDataType_INT64,
+        NodeDataType_INT64_ARRAY,
+        NodeDataType_INT8,
+        NodeDataType_INT8_ARRAY,
+        NodeDataType_STRING,
+        NodeDataType_STRING_ARRAY,
+        NodeDataType_UINT16,
+        NodeDataType_UINT16_ARRAY,
+        NodeDataType_UINT32,
+        NodeDataType_UINT32_ARRAY,
+        NodeDataType_UINT64,
+        NodeDataType_UINT64_ARRAY,
+        NodeDataType_UINT8,
+        NodeDataType_UINT8_ARRAY,
+        NodeDataType_UNIX_TIMESTAMP,
+        NodeDataType_UNIX_TIMESTAMP_ARRAY,
+        NodeDataType_UNKNOWN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype NodeDataType = NodeDataType'
+  { fromNodeDataType ::
+      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 NodeDataType_BOOLEAN :: NodeDataType
+pattern NodeDataType_BOOLEAN = NodeDataType' "BOOLEAN"
+
+pattern NodeDataType_BOOLEAN_ARRAY :: NodeDataType
+pattern NodeDataType_BOOLEAN_ARRAY = NodeDataType' "BOOLEAN_ARRAY"
+
+pattern NodeDataType_DOUBLE :: NodeDataType
+pattern NodeDataType_DOUBLE = NodeDataType' "DOUBLE"
+
+pattern NodeDataType_DOUBLE_ARRAY :: NodeDataType
+pattern NodeDataType_DOUBLE_ARRAY = NodeDataType' "DOUBLE_ARRAY"
+
+pattern NodeDataType_FLOAT :: NodeDataType
+pattern NodeDataType_FLOAT = NodeDataType' "FLOAT"
+
+pattern NodeDataType_FLOAT_ARRAY :: NodeDataType
+pattern NodeDataType_FLOAT_ARRAY = NodeDataType' "FLOAT_ARRAY"
+
+pattern NodeDataType_INT16 :: NodeDataType
+pattern NodeDataType_INT16 = NodeDataType' "INT16"
+
+pattern NodeDataType_INT16_ARRAY :: NodeDataType
+pattern NodeDataType_INT16_ARRAY = NodeDataType' "INT16_ARRAY"
+
+pattern NodeDataType_INT32 :: NodeDataType
+pattern NodeDataType_INT32 = NodeDataType' "INT32"
+
+pattern NodeDataType_INT32_ARRAY :: NodeDataType
+pattern NodeDataType_INT32_ARRAY = NodeDataType' "INT32_ARRAY"
+
+pattern NodeDataType_INT64 :: NodeDataType
+pattern NodeDataType_INT64 = NodeDataType' "INT64"
+
+pattern NodeDataType_INT64_ARRAY :: NodeDataType
+pattern NodeDataType_INT64_ARRAY = NodeDataType' "INT64_ARRAY"
+
+pattern NodeDataType_INT8 :: NodeDataType
+pattern NodeDataType_INT8 = NodeDataType' "INT8"
+
+pattern NodeDataType_INT8_ARRAY :: NodeDataType
+pattern NodeDataType_INT8_ARRAY = NodeDataType' "INT8_ARRAY"
+
+pattern NodeDataType_STRING :: NodeDataType
+pattern NodeDataType_STRING = NodeDataType' "STRING"
+
+pattern NodeDataType_STRING_ARRAY :: NodeDataType
+pattern NodeDataType_STRING_ARRAY = NodeDataType' "STRING_ARRAY"
+
+pattern NodeDataType_UINT16 :: NodeDataType
+pattern NodeDataType_UINT16 = NodeDataType' "UINT16"
+
+pattern NodeDataType_UINT16_ARRAY :: NodeDataType
+pattern NodeDataType_UINT16_ARRAY = NodeDataType' "UINT16_ARRAY"
+
+pattern NodeDataType_UINT32 :: NodeDataType
+pattern NodeDataType_UINT32 = NodeDataType' "UINT32"
+
+pattern NodeDataType_UINT32_ARRAY :: NodeDataType
+pattern NodeDataType_UINT32_ARRAY = NodeDataType' "UINT32_ARRAY"
+
+pattern NodeDataType_UINT64 :: NodeDataType
+pattern NodeDataType_UINT64 = NodeDataType' "UINT64"
+
+pattern NodeDataType_UINT64_ARRAY :: NodeDataType
+pattern NodeDataType_UINT64_ARRAY = NodeDataType' "UINT64_ARRAY"
+
+pattern NodeDataType_UINT8 :: NodeDataType
+pattern NodeDataType_UINT8 = NodeDataType' "UINT8"
+
+pattern NodeDataType_UINT8_ARRAY :: NodeDataType
+pattern NodeDataType_UINT8_ARRAY = NodeDataType' "UINT8_ARRAY"
+
+pattern NodeDataType_UNIX_TIMESTAMP :: NodeDataType
+pattern NodeDataType_UNIX_TIMESTAMP = NodeDataType' "UNIX_TIMESTAMP"
+
+pattern NodeDataType_UNIX_TIMESTAMP_ARRAY :: NodeDataType
+pattern NodeDataType_UNIX_TIMESTAMP_ARRAY = NodeDataType' "UNIX_TIMESTAMP_ARRAY"
+
+pattern NodeDataType_UNKNOWN :: NodeDataType
+pattern NodeDataType_UNKNOWN = NodeDataType' "UNKNOWN"
+
+{-# COMPLETE
+  NodeDataType_BOOLEAN,
+  NodeDataType_BOOLEAN_ARRAY,
+  NodeDataType_DOUBLE,
+  NodeDataType_DOUBLE_ARRAY,
+  NodeDataType_FLOAT,
+  NodeDataType_FLOAT_ARRAY,
+  NodeDataType_INT16,
+  NodeDataType_INT16_ARRAY,
+  NodeDataType_INT32,
+  NodeDataType_INT32_ARRAY,
+  NodeDataType_INT64,
+  NodeDataType_INT64_ARRAY,
+  NodeDataType_INT8,
+  NodeDataType_INT8_ARRAY,
+  NodeDataType_STRING,
+  NodeDataType_STRING_ARRAY,
+  NodeDataType_UINT16,
+  NodeDataType_UINT16_ARRAY,
+  NodeDataType_UINT32,
+  NodeDataType_UINT32_ARRAY,
+  NodeDataType_UINT64,
+  NodeDataType_UINT64_ARRAY,
+  NodeDataType_UINT8,
+  NodeDataType_UINT8_ARRAY,
+  NodeDataType_UNIX_TIMESTAMP,
+  NodeDataType_UNIX_TIMESTAMP_ARRAY,
+  NodeDataType_UNKNOWN,
+  NodeDataType'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/ObdInterface.hs b/gen/Amazonka/IoTFleetWise/Types/ObdInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/ObdInterface.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.IoTFleetWise.Types.ObdInterface
+-- 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.IoTFleetWise.Types.ObdInterface 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 network interface that specifies the On-board diagnostic (OBD) II
+-- network protocol.
+--
+-- /See:/ 'newObdInterface' smart constructor.
+data ObdInterface = ObdInterface'
+  { -- | The maximum number message requests per diagnostic trouble code per
+    -- second.
+    dtcRequestIntervalSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | Whether the vehicle has a transmission control module (TCM).
+    hasTransmissionEcu :: Prelude.Maybe Prelude.Bool,
+    -- | The standard OBD II PID.
+    obdStandard :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number message requests per second.
+    pidRequestIntervalSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | Whether to use extended IDs in the message.
+    useExtendedIds :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the interface.
+    name :: Prelude.Text,
+    -- | The ID of the message requesting vehicle data.
+    requestMessageId :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObdInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dtcRequestIntervalSeconds', 'obdInterface_dtcRequestIntervalSeconds' - The maximum number message requests per diagnostic trouble code per
+-- second.
+--
+-- 'hasTransmissionEcu', 'obdInterface_hasTransmissionEcu' - Whether the vehicle has a transmission control module (TCM).
+--
+-- 'obdStandard', 'obdInterface_obdStandard' - The standard OBD II PID.
+--
+-- 'pidRequestIntervalSeconds', 'obdInterface_pidRequestIntervalSeconds' - The maximum number message requests per second.
+--
+-- 'useExtendedIds', 'obdInterface_useExtendedIds' - Whether to use extended IDs in the message.
+--
+-- 'name', 'obdInterface_name' - The name of the interface.
+--
+-- 'requestMessageId', 'obdInterface_requestMessageId' - The ID of the message requesting vehicle data.
+newObdInterface ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'requestMessageId'
+  Prelude.Natural ->
+  ObdInterface
+newObdInterface pName_ pRequestMessageId_ =
+  ObdInterface'
+    { dtcRequestIntervalSeconds =
+        Prelude.Nothing,
+      hasTransmissionEcu = Prelude.Nothing,
+      obdStandard = Prelude.Nothing,
+      pidRequestIntervalSeconds = Prelude.Nothing,
+      useExtendedIds = Prelude.Nothing,
+      name = pName_,
+      requestMessageId = pRequestMessageId_
+    }
+
+-- | The maximum number message requests per diagnostic trouble code per
+-- second.
+obdInterface_dtcRequestIntervalSeconds :: Lens.Lens' ObdInterface (Prelude.Maybe Prelude.Natural)
+obdInterface_dtcRequestIntervalSeconds = Lens.lens (\ObdInterface' {dtcRequestIntervalSeconds} -> dtcRequestIntervalSeconds) (\s@ObdInterface' {} a -> s {dtcRequestIntervalSeconds = a} :: ObdInterface)
+
+-- | Whether the vehicle has a transmission control module (TCM).
+obdInterface_hasTransmissionEcu :: Lens.Lens' ObdInterface (Prelude.Maybe Prelude.Bool)
+obdInterface_hasTransmissionEcu = Lens.lens (\ObdInterface' {hasTransmissionEcu} -> hasTransmissionEcu) (\s@ObdInterface' {} a -> s {hasTransmissionEcu = a} :: ObdInterface)
+
+-- | The standard OBD II PID.
+obdInterface_obdStandard :: Lens.Lens' ObdInterface (Prelude.Maybe Prelude.Text)
+obdInterface_obdStandard = Lens.lens (\ObdInterface' {obdStandard} -> obdStandard) (\s@ObdInterface' {} a -> s {obdStandard = a} :: ObdInterface)
+
+-- | The maximum number message requests per second.
+obdInterface_pidRequestIntervalSeconds :: Lens.Lens' ObdInterface (Prelude.Maybe Prelude.Natural)
+obdInterface_pidRequestIntervalSeconds = Lens.lens (\ObdInterface' {pidRequestIntervalSeconds} -> pidRequestIntervalSeconds) (\s@ObdInterface' {} a -> s {pidRequestIntervalSeconds = a} :: ObdInterface)
+
+-- | Whether to use extended IDs in the message.
+obdInterface_useExtendedIds :: Lens.Lens' ObdInterface (Prelude.Maybe Prelude.Bool)
+obdInterface_useExtendedIds = Lens.lens (\ObdInterface' {useExtendedIds} -> useExtendedIds) (\s@ObdInterface' {} a -> s {useExtendedIds = a} :: ObdInterface)
+
+-- | The name of the interface.
+obdInterface_name :: Lens.Lens' ObdInterface Prelude.Text
+obdInterface_name = Lens.lens (\ObdInterface' {name} -> name) (\s@ObdInterface' {} a -> s {name = a} :: ObdInterface)
+
+-- | The ID of the message requesting vehicle data.
+obdInterface_requestMessageId :: Lens.Lens' ObdInterface Prelude.Natural
+obdInterface_requestMessageId = Lens.lens (\ObdInterface' {requestMessageId} -> requestMessageId) (\s@ObdInterface' {} a -> s {requestMessageId = a} :: ObdInterface)
+
+instance Data.FromJSON ObdInterface where
+  parseJSON =
+    Data.withObject
+      "ObdInterface"
+      ( \x ->
+          ObdInterface'
+            Prelude.<$> (x Data..:? "dtcRequestIntervalSeconds")
+            Prelude.<*> (x Data..:? "hasTransmissionEcu")
+            Prelude.<*> (x Data..:? "obdStandard")
+            Prelude.<*> (x Data..:? "pidRequestIntervalSeconds")
+            Prelude.<*> (x Data..:? "useExtendedIds")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "requestMessageId")
+      )
+
+instance Prelude.Hashable ObdInterface where
+  hashWithSalt _salt ObdInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` dtcRequestIntervalSeconds
+      `Prelude.hashWithSalt` hasTransmissionEcu
+      `Prelude.hashWithSalt` obdStandard
+      `Prelude.hashWithSalt` pidRequestIntervalSeconds
+      `Prelude.hashWithSalt` useExtendedIds
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` requestMessageId
+
+instance Prelude.NFData ObdInterface where
+  rnf ObdInterface' {..} =
+    Prelude.rnf dtcRequestIntervalSeconds
+      `Prelude.seq` Prelude.rnf hasTransmissionEcu
+      `Prelude.seq` Prelude.rnf obdStandard
+      `Prelude.seq` Prelude.rnf pidRequestIntervalSeconds
+      `Prelude.seq` Prelude.rnf useExtendedIds
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf requestMessageId
+
+instance Data.ToJSON ObdInterface where
+  toJSON ObdInterface' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dtcRequestIntervalSeconds" Data..=)
+              Prelude.<$> dtcRequestIntervalSeconds,
+            ("hasTransmissionEcu" Data..=)
+              Prelude.<$> hasTransmissionEcu,
+            ("obdStandard" Data..=) Prelude.<$> obdStandard,
+            ("pidRequestIntervalSeconds" Data..=)
+              Prelude.<$> pidRequestIntervalSeconds,
+            ("useExtendedIds" Data..=)
+              Prelude.<$> useExtendedIds,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just
+              ("requestMessageId" Data..= requestMessageId)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/ObdSignal.hs b/gen/Amazonka/IoTFleetWise/Types/ObdSignal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/ObdSignal.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.Types.ObdSignal
+-- 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.IoTFleetWise.Types.ObdSignal 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 signal messages using the on-board diagnostics (OBD)
+-- II protocol in a vehicle.
+--
+-- /See:/ 'newObdSignal' smart constructor.
+data ObdSignal = ObdSignal'
+  { -- | The number of bits to mask in a message.
+    bitMaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | The number of positions to shift bits in the message.
+    bitRightShift :: Prelude.Maybe Prelude.Natural,
+    -- | The length of the requested data.
+    pidResponseLength :: Prelude.Natural,
+    -- | The mode of operation (diagnostic service) in a message.
+    serviceMode :: Prelude.Natural,
+    -- | The diagnostic code used to request data from a vehicle for this signal.
+    pid :: Prelude.Natural,
+    -- | A multiplier used to decode the message.
+    scaling :: Prelude.Double,
+    -- | Indicates where data appears in the message.
+    offset :: Prelude.Double,
+    -- | Indicates the beginning of the message.
+    startByte :: Prelude.Natural,
+    -- | The length of a message.
+    byteLength :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ObdSignal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bitMaskLength', 'obdSignal_bitMaskLength' - The number of bits to mask in a message.
+--
+-- 'bitRightShift', 'obdSignal_bitRightShift' - The number of positions to shift bits in the message.
+--
+-- 'pidResponseLength', 'obdSignal_pidResponseLength' - The length of the requested data.
+--
+-- 'serviceMode', 'obdSignal_serviceMode' - The mode of operation (diagnostic service) in a message.
+--
+-- 'pid', 'obdSignal_pid' - The diagnostic code used to request data from a vehicle for this signal.
+--
+-- 'scaling', 'obdSignal_scaling' - A multiplier used to decode the message.
+--
+-- 'offset', 'obdSignal_offset' - Indicates where data appears in the message.
+--
+-- 'startByte', 'obdSignal_startByte' - Indicates the beginning of the message.
+--
+-- 'byteLength', 'obdSignal_byteLength' - The length of a message.
+newObdSignal ::
+  -- | 'pidResponseLength'
+  Prelude.Natural ->
+  -- | 'serviceMode'
+  Prelude.Natural ->
+  -- | 'pid'
+  Prelude.Natural ->
+  -- | 'scaling'
+  Prelude.Double ->
+  -- | 'offset'
+  Prelude.Double ->
+  -- | 'startByte'
+  Prelude.Natural ->
+  -- | 'byteLength'
+  Prelude.Natural ->
+  ObdSignal
+newObdSignal
+  pPidResponseLength_
+  pServiceMode_
+  pPid_
+  pScaling_
+  pOffset_
+  pStartByte_
+  pByteLength_ =
+    ObdSignal'
+      { bitMaskLength = Prelude.Nothing,
+        bitRightShift = Prelude.Nothing,
+        pidResponseLength = pPidResponseLength_,
+        serviceMode = pServiceMode_,
+        pid = pPid_,
+        scaling = pScaling_,
+        offset = pOffset_,
+        startByte = pStartByte_,
+        byteLength = pByteLength_
+      }
+
+-- | The number of bits to mask in a message.
+obdSignal_bitMaskLength :: Lens.Lens' ObdSignal (Prelude.Maybe Prelude.Natural)
+obdSignal_bitMaskLength = Lens.lens (\ObdSignal' {bitMaskLength} -> bitMaskLength) (\s@ObdSignal' {} a -> s {bitMaskLength = a} :: ObdSignal)
+
+-- | The number of positions to shift bits in the message.
+obdSignal_bitRightShift :: Lens.Lens' ObdSignal (Prelude.Maybe Prelude.Natural)
+obdSignal_bitRightShift = Lens.lens (\ObdSignal' {bitRightShift} -> bitRightShift) (\s@ObdSignal' {} a -> s {bitRightShift = a} :: ObdSignal)
+
+-- | The length of the requested data.
+obdSignal_pidResponseLength :: Lens.Lens' ObdSignal Prelude.Natural
+obdSignal_pidResponseLength = Lens.lens (\ObdSignal' {pidResponseLength} -> pidResponseLength) (\s@ObdSignal' {} a -> s {pidResponseLength = a} :: ObdSignal)
+
+-- | The mode of operation (diagnostic service) in a message.
+obdSignal_serviceMode :: Lens.Lens' ObdSignal Prelude.Natural
+obdSignal_serviceMode = Lens.lens (\ObdSignal' {serviceMode} -> serviceMode) (\s@ObdSignal' {} a -> s {serviceMode = a} :: ObdSignal)
+
+-- | The diagnostic code used to request data from a vehicle for this signal.
+obdSignal_pid :: Lens.Lens' ObdSignal Prelude.Natural
+obdSignal_pid = Lens.lens (\ObdSignal' {pid} -> pid) (\s@ObdSignal' {} a -> s {pid = a} :: ObdSignal)
+
+-- | A multiplier used to decode the message.
+obdSignal_scaling :: Lens.Lens' ObdSignal Prelude.Double
+obdSignal_scaling = Lens.lens (\ObdSignal' {scaling} -> scaling) (\s@ObdSignal' {} a -> s {scaling = a} :: ObdSignal)
+
+-- | Indicates where data appears in the message.
+obdSignal_offset :: Lens.Lens' ObdSignal Prelude.Double
+obdSignal_offset = Lens.lens (\ObdSignal' {offset} -> offset) (\s@ObdSignal' {} a -> s {offset = a} :: ObdSignal)
+
+-- | Indicates the beginning of the message.
+obdSignal_startByte :: Lens.Lens' ObdSignal Prelude.Natural
+obdSignal_startByte = Lens.lens (\ObdSignal' {startByte} -> startByte) (\s@ObdSignal' {} a -> s {startByte = a} :: ObdSignal)
+
+-- | The length of a message.
+obdSignal_byteLength :: Lens.Lens' ObdSignal Prelude.Natural
+obdSignal_byteLength = Lens.lens (\ObdSignal' {byteLength} -> byteLength) (\s@ObdSignal' {} a -> s {byteLength = a} :: ObdSignal)
+
+instance Data.FromJSON ObdSignal where
+  parseJSON =
+    Data.withObject
+      "ObdSignal"
+      ( \x ->
+          ObdSignal'
+            Prelude.<$> (x Data..:? "bitMaskLength")
+            Prelude.<*> (x Data..:? "bitRightShift")
+            Prelude.<*> (x Data..: "pidResponseLength")
+            Prelude.<*> (x Data..: "serviceMode")
+            Prelude.<*> (x Data..: "pid")
+            Prelude.<*> (x Data..: "scaling")
+            Prelude.<*> (x Data..: "offset")
+            Prelude.<*> (x Data..: "startByte")
+            Prelude.<*> (x Data..: "byteLength")
+      )
+
+instance Prelude.Hashable ObdSignal where
+  hashWithSalt _salt ObdSignal' {..} =
+    _salt
+      `Prelude.hashWithSalt` bitMaskLength
+      `Prelude.hashWithSalt` bitRightShift
+      `Prelude.hashWithSalt` pidResponseLength
+      `Prelude.hashWithSalt` serviceMode
+      `Prelude.hashWithSalt` pid
+      `Prelude.hashWithSalt` scaling
+      `Prelude.hashWithSalt` offset
+      `Prelude.hashWithSalt` startByte
+      `Prelude.hashWithSalt` byteLength
+
+instance Prelude.NFData ObdSignal where
+  rnf ObdSignal' {..} =
+    Prelude.rnf bitMaskLength
+      `Prelude.seq` Prelude.rnf bitRightShift
+      `Prelude.seq` Prelude.rnf pidResponseLength
+      `Prelude.seq` Prelude.rnf serviceMode
+      `Prelude.seq` Prelude.rnf pid
+      `Prelude.seq` Prelude.rnf scaling
+      `Prelude.seq` Prelude.rnf offset
+      `Prelude.seq` Prelude.rnf startByte
+      `Prelude.seq` Prelude.rnf byteLength
+
+instance Data.ToJSON ObdSignal where
+  toJSON ObdSignal' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bitMaskLength" Data..=) Prelude.<$> bitMaskLength,
+            ("bitRightShift" Data..=) Prelude.<$> bitRightShift,
+            Prelude.Just
+              ("pidResponseLength" Data..= pidResponseLength),
+            Prelude.Just ("serviceMode" Data..= serviceMode),
+            Prelude.Just ("pid" Data..= pid),
+            Prelude.Just ("scaling" Data..= scaling),
+            Prelude.Just ("offset" Data..= offset),
+            Prelude.Just ("startByte" Data..= startByte),
+            Prelude.Just ("byteLength" Data..= byteLength)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/RegistrationStatus.hs b/gen/Amazonka/IoTFleetWise/Types/RegistrationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/RegistrationStatus.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.IoTFleetWise.Types.RegistrationStatus
+-- 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.IoTFleetWise.Types.RegistrationStatus
+  ( RegistrationStatus
+      ( ..,
+        RegistrationStatus_REGISTRATION_FAILURE,
+        RegistrationStatus_REGISTRATION_PENDING,
+        RegistrationStatus_REGISTRATION_SUCCESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RegistrationStatus = RegistrationStatus'
+  { fromRegistrationStatus ::
+      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 RegistrationStatus_REGISTRATION_FAILURE :: RegistrationStatus
+pattern RegistrationStatus_REGISTRATION_FAILURE = RegistrationStatus' "REGISTRATION_FAILURE"
+
+pattern RegistrationStatus_REGISTRATION_PENDING :: RegistrationStatus
+pattern RegistrationStatus_REGISTRATION_PENDING = RegistrationStatus' "REGISTRATION_PENDING"
+
+pattern RegistrationStatus_REGISTRATION_SUCCESS :: RegistrationStatus
+pattern RegistrationStatus_REGISTRATION_SUCCESS = RegistrationStatus' "REGISTRATION_SUCCESS"
+
+{-# COMPLETE
+  RegistrationStatus_REGISTRATION_FAILURE,
+  RegistrationStatus_REGISTRATION_PENDING,
+  RegistrationStatus_REGISTRATION_SUCCESS,
+  RegistrationStatus'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/Sensor.hs b/gen/Amazonka/IoTFleetWise/Types/Sensor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/Sensor.hs
@@ -0,0 +1,171 @@
+{-# 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.IoTFleetWise.Types.Sensor
+-- 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.IoTFleetWise.Types.Sensor where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.NodeDataType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An input component that reports the environmental condition of a
+-- vehicle.
+--
+-- You can collect data about fluid levels, temperatures, vibrations, or
+-- battery voltage from sensors.
+--
+-- /See:/ 'newSensor' smart constructor.
+data Sensor = Sensor'
+  { -- | A list of possible values a sensor can take.
+    allowedValues :: Prelude.Maybe [Prelude.Text],
+    -- | A brief description of a sensor.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The specified possible maximum value of the sensor.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The specified possible minimum value of the sensor.
+    min :: Prelude.Maybe Prelude.Double,
+    -- | The scientific unit of measurement for data collected by the sensor.
+    unit :: Prelude.Maybe Prelude.Text,
+    -- | The fully qualified name of the sensor. For example, the fully qualified
+    -- name of a sensor might be @Vehicle.Body.Engine.Battery@.
+    fullyQualifiedName :: Prelude.Text,
+    -- | The specified data type of the sensor.
+    dataType :: NodeDataType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Sensor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowedValues', 'sensor_allowedValues' - A list of possible values a sensor can take.
+--
+-- 'description', 'sensor_description' - A brief description of a sensor.
+--
+-- 'max', 'sensor_max' - The specified possible maximum value of the sensor.
+--
+-- 'min', 'sensor_min' - The specified possible minimum value of the sensor.
+--
+-- 'unit', 'sensor_unit' - The scientific unit of measurement for data collected by the sensor.
+--
+-- 'fullyQualifiedName', 'sensor_fullyQualifiedName' - The fully qualified name of the sensor. For example, the fully qualified
+-- name of a sensor might be @Vehicle.Body.Engine.Battery@.
+--
+-- 'dataType', 'sensor_dataType' - The specified data type of the sensor.
+newSensor ::
+  -- | 'fullyQualifiedName'
+  Prelude.Text ->
+  -- | 'dataType'
+  NodeDataType ->
+  Sensor
+newSensor pFullyQualifiedName_ pDataType_ =
+  Sensor'
+    { allowedValues = Prelude.Nothing,
+      description = Prelude.Nothing,
+      max = Prelude.Nothing,
+      min = Prelude.Nothing,
+      unit = Prelude.Nothing,
+      fullyQualifiedName = pFullyQualifiedName_,
+      dataType = pDataType_
+    }
+
+-- | A list of possible values a sensor can take.
+sensor_allowedValues :: Lens.Lens' Sensor (Prelude.Maybe [Prelude.Text])
+sensor_allowedValues = Lens.lens (\Sensor' {allowedValues} -> allowedValues) (\s@Sensor' {} a -> s {allowedValues = a} :: Sensor) Prelude.. Lens.mapping Lens.coerced
+
+-- | A brief description of a sensor.
+sensor_description :: Lens.Lens' Sensor (Prelude.Maybe Prelude.Text)
+sensor_description = Lens.lens (\Sensor' {description} -> description) (\s@Sensor' {} a -> s {description = a} :: Sensor)
+
+-- | The specified possible maximum value of the sensor.
+sensor_max :: Lens.Lens' Sensor (Prelude.Maybe Prelude.Double)
+sensor_max = Lens.lens (\Sensor' {max} -> max) (\s@Sensor' {} a -> s {max = a} :: Sensor)
+
+-- | The specified possible minimum value of the sensor.
+sensor_min :: Lens.Lens' Sensor (Prelude.Maybe Prelude.Double)
+sensor_min = Lens.lens (\Sensor' {min} -> min) (\s@Sensor' {} a -> s {min = a} :: Sensor)
+
+-- | The scientific unit of measurement for data collected by the sensor.
+sensor_unit :: Lens.Lens' Sensor (Prelude.Maybe Prelude.Text)
+sensor_unit = Lens.lens (\Sensor' {unit} -> unit) (\s@Sensor' {} a -> s {unit = a} :: Sensor)
+
+-- | The fully qualified name of the sensor. For example, the fully qualified
+-- name of a sensor might be @Vehicle.Body.Engine.Battery@.
+sensor_fullyQualifiedName :: Lens.Lens' Sensor Prelude.Text
+sensor_fullyQualifiedName = Lens.lens (\Sensor' {fullyQualifiedName} -> fullyQualifiedName) (\s@Sensor' {} a -> s {fullyQualifiedName = a} :: Sensor)
+
+-- | The specified data type of the sensor.
+sensor_dataType :: Lens.Lens' Sensor NodeDataType
+sensor_dataType = Lens.lens (\Sensor' {dataType} -> dataType) (\s@Sensor' {} a -> s {dataType = a} :: Sensor)
+
+instance Data.FromJSON Sensor where
+  parseJSON =
+    Data.withObject
+      "Sensor"
+      ( \x ->
+          Sensor'
+            Prelude.<$> (x Data..:? "allowedValues" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "max")
+            Prelude.<*> (x Data..:? "min")
+            Prelude.<*> (x Data..:? "unit")
+            Prelude.<*> (x Data..: "fullyQualifiedName")
+            Prelude.<*> (x Data..: "dataType")
+      )
+
+instance Prelude.Hashable Sensor where
+  hashWithSalt _salt Sensor' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowedValues
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+      `Prelude.hashWithSalt` unit
+      `Prelude.hashWithSalt` fullyQualifiedName
+      `Prelude.hashWithSalt` dataType
+
+instance Prelude.NFData Sensor where
+  rnf Sensor' {..} =
+    Prelude.rnf allowedValues
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf max
+      `Prelude.seq` Prelude.rnf min
+      `Prelude.seq` Prelude.rnf unit
+      `Prelude.seq` Prelude.rnf fullyQualifiedName
+      `Prelude.seq` Prelude.rnf dataType
+
+instance Data.ToJSON Sensor where
+  toJSON Sensor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowedValues" Data..=) Prelude.<$> allowedValues,
+            ("description" Data..=) Prelude.<$> description,
+            ("max" Data..=) Prelude.<$> max,
+            ("min" Data..=) Prelude.<$> min,
+            ("unit" Data..=) Prelude.<$> unit,
+            Prelude.Just
+              ("fullyQualifiedName" Data..= fullyQualifiedName),
+            Prelude.Just ("dataType" Data..= dataType)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/SignalCatalogSummary.hs b/gen/Amazonka/IoTFleetWise/Types/SignalCatalogSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/SignalCatalogSummary.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.IoTFleetWise.Types.SignalCatalogSummary
+-- 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.IoTFleetWise.Types.SignalCatalogSummary 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 collection of standardized signals, which can be
+-- attributes, branches, sensors, or actuators.
+--
+-- /See:/ 'newSignalCatalogSummary' smart constructor.
+data SignalCatalogSummary = SignalCatalogSummary'
+  { -- | The Amazon Resource Name (ARN) of the signal catalog.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the signal catalog was created in seconds since epoch (January
+    -- 1, 1970 at midnight UTC time).
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The time the signal catalog was last updated in seconds since epoch
+    -- (January 1, 1970 at midnight UTC time).
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the signal catalog.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SignalCatalogSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'signalCatalogSummary_arn' - The Amazon Resource Name (ARN) of the signal catalog.
+--
+-- 'creationTime', 'signalCatalogSummary_creationTime' - The time the signal catalog was created in seconds since epoch (January
+-- 1, 1970 at midnight UTC time).
+--
+-- 'lastModificationTime', 'signalCatalogSummary_lastModificationTime' - The time the signal catalog was last updated in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+--
+-- 'name', 'signalCatalogSummary_name' - The name of the signal catalog.
+newSignalCatalogSummary ::
+  SignalCatalogSummary
+newSignalCatalogSummary =
+  SignalCatalogSummary'
+    { arn = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the signal catalog.
+signalCatalogSummary_arn :: Lens.Lens' SignalCatalogSummary (Prelude.Maybe Prelude.Text)
+signalCatalogSummary_arn = Lens.lens (\SignalCatalogSummary' {arn} -> arn) (\s@SignalCatalogSummary' {} a -> s {arn = a} :: SignalCatalogSummary)
+
+-- | The time the signal catalog was created in seconds since epoch (January
+-- 1, 1970 at midnight UTC time).
+signalCatalogSummary_creationTime :: Lens.Lens' SignalCatalogSummary (Prelude.Maybe Prelude.UTCTime)
+signalCatalogSummary_creationTime = Lens.lens (\SignalCatalogSummary' {creationTime} -> creationTime) (\s@SignalCatalogSummary' {} a -> s {creationTime = a} :: SignalCatalogSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The time the signal catalog was last updated in seconds since epoch
+-- (January 1, 1970 at midnight UTC time).
+signalCatalogSummary_lastModificationTime :: Lens.Lens' SignalCatalogSummary (Prelude.Maybe Prelude.UTCTime)
+signalCatalogSummary_lastModificationTime = Lens.lens (\SignalCatalogSummary' {lastModificationTime} -> lastModificationTime) (\s@SignalCatalogSummary' {} a -> s {lastModificationTime = a} :: SignalCatalogSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the signal catalog.
+signalCatalogSummary_name :: Lens.Lens' SignalCatalogSummary (Prelude.Maybe Prelude.Text)
+signalCatalogSummary_name = Lens.lens (\SignalCatalogSummary' {name} -> name) (\s@SignalCatalogSummary' {} a -> s {name = a} :: SignalCatalogSummary)
+
+instance Data.FromJSON SignalCatalogSummary where
+  parseJSON =
+    Data.withObject
+      "SignalCatalogSummary"
+      ( \x ->
+          SignalCatalogSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "lastModificationTime")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable SignalCatalogSummary where
+  hashWithSalt _salt SignalCatalogSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData SignalCatalogSummary where
+  rnf SignalCatalogSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/IoTFleetWise/Types/SignalDecoder.hs b/gen/Amazonka/IoTFleetWise/Types/SignalDecoder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/SignalDecoder.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.IoTFleetWise.Types.SignalDecoder
+-- 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.IoTFleetWise.Types.SignalDecoder where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.CanSignal
+import Amazonka.IoTFleetWise.Types.ObdSignal
+import Amazonka.IoTFleetWise.Types.SignalDecoderType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a signal decoder.
+--
+-- /See:/ 'newSignalDecoder' smart constructor.
+data SignalDecoder = SignalDecoder'
+  { -- | Information about signal decoder using the Controller Area Network (CAN)
+    -- protocol.
+    canSignal :: Prelude.Maybe CanSignal,
+    -- | Information about signal decoder using the On-board diagnostic (OBD) II
+    -- protocol.
+    obdSignal :: Prelude.Maybe ObdSignal,
+    -- | The fully qualified name of a signal decoder as defined in a vehicle
+    -- model.
+    fullyQualifiedName :: Prelude.Text,
+    -- | The network protocol for the vehicle. For example, @CAN_SIGNAL@
+    -- specifies a protocol that defines how data is communicated between
+    -- electronic control units (ECUs). @OBD_SIGNAL@ specifies a protocol that
+    -- defines how self-diagnostic data is communicated between ECUs.
+    type' :: SignalDecoderType,
+    -- | The ID of a network interface that specifies what network protocol a
+    -- vehicle follows.
+    interfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SignalDecoder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'canSignal', 'signalDecoder_canSignal' - Information about signal decoder using the Controller Area Network (CAN)
+-- protocol.
+--
+-- 'obdSignal', 'signalDecoder_obdSignal' - Information about signal decoder using the On-board diagnostic (OBD) II
+-- protocol.
+--
+-- 'fullyQualifiedName', 'signalDecoder_fullyQualifiedName' - The fully qualified name of a signal decoder as defined in a vehicle
+-- model.
+--
+-- 'type'', 'signalDecoder_type' - The network protocol for the vehicle. For example, @CAN_SIGNAL@
+-- specifies a protocol that defines how data is communicated between
+-- electronic control units (ECUs). @OBD_SIGNAL@ specifies a protocol that
+-- defines how self-diagnostic data is communicated between ECUs.
+--
+-- 'interfaceId', 'signalDecoder_interfaceId' - The ID of a network interface that specifies what network protocol a
+-- vehicle follows.
+newSignalDecoder ::
+  -- | 'fullyQualifiedName'
+  Prelude.Text ->
+  -- | 'type''
+  SignalDecoderType ->
+  -- | 'interfaceId'
+  Prelude.Text ->
+  SignalDecoder
+newSignalDecoder
+  pFullyQualifiedName_
+  pType_
+  pInterfaceId_ =
+    SignalDecoder'
+      { canSignal = Prelude.Nothing,
+        obdSignal = Prelude.Nothing,
+        fullyQualifiedName = pFullyQualifiedName_,
+        type' = pType_,
+        interfaceId = pInterfaceId_
+      }
+
+-- | Information about signal decoder using the Controller Area Network (CAN)
+-- protocol.
+signalDecoder_canSignal :: Lens.Lens' SignalDecoder (Prelude.Maybe CanSignal)
+signalDecoder_canSignal = Lens.lens (\SignalDecoder' {canSignal} -> canSignal) (\s@SignalDecoder' {} a -> s {canSignal = a} :: SignalDecoder)
+
+-- | Information about signal decoder using the On-board diagnostic (OBD) II
+-- protocol.
+signalDecoder_obdSignal :: Lens.Lens' SignalDecoder (Prelude.Maybe ObdSignal)
+signalDecoder_obdSignal = Lens.lens (\SignalDecoder' {obdSignal} -> obdSignal) (\s@SignalDecoder' {} a -> s {obdSignal = a} :: SignalDecoder)
+
+-- | The fully qualified name of a signal decoder as defined in a vehicle
+-- model.
+signalDecoder_fullyQualifiedName :: Lens.Lens' SignalDecoder Prelude.Text
+signalDecoder_fullyQualifiedName = Lens.lens (\SignalDecoder' {fullyQualifiedName} -> fullyQualifiedName) (\s@SignalDecoder' {} a -> s {fullyQualifiedName = a} :: SignalDecoder)
+
+-- | The network protocol for the vehicle. For example, @CAN_SIGNAL@
+-- specifies a protocol that defines how data is communicated between
+-- electronic control units (ECUs). @OBD_SIGNAL@ specifies a protocol that
+-- defines how self-diagnostic data is communicated between ECUs.
+signalDecoder_type :: Lens.Lens' SignalDecoder SignalDecoderType
+signalDecoder_type = Lens.lens (\SignalDecoder' {type'} -> type') (\s@SignalDecoder' {} a -> s {type' = a} :: SignalDecoder)
+
+-- | The ID of a network interface that specifies what network protocol a
+-- vehicle follows.
+signalDecoder_interfaceId :: Lens.Lens' SignalDecoder Prelude.Text
+signalDecoder_interfaceId = Lens.lens (\SignalDecoder' {interfaceId} -> interfaceId) (\s@SignalDecoder' {} a -> s {interfaceId = a} :: SignalDecoder)
+
+instance Data.FromJSON SignalDecoder where
+  parseJSON =
+    Data.withObject
+      "SignalDecoder"
+      ( \x ->
+          SignalDecoder'
+            Prelude.<$> (x Data..:? "canSignal")
+            Prelude.<*> (x Data..:? "obdSignal")
+            Prelude.<*> (x Data..: "fullyQualifiedName")
+            Prelude.<*> (x Data..: "type")
+            Prelude.<*> (x Data..: "interfaceId")
+      )
+
+instance Prelude.Hashable SignalDecoder where
+  hashWithSalt _salt SignalDecoder' {..} =
+    _salt
+      `Prelude.hashWithSalt` canSignal
+      `Prelude.hashWithSalt` obdSignal
+      `Prelude.hashWithSalt` fullyQualifiedName
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` interfaceId
+
+instance Prelude.NFData SignalDecoder where
+  rnf SignalDecoder' {..} =
+    Prelude.rnf canSignal
+      `Prelude.seq` Prelude.rnf obdSignal
+      `Prelude.seq` Prelude.rnf fullyQualifiedName
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf interfaceId
+
+instance Data.ToJSON SignalDecoder where
+  toJSON SignalDecoder' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("canSignal" Data..=) Prelude.<$> canSignal,
+            ("obdSignal" Data..=) Prelude.<$> obdSignal,
+            Prelude.Just
+              ("fullyQualifiedName" Data..= fullyQualifiedName),
+            Prelude.Just ("type" Data..= type'),
+            Prelude.Just ("interfaceId" Data..= interfaceId)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/SignalDecoderType.hs b/gen/Amazonka/IoTFleetWise/Types/SignalDecoderType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/SignalDecoderType.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.IoTFleetWise.Types.SignalDecoderType
+-- 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.IoTFleetWise.Types.SignalDecoderType
+  ( SignalDecoderType
+      ( ..,
+        SignalDecoderType_CAN_SIGNAL,
+        SignalDecoderType_OBD_SIGNAL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SignalDecoderType = SignalDecoderType'
+  { fromSignalDecoderType ::
+      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 SignalDecoderType_CAN_SIGNAL :: SignalDecoderType
+pattern SignalDecoderType_CAN_SIGNAL = SignalDecoderType' "CAN_SIGNAL"
+
+pattern SignalDecoderType_OBD_SIGNAL :: SignalDecoderType
+pattern SignalDecoderType_OBD_SIGNAL = SignalDecoderType' "OBD_SIGNAL"
+
+{-# COMPLETE
+  SignalDecoderType_CAN_SIGNAL,
+  SignalDecoderType_OBD_SIGNAL,
+  SignalDecoderType'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/SignalInformation.hs b/gen/Amazonka/IoTFleetWise/Types/SignalInformation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/SignalInformation.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.Types.SignalInformation
+-- 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.IoTFleetWise.Types.SignalInformation 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 signal.
+--
+-- /See:/ 'newSignalInformation' smart constructor.
+data SignalInformation = SignalInformation'
+  { -- | The maximum number of samples to collect.
+    maxSampleCount :: Prelude.Maybe Prelude.Natural,
+    -- | The minimum duration of time (in milliseconds) between two triggering
+    -- events to collect data.
+    --
+    -- If a signal changes often, you might want to collect data at a slower
+    -- rate.
+    minimumSamplingIntervalMs :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the signal.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SignalInformation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxSampleCount', 'signalInformation_maxSampleCount' - The maximum number of samples to collect.
+--
+-- 'minimumSamplingIntervalMs', 'signalInformation_minimumSamplingIntervalMs' - The minimum duration of time (in milliseconds) between two triggering
+-- events to collect data.
+--
+-- If a signal changes often, you might want to collect data at a slower
+-- rate.
+--
+-- 'name', 'signalInformation_name' - The name of the signal.
+newSignalInformation ::
+  -- | 'name'
+  Prelude.Text ->
+  SignalInformation
+newSignalInformation pName_ =
+  SignalInformation'
+    { maxSampleCount =
+        Prelude.Nothing,
+      minimumSamplingIntervalMs = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The maximum number of samples to collect.
+signalInformation_maxSampleCount :: Lens.Lens' SignalInformation (Prelude.Maybe Prelude.Natural)
+signalInformation_maxSampleCount = Lens.lens (\SignalInformation' {maxSampleCount} -> maxSampleCount) (\s@SignalInformation' {} a -> s {maxSampleCount = a} :: SignalInformation)
+
+-- | The minimum duration of time (in milliseconds) between two triggering
+-- events to collect data.
+--
+-- If a signal changes often, you might want to collect data at a slower
+-- rate.
+signalInformation_minimumSamplingIntervalMs :: Lens.Lens' SignalInformation (Prelude.Maybe Prelude.Natural)
+signalInformation_minimumSamplingIntervalMs = Lens.lens (\SignalInformation' {minimumSamplingIntervalMs} -> minimumSamplingIntervalMs) (\s@SignalInformation' {} a -> s {minimumSamplingIntervalMs = a} :: SignalInformation)
+
+-- | The name of the signal.
+signalInformation_name :: Lens.Lens' SignalInformation Prelude.Text
+signalInformation_name = Lens.lens (\SignalInformation' {name} -> name) (\s@SignalInformation' {} a -> s {name = a} :: SignalInformation)
+
+instance Data.FromJSON SignalInformation where
+  parseJSON =
+    Data.withObject
+      "SignalInformation"
+      ( \x ->
+          SignalInformation'
+            Prelude.<$> (x Data..:? "maxSampleCount")
+            Prelude.<*> (x Data..:? "minimumSamplingIntervalMs")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable SignalInformation where
+  hashWithSalt _salt SignalInformation' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxSampleCount
+      `Prelude.hashWithSalt` minimumSamplingIntervalMs
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData SignalInformation where
+  rnf SignalInformation' {..} =
+    Prelude.rnf maxSampleCount
+      `Prelude.seq` Prelude.rnf minimumSamplingIntervalMs
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToJSON SignalInformation where
+  toJSON SignalInformation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxSampleCount" Data..=)
+              Prelude.<$> maxSampleCount,
+            ("minimumSamplingIntervalMs" Data..=)
+              Prelude.<$> minimumSamplingIntervalMs,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/SpoolingMode.hs b/gen/Amazonka/IoTFleetWise/Types/SpoolingMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/SpoolingMode.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.IoTFleetWise.Types.SpoolingMode
+-- 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.IoTFleetWise.Types.SpoolingMode
+  ( SpoolingMode
+      ( ..,
+        SpoolingMode_OFF,
+        SpoolingMode_TO_DISK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SpoolingMode = SpoolingMode'
+  { fromSpoolingMode ::
+      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 SpoolingMode_OFF :: SpoolingMode
+pattern SpoolingMode_OFF = SpoolingMode' "OFF"
+
+pattern SpoolingMode_TO_DISK :: SpoolingMode
+pattern SpoolingMode_TO_DISK = SpoolingMode' "TO_DISK"
+
+{-# COMPLETE
+  SpoolingMode_OFF,
+  SpoolingMode_TO_DISK,
+  SpoolingMode'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/Tag.hs b/gen/Amazonka/IoTFleetWise/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/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.IoTFleetWise.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.IoTFleetWise.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 set of key\/value pairs that are used to manage the resource.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The tag\'s key.
+    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', '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.
+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/IoTFleetWise/Types/TimeBasedCollectionScheme.hs b/gen/Amazonka/IoTFleetWise/Types/TimeBasedCollectionScheme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/TimeBasedCollectionScheme.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.IoTFleetWise.Types.TimeBasedCollectionScheme
+-- 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.IoTFleetWise.Types.TimeBasedCollectionScheme 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 collection scheme that uses a time period to decide
+-- how often to collect data.
+--
+-- /See:/ 'newTimeBasedCollectionScheme' smart constructor.
+data TimeBasedCollectionScheme = TimeBasedCollectionScheme'
+  { -- | The time period (in milliseconds) to decide how often to collect data.
+    -- For example, if the time period is @60000@, the Edge Agent software
+    -- collects data once every minute.
+    periodMs :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeBasedCollectionScheme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'periodMs', 'timeBasedCollectionScheme_periodMs' - The time period (in milliseconds) to decide how often to collect data.
+-- For example, if the time period is @60000@, the Edge Agent software
+-- collects data once every minute.
+newTimeBasedCollectionScheme ::
+  -- | 'periodMs'
+  Prelude.Natural ->
+  TimeBasedCollectionScheme
+newTimeBasedCollectionScheme pPeriodMs_ =
+  TimeBasedCollectionScheme' {periodMs = pPeriodMs_}
+
+-- | The time period (in milliseconds) to decide how often to collect data.
+-- For example, if the time period is @60000@, the Edge Agent software
+-- collects data once every minute.
+timeBasedCollectionScheme_periodMs :: Lens.Lens' TimeBasedCollectionScheme Prelude.Natural
+timeBasedCollectionScheme_periodMs = Lens.lens (\TimeBasedCollectionScheme' {periodMs} -> periodMs) (\s@TimeBasedCollectionScheme' {} a -> s {periodMs = a} :: TimeBasedCollectionScheme)
+
+instance Data.FromJSON TimeBasedCollectionScheme where
+  parseJSON =
+    Data.withObject
+      "TimeBasedCollectionScheme"
+      ( \x ->
+          TimeBasedCollectionScheme'
+            Prelude.<$> (x Data..: "periodMs")
+      )
+
+instance Prelude.Hashable TimeBasedCollectionScheme where
+  hashWithSalt _salt TimeBasedCollectionScheme' {..} =
+    _salt `Prelude.hashWithSalt` periodMs
+
+instance Prelude.NFData TimeBasedCollectionScheme where
+  rnf TimeBasedCollectionScheme' {..} =
+    Prelude.rnf periodMs
+
+instance Data.ToJSON TimeBasedCollectionScheme where
+  toJSON TimeBasedCollectionScheme' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("periodMs" Data..= periodMs)]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/TimestreamRegistrationResponse.hs b/gen/Amazonka/IoTFleetWise/Types/TimestreamRegistrationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/TimestreamRegistrationResponse.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.Types.TimestreamRegistrationResponse
+-- 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.IoTFleetWise.Types.TimestreamRegistrationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.RegistrationStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the registered Amazon Timestream resources or errors,
+-- if any.
+--
+-- /See:/ 'newTimestreamRegistrationResponse' smart constructor.
+data TimestreamRegistrationResponse = TimestreamRegistrationResponse'
+  { -- | A message associated with a registration error.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Timestream database.
+    timestreamDatabaseArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the Timestream database table.
+    timestreamTableArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Timestream database.
+    timestreamDatabaseName :: Prelude.Text,
+    -- | The name of the Timestream database table.
+    timestreamTableName :: Prelude.Text,
+    -- | The status of registering your Amazon Timestream resources. The status
+    -- can be one of @REGISTRATION_SUCCESS@, @REGISTRATION_PENDING@,
+    -- @REGISTRATION_FAILURE@.
+    registrationStatus :: RegistrationStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimestreamRegistrationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorMessage', 'timestreamRegistrationResponse_errorMessage' - A message associated with a registration error.
+--
+-- 'timestreamDatabaseArn', 'timestreamRegistrationResponse_timestreamDatabaseArn' - The Amazon Resource Name (ARN) of the Timestream database.
+--
+-- 'timestreamTableArn', 'timestreamRegistrationResponse_timestreamTableArn' - The ARN of the Timestream database table.
+--
+-- 'timestreamDatabaseName', 'timestreamRegistrationResponse_timestreamDatabaseName' - The name of the Timestream database.
+--
+-- 'timestreamTableName', 'timestreamRegistrationResponse_timestreamTableName' - The name of the Timestream database table.
+--
+-- 'registrationStatus', 'timestreamRegistrationResponse_registrationStatus' - The status of registering your Amazon Timestream resources. The status
+-- can be one of @REGISTRATION_SUCCESS@, @REGISTRATION_PENDING@,
+-- @REGISTRATION_FAILURE@.
+newTimestreamRegistrationResponse ::
+  -- | 'timestreamDatabaseName'
+  Prelude.Text ->
+  -- | 'timestreamTableName'
+  Prelude.Text ->
+  -- | 'registrationStatus'
+  RegistrationStatus ->
+  TimestreamRegistrationResponse
+newTimestreamRegistrationResponse
+  pTimestreamDatabaseName_
+  pTimestreamTableName_
+  pRegistrationStatus_ =
+    TimestreamRegistrationResponse'
+      { errorMessage =
+          Prelude.Nothing,
+        timestreamDatabaseArn = Prelude.Nothing,
+        timestreamTableArn = Prelude.Nothing,
+        timestreamDatabaseName =
+          pTimestreamDatabaseName_,
+        timestreamTableName = pTimestreamTableName_,
+        registrationStatus = pRegistrationStatus_
+      }
+
+-- | A message associated with a registration error.
+timestreamRegistrationResponse_errorMessage :: Lens.Lens' TimestreamRegistrationResponse (Prelude.Maybe Prelude.Text)
+timestreamRegistrationResponse_errorMessage = Lens.lens (\TimestreamRegistrationResponse' {errorMessage} -> errorMessage) (\s@TimestreamRegistrationResponse' {} a -> s {errorMessage = a} :: TimestreamRegistrationResponse)
+
+-- | The Amazon Resource Name (ARN) of the Timestream database.
+timestreamRegistrationResponse_timestreamDatabaseArn :: Lens.Lens' TimestreamRegistrationResponse (Prelude.Maybe Prelude.Text)
+timestreamRegistrationResponse_timestreamDatabaseArn = Lens.lens (\TimestreamRegistrationResponse' {timestreamDatabaseArn} -> timestreamDatabaseArn) (\s@TimestreamRegistrationResponse' {} a -> s {timestreamDatabaseArn = a} :: TimestreamRegistrationResponse)
+
+-- | The ARN of the Timestream database table.
+timestreamRegistrationResponse_timestreamTableArn :: Lens.Lens' TimestreamRegistrationResponse (Prelude.Maybe Prelude.Text)
+timestreamRegistrationResponse_timestreamTableArn = Lens.lens (\TimestreamRegistrationResponse' {timestreamTableArn} -> timestreamTableArn) (\s@TimestreamRegistrationResponse' {} a -> s {timestreamTableArn = a} :: TimestreamRegistrationResponse)
+
+-- | The name of the Timestream database.
+timestreamRegistrationResponse_timestreamDatabaseName :: Lens.Lens' TimestreamRegistrationResponse Prelude.Text
+timestreamRegistrationResponse_timestreamDatabaseName = Lens.lens (\TimestreamRegistrationResponse' {timestreamDatabaseName} -> timestreamDatabaseName) (\s@TimestreamRegistrationResponse' {} a -> s {timestreamDatabaseName = a} :: TimestreamRegistrationResponse)
+
+-- | The name of the Timestream database table.
+timestreamRegistrationResponse_timestreamTableName :: Lens.Lens' TimestreamRegistrationResponse Prelude.Text
+timestreamRegistrationResponse_timestreamTableName = Lens.lens (\TimestreamRegistrationResponse' {timestreamTableName} -> timestreamTableName) (\s@TimestreamRegistrationResponse' {} a -> s {timestreamTableName = a} :: TimestreamRegistrationResponse)
+
+-- | The status of registering your Amazon Timestream resources. The status
+-- can be one of @REGISTRATION_SUCCESS@, @REGISTRATION_PENDING@,
+-- @REGISTRATION_FAILURE@.
+timestreamRegistrationResponse_registrationStatus :: Lens.Lens' TimestreamRegistrationResponse RegistrationStatus
+timestreamRegistrationResponse_registrationStatus = Lens.lens (\TimestreamRegistrationResponse' {registrationStatus} -> registrationStatus) (\s@TimestreamRegistrationResponse' {} a -> s {registrationStatus = a} :: TimestreamRegistrationResponse)
+
+instance Data.FromJSON TimestreamRegistrationResponse where
+  parseJSON =
+    Data.withObject
+      "TimestreamRegistrationResponse"
+      ( \x ->
+          TimestreamRegistrationResponse'
+            Prelude.<$> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "timestreamDatabaseArn")
+            Prelude.<*> (x Data..:? "timestreamTableArn")
+            Prelude.<*> (x Data..: "timestreamDatabaseName")
+            Prelude.<*> (x Data..: "timestreamTableName")
+            Prelude.<*> (x Data..: "registrationStatus")
+      )
+
+instance
+  Prelude.Hashable
+    TimestreamRegistrationResponse
+  where
+  hashWithSalt
+    _salt
+    TimestreamRegistrationResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` errorMessage
+        `Prelude.hashWithSalt` timestreamDatabaseArn
+        `Prelude.hashWithSalt` timestreamTableArn
+        `Prelude.hashWithSalt` timestreamDatabaseName
+        `Prelude.hashWithSalt` timestreamTableName
+        `Prelude.hashWithSalt` registrationStatus
+
+instance
+  Prelude.NFData
+    TimestreamRegistrationResponse
+  where
+  rnf TimestreamRegistrationResponse' {..} =
+    Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf timestreamDatabaseArn
+      `Prelude.seq` Prelude.rnf timestreamTableArn
+      `Prelude.seq` Prelude.rnf timestreamDatabaseName
+      `Prelude.seq` Prelude.rnf timestreamTableName
+      `Prelude.seq` Prelude.rnf registrationStatus
diff --git a/gen/Amazonka/IoTFleetWise/Types/TimestreamResources.hs b/gen/Amazonka/IoTFleetWise/Types/TimestreamResources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/TimestreamResources.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.IoTFleetWise.Types.TimestreamResources
+-- 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.IoTFleetWise.Types.TimestreamResources 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 registered Amazon Timestream resources that Amazon Web Services IoT
+-- FleetWise edge agent software can transfer your vehicle data to.
+--
+-- /See:/ 'newTimestreamResources' smart constructor.
+data TimestreamResources = TimestreamResources'
+  { -- | The name of the registered Amazon Timestream database.
+    timestreamDatabaseName :: Prelude.Text,
+    -- | The name of the registered Amazon Timestream database table.
+    timestreamTableName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimestreamResources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timestreamDatabaseName', 'timestreamResources_timestreamDatabaseName' - The name of the registered Amazon Timestream database.
+--
+-- 'timestreamTableName', 'timestreamResources_timestreamTableName' - The name of the registered Amazon Timestream database table.
+newTimestreamResources ::
+  -- | 'timestreamDatabaseName'
+  Prelude.Text ->
+  -- | 'timestreamTableName'
+  Prelude.Text ->
+  TimestreamResources
+newTimestreamResources
+  pTimestreamDatabaseName_
+  pTimestreamTableName_ =
+    TimestreamResources'
+      { timestreamDatabaseName =
+          pTimestreamDatabaseName_,
+        timestreamTableName = pTimestreamTableName_
+      }
+
+-- | The name of the registered Amazon Timestream database.
+timestreamResources_timestreamDatabaseName :: Lens.Lens' TimestreamResources Prelude.Text
+timestreamResources_timestreamDatabaseName = Lens.lens (\TimestreamResources' {timestreamDatabaseName} -> timestreamDatabaseName) (\s@TimestreamResources' {} a -> s {timestreamDatabaseName = a} :: TimestreamResources)
+
+-- | The name of the registered Amazon Timestream database table.
+timestreamResources_timestreamTableName :: Lens.Lens' TimestreamResources Prelude.Text
+timestreamResources_timestreamTableName = Lens.lens (\TimestreamResources' {timestreamTableName} -> timestreamTableName) (\s@TimestreamResources' {} a -> s {timestreamTableName = a} :: TimestreamResources)
+
+instance Data.FromJSON TimestreamResources where
+  parseJSON =
+    Data.withObject
+      "TimestreamResources"
+      ( \x ->
+          TimestreamResources'
+            Prelude.<$> (x Data..: "timestreamDatabaseName")
+            Prelude.<*> (x Data..: "timestreamTableName")
+      )
+
+instance Prelude.Hashable TimestreamResources where
+  hashWithSalt _salt TimestreamResources' {..} =
+    _salt
+      `Prelude.hashWithSalt` timestreamDatabaseName
+      `Prelude.hashWithSalt` timestreamTableName
+
+instance Prelude.NFData TimestreamResources where
+  rnf TimestreamResources' {..} =
+    Prelude.rnf timestreamDatabaseName
+      `Prelude.seq` Prelude.rnf timestreamTableName
+
+instance Data.ToJSON TimestreamResources where
+  toJSON TimestreamResources' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "timestreamDatabaseName"
+                  Data..= timestreamDatabaseName
+              ),
+            Prelude.Just
+              ("timestreamTableName" Data..= timestreamTableName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/TriggerMode.hs b/gen/Amazonka/IoTFleetWise/Types/TriggerMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/TriggerMode.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.IoTFleetWise.Types.TriggerMode
+-- 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.IoTFleetWise.Types.TriggerMode
+  ( TriggerMode
+      ( ..,
+        TriggerMode_ALWAYS,
+        TriggerMode_RISING_EDGE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TriggerMode = TriggerMode'
+  { fromTriggerMode ::
+      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 TriggerMode_ALWAYS :: TriggerMode
+pattern TriggerMode_ALWAYS = TriggerMode' "ALWAYS"
+
+pattern TriggerMode_RISING_EDGE :: TriggerMode
+pattern TriggerMode_RISING_EDGE = TriggerMode' "RISING_EDGE"
+
+{-# COMPLETE
+  TriggerMode_ALWAYS,
+  TriggerMode_RISING_EDGE,
+  TriggerMode'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/UpdateCampaignAction.hs b/gen/Amazonka/IoTFleetWise/Types/UpdateCampaignAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/UpdateCampaignAction.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.IoTFleetWise.Types.UpdateCampaignAction
+-- 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.IoTFleetWise.Types.UpdateCampaignAction
+  ( UpdateCampaignAction
+      ( ..,
+        UpdateCampaignAction_APPROVE,
+        UpdateCampaignAction_RESUME,
+        UpdateCampaignAction_SUSPEND,
+        UpdateCampaignAction_UPDATE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UpdateCampaignAction = UpdateCampaignAction'
+  { fromUpdateCampaignAction ::
+      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 UpdateCampaignAction_APPROVE :: UpdateCampaignAction
+pattern UpdateCampaignAction_APPROVE = UpdateCampaignAction' "APPROVE"
+
+pattern UpdateCampaignAction_RESUME :: UpdateCampaignAction
+pattern UpdateCampaignAction_RESUME = UpdateCampaignAction' "RESUME"
+
+pattern UpdateCampaignAction_SUSPEND :: UpdateCampaignAction
+pattern UpdateCampaignAction_SUSPEND = UpdateCampaignAction' "SUSPEND"
+
+pattern UpdateCampaignAction_UPDATE :: UpdateCampaignAction
+pattern UpdateCampaignAction_UPDATE = UpdateCampaignAction' "UPDATE"
+
+{-# COMPLETE
+  UpdateCampaignAction_APPROVE,
+  UpdateCampaignAction_RESUME,
+  UpdateCampaignAction_SUSPEND,
+  UpdateCampaignAction_UPDATE,
+  UpdateCampaignAction'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/UpdateMode.hs b/gen/Amazonka/IoTFleetWise/Types/UpdateMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/UpdateMode.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.IoTFleetWise.Types.UpdateMode
+-- 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.IoTFleetWise.Types.UpdateMode
+  ( UpdateMode
+      ( ..,
+        UpdateMode_Merge,
+        UpdateMode_Overwrite
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UpdateMode = UpdateMode'
+  { fromUpdateMode ::
+      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 UpdateMode_Merge :: UpdateMode
+pattern UpdateMode_Merge = UpdateMode' "Merge"
+
+pattern UpdateMode_Overwrite :: UpdateMode
+pattern UpdateMode_Overwrite = UpdateMode' "Overwrite"
+
+{-# COMPLETE
+  UpdateMode_Merge,
+  UpdateMode_Overwrite,
+  UpdateMode'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleError.hs b/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleError.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.IoTFleetWise.Types.UpdateVehicleError
+-- 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.IoTFleetWise.Types.UpdateVehicleError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An HTTP error resulting from updating the description for a vehicle.
+--
+-- /See:/ 'newUpdateVehicleError' smart constructor.
+data UpdateVehicleError = UpdateVehicleError'
+  { -- | The relevant HTTP error code (400+).
+    code :: Prelude.Maybe Prelude.Int,
+    -- | A message associated with the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the vehicle with the error.
+    vehicleName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVehicleError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'updateVehicleError_code' - The relevant HTTP error code (400+).
+--
+-- 'message', 'updateVehicleError_message' - A message associated with the error.
+--
+-- 'vehicleName', 'updateVehicleError_vehicleName' - The ID of the vehicle with the error.
+newUpdateVehicleError ::
+  UpdateVehicleError
+newUpdateVehicleError =
+  UpdateVehicleError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing,
+      vehicleName = Prelude.Nothing
+    }
+
+-- | The relevant HTTP error code (400+).
+updateVehicleError_code :: Lens.Lens' UpdateVehicleError (Prelude.Maybe Prelude.Int)
+updateVehicleError_code = Lens.lens (\UpdateVehicleError' {code} -> code) (\s@UpdateVehicleError' {} a -> s {code = a} :: UpdateVehicleError)
+
+-- | A message associated with the error.
+updateVehicleError_message :: Lens.Lens' UpdateVehicleError (Prelude.Maybe Prelude.Text)
+updateVehicleError_message = Lens.lens (\UpdateVehicleError' {message} -> message) (\s@UpdateVehicleError' {} a -> s {message = a} :: UpdateVehicleError)
+
+-- | The ID of the vehicle with the error.
+updateVehicleError_vehicleName :: Lens.Lens' UpdateVehicleError (Prelude.Maybe Prelude.Text)
+updateVehicleError_vehicleName = Lens.lens (\UpdateVehicleError' {vehicleName} -> vehicleName) (\s@UpdateVehicleError' {} a -> s {vehicleName = a} :: UpdateVehicleError)
+
+instance Data.FromJSON UpdateVehicleError where
+  parseJSON =
+    Data.withObject
+      "UpdateVehicleError"
+      ( \x ->
+          UpdateVehicleError'
+            Prelude.<$> (x Data..:? "code")
+            Prelude.<*> (x Data..:? "message")
+            Prelude.<*> (x Data..:? "vehicleName")
+      )
+
+instance Prelude.Hashable UpdateVehicleError where
+  hashWithSalt _salt UpdateVehicleError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData UpdateVehicleError where
+  rnf UpdateVehicleError' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf vehicleName
diff --git a/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleRequestItem.hs b/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleRequestItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleRequestItem.hs
@@ -0,0 +1,150 @@
+{-# 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.IoTFleetWise.Types.UpdateVehicleRequestItem
+-- 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.IoTFleetWise.Types.UpdateVehicleRequestItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.UpdateMode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the vehicle to update.
+--
+-- /See:/ 'newUpdateVehicleRequestItem' smart constructor.
+data UpdateVehicleRequestItem = UpdateVehicleRequestItem'
+  { -- | The method the specified attributes will update the existing attributes
+    -- on the vehicle. Use@Overwite@ to replace the vehicle attributes with the
+    -- specified attributes. Or use @Merge@ to combine all attributes.
+    --
+    -- This is required if attributes are present in the input.
+    attributeUpdateMode :: Prelude.Maybe UpdateMode,
+    -- | Static information about a vehicle in a key-value pair. For example:
+    --
+    -- @\"engineType\"@ : @\"1.3 L R2\"@
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ARN of the signal decoder manifest associated with the vehicle to
+    -- update.
+    decoderManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the vehicle model (model manifest) associated with the
+    -- vehicle to update.
+    modelManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the vehicle to update.
+    vehicleName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVehicleRequestItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeUpdateMode', 'updateVehicleRequestItem_attributeUpdateMode' - The method the specified attributes will update the existing attributes
+-- on the vehicle. Use@Overwite@ to replace the vehicle attributes with the
+-- specified attributes. Or use @Merge@ to combine all attributes.
+--
+-- This is required if attributes are present in the input.
+--
+-- 'attributes', 'updateVehicleRequestItem_attributes' - Static information about a vehicle in a key-value pair. For example:
+--
+-- @\"engineType\"@ : @\"1.3 L R2\"@
+--
+-- 'decoderManifestArn', 'updateVehicleRequestItem_decoderManifestArn' - The ARN of the signal decoder manifest associated with the vehicle to
+-- update.
+--
+-- 'modelManifestArn', 'updateVehicleRequestItem_modelManifestArn' - The ARN of the vehicle model (model manifest) associated with the
+-- vehicle to update.
+--
+-- 'vehicleName', 'updateVehicleRequestItem_vehicleName' - The unique ID of the vehicle to update.
+newUpdateVehicleRequestItem ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  UpdateVehicleRequestItem
+newUpdateVehicleRequestItem pVehicleName_ =
+  UpdateVehicleRequestItem'
+    { attributeUpdateMode =
+        Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      decoderManifestArn = Prelude.Nothing,
+      modelManifestArn = Prelude.Nothing,
+      vehicleName = pVehicleName_
+    }
+
+-- | The method the specified attributes will update the existing attributes
+-- on the vehicle. Use@Overwite@ to replace the vehicle attributes with the
+-- specified attributes. Or use @Merge@ to combine all attributes.
+--
+-- This is required if attributes are present in the input.
+updateVehicleRequestItem_attributeUpdateMode :: Lens.Lens' UpdateVehicleRequestItem (Prelude.Maybe UpdateMode)
+updateVehicleRequestItem_attributeUpdateMode = Lens.lens (\UpdateVehicleRequestItem' {attributeUpdateMode} -> attributeUpdateMode) (\s@UpdateVehicleRequestItem' {} a -> s {attributeUpdateMode = a} :: UpdateVehicleRequestItem)
+
+-- | Static information about a vehicle in a key-value pair. For example:
+--
+-- @\"engineType\"@ : @\"1.3 L R2\"@
+updateVehicleRequestItem_attributes :: Lens.Lens' UpdateVehicleRequestItem (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateVehicleRequestItem_attributes = Lens.lens (\UpdateVehicleRequestItem' {attributes} -> attributes) (\s@UpdateVehicleRequestItem' {} a -> s {attributes = a} :: UpdateVehicleRequestItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the signal decoder manifest associated with the vehicle to
+-- update.
+updateVehicleRequestItem_decoderManifestArn :: Lens.Lens' UpdateVehicleRequestItem (Prelude.Maybe Prelude.Text)
+updateVehicleRequestItem_decoderManifestArn = Lens.lens (\UpdateVehicleRequestItem' {decoderManifestArn} -> decoderManifestArn) (\s@UpdateVehicleRequestItem' {} a -> s {decoderManifestArn = a} :: UpdateVehicleRequestItem)
+
+-- | The ARN of the vehicle model (model manifest) associated with the
+-- vehicle to update.
+updateVehicleRequestItem_modelManifestArn :: Lens.Lens' UpdateVehicleRequestItem (Prelude.Maybe Prelude.Text)
+updateVehicleRequestItem_modelManifestArn = Lens.lens (\UpdateVehicleRequestItem' {modelManifestArn} -> modelManifestArn) (\s@UpdateVehicleRequestItem' {} a -> s {modelManifestArn = a} :: UpdateVehicleRequestItem)
+
+-- | The unique ID of the vehicle to update.
+updateVehicleRequestItem_vehicleName :: Lens.Lens' UpdateVehicleRequestItem Prelude.Text
+updateVehicleRequestItem_vehicleName = Lens.lens (\UpdateVehicleRequestItem' {vehicleName} -> vehicleName) (\s@UpdateVehicleRequestItem' {} a -> s {vehicleName = a} :: UpdateVehicleRequestItem)
+
+instance Prelude.Hashable UpdateVehicleRequestItem where
+  hashWithSalt _salt UpdateVehicleRequestItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeUpdateMode
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` decoderManifestArn
+      `Prelude.hashWithSalt` modelManifestArn
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData UpdateVehicleRequestItem where
+  rnf UpdateVehicleRequestItem' {..} =
+    Prelude.rnf attributeUpdateMode
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf decoderManifestArn
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf vehicleName
+
+instance Data.ToJSON UpdateVehicleRequestItem where
+  toJSON UpdateVehicleRequestItem' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributeUpdateMode" Data..=)
+              Prelude.<$> attributeUpdateMode,
+            ("attributes" Data..=) Prelude.<$> attributes,
+            ("decoderManifestArn" Data..=)
+              Prelude.<$> decoderManifestArn,
+            ("modelManifestArn" Data..=)
+              Prelude.<$> modelManifestArn,
+            Prelude.Just ("vehicleName" Data..= vehicleName)
+          ]
+      )
diff --git a/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleResponseItem.hs b/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleResponseItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/UpdateVehicleResponseItem.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.IoTFleetWise.Types.UpdateVehicleResponseItem
+-- 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.IoTFleetWise.Types.UpdateVehicleResponseItem 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 the updated vehicle.
+--
+-- /See:/ 'newUpdateVehicleResponseItem' smart constructor.
+data UpdateVehicleResponseItem = UpdateVehicleResponseItem'
+  { -- | The Amazon Resource Name (ARN) of the updated vehicle.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the updated vehicle.
+    vehicleName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVehicleResponseItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateVehicleResponseItem_arn' - The Amazon Resource Name (ARN) of the updated vehicle.
+--
+-- 'vehicleName', 'updateVehicleResponseItem_vehicleName' - The unique ID of the updated vehicle.
+newUpdateVehicleResponseItem ::
+  UpdateVehicleResponseItem
+newUpdateVehicleResponseItem =
+  UpdateVehicleResponseItem'
+    { arn = Prelude.Nothing,
+      vehicleName = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the updated vehicle.
+updateVehicleResponseItem_arn :: Lens.Lens' UpdateVehicleResponseItem (Prelude.Maybe Prelude.Text)
+updateVehicleResponseItem_arn = Lens.lens (\UpdateVehicleResponseItem' {arn} -> arn) (\s@UpdateVehicleResponseItem' {} a -> s {arn = a} :: UpdateVehicleResponseItem)
+
+-- | The unique ID of the updated vehicle.
+updateVehicleResponseItem_vehicleName :: Lens.Lens' UpdateVehicleResponseItem (Prelude.Maybe Prelude.Text)
+updateVehicleResponseItem_vehicleName = Lens.lens (\UpdateVehicleResponseItem' {vehicleName} -> vehicleName) (\s@UpdateVehicleResponseItem' {} a -> s {vehicleName = a} :: UpdateVehicleResponseItem)
+
+instance Data.FromJSON UpdateVehicleResponseItem where
+  parseJSON =
+    Data.withObject
+      "UpdateVehicleResponseItem"
+      ( \x ->
+          UpdateVehicleResponseItem'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "vehicleName")
+      )
+
+instance Prelude.Hashable UpdateVehicleResponseItem where
+  hashWithSalt _salt UpdateVehicleResponseItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData UpdateVehicleResponseItem where
+  rnf UpdateVehicleResponseItem' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf vehicleName
diff --git a/gen/Amazonka/IoTFleetWise/Types/VehicleAssociationBehavior.hs b/gen/Amazonka/IoTFleetWise/Types/VehicleAssociationBehavior.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/VehicleAssociationBehavior.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.IoTFleetWise.Types.VehicleAssociationBehavior
+-- 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.IoTFleetWise.Types.VehicleAssociationBehavior
+  ( VehicleAssociationBehavior
+      ( ..,
+        VehicleAssociationBehavior_CreateIotThing,
+        VehicleAssociationBehavior_ValidateIotThingExists
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VehicleAssociationBehavior = VehicleAssociationBehavior'
+  { fromVehicleAssociationBehavior ::
+      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 VehicleAssociationBehavior_CreateIotThing :: VehicleAssociationBehavior
+pattern VehicleAssociationBehavior_CreateIotThing = VehicleAssociationBehavior' "CreateIotThing"
+
+pattern VehicleAssociationBehavior_ValidateIotThingExists :: VehicleAssociationBehavior
+pattern VehicleAssociationBehavior_ValidateIotThingExists = VehicleAssociationBehavior' "ValidateIotThingExists"
+
+{-# COMPLETE
+  VehicleAssociationBehavior_CreateIotThing,
+  VehicleAssociationBehavior_ValidateIotThingExists,
+  VehicleAssociationBehavior'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/VehicleState.hs b/gen/Amazonka/IoTFleetWise/Types/VehicleState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/VehicleState.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.IoTFleetWise.Types.VehicleState
+-- 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.IoTFleetWise.Types.VehicleState
+  ( VehicleState
+      ( ..,
+        VehicleState_CREATED,
+        VehicleState_DELETING,
+        VehicleState_HEALTHY,
+        VehicleState_READY,
+        VehicleState_SUSPENDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VehicleState = VehicleState'
+  { fromVehicleState ::
+      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 VehicleState_CREATED :: VehicleState
+pattern VehicleState_CREATED = VehicleState' "CREATED"
+
+pattern VehicleState_DELETING :: VehicleState
+pattern VehicleState_DELETING = VehicleState' "DELETING"
+
+pattern VehicleState_HEALTHY :: VehicleState
+pattern VehicleState_HEALTHY = VehicleState' "HEALTHY"
+
+pattern VehicleState_READY :: VehicleState
+pattern VehicleState_READY = VehicleState' "READY"
+
+pattern VehicleState_SUSPENDED :: VehicleState
+pattern VehicleState_SUSPENDED = VehicleState' "SUSPENDED"
+
+{-# COMPLETE
+  VehicleState_CREATED,
+  VehicleState_DELETING,
+  VehicleState_HEALTHY,
+  VehicleState_READY,
+  VehicleState_SUSPENDED,
+  VehicleState'
+  #-}
diff --git a/gen/Amazonka/IoTFleetWise/Types/VehicleStatus.hs b/gen/Amazonka/IoTFleetWise/Types/VehicleStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/VehicleStatus.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.IoTFleetWise.Types.VehicleStatus
+-- 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.IoTFleetWise.Types.VehicleStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types.VehicleState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the state of a vehicle and how it relates to the
+-- status of a campaign.
+--
+-- /See:/ 'newVehicleStatus' smart constructor.
+data VehicleStatus = VehicleStatus'
+  { -- | The name of a campaign.
+    campaignName :: Prelude.Maybe Prelude.Text,
+    -- | The state of a vehicle, which can be one of the following:
+    --
+    -- -   @CREATED@ - Amazon Web Services IoT FleetWise sucessfully created
+    --     the vehicle.
+    --
+    -- -   @READY@ - The vehicle is ready to receive a campaign deployment.
+    --
+    -- -   @HEALTHY@ - A campaign deployment was delivered to the vehicle.
+    --
+    -- -   @SUSPENDED@ - A campaign associated with the vehicle was suspended
+    --     and data collection was paused.
+    --
+    -- -   @DELETING@ - Amazon Web Services IoT FleetWise is removing a
+    --     campaign from the vehicle.
+    status :: Prelude.Maybe VehicleState,
+    -- | The unique ID of the vehicle.
+    vehicleName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VehicleStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'campaignName', 'vehicleStatus_campaignName' - The name of a campaign.
+--
+-- 'status', 'vehicleStatus_status' - The state of a vehicle, which can be one of the following:
+--
+-- -   @CREATED@ - Amazon Web Services IoT FleetWise sucessfully created
+--     the vehicle.
+--
+-- -   @READY@ - The vehicle is ready to receive a campaign deployment.
+--
+-- -   @HEALTHY@ - A campaign deployment was delivered to the vehicle.
+--
+-- -   @SUSPENDED@ - A campaign associated with the vehicle was suspended
+--     and data collection was paused.
+--
+-- -   @DELETING@ - Amazon Web Services IoT FleetWise is removing a
+--     campaign from the vehicle.
+--
+-- 'vehicleName', 'vehicleStatus_vehicleName' - The unique ID of the vehicle.
+newVehicleStatus ::
+  VehicleStatus
+newVehicleStatus =
+  VehicleStatus'
+    { campaignName = Prelude.Nothing,
+      status = Prelude.Nothing,
+      vehicleName = Prelude.Nothing
+    }
+
+-- | The name of a campaign.
+vehicleStatus_campaignName :: Lens.Lens' VehicleStatus (Prelude.Maybe Prelude.Text)
+vehicleStatus_campaignName = Lens.lens (\VehicleStatus' {campaignName} -> campaignName) (\s@VehicleStatus' {} a -> s {campaignName = a} :: VehicleStatus)
+
+-- | The state of a vehicle, which can be one of the following:
+--
+-- -   @CREATED@ - Amazon Web Services IoT FleetWise sucessfully created
+--     the vehicle.
+--
+-- -   @READY@ - The vehicle is ready to receive a campaign deployment.
+--
+-- -   @HEALTHY@ - A campaign deployment was delivered to the vehicle.
+--
+-- -   @SUSPENDED@ - A campaign associated with the vehicle was suspended
+--     and data collection was paused.
+--
+-- -   @DELETING@ - Amazon Web Services IoT FleetWise is removing a
+--     campaign from the vehicle.
+vehicleStatus_status :: Lens.Lens' VehicleStatus (Prelude.Maybe VehicleState)
+vehicleStatus_status = Lens.lens (\VehicleStatus' {status} -> status) (\s@VehicleStatus' {} a -> s {status = a} :: VehicleStatus)
+
+-- | The unique ID of the vehicle.
+vehicleStatus_vehicleName :: Lens.Lens' VehicleStatus (Prelude.Maybe Prelude.Text)
+vehicleStatus_vehicleName = Lens.lens (\VehicleStatus' {vehicleName} -> vehicleName) (\s@VehicleStatus' {} a -> s {vehicleName = a} :: VehicleStatus)
+
+instance Data.FromJSON VehicleStatus where
+  parseJSON =
+    Data.withObject
+      "VehicleStatus"
+      ( \x ->
+          VehicleStatus'
+            Prelude.<$> (x Data..:? "campaignName")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "vehicleName")
+      )
+
+instance Prelude.Hashable VehicleStatus where
+  hashWithSalt _salt VehicleStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` campaignName
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData VehicleStatus where
+  rnf VehicleStatus' {..} =
+    Prelude.rnf campaignName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf vehicleName
diff --git a/gen/Amazonka/IoTFleetWise/Types/VehicleSummary.hs b/gen/Amazonka/IoTFleetWise/Types/VehicleSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/Types/VehicleSummary.hs
@@ -0,0 +1,160 @@
+{-# 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.IoTFleetWise.Types.VehicleSummary
+-- 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.IoTFleetWise.Types.VehicleSummary 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 vehicle.
+--
+-- To return this information about vehicles in your account, you can use
+-- the API operation.
+--
+-- /See:/ 'newVehicleSummary' smart constructor.
+data VehicleSummary = VehicleSummary'
+  { -- | The unique ID of the vehicle.
+    vehicleName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the vehicle.
+    arn :: Prelude.Text,
+    -- | The ARN of a vehicle model (model manifest) associated with the vehicle.
+    modelManifestArn :: Prelude.Text,
+    -- | The ARN of a decoder manifest associated with the vehicle.
+    decoderManifestArn :: Prelude.Text,
+    -- | The time the vehicle was created in seconds since epoch (January 1, 1970
+    -- at midnight UTC time).
+    creationTime :: Data.POSIX,
+    -- | The time the vehicle was last updated in seconds since epoch (January 1,
+    -- 1970 at midnight UTC time).
+    lastModificationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VehicleSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vehicleName', 'vehicleSummary_vehicleName' - The unique ID of the vehicle.
+--
+-- 'arn', 'vehicleSummary_arn' - The Amazon Resource Name (ARN) of the vehicle.
+--
+-- 'modelManifestArn', 'vehicleSummary_modelManifestArn' - The ARN of a vehicle model (model manifest) associated with the vehicle.
+--
+-- 'decoderManifestArn', 'vehicleSummary_decoderManifestArn' - The ARN of a decoder manifest associated with the vehicle.
+--
+-- 'creationTime', 'vehicleSummary_creationTime' - The time the vehicle was created in seconds since epoch (January 1, 1970
+-- at midnight UTC time).
+--
+-- 'lastModificationTime', 'vehicleSummary_lastModificationTime' - The time the vehicle was last updated in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+newVehicleSummary ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'modelManifestArn'
+  Prelude.Text ->
+  -- | 'decoderManifestArn'
+  Prelude.Text ->
+  -- | 'creationTime'
+  Prelude.UTCTime ->
+  -- | 'lastModificationTime'
+  Prelude.UTCTime ->
+  VehicleSummary
+newVehicleSummary
+  pVehicleName_
+  pArn_
+  pModelManifestArn_
+  pDecoderManifestArn_
+  pCreationTime_
+  pLastModificationTime_ =
+    VehicleSummary'
+      { vehicleName = pVehicleName_,
+        arn = pArn_,
+        modelManifestArn = pModelManifestArn_,
+        decoderManifestArn = pDecoderManifestArn_,
+        creationTime = Data._Time Lens.# pCreationTime_,
+        lastModificationTime =
+          Data._Time Lens.# pLastModificationTime_
+      }
+
+-- | The unique ID of the vehicle.
+vehicleSummary_vehicleName :: Lens.Lens' VehicleSummary Prelude.Text
+vehicleSummary_vehicleName = Lens.lens (\VehicleSummary' {vehicleName} -> vehicleName) (\s@VehicleSummary' {} a -> s {vehicleName = a} :: VehicleSummary)
+
+-- | The Amazon Resource Name (ARN) of the vehicle.
+vehicleSummary_arn :: Lens.Lens' VehicleSummary Prelude.Text
+vehicleSummary_arn = Lens.lens (\VehicleSummary' {arn} -> arn) (\s@VehicleSummary' {} a -> s {arn = a} :: VehicleSummary)
+
+-- | The ARN of a vehicle model (model manifest) associated with the vehicle.
+vehicleSummary_modelManifestArn :: Lens.Lens' VehicleSummary Prelude.Text
+vehicleSummary_modelManifestArn = Lens.lens (\VehicleSummary' {modelManifestArn} -> modelManifestArn) (\s@VehicleSummary' {} a -> s {modelManifestArn = a} :: VehicleSummary)
+
+-- | The ARN of a decoder manifest associated with the vehicle.
+vehicleSummary_decoderManifestArn :: Lens.Lens' VehicleSummary Prelude.Text
+vehicleSummary_decoderManifestArn = Lens.lens (\VehicleSummary' {decoderManifestArn} -> decoderManifestArn) (\s@VehicleSummary' {} a -> s {decoderManifestArn = a} :: VehicleSummary)
+
+-- | The time the vehicle was created in seconds since epoch (January 1, 1970
+-- at midnight UTC time).
+vehicleSummary_creationTime :: Lens.Lens' VehicleSummary Prelude.UTCTime
+vehicleSummary_creationTime = Lens.lens (\VehicleSummary' {creationTime} -> creationTime) (\s@VehicleSummary' {} a -> s {creationTime = a} :: VehicleSummary) Prelude.. Data._Time
+
+-- | The time the vehicle was last updated in seconds since epoch (January 1,
+-- 1970 at midnight UTC time).
+vehicleSummary_lastModificationTime :: Lens.Lens' VehicleSummary Prelude.UTCTime
+vehicleSummary_lastModificationTime = Lens.lens (\VehicleSummary' {lastModificationTime} -> lastModificationTime) (\s@VehicleSummary' {} a -> s {lastModificationTime = a} :: VehicleSummary) Prelude.. Data._Time
+
+instance Data.FromJSON VehicleSummary where
+  parseJSON =
+    Data.withObject
+      "VehicleSummary"
+      ( \x ->
+          VehicleSummary'
+            Prelude.<$> (x Data..: "vehicleName")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "modelManifestArn")
+            Prelude.<*> (x Data..: "decoderManifestArn")
+            Prelude.<*> (x Data..: "creationTime")
+            Prelude.<*> (x Data..: "lastModificationTime")
+      )
+
+instance Prelude.Hashable VehicleSummary where
+  hashWithSalt _salt VehicleSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` vehicleName
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` modelManifestArn
+      `Prelude.hashWithSalt` decoderManifestArn
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+
+instance Prelude.NFData VehicleSummary where
+  rnf VehicleSummary' {..} =
+    Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf decoderManifestArn
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/IoTFleetWise/UntagResource.hs b/gen/Amazonka/IoTFleetWise/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/UntagResource.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.IoTFleetWise.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 the given tags (metadata) from the resource.
+module Amazonka.IoTFleetWise.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.IoTFleetWise.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.
+    resourceARN :: Prelude.Text,
+    -- | A list of the keys of the tags to be removed 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.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A list of the keys of the tags to be removed from the resource.
+newUntagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceARN_ =
+  UntagResource'
+    { resourceARN = pResourceARN_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The ARN of the resource.
+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 be removed 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.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` 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.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceARN" Data..= resourceARN),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/UpdateCampaign.hs b/gen/Amazonka/IoTFleetWise/UpdateCampaign.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/UpdateCampaign.hs
@@ -0,0 +1,314 @@
+{-# 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.IoTFleetWise.UpdateCampaign
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a campaign.
+module Amazonka.IoTFleetWise.UpdateCampaign
+  ( -- * Creating a Request
+    UpdateCampaign (..),
+    newUpdateCampaign,
+
+    -- * Request Lenses
+    updateCampaign_dataExtraDimensions,
+    updateCampaign_description,
+    updateCampaign_name,
+    updateCampaign_action,
+
+    -- * Destructuring the Response
+    UpdateCampaignResponse (..),
+    newUpdateCampaignResponse,
+
+    -- * Response Lenses
+    updateCampaignResponse_arn,
+    updateCampaignResponse_name,
+    updateCampaignResponse_status,
+    updateCampaignResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateCampaign' smart constructor.
+data UpdateCampaign = UpdateCampaign'
+  { -- | A list of vehicle attributes to associate with a signal.
+    --
+    -- Default: An empty array
+    dataExtraDimensions :: Prelude.Maybe [Prelude.Text],
+    -- | The description of the campaign.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the campaign to update.
+    name :: Prelude.Text,
+    -- | Specifies how to update a campaign. The action can be one of the
+    -- following:
+    --
+    -- -   @APPROVE@ - To approve delivering a data collection scheme to
+    --     vehicles.
+    --
+    -- -   @SUSPEND@ - To suspend collecting signal data.
+    --
+    -- -   @RESUME@ - To resume collecting signal data.
+    --
+    -- -   @UPDATE@ - To update a campaign.
+    action :: UpdateCampaignAction
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCampaign' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataExtraDimensions', 'updateCampaign_dataExtraDimensions' - A list of vehicle attributes to associate with a signal.
+--
+-- Default: An empty array
+--
+-- 'description', 'updateCampaign_description' - The description of the campaign.
+--
+-- 'name', 'updateCampaign_name' - The name of the campaign to update.
+--
+-- 'action', 'updateCampaign_action' - Specifies how to update a campaign. The action can be one of the
+-- following:
+--
+-- -   @APPROVE@ - To approve delivering a data collection scheme to
+--     vehicles.
+--
+-- -   @SUSPEND@ - To suspend collecting signal data.
+--
+-- -   @RESUME@ - To resume collecting signal data.
+--
+-- -   @UPDATE@ - To update a campaign.
+newUpdateCampaign ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'action'
+  UpdateCampaignAction ->
+  UpdateCampaign
+newUpdateCampaign pName_ pAction_ =
+  UpdateCampaign'
+    { dataExtraDimensions =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = pName_,
+      action = pAction_
+    }
+
+-- | A list of vehicle attributes to associate with a signal.
+--
+-- Default: An empty array
+updateCampaign_dataExtraDimensions :: Lens.Lens' UpdateCampaign (Prelude.Maybe [Prelude.Text])
+updateCampaign_dataExtraDimensions = Lens.lens (\UpdateCampaign' {dataExtraDimensions} -> dataExtraDimensions) (\s@UpdateCampaign' {} a -> s {dataExtraDimensions = a} :: UpdateCampaign) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the campaign.
+updateCampaign_description :: Lens.Lens' UpdateCampaign (Prelude.Maybe Prelude.Text)
+updateCampaign_description = Lens.lens (\UpdateCampaign' {description} -> description) (\s@UpdateCampaign' {} a -> s {description = a} :: UpdateCampaign)
+
+-- | The name of the campaign to update.
+updateCampaign_name :: Lens.Lens' UpdateCampaign Prelude.Text
+updateCampaign_name = Lens.lens (\UpdateCampaign' {name} -> name) (\s@UpdateCampaign' {} a -> s {name = a} :: UpdateCampaign)
+
+-- | Specifies how to update a campaign. The action can be one of the
+-- following:
+--
+-- -   @APPROVE@ - To approve delivering a data collection scheme to
+--     vehicles.
+--
+-- -   @SUSPEND@ - To suspend collecting signal data.
+--
+-- -   @RESUME@ - To resume collecting signal data.
+--
+-- -   @UPDATE@ - To update a campaign.
+updateCampaign_action :: Lens.Lens' UpdateCampaign UpdateCampaignAction
+updateCampaign_action = Lens.lens (\UpdateCampaign' {action} -> action) (\s@UpdateCampaign' {} a -> s {action = a} :: UpdateCampaign)
+
+instance Core.AWSRequest UpdateCampaign where
+  type
+    AWSResponse UpdateCampaign =
+      UpdateCampaignResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateCampaignResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "name")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateCampaign where
+  hashWithSalt _salt UpdateCampaign' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataExtraDimensions
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` action
+
+instance Prelude.NFData UpdateCampaign where
+  rnf UpdateCampaign' {..} =
+    Prelude.rnf dataExtraDimensions
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf action
+
+instance Data.ToHeaders UpdateCampaign where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.UpdateCampaign" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCampaign where
+  toJSON UpdateCampaign' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dataExtraDimensions" Data..=)
+              Prelude.<$> dataExtraDimensions,
+            ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("action" Data..= action)
+          ]
+      )
+
+instance Data.ToPath UpdateCampaign where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateCampaign where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCampaignResponse' smart constructor.
+data UpdateCampaignResponse = UpdateCampaignResponse'
+  { -- | The Amazon Resource Name (ARN) of the campaign.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the updated campaign.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The state of a campaign. The status can be one of:
+    --
+    -- -   @CREATING@ - Amazon Web Services IoT FleetWise is processing your
+    --     request to create the campaign.
+    --
+    -- -   @WAITING_FOR_APPROVAL@ - After a campaign is created, it enters the
+    --     @WAITING_FOR_APPROVAL@ state. To allow Amazon Web Services IoT
+    --     FleetWise to deploy the campaign to the target vehicle or fleet, use
+    --     the API operation to approve the campaign.
+    --
+    -- -   @RUNNING@ - The campaign is active.
+    --
+    -- -   @SUSPENDED@ - The campaign is suspended. To resume the campaign, use
+    --     the API operation.
+    status :: Prelude.Maybe CampaignStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCampaignResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateCampaignResponse_arn' - The Amazon Resource Name (ARN) of the campaign.
+--
+-- 'name', 'updateCampaignResponse_name' - The name of the updated campaign.
+--
+-- 'status', 'updateCampaignResponse_status' - The state of a campaign. The status can be one of:
+--
+-- -   @CREATING@ - Amazon Web Services IoT FleetWise is processing your
+--     request to create the campaign.
+--
+-- -   @WAITING_FOR_APPROVAL@ - After a campaign is created, it enters the
+--     @WAITING_FOR_APPROVAL@ state. To allow Amazon Web Services IoT
+--     FleetWise to deploy the campaign to the target vehicle or fleet, use
+--     the API operation to approve the campaign.
+--
+-- -   @RUNNING@ - The campaign is active.
+--
+-- -   @SUSPENDED@ - The campaign is suspended. To resume the campaign, use
+--     the API operation.
+--
+-- 'httpStatus', 'updateCampaignResponse_httpStatus' - The response's http status code.
+newUpdateCampaignResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateCampaignResponse
+newUpdateCampaignResponse pHttpStatus_ =
+  UpdateCampaignResponse'
+    { arn = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the campaign.
+updateCampaignResponse_arn :: Lens.Lens' UpdateCampaignResponse (Prelude.Maybe Prelude.Text)
+updateCampaignResponse_arn = Lens.lens (\UpdateCampaignResponse' {arn} -> arn) (\s@UpdateCampaignResponse' {} a -> s {arn = a} :: UpdateCampaignResponse)
+
+-- | The name of the updated campaign.
+updateCampaignResponse_name :: Lens.Lens' UpdateCampaignResponse (Prelude.Maybe Prelude.Text)
+updateCampaignResponse_name = Lens.lens (\UpdateCampaignResponse' {name} -> name) (\s@UpdateCampaignResponse' {} a -> s {name = a} :: UpdateCampaignResponse)
+
+-- | The state of a campaign. The status can be one of:
+--
+-- -   @CREATING@ - Amazon Web Services IoT FleetWise is processing your
+--     request to create the campaign.
+--
+-- -   @WAITING_FOR_APPROVAL@ - After a campaign is created, it enters the
+--     @WAITING_FOR_APPROVAL@ state. To allow Amazon Web Services IoT
+--     FleetWise to deploy the campaign to the target vehicle or fleet, use
+--     the API operation to approve the campaign.
+--
+-- -   @RUNNING@ - The campaign is active.
+--
+-- -   @SUSPENDED@ - The campaign is suspended. To resume the campaign, use
+--     the API operation.
+updateCampaignResponse_status :: Lens.Lens' UpdateCampaignResponse (Prelude.Maybe CampaignStatus)
+updateCampaignResponse_status = Lens.lens (\UpdateCampaignResponse' {status} -> status) (\s@UpdateCampaignResponse' {} a -> s {status = a} :: UpdateCampaignResponse)
+
+-- | The response's http status code.
+updateCampaignResponse_httpStatus :: Lens.Lens' UpdateCampaignResponse Prelude.Int
+updateCampaignResponse_httpStatus = Lens.lens (\UpdateCampaignResponse' {httpStatus} -> httpStatus) (\s@UpdateCampaignResponse' {} a -> s {httpStatus = a} :: UpdateCampaignResponse)
+
+instance Prelude.NFData UpdateCampaignResponse where
+  rnf UpdateCampaignResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/UpdateDecoderManifest.hs b/gen/Amazonka/IoTFleetWise/UpdateDecoderManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/UpdateDecoderManifest.hs
@@ -0,0 +1,324 @@
+{-# 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.IoTFleetWise.UpdateDecoderManifest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a decoder manifest.
+--
+-- A decoder manifest can only be updated when the status is @DRAFT@. Only
+-- @ACTIVE@ decoder manifests can be associated with vehicles.
+module Amazonka.IoTFleetWise.UpdateDecoderManifest
+  ( -- * Creating a Request
+    UpdateDecoderManifest (..),
+    newUpdateDecoderManifest,
+
+    -- * Request Lenses
+    updateDecoderManifest_description,
+    updateDecoderManifest_networkInterfacesToAdd,
+    updateDecoderManifest_networkInterfacesToRemove,
+    updateDecoderManifest_networkInterfacesToUpdate,
+    updateDecoderManifest_signalDecodersToAdd,
+    updateDecoderManifest_signalDecodersToRemove,
+    updateDecoderManifest_signalDecodersToUpdate,
+    updateDecoderManifest_status,
+    updateDecoderManifest_name,
+
+    -- * Destructuring the Response
+    UpdateDecoderManifestResponse (..),
+    newUpdateDecoderManifestResponse,
+
+    -- * Response Lenses
+    updateDecoderManifestResponse_httpStatus,
+    updateDecoderManifestResponse_name,
+    updateDecoderManifestResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDecoderManifest' smart constructor.
+data UpdateDecoderManifest = UpdateDecoderManifest'
+  { -- | A brief description of the decoder manifest to update.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about the network interfaces to add to the decoder
+    -- manifest.
+    networkInterfacesToAdd :: Prelude.Maybe (Prelude.NonEmpty NetworkInterface),
+    -- | A list of network interfaces to remove from the decoder manifest.
+    networkInterfacesToRemove :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A list of information about the network interfaces to update in the
+    -- decoder manifest.
+    networkInterfacesToUpdate :: Prelude.Maybe (Prelude.NonEmpty NetworkInterface),
+    -- | A list of information about decoding additional signals to add to the
+    -- decoder manifest.
+    signalDecodersToAdd :: Prelude.Maybe (Prelude.NonEmpty SignalDecoder),
+    -- | A list of signal decoders to remove from the decoder manifest.
+    signalDecodersToRemove :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A list of updated information about decoding signals to update in the
+    -- decoder manifest.
+    signalDecodersToUpdate :: Prelude.Maybe (Prelude.NonEmpty SignalDecoder),
+    -- | The state of the decoder manifest. If the status is @ACTIVE@, the
+    -- decoder manifest can\'t be edited. If the status is @DRAFT@, you can
+    -- edit the decoder manifest.
+    status :: Prelude.Maybe ManifestStatus,
+    -- | The name of the decoder manifest to update.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDecoderManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDecoderManifest_description' - A brief description of the decoder manifest to update.
+--
+-- 'networkInterfacesToAdd', 'updateDecoderManifest_networkInterfacesToAdd' - A list of information about the network interfaces to add to the decoder
+-- manifest.
+--
+-- 'networkInterfacesToRemove', 'updateDecoderManifest_networkInterfacesToRemove' - A list of network interfaces to remove from the decoder manifest.
+--
+-- 'networkInterfacesToUpdate', 'updateDecoderManifest_networkInterfacesToUpdate' - A list of information about the network interfaces to update in the
+-- decoder manifest.
+--
+-- 'signalDecodersToAdd', 'updateDecoderManifest_signalDecodersToAdd' - A list of information about decoding additional signals to add to the
+-- decoder manifest.
+--
+-- 'signalDecodersToRemove', 'updateDecoderManifest_signalDecodersToRemove' - A list of signal decoders to remove from the decoder manifest.
+--
+-- 'signalDecodersToUpdate', 'updateDecoderManifest_signalDecodersToUpdate' - A list of updated information about decoding signals to update in the
+-- decoder manifest.
+--
+-- 'status', 'updateDecoderManifest_status' - The state of the decoder manifest. If the status is @ACTIVE@, the
+-- decoder manifest can\'t be edited. If the status is @DRAFT@, you can
+-- edit the decoder manifest.
+--
+-- 'name', 'updateDecoderManifest_name' - The name of the decoder manifest to update.
+newUpdateDecoderManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateDecoderManifest
+newUpdateDecoderManifest pName_ =
+  UpdateDecoderManifest'
+    { description =
+        Prelude.Nothing,
+      networkInterfacesToAdd = Prelude.Nothing,
+      networkInterfacesToRemove = Prelude.Nothing,
+      networkInterfacesToUpdate = Prelude.Nothing,
+      signalDecodersToAdd = Prelude.Nothing,
+      signalDecodersToRemove = Prelude.Nothing,
+      signalDecodersToUpdate = Prelude.Nothing,
+      status = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A brief description of the decoder manifest to update.
+updateDecoderManifest_description :: Lens.Lens' UpdateDecoderManifest (Prelude.Maybe Prelude.Text)
+updateDecoderManifest_description = Lens.lens (\UpdateDecoderManifest' {description} -> description) (\s@UpdateDecoderManifest' {} a -> s {description = a} :: UpdateDecoderManifest)
+
+-- | A list of information about the network interfaces to add to the decoder
+-- manifest.
+updateDecoderManifest_networkInterfacesToAdd :: Lens.Lens' UpdateDecoderManifest (Prelude.Maybe (Prelude.NonEmpty NetworkInterface))
+updateDecoderManifest_networkInterfacesToAdd = Lens.lens (\UpdateDecoderManifest' {networkInterfacesToAdd} -> networkInterfacesToAdd) (\s@UpdateDecoderManifest' {} a -> s {networkInterfacesToAdd = a} :: UpdateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of network interfaces to remove from the decoder manifest.
+updateDecoderManifest_networkInterfacesToRemove :: Lens.Lens' UpdateDecoderManifest (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateDecoderManifest_networkInterfacesToRemove = Lens.lens (\UpdateDecoderManifest' {networkInterfacesToRemove} -> networkInterfacesToRemove) (\s@UpdateDecoderManifest' {} a -> s {networkInterfacesToRemove = a} :: UpdateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of information about the network interfaces to update in the
+-- decoder manifest.
+updateDecoderManifest_networkInterfacesToUpdate :: Lens.Lens' UpdateDecoderManifest (Prelude.Maybe (Prelude.NonEmpty NetworkInterface))
+updateDecoderManifest_networkInterfacesToUpdate = Lens.lens (\UpdateDecoderManifest' {networkInterfacesToUpdate} -> networkInterfacesToUpdate) (\s@UpdateDecoderManifest' {} a -> s {networkInterfacesToUpdate = a} :: UpdateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of information about decoding additional signals to add to the
+-- decoder manifest.
+updateDecoderManifest_signalDecodersToAdd :: Lens.Lens' UpdateDecoderManifest (Prelude.Maybe (Prelude.NonEmpty SignalDecoder))
+updateDecoderManifest_signalDecodersToAdd = Lens.lens (\UpdateDecoderManifest' {signalDecodersToAdd} -> signalDecodersToAdd) (\s@UpdateDecoderManifest' {} a -> s {signalDecodersToAdd = a} :: UpdateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of signal decoders to remove from the decoder manifest.
+updateDecoderManifest_signalDecodersToRemove :: Lens.Lens' UpdateDecoderManifest (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateDecoderManifest_signalDecodersToRemove = Lens.lens (\UpdateDecoderManifest' {signalDecodersToRemove} -> signalDecodersToRemove) (\s@UpdateDecoderManifest' {} a -> s {signalDecodersToRemove = a} :: UpdateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of updated information about decoding signals to update in the
+-- decoder manifest.
+updateDecoderManifest_signalDecodersToUpdate :: Lens.Lens' UpdateDecoderManifest (Prelude.Maybe (Prelude.NonEmpty SignalDecoder))
+updateDecoderManifest_signalDecodersToUpdate = Lens.lens (\UpdateDecoderManifest' {signalDecodersToUpdate} -> signalDecodersToUpdate) (\s@UpdateDecoderManifest' {} a -> s {signalDecodersToUpdate = a} :: UpdateDecoderManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The state of the decoder manifest. If the status is @ACTIVE@, the
+-- decoder manifest can\'t be edited. If the status is @DRAFT@, you can
+-- edit the decoder manifest.
+updateDecoderManifest_status :: Lens.Lens' UpdateDecoderManifest (Prelude.Maybe ManifestStatus)
+updateDecoderManifest_status = Lens.lens (\UpdateDecoderManifest' {status} -> status) (\s@UpdateDecoderManifest' {} a -> s {status = a} :: UpdateDecoderManifest)
+
+-- | The name of the decoder manifest to update.
+updateDecoderManifest_name :: Lens.Lens' UpdateDecoderManifest Prelude.Text
+updateDecoderManifest_name = Lens.lens (\UpdateDecoderManifest' {name} -> name) (\s@UpdateDecoderManifest' {} a -> s {name = a} :: UpdateDecoderManifest)
+
+instance Core.AWSRequest UpdateDecoderManifest where
+  type
+    AWSResponse UpdateDecoderManifest =
+      UpdateDecoderManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDecoderManifestResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable UpdateDecoderManifest where
+  hashWithSalt _salt UpdateDecoderManifest' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` networkInterfacesToAdd
+      `Prelude.hashWithSalt` networkInterfacesToRemove
+      `Prelude.hashWithSalt` networkInterfacesToUpdate
+      `Prelude.hashWithSalt` signalDecodersToAdd
+      `Prelude.hashWithSalt` signalDecodersToRemove
+      `Prelude.hashWithSalt` signalDecodersToUpdate
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateDecoderManifest where
+  rnf UpdateDecoderManifest' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf networkInterfacesToAdd
+      `Prelude.seq` Prelude.rnf networkInterfacesToRemove
+      `Prelude.seq` Prelude.rnf networkInterfacesToUpdate
+      `Prelude.seq` Prelude.rnf signalDecodersToAdd
+      `Prelude.seq` Prelude.rnf signalDecodersToRemove
+      `Prelude.seq` Prelude.rnf signalDecodersToUpdate
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateDecoderManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.UpdateDecoderManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDecoderManifest where
+  toJSON UpdateDecoderManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("networkInterfacesToAdd" Data..=)
+              Prelude.<$> networkInterfacesToAdd,
+            ("networkInterfacesToRemove" Data..=)
+              Prelude.<$> networkInterfacesToRemove,
+            ("networkInterfacesToUpdate" Data..=)
+              Prelude.<$> networkInterfacesToUpdate,
+            ("signalDecodersToAdd" Data..=)
+              Prelude.<$> signalDecodersToAdd,
+            ("signalDecodersToRemove" Data..=)
+              Prelude.<$> signalDecodersToRemove,
+            ("signalDecodersToUpdate" Data..=)
+              Prelude.<$> signalDecodersToUpdate,
+            ("status" Data..=) Prelude.<$> status,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath UpdateDecoderManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateDecoderManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDecoderManifestResponse' smart constructor.
+data UpdateDecoderManifestResponse = UpdateDecoderManifestResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the updated decoder manifest.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the updated decoder manifest.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDecoderManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDecoderManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateDecoderManifestResponse_name' - The name of the updated decoder manifest.
+--
+-- 'arn', 'updateDecoderManifestResponse_arn' - The Amazon Resource Name (ARN) of the updated decoder manifest.
+newUpdateDecoderManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  UpdateDecoderManifestResponse
+newUpdateDecoderManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    UpdateDecoderManifestResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+updateDecoderManifestResponse_httpStatus :: Lens.Lens' UpdateDecoderManifestResponse Prelude.Int
+updateDecoderManifestResponse_httpStatus = Lens.lens (\UpdateDecoderManifestResponse' {httpStatus} -> httpStatus) (\s@UpdateDecoderManifestResponse' {} a -> s {httpStatus = a} :: UpdateDecoderManifestResponse)
+
+-- | The name of the updated decoder manifest.
+updateDecoderManifestResponse_name :: Lens.Lens' UpdateDecoderManifestResponse Prelude.Text
+updateDecoderManifestResponse_name = Lens.lens (\UpdateDecoderManifestResponse' {name} -> name) (\s@UpdateDecoderManifestResponse' {} a -> s {name = a} :: UpdateDecoderManifestResponse)
+
+-- | The Amazon Resource Name (ARN) of the updated decoder manifest.
+updateDecoderManifestResponse_arn :: Lens.Lens' UpdateDecoderManifestResponse Prelude.Text
+updateDecoderManifestResponse_arn = Lens.lens (\UpdateDecoderManifestResponse' {arn} -> arn) (\s@UpdateDecoderManifestResponse' {} a -> s {arn = a} :: UpdateDecoderManifestResponse)
+
+instance Prelude.NFData UpdateDecoderManifestResponse where
+  rnf UpdateDecoderManifestResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/UpdateFleet.hs b/gen/Amazonka/IoTFleetWise/UpdateFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/UpdateFleet.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.IoTFleetWise.UpdateFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the description of an existing fleet.
+--
+-- If the fleet is successfully updated, Amazon Web Services IoT FleetWise
+-- sends back an HTTP 200 response with an empty HTTP body.
+module Amazonka.IoTFleetWise.UpdateFleet
+  ( -- * Creating a Request
+    UpdateFleet (..),
+    newUpdateFleet,
+
+    -- * Request Lenses
+    updateFleet_description,
+    updateFleet_fleetId,
+
+    -- * Destructuring the Response
+    UpdateFleetResponse (..),
+    newUpdateFleetResponse,
+
+    -- * Response Lenses
+    updateFleetResponse_arn,
+    updateFleetResponse_id,
+    updateFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateFleet' smart constructor.
+data UpdateFleet = UpdateFleet'
+  { -- | An updated description of the fleet.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the fleet to update.
+    fleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateFleet_description' - An updated description of the fleet.
+--
+-- 'fleetId', 'updateFleet_fleetId' - The ID of the fleet to update.
+newUpdateFleet ::
+  -- | 'fleetId'
+  Prelude.Text ->
+  UpdateFleet
+newUpdateFleet pFleetId_ =
+  UpdateFleet'
+    { description = Prelude.Nothing,
+      fleetId = pFleetId_
+    }
+
+-- | An updated description of the fleet.
+updateFleet_description :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Text)
+updateFleet_description = Lens.lens (\UpdateFleet' {description} -> description) (\s@UpdateFleet' {} a -> s {description = a} :: UpdateFleet)
+
+-- | The ID of the fleet to update.
+updateFleet_fleetId :: Lens.Lens' UpdateFleet Prelude.Text
+updateFleet_fleetId = Lens.lens (\UpdateFleet' {fleetId} -> fleetId) (\s@UpdateFleet' {} a -> s {fleetId = a} :: UpdateFleet)
+
+instance Core.AWSRequest UpdateFleet where
+  type AWSResponse UpdateFleet = UpdateFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFleetResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "id")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFleet where
+  hashWithSalt _salt UpdateFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData UpdateFleet where
+  rnf UpdateFleet' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf fleetId
+
+instance Data.ToHeaders UpdateFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.UpdateFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateFleet where
+  toJSON UpdateFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("fleetId" Data..= fleetId)
+          ]
+      )
+
+instance Data.ToPath UpdateFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFleetResponse' smart constructor.
+data UpdateFleetResponse = UpdateFleetResponse'
+  { -- | The Amazon Resource Name (ARN) of the updated fleet.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the updated fleet.
+    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 'UpdateFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateFleetResponse_arn' - The Amazon Resource Name (ARN) of the updated fleet.
+--
+-- 'id', 'updateFleetResponse_id' - The ID of the updated fleet.
+--
+-- 'httpStatus', 'updateFleetResponse_httpStatus' - The response's http status code.
+newUpdateFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFleetResponse
+newUpdateFleetResponse pHttpStatus_ =
+  UpdateFleetResponse'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the updated fleet.
+updateFleetResponse_arn :: Lens.Lens' UpdateFleetResponse (Prelude.Maybe Prelude.Text)
+updateFleetResponse_arn = Lens.lens (\UpdateFleetResponse' {arn} -> arn) (\s@UpdateFleetResponse' {} a -> s {arn = a} :: UpdateFleetResponse)
+
+-- | The ID of the updated fleet.
+updateFleetResponse_id :: Lens.Lens' UpdateFleetResponse (Prelude.Maybe Prelude.Text)
+updateFleetResponse_id = Lens.lens (\UpdateFleetResponse' {id} -> id) (\s@UpdateFleetResponse' {} a -> s {id = a} :: UpdateFleetResponse)
+
+-- | The response's http status code.
+updateFleetResponse_httpStatus :: Lens.Lens' UpdateFleetResponse Prelude.Int
+updateFleetResponse_httpStatus = Lens.lens (\UpdateFleetResponse' {httpStatus} -> httpStatus) (\s@UpdateFleetResponse' {} a -> s {httpStatus = a} :: UpdateFleetResponse)
+
+instance Prelude.NFData UpdateFleetResponse where
+  rnf UpdateFleetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/UpdateModelManifest.hs b/gen/Amazonka/IoTFleetWise/UpdateModelManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/UpdateModelManifest.hs
@@ -0,0 +1,257 @@
+{-# 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.IoTFleetWise.UpdateModelManifest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a vehicle model (model manifest). If created vehicles are
+-- associated with a vehicle model, it can\'t be updated.
+module Amazonka.IoTFleetWise.UpdateModelManifest
+  ( -- * Creating a Request
+    UpdateModelManifest (..),
+    newUpdateModelManifest,
+
+    -- * Request Lenses
+    updateModelManifest_description,
+    updateModelManifest_nodesToAdd,
+    updateModelManifest_nodesToRemove,
+    updateModelManifest_status,
+    updateModelManifest_name,
+
+    -- * Destructuring the Response
+    UpdateModelManifestResponse (..),
+    newUpdateModelManifestResponse,
+
+    -- * Response Lenses
+    updateModelManifestResponse_httpStatus,
+    updateModelManifestResponse_name,
+    updateModelManifestResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateModelManifest' smart constructor.
+data UpdateModelManifest = UpdateModelManifest'
+  { -- | A brief description of the vehicle model.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A list of @fullyQualifiedName@ of nodes, which are a general abstraction
+    -- of signals, to add to the vehicle model.
+    nodesToAdd :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A list of @fullyQualifiedName@ of nodes, which are a general abstraction
+    -- of signals, to remove from the vehicle model.
+    nodesToRemove :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+    -- model can\'t be edited. If the status is @DRAFT@, you can edit the
+    -- vehicle model.
+    status :: Prelude.Maybe ManifestStatus,
+    -- | The name of the vehicle model to update.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateModelManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateModelManifest_description' - A brief description of the vehicle model.
+--
+-- 'nodesToAdd', 'updateModelManifest_nodesToAdd' - A list of @fullyQualifiedName@ of nodes, which are a general abstraction
+-- of signals, to add to the vehicle model.
+--
+-- 'nodesToRemove', 'updateModelManifest_nodesToRemove' - A list of @fullyQualifiedName@ of nodes, which are a general abstraction
+-- of signals, to remove from the vehicle model.
+--
+-- 'status', 'updateModelManifest_status' - The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+-- model can\'t be edited. If the status is @DRAFT@, you can edit the
+-- vehicle model.
+--
+-- 'name', 'updateModelManifest_name' - The name of the vehicle model to update.
+newUpdateModelManifest ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateModelManifest
+newUpdateModelManifest pName_ =
+  UpdateModelManifest'
+    { description = Prelude.Nothing,
+      nodesToAdd = Prelude.Nothing,
+      nodesToRemove = Prelude.Nothing,
+      status = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A brief description of the vehicle model.
+updateModelManifest_description :: Lens.Lens' UpdateModelManifest (Prelude.Maybe Prelude.Text)
+updateModelManifest_description = Lens.lens (\UpdateModelManifest' {description} -> description) (\s@UpdateModelManifest' {} a -> s {description = a} :: UpdateModelManifest)
+
+-- | A list of @fullyQualifiedName@ of nodes, which are a general abstraction
+-- of signals, to add to the vehicle model.
+updateModelManifest_nodesToAdd :: Lens.Lens' UpdateModelManifest (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateModelManifest_nodesToAdd = Lens.lens (\UpdateModelManifest' {nodesToAdd} -> nodesToAdd) (\s@UpdateModelManifest' {} a -> s {nodesToAdd = a} :: UpdateModelManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @fullyQualifiedName@ of nodes, which are a general abstraction
+-- of signals, to remove from the vehicle model.
+updateModelManifest_nodesToRemove :: Lens.Lens' UpdateModelManifest (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateModelManifest_nodesToRemove = Lens.lens (\UpdateModelManifest' {nodesToRemove} -> nodesToRemove) (\s@UpdateModelManifest' {} a -> s {nodesToRemove = a} :: UpdateModelManifest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The state of the vehicle model. If the status is @ACTIVE@, the vehicle
+-- model can\'t be edited. If the status is @DRAFT@, you can edit the
+-- vehicle model.
+updateModelManifest_status :: Lens.Lens' UpdateModelManifest (Prelude.Maybe ManifestStatus)
+updateModelManifest_status = Lens.lens (\UpdateModelManifest' {status} -> status) (\s@UpdateModelManifest' {} a -> s {status = a} :: UpdateModelManifest)
+
+-- | The name of the vehicle model to update.
+updateModelManifest_name :: Lens.Lens' UpdateModelManifest Prelude.Text
+updateModelManifest_name = Lens.lens (\UpdateModelManifest' {name} -> name) (\s@UpdateModelManifest' {} a -> s {name = a} :: UpdateModelManifest)
+
+instance Core.AWSRequest UpdateModelManifest where
+  type
+    AWSResponse UpdateModelManifest =
+      UpdateModelManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateModelManifestResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable UpdateModelManifest where
+  hashWithSalt _salt UpdateModelManifest' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` nodesToAdd
+      `Prelude.hashWithSalt` nodesToRemove
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateModelManifest where
+  rnf UpdateModelManifest' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf nodesToAdd
+      `Prelude.seq` Prelude.rnf nodesToRemove
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateModelManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.UpdateModelManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateModelManifest where
+  toJSON UpdateModelManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("nodesToAdd" Data..=) Prelude.<$> nodesToAdd,
+            ("nodesToRemove" Data..=) Prelude.<$> nodesToRemove,
+            ("status" Data..=) Prelude.<$> status,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath UpdateModelManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateModelManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateModelManifestResponse' smart constructor.
+data UpdateModelManifestResponse = UpdateModelManifestResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the updated vehicle model.
+    name :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the updated vehicle model.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateModelManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateModelManifestResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateModelManifestResponse_name' - The name of the updated vehicle model.
+--
+-- 'arn', 'updateModelManifestResponse_arn' - The Amazon Resource Name (ARN) of the updated vehicle model.
+newUpdateModelManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  UpdateModelManifestResponse
+newUpdateModelManifestResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    UpdateModelManifestResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+updateModelManifestResponse_httpStatus :: Lens.Lens' UpdateModelManifestResponse Prelude.Int
+updateModelManifestResponse_httpStatus = Lens.lens (\UpdateModelManifestResponse' {httpStatus} -> httpStatus) (\s@UpdateModelManifestResponse' {} a -> s {httpStatus = a} :: UpdateModelManifestResponse)
+
+-- | The name of the updated vehicle model.
+updateModelManifestResponse_name :: Lens.Lens' UpdateModelManifestResponse Prelude.Text
+updateModelManifestResponse_name = Lens.lens (\UpdateModelManifestResponse' {name} -> name) (\s@UpdateModelManifestResponse' {} a -> s {name = a} :: UpdateModelManifestResponse)
+
+-- | The Amazon Resource Name (ARN) of the updated vehicle model.
+updateModelManifestResponse_arn :: Lens.Lens' UpdateModelManifestResponse Prelude.Text
+updateModelManifestResponse_arn = Lens.lens (\UpdateModelManifestResponse' {arn} -> arn) (\s@UpdateModelManifestResponse' {} a -> s {arn = a} :: UpdateModelManifestResponse)
+
+instance Prelude.NFData UpdateModelManifestResponse where
+  rnf UpdateModelManifestResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/UpdateSignalCatalog.hs b/gen/Amazonka/IoTFleetWise/UpdateSignalCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/UpdateSignalCatalog.hs
@@ -0,0 +1,247 @@
+{-# 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.IoTFleetWise.UpdateSignalCatalog
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a signal catalog.
+module Amazonka.IoTFleetWise.UpdateSignalCatalog
+  ( -- * Creating a Request
+    UpdateSignalCatalog (..),
+    newUpdateSignalCatalog,
+
+    -- * Request Lenses
+    updateSignalCatalog_description,
+    updateSignalCatalog_nodesToAdd,
+    updateSignalCatalog_nodesToRemove,
+    updateSignalCatalog_nodesToUpdate,
+    updateSignalCatalog_name,
+
+    -- * Destructuring the Response
+    UpdateSignalCatalogResponse (..),
+    newUpdateSignalCatalogResponse,
+
+    -- * Response Lenses
+    updateSignalCatalogResponse_httpStatus,
+    updateSignalCatalogResponse_name,
+    updateSignalCatalogResponse_arn,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSignalCatalog' smart constructor.
+data UpdateSignalCatalog = UpdateSignalCatalog'
+  { -- | A brief description of the signal catalog to update.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A list of information about nodes to add to the signal catalog.
+    nodesToAdd :: Prelude.Maybe [Node],
+    -- | A list of @fullyQualifiedName@ of nodes to remove from the signal
+    -- catalog.
+    nodesToRemove :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A list of information about nodes to update in the signal catalog.
+    nodesToUpdate :: Prelude.Maybe [Node],
+    -- | The name of the signal catalog to update.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSignalCatalog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateSignalCatalog_description' - A brief description of the signal catalog to update.
+--
+-- 'nodesToAdd', 'updateSignalCatalog_nodesToAdd' - A list of information about nodes to add to the signal catalog.
+--
+-- 'nodesToRemove', 'updateSignalCatalog_nodesToRemove' - A list of @fullyQualifiedName@ of nodes to remove from the signal
+-- catalog.
+--
+-- 'nodesToUpdate', 'updateSignalCatalog_nodesToUpdate' - A list of information about nodes to update in the signal catalog.
+--
+-- 'name', 'updateSignalCatalog_name' - The name of the signal catalog to update.
+newUpdateSignalCatalog ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateSignalCatalog
+newUpdateSignalCatalog pName_ =
+  UpdateSignalCatalog'
+    { description = Prelude.Nothing,
+      nodesToAdd = Prelude.Nothing,
+      nodesToRemove = Prelude.Nothing,
+      nodesToUpdate = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | A brief description of the signal catalog to update.
+updateSignalCatalog_description :: Lens.Lens' UpdateSignalCatalog (Prelude.Maybe Prelude.Text)
+updateSignalCatalog_description = Lens.lens (\UpdateSignalCatalog' {description} -> description) (\s@UpdateSignalCatalog' {} a -> s {description = a} :: UpdateSignalCatalog)
+
+-- | A list of information about nodes to add to the signal catalog.
+updateSignalCatalog_nodesToAdd :: Lens.Lens' UpdateSignalCatalog (Prelude.Maybe [Node])
+updateSignalCatalog_nodesToAdd = Lens.lens (\UpdateSignalCatalog' {nodesToAdd} -> nodesToAdd) (\s@UpdateSignalCatalog' {} a -> s {nodesToAdd = a} :: UpdateSignalCatalog) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of @fullyQualifiedName@ of nodes to remove from the signal
+-- catalog.
+updateSignalCatalog_nodesToRemove :: Lens.Lens' UpdateSignalCatalog (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateSignalCatalog_nodesToRemove = Lens.lens (\UpdateSignalCatalog' {nodesToRemove} -> nodesToRemove) (\s@UpdateSignalCatalog' {} a -> s {nodesToRemove = a} :: UpdateSignalCatalog) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of information about nodes to update in the signal catalog.
+updateSignalCatalog_nodesToUpdate :: Lens.Lens' UpdateSignalCatalog (Prelude.Maybe [Node])
+updateSignalCatalog_nodesToUpdate = Lens.lens (\UpdateSignalCatalog' {nodesToUpdate} -> nodesToUpdate) (\s@UpdateSignalCatalog' {} a -> s {nodesToUpdate = a} :: UpdateSignalCatalog) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the signal catalog to update.
+updateSignalCatalog_name :: Lens.Lens' UpdateSignalCatalog Prelude.Text
+updateSignalCatalog_name = Lens.lens (\UpdateSignalCatalog' {name} -> name) (\s@UpdateSignalCatalog' {} a -> s {name = a} :: UpdateSignalCatalog)
+
+instance Core.AWSRequest UpdateSignalCatalog where
+  type
+    AWSResponse UpdateSignalCatalog =
+      UpdateSignalCatalogResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSignalCatalogResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "name")
+            Prelude.<*> (x Data..:> "arn")
+      )
+
+instance Prelude.Hashable UpdateSignalCatalog where
+  hashWithSalt _salt UpdateSignalCatalog' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` nodesToAdd
+      `Prelude.hashWithSalt` nodesToRemove
+      `Prelude.hashWithSalt` nodesToUpdate
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateSignalCatalog where
+  rnf UpdateSignalCatalog' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf nodesToAdd
+      `Prelude.seq` Prelude.rnf nodesToRemove
+      `Prelude.seq` Prelude.rnf nodesToUpdate
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateSignalCatalog where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.UpdateSignalCatalog" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSignalCatalog where
+  toJSON UpdateSignalCatalog' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("nodesToAdd" Data..=) Prelude.<$> nodesToAdd,
+            ("nodesToRemove" Data..=) Prelude.<$> nodesToRemove,
+            ("nodesToUpdate" Data..=) Prelude.<$> nodesToUpdate,
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath UpdateSignalCatalog where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateSignalCatalog where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSignalCatalogResponse' smart constructor.
+data UpdateSignalCatalogResponse = UpdateSignalCatalogResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the updated signal catalog.
+    name :: Prelude.Text,
+    -- | The ARN of the updated signal catalog.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSignalCatalogResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateSignalCatalogResponse_httpStatus' - The response's http status code.
+--
+-- 'name', 'updateSignalCatalogResponse_name' - The name of the updated signal catalog.
+--
+-- 'arn', 'updateSignalCatalogResponse_arn' - The ARN of the updated signal catalog.
+newUpdateSignalCatalogResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  UpdateSignalCatalogResponse
+newUpdateSignalCatalogResponse
+  pHttpStatus_
+  pName_
+  pArn_ =
+    UpdateSignalCatalogResponse'
+      { httpStatus =
+          pHttpStatus_,
+        name = pName_,
+        arn = pArn_
+      }
+
+-- | The response's http status code.
+updateSignalCatalogResponse_httpStatus :: Lens.Lens' UpdateSignalCatalogResponse Prelude.Int
+updateSignalCatalogResponse_httpStatus = Lens.lens (\UpdateSignalCatalogResponse' {httpStatus} -> httpStatus) (\s@UpdateSignalCatalogResponse' {} a -> s {httpStatus = a} :: UpdateSignalCatalogResponse)
+
+-- | The name of the updated signal catalog.
+updateSignalCatalogResponse_name :: Lens.Lens' UpdateSignalCatalogResponse Prelude.Text
+updateSignalCatalogResponse_name = Lens.lens (\UpdateSignalCatalogResponse' {name} -> name) (\s@UpdateSignalCatalogResponse' {} a -> s {name = a} :: UpdateSignalCatalogResponse)
+
+-- | The ARN of the updated signal catalog.
+updateSignalCatalogResponse_arn :: Lens.Lens' UpdateSignalCatalogResponse Prelude.Text
+updateSignalCatalogResponse_arn = Lens.lens (\UpdateSignalCatalogResponse' {arn} -> arn) (\s@UpdateSignalCatalogResponse' {} a -> s {arn = a} :: UpdateSignalCatalogResponse)
+
+instance Prelude.NFData UpdateSignalCatalogResponse where
+  rnf UpdateSignalCatalogResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
diff --git a/gen/Amazonka/IoTFleetWise/UpdateVehicle.hs b/gen/Amazonka/IoTFleetWise/UpdateVehicle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/UpdateVehicle.hs
@@ -0,0 +1,258 @@
+{-# 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.IoTFleetWise.UpdateVehicle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a vehicle.
+module Amazonka.IoTFleetWise.UpdateVehicle
+  ( -- * Creating a Request
+    UpdateVehicle (..),
+    newUpdateVehicle,
+
+    -- * Request Lenses
+    updateVehicle_attributeUpdateMode,
+    updateVehicle_attributes,
+    updateVehicle_decoderManifestArn,
+    updateVehicle_modelManifestArn,
+    updateVehicle_vehicleName,
+
+    -- * Destructuring the Response
+    UpdateVehicleResponse (..),
+    newUpdateVehicleResponse,
+
+    -- * Response Lenses
+    updateVehicleResponse_arn,
+    updateVehicleResponse_vehicleName,
+    updateVehicleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateVehicle' smart constructor.
+data UpdateVehicle = UpdateVehicle'
+  { -- | The method the specified attributes will update the existing attributes
+    -- on the vehicle. Use@Overwite@ to replace the vehicle attributes with the
+    -- specified attributes. Or use @Merge@ to combine all attributes.
+    --
+    -- This is required if attributes are present in the input.
+    attributeUpdateMode :: Prelude.Maybe UpdateMode,
+    -- | Static information about a vehicle in a key-value pair. For example:
+    --
+    -- @\"engineType\"@ : @\"1.3 L R2\"@
+    attributes :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The ARN of the decoder manifest associated with this vehicle.
+    decoderManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a vehicle model (model manifest) associated with the vehicle.
+    modelManifestArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the vehicle to update.
+    vehicleName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVehicle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeUpdateMode', 'updateVehicle_attributeUpdateMode' - The method the specified attributes will update the existing attributes
+-- on the vehicle. Use@Overwite@ to replace the vehicle attributes with the
+-- specified attributes. Or use @Merge@ to combine all attributes.
+--
+-- This is required if attributes are present in the input.
+--
+-- 'attributes', 'updateVehicle_attributes' - Static information about a vehicle in a key-value pair. For example:
+--
+-- @\"engineType\"@ : @\"1.3 L R2\"@
+--
+-- 'decoderManifestArn', 'updateVehicle_decoderManifestArn' - The ARN of the decoder manifest associated with this vehicle.
+--
+-- 'modelManifestArn', 'updateVehicle_modelManifestArn' - The ARN of a vehicle model (model manifest) associated with the vehicle.
+--
+-- 'vehicleName', 'updateVehicle_vehicleName' - The unique ID of the vehicle to update.
+newUpdateVehicle ::
+  -- | 'vehicleName'
+  Prelude.Text ->
+  UpdateVehicle
+newUpdateVehicle pVehicleName_ =
+  UpdateVehicle'
+    { attributeUpdateMode =
+        Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      decoderManifestArn = Prelude.Nothing,
+      modelManifestArn = Prelude.Nothing,
+      vehicleName = pVehicleName_
+    }
+
+-- | The method the specified attributes will update the existing attributes
+-- on the vehicle. Use@Overwite@ to replace the vehicle attributes with the
+-- specified attributes. Or use @Merge@ to combine all attributes.
+--
+-- This is required if attributes are present in the input.
+updateVehicle_attributeUpdateMode :: Lens.Lens' UpdateVehicle (Prelude.Maybe UpdateMode)
+updateVehicle_attributeUpdateMode = Lens.lens (\UpdateVehicle' {attributeUpdateMode} -> attributeUpdateMode) (\s@UpdateVehicle' {} a -> s {attributeUpdateMode = a} :: UpdateVehicle)
+
+-- | Static information about a vehicle in a key-value pair. For example:
+--
+-- @\"engineType\"@ : @\"1.3 L R2\"@
+updateVehicle_attributes :: Lens.Lens' UpdateVehicle (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+updateVehicle_attributes = Lens.lens (\UpdateVehicle' {attributes} -> attributes) (\s@UpdateVehicle' {} a -> s {attributes = a} :: UpdateVehicle) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the decoder manifest associated with this vehicle.
+updateVehicle_decoderManifestArn :: Lens.Lens' UpdateVehicle (Prelude.Maybe Prelude.Text)
+updateVehicle_decoderManifestArn = Lens.lens (\UpdateVehicle' {decoderManifestArn} -> decoderManifestArn) (\s@UpdateVehicle' {} a -> s {decoderManifestArn = a} :: UpdateVehicle)
+
+-- | The ARN of a vehicle model (model manifest) associated with the vehicle.
+updateVehicle_modelManifestArn :: Lens.Lens' UpdateVehicle (Prelude.Maybe Prelude.Text)
+updateVehicle_modelManifestArn = Lens.lens (\UpdateVehicle' {modelManifestArn} -> modelManifestArn) (\s@UpdateVehicle' {} a -> s {modelManifestArn = a} :: UpdateVehicle)
+
+-- | The unique ID of the vehicle to update.
+updateVehicle_vehicleName :: Lens.Lens' UpdateVehicle Prelude.Text
+updateVehicle_vehicleName = Lens.lens (\UpdateVehicle' {vehicleName} -> vehicleName) (\s@UpdateVehicle' {} a -> s {vehicleName = a} :: UpdateVehicle)
+
+instance Core.AWSRequest UpdateVehicle where
+  type
+    AWSResponse UpdateVehicle =
+      UpdateVehicleResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateVehicleResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "vehicleName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateVehicle where
+  hashWithSalt _salt UpdateVehicle' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeUpdateMode
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` decoderManifestArn
+      `Prelude.hashWithSalt` modelManifestArn
+      `Prelude.hashWithSalt` vehicleName
+
+instance Prelude.NFData UpdateVehicle where
+  rnf UpdateVehicle' {..} =
+    Prelude.rnf attributeUpdateMode
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf decoderManifestArn
+      `Prelude.seq` Prelude.rnf modelManifestArn
+      `Prelude.seq` Prelude.rnf vehicleName
+
+instance Data.ToHeaders UpdateVehicle where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "IoTAutobahnControlPlane.UpdateVehicle" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateVehicle where
+  toJSON UpdateVehicle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("attributeUpdateMode" Data..=)
+              Prelude.<$> attributeUpdateMode,
+            ("attributes" Data..=) Prelude.<$> attributes,
+            ("decoderManifestArn" Data..=)
+              Prelude.<$> decoderManifestArn,
+            ("modelManifestArn" Data..=)
+              Prelude.<$> modelManifestArn,
+            Prelude.Just ("vehicleName" Data..= vehicleName)
+          ]
+      )
+
+instance Data.ToPath UpdateVehicle where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateVehicle where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateVehicleResponse' smart constructor.
+data UpdateVehicleResponse = UpdateVehicleResponse'
+  { -- | The ARN of the updated vehicle.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the updated vehicle.
+    vehicleName :: 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 'UpdateVehicleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateVehicleResponse_arn' - The ARN of the updated vehicle.
+--
+-- 'vehicleName', 'updateVehicleResponse_vehicleName' - The ID of the updated vehicle.
+--
+-- 'httpStatus', 'updateVehicleResponse_httpStatus' - The response's http status code.
+newUpdateVehicleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateVehicleResponse
+newUpdateVehicleResponse pHttpStatus_ =
+  UpdateVehicleResponse'
+    { arn = Prelude.Nothing,
+      vehicleName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN of the updated vehicle.
+updateVehicleResponse_arn :: Lens.Lens' UpdateVehicleResponse (Prelude.Maybe Prelude.Text)
+updateVehicleResponse_arn = Lens.lens (\UpdateVehicleResponse' {arn} -> arn) (\s@UpdateVehicleResponse' {} a -> s {arn = a} :: UpdateVehicleResponse)
+
+-- | The ID of the updated vehicle.
+updateVehicleResponse_vehicleName :: Lens.Lens' UpdateVehicleResponse (Prelude.Maybe Prelude.Text)
+updateVehicleResponse_vehicleName = Lens.lens (\UpdateVehicleResponse' {vehicleName} -> vehicleName) (\s@UpdateVehicleResponse' {} a -> s {vehicleName = a} :: UpdateVehicleResponse)
+
+-- | The response's http status code.
+updateVehicleResponse_httpStatus :: Lens.Lens' UpdateVehicleResponse Prelude.Int
+updateVehicleResponse_httpStatus = Lens.lens (\UpdateVehicleResponse' {httpStatus} -> httpStatus) (\s@UpdateVehicleResponse' {} a -> s {httpStatus = a} :: UpdateVehicleResponse)
+
+instance Prelude.NFData UpdateVehicleResponse where
+  rnf UpdateVehicleResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf vehicleName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/IoTFleetWise/Waiters.hs b/gen/Amazonka/IoTFleetWise/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/IoTFleetWise/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.IoTFleetWise.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.IoTFleetWise.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.IoTFleetWise.Lens
+import Amazonka.IoTFleetWise.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.IoTFleetWise
+import Test.Amazonka.IoTFleetWise.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "IoTFleetWise"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/IoTFleetWise.hs b/test/Test/Amazonka/Gen/IoTFleetWise.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/IoTFleetWise.hs
@@ -0,0 +1,1038 @@
+{-# 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.IoTFleetWise
+-- 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.IoTFleetWise where
+
+import Amazonka.IoTFleetWise
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.IoTFleetWise.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"
+--         [ requestAssociateVehicleFleet $
+--             newAssociateVehicleFleet
+--
+--         , requestBatchCreateVehicle $
+--             newBatchCreateVehicle
+--
+--         , requestBatchUpdateVehicle $
+--             newBatchUpdateVehicle
+--
+--         , requestCreateCampaign $
+--             newCreateCampaign
+--
+--         , requestCreateDecoderManifest $
+--             newCreateDecoderManifest
+--
+--         , requestCreateFleet $
+--             newCreateFleet
+--
+--         , requestCreateModelManifest $
+--             newCreateModelManifest
+--
+--         , requestCreateSignalCatalog $
+--             newCreateSignalCatalog
+--
+--         , requestCreateVehicle $
+--             newCreateVehicle
+--
+--         , requestDeleteCampaign $
+--             newDeleteCampaign
+--
+--         , requestDeleteDecoderManifest $
+--             newDeleteDecoderManifest
+--
+--         , requestDeleteFleet $
+--             newDeleteFleet
+--
+--         , requestDeleteModelManifest $
+--             newDeleteModelManifest
+--
+--         , requestDeleteSignalCatalog $
+--             newDeleteSignalCatalog
+--
+--         , requestDeleteVehicle $
+--             newDeleteVehicle
+--
+--         , requestDisassociateVehicleFleet $
+--             newDisassociateVehicleFleet
+--
+--         , requestGetCampaign $
+--             newGetCampaign
+--
+--         , requestGetDecoderManifest $
+--             newGetDecoderManifest
+--
+--         , requestGetFleet $
+--             newGetFleet
+--
+--         , requestGetLoggingOptions $
+--             newGetLoggingOptions
+--
+--         , requestGetModelManifest $
+--             newGetModelManifest
+--
+--         , requestGetRegisterAccountStatus $
+--             newGetRegisterAccountStatus
+--
+--         , requestGetSignalCatalog $
+--             newGetSignalCatalog
+--
+--         , requestGetVehicle $
+--             newGetVehicle
+--
+--         , requestGetVehicleStatus $
+--             newGetVehicleStatus
+--
+--         , requestImportDecoderManifest $
+--             newImportDecoderManifest
+--
+--         , requestImportSignalCatalog $
+--             newImportSignalCatalog
+--
+--         , requestListCampaigns $
+--             newListCampaigns
+--
+--         , requestListDecoderManifestNetworkInterfaces $
+--             newListDecoderManifestNetworkInterfaces
+--
+--         , requestListDecoderManifestSignals $
+--             newListDecoderManifestSignals
+--
+--         , requestListDecoderManifests $
+--             newListDecoderManifests
+--
+--         , requestListFleets $
+--             newListFleets
+--
+--         , requestListFleetsForVehicle $
+--             newListFleetsForVehicle
+--
+--         , requestListModelManifestNodes $
+--             newListModelManifestNodes
+--
+--         , requestListModelManifests $
+--             newListModelManifests
+--
+--         , requestListSignalCatalogNodes $
+--             newListSignalCatalogNodes
+--
+--         , requestListSignalCatalogs $
+--             newListSignalCatalogs
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListVehicles $
+--             newListVehicles
+--
+--         , requestListVehiclesInFleet $
+--             newListVehiclesInFleet
+--
+--         , requestPutLoggingOptions $
+--             newPutLoggingOptions
+--
+--         , requestRegisterAccount $
+--             newRegisterAccount
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateCampaign $
+--             newUpdateCampaign
+--
+--         , requestUpdateDecoderManifest $
+--             newUpdateDecoderManifest
+--
+--         , requestUpdateFleet $
+--             newUpdateFleet
+--
+--         , requestUpdateModelManifest $
+--             newUpdateModelManifest
+--
+--         , requestUpdateSignalCatalog $
+--             newUpdateSignalCatalog
+--
+--         , requestUpdateVehicle $
+--             newUpdateVehicle
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateVehicleFleet $
+--             newAssociateVehicleFleetResponse
+--
+--         , responseBatchCreateVehicle $
+--             newBatchCreateVehicleResponse
+--
+--         , responseBatchUpdateVehicle $
+--             newBatchUpdateVehicleResponse
+--
+--         , responseCreateCampaign $
+--             newCreateCampaignResponse
+--
+--         , responseCreateDecoderManifest $
+--             newCreateDecoderManifestResponse
+--
+--         , responseCreateFleet $
+--             newCreateFleetResponse
+--
+--         , responseCreateModelManifest $
+--             newCreateModelManifestResponse
+--
+--         , responseCreateSignalCatalog $
+--             newCreateSignalCatalogResponse
+--
+--         , responseCreateVehicle $
+--             newCreateVehicleResponse
+--
+--         , responseDeleteCampaign $
+--             newDeleteCampaignResponse
+--
+--         , responseDeleteDecoderManifest $
+--             newDeleteDecoderManifestResponse
+--
+--         , responseDeleteFleet $
+--             newDeleteFleetResponse
+--
+--         , responseDeleteModelManifest $
+--             newDeleteModelManifestResponse
+--
+--         , responseDeleteSignalCatalog $
+--             newDeleteSignalCatalogResponse
+--
+--         , responseDeleteVehicle $
+--             newDeleteVehicleResponse
+--
+--         , responseDisassociateVehicleFleet $
+--             newDisassociateVehicleFleetResponse
+--
+--         , responseGetCampaign $
+--             newGetCampaignResponse
+--
+--         , responseGetDecoderManifest $
+--             newGetDecoderManifestResponse
+--
+--         , responseGetFleet $
+--             newGetFleetResponse
+--
+--         , responseGetLoggingOptions $
+--             newGetLoggingOptionsResponse
+--
+--         , responseGetModelManifest $
+--             newGetModelManifestResponse
+--
+--         , responseGetRegisterAccountStatus $
+--             newGetRegisterAccountStatusResponse
+--
+--         , responseGetSignalCatalog $
+--             newGetSignalCatalogResponse
+--
+--         , responseGetVehicle $
+--             newGetVehicleResponse
+--
+--         , responseGetVehicleStatus $
+--             newGetVehicleStatusResponse
+--
+--         , responseImportDecoderManifest $
+--             newImportDecoderManifestResponse
+--
+--         , responseImportSignalCatalog $
+--             newImportSignalCatalogResponse
+--
+--         , responseListCampaigns $
+--             newListCampaignsResponse
+--
+--         , responseListDecoderManifestNetworkInterfaces $
+--             newListDecoderManifestNetworkInterfacesResponse
+--
+--         , responseListDecoderManifestSignals $
+--             newListDecoderManifestSignalsResponse
+--
+--         , responseListDecoderManifests $
+--             newListDecoderManifestsResponse
+--
+--         , responseListFleets $
+--             newListFleetsResponse
+--
+--         , responseListFleetsForVehicle $
+--             newListFleetsForVehicleResponse
+--
+--         , responseListModelManifestNodes $
+--             newListModelManifestNodesResponse
+--
+--         , responseListModelManifests $
+--             newListModelManifestsResponse
+--
+--         , responseListSignalCatalogNodes $
+--             newListSignalCatalogNodesResponse
+--
+--         , responseListSignalCatalogs $
+--             newListSignalCatalogsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListVehicles $
+--             newListVehiclesResponse
+--
+--         , responseListVehiclesInFleet $
+--             newListVehiclesInFleetResponse
+--
+--         , responsePutLoggingOptions $
+--             newPutLoggingOptionsResponse
+--
+--         , responseRegisterAccount $
+--             newRegisterAccountResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateCampaign $
+--             newUpdateCampaignResponse
+--
+--         , responseUpdateDecoderManifest $
+--             newUpdateDecoderManifestResponse
+--
+--         , responseUpdateFleet $
+--             newUpdateFleetResponse
+--
+--         , responseUpdateModelManifest $
+--             newUpdateModelManifestResponse
+--
+--         , responseUpdateSignalCatalog $
+--             newUpdateSignalCatalogResponse
+--
+--         , responseUpdateVehicle $
+--             newUpdateVehicleResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateVehicleFleet :: AssociateVehicleFleet -> TestTree
+requestAssociateVehicleFleet =
+  req
+    "AssociateVehicleFleet"
+    "fixture/AssociateVehicleFleet.yaml"
+
+requestBatchCreateVehicle :: BatchCreateVehicle -> TestTree
+requestBatchCreateVehicle =
+  req
+    "BatchCreateVehicle"
+    "fixture/BatchCreateVehicle.yaml"
+
+requestBatchUpdateVehicle :: BatchUpdateVehicle -> TestTree
+requestBatchUpdateVehicle =
+  req
+    "BatchUpdateVehicle"
+    "fixture/BatchUpdateVehicle.yaml"
+
+requestCreateCampaign :: CreateCampaign -> TestTree
+requestCreateCampaign =
+  req
+    "CreateCampaign"
+    "fixture/CreateCampaign.yaml"
+
+requestCreateDecoderManifest :: CreateDecoderManifest -> TestTree
+requestCreateDecoderManifest =
+  req
+    "CreateDecoderManifest"
+    "fixture/CreateDecoderManifest.yaml"
+
+requestCreateFleet :: CreateFleet -> TestTree
+requestCreateFleet =
+  req
+    "CreateFleet"
+    "fixture/CreateFleet.yaml"
+
+requestCreateModelManifest :: CreateModelManifest -> TestTree
+requestCreateModelManifest =
+  req
+    "CreateModelManifest"
+    "fixture/CreateModelManifest.yaml"
+
+requestCreateSignalCatalog :: CreateSignalCatalog -> TestTree
+requestCreateSignalCatalog =
+  req
+    "CreateSignalCatalog"
+    "fixture/CreateSignalCatalog.yaml"
+
+requestCreateVehicle :: CreateVehicle -> TestTree
+requestCreateVehicle =
+  req
+    "CreateVehicle"
+    "fixture/CreateVehicle.yaml"
+
+requestDeleteCampaign :: DeleteCampaign -> TestTree
+requestDeleteCampaign =
+  req
+    "DeleteCampaign"
+    "fixture/DeleteCampaign.yaml"
+
+requestDeleteDecoderManifest :: DeleteDecoderManifest -> TestTree
+requestDeleteDecoderManifest =
+  req
+    "DeleteDecoderManifest"
+    "fixture/DeleteDecoderManifest.yaml"
+
+requestDeleteFleet :: DeleteFleet -> TestTree
+requestDeleteFleet =
+  req
+    "DeleteFleet"
+    "fixture/DeleteFleet.yaml"
+
+requestDeleteModelManifest :: DeleteModelManifest -> TestTree
+requestDeleteModelManifest =
+  req
+    "DeleteModelManifest"
+    "fixture/DeleteModelManifest.yaml"
+
+requestDeleteSignalCatalog :: DeleteSignalCatalog -> TestTree
+requestDeleteSignalCatalog =
+  req
+    "DeleteSignalCatalog"
+    "fixture/DeleteSignalCatalog.yaml"
+
+requestDeleteVehicle :: DeleteVehicle -> TestTree
+requestDeleteVehicle =
+  req
+    "DeleteVehicle"
+    "fixture/DeleteVehicle.yaml"
+
+requestDisassociateVehicleFleet :: DisassociateVehicleFleet -> TestTree
+requestDisassociateVehicleFleet =
+  req
+    "DisassociateVehicleFleet"
+    "fixture/DisassociateVehicleFleet.yaml"
+
+requestGetCampaign :: GetCampaign -> TestTree
+requestGetCampaign =
+  req
+    "GetCampaign"
+    "fixture/GetCampaign.yaml"
+
+requestGetDecoderManifest :: GetDecoderManifest -> TestTree
+requestGetDecoderManifest =
+  req
+    "GetDecoderManifest"
+    "fixture/GetDecoderManifest.yaml"
+
+requestGetFleet :: GetFleet -> TestTree
+requestGetFleet =
+  req
+    "GetFleet"
+    "fixture/GetFleet.yaml"
+
+requestGetLoggingOptions :: GetLoggingOptions -> TestTree
+requestGetLoggingOptions =
+  req
+    "GetLoggingOptions"
+    "fixture/GetLoggingOptions.yaml"
+
+requestGetModelManifest :: GetModelManifest -> TestTree
+requestGetModelManifest =
+  req
+    "GetModelManifest"
+    "fixture/GetModelManifest.yaml"
+
+requestGetRegisterAccountStatus :: GetRegisterAccountStatus -> TestTree
+requestGetRegisterAccountStatus =
+  req
+    "GetRegisterAccountStatus"
+    "fixture/GetRegisterAccountStatus.yaml"
+
+requestGetSignalCatalog :: GetSignalCatalog -> TestTree
+requestGetSignalCatalog =
+  req
+    "GetSignalCatalog"
+    "fixture/GetSignalCatalog.yaml"
+
+requestGetVehicle :: GetVehicle -> TestTree
+requestGetVehicle =
+  req
+    "GetVehicle"
+    "fixture/GetVehicle.yaml"
+
+requestGetVehicleStatus :: GetVehicleStatus -> TestTree
+requestGetVehicleStatus =
+  req
+    "GetVehicleStatus"
+    "fixture/GetVehicleStatus.yaml"
+
+requestImportDecoderManifest :: ImportDecoderManifest -> TestTree
+requestImportDecoderManifest =
+  req
+    "ImportDecoderManifest"
+    "fixture/ImportDecoderManifest.yaml"
+
+requestImportSignalCatalog :: ImportSignalCatalog -> TestTree
+requestImportSignalCatalog =
+  req
+    "ImportSignalCatalog"
+    "fixture/ImportSignalCatalog.yaml"
+
+requestListCampaigns :: ListCampaigns -> TestTree
+requestListCampaigns =
+  req
+    "ListCampaigns"
+    "fixture/ListCampaigns.yaml"
+
+requestListDecoderManifestNetworkInterfaces :: ListDecoderManifestNetworkInterfaces -> TestTree
+requestListDecoderManifestNetworkInterfaces =
+  req
+    "ListDecoderManifestNetworkInterfaces"
+    "fixture/ListDecoderManifestNetworkInterfaces.yaml"
+
+requestListDecoderManifestSignals :: ListDecoderManifestSignals -> TestTree
+requestListDecoderManifestSignals =
+  req
+    "ListDecoderManifestSignals"
+    "fixture/ListDecoderManifestSignals.yaml"
+
+requestListDecoderManifests :: ListDecoderManifests -> TestTree
+requestListDecoderManifests =
+  req
+    "ListDecoderManifests"
+    "fixture/ListDecoderManifests.yaml"
+
+requestListFleets :: ListFleets -> TestTree
+requestListFleets =
+  req
+    "ListFleets"
+    "fixture/ListFleets.yaml"
+
+requestListFleetsForVehicle :: ListFleetsForVehicle -> TestTree
+requestListFleetsForVehicle =
+  req
+    "ListFleetsForVehicle"
+    "fixture/ListFleetsForVehicle.yaml"
+
+requestListModelManifestNodes :: ListModelManifestNodes -> TestTree
+requestListModelManifestNodes =
+  req
+    "ListModelManifestNodes"
+    "fixture/ListModelManifestNodes.yaml"
+
+requestListModelManifests :: ListModelManifests -> TestTree
+requestListModelManifests =
+  req
+    "ListModelManifests"
+    "fixture/ListModelManifests.yaml"
+
+requestListSignalCatalogNodes :: ListSignalCatalogNodes -> TestTree
+requestListSignalCatalogNodes =
+  req
+    "ListSignalCatalogNodes"
+    "fixture/ListSignalCatalogNodes.yaml"
+
+requestListSignalCatalogs :: ListSignalCatalogs -> TestTree
+requestListSignalCatalogs =
+  req
+    "ListSignalCatalogs"
+    "fixture/ListSignalCatalogs.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListVehicles :: ListVehicles -> TestTree
+requestListVehicles =
+  req
+    "ListVehicles"
+    "fixture/ListVehicles.yaml"
+
+requestListVehiclesInFleet :: ListVehiclesInFleet -> TestTree
+requestListVehiclesInFleet =
+  req
+    "ListVehiclesInFleet"
+    "fixture/ListVehiclesInFleet.yaml"
+
+requestPutLoggingOptions :: PutLoggingOptions -> TestTree
+requestPutLoggingOptions =
+  req
+    "PutLoggingOptions"
+    "fixture/PutLoggingOptions.yaml"
+
+requestRegisterAccount :: RegisterAccount -> TestTree
+requestRegisterAccount =
+  req
+    "RegisterAccount"
+    "fixture/RegisterAccount.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateCampaign :: UpdateCampaign -> TestTree
+requestUpdateCampaign =
+  req
+    "UpdateCampaign"
+    "fixture/UpdateCampaign.yaml"
+
+requestUpdateDecoderManifest :: UpdateDecoderManifest -> TestTree
+requestUpdateDecoderManifest =
+  req
+    "UpdateDecoderManifest"
+    "fixture/UpdateDecoderManifest.yaml"
+
+requestUpdateFleet :: UpdateFleet -> TestTree
+requestUpdateFleet =
+  req
+    "UpdateFleet"
+    "fixture/UpdateFleet.yaml"
+
+requestUpdateModelManifest :: UpdateModelManifest -> TestTree
+requestUpdateModelManifest =
+  req
+    "UpdateModelManifest"
+    "fixture/UpdateModelManifest.yaml"
+
+requestUpdateSignalCatalog :: UpdateSignalCatalog -> TestTree
+requestUpdateSignalCatalog =
+  req
+    "UpdateSignalCatalog"
+    "fixture/UpdateSignalCatalog.yaml"
+
+requestUpdateVehicle :: UpdateVehicle -> TestTree
+requestUpdateVehicle =
+  req
+    "UpdateVehicle"
+    "fixture/UpdateVehicle.yaml"
+
+-- Responses
+
+responseAssociateVehicleFleet :: AssociateVehicleFleetResponse -> TestTree
+responseAssociateVehicleFleet =
+  res
+    "AssociateVehicleFleetResponse"
+    "fixture/AssociateVehicleFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateVehicleFleet)
+
+responseBatchCreateVehicle :: BatchCreateVehicleResponse -> TestTree
+responseBatchCreateVehicle =
+  res
+    "BatchCreateVehicleResponse"
+    "fixture/BatchCreateVehicleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchCreateVehicle)
+
+responseBatchUpdateVehicle :: BatchUpdateVehicleResponse -> TestTree
+responseBatchUpdateVehicle =
+  res
+    "BatchUpdateVehicleResponse"
+    "fixture/BatchUpdateVehicleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchUpdateVehicle)
+
+responseCreateCampaign :: CreateCampaignResponse -> TestTree
+responseCreateCampaign =
+  res
+    "CreateCampaignResponse"
+    "fixture/CreateCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCampaign)
+
+responseCreateDecoderManifest :: CreateDecoderManifestResponse -> TestTree
+responseCreateDecoderManifest =
+  res
+    "CreateDecoderManifestResponse"
+    "fixture/CreateDecoderManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDecoderManifest)
+
+responseCreateFleet :: CreateFleetResponse -> TestTree
+responseCreateFleet =
+  res
+    "CreateFleetResponse"
+    "fixture/CreateFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFleet)
+
+responseCreateModelManifest :: CreateModelManifestResponse -> TestTree
+responseCreateModelManifest =
+  res
+    "CreateModelManifestResponse"
+    "fixture/CreateModelManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateModelManifest)
+
+responseCreateSignalCatalog :: CreateSignalCatalogResponse -> TestTree
+responseCreateSignalCatalog =
+  res
+    "CreateSignalCatalogResponse"
+    "fixture/CreateSignalCatalogResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSignalCatalog)
+
+responseCreateVehicle :: CreateVehicleResponse -> TestTree
+responseCreateVehicle =
+  res
+    "CreateVehicleResponse"
+    "fixture/CreateVehicleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVehicle)
+
+responseDeleteCampaign :: DeleteCampaignResponse -> TestTree
+responseDeleteCampaign =
+  res
+    "DeleteCampaignResponse"
+    "fixture/DeleteCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCampaign)
+
+responseDeleteDecoderManifest :: DeleteDecoderManifestResponse -> TestTree
+responseDeleteDecoderManifest =
+  res
+    "DeleteDecoderManifestResponse"
+    "fixture/DeleteDecoderManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDecoderManifest)
+
+responseDeleteFleet :: DeleteFleetResponse -> TestTree
+responseDeleteFleet =
+  res
+    "DeleteFleetResponse"
+    "fixture/DeleteFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFleet)
+
+responseDeleteModelManifest :: DeleteModelManifestResponse -> TestTree
+responseDeleteModelManifest =
+  res
+    "DeleteModelManifestResponse"
+    "fixture/DeleteModelManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteModelManifest)
+
+responseDeleteSignalCatalog :: DeleteSignalCatalogResponse -> TestTree
+responseDeleteSignalCatalog =
+  res
+    "DeleteSignalCatalogResponse"
+    "fixture/DeleteSignalCatalogResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSignalCatalog)
+
+responseDeleteVehicle :: DeleteVehicleResponse -> TestTree
+responseDeleteVehicle =
+  res
+    "DeleteVehicleResponse"
+    "fixture/DeleteVehicleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVehicle)
+
+responseDisassociateVehicleFleet :: DisassociateVehicleFleetResponse -> TestTree
+responseDisassociateVehicleFleet =
+  res
+    "DisassociateVehicleFleetResponse"
+    "fixture/DisassociateVehicleFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateVehicleFleet)
+
+responseGetCampaign :: GetCampaignResponse -> TestTree
+responseGetCampaign =
+  res
+    "GetCampaignResponse"
+    "fixture/GetCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCampaign)
+
+responseGetDecoderManifest :: GetDecoderManifestResponse -> TestTree
+responseGetDecoderManifest =
+  res
+    "GetDecoderManifestResponse"
+    "fixture/GetDecoderManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDecoderManifest)
+
+responseGetFleet :: GetFleetResponse -> TestTree
+responseGetFleet =
+  res
+    "GetFleetResponse"
+    "fixture/GetFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFleet)
+
+responseGetLoggingOptions :: GetLoggingOptionsResponse -> TestTree
+responseGetLoggingOptions =
+  res
+    "GetLoggingOptionsResponse"
+    "fixture/GetLoggingOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLoggingOptions)
+
+responseGetModelManifest :: GetModelManifestResponse -> TestTree
+responseGetModelManifest =
+  res
+    "GetModelManifestResponse"
+    "fixture/GetModelManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetModelManifest)
+
+responseGetRegisterAccountStatus :: GetRegisterAccountStatusResponse -> TestTree
+responseGetRegisterAccountStatus =
+  res
+    "GetRegisterAccountStatusResponse"
+    "fixture/GetRegisterAccountStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRegisterAccountStatus)
+
+responseGetSignalCatalog :: GetSignalCatalogResponse -> TestTree
+responseGetSignalCatalog =
+  res
+    "GetSignalCatalogResponse"
+    "fixture/GetSignalCatalogResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSignalCatalog)
+
+responseGetVehicle :: GetVehicleResponse -> TestTree
+responseGetVehicle =
+  res
+    "GetVehicleResponse"
+    "fixture/GetVehicleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVehicle)
+
+responseGetVehicleStatus :: GetVehicleStatusResponse -> TestTree
+responseGetVehicleStatus =
+  res
+    "GetVehicleStatusResponse"
+    "fixture/GetVehicleStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVehicleStatus)
+
+responseImportDecoderManifest :: ImportDecoderManifestResponse -> TestTree
+responseImportDecoderManifest =
+  res
+    "ImportDecoderManifestResponse"
+    "fixture/ImportDecoderManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportDecoderManifest)
+
+responseImportSignalCatalog :: ImportSignalCatalogResponse -> TestTree
+responseImportSignalCatalog =
+  res
+    "ImportSignalCatalogResponse"
+    "fixture/ImportSignalCatalogResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportSignalCatalog)
+
+responseListCampaigns :: ListCampaignsResponse -> TestTree
+responseListCampaigns =
+  res
+    "ListCampaignsResponse"
+    "fixture/ListCampaignsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCampaigns)
+
+responseListDecoderManifestNetworkInterfaces :: ListDecoderManifestNetworkInterfacesResponse -> TestTree
+responseListDecoderManifestNetworkInterfaces =
+  res
+    "ListDecoderManifestNetworkInterfacesResponse"
+    "fixture/ListDecoderManifestNetworkInterfacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDecoderManifestNetworkInterfaces)
+
+responseListDecoderManifestSignals :: ListDecoderManifestSignalsResponse -> TestTree
+responseListDecoderManifestSignals =
+  res
+    "ListDecoderManifestSignalsResponse"
+    "fixture/ListDecoderManifestSignalsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDecoderManifestSignals)
+
+responseListDecoderManifests :: ListDecoderManifestsResponse -> TestTree
+responseListDecoderManifests =
+  res
+    "ListDecoderManifestsResponse"
+    "fixture/ListDecoderManifestsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDecoderManifests)
+
+responseListFleets :: ListFleetsResponse -> TestTree
+responseListFleets =
+  res
+    "ListFleetsResponse"
+    "fixture/ListFleetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFleets)
+
+responseListFleetsForVehicle :: ListFleetsForVehicleResponse -> TestTree
+responseListFleetsForVehicle =
+  res
+    "ListFleetsForVehicleResponse"
+    "fixture/ListFleetsForVehicleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListFleetsForVehicle)
+
+responseListModelManifestNodes :: ListModelManifestNodesResponse -> TestTree
+responseListModelManifestNodes =
+  res
+    "ListModelManifestNodesResponse"
+    "fixture/ListModelManifestNodesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListModelManifestNodes)
+
+responseListModelManifests :: ListModelManifestsResponse -> TestTree
+responseListModelManifests =
+  res
+    "ListModelManifestsResponse"
+    "fixture/ListModelManifestsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListModelManifests)
+
+responseListSignalCatalogNodes :: ListSignalCatalogNodesResponse -> TestTree
+responseListSignalCatalogNodes =
+  res
+    "ListSignalCatalogNodesResponse"
+    "fixture/ListSignalCatalogNodesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSignalCatalogNodes)
+
+responseListSignalCatalogs :: ListSignalCatalogsResponse -> TestTree
+responseListSignalCatalogs =
+  res
+    "ListSignalCatalogsResponse"
+    "fixture/ListSignalCatalogsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSignalCatalogs)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListVehicles :: ListVehiclesResponse -> TestTree
+responseListVehicles =
+  res
+    "ListVehiclesResponse"
+    "fixture/ListVehiclesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListVehicles)
+
+responseListVehiclesInFleet :: ListVehiclesInFleetResponse -> TestTree
+responseListVehiclesInFleet =
+  res
+    "ListVehiclesInFleetResponse"
+    "fixture/ListVehiclesInFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListVehiclesInFleet)
+
+responsePutLoggingOptions :: PutLoggingOptionsResponse -> TestTree
+responsePutLoggingOptions =
+  res
+    "PutLoggingOptionsResponse"
+    "fixture/PutLoggingOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutLoggingOptions)
+
+responseRegisterAccount :: RegisterAccountResponse -> TestTree
+responseRegisterAccount =
+  res
+    "RegisterAccountResponse"
+    "fixture/RegisterAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterAccount)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateCampaign :: UpdateCampaignResponse -> TestTree
+responseUpdateCampaign =
+  res
+    "UpdateCampaignResponse"
+    "fixture/UpdateCampaignResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCampaign)
+
+responseUpdateDecoderManifest :: UpdateDecoderManifestResponse -> TestTree
+responseUpdateDecoderManifest =
+  res
+    "UpdateDecoderManifestResponse"
+    "fixture/UpdateDecoderManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDecoderManifest)
+
+responseUpdateFleet :: UpdateFleetResponse -> TestTree
+responseUpdateFleet =
+  res
+    "UpdateFleetResponse"
+    "fixture/UpdateFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFleet)
+
+responseUpdateModelManifest :: UpdateModelManifestResponse -> TestTree
+responseUpdateModelManifest =
+  res
+    "UpdateModelManifestResponse"
+    "fixture/UpdateModelManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateModelManifest)
+
+responseUpdateSignalCatalog :: UpdateSignalCatalogResponse -> TestTree
+responseUpdateSignalCatalog =
+  res
+    "UpdateSignalCatalogResponse"
+    "fixture/UpdateSignalCatalogResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSignalCatalog)
+
+responseUpdateVehicle :: UpdateVehicleResponse -> TestTree
+responseUpdateVehicle =
+  res
+    "UpdateVehicleResponse"
+    "fixture/UpdateVehicleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateVehicle)
diff --git a/test/Test/Amazonka/IoTFleetWise.hs b/test/Test/Amazonka/IoTFleetWise.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTFleetWise.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.IoTFleetWise
+-- 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.IoTFleetWise
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/IoTFleetWise/Internal.hs b/test/Test/Amazonka/IoTFleetWise/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/IoTFleetWise/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.IoTFleetWise.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.IoTFleetWise.Internal where
