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 Data Exchange SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-dataexchange)
+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.DataExchange](http://hackage.haskell.org/package/amazonka-dataexchange/docs/Amazonka-DataExchange.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-dataexchange` 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-dataexchange.cabal b/amazonka-dataexchange.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-dataexchange.cabal
@@ -0,0 +1,180 @@
+cabal-version:      2.2
+name:               amazonka-dataexchange
+version:            2.0
+synopsis:           Amazon Data Exchange 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 @2017-07-25@ 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.DataExchange.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.DataExchange" 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-dataexchange
+
+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.DataExchange
+    Amazonka.DataExchange.CancelJob
+    Amazonka.DataExchange.CreateDataSet
+    Amazonka.DataExchange.CreateEventAction
+    Amazonka.DataExchange.CreateJob
+    Amazonka.DataExchange.CreateRevision
+    Amazonka.DataExchange.DeleteAsset
+    Amazonka.DataExchange.DeleteDataSet
+    Amazonka.DataExchange.DeleteEventAction
+    Amazonka.DataExchange.DeleteRevision
+    Amazonka.DataExchange.GetAsset
+    Amazonka.DataExchange.GetDataSet
+    Amazonka.DataExchange.GetEventAction
+    Amazonka.DataExchange.GetJob
+    Amazonka.DataExchange.GetRevision
+    Amazonka.DataExchange.Lens
+    Amazonka.DataExchange.ListDataSetRevisions
+    Amazonka.DataExchange.ListDataSets
+    Amazonka.DataExchange.ListEventActions
+    Amazonka.DataExchange.ListJobs
+    Amazonka.DataExchange.ListRevisionAssets
+    Amazonka.DataExchange.ListTagsForResource
+    Amazonka.DataExchange.RevokeRevision
+    Amazonka.DataExchange.SendApiAsset
+    Amazonka.DataExchange.StartJob
+    Amazonka.DataExchange.TagResource
+    Amazonka.DataExchange.Types
+    Amazonka.DataExchange.Types.Action
+    Amazonka.DataExchange.Types.ApiGatewayApiAsset
+    Amazonka.DataExchange.Types.AssetDestinationEntry
+    Amazonka.DataExchange.Types.AssetDetails
+    Amazonka.DataExchange.Types.AssetEntry
+    Amazonka.DataExchange.Types.AssetSourceEntry
+    Amazonka.DataExchange.Types.AssetType
+    Amazonka.DataExchange.Types.AutoExportRevisionDestinationEntry
+    Amazonka.DataExchange.Types.AutoExportRevisionToS3RequestDetails
+    Amazonka.DataExchange.Types.Code
+    Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketRequestDetails
+    Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketResponseDetails
+    Amazonka.DataExchange.Types.DatabaseLFTagPolicy
+    Amazonka.DataExchange.Types.DatabaseLFTagPolicyAndPermissions
+    Amazonka.DataExchange.Types.DatabaseLFTagPolicyPermission
+    Amazonka.DataExchange.Types.DataSetEntry
+    Amazonka.DataExchange.Types.Details
+    Amazonka.DataExchange.Types.Event
+    Amazonka.DataExchange.Types.EventActionEntry
+    Amazonka.DataExchange.Types.ExportAssetsToS3RequestDetails
+    Amazonka.DataExchange.Types.ExportAssetsToS3ResponseDetails
+    Amazonka.DataExchange.Types.ExportAssetToSignedUrlRequestDetails
+    Amazonka.DataExchange.Types.ExportAssetToSignedUrlResponseDetails
+    Amazonka.DataExchange.Types.ExportRevisionsToS3RequestDetails
+    Amazonka.DataExchange.Types.ExportRevisionsToS3ResponseDetails
+    Amazonka.DataExchange.Types.ExportServerSideEncryption
+    Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiRequestDetails
+    Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiResponseDetails
+    Amazonka.DataExchange.Types.ImportAssetFromSignedUrlJobErrorDetails
+    Amazonka.DataExchange.Types.ImportAssetFromSignedUrlRequestDetails
+    Amazonka.DataExchange.Types.ImportAssetFromSignedUrlResponseDetails
+    Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyRequestDetails
+    Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyResponseDetails
+    Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesRequestDetails
+    Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesResponseDetails
+    Amazonka.DataExchange.Types.ImportAssetsFromS3RequestDetails
+    Amazonka.DataExchange.Types.ImportAssetsFromS3ResponseDetails
+    Amazonka.DataExchange.Types.JobEntry
+    Amazonka.DataExchange.Types.JobError
+    Amazonka.DataExchange.Types.JobErrorLimitName
+    Amazonka.DataExchange.Types.JobErrorResourceTypes
+    Amazonka.DataExchange.Types.LakeFormationDataPermissionAsset
+    Amazonka.DataExchange.Types.LakeFormationDataPermissionDetails
+    Amazonka.DataExchange.Types.LakeFormationDataPermissionType
+    Amazonka.DataExchange.Types.LFPermission
+    Amazonka.DataExchange.Types.LFResourceDetails
+    Amazonka.DataExchange.Types.LFResourceType
+    Amazonka.DataExchange.Types.LFTag
+    Amazonka.DataExchange.Types.LFTagPolicyDetails
+    Amazonka.DataExchange.Types.Origin
+    Amazonka.DataExchange.Types.OriginDetails
+    Amazonka.DataExchange.Types.ProtocolType
+    Amazonka.DataExchange.Types.RedshiftDataShareAsset
+    Amazonka.DataExchange.Types.RedshiftDataShareAssetSourceEntry
+    Amazonka.DataExchange.Types.RequestDetails
+    Amazonka.DataExchange.Types.ResponseDetails
+    Amazonka.DataExchange.Types.RevisionDestinationEntry
+    Amazonka.DataExchange.Types.RevisionEntry
+    Amazonka.DataExchange.Types.RevisionPublished
+    Amazonka.DataExchange.Types.S3DataAccessAsset
+    Amazonka.DataExchange.Types.S3DataAccessAssetSourceEntry
+    Amazonka.DataExchange.Types.S3SnapshotAsset
+    Amazonka.DataExchange.Types.ServerSideEncryptionTypes
+    Amazonka.DataExchange.Types.State
+    Amazonka.DataExchange.Types.TableLFTagPolicy
+    Amazonka.DataExchange.Types.TableLFTagPolicyAndPermissions
+    Amazonka.DataExchange.Types.TableTagPolicyLFPermission
+    Amazonka.DataExchange.Types.Type
+    Amazonka.DataExchange.UntagResource
+    Amazonka.DataExchange.UpdateAsset
+    Amazonka.DataExchange.UpdateDataSet
+    Amazonka.DataExchange.UpdateEventAction
+    Amazonka.DataExchange.UpdateRevision
+    Amazonka.DataExchange.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-dataexchange-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.DataExchange
+    Test.Amazonka.DataExchange.Internal
+    Test.Amazonka.Gen.DataExchange
+
+  build-depends:
+    , amazonka-core          >=2.0 && <2.1
+    , amazonka-dataexchange
+    , amazonka-test          >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CancelJob.yaml b/fixture/CancelJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelJob.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/CancelJobResponse.proto b/fixture/CancelJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelJobResponse.proto
diff --git a/fixture/CreateDataSet.yaml b/fixture/CreateDataSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataSet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/CreateDataSetResponse.proto b/fixture/CreateDataSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataSetResponse.proto
diff --git a/fixture/CreateEventAction.yaml b/fixture/CreateEventAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEventAction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/CreateEventActionResponse.proto b/fixture/CreateEventActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEventActionResponse.proto
diff --git a/fixture/CreateJob.yaml b/fixture/CreateJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/CreateJobResponse.proto b/fixture/CreateJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateJobResponse.proto
diff --git a/fixture/CreateRevision.yaml b/fixture/CreateRevision.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRevision.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/CreateRevisionResponse.proto b/fixture/CreateRevisionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRevisionResponse.proto
diff --git a/fixture/DeleteAsset.yaml b/fixture/DeleteAsset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAsset.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/DeleteAssetResponse.proto b/fixture/DeleteAssetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAssetResponse.proto
diff --git a/fixture/DeleteDataSet.yaml b/fixture/DeleteDataSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataSet.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/DeleteDataSetResponse.proto b/fixture/DeleteDataSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataSetResponse.proto
diff --git a/fixture/DeleteEventAction.yaml b/fixture/DeleteEventAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventAction.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/DeleteEventActionResponse.proto b/fixture/DeleteEventActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEventActionResponse.proto
diff --git a/fixture/DeleteRevision.yaml b/fixture/DeleteRevision.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRevision.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/DeleteRevisionResponse.proto b/fixture/DeleteRevisionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRevisionResponse.proto
diff --git a/fixture/GetAsset.yaml b/fixture/GetAsset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAsset.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/GetAssetResponse.proto b/fixture/GetAssetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssetResponse.proto
diff --git a/fixture/GetDataSet.yaml b/fixture/GetDataSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataSet.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/GetDataSetResponse.proto b/fixture/GetDataSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataSetResponse.proto
diff --git a/fixture/GetEventAction.yaml b/fixture/GetEventAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventAction.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/GetEventActionResponse.proto b/fixture/GetEventActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEventActionResponse.proto
diff --git a/fixture/GetJob.yaml b/fixture/GetJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetJob.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/GetJobResponse.proto b/fixture/GetJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobResponse.proto
diff --git a/fixture/GetRevision.yaml b/fixture/GetRevision.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetRevision.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/GetRevisionResponse.proto b/fixture/GetRevisionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetRevisionResponse.proto
diff --git a/fixture/ListDataSetRevisions.yaml b/fixture/ListDataSetRevisions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSetRevisions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/ListDataSetRevisionsResponse.proto b/fixture/ListDataSetRevisionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSetRevisionsResponse.proto
diff --git a/fixture/ListDataSets.yaml b/fixture/ListDataSets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/ListDataSetsResponse.proto b/fixture/ListDataSetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDataSetsResponse.proto
diff --git a/fixture/ListEventActions.yaml b/fixture/ListEventActions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventActions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/ListEventActionsResponse.proto b/fixture/ListEventActionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEventActionsResponse.proto
diff --git a/fixture/ListJobs.yaml b/fixture/ListJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/ListJobsResponse.proto b/fixture/ListJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListJobsResponse.proto
diff --git a/fixture/ListRevisionAssets.yaml b/fixture/ListRevisionAssets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRevisionAssets.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/ListRevisionAssetsResponse.proto b/fixture/ListRevisionAssetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRevisionAssetsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/RevokeRevision.yaml b/fixture/RevokeRevision.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeRevision.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/RevokeRevisionResponse.proto b/fixture/RevokeRevisionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeRevisionResponse.proto
diff --git a/fixture/SendApiAsset.yaml b/fixture/SendApiAsset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendApiAsset.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/SendApiAssetResponse.proto b/fixture/SendApiAssetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendApiAssetResponse.proto
diff --git a/fixture/StartJob.yaml b/fixture/StartJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartJob.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/StartJobResponse.proto b/fixture/StartJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartJobResponse.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/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/UpdateAsset.yaml b/fixture/UpdateAsset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAsset.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/UpdateAssetResponse.proto b/fixture/UpdateAssetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAssetResponse.proto
diff --git a/fixture/UpdateDataSet.yaml b/fixture/UpdateDataSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataSet.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/UpdateDataSetResponse.proto b/fixture/UpdateDataSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDataSetResponse.proto
diff --git a/fixture/UpdateEventAction.yaml b/fixture/UpdateEventAction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventAction.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/UpdateEventActionResponse.proto b/fixture/UpdateEventActionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEventActionResponse.proto
diff --git a/fixture/UpdateRevision.yaml b/fixture/UpdateRevision.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRevision.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/dataexchange/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  dataexchange.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/UpdateRevisionResponse.proto b/fixture/UpdateRevisionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRevisionResponse.proto
diff --git a/gen/Amazonka/DataExchange.hs b/gen/Amazonka/DataExchange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange.hs
@@ -0,0 +1,566 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.DataExchange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2017-07-25@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS Data Exchange is a service that makes it easy for AWS customers to
+-- exchange data in the cloud. You can use the AWS Data Exchange APIs to
+-- create, update, manage, and access file-based data set in the AWS Cloud.
+--
+-- As a subscriber, you can view and access the data sets that you have an
+-- entitlement to through a subscription. You can use the APIs to download
+-- or copy your entitled data sets to Amazon Simple Storage Service (Amazon
+-- S3) for use across a variety of AWS analytics and machine learning
+-- services.
+--
+-- As a provider, you can create and manage your data sets that you would
+-- like to publish to a product. Being able to package and provide your
+-- data sets into products requires a few steps to determine eligibility.
+-- For more information, visit the /AWS Data Exchange User Guide/.
+--
+-- A data set is a collection of data that can be changed or updated over
+-- time. Data sets can be updated using revisions, which represent a new
+-- version or incremental change to a data set. A revision contains one or
+-- more assets. An asset in AWS Data Exchange is a piece of data that can
+-- be stored as an Amazon S3 object, Redshift datashare, API Gateway API,
+-- AWS Lake Formation data permission, or Amazon S3 data access. The asset
+-- can be a structured data file, an image file, or some other data file.
+-- Jobs are asynchronous import or export operations used to create or copy
+-- assets.
+module Amazonka.DataExchange
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceLimitExceededException
+    _ServiceLimitExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CancelJob
+    CancelJob (CancelJob'),
+    newCancelJob,
+    CancelJobResponse (CancelJobResponse'),
+    newCancelJobResponse,
+
+    -- ** CreateDataSet
+    CreateDataSet (CreateDataSet'),
+    newCreateDataSet,
+    CreateDataSetResponse (CreateDataSetResponse'),
+    newCreateDataSetResponse,
+
+    -- ** CreateEventAction
+    CreateEventAction (CreateEventAction'),
+    newCreateEventAction,
+    CreateEventActionResponse (CreateEventActionResponse'),
+    newCreateEventActionResponse,
+
+    -- ** CreateJob
+    CreateJob (CreateJob'),
+    newCreateJob,
+    CreateJobResponse (CreateJobResponse'),
+    newCreateJobResponse,
+
+    -- ** CreateRevision
+    CreateRevision (CreateRevision'),
+    newCreateRevision,
+    CreateRevisionResponse (CreateRevisionResponse'),
+    newCreateRevisionResponse,
+
+    -- ** DeleteAsset
+    DeleteAsset (DeleteAsset'),
+    newDeleteAsset,
+    DeleteAssetResponse (DeleteAssetResponse'),
+    newDeleteAssetResponse,
+
+    -- ** DeleteDataSet
+    DeleteDataSet (DeleteDataSet'),
+    newDeleteDataSet,
+    DeleteDataSetResponse (DeleteDataSetResponse'),
+    newDeleteDataSetResponse,
+
+    -- ** DeleteEventAction
+    DeleteEventAction (DeleteEventAction'),
+    newDeleteEventAction,
+    DeleteEventActionResponse (DeleteEventActionResponse'),
+    newDeleteEventActionResponse,
+
+    -- ** DeleteRevision
+    DeleteRevision (DeleteRevision'),
+    newDeleteRevision,
+    DeleteRevisionResponse (DeleteRevisionResponse'),
+    newDeleteRevisionResponse,
+
+    -- ** GetAsset
+    GetAsset (GetAsset'),
+    newGetAsset,
+    GetAssetResponse (GetAssetResponse'),
+    newGetAssetResponse,
+
+    -- ** GetDataSet
+    GetDataSet (GetDataSet'),
+    newGetDataSet,
+    GetDataSetResponse (GetDataSetResponse'),
+    newGetDataSetResponse,
+
+    -- ** GetEventAction
+    GetEventAction (GetEventAction'),
+    newGetEventAction,
+    GetEventActionResponse (GetEventActionResponse'),
+    newGetEventActionResponse,
+
+    -- ** GetJob
+    GetJob (GetJob'),
+    newGetJob,
+    GetJobResponse (GetJobResponse'),
+    newGetJobResponse,
+
+    -- ** GetRevision
+    GetRevision (GetRevision'),
+    newGetRevision,
+    GetRevisionResponse (GetRevisionResponse'),
+    newGetRevisionResponse,
+
+    -- ** ListDataSetRevisions (Paginated)
+    ListDataSetRevisions (ListDataSetRevisions'),
+    newListDataSetRevisions,
+    ListDataSetRevisionsResponse (ListDataSetRevisionsResponse'),
+    newListDataSetRevisionsResponse,
+
+    -- ** ListDataSets (Paginated)
+    ListDataSets (ListDataSets'),
+    newListDataSets,
+    ListDataSetsResponse (ListDataSetsResponse'),
+    newListDataSetsResponse,
+
+    -- ** ListEventActions (Paginated)
+    ListEventActions (ListEventActions'),
+    newListEventActions,
+    ListEventActionsResponse (ListEventActionsResponse'),
+    newListEventActionsResponse,
+
+    -- ** ListJobs (Paginated)
+    ListJobs (ListJobs'),
+    newListJobs,
+    ListJobsResponse (ListJobsResponse'),
+    newListJobsResponse,
+
+    -- ** ListRevisionAssets (Paginated)
+    ListRevisionAssets (ListRevisionAssets'),
+    newListRevisionAssets,
+    ListRevisionAssetsResponse (ListRevisionAssetsResponse'),
+    newListRevisionAssetsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** RevokeRevision
+    RevokeRevision (RevokeRevision'),
+    newRevokeRevision,
+    RevokeRevisionResponse (RevokeRevisionResponse'),
+    newRevokeRevisionResponse,
+
+    -- ** SendApiAsset
+    SendApiAsset (SendApiAsset'),
+    newSendApiAsset,
+    SendApiAssetResponse (SendApiAssetResponse'),
+    newSendApiAssetResponse,
+
+    -- ** StartJob
+    StartJob (StartJob'),
+    newStartJob,
+    StartJobResponse (StartJobResponse'),
+    newStartJobResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAsset
+    UpdateAsset (UpdateAsset'),
+    newUpdateAsset,
+    UpdateAssetResponse (UpdateAssetResponse'),
+    newUpdateAssetResponse,
+
+    -- ** UpdateDataSet
+    UpdateDataSet (UpdateDataSet'),
+    newUpdateDataSet,
+    UpdateDataSetResponse (UpdateDataSetResponse'),
+    newUpdateDataSetResponse,
+
+    -- ** UpdateEventAction
+    UpdateEventAction (UpdateEventAction'),
+    newUpdateEventAction,
+    UpdateEventActionResponse (UpdateEventActionResponse'),
+    newUpdateEventActionResponse,
+
+    -- ** UpdateRevision
+    UpdateRevision (UpdateRevision'),
+    newUpdateRevision,
+    UpdateRevisionResponse (UpdateRevisionResponse'),
+    newUpdateRevisionResponse,
+
+    -- * Types
+
+    -- ** AssetType
+    AssetType (..),
+
+    -- ** Code
+    Code (..),
+
+    -- ** DatabaseLFTagPolicyPermission
+    DatabaseLFTagPolicyPermission (..),
+
+    -- ** JobErrorLimitName
+    JobErrorLimitName (..),
+
+    -- ** JobErrorResourceTypes
+    JobErrorResourceTypes (..),
+
+    -- ** LFPermission
+    LFPermission (..),
+
+    -- ** LFResourceType
+    LFResourceType (..),
+
+    -- ** LakeFormationDataPermissionType
+    LakeFormationDataPermissionType (..),
+
+    -- ** Origin
+    Origin (..),
+
+    -- ** ProtocolType
+    ProtocolType (..),
+
+    -- ** ServerSideEncryptionTypes
+    ServerSideEncryptionTypes (..),
+
+    -- ** State
+    State (..),
+
+    -- ** TableTagPolicyLFPermission
+    TableTagPolicyLFPermission (..),
+
+    -- ** Type
+    Type (..),
+
+    -- ** Action
+    Action (Action'),
+    newAction,
+
+    -- ** ApiGatewayApiAsset
+    ApiGatewayApiAsset (ApiGatewayApiAsset'),
+    newApiGatewayApiAsset,
+
+    -- ** AssetDestinationEntry
+    AssetDestinationEntry (AssetDestinationEntry'),
+    newAssetDestinationEntry,
+
+    -- ** AssetDetails
+    AssetDetails (AssetDetails'),
+    newAssetDetails,
+
+    -- ** AssetEntry
+    AssetEntry (AssetEntry'),
+    newAssetEntry,
+
+    -- ** AssetSourceEntry
+    AssetSourceEntry (AssetSourceEntry'),
+    newAssetSourceEntry,
+
+    -- ** AutoExportRevisionDestinationEntry
+    AutoExportRevisionDestinationEntry (AutoExportRevisionDestinationEntry'),
+    newAutoExportRevisionDestinationEntry,
+
+    -- ** AutoExportRevisionToS3RequestDetails
+    AutoExportRevisionToS3RequestDetails (AutoExportRevisionToS3RequestDetails'),
+    newAutoExportRevisionToS3RequestDetails,
+
+    -- ** CreateS3DataAccessFromS3BucketRequestDetails
+    CreateS3DataAccessFromS3BucketRequestDetails (CreateS3DataAccessFromS3BucketRequestDetails'),
+    newCreateS3DataAccessFromS3BucketRequestDetails,
+
+    -- ** CreateS3DataAccessFromS3BucketResponseDetails
+    CreateS3DataAccessFromS3BucketResponseDetails (CreateS3DataAccessFromS3BucketResponseDetails'),
+    newCreateS3DataAccessFromS3BucketResponseDetails,
+
+    -- ** DataSetEntry
+    DataSetEntry (DataSetEntry'),
+    newDataSetEntry,
+
+    -- ** DatabaseLFTagPolicy
+    DatabaseLFTagPolicy (DatabaseLFTagPolicy'),
+    newDatabaseLFTagPolicy,
+
+    -- ** DatabaseLFTagPolicyAndPermissions
+    DatabaseLFTagPolicyAndPermissions (DatabaseLFTagPolicyAndPermissions'),
+    newDatabaseLFTagPolicyAndPermissions,
+
+    -- ** Details
+    Details (Details'),
+    newDetails,
+
+    -- ** Event
+    Event (Event'),
+    newEvent,
+
+    -- ** EventActionEntry
+    EventActionEntry (EventActionEntry'),
+    newEventActionEntry,
+
+    -- ** ExportAssetToSignedUrlRequestDetails
+    ExportAssetToSignedUrlRequestDetails (ExportAssetToSignedUrlRequestDetails'),
+    newExportAssetToSignedUrlRequestDetails,
+
+    -- ** ExportAssetToSignedUrlResponseDetails
+    ExportAssetToSignedUrlResponseDetails (ExportAssetToSignedUrlResponseDetails'),
+    newExportAssetToSignedUrlResponseDetails,
+
+    -- ** ExportAssetsToS3RequestDetails
+    ExportAssetsToS3RequestDetails (ExportAssetsToS3RequestDetails'),
+    newExportAssetsToS3RequestDetails,
+
+    -- ** ExportAssetsToS3ResponseDetails
+    ExportAssetsToS3ResponseDetails (ExportAssetsToS3ResponseDetails'),
+    newExportAssetsToS3ResponseDetails,
+
+    -- ** ExportRevisionsToS3RequestDetails
+    ExportRevisionsToS3RequestDetails (ExportRevisionsToS3RequestDetails'),
+    newExportRevisionsToS3RequestDetails,
+
+    -- ** ExportRevisionsToS3ResponseDetails
+    ExportRevisionsToS3ResponseDetails (ExportRevisionsToS3ResponseDetails'),
+    newExportRevisionsToS3ResponseDetails,
+
+    -- ** ExportServerSideEncryption
+    ExportServerSideEncryption (ExportServerSideEncryption'),
+    newExportServerSideEncryption,
+
+    -- ** ImportAssetFromApiGatewayApiRequestDetails
+    ImportAssetFromApiGatewayApiRequestDetails (ImportAssetFromApiGatewayApiRequestDetails'),
+    newImportAssetFromApiGatewayApiRequestDetails,
+
+    -- ** ImportAssetFromApiGatewayApiResponseDetails
+    ImportAssetFromApiGatewayApiResponseDetails (ImportAssetFromApiGatewayApiResponseDetails'),
+    newImportAssetFromApiGatewayApiResponseDetails,
+
+    -- ** ImportAssetFromSignedUrlJobErrorDetails
+    ImportAssetFromSignedUrlJobErrorDetails (ImportAssetFromSignedUrlJobErrorDetails'),
+    newImportAssetFromSignedUrlJobErrorDetails,
+
+    -- ** ImportAssetFromSignedUrlRequestDetails
+    ImportAssetFromSignedUrlRequestDetails (ImportAssetFromSignedUrlRequestDetails'),
+    newImportAssetFromSignedUrlRequestDetails,
+
+    -- ** ImportAssetFromSignedUrlResponseDetails
+    ImportAssetFromSignedUrlResponseDetails (ImportAssetFromSignedUrlResponseDetails'),
+    newImportAssetFromSignedUrlResponseDetails,
+
+    -- ** ImportAssetsFromLakeFormationTagPolicyRequestDetails
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails (ImportAssetsFromLakeFormationTagPolicyRequestDetails'),
+    newImportAssetsFromLakeFormationTagPolicyRequestDetails,
+
+    -- ** ImportAssetsFromLakeFormationTagPolicyResponseDetails
+    ImportAssetsFromLakeFormationTagPolicyResponseDetails (ImportAssetsFromLakeFormationTagPolicyResponseDetails'),
+    newImportAssetsFromLakeFormationTagPolicyResponseDetails,
+
+    -- ** ImportAssetsFromRedshiftDataSharesRequestDetails
+    ImportAssetsFromRedshiftDataSharesRequestDetails (ImportAssetsFromRedshiftDataSharesRequestDetails'),
+    newImportAssetsFromRedshiftDataSharesRequestDetails,
+
+    -- ** ImportAssetsFromRedshiftDataSharesResponseDetails
+    ImportAssetsFromRedshiftDataSharesResponseDetails (ImportAssetsFromRedshiftDataSharesResponseDetails'),
+    newImportAssetsFromRedshiftDataSharesResponseDetails,
+
+    -- ** ImportAssetsFromS3RequestDetails
+    ImportAssetsFromS3RequestDetails (ImportAssetsFromS3RequestDetails'),
+    newImportAssetsFromS3RequestDetails,
+
+    -- ** ImportAssetsFromS3ResponseDetails
+    ImportAssetsFromS3ResponseDetails (ImportAssetsFromS3ResponseDetails'),
+    newImportAssetsFromS3ResponseDetails,
+
+    -- ** JobEntry
+    JobEntry (JobEntry'),
+    newJobEntry,
+
+    -- ** JobError
+    JobError (JobError'),
+    newJobError,
+
+    -- ** LFResourceDetails
+    LFResourceDetails (LFResourceDetails'),
+    newLFResourceDetails,
+
+    -- ** LFTag
+    LFTag (LFTag'),
+    newLFTag,
+
+    -- ** LFTagPolicyDetails
+    LFTagPolicyDetails (LFTagPolicyDetails'),
+    newLFTagPolicyDetails,
+
+    -- ** LakeFormationDataPermissionAsset
+    LakeFormationDataPermissionAsset (LakeFormationDataPermissionAsset'),
+    newLakeFormationDataPermissionAsset,
+
+    -- ** LakeFormationDataPermissionDetails
+    LakeFormationDataPermissionDetails (LakeFormationDataPermissionDetails'),
+    newLakeFormationDataPermissionDetails,
+
+    -- ** OriginDetails
+    OriginDetails (OriginDetails'),
+    newOriginDetails,
+
+    -- ** RedshiftDataShareAsset
+    RedshiftDataShareAsset (RedshiftDataShareAsset'),
+    newRedshiftDataShareAsset,
+
+    -- ** RedshiftDataShareAssetSourceEntry
+    RedshiftDataShareAssetSourceEntry (RedshiftDataShareAssetSourceEntry'),
+    newRedshiftDataShareAssetSourceEntry,
+
+    -- ** RequestDetails
+    RequestDetails (RequestDetails'),
+    newRequestDetails,
+
+    -- ** ResponseDetails
+    ResponseDetails (ResponseDetails'),
+    newResponseDetails,
+
+    -- ** RevisionDestinationEntry
+    RevisionDestinationEntry (RevisionDestinationEntry'),
+    newRevisionDestinationEntry,
+
+    -- ** RevisionEntry
+    RevisionEntry (RevisionEntry'),
+    newRevisionEntry,
+
+    -- ** RevisionPublished
+    RevisionPublished (RevisionPublished'),
+    newRevisionPublished,
+
+    -- ** S3DataAccessAsset
+    S3DataAccessAsset (S3DataAccessAsset'),
+    newS3DataAccessAsset,
+
+    -- ** S3DataAccessAssetSourceEntry
+    S3DataAccessAssetSourceEntry (S3DataAccessAssetSourceEntry'),
+    newS3DataAccessAssetSourceEntry,
+
+    -- ** S3SnapshotAsset
+    S3SnapshotAsset (S3SnapshotAsset'),
+    newS3SnapshotAsset,
+
+    -- ** TableLFTagPolicy
+    TableLFTagPolicy (TableLFTagPolicy'),
+    newTableLFTagPolicy,
+
+    -- ** TableLFTagPolicyAndPermissions
+    TableLFTagPolicyAndPermissions (TableLFTagPolicyAndPermissions'),
+    newTableLFTagPolicyAndPermissions,
+  )
+where
+
+import Amazonka.DataExchange.CancelJob
+import Amazonka.DataExchange.CreateDataSet
+import Amazonka.DataExchange.CreateEventAction
+import Amazonka.DataExchange.CreateJob
+import Amazonka.DataExchange.CreateRevision
+import Amazonka.DataExchange.DeleteAsset
+import Amazonka.DataExchange.DeleteDataSet
+import Amazonka.DataExchange.DeleteEventAction
+import Amazonka.DataExchange.DeleteRevision
+import Amazonka.DataExchange.GetAsset
+import Amazonka.DataExchange.GetDataSet
+import Amazonka.DataExchange.GetEventAction
+import Amazonka.DataExchange.GetJob
+import Amazonka.DataExchange.GetRevision
+import Amazonka.DataExchange.Lens
+import Amazonka.DataExchange.ListDataSetRevisions
+import Amazonka.DataExchange.ListDataSets
+import Amazonka.DataExchange.ListEventActions
+import Amazonka.DataExchange.ListJobs
+import Amazonka.DataExchange.ListRevisionAssets
+import Amazonka.DataExchange.ListTagsForResource
+import Amazonka.DataExchange.RevokeRevision
+import Amazonka.DataExchange.SendApiAsset
+import Amazonka.DataExchange.StartJob
+import Amazonka.DataExchange.TagResource
+import Amazonka.DataExchange.Types
+import Amazonka.DataExchange.UntagResource
+import Amazonka.DataExchange.UpdateAsset
+import Amazonka.DataExchange.UpdateDataSet
+import Amazonka.DataExchange.UpdateEventAction
+import Amazonka.DataExchange.UpdateRevision
+import Amazonka.DataExchange.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 'DataExchange'.
+
+-- $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/DataExchange/CancelJob.hs b/gen/Amazonka/DataExchange/CancelJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/CancelJob.hs
@@ -0,0 +1,119 @@
+{-# 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.DataExchange.CancelJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation cancels a job. Jobs can be cancelled only when they are
+-- in the WAITING state.
+module Amazonka.DataExchange.CancelJob
+  ( -- * Creating a Request
+    CancelJob (..),
+    newCancelJob,
+
+    -- * Request Lenses
+    cancelJob_jobId,
+
+    -- * Destructuring the Response
+    CancelJobResponse (..),
+    newCancelJobResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelJob' smart constructor.
+data CancelJob = CancelJob'
+  { -- | The unique identifier for a job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'cancelJob_jobId' - The unique identifier for a job.
+newCancelJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  CancelJob
+newCancelJob pJobId_ = CancelJob' {jobId = pJobId_}
+
+-- | The unique identifier for a job.
+cancelJob_jobId :: Lens.Lens' CancelJob Prelude.Text
+cancelJob_jobId = Lens.lens (\CancelJob' {jobId} -> jobId) (\s@CancelJob' {} a -> s {jobId = a} :: CancelJob)
+
+instance Core.AWSRequest CancelJob where
+  type AWSResponse CancelJob = CancelJobResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull CancelJobResponse'
+
+instance Prelude.Hashable CancelJob where
+  hashWithSalt _salt CancelJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData CancelJob where
+  rnf CancelJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders CancelJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath CancelJob where
+  toPath CancelJob' {..} =
+    Prelude.mconcat ["/v1/jobs/", Data.toBS jobId]
+
+instance Data.ToQuery CancelJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelJobResponse' smart constructor.
+data CancelJobResponse = CancelJobResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCancelJobResponse ::
+  CancelJobResponse
+newCancelJobResponse = CancelJobResponse'
+
+instance Prelude.NFData CancelJobResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DataExchange/CreateDataSet.hs b/gen/Amazonka/DataExchange/CreateDataSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/CreateDataSet.hs
@@ -0,0 +1,361 @@
+{-# 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.DataExchange.CreateDataSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation creates a data set.
+module Amazonka.DataExchange.CreateDataSet
+  ( -- * Creating a Request
+    CreateDataSet (..),
+    newCreateDataSet,
+
+    -- * Request Lenses
+    createDataSet_tags,
+    createDataSet_assetType,
+    createDataSet_description,
+    createDataSet_name,
+
+    -- * Destructuring the Response
+    CreateDataSetResponse (..),
+    newCreateDataSetResponse,
+
+    -- * Response Lenses
+    createDataSetResponse_arn,
+    createDataSetResponse_assetType,
+    createDataSetResponse_createdAt,
+    createDataSetResponse_description,
+    createDataSetResponse_id,
+    createDataSetResponse_name,
+    createDataSetResponse_origin,
+    createDataSetResponse_originDetails,
+    createDataSetResponse_sourceId,
+    createDataSetResponse_tags,
+    createDataSetResponse_updatedAt,
+    createDataSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDataSet' smart constructor.
+data CreateDataSet = CreateDataSet'
+  { -- | A data set tag is an optional label that you can assign to a data set
+    -- when you create it. Each tag consists of a key and an optional value,
+    -- both of which you define. When you use tagging, you can also use
+    -- tag-based access control in IAM policies to control access to these data
+    -- sets and revisions.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The type of asset that is added to a data set.
+    assetType :: AssetType,
+    -- | A description for the data set. This value can be up to 16,348
+    -- characters long.
+    description :: Prelude.Text,
+    -- | The name of the data set.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDataSet_tags' - A data set tag is an optional label that you can assign to a data set
+-- when you create it. Each tag consists of a key and an optional value,
+-- both of which you define. When you use tagging, you can also use
+-- tag-based access control in IAM policies to control access to these data
+-- sets and revisions.
+--
+-- 'assetType', 'createDataSet_assetType' - The type of asset that is added to a data set.
+--
+-- 'description', 'createDataSet_description' - A description for the data set. This value can be up to 16,348
+-- characters long.
+--
+-- 'name', 'createDataSet_name' - The name of the data set.
+newCreateDataSet ::
+  -- | 'assetType'
+  AssetType ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateDataSet
+newCreateDataSet pAssetType_ pDescription_ pName_ =
+  CreateDataSet'
+    { tags = Prelude.Nothing,
+      assetType = pAssetType_,
+      description = pDescription_,
+      name = pName_
+    }
+
+-- | A data set tag is an optional label that you can assign to a data set
+-- when you create it. Each tag consists of a key and an optional value,
+-- both of which you define. When you use tagging, you can also use
+-- tag-based access control in IAM policies to control access to these data
+-- sets and revisions.
+createDataSet_tags :: Lens.Lens' CreateDataSet (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDataSet_tags = Lens.lens (\CreateDataSet' {tags} -> tags) (\s@CreateDataSet' {} a -> s {tags = a} :: CreateDataSet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of asset that is added to a data set.
+createDataSet_assetType :: Lens.Lens' CreateDataSet AssetType
+createDataSet_assetType = Lens.lens (\CreateDataSet' {assetType} -> assetType) (\s@CreateDataSet' {} a -> s {assetType = a} :: CreateDataSet)
+
+-- | A description for the data set. This value can be up to 16,348
+-- characters long.
+createDataSet_description :: Lens.Lens' CreateDataSet Prelude.Text
+createDataSet_description = Lens.lens (\CreateDataSet' {description} -> description) (\s@CreateDataSet' {} a -> s {description = a} :: CreateDataSet)
+
+-- | The name of the data set.
+createDataSet_name :: Lens.Lens' CreateDataSet Prelude.Text
+createDataSet_name = Lens.lens (\CreateDataSet' {name} -> name) (\s@CreateDataSet' {} a -> s {name = a} :: CreateDataSet)
+
+instance Core.AWSRequest CreateDataSet where
+  type
+    AWSResponse CreateDataSet =
+      CreateDataSetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDataSetResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "AssetType")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Origin")
+            Prelude.<*> (x Data..?> "OriginDetails")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDataSet where
+  hashWithSalt _salt CreateDataSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` assetType
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateDataSet where
+  rnf CreateDataSet' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf assetType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateDataSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDataSet where
+  toJSON CreateDataSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("AssetType" Data..= assetType),
+            Prelude.Just ("Description" Data..= description),
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateDataSet where
+  toPath = Prelude.const "/v1/data-sets"
+
+instance Data.ToQuery CreateDataSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDataSetResponse' smart constructor.
+data CreateDataSetResponse = CreateDataSetResponse'
+  { -- | The ARN for the data set.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The type of asset that is added to a data set.
+    assetType :: Prelude.Maybe AssetType,
+    -- | The date and time that the data set was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The description for the data set.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the data set.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data set.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A property that defines the data set as OWNED by the account (for
+    -- providers) or ENTITLED to the account (for subscribers).
+    origin :: Prelude.Maybe Origin,
+    -- | If the origin of this data set is ENTITLED, includes the details for the
+    -- product on AWS Marketplace.
+    originDetails :: Prelude.Maybe OriginDetails,
+    -- | The data set ID of the owned data set corresponding to the entitled data
+    -- set being viewed. This parameter is returned when a data set owner is
+    -- viewing the entitled copy of its owned data set.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the data set.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The date and time that the data set was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createDataSetResponse_arn' - The ARN for the data set.
+--
+-- 'assetType', 'createDataSetResponse_assetType' - The type of asset that is added to a data set.
+--
+-- 'createdAt', 'createDataSetResponse_createdAt' - The date and time that the data set was created, in ISO 8601 format.
+--
+-- 'description', 'createDataSetResponse_description' - The description for the data set.
+--
+-- 'id', 'createDataSetResponse_id' - The unique identifier for the data set.
+--
+-- 'name', 'createDataSetResponse_name' - The name of the data set.
+--
+-- 'origin', 'createDataSetResponse_origin' - A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+--
+-- 'originDetails', 'createDataSetResponse_originDetails' - If the origin of this data set is ENTITLED, includes the details for the
+-- product on AWS Marketplace.
+--
+-- 'sourceId', 'createDataSetResponse_sourceId' - The data set ID of the owned data set corresponding to the entitled data
+-- set being viewed. This parameter is returned when a data set owner is
+-- viewing the entitled copy of its owned data set.
+--
+-- 'tags', 'createDataSetResponse_tags' - The tags for the data set.
+--
+-- 'updatedAt', 'createDataSetResponse_updatedAt' - The date and time that the data set was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'createDataSetResponse_httpStatus' - The response's http status code.
+newCreateDataSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDataSetResponse
+newCreateDataSetResponse pHttpStatus_ =
+  CreateDataSetResponse'
+    { arn = Prelude.Nothing,
+      assetType = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      origin = Prelude.Nothing,
+      originDetails = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the data set.
+createDataSetResponse_arn :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe Prelude.Text)
+createDataSetResponse_arn = Lens.lens (\CreateDataSetResponse' {arn} -> arn) (\s@CreateDataSetResponse' {} a -> s {arn = a} :: CreateDataSetResponse)
+
+-- | The type of asset that is added to a data set.
+createDataSetResponse_assetType :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe AssetType)
+createDataSetResponse_assetType = Lens.lens (\CreateDataSetResponse' {assetType} -> assetType) (\s@CreateDataSetResponse' {} a -> s {assetType = a} :: CreateDataSetResponse)
+
+-- | The date and time that the data set was created, in ISO 8601 format.
+createDataSetResponse_createdAt :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe Prelude.UTCTime)
+createDataSetResponse_createdAt = Lens.lens (\CreateDataSetResponse' {createdAt} -> createdAt) (\s@CreateDataSetResponse' {} a -> s {createdAt = a} :: CreateDataSetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description for the data set.
+createDataSetResponse_description :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe Prelude.Text)
+createDataSetResponse_description = Lens.lens (\CreateDataSetResponse' {description} -> description) (\s@CreateDataSetResponse' {} a -> s {description = a} :: CreateDataSetResponse)
+
+-- | The unique identifier for the data set.
+createDataSetResponse_id :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe Prelude.Text)
+createDataSetResponse_id = Lens.lens (\CreateDataSetResponse' {id} -> id) (\s@CreateDataSetResponse' {} a -> s {id = a} :: CreateDataSetResponse)
+
+-- | The name of the data set.
+createDataSetResponse_name :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe Prelude.Text)
+createDataSetResponse_name = Lens.lens (\CreateDataSetResponse' {name} -> name) (\s@CreateDataSetResponse' {} a -> s {name = a} :: CreateDataSetResponse)
+
+-- | A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+createDataSetResponse_origin :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe Origin)
+createDataSetResponse_origin = Lens.lens (\CreateDataSetResponse' {origin} -> origin) (\s@CreateDataSetResponse' {} a -> s {origin = a} :: CreateDataSetResponse)
+
+-- | If the origin of this data set is ENTITLED, includes the details for the
+-- product on AWS Marketplace.
+createDataSetResponse_originDetails :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe OriginDetails)
+createDataSetResponse_originDetails = Lens.lens (\CreateDataSetResponse' {originDetails} -> originDetails) (\s@CreateDataSetResponse' {} a -> s {originDetails = a} :: CreateDataSetResponse)
+
+-- | The data set ID of the owned data set corresponding to the entitled data
+-- set being viewed. This parameter is returned when a data set owner is
+-- viewing the entitled copy of its owned data set.
+createDataSetResponse_sourceId :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe Prelude.Text)
+createDataSetResponse_sourceId = Lens.lens (\CreateDataSetResponse' {sourceId} -> sourceId) (\s@CreateDataSetResponse' {} a -> s {sourceId = a} :: CreateDataSetResponse)
+
+-- | The tags for the data set.
+createDataSetResponse_tags :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createDataSetResponse_tags = Lens.lens (\CreateDataSetResponse' {tags} -> tags) (\s@CreateDataSetResponse' {} a -> s {tags = a} :: CreateDataSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time that the data set was last updated, in ISO 8601
+-- format.
+createDataSetResponse_updatedAt :: Lens.Lens' CreateDataSetResponse (Prelude.Maybe Prelude.UTCTime)
+createDataSetResponse_updatedAt = Lens.lens (\CreateDataSetResponse' {updatedAt} -> updatedAt) (\s@CreateDataSetResponse' {} a -> s {updatedAt = a} :: CreateDataSetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+createDataSetResponse_httpStatus :: Lens.Lens' CreateDataSetResponse Prelude.Int
+createDataSetResponse_httpStatus = Lens.lens (\CreateDataSetResponse' {httpStatus} -> httpStatus) (\s@CreateDataSetResponse' {} a -> s {httpStatus = a} :: CreateDataSetResponse)
+
+instance Prelude.NFData CreateDataSetResponse where
+  rnf CreateDataSetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf assetType
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf originDetails
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/CreateEventAction.hs b/gen/Amazonka/DataExchange/CreateEventAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/CreateEventAction.hs
@@ -0,0 +1,246 @@
+{-# 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.DataExchange.CreateEventAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation creates an event action.
+module Amazonka.DataExchange.CreateEventAction
+  ( -- * Creating a Request
+    CreateEventAction (..),
+    newCreateEventAction,
+
+    -- * Request Lenses
+    createEventAction_action,
+    createEventAction_event,
+
+    -- * Destructuring the Response
+    CreateEventActionResponse (..),
+    newCreateEventActionResponse,
+
+    -- * Response Lenses
+    createEventActionResponse_action,
+    createEventActionResponse_arn,
+    createEventActionResponse_createdAt,
+    createEventActionResponse_event,
+    createEventActionResponse_id,
+    createEventActionResponse_updatedAt,
+    createEventActionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateEventAction' smart constructor.
+data CreateEventAction = CreateEventAction'
+  { -- | What occurs after a certain event.
+    action :: Action,
+    -- | What occurs to start an action.
+    event :: Event
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEventAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'createEventAction_action' - What occurs after a certain event.
+--
+-- 'event', 'createEventAction_event' - What occurs to start an action.
+newCreateEventAction ::
+  -- | 'action'
+  Action ->
+  -- | 'event'
+  Event ->
+  CreateEventAction
+newCreateEventAction pAction_ pEvent_ =
+  CreateEventAction'
+    { action = pAction_,
+      event = pEvent_
+    }
+
+-- | What occurs after a certain event.
+createEventAction_action :: Lens.Lens' CreateEventAction Action
+createEventAction_action = Lens.lens (\CreateEventAction' {action} -> action) (\s@CreateEventAction' {} a -> s {action = a} :: CreateEventAction)
+
+-- | What occurs to start an action.
+createEventAction_event :: Lens.Lens' CreateEventAction Event
+createEventAction_event = Lens.lens (\CreateEventAction' {event} -> event) (\s@CreateEventAction' {} a -> s {event = a} :: CreateEventAction)
+
+instance Core.AWSRequest CreateEventAction where
+  type
+    AWSResponse CreateEventAction =
+      CreateEventActionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateEventActionResponse'
+            Prelude.<$> (x Data..?> "Action")
+            Prelude.<*> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Event")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateEventAction where
+  hashWithSalt _salt CreateEventAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` event
+
+instance Prelude.NFData CreateEventAction where
+  rnf CreateEventAction' {..} =
+    Prelude.rnf action `Prelude.seq` Prelude.rnf event
+
+instance Data.ToHeaders CreateEventAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEventAction where
+  toJSON CreateEventAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Action" Data..= action),
+            Prelude.Just ("Event" Data..= event)
+          ]
+      )
+
+instance Data.ToPath CreateEventAction where
+  toPath = Prelude.const "/v1/event-actions"
+
+instance Data.ToQuery CreateEventAction where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateEventActionResponse' smart constructor.
+data CreateEventActionResponse = CreateEventActionResponse'
+  { -- | What occurs after a certain event.
+    action :: Prelude.Maybe Action,
+    -- | The ARN for the event action.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the event action was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | What occurs to start an action.
+    event :: Prelude.Maybe Event,
+    -- | The unique identifier for the event action.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the event action was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEventActionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'createEventActionResponse_action' - What occurs after a certain event.
+--
+-- 'arn', 'createEventActionResponse_arn' - The ARN for the event action.
+--
+-- 'createdAt', 'createEventActionResponse_createdAt' - The date and time that the event action was created, in ISO 8601 format.
+--
+-- 'event', 'createEventActionResponse_event' - What occurs to start an action.
+--
+-- 'id', 'createEventActionResponse_id' - The unique identifier for the event action.
+--
+-- 'updatedAt', 'createEventActionResponse_updatedAt' - The date and time that the event action was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'createEventActionResponse_httpStatus' - The response's http status code.
+newCreateEventActionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEventActionResponse
+newCreateEventActionResponse pHttpStatus_ =
+  CreateEventActionResponse'
+    { action =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      event = Prelude.Nothing,
+      id = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | What occurs after a certain event.
+createEventActionResponse_action :: Lens.Lens' CreateEventActionResponse (Prelude.Maybe Action)
+createEventActionResponse_action = Lens.lens (\CreateEventActionResponse' {action} -> action) (\s@CreateEventActionResponse' {} a -> s {action = a} :: CreateEventActionResponse)
+
+-- | The ARN for the event action.
+createEventActionResponse_arn :: Lens.Lens' CreateEventActionResponse (Prelude.Maybe Prelude.Text)
+createEventActionResponse_arn = Lens.lens (\CreateEventActionResponse' {arn} -> arn) (\s@CreateEventActionResponse' {} a -> s {arn = a} :: CreateEventActionResponse)
+
+-- | The date and time that the event action was created, in ISO 8601 format.
+createEventActionResponse_createdAt :: Lens.Lens' CreateEventActionResponse (Prelude.Maybe Prelude.UTCTime)
+createEventActionResponse_createdAt = Lens.lens (\CreateEventActionResponse' {createdAt} -> createdAt) (\s@CreateEventActionResponse' {} a -> s {createdAt = a} :: CreateEventActionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | What occurs to start an action.
+createEventActionResponse_event :: Lens.Lens' CreateEventActionResponse (Prelude.Maybe Event)
+createEventActionResponse_event = Lens.lens (\CreateEventActionResponse' {event} -> event) (\s@CreateEventActionResponse' {} a -> s {event = a} :: CreateEventActionResponse)
+
+-- | The unique identifier for the event action.
+createEventActionResponse_id :: Lens.Lens' CreateEventActionResponse (Prelude.Maybe Prelude.Text)
+createEventActionResponse_id = Lens.lens (\CreateEventActionResponse' {id} -> id) (\s@CreateEventActionResponse' {} a -> s {id = a} :: CreateEventActionResponse)
+
+-- | The date and time that the event action was last updated, in ISO 8601
+-- format.
+createEventActionResponse_updatedAt :: Lens.Lens' CreateEventActionResponse (Prelude.Maybe Prelude.UTCTime)
+createEventActionResponse_updatedAt = Lens.lens (\CreateEventActionResponse' {updatedAt} -> updatedAt) (\s@CreateEventActionResponse' {} a -> s {updatedAt = a} :: CreateEventActionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+createEventActionResponse_httpStatus :: Lens.Lens' CreateEventActionResponse Prelude.Int
+createEventActionResponse_httpStatus = Lens.lens (\CreateEventActionResponse' {httpStatus} -> httpStatus) (\s@CreateEventActionResponse' {} a -> s {httpStatus = a} :: CreateEventActionResponse)
+
+instance Prelude.NFData CreateEventActionResponse where
+  rnf CreateEventActionResponse' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf event
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/CreateJob.hs b/gen/Amazonka/DataExchange/CreateJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/CreateJob.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.DataExchange.CreateJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation creates a job.
+module Amazonka.DataExchange.CreateJob
+  ( -- * Creating a Request
+    CreateJob (..),
+    newCreateJob,
+
+    -- * Request Lenses
+    createJob_details,
+    createJob_type,
+
+    -- * Destructuring the Response
+    CreateJobResponse (..),
+    newCreateJobResponse,
+
+    -- * Response Lenses
+    createJobResponse_arn,
+    createJobResponse_createdAt,
+    createJobResponse_details,
+    createJobResponse_errors,
+    createJobResponse_id,
+    createJobResponse_state,
+    createJobResponse_type,
+    createJobResponse_updatedAt,
+    createJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateJob' smart constructor.
+data CreateJob = CreateJob'
+  { -- | The details for the CreateJob request.
+    details :: RequestDetails,
+    -- | The type of job to be created.
+    type' :: Type
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'details', 'createJob_details' - The details for the CreateJob request.
+--
+-- 'type'', 'createJob_type' - The type of job to be created.
+newCreateJob ::
+  -- | 'details'
+  RequestDetails ->
+  -- | 'type''
+  Type ->
+  CreateJob
+newCreateJob pDetails_ pType_ =
+  CreateJob' {details = pDetails_, type' = pType_}
+
+-- | The details for the CreateJob request.
+createJob_details :: Lens.Lens' CreateJob RequestDetails
+createJob_details = Lens.lens (\CreateJob' {details} -> details) (\s@CreateJob' {} a -> s {details = a} :: CreateJob)
+
+-- | The type of job to be created.
+createJob_type :: Lens.Lens' CreateJob Type
+createJob_type = Lens.lens (\CreateJob' {type'} -> type') (\s@CreateJob' {} a -> s {type' = a} :: CreateJob)
+
+instance Core.AWSRequest CreateJob where
+  type AWSResponse CreateJob = CreateJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateJobResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Details")
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "State")
+            Prelude.<*> (x Data..?> "Type")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateJob where
+  hashWithSalt _salt CreateJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` details
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateJob where
+  rnf CreateJob' {..} =
+    Prelude.rnf details `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateJob where
+  toJSON CreateJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Details" Data..= details),
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateJob where
+  toPath = Prelude.const "/v1/jobs"
+
+instance Data.ToQuery CreateJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateJobResponse' smart constructor.
+data CreateJobResponse = CreateJobResponse'
+  { -- | The ARN for the job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the job was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | Details about the job.
+    details :: Prelude.Maybe ResponseDetails,
+    -- | The errors associated with jobs.
+    errors :: Prelude.Maybe [JobError],
+    -- | The unique identifier for the job.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The state of the job.
+    state :: Prelude.Maybe State,
+    -- | The job type.
+    type' :: Prelude.Maybe Type,
+    -- | The date and time that the job was last updated, in ISO 8601 format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createJobResponse_arn' - The ARN for the job.
+--
+-- 'createdAt', 'createJobResponse_createdAt' - The date and time that the job was created, in ISO 8601 format.
+--
+-- 'details', 'createJobResponse_details' - Details about the job.
+--
+-- 'errors', 'createJobResponse_errors' - The errors associated with jobs.
+--
+-- 'id', 'createJobResponse_id' - The unique identifier for the job.
+--
+-- 'state', 'createJobResponse_state' - The state of the job.
+--
+-- 'type'', 'createJobResponse_type' - The job type.
+--
+-- 'updatedAt', 'createJobResponse_updatedAt' - The date and time that the job was last updated, in ISO 8601 format.
+--
+-- 'httpStatus', 'createJobResponse_httpStatus' - The response's http status code.
+newCreateJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateJobResponse
+newCreateJobResponse pHttpStatus_ =
+  CreateJobResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      details = Prelude.Nothing,
+      errors = Prelude.Nothing,
+      id = Prelude.Nothing,
+      state = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the job.
+createJobResponse_arn :: Lens.Lens' CreateJobResponse (Prelude.Maybe Prelude.Text)
+createJobResponse_arn = Lens.lens (\CreateJobResponse' {arn} -> arn) (\s@CreateJobResponse' {} a -> s {arn = a} :: CreateJobResponse)
+
+-- | The date and time that the job was created, in ISO 8601 format.
+createJobResponse_createdAt :: Lens.Lens' CreateJobResponse (Prelude.Maybe Prelude.UTCTime)
+createJobResponse_createdAt = Lens.lens (\CreateJobResponse' {createdAt} -> createdAt) (\s@CreateJobResponse' {} a -> s {createdAt = a} :: CreateJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Details about the job.
+createJobResponse_details :: Lens.Lens' CreateJobResponse (Prelude.Maybe ResponseDetails)
+createJobResponse_details = Lens.lens (\CreateJobResponse' {details} -> details) (\s@CreateJobResponse' {} a -> s {details = a} :: CreateJobResponse)
+
+-- | The errors associated with jobs.
+createJobResponse_errors :: Lens.Lens' CreateJobResponse (Prelude.Maybe [JobError])
+createJobResponse_errors = Lens.lens (\CreateJobResponse' {errors} -> errors) (\s@CreateJobResponse' {} a -> s {errors = a} :: CreateJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier for the job.
+createJobResponse_id :: Lens.Lens' CreateJobResponse (Prelude.Maybe Prelude.Text)
+createJobResponse_id = Lens.lens (\CreateJobResponse' {id} -> id) (\s@CreateJobResponse' {} a -> s {id = a} :: CreateJobResponse)
+
+-- | The state of the job.
+createJobResponse_state :: Lens.Lens' CreateJobResponse (Prelude.Maybe State)
+createJobResponse_state = Lens.lens (\CreateJobResponse' {state} -> state) (\s@CreateJobResponse' {} a -> s {state = a} :: CreateJobResponse)
+
+-- | The job type.
+createJobResponse_type :: Lens.Lens' CreateJobResponse (Prelude.Maybe Type)
+createJobResponse_type = Lens.lens (\CreateJobResponse' {type'} -> type') (\s@CreateJobResponse' {} a -> s {type' = a} :: CreateJobResponse)
+
+-- | The date and time that the job was last updated, in ISO 8601 format.
+createJobResponse_updatedAt :: Lens.Lens' CreateJobResponse (Prelude.Maybe Prelude.UTCTime)
+createJobResponse_updatedAt = Lens.lens (\CreateJobResponse' {updatedAt} -> updatedAt) (\s@CreateJobResponse' {} a -> s {updatedAt = a} :: CreateJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+createJobResponse_httpStatus :: Lens.Lens' CreateJobResponse Prelude.Int
+createJobResponse_httpStatus = Lens.lens (\CreateJobResponse' {httpStatus} -> httpStatus) (\s@CreateJobResponse' {} a -> s {httpStatus = a} :: CreateJobResponse)
+
+instance Prelude.NFData CreateJobResponse where
+  rnf CreateJobResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf details
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/CreateRevision.hs b/gen/Amazonka/DataExchange/CreateRevision.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/CreateRevision.hs
@@ -0,0 +1,378 @@
+{-# 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.DataExchange.CreateRevision
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation creates a revision for a data set.
+module Amazonka.DataExchange.CreateRevision
+  ( -- * Creating a Request
+    CreateRevision (..),
+    newCreateRevision,
+
+    -- * Request Lenses
+    createRevision_comment,
+    createRevision_tags,
+    createRevision_dataSetId,
+
+    -- * Destructuring the Response
+    CreateRevisionResponse (..),
+    newCreateRevisionResponse,
+
+    -- * Response Lenses
+    createRevisionResponse_arn,
+    createRevisionResponse_comment,
+    createRevisionResponse_createdAt,
+    createRevisionResponse_dataSetId,
+    createRevisionResponse_finalized,
+    createRevisionResponse_id,
+    createRevisionResponse_revocationComment,
+    createRevisionResponse_revoked,
+    createRevisionResponse_revokedAt,
+    createRevisionResponse_sourceId,
+    createRevisionResponse_tags,
+    createRevisionResponse_updatedAt,
+    createRevisionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRevision' smart constructor.
+data CreateRevision = CreateRevision'
+  { -- | An optional comment about the revision.
+    comment :: Prelude.Maybe Prelude.Text,
+    -- | A revision tag is an optional label that you can assign to a revision
+    -- when you create it. Each tag consists of a key and an optional value,
+    -- both of which you define. When you use tagging, you can also use
+    -- tag-based access control in IAM policies to control access to these data
+    -- sets and revisions.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRevision' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comment', 'createRevision_comment' - An optional comment about the revision.
+--
+-- 'tags', 'createRevision_tags' - A revision tag is an optional label that you can assign to a revision
+-- when you create it. Each tag consists of a key and an optional value,
+-- both of which you define. When you use tagging, you can also use
+-- tag-based access control in IAM policies to control access to these data
+-- sets and revisions.
+--
+-- 'dataSetId', 'createRevision_dataSetId' - The unique identifier for a data set.
+newCreateRevision ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  CreateRevision
+newCreateRevision pDataSetId_ =
+  CreateRevision'
+    { comment = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      dataSetId = pDataSetId_
+    }
+
+-- | An optional comment about the revision.
+createRevision_comment :: Lens.Lens' CreateRevision (Prelude.Maybe Prelude.Text)
+createRevision_comment = Lens.lens (\CreateRevision' {comment} -> comment) (\s@CreateRevision' {} a -> s {comment = a} :: CreateRevision)
+
+-- | A revision tag is an optional label that you can assign to a revision
+-- when you create it. Each tag consists of a key and an optional value,
+-- both of which you define. When you use tagging, you can also use
+-- tag-based access control in IAM policies to control access to these data
+-- sets and revisions.
+createRevision_tags :: Lens.Lens' CreateRevision (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRevision_tags = Lens.lens (\CreateRevision' {tags} -> tags) (\s@CreateRevision' {} a -> s {tags = a} :: CreateRevision) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier for a data set.
+createRevision_dataSetId :: Lens.Lens' CreateRevision Prelude.Text
+createRevision_dataSetId = Lens.lens (\CreateRevision' {dataSetId} -> dataSetId) (\s@CreateRevision' {} a -> s {dataSetId = a} :: CreateRevision)
+
+instance Core.AWSRequest CreateRevision where
+  type
+    AWSResponse CreateRevision =
+      CreateRevisionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRevisionResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Comment")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "DataSetId")
+            Prelude.<*> (x Data..?> "Finalized")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "RevocationComment")
+            Prelude.<*> (x Data..?> "Revoked")
+            Prelude.<*> (x Data..?> "RevokedAt")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRevision where
+  hashWithSalt _salt CreateRevision' {..} =
+    _salt
+      `Prelude.hashWithSalt` comment
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` dataSetId
+
+instance Prelude.NFData CreateRevision where
+  rnf CreateRevision' {..} =
+    Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf dataSetId
+
+instance Data.ToHeaders CreateRevision where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRevision where
+  toJSON CreateRevision' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Comment" Data..=) Prelude.<$> comment,
+            ("Tags" Data..=) Prelude.<$> tags
+          ]
+      )
+
+instance Data.ToPath CreateRevision where
+  toPath CreateRevision' {..} =
+    Prelude.mconcat
+      ["/v1/data-sets/", Data.toBS dataSetId, "/revisions"]
+
+instance Data.ToQuery CreateRevision where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRevisionResponse' smart constructor.
+data CreateRevisionResponse = CreateRevisionResponse'
+  { -- | The ARN for the revision.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | An optional comment about the revision.
+    comment :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the revision was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the data set associated with the data set
+    -- revision.
+    dataSetId :: Prelude.Maybe Prelude.Text,
+    -- | To publish a revision to a data set in a product, the revision must
+    -- first be finalized. Finalizing a revision tells AWS Data Exchange that
+    -- your changes to the assets in the revision are complete. After it\'s in
+    -- this read-only state, you can publish the revision to your products.
+    -- Finalized revisions can be published through the AWS Data Exchange
+    -- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+    -- Marketplace Catalog API action. When using the API, revisions are
+    -- uniquely identified by their ARN.
+    finalized :: Prelude.Maybe Prelude.Bool,
+    -- | The unique identifier for the revision.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | A required comment to inform subscribers of the reason their access to
+    -- the revision was revoked.
+    revocationComment :: Prelude.Maybe Prelude.Text,
+    -- | A status indicating that subscribers\' access to the revision was
+    -- revoked.
+    revoked :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time that the revision was revoked, in ISO 8601 format.
+    revokedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The revision ID of the owned revision corresponding to the entitled
+    -- revision being viewed. This parameter is returned when a revision owner
+    -- is viewing the entitled copy of its owned revision.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the revision.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The date and time that the revision was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRevisionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createRevisionResponse_arn' - The ARN for the revision.
+--
+-- 'comment', 'createRevisionResponse_comment' - An optional comment about the revision.
+--
+-- 'createdAt', 'createRevisionResponse_createdAt' - The date and time that the revision was created, in ISO 8601 format.
+--
+-- 'dataSetId', 'createRevisionResponse_dataSetId' - The unique identifier for the data set associated with the data set
+-- revision.
+--
+-- 'finalized', 'createRevisionResponse_finalized' - To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- your changes to the assets in the revision are complete. After it\'s in
+-- this read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+--
+-- 'id', 'createRevisionResponse_id' - The unique identifier for the revision.
+--
+-- 'revocationComment', 'createRevisionResponse_revocationComment' - A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+--
+-- 'revoked', 'createRevisionResponse_revoked' - A status indicating that subscribers\' access to the revision was
+-- revoked.
+--
+-- 'revokedAt', 'createRevisionResponse_revokedAt' - The date and time that the revision was revoked, in ISO 8601 format.
+--
+-- 'sourceId', 'createRevisionResponse_sourceId' - The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+--
+-- 'tags', 'createRevisionResponse_tags' - The tags for the revision.
+--
+-- 'updatedAt', 'createRevisionResponse_updatedAt' - The date and time that the revision was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'createRevisionResponse_httpStatus' - The response's http status code.
+newCreateRevisionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRevisionResponse
+newCreateRevisionResponse pHttpStatus_ =
+  CreateRevisionResponse'
+    { arn = Prelude.Nothing,
+      comment = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      dataSetId = Prelude.Nothing,
+      finalized = Prelude.Nothing,
+      id = Prelude.Nothing,
+      revocationComment = Prelude.Nothing,
+      revoked = Prelude.Nothing,
+      revokedAt = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the revision.
+createRevisionResponse_arn :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.Text)
+createRevisionResponse_arn = Lens.lens (\CreateRevisionResponse' {arn} -> arn) (\s@CreateRevisionResponse' {} a -> s {arn = a} :: CreateRevisionResponse)
+
+-- | An optional comment about the revision.
+createRevisionResponse_comment :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.Text)
+createRevisionResponse_comment = Lens.lens (\CreateRevisionResponse' {comment} -> comment) (\s@CreateRevisionResponse' {} a -> s {comment = a} :: CreateRevisionResponse)
+
+-- | The date and time that the revision was created, in ISO 8601 format.
+createRevisionResponse_createdAt :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+createRevisionResponse_createdAt = Lens.lens (\CreateRevisionResponse' {createdAt} -> createdAt) (\s@CreateRevisionResponse' {} a -> s {createdAt = a} :: CreateRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the data set associated with the data set
+-- revision.
+createRevisionResponse_dataSetId :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.Text)
+createRevisionResponse_dataSetId = Lens.lens (\CreateRevisionResponse' {dataSetId} -> dataSetId) (\s@CreateRevisionResponse' {} a -> s {dataSetId = a} :: CreateRevisionResponse)
+
+-- | To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- your changes to the assets in the revision are complete. After it\'s in
+-- this read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+createRevisionResponse_finalized :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.Bool)
+createRevisionResponse_finalized = Lens.lens (\CreateRevisionResponse' {finalized} -> finalized) (\s@CreateRevisionResponse' {} a -> s {finalized = a} :: CreateRevisionResponse)
+
+-- | The unique identifier for the revision.
+createRevisionResponse_id :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.Text)
+createRevisionResponse_id = Lens.lens (\CreateRevisionResponse' {id} -> id) (\s@CreateRevisionResponse' {} a -> s {id = a} :: CreateRevisionResponse)
+
+-- | A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+createRevisionResponse_revocationComment :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.Text)
+createRevisionResponse_revocationComment = Lens.lens (\CreateRevisionResponse' {revocationComment} -> revocationComment) (\s@CreateRevisionResponse' {} a -> s {revocationComment = a} :: CreateRevisionResponse)
+
+-- | A status indicating that subscribers\' access to the revision was
+-- revoked.
+createRevisionResponse_revoked :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.Bool)
+createRevisionResponse_revoked = Lens.lens (\CreateRevisionResponse' {revoked} -> revoked) (\s@CreateRevisionResponse' {} a -> s {revoked = a} :: CreateRevisionResponse)
+
+-- | The date and time that the revision was revoked, in ISO 8601 format.
+createRevisionResponse_revokedAt :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+createRevisionResponse_revokedAt = Lens.lens (\CreateRevisionResponse' {revokedAt} -> revokedAt) (\s@CreateRevisionResponse' {} a -> s {revokedAt = a} :: CreateRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+createRevisionResponse_sourceId :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.Text)
+createRevisionResponse_sourceId = Lens.lens (\CreateRevisionResponse' {sourceId} -> sourceId) (\s@CreateRevisionResponse' {} a -> s {sourceId = a} :: CreateRevisionResponse)
+
+-- | The tags for the revision.
+createRevisionResponse_tags :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRevisionResponse_tags = Lens.lens (\CreateRevisionResponse' {tags} -> tags) (\s@CreateRevisionResponse' {} a -> s {tags = a} :: CreateRevisionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time that the revision was last updated, in ISO 8601
+-- format.
+createRevisionResponse_updatedAt :: Lens.Lens' CreateRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+createRevisionResponse_updatedAt = Lens.lens (\CreateRevisionResponse' {updatedAt} -> updatedAt) (\s@CreateRevisionResponse' {} a -> s {updatedAt = a} :: CreateRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+createRevisionResponse_httpStatus :: Lens.Lens' CreateRevisionResponse Prelude.Int
+createRevisionResponse_httpStatus = Lens.lens (\CreateRevisionResponse' {httpStatus} -> httpStatus) (\s@CreateRevisionResponse' {} a -> s {httpStatus = a} :: CreateRevisionResponse)
+
+instance Prelude.NFData CreateRevisionResponse where
+  rnf CreateRevisionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf finalized
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf revocationComment
+      `Prelude.seq` Prelude.rnf revoked
+      `Prelude.seq` Prelude.rnf revokedAt
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/DeleteAsset.hs b/gen/Amazonka/DataExchange/DeleteAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/DeleteAsset.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.DeleteAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation deletes an asset.
+module Amazonka.DataExchange.DeleteAsset
+  ( -- * Creating a Request
+    DeleteAsset (..),
+    newDeleteAsset,
+
+    -- * Request Lenses
+    deleteAsset_assetId,
+    deleteAsset_dataSetId,
+    deleteAsset_revisionId,
+
+    -- * Destructuring the Response
+    DeleteAssetResponse (..),
+    newDeleteAssetResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAsset' smart constructor.
+data DeleteAsset = DeleteAsset'
+  { -- | The unique identifier for an asset.
+    assetId :: Prelude.Text,
+    -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetId', 'deleteAsset_assetId' - The unique identifier for an asset.
+--
+-- 'dataSetId', 'deleteAsset_dataSetId' - The unique identifier for a data set.
+--
+-- 'revisionId', 'deleteAsset_revisionId' - The unique identifier for a revision.
+newDeleteAsset ::
+  -- | 'assetId'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  DeleteAsset
+newDeleteAsset pAssetId_ pDataSetId_ pRevisionId_ =
+  DeleteAsset'
+    { assetId = pAssetId_,
+      dataSetId = pDataSetId_,
+      revisionId = pRevisionId_
+    }
+
+-- | The unique identifier for an asset.
+deleteAsset_assetId :: Lens.Lens' DeleteAsset Prelude.Text
+deleteAsset_assetId = Lens.lens (\DeleteAsset' {assetId} -> assetId) (\s@DeleteAsset' {} a -> s {assetId = a} :: DeleteAsset)
+
+-- | The unique identifier for a data set.
+deleteAsset_dataSetId :: Lens.Lens' DeleteAsset Prelude.Text
+deleteAsset_dataSetId = Lens.lens (\DeleteAsset' {dataSetId} -> dataSetId) (\s@DeleteAsset' {} a -> s {dataSetId = a} :: DeleteAsset)
+
+-- | The unique identifier for a revision.
+deleteAsset_revisionId :: Lens.Lens' DeleteAsset Prelude.Text
+deleteAsset_revisionId = Lens.lens (\DeleteAsset' {revisionId} -> revisionId) (\s@DeleteAsset' {} a -> s {revisionId = a} :: DeleteAsset)
+
+instance Core.AWSRequest DeleteAsset where
+  type AWSResponse DeleteAsset = DeleteAssetResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteAssetResponse'
+
+instance Prelude.Hashable DeleteAsset where
+  hashWithSalt _salt DeleteAsset' {..} =
+    _salt
+      `Prelude.hashWithSalt` assetId
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData DeleteAsset where
+  rnf DeleteAsset' {..} =
+    Prelude.rnf assetId
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToHeaders DeleteAsset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteAsset where
+  toPath DeleteAsset' {..} =
+    Prelude.mconcat
+      [ "/v1/data-sets/",
+        Data.toBS dataSetId,
+        "/revisions/",
+        Data.toBS revisionId,
+        "/assets/",
+        Data.toBS assetId
+      ]
+
+instance Data.ToQuery DeleteAsset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAssetResponse' smart constructor.
+data DeleteAssetResponse = DeleteAssetResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAssetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteAssetResponse ::
+  DeleteAssetResponse
+newDeleteAssetResponse = DeleteAssetResponse'
+
+instance Prelude.NFData DeleteAssetResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DataExchange/DeleteDataSet.hs b/gen/Amazonka/DataExchange/DeleteDataSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/DeleteDataSet.hs
@@ -0,0 +1,123 @@
+{-# 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.DataExchange.DeleteDataSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation deletes a data set.
+module Amazonka.DataExchange.DeleteDataSet
+  ( -- * Creating a Request
+    DeleteDataSet (..),
+    newDeleteDataSet,
+
+    -- * Request Lenses
+    deleteDataSet_dataSetId,
+
+    -- * Destructuring the Response
+    DeleteDataSetResponse (..),
+    newDeleteDataSetResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDataSet' smart constructor.
+data DeleteDataSet = DeleteDataSet'
+  { -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSetId', 'deleteDataSet_dataSetId' - The unique identifier for a data set.
+newDeleteDataSet ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  DeleteDataSet
+newDeleteDataSet pDataSetId_ =
+  DeleteDataSet' {dataSetId = pDataSetId_}
+
+-- | The unique identifier for a data set.
+deleteDataSet_dataSetId :: Lens.Lens' DeleteDataSet Prelude.Text
+deleteDataSet_dataSetId = Lens.lens (\DeleteDataSet' {dataSetId} -> dataSetId) (\s@DeleteDataSet' {} a -> s {dataSetId = a} :: DeleteDataSet)
+
+instance Core.AWSRequest DeleteDataSet where
+  type
+    AWSResponse DeleteDataSet =
+      DeleteDataSetResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteDataSetResponse'
+
+instance Prelude.Hashable DeleteDataSet where
+  hashWithSalt _salt DeleteDataSet' {..} =
+    _salt `Prelude.hashWithSalt` dataSetId
+
+instance Prelude.NFData DeleteDataSet where
+  rnf DeleteDataSet' {..} = Prelude.rnf dataSetId
+
+instance Data.ToHeaders DeleteDataSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteDataSet where
+  toPath DeleteDataSet' {..} =
+    Prelude.mconcat
+      ["/v1/data-sets/", Data.toBS dataSetId]
+
+instance Data.ToQuery DeleteDataSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDataSetResponse' smart constructor.
+data DeleteDataSetResponse = DeleteDataSetResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDataSetResponse ::
+  DeleteDataSetResponse
+newDeleteDataSetResponse = DeleteDataSetResponse'
+
+instance Prelude.NFData DeleteDataSetResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DataExchange/DeleteEventAction.hs b/gen/Amazonka/DataExchange/DeleteEventAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/DeleteEventAction.hs
@@ -0,0 +1,125 @@
+{-# 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.DataExchange.DeleteEventAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation deletes the event action.
+module Amazonka.DataExchange.DeleteEventAction
+  ( -- * Creating a Request
+    DeleteEventAction (..),
+    newDeleteEventAction,
+
+    -- * Request Lenses
+    deleteEventAction_eventActionId,
+
+    -- * Destructuring the Response
+    DeleteEventActionResponse (..),
+    newDeleteEventActionResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEventAction' smart constructor.
+data DeleteEventAction = DeleteEventAction'
+  { -- | The unique identifier for the event action.
+    eventActionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEventAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventActionId', 'deleteEventAction_eventActionId' - The unique identifier for the event action.
+newDeleteEventAction ::
+  -- | 'eventActionId'
+  Prelude.Text ->
+  DeleteEventAction
+newDeleteEventAction pEventActionId_ =
+  DeleteEventAction' {eventActionId = pEventActionId_}
+
+-- | The unique identifier for the event action.
+deleteEventAction_eventActionId :: Lens.Lens' DeleteEventAction Prelude.Text
+deleteEventAction_eventActionId = Lens.lens (\DeleteEventAction' {eventActionId} -> eventActionId) (\s@DeleteEventAction' {} a -> s {eventActionId = a} :: DeleteEventAction)
+
+instance Core.AWSRequest DeleteEventAction where
+  type
+    AWSResponse DeleteEventAction =
+      DeleteEventActionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteEventActionResponse'
+
+instance Prelude.Hashable DeleteEventAction where
+  hashWithSalt _salt DeleteEventAction' {..} =
+    _salt `Prelude.hashWithSalt` eventActionId
+
+instance Prelude.NFData DeleteEventAction where
+  rnf DeleteEventAction' {..} =
+    Prelude.rnf eventActionId
+
+instance Data.ToHeaders DeleteEventAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteEventAction where
+  toPath DeleteEventAction' {..} =
+    Prelude.mconcat
+      ["/v1/event-actions/", Data.toBS eventActionId]
+
+instance Data.ToQuery DeleteEventAction where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEventActionResponse' smart constructor.
+data DeleteEventActionResponse = DeleteEventActionResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEventActionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteEventActionResponse ::
+  DeleteEventActionResponse
+newDeleteEventActionResponse =
+  DeleteEventActionResponse'
+
+instance Prelude.NFData DeleteEventActionResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DataExchange/DeleteRevision.hs b/gen/Amazonka/DataExchange/DeleteRevision.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/DeleteRevision.hs
@@ -0,0 +1,145 @@
+{-# 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.DataExchange.DeleteRevision
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation deletes a revision.
+module Amazonka.DataExchange.DeleteRevision
+  ( -- * Creating a Request
+    DeleteRevision (..),
+    newDeleteRevision,
+
+    -- * Request Lenses
+    deleteRevision_dataSetId,
+    deleteRevision_revisionId,
+
+    -- * Destructuring the Response
+    DeleteRevisionResponse (..),
+    newDeleteRevisionResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRevision' smart constructor.
+data DeleteRevision = DeleteRevision'
+  { -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRevision' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSetId', 'deleteRevision_dataSetId' - The unique identifier for a data set.
+--
+-- 'revisionId', 'deleteRevision_revisionId' - The unique identifier for a revision.
+newDeleteRevision ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  DeleteRevision
+newDeleteRevision pDataSetId_ pRevisionId_ =
+  DeleteRevision'
+    { dataSetId = pDataSetId_,
+      revisionId = pRevisionId_
+    }
+
+-- | The unique identifier for a data set.
+deleteRevision_dataSetId :: Lens.Lens' DeleteRevision Prelude.Text
+deleteRevision_dataSetId = Lens.lens (\DeleteRevision' {dataSetId} -> dataSetId) (\s@DeleteRevision' {} a -> s {dataSetId = a} :: DeleteRevision)
+
+-- | The unique identifier for a revision.
+deleteRevision_revisionId :: Lens.Lens' DeleteRevision Prelude.Text
+deleteRevision_revisionId = Lens.lens (\DeleteRevision' {revisionId} -> revisionId) (\s@DeleteRevision' {} a -> s {revisionId = a} :: DeleteRevision)
+
+instance Core.AWSRequest DeleteRevision where
+  type
+    AWSResponse DeleteRevision =
+      DeleteRevisionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteRevisionResponse'
+
+instance Prelude.Hashable DeleteRevision where
+  hashWithSalt _salt DeleteRevision' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData DeleteRevision where
+  rnf DeleteRevision' {..} =
+    Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToHeaders DeleteRevision where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRevision where
+  toPath DeleteRevision' {..} =
+    Prelude.mconcat
+      [ "/v1/data-sets/",
+        Data.toBS dataSetId,
+        "/revisions/",
+        Data.toBS revisionId
+      ]
+
+instance Data.ToQuery DeleteRevision where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRevisionResponse' smart constructor.
+data DeleteRevisionResponse = DeleteRevisionResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRevisionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRevisionResponse ::
+  DeleteRevisionResponse
+newDeleteRevisionResponse = DeleteRevisionResponse'
+
+instance Prelude.NFData DeleteRevisionResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DataExchange/GetAsset.hs b/gen/Amazonka/DataExchange/GetAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/GetAsset.hs
@@ -0,0 +1,329 @@
+{-# 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.DataExchange.GetAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation returns information about an asset.
+module Amazonka.DataExchange.GetAsset
+  ( -- * Creating a Request
+    GetAsset (..),
+    newGetAsset,
+
+    -- * Request Lenses
+    getAsset_assetId,
+    getAsset_dataSetId,
+    getAsset_revisionId,
+
+    -- * Destructuring the Response
+    GetAssetResponse (..),
+    newGetAssetResponse,
+
+    -- * Response Lenses
+    getAssetResponse_arn,
+    getAssetResponse_assetDetails,
+    getAssetResponse_assetType,
+    getAssetResponse_createdAt,
+    getAssetResponse_dataSetId,
+    getAssetResponse_id,
+    getAssetResponse_name,
+    getAssetResponse_revisionId,
+    getAssetResponse_sourceId,
+    getAssetResponse_updatedAt,
+    getAssetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAsset' smart constructor.
+data GetAsset = GetAsset'
+  { -- | The unique identifier for an asset.
+    assetId :: Prelude.Text,
+    -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetId', 'getAsset_assetId' - The unique identifier for an asset.
+--
+-- 'dataSetId', 'getAsset_dataSetId' - The unique identifier for a data set.
+--
+-- 'revisionId', 'getAsset_revisionId' - The unique identifier for a revision.
+newGetAsset ::
+  -- | 'assetId'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  GetAsset
+newGetAsset pAssetId_ pDataSetId_ pRevisionId_ =
+  GetAsset'
+    { assetId = pAssetId_,
+      dataSetId = pDataSetId_,
+      revisionId = pRevisionId_
+    }
+
+-- | The unique identifier for an asset.
+getAsset_assetId :: Lens.Lens' GetAsset Prelude.Text
+getAsset_assetId = Lens.lens (\GetAsset' {assetId} -> assetId) (\s@GetAsset' {} a -> s {assetId = a} :: GetAsset)
+
+-- | The unique identifier for a data set.
+getAsset_dataSetId :: Lens.Lens' GetAsset Prelude.Text
+getAsset_dataSetId = Lens.lens (\GetAsset' {dataSetId} -> dataSetId) (\s@GetAsset' {} a -> s {dataSetId = a} :: GetAsset)
+
+-- | The unique identifier for a revision.
+getAsset_revisionId :: Lens.Lens' GetAsset Prelude.Text
+getAsset_revisionId = Lens.lens (\GetAsset' {revisionId} -> revisionId) (\s@GetAsset' {} a -> s {revisionId = a} :: GetAsset)
+
+instance Core.AWSRequest GetAsset where
+  type AWSResponse GetAsset = GetAssetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAssetResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "AssetDetails")
+            Prelude.<*> (x Data..?> "AssetType")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "DataSetId")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RevisionId")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAsset where
+  hashWithSalt _salt GetAsset' {..} =
+    _salt
+      `Prelude.hashWithSalt` assetId
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData GetAsset where
+  rnf GetAsset' {..} =
+    Prelude.rnf assetId
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToHeaders GetAsset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetAsset where
+  toPath GetAsset' {..} =
+    Prelude.mconcat
+      [ "/v1/data-sets/",
+        Data.toBS dataSetId,
+        "/revisions/",
+        Data.toBS revisionId,
+        "/assets/",
+        Data.toBS assetId
+      ]
+
+instance Data.ToQuery GetAsset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAssetResponse' smart constructor.
+data GetAssetResponse = GetAssetResponse'
+  { -- | The ARN for the asset.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Details about the asset.
+    assetDetails :: Prelude.Maybe AssetDetails,
+    -- | The type of asset that is added to a data set.
+    assetType :: Prelude.Maybe AssetType,
+    -- | The date and time that the asset was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the data set associated with this asset.
+    dataSetId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the asset.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the asset. When importing from Amazon S3, the Amazon S3
+    -- object key is used as the asset name. When exporting to Amazon S3, the
+    -- asset name is used as default target Amazon S3 object key. When
+    -- importing from Amazon API Gateway API, the API name is used as the asset
+    -- name. When importing from Amazon Redshift, the datashare name is used as
+    -- the asset name. When importing from AWS Lake Formation, the static
+    -- values of \"Database(s) included in the LF-tag policy\" or \"Table(s)
+    -- included in the LF-tag policy\" are used as the asset name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the revision associated with this asset.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The asset ID of the owned asset corresponding to the entitled asset
+    -- being viewed. This parameter is returned when an asset owner is viewing
+    -- the entitled copy of its owned asset.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the asset was last updated, in ISO 8601 format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getAssetResponse_arn' - The ARN for the asset.
+--
+-- 'assetDetails', 'getAssetResponse_assetDetails' - Details about the asset.
+--
+-- 'assetType', 'getAssetResponse_assetType' - The type of asset that is added to a data set.
+--
+-- 'createdAt', 'getAssetResponse_createdAt' - The date and time that the asset was created, in ISO 8601 format.
+--
+-- 'dataSetId', 'getAssetResponse_dataSetId' - The unique identifier for the data set associated with this asset.
+--
+-- 'id', 'getAssetResponse_id' - The unique identifier for the asset.
+--
+-- 'name', 'getAssetResponse_name' - The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name. When exporting to Amazon S3, the
+-- asset name is used as default target Amazon S3 object key. When
+-- importing from Amazon API Gateway API, the API name is used as the asset
+-- name. When importing from Amazon Redshift, the datashare name is used as
+-- the asset name. When importing from AWS Lake Formation, the static
+-- values of \"Database(s) included in the LF-tag policy\" or \"Table(s)
+-- included in the LF-tag policy\" are used as the asset name.
+--
+-- 'revisionId', 'getAssetResponse_revisionId' - The unique identifier for the revision associated with this asset.
+--
+-- 'sourceId', 'getAssetResponse_sourceId' - The asset ID of the owned asset corresponding to the entitled asset
+-- being viewed. This parameter is returned when an asset owner is viewing
+-- the entitled copy of its owned asset.
+--
+-- 'updatedAt', 'getAssetResponse_updatedAt' - The date and time that the asset was last updated, in ISO 8601 format.
+--
+-- 'httpStatus', 'getAssetResponse_httpStatus' - The response's http status code.
+newGetAssetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAssetResponse
+newGetAssetResponse pHttpStatus_ =
+  GetAssetResponse'
+    { arn = Prelude.Nothing,
+      assetDetails = Prelude.Nothing,
+      assetType = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      dataSetId = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the asset.
+getAssetResponse_arn :: Lens.Lens' GetAssetResponse (Prelude.Maybe Prelude.Text)
+getAssetResponse_arn = Lens.lens (\GetAssetResponse' {arn} -> arn) (\s@GetAssetResponse' {} a -> s {arn = a} :: GetAssetResponse)
+
+-- | Details about the asset.
+getAssetResponse_assetDetails :: Lens.Lens' GetAssetResponse (Prelude.Maybe AssetDetails)
+getAssetResponse_assetDetails = Lens.lens (\GetAssetResponse' {assetDetails} -> assetDetails) (\s@GetAssetResponse' {} a -> s {assetDetails = a} :: GetAssetResponse)
+
+-- | The type of asset that is added to a data set.
+getAssetResponse_assetType :: Lens.Lens' GetAssetResponse (Prelude.Maybe AssetType)
+getAssetResponse_assetType = Lens.lens (\GetAssetResponse' {assetType} -> assetType) (\s@GetAssetResponse' {} a -> s {assetType = a} :: GetAssetResponse)
+
+-- | The date and time that the asset was created, in ISO 8601 format.
+getAssetResponse_createdAt :: Lens.Lens' GetAssetResponse (Prelude.Maybe Prelude.UTCTime)
+getAssetResponse_createdAt = Lens.lens (\GetAssetResponse' {createdAt} -> createdAt) (\s@GetAssetResponse' {} a -> s {createdAt = a} :: GetAssetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the data set associated with this asset.
+getAssetResponse_dataSetId :: Lens.Lens' GetAssetResponse (Prelude.Maybe Prelude.Text)
+getAssetResponse_dataSetId = Lens.lens (\GetAssetResponse' {dataSetId} -> dataSetId) (\s@GetAssetResponse' {} a -> s {dataSetId = a} :: GetAssetResponse)
+
+-- | The unique identifier for the asset.
+getAssetResponse_id :: Lens.Lens' GetAssetResponse (Prelude.Maybe Prelude.Text)
+getAssetResponse_id = Lens.lens (\GetAssetResponse' {id} -> id) (\s@GetAssetResponse' {} a -> s {id = a} :: GetAssetResponse)
+
+-- | The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name. When exporting to Amazon S3, the
+-- asset name is used as default target Amazon S3 object key. When
+-- importing from Amazon API Gateway API, the API name is used as the asset
+-- name. When importing from Amazon Redshift, the datashare name is used as
+-- the asset name. When importing from AWS Lake Formation, the static
+-- values of \"Database(s) included in the LF-tag policy\" or \"Table(s)
+-- included in the LF-tag policy\" are used as the asset name.
+getAssetResponse_name :: Lens.Lens' GetAssetResponse (Prelude.Maybe Prelude.Text)
+getAssetResponse_name = Lens.lens (\GetAssetResponse' {name} -> name) (\s@GetAssetResponse' {} a -> s {name = a} :: GetAssetResponse)
+
+-- | The unique identifier for the revision associated with this asset.
+getAssetResponse_revisionId :: Lens.Lens' GetAssetResponse (Prelude.Maybe Prelude.Text)
+getAssetResponse_revisionId = Lens.lens (\GetAssetResponse' {revisionId} -> revisionId) (\s@GetAssetResponse' {} a -> s {revisionId = a} :: GetAssetResponse)
+
+-- | The asset ID of the owned asset corresponding to the entitled asset
+-- being viewed. This parameter is returned when an asset owner is viewing
+-- the entitled copy of its owned asset.
+getAssetResponse_sourceId :: Lens.Lens' GetAssetResponse (Prelude.Maybe Prelude.Text)
+getAssetResponse_sourceId = Lens.lens (\GetAssetResponse' {sourceId} -> sourceId) (\s@GetAssetResponse' {} a -> s {sourceId = a} :: GetAssetResponse)
+
+-- | The date and time that the asset was last updated, in ISO 8601 format.
+getAssetResponse_updatedAt :: Lens.Lens' GetAssetResponse (Prelude.Maybe Prelude.UTCTime)
+getAssetResponse_updatedAt = Lens.lens (\GetAssetResponse' {updatedAt} -> updatedAt) (\s@GetAssetResponse' {} a -> s {updatedAt = a} :: GetAssetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getAssetResponse_httpStatus :: Lens.Lens' GetAssetResponse Prelude.Int
+getAssetResponse_httpStatus = Lens.lens (\GetAssetResponse' {httpStatus} -> httpStatus) (\s@GetAssetResponse' {} a -> s {httpStatus = a} :: GetAssetResponse)
+
+instance Prelude.NFData GetAssetResponse where
+  rnf GetAssetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf assetDetails
+      `Prelude.seq` Prelude.rnf assetType
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/GetDataSet.hs b/gen/Amazonka/DataExchange/GetDataSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/GetDataSet.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.DataExchange.GetDataSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation returns information about a data set.
+module Amazonka.DataExchange.GetDataSet
+  ( -- * Creating a Request
+    GetDataSet (..),
+    newGetDataSet,
+
+    -- * Request Lenses
+    getDataSet_dataSetId,
+
+    -- * Destructuring the Response
+    GetDataSetResponse (..),
+    newGetDataSetResponse,
+
+    -- * Response Lenses
+    getDataSetResponse_arn,
+    getDataSetResponse_assetType,
+    getDataSetResponse_createdAt,
+    getDataSetResponse_description,
+    getDataSetResponse_id,
+    getDataSetResponse_name,
+    getDataSetResponse_origin,
+    getDataSetResponse_originDetails,
+    getDataSetResponse_sourceId,
+    getDataSetResponse_tags,
+    getDataSetResponse_updatedAt,
+    getDataSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDataSet' smart constructor.
+data GetDataSet = GetDataSet'
+  { -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSetId', 'getDataSet_dataSetId' - The unique identifier for a data set.
+newGetDataSet ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  GetDataSet
+newGetDataSet pDataSetId_ =
+  GetDataSet' {dataSetId = pDataSetId_}
+
+-- | The unique identifier for a data set.
+getDataSet_dataSetId :: Lens.Lens' GetDataSet Prelude.Text
+getDataSet_dataSetId = Lens.lens (\GetDataSet' {dataSetId} -> dataSetId) (\s@GetDataSet' {} a -> s {dataSetId = a} :: GetDataSet)
+
+instance Core.AWSRequest GetDataSet where
+  type AWSResponse GetDataSet = GetDataSetResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDataSetResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "AssetType")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Origin")
+            Prelude.<*> (x Data..?> "OriginDetails")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetDataSet where
+  hashWithSalt _salt GetDataSet' {..} =
+    _salt `Prelude.hashWithSalt` dataSetId
+
+instance Prelude.NFData GetDataSet where
+  rnf GetDataSet' {..} = Prelude.rnf dataSetId
+
+instance Data.ToHeaders GetDataSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDataSet where
+  toPath GetDataSet' {..} =
+    Prelude.mconcat
+      ["/v1/data-sets/", Data.toBS dataSetId]
+
+instance Data.ToQuery GetDataSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDataSetResponse' smart constructor.
+data GetDataSetResponse = GetDataSetResponse'
+  { -- | The ARN for the data set.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The type of asset that is added to a data set.
+    assetType :: Prelude.Maybe AssetType,
+    -- | The date and time that the data set was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The description for the data set.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the data set.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data set.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A property that defines the data set as OWNED by the account (for
+    -- providers) or ENTITLED to the account (for subscribers).
+    origin :: Prelude.Maybe Origin,
+    -- | If the origin of this data set is ENTITLED, includes the details for the
+    -- product on AWS Marketplace.
+    originDetails :: Prelude.Maybe OriginDetails,
+    -- | The data set ID of the owned data set corresponding to the entitled data
+    -- set being viewed. This parameter is returned when a data set owner is
+    -- viewing the entitled copy of its owned data set.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the data set.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The date and time that the data set was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDataSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDataSetResponse_arn' - The ARN for the data set.
+--
+-- 'assetType', 'getDataSetResponse_assetType' - The type of asset that is added to a data set.
+--
+-- 'createdAt', 'getDataSetResponse_createdAt' - The date and time that the data set was created, in ISO 8601 format.
+--
+-- 'description', 'getDataSetResponse_description' - The description for the data set.
+--
+-- 'id', 'getDataSetResponse_id' - The unique identifier for the data set.
+--
+-- 'name', 'getDataSetResponse_name' - The name of the data set.
+--
+-- 'origin', 'getDataSetResponse_origin' - A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+--
+-- 'originDetails', 'getDataSetResponse_originDetails' - If the origin of this data set is ENTITLED, includes the details for the
+-- product on AWS Marketplace.
+--
+-- 'sourceId', 'getDataSetResponse_sourceId' - The data set ID of the owned data set corresponding to the entitled data
+-- set being viewed. This parameter is returned when a data set owner is
+-- viewing the entitled copy of its owned data set.
+--
+-- 'tags', 'getDataSetResponse_tags' - The tags for the data set.
+--
+-- 'updatedAt', 'getDataSetResponse_updatedAt' - The date and time that the data set was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'getDataSetResponse_httpStatus' - The response's http status code.
+newGetDataSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDataSetResponse
+newGetDataSetResponse pHttpStatus_ =
+  GetDataSetResponse'
+    { arn = Prelude.Nothing,
+      assetType = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      origin = Prelude.Nothing,
+      originDetails = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the data set.
+getDataSetResponse_arn :: Lens.Lens' GetDataSetResponse (Prelude.Maybe Prelude.Text)
+getDataSetResponse_arn = Lens.lens (\GetDataSetResponse' {arn} -> arn) (\s@GetDataSetResponse' {} a -> s {arn = a} :: GetDataSetResponse)
+
+-- | The type of asset that is added to a data set.
+getDataSetResponse_assetType :: Lens.Lens' GetDataSetResponse (Prelude.Maybe AssetType)
+getDataSetResponse_assetType = Lens.lens (\GetDataSetResponse' {assetType} -> assetType) (\s@GetDataSetResponse' {} a -> s {assetType = a} :: GetDataSetResponse)
+
+-- | The date and time that the data set was created, in ISO 8601 format.
+getDataSetResponse_createdAt :: Lens.Lens' GetDataSetResponse (Prelude.Maybe Prelude.UTCTime)
+getDataSetResponse_createdAt = Lens.lens (\GetDataSetResponse' {createdAt} -> createdAt) (\s@GetDataSetResponse' {} a -> s {createdAt = a} :: GetDataSetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description for the data set.
+getDataSetResponse_description :: Lens.Lens' GetDataSetResponse (Prelude.Maybe Prelude.Text)
+getDataSetResponse_description = Lens.lens (\GetDataSetResponse' {description} -> description) (\s@GetDataSetResponse' {} a -> s {description = a} :: GetDataSetResponse)
+
+-- | The unique identifier for the data set.
+getDataSetResponse_id :: Lens.Lens' GetDataSetResponse (Prelude.Maybe Prelude.Text)
+getDataSetResponse_id = Lens.lens (\GetDataSetResponse' {id} -> id) (\s@GetDataSetResponse' {} a -> s {id = a} :: GetDataSetResponse)
+
+-- | The name of the data set.
+getDataSetResponse_name :: Lens.Lens' GetDataSetResponse (Prelude.Maybe Prelude.Text)
+getDataSetResponse_name = Lens.lens (\GetDataSetResponse' {name} -> name) (\s@GetDataSetResponse' {} a -> s {name = a} :: GetDataSetResponse)
+
+-- | A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+getDataSetResponse_origin :: Lens.Lens' GetDataSetResponse (Prelude.Maybe Origin)
+getDataSetResponse_origin = Lens.lens (\GetDataSetResponse' {origin} -> origin) (\s@GetDataSetResponse' {} a -> s {origin = a} :: GetDataSetResponse)
+
+-- | If the origin of this data set is ENTITLED, includes the details for the
+-- product on AWS Marketplace.
+getDataSetResponse_originDetails :: Lens.Lens' GetDataSetResponse (Prelude.Maybe OriginDetails)
+getDataSetResponse_originDetails = Lens.lens (\GetDataSetResponse' {originDetails} -> originDetails) (\s@GetDataSetResponse' {} a -> s {originDetails = a} :: GetDataSetResponse)
+
+-- | The data set ID of the owned data set corresponding to the entitled data
+-- set being viewed. This parameter is returned when a data set owner is
+-- viewing the entitled copy of its owned data set.
+getDataSetResponse_sourceId :: Lens.Lens' GetDataSetResponse (Prelude.Maybe Prelude.Text)
+getDataSetResponse_sourceId = Lens.lens (\GetDataSetResponse' {sourceId} -> sourceId) (\s@GetDataSetResponse' {} a -> s {sourceId = a} :: GetDataSetResponse)
+
+-- | The tags for the data set.
+getDataSetResponse_tags :: Lens.Lens' GetDataSetResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getDataSetResponse_tags = Lens.lens (\GetDataSetResponse' {tags} -> tags) (\s@GetDataSetResponse' {} a -> s {tags = a} :: GetDataSetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time that the data set was last updated, in ISO 8601
+-- format.
+getDataSetResponse_updatedAt :: Lens.Lens' GetDataSetResponse (Prelude.Maybe Prelude.UTCTime)
+getDataSetResponse_updatedAt = Lens.lens (\GetDataSetResponse' {updatedAt} -> updatedAt) (\s@GetDataSetResponse' {} a -> s {updatedAt = a} :: GetDataSetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getDataSetResponse_httpStatus :: Lens.Lens' GetDataSetResponse Prelude.Int
+getDataSetResponse_httpStatus = Lens.lens (\GetDataSetResponse' {httpStatus} -> httpStatus) (\s@GetDataSetResponse' {} a -> s {httpStatus = a} :: GetDataSetResponse)
+
+instance Prelude.NFData GetDataSetResponse where
+  rnf GetDataSetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf assetType
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf originDetails
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/GetEventAction.hs b/gen/Amazonka/DataExchange/GetEventAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/GetEventAction.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.GetEventAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation retrieves information about an event action.
+module Amazonka.DataExchange.GetEventAction
+  ( -- * Creating a Request
+    GetEventAction (..),
+    newGetEventAction,
+
+    -- * Request Lenses
+    getEventAction_eventActionId,
+
+    -- * Destructuring the Response
+    GetEventActionResponse (..),
+    newGetEventActionResponse,
+
+    -- * Response Lenses
+    getEventActionResponse_action,
+    getEventActionResponse_arn,
+    getEventActionResponse_createdAt,
+    getEventActionResponse_event,
+    getEventActionResponse_id,
+    getEventActionResponse_updatedAt,
+    getEventActionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEventAction' smart constructor.
+data GetEventAction = GetEventAction'
+  { -- | The unique identifier for the event action.
+    eventActionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventActionId', 'getEventAction_eventActionId' - The unique identifier for the event action.
+newGetEventAction ::
+  -- | 'eventActionId'
+  Prelude.Text ->
+  GetEventAction
+newGetEventAction pEventActionId_ =
+  GetEventAction' {eventActionId = pEventActionId_}
+
+-- | The unique identifier for the event action.
+getEventAction_eventActionId :: Lens.Lens' GetEventAction Prelude.Text
+getEventAction_eventActionId = Lens.lens (\GetEventAction' {eventActionId} -> eventActionId) (\s@GetEventAction' {} a -> s {eventActionId = a} :: GetEventAction)
+
+instance Core.AWSRequest GetEventAction where
+  type
+    AWSResponse GetEventAction =
+      GetEventActionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetEventActionResponse'
+            Prelude.<$> (x Data..?> "Action")
+            Prelude.<*> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Event")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEventAction where
+  hashWithSalt _salt GetEventAction' {..} =
+    _salt `Prelude.hashWithSalt` eventActionId
+
+instance Prelude.NFData GetEventAction where
+  rnf GetEventAction' {..} = Prelude.rnf eventActionId
+
+instance Data.ToHeaders GetEventAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetEventAction where
+  toPath GetEventAction' {..} =
+    Prelude.mconcat
+      ["/v1/event-actions/", Data.toBS eventActionId]
+
+instance Data.ToQuery GetEventAction where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetEventActionResponse' smart constructor.
+data GetEventActionResponse = GetEventActionResponse'
+  { -- | What occurs after a certain event.
+    action :: Prelude.Maybe Action,
+    -- | The ARN for the event action.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the event action was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | What occurs to start an action.
+    event :: Prelude.Maybe Event,
+    -- | The unique identifier for the event action.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the event action was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEventActionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'getEventActionResponse_action' - What occurs after a certain event.
+--
+-- 'arn', 'getEventActionResponse_arn' - The ARN for the event action.
+--
+-- 'createdAt', 'getEventActionResponse_createdAt' - The date and time that the event action was created, in ISO 8601 format.
+--
+-- 'event', 'getEventActionResponse_event' - What occurs to start an action.
+--
+-- 'id', 'getEventActionResponse_id' - The unique identifier for the event action.
+--
+-- 'updatedAt', 'getEventActionResponse_updatedAt' - The date and time that the event action was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'getEventActionResponse_httpStatus' - The response's http status code.
+newGetEventActionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEventActionResponse
+newGetEventActionResponse pHttpStatus_ =
+  GetEventActionResponse'
+    { action = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      event = Prelude.Nothing,
+      id = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | What occurs after a certain event.
+getEventActionResponse_action :: Lens.Lens' GetEventActionResponse (Prelude.Maybe Action)
+getEventActionResponse_action = Lens.lens (\GetEventActionResponse' {action} -> action) (\s@GetEventActionResponse' {} a -> s {action = a} :: GetEventActionResponse)
+
+-- | The ARN for the event action.
+getEventActionResponse_arn :: Lens.Lens' GetEventActionResponse (Prelude.Maybe Prelude.Text)
+getEventActionResponse_arn = Lens.lens (\GetEventActionResponse' {arn} -> arn) (\s@GetEventActionResponse' {} a -> s {arn = a} :: GetEventActionResponse)
+
+-- | The date and time that the event action was created, in ISO 8601 format.
+getEventActionResponse_createdAt :: Lens.Lens' GetEventActionResponse (Prelude.Maybe Prelude.UTCTime)
+getEventActionResponse_createdAt = Lens.lens (\GetEventActionResponse' {createdAt} -> createdAt) (\s@GetEventActionResponse' {} a -> s {createdAt = a} :: GetEventActionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | What occurs to start an action.
+getEventActionResponse_event :: Lens.Lens' GetEventActionResponse (Prelude.Maybe Event)
+getEventActionResponse_event = Lens.lens (\GetEventActionResponse' {event} -> event) (\s@GetEventActionResponse' {} a -> s {event = a} :: GetEventActionResponse)
+
+-- | The unique identifier for the event action.
+getEventActionResponse_id :: Lens.Lens' GetEventActionResponse (Prelude.Maybe Prelude.Text)
+getEventActionResponse_id = Lens.lens (\GetEventActionResponse' {id} -> id) (\s@GetEventActionResponse' {} a -> s {id = a} :: GetEventActionResponse)
+
+-- | The date and time that the event action was last updated, in ISO 8601
+-- format.
+getEventActionResponse_updatedAt :: Lens.Lens' GetEventActionResponse (Prelude.Maybe Prelude.UTCTime)
+getEventActionResponse_updatedAt = Lens.lens (\GetEventActionResponse' {updatedAt} -> updatedAt) (\s@GetEventActionResponse' {} a -> s {updatedAt = a} :: GetEventActionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getEventActionResponse_httpStatus :: Lens.Lens' GetEventActionResponse Prelude.Int
+getEventActionResponse_httpStatus = Lens.lens (\GetEventActionResponse' {httpStatus} -> httpStatus) (\s@GetEventActionResponse' {} a -> s {httpStatus = a} :: GetEventActionResponse)
+
+instance Prelude.NFData GetEventActionResponse where
+  rnf GetEventActionResponse' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf event
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/GetJob.hs b/gen/Amazonka/DataExchange/GetJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/GetJob.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.DataExchange.GetJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation returns information about a job.
+module Amazonka.DataExchange.GetJob
+  ( -- * Creating a Request
+    GetJob (..),
+    newGetJob,
+
+    -- * Request Lenses
+    getJob_jobId,
+
+    -- * Destructuring the Response
+    GetJobResponse (..),
+    newGetJobResponse,
+
+    -- * Response Lenses
+    getJobResponse_arn,
+    getJobResponse_createdAt,
+    getJobResponse_details,
+    getJobResponse_errors,
+    getJobResponse_id,
+    getJobResponse_state,
+    getJobResponse_type,
+    getJobResponse_updatedAt,
+    getJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetJob' smart constructor.
+data GetJob = GetJob'
+  { -- | The unique identifier for a job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'getJob_jobId' - The unique identifier for a job.
+newGetJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  GetJob
+newGetJob pJobId_ = GetJob' {jobId = pJobId_}
+
+-- | The unique identifier for a job.
+getJob_jobId :: Lens.Lens' GetJob Prelude.Text
+getJob_jobId = Lens.lens (\GetJob' {jobId} -> jobId) (\s@GetJob' {} a -> s {jobId = a} :: GetJob)
+
+instance Core.AWSRequest GetJob where
+  type AWSResponse GetJob = GetJobResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetJobResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Details")
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "State")
+            Prelude.<*> (x Data..?> "Type")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetJob where
+  hashWithSalt _salt GetJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData GetJob where
+  rnf GetJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders GetJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetJob where
+  toPath GetJob' {..} =
+    Prelude.mconcat ["/v1/jobs/", Data.toBS jobId]
+
+instance Data.ToQuery GetJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetJobResponse' smart constructor.
+data GetJobResponse = GetJobResponse'
+  { -- | The ARN for the job.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the job was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | Details about the job.
+    details :: Prelude.Maybe ResponseDetails,
+    -- | The errors associated with jobs.
+    errors :: Prelude.Maybe [JobError],
+    -- | The unique identifier for the job.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The state of the job.
+    state :: Prelude.Maybe State,
+    -- | The job type.
+    type' :: Prelude.Maybe Type,
+    -- | The date and time that the job was last updated, in ISO 8601 format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getJobResponse_arn' - The ARN for the job.
+--
+-- 'createdAt', 'getJobResponse_createdAt' - The date and time that the job was created, in ISO 8601 format.
+--
+-- 'details', 'getJobResponse_details' - Details about the job.
+--
+-- 'errors', 'getJobResponse_errors' - The errors associated with jobs.
+--
+-- 'id', 'getJobResponse_id' - The unique identifier for the job.
+--
+-- 'state', 'getJobResponse_state' - The state of the job.
+--
+-- 'type'', 'getJobResponse_type' - The job type.
+--
+-- 'updatedAt', 'getJobResponse_updatedAt' - The date and time that the job was last updated, in ISO 8601 format.
+--
+-- 'httpStatus', 'getJobResponse_httpStatus' - The response's http status code.
+newGetJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetJobResponse
+newGetJobResponse pHttpStatus_ =
+  GetJobResponse'
+    { arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      details = Prelude.Nothing,
+      errors = Prelude.Nothing,
+      id = Prelude.Nothing,
+      state = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the job.
+getJobResponse_arn :: Lens.Lens' GetJobResponse (Prelude.Maybe Prelude.Text)
+getJobResponse_arn = Lens.lens (\GetJobResponse' {arn} -> arn) (\s@GetJobResponse' {} a -> s {arn = a} :: GetJobResponse)
+
+-- | The date and time that the job was created, in ISO 8601 format.
+getJobResponse_createdAt :: Lens.Lens' GetJobResponse (Prelude.Maybe Prelude.UTCTime)
+getJobResponse_createdAt = Lens.lens (\GetJobResponse' {createdAt} -> createdAt) (\s@GetJobResponse' {} a -> s {createdAt = a} :: GetJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Details about the job.
+getJobResponse_details :: Lens.Lens' GetJobResponse (Prelude.Maybe ResponseDetails)
+getJobResponse_details = Lens.lens (\GetJobResponse' {details} -> details) (\s@GetJobResponse' {} a -> s {details = a} :: GetJobResponse)
+
+-- | The errors associated with jobs.
+getJobResponse_errors :: Lens.Lens' GetJobResponse (Prelude.Maybe [JobError])
+getJobResponse_errors = Lens.lens (\GetJobResponse' {errors} -> errors) (\s@GetJobResponse' {} a -> s {errors = a} :: GetJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier for the job.
+getJobResponse_id :: Lens.Lens' GetJobResponse (Prelude.Maybe Prelude.Text)
+getJobResponse_id = Lens.lens (\GetJobResponse' {id} -> id) (\s@GetJobResponse' {} a -> s {id = a} :: GetJobResponse)
+
+-- | The state of the job.
+getJobResponse_state :: Lens.Lens' GetJobResponse (Prelude.Maybe State)
+getJobResponse_state = Lens.lens (\GetJobResponse' {state} -> state) (\s@GetJobResponse' {} a -> s {state = a} :: GetJobResponse)
+
+-- | The job type.
+getJobResponse_type :: Lens.Lens' GetJobResponse (Prelude.Maybe Type)
+getJobResponse_type = Lens.lens (\GetJobResponse' {type'} -> type') (\s@GetJobResponse' {} a -> s {type' = a} :: GetJobResponse)
+
+-- | The date and time that the job was last updated, in ISO 8601 format.
+getJobResponse_updatedAt :: Lens.Lens' GetJobResponse (Prelude.Maybe Prelude.UTCTime)
+getJobResponse_updatedAt = Lens.lens (\GetJobResponse' {updatedAt} -> updatedAt) (\s@GetJobResponse' {} a -> s {updatedAt = a} :: GetJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getJobResponse_httpStatus :: Lens.Lens' GetJobResponse Prelude.Int
+getJobResponse_httpStatus = Lens.lens (\GetJobResponse' {httpStatus} -> httpStatus) (\s@GetJobResponse' {} a -> s {httpStatus = a} :: GetJobResponse)
+
+instance Prelude.NFData GetJobResponse where
+  rnf GetJobResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf details
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/GetRevision.hs b/gen/Amazonka/DataExchange/GetRevision.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/GetRevision.hs
@@ -0,0 +1,349 @@
+{-# 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.DataExchange.GetRevision
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation returns information about a revision.
+module Amazonka.DataExchange.GetRevision
+  ( -- * Creating a Request
+    GetRevision (..),
+    newGetRevision,
+
+    -- * Request Lenses
+    getRevision_dataSetId,
+    getRevision_revisionId,
+
+    -- * Destructuring the Response
+    GetRevisionResponse (..),
+    newGetRevisionResponse,
+
+    -- * Response Lenses
+    getRevisionResponse_arn,
+    getRevisionResponse_comment,
+    getRevisionResponse_createdAt,
+    getRevisionResponse_dataSetId,
+    getRevisionResponse_finalized,
+    getRevisionResponse_id,
+    getRevisionResponse_revocationComment,
+    getRevisionResponse_revoked,
+    getRevisionResponse_revokedAt,
+    getRevisionResponse_sourceId,
+    getRevisionResponse_tags,
+    getRevisionResponse_updatedAt,
+    getRevisionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetRevision' smart constructor.
+data GetRevision = GetRevision'
+  { -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRevision' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSetId', 'getRevision_dataSetId' - The unique identifier for a data set.
+--
+-- 'revisionId', 'getRevision_revisionId' - The unique identifier for a revision.
+newGetRevision ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  GetRevision
+newGetRevision pDataSetId_ pRevisionId_ =
+  GetRevision'
+    { dataSetId = pDataSetId_,
+      revisionId = pRevisionId_
+    }
+
+-- | The unique identifier for a data set.
+getRevision_dataSetId :: Lens.Lens' GetRevision Prelude.Text
+getRevision_dataSetId = Lens.lens (\GetRevision' {dataSetId} -> dataSetId) (\s@GetRevision' {} a -> s {dataSetId = a} :: GetRevision)
+
+-- | The unique identifier for a revision.
+getRevision_revisionId :: Lens.Lens' GetRevision Prelude.Text
+getRevision_revisionId = Lens.lens (\GetRevision' {revisionId} -> revisionId) (\s@GetRevision' {} a -> s {revisionId = a} :: GetRevision)
+
+instance Core.AWSRequest GetRevision where
+  type AWSResponse GetRevision = GetRevisionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetRevisionResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Comment")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "DataSetId")
+            Prelude.<*> (x Data..?> "Finalized")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "RevocationComment")
+            Prelude.<*> (x Data..?> "Revoked")
+            Prelude.<*> (x Data..?> "RevokedAt")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetRevision where
+  hashWithSalt _salt GetRevision' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData GetRevision where
+  rnf GetRevision' {..} =
+    Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToHeaders GetRevision where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetRevision where
+  toPath GetRevision' {..} =
+    Prelude.mconcat
+      [ "/v1/data-sets/",
+        Data.toBS dataSetId,
+        "/revisions/",
+        Data.toBS revisionId
+      ]
+
+instance Data.ToQuery GetRevision where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetRevisionResponse' smart constructor.
+data GetRevisionResponse = GetRevisionResponse'
+  { -- | The ARN for the revision.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | An optional comment about the revision.
+    comment :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the revision was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the data set associated with the data set
+    -- revision.
+    dataSetId :: Prelude.Maybe Prelude.Text,
+    -- | To publish a revision to a data set in a product, the revision must
+    -- first be finalized. Finalizing a revision tells AWS Data Exchange that
+    -- your changes to the assets in the revision are complete. After it\'s in
+    -- this read-only state, you can publish the revision to your products.
+    -- Finalized revisions can be published through the AWS Data Exchange
+    -- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+    -- Marketplace Catalog API action. When using the API, revisions are
+    -- uniquely identified by their ARN.
+    finalized :: Prelude.Maybe Prelude.Bool,
+    -- | The unique identifier for the revision.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | A required comment to inform subscribers of the reason their access to
+    -- the revision was revoked.
+    revocationComment :: Prelude.Maybe Prelude.Text,
+    -- | A status indicating that subscribers\' access to the revision was
+    -- revoked.
+    revoked :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time that the revision was revoked, in ISO 8601 format.
+    revokedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The revision ID of the owned revision corresponding to the entitled
+    -- revision being viewed. This parameter is returned when a revision owner
+    -- is viewing the entitled copy of its owned revision.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the revision.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The date and time that the revision was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetRevisionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getRevisionResponse_arn' - The ARN for the revision.
+--
+-- 'comment', 'getRevisionResponse_comment' - An optional comment about the revision.
+--
+-- 'createdAt', 'getRevisionResponse_createdAt' - The date and time that the revision was created, in ISO 8601 format.
+--
+-- 'dataSetId', 'getRevisionResponse_dataSetId' - The unique identifier for the data set associated with the data set
+-- revision.
+--
+-- 'finalized', 'getRevisionResponse_finalized' - To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- your changes to the assets in the revision are complete. After it\'s in
+-- this read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+--
+-- 'id', 'getRevisionResponse_id' - The unique identifier for the revision.
+--
+-- 'revocationComment', 'getRevisionResponse_revocationComment' - A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+--
+-- 'revoked', 'getRevisionResponse_revoked' - A status indicating that subscribers\' access to the revision was
+-- revoked.
+--
+-- 'revokedAt', 'getRevisionResponse_revokedAt' - The date and time that the revision was revoked, in ISO 8601 format.
+--
+-- 'sourceId', 'getRevisionResponse_sourceId' - The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+--
+-- 'tags', 'getRevisionResponse_tags' - The tags for the revision.
+--
+-- 'updatedAt', 'getRevisionResponse_updatedAt' - The date and time that the revision was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'getRevisionResponse_httpStatus' - The response's http status code.
+newGetRevisionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetRevisionResponse
+newGetRevisionResponse pHttpStatus_ =
+  GetRevisionResponse'
+    { arn = Prelude.Nothing,
+      comment = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      dataSetId = Prelude.Nothing,
+      finalized = Prelude.Nothing,
+      id = Prelude.Nothing,
+      revocationComment = Prelude.Nothing,
+      revoked = Prelude.Nothing,
+      revokedAt = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the revision.
+getRevisionResponse_arn :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.Text)
+getRevisionResponse_arn = Lens.lens (\GetRevisionResponse' {arn} -> arn) (\s@GetRevisionResponse' {} a -> s {arn = a} :: GetRevisionResponse)
+
+-- | An optional comment about the revision.
+getRevisionResponse_comment :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.Text)
+getRevisionResponse_comment = Lens.lens (\GetRevisionResponse' {comment} -> comment) (\s@GetRevisionResponse' {} a -> s {comment = a} :: GetRevisionResponse)
+
+-- | The date and time that the revision was created, in ISO 8601 format.
+getRevisionResponse_createdAt :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+getRevisionResponse_createdAt = Lens.lens (\GetRevisionResponse' {createdAt} -> createdAt) (\s@GetRevisionResponse' {} a -> s {createdAt = a} :: GetRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the data set associated with the data set
+-- revision.
+getRevisionResponse_dataSetId :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.Text)
+getRevisionResponse_dataSetId = Lens.lens (\GetRevisionResponse' {dataSetId} -> dataSetId) (\s@GetRevisionResponse' {} a -> s {dataSetId = a} :: GetRevisionResponse)
+
+-- | To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- your changes to the assets in the revision are complete. After it\'s in
+-- this read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+getRevisionResponse_finalized :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.Bool)
+getRevisionResponse_finalized = Lens.lens (\GetRevisionResponse' {finalized} -> finalized) (\s@GetRevisionResponse' {} a -> s {finalized = a} :: GetRevisionResponse)
+
+-- | The unique identifier for the revision.
+getRevisionResponse_id :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.Text)
+getRevisionResponse_id = Lens.lens (\GetRevisionResponse' {id} -> id) (\s@GetRevisionResponse' {} a -> s {id = a} :: GetRevisionResponse)
+
+-- | A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+getRevisionResponse_revocationComment :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.Text)
+getRevisionResponse_revocationComment = Lens.lens (\GetRevisionResponse' {revocationComment} -> revocationComment) (\s@GetRevisionResponse' {} a -> s {revocationComment = a} :: GetRevisionResponse)
+
+-- | A status indicating that subscribers\' access to the revision was
+-- revoked.
+getRevisionResponse_revoked :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.Bool)
+getRevisionResponse_revoked = Lens.lens (\GetRevisionResponse' {revoked} -> revoked) (\s@GetRevisionResponse' {} a -> s {revoked = a} :: GetRevisionResponse)
+
+-- | The date and time that the revision was revoked, in ISO 8601 format.
+getRevisionResponse_revokedAt :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+getRevisionResponse_revokedAt = Lens.lens (\GetRevisionResponse' {revokedAt} -> revokedAt) (\s@GetRevisionResponse' {} a -> s {revokedAt = a} :: GetRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+getRevisionResponse_sourceId :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.Text)
+getRevisionResponse_sourceId = Lens.lens (\GetRevisionResponse' {sourceId} -> sourceId) (\s@GetRevisionResponse' {} a -> s {sourceId = a} :: GetRevisionResponse)
+
+-- | The tags for the revision.
+getRevisionResponse_tags :: Lens.Lens' GetRevisionResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getRevisionResponse_tags = Lens.lens (\GetRevisionResponse' {tags} -> tags) (\s@GetRevisionResponse' {} a -> s {tags = a} :: GetRevisionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time that the revision was last updated, in ISO 8601
+-- format.
+getRevisionResponse_updatedAt :: Lens.Lens' GetRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+getRevisionResponse_updatedAt = Lens.lens (\GetRevisionResponse' {updatedAt} -> updatedAt) (\s@GetRevisionResponse' {} a -> s {updatedAt = a} :: GetRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getRevisionResponse_httpStatus :: Lens.Lens' GetRevisionResponse Prelude.Int
+getRevisionResponse_httpStatus = Lens.lens (\GetRevisionResponse' {httpStatus} -> httpStatus) (\s@GetRevisionResponse' {} a -> s {httpStatus = a} :: GetRevisionResponse)
+
+instance Prelude.NFData GetRevisionResponse where
+  rnf GetRevisionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf finalized
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf revocationComment
+      `Prelude.seq` Prelude.rnf revoked
+      `Prelude.seq` Prelude.rnf revokedAt
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/Lens.hs b/gen/Amazonka/DataExchange/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Lens.hs
@@ -0,0 +1,727 @@
+{-# 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.DataExchange.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.DataExchange.Lens
+  ( -- * Operations
+
+    -- ** CancelJob
+    cancelJob_jobId,
+
+    -- ** CreateDataSet
+    createDataSet_tags,
+    createDataSet_assetType,
+    createDataSet_description,
+    createDataSet_name,
+    createDataSetResponse_arn,
+    createDataSetResponse_assetType,
+    createDataSetResponse_createdAt,
+    createDataSetResponse_description,
+    createDataSetResponse_id,
+    createDataSetResponse_name,
+    createDataSetResponse_origin,
+    createDataSetResponse_originDetails,
+    createDataSetResponse_sourceId,
+    createDataSetResponse_tags,
+    createDataSetResponse_updatedAt,
+    createDataSetResponse_httpStatus,
+
+    -- ** CreateEventAction
+    createEventAction_action,
+    createEventAction_event,
+    createEventActionResponse_action,
+    createEventActionResponse_arn,
+    createEventActionResponse_createdAt,
+    createEventActionResponse_event,
+    createEventActionResponse_id,
+    createEventActionResponse_updatedAt,
+    createEventActionResponse_httpStatus,
+
+    -- ** CreateJob
+    createJob_details,
+    createJob_type,
+    createJobResponse_arn,
+    createJobResponse_createdAt,
+    createJobResponse_details,
+    createJobResponse_errors,
+    createJobResponse_id,
+    createJobResponse_state,
+    createJobResponse_type,
+    createJobResponse_updatedAt,
+    createJobResponse_httpStatus,
+
+    -- ** CreateRevision
+    createRevision_comment,
+    createRevision_tags,
+    createRevision_dataSetId,
+    createRevisionResponse_arn,
+    createRevisionResponse_comment,
+    createRevisionResponse_createdAt,
+    createRevisionResponse_dataSetId,
+    createRevisionResponse_finalized,
+    createRevisionResponse_id,
+    createRevisionResponse_revocationComment,
+    createRevisionResponse_revoked,
+    createRevisionResponse_revokedAt,
+    createRevisionResponse_sourceId,
+    createRevisionResponse_tags,
+    createRevisionResponse_updatedAt,
+    createRevisionResponse_httpStatus,
+
+    -- ** DeleteAsset
+    deleteAsset_assetId,
+    deleteAsset_dataSetId,
+    deleteAsset_revisionId,
+
+    -- ** DeleteDataSet
+    deleteDataSet_dataSetId,
+
+    -- ** DeleteEventAction
+    deleteEventAction_eventActionId,
+
+    -- ** DeleteRevision
+    deleteRevision_dataSetId,
+    deleteRevision_revisionId,
+
+    -- ** GetAsset
+    getAsset_assetId,
+    getAsset_dataSetId,
+    getAsset_revisionId,
+    getAssetResponse_arn,
+    getAssetResponse_assetDetails,
+    getAssetResponse_assetType,
+    getAssetResponse_createdAt,
+    getAssetResponse_dataSetId,
+    getAssetResponse_id,
+    getAssetResponse_name,
+    getAssetResponse_revisionId,
+    getAssetResponse_sourceId,
+    getAssetResponse_updatedAt,
+    getAssetResponse_httpStatus,
+
+    -- ** GetDataSet
+    getDataSet_dataSetId,
+    getDataSetResponse_arn,
+    getDataSetResponse_assetType,
+    getDataSetResponse_createdAt,
+    getDataSetResponse_description,
+    getDataSetResponse_id,
+    getDataSetResponse_name,
+    getDataSetResponse_origin,
+    getDataSetResponse_originDetails,
+    getDataSetResponse_sourceId,
+    getDataSetResponse_tags,
+    getDataSetResponse_updatedAt,
+    getDataSetResponse_httpStatus,
+
+    -- ** GetEventAction
+    getEventAction_eventActionId,
+    getEventActionResponse_action,
+    getEventActionResponse_arn,
+    getEventActionResponse_createdAt,
+    getEventActionResponse_event,
+    getEventActionResponse_id,
+    getEventActionResponse_updatedAt,
+    getEventActionResponse_httpStatus,
+
+    -- ** GetJob
+    getJob_jobId,
+    getJobResponse_arn,
+    getJobResponse_createdAt,
+    getJobResponse_details,
+    getJobResponse_errors,
+    getJobResponse_id,
+    getJobResponse_state,
+    getJobResponse_type,
+    getJobResponse_updatedAt,
+    getJobResponse_httpStatus,
+
+    -- ** GetRevision
+    getRevision_dataSetId,
+    getRevision_revisionId,
+    getRevisionResponse_arn,
+    getRevisionResponse_comment,
+    getRevisionResponse_createdAt,
+    getRevisionResponse_dataSetId,
+    getRevisionResponse_finalized,
+    getRevisionResponse_id,
+    getRevisionResponse_revocationComment,
+    getRevisionResponse_revoked,
+    getRevisionResponse_revokedAt,
+    getRevisionResponse_sourceId,
+    getRevisionResponse_tags,
+    getRevisionResponse_updatedAt,
+    getRevisionResponse_httpStatus,
+
+    -- ** ListDataSetRevisions
+    listDataSetRevisions_maxResults,
+    listDataSetRevisions_nextToken,
+    listDataSetRevisions_dataSetId,
+    listDataSetRevisionsResponse_nextToken,
+    listDataSetRevisionsResponse_revisions,
+    listDataSetRevisionsResponse_httpStatus,
+
+    -- ** ListDataSets
+    listDataSets_maxResults,
+    listDataSets_nextToken,
+    listDataSets_origin,
+    listDataSetsResponse_dataSets,
+    listDataSetsResponse_nextToken,
+    listDataSetsResponse_httpStatus,
+
+    -- ** ListEventActions
+    listEventActions_eventSourceId,
+    listEventActions_maxResults,
+    listEventActions_nextToken,
+    listEventActionsResponse_eventActions,
+    listEventActionsResponse_nextToken,
+    listEventActionsResponse_httpStatus,
+
+    -- ** ListJobs
+    listJobs_dataSetId,
+    listJobs_maxResults,
+    listJobs_nextToken,
+    listJobs_revisionId,
+    listJobsResponse_jobs,
+    listJobsResponse_nextToken,
+    listJobsResponse_httpStatus,
+
+    -- ** ListRevisionAssets
+    listRevisionAssets_maxResults,
+    listRevisionAssets_nextToken,
+    listRevisionAssets_dataSetId,
+    listRevisionAssets_revisionId,
+    listRevisionAssetsResponse_assets,
+    listRevisionAssetsResponse_nextToken,
+    listRevisionAssetsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** RevokeRevision
+    revokeRevision_dataSetId,
+    revokeRevision_revisionId,
+    revokeRevision_revocationComment,
+    revokeRevisionResponse_arn,
+    revokeRevisionResponse_comment,
+    revokeRevisionResponse_createdAt,
+    revokeRevisionResponse_dataSetId,
+    revokeRevisionResponse_finalized,
+    revokeRevisionResponse_id,
+    revokeRevisionResponse_revocationComment,
+    revokeRevisionResponse_revoked,
+    revokeRevisionResponse_revokedAt,
+    revokeRevisionResponse_sourceId,
+    revokeRevisionResponse_updatedAt,
+    revokeRevisionResponse_httpStatus,
+
+    -- ** SendApiAsset
+    sendApiAsset_body,
+    sendApiAsset_method,
+    sendApiAsset_path,
+    sendApiAsset_queryStringParameters,
+    sendApiAsset_requestHeaders,
+    sendApiAsset_assetId,
+    sendApiAsset_dataSetId,
+    sendApiAsset_revisionId,
+    sendApiAssetResponse_body,
+    sendApiAssetResponse_responseHeaders,
+    sendApiAssetResponse_httpStatus,
+
+    -- ** StartJob
+    startJob_jobId,
+    startJobResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- ** UpdateAsset
+    updateAsset_assetId,
+    updateAsset_dataSetId,
+    updateAsset_name,
+    updateAsset_revisionId,
+    updateAssetResponse_arn,
+    updateAssetResponse_assetDetails,
+    updateAssetResponse_assetType,
+    updateAssetResponse_createdAt,
+    updateAssetResponse_dataSetId,
+    updateAssetResponse_id,
+    updateAssetResponse_name,
+    updateAssetResponse_revisionId,
+    updateAssetResponse_sourceId,
+    updateAssetResponse_updatedAt,
+    updateAssetResponse_httpStatus,
+
+    -- ** UpdateDataSet
+    updateDataSet_description,
+    updateDataSet_name,
+    updateDataSet_dataSetId,
+    updateDataSetResponse_arn,
+    updateDataSetResponse_assetType,
+    updateDataSetResponse_createdAt,
+    updateDataSetResponse_description,
+    updateDataSetResponse_id,
+    updateDataSetResponse_name,
+    updateDataSetResponse_origin,
+    updateDataSetResponse_originDetails,
+    updateDataSetResponse_sourceId,
+    updateDataSetResponse_updatedAt,
+    updateDataSetResponse_httpStatus,
+
+    -- ** UpdateEventAction
+    updateEventAction_action,
+    updateEventAction_eventActionId,
+    updateEventActionResponse_action,
+    updateEventActionResponse_arn,
+    updateEventActionResponse_createdAt,
+    updateEventActionResponse_event,
+    updateEventActionResponse_id,
+    updateEventActionResponse_updatedAt,
+    updateEventActionResponse_httpStatus,
+
+    -- ** UpdateRevision
+    updateRevision_comment,
+    updateRevision_finalized,
+    updateRevision_dataSetId,
+    updateRevision_revisionId,
+    updateRevisionResponse_arn,
+    updateRevisionResponse_comment,
+    updateRevisionResponse_createdAt,
+    updateRevisionResponse_dataSetId,
+    updateRevisionResponse_finalized,
+    updateRevisionResponse_id,
+    updateRevisionResponse_revocationComment,
+    updateRevisionResponse_revoked,
+    updateRevisionResponse_revokedAt,
+    updateRevisionResponse_sourceId,
+    updateRevisionResponse_updatedAt,
+    updateRevisionResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Action
+    action_exportRevisionToS3,
+
+    -- ** ApiGatewayApiAsset
+    apiGatewayApiAsset_apiDescription,
+    apiGatewayApiAsset_apiEndpoint,
+    apiGatewayApiAsset_apiId,
+    apiGatewayApiAsset_apiKey,
+    apiGatewayApiAsset_apiName,
+    apiGatewayApiAsset_apiSpecificationDownloadUrl,
+    apiGatewayApiAsset_apiSpecificationDownloadUrlExpiresAt,
+    apiGatewayApiAsset_protocolType,
+    apiGatewayApiAsset_stage,
+
+    -- ** AssetDestinationEntry
+    assetDestinationEntry_key,
+    assetDestinationEntry_assetId,
+    assetDestinationEntry_bucket,
+
+    -- ** AssetDetails
+    assetDetails_apiGatewayApiAsset,
+    assetDetails_lakeFormationDataPermissionAsset,
+    assetDetails_redshiftDataShareAsset,
+    assetDetails_s3DataAccessAsset,
+    assetDetails_s3SnapshotAsset,
+
+    -- ** AssetEntry
+    assetEntry_sourceId,
+    assetEntry_arn,
+    assetEntry_assetDetails,
+    assetEntry_assetType,
+    assetEntry_createdAt,
+    assetEntry_dataSetId,
+    assetEntry_id,
+    assetEntry_name,
+    assetEntry_revisionId,
+    assetEntry_updatedAt,
+
+    -- ** AssetSourceEntry
+    assetSourceEntry_bucket,
+    assetSourceEntry_key,
+
+    -- ** AutoExportRevisionDestinationEntry
+    autoExportRevisionDestinationEntry_keyPattern,
+    autoExportRevisionDestinationEntry_bucket,
+
+    -- ** AutoExportRevisionToS3RequestDetails
+    autoExportRevisionToS3RequestDetails_encryption,
+    autoExportRevisionToS3RequestDetails_revisionDestination,
+
+    -- ** CreateS3DataAccessFromS3BucketRequestDetails
+    createS3DataAccessFromS3BucketRequestDetails_assetSource,
+    createS3DataAccessFromS3BucketRequestDetails_dataSetId,
+    createS3DataAccessFromS3BucketRequestDetails_revisionId,
+
+    -- ** CreateS3DataAccessFromS3BucketResponseDetails
+    createS3DataAccessFromS3BucketResponseDetails_assetSource,
+    createS3DataAccessFromS3BucketResponseDetails_dataSetId,
+    createS3DataAccessFromS3BucketResponseDetails_revisionId,
+
+    -- ** DataSetEntry
+    dataSetEntry_originDetails,
+    dataSetEntry_sourceId,
+    dataSetEntry_arn,
+    dataSetEntry_assetType,
+    dataSetEntry_createdAt,
+    dataSetEntry_description,
+    dataSetEntry_id,
+    dataSetEntry_name,
+    dataSetEntry_origin,
+    dataSetEntry_updatedAt,
+
+    -- ** DatabaseLFTagPolicy
+    databaseLFTagPolicy_expression,
+
+    -- ** DatabaseLFTagPolicyAndPermissions
+    databaseLFTagPolicyAndPermissions_expression,
+    databaseLFTagPolicyAndPermissions_permissions,
+
+    -- ** Details
+    details_importAssetFromSignedUrlJobErrorDetails,
+    details_importAssetsFromS3JobErrorDetails,
+
+    -- ** Event
+    event_revisionPublished,
+
+    -- ** EventActionEntry
+    eventActionEntry_action,
+    eventActionEntry_arn,
+    eventActionEntry_createdAt,
+    eventActionEntry_event,
+    eventActionEntry_id,
+    eventActionEntry_updatedAt,
+
+    -- ** ExportAssetToSignedUrlRequestDetails
+    exportAssetToSignedUrlRequestDetails_assetId,
+    exportAssetToSignedUrlRequestDetails_dataSetId,
+    exportAssetToSignedUrlRequestDetails_revisionId,
+
+    -- ** ExportAssetToSignedUrlResponseDetails
+    exportAssetToSignedUrlResponseDetails_signedUrl,
+    exportAssetToSignedUrlResponseDetails_signedUrlExpiresAt,
+    exportAssetToSignedUrlResponseDetails_assetId,
+    exportAssetToSignedUrlResponseDetails_dataSetId,
+    exportAssetToSignedUrlResponseDetails_revisionId,
+
+    -- ** ExportAssetsToS3RequestDetails
+    exportAssetsToS3RequestDetails_encryption,
+    exportAssetsToS3RequestDetails_assetDestinations,
+    exportAssetsToS3RequestDetails_dataSetId,
+    exportAssetsToS3RequestDetails_revisionId,
+
+    -- ** ExportAssetsToS3ResponseDetails
+    exportAssetsToS3ResponseDetails_encryption,
+    exportAssetsToS3ResponseDetails_assetDestinations,
+    exportAssetsToS3ResponseDetails_dataSetId,
+    exportAssetsToS3ResponseDetails_revisionId,
+
+    -- ** ExportRevisionsToS3RequestDetails
+    exportRevisionsToS3RequestDetails_encryption,
+    exportRevisionsToS3RequestDetails_dataSetId,
+    exportRevisionsToS3RequestDetails_revisionDestinations,
+
+    -- ** ExportRevisionsToS3ResponseDetails
+    exportRevisionsToS3ResponseDetails_encryption,
+    exportRevisionsToS3ResponseDetails_eventActionArn,
+    exportRevisionsToS3ResponseDetails_dataSetId,
+    exportRevisionsToS3ResponseDetails_revisionDestinations,
+
+    -- ** ExportServerSideEncryption
+    exportServerSideEncryption_kmsKeyArn,
+    exportServerSideEncryption_type,
+
+    -- ** ImportAssetFromApiGatewayApiRequestDetails
+    importAssetFromApiGatewayApiRequestDetails_apiDescription,
+    importAssetFromApiGatewayApiRequestDetails_apiKey,
+    importAssetFromApiGatewayApiRequestDetails_apiId,
+    importAssetFromApiGatewayApiRequestDetails_apiName,
+    importAssetFromApiGatewayApiRequestDetails_apiSpecificationMd5Hash,
+    importAssetFromApiGatewayApiRequestDetails_dataSetId,
+    importAssetFromApiGatewayApiRequestDetails_protocolType,
+    importAssetFromApiGatewayApiRequestDetails_revisionId,
+    importAssetFromApiGatewayApiRequestDetails_stage,
+
+    -- ** ImportAssetFromApiGatewayApiResponseDetails
+    importAssetFromApiGatewayApiResponseDetails_apiDescription,
+    importAssetFromApiGatewayApiResponseDetails_apiKey,
+    importAssetFromApiGatewayApiResponseDetails_apiId,
+    importAssetFromApiGatewayApiResponseDetails_apiName,
+    importAssetFromApiGatewayApiResponseDetails_apiSpecificationMd5Hash,
+    importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrl,
+    importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrlExpiresAt,
+    importAssetFromApiGatewayApiResponseDetails_dataSetId,
+    importAssetFromApiGatewayApiResponseDetails_protocolType,
+    importAssetFromApiGatewayApiResponseDetails_revisionId,
+    importAssetFromApiGatewayApiResponseDetails_stage,
+
+    -- ** ImportAssetFromSignedUrlJobErrorDetails
+    importAssetFromSignedUrlJobErrorDetails_assetName,
+
+    -- ** ImportAssetFromSignedUrlRequestDetails
+    importAssetFromSignedUrlRequestDetails_assetName,
+    importAssetFromSignedUrlRequestDetails_dataSetId,
+    importAssetFromSignedUrlRequestDetails_md5Hash,
+    importAssetFromSignedUrlRequestDetails_revisionId,
+
+    -- ** ImportAssetFromSignedUrlResponseDetails
+    importAssetFromSignedUrlResponseDetails_md5Hash,
+    importAssetFromSignedUrlResponseDetails_signedUrl,
+    importAssetFromSignedUrlResponseDetails_signedUrlExpiresAt,
+    importAssetFromSignedUrlResponseDetails_assetName,
+    importAssetFromSignedUrlResponseDetails_dataSetId,
+    importAssetFromSignedUrlResponseDetails_revisionId,
+
+    -- ** ImportAssetsFromLakeFormationTagPolicyRequestDetails
+    importAssetsFromLakeFormationTagPolicyRequestDetails_database,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_table,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_catalogId,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_roleArn,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_dataSetId,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_revisionId,
+
+    -- ** ImportAssetsFromLakeFormationTagPolicyResponseDetails
+    importAssetsFromLakeFormationTagPolicyResponseDetails_database,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_table,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_catalogId,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_roleArn,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_dataSetId,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_revisionId,
+
+    -- ** ImportAssetsFromRedshiftDataSharesRequestDetails
+    importAssetsFromRedshiftDataSharesRequestDetails_assetSources,
+    importAssetsFromRedshiftDataSharesRequestDetails_dataSetId,
+    importAssetsFromRedshiftDataSharesRequestDetails_revisionId,
+
+    -- ** ImportAssetsFromRedshiftDataSharesResponseDetails
+    importAssetsFromRedshiftDataSharesResponseDetails_assetSources,
+    importAssetsFromRedshiftDataSharesResponseDetails_dataSetId,
+    importAssetsFromRedshiftDataSharesResponseDetails_revisionId,
+
+    -- ** ImportAssetsFromS3RequestDetails
+    importAssetsFromS3RequestDetails_assetSources,
+    importAssetsFromS3RequestDetails_dataSetId,
+    importAssetsFromS3RequestDetails_revisionId,
+
+    -- ** ImportAssetsFromS3ResponseDetails
+    importAssetsFromS3ResponseDetails_assetSources,
+    importAssetsFromS3ResponseDetails_dataSetId,
+    importAssetsFromS3ResponseDetails_revisionId,
+
+    -- ** JobEntry
+    jobEntry_errors,
+    jobEntry_arn,
+    jobEntry_createdAt,
+    jobEntry_details,
+    jobEntry_id,
+    jobEntry_state,
+    jobEntry_type,
+    jobEntry_updatedAt,
+
+    -- ** JobError
+    jobError_details,
+    jobError_limitName,
+    jobError_limitValue,
+    jobError_resourceId,
+    jobError_resourceType,
+    jobError_code,
+    jobError_message,
+
+    -- ** LFResourceDetails
+    lFResourceDetails_database,
+    lFResourceDetails_table,
+
+    -- ** LFTag
+    lFTag_tagKey,
+    lFTag_tagValues,
+
+    -- ** LFTagPolicyDetails
+    lFTagPolicyDetails_catalogId,
+    lFTagPolicyDetails_resourceType,
+    lFTagPolicyDetails_resourceDetails,
+
+    -- ** LakeFormationDataPermissionAsset
+    lakeFormationDataPermissionAsset_roleArn,
+    lakeFormationDataPermissionAsset_lakeFormationDataPermissionDetails,
+    lakeFormationDataPermissionAsset_lakeFormationDataPermissionType,
+    lakeFormationDataPermissionAsset_permissions,
+
+    -- ** LakeFormationDataPermissionDetails
+    lakeFormationDataPermissionDetails_lFTagPolicy,
+
+    -- ** OriginDetails
+    originDetails_productId,
+
+    -- ** RedshiftDataShareAsset
+    redshiftDataShareAsset_arn,
+
+    -- ** RedshiftDataShareAssetSourceEntry
+    redshiftDataShareAssetSourceEntry_dataShareArn,
+
+    -- ** RequestDetails
+    requestDetails_createS3DataAccessFromS3Bucket,
+    requestDetails_exportAssetToSignedUrl,
+    requestDetails_exportAssetsToS3,
+    requestDetails_exportRevisionsToS3,
+    requestDetails_importAssetFromApiGatewayApi,
+    requestDetails_importAssetFromSignedUrl,
+    requestDetails_importAssetsFromLakeFormationTagPolicy,
+    requestDetails_importAssetsFromRedshiftDataShares,
+    requestDetails_importAssetsFromS3,
+
+    -- ** ResponseDetails
+    responseDetails_createS3DataAccessFromS3Bucket,
+    responseDetails_exportAssetToSignedUrl,
+    responseDetails_exportAssetsToS3,
+    responseDetails_exportRevisionsToS3,
+    responseDetails_importAssetFromApiGatewayApi,
+    responseDetails_importAssetFromSignedUrl,
+    responseDetails_importAssetsFromLakeFormationTagPolicy,
+    responseDetails_importAssetsFromRedshiftDataShares,
+    responseDetails_importAssetsFromS3,
+
+    -- ** RevisionDestinationEntry
+    revisionDestinationEntry_keyPattern,
+    revisionDestinationEntry_bucket,
+    revisionDestinationEntry_revisionId,
+
+    -- ** RevisionEntry
+    revisionEntry_comment,
+    revisionEntry_finalized,
+    revisionEntry_revocationComment,
+    revisionEntry_revoked,
+    revisionEntry_revokedAt,
+    revisionEntry_sourceId,
+    revisionEntry_arn,
+    revisionEntry_createdAt,
+    revisionEntry_dataSetId,
+    revisionEntry_id,
+    revisionEntry_updatedAt,
+
+    -- ** RevisionPublished
+    revisionPublished_dataSetId,
+
+    -- ** S3DataAccessAsset
+    s3DataAccessAsset_keyPrefixes,
+    s3DataAccessAsset_keys,
+    s3DataAccessAsset_s3AccessPointAlias,
+    s3DataAccessAsset_s3AccessPointArn,
+    s3DataAccessAsset_bucket,
+
+    -- ** S3DataAccessAssetSourceEntry
+    s3DataAccessAssetSourceEntry_keyPrefixes,
+    s3DataAccessAssetSourceEntry_keys,
+    s3DataAccessAssetSourceEntry_bucket,
+
+    -- ** S3SnapshotAsset
+    s3SnapshotAsset_size,
+
+    -- ** TableLFTagPolicy
+    tableLFTagPolicy_expression,
+
+    -- ** TableLFTagPolicyAndPermissions
+    tableLFTagPolicyAndPermissions_expression,
+    tableLFTagPolicyAndPermissions_permissions,
+  )
+where
+
+import Amazonka.DataExchange.CancelJob
+import Amazonka.DataExchange.CreateDataSet
+import Amazonka.DataExchange.CreateEventAction
+import Amazonka.DataExchange.CreateJob
+import Amazonka.DataExchange.CreateRevision
+import Amazonka.DataExchange.DeleteAsset
+import Amazonka.DataExchange.DeleteDataSet
+import Amazonka.DataExchange.DeleteEventAction
+import Amazonka.DataExchange.DeleteRevision
+import Amazonka.DataExchange.GetAsset
+import Amazonka.DataExchange.GetDataSet
+import Amazonka.DataExchange.GetEventAction
+import Amazonka.DataExchange.GetJob
+import Amazonka.DataExchange.GetRevision
+import Amazonka.DataExchange.ListDataSetRevisions
+import Amazonka.DataExchange.ListDataSets
+import Amazonka.DataExchange.ListEventActions
+import Amazonka.DataExchange.ListJobs
+import Amazonka.DataExchange.ListRevisionAssets
+import Amazonka.DataExchange.ListTagsForResource
+import Amazonka.DataExchange.RevokeRevision
+import Amazonka.DataExchange.SendApiAsset
+import Amazonka.DataExchange.StartJob
+import Amazonka.DataExchange.TagResource
+import Amazonka.DataExchange.Types.Action
+import Amazonka.DataExchange.Types.ApiGatewayApiAsset
+import Amazonka.DataExchange.Types.AssetDestinationEntry
+import Amazonka.DataExchange.Types.AssetDetails
+import Amazonka.DataExchange.Types.AssetEntry
+import Amazonka.DataExchange.Types.AssetSourceEntry
+import Amazonka.DataExchange.Types.AutoExportRevisionDestinationEntry
+import Amazonka.DataExchange.Types.AutoExportRevisionToS3RequestDetails
+import Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketRequestDetails
+import Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketResponseDetails
+import Amazonka.DataExchange.Types.DataSetEntry
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicy
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicyAndPermissions
+import Amazonka.DataExchange.Types.Details
+import Amazonka.DataExchange.Types.Event
+import Amazonka.DataExchange.Types.EventActionEntry
+import Amazonka.DataExchange.Types.ExportAssetToSignedUrlRequestDetails
+import Amazonka.DataExchange.Types.ExportAssetToSignedUrlResponseDetails
+import Amazonka.DataExchange.Types.ExportAssetsToS3RequestDetails
+import Amazonka.DataExchange.Types.ExportAssetsToS3ResponseDetails
+import Amazonka.DataExchange.Types.ExportRevisionsToS3RequestDetails
+import Amazonka.DataExchange.Types.ExportRevisionsToS3ResponseDetails
+import Amazonka.DataExchange.Types.ExportServerSideEncryption
+import Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlJobErrorDetails
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromS3RequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromS3ResponseDetails
+import Amazonka.DataExchange.Types.JobEntry
+import Amazonka.DataExchange.Types.JobError
+import Amazonka.DataExchange.Types.LFResourceDetails
+import Amazonka.DataExchange.Types.LFTag
+import Amazonka.DataExchange.Types.LFTagPolicyDetails
+import Amazonka.DataExchange.Types.LakeFormationDataPermissionAsset
+import Amazonka.DataExchange.Types.LakeFormationDataPermissionDetails
+import Amazonka.DataExchange.Types.OriginDetails
+import Amazonka.DataExchange.Types.RedshiftDataShareAsset
+import Amazonka.DataExchange.Types.RedshiftDataShareAssetSourceEntry
+import Amazonka.DataExchange.Types.RequestDetails
+import Amazonka.DataExchange.Types.ResponseDetails
+import Amazonka.DataExchange.Types.RevisionDestinationEntry
+import Amazonka.DataExchange.Types.RevisionEntry
+import Amazonka.DataExchange.Types.RevisionPublished
+import Amazonka.DataExchange.Types.S3DataAccessAsset
+import Amazonka.DataExchange.Types.S3DataAccessAssetSourceEntry
+import Amazonka.DataExchange.Types.S3SnapshotAsset
+import Amazonka.DataExchange.Types.TableLFTagPolicy
+import Amazonka.DataExchange.Types.TableLFTagPolicyAndPermissions
+import Amazonka.DataExchange.UntagResource
+import Amazonka.DataExchange.UpdateAsset
+import Amazonka.DataExchange.UpdateDataSet
+import Amazonka.DataExchange.UpdateEventAction
+import Amazonka.DataExchange.UpdateRevision
diff --git a/gen/Amazonka/DataExchange/ListDataSetRevisions.hs b/gen/Amazonka/DataExchange/ListDataSetRevisions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/ListDataSetRevisions.hs
@@ -0,0 +1,234 @@
+{-# 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.DataExchange.ListDataSetRevisions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation lists a data set\'s revisions sorted by CreatedAt in
+-- descending order.
+--
+-- This operation returns paginated results.
+module Amazonka.DataExchange.ListDataSetRevisions
+  ( -- * Creating a Request
+    ListDataSetRevisions (..),
+    newListDataSetRevisions,
+
+    -- * Request Lenses
+    listDataSetRevisions_maxResults,
+    listDataSetRevisions_nextToken,
+    listDataSetRevisions_dataSetId,
+
+    -- * Destructuring the Response
+    ListDataSetRevisionsResponse (..),
+    newListDataSetRevisionsResponse,
+
+    -- * Response Lenses
+    listDataSetRevisionsResponse_nextToken,
+    listDataSetRevisionsResponse_revisions,
+    listDataSetRevisionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDataSetRevisions' smart constructor.
+data ListDataSetRevisions = ListDataSetRevisions'
+  { -- | The maximum number of results returned by a single call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSetRevisions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataSetRevisions_maxResults' - The maximum number of results returned by a single call.
+--
+-- 'nextToken', 'listDataSetRevisions_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'dataSetId', 'listDataSetRevisions_dataSetId' - The unique identifier for a data set.
+newListDataSetRevisions ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  ListDataSetRevisions
+newListDataSetRevisions pDataSetId_ =
+  ListDataSetRevisions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      dataSetId = pDataSetId_
+    }
+
+-- | The maximum number of results returned by a single call.
+listDataSetRevisions_maxResults :: Lens.Lens' ListDataSetRevisions (Prelude.Maybe Prelude.Natural)
+listDataSetRevisions_maxResults = Lens.lens (\ListDataSetRevisions' {maxResults} -> maxResults) (\s@ListDataSetRevisions' {} a -> s {maxResults = a} :: ListDataSetRevisions)
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listDataSetRevisions_nextToken :: Lens.Lens' ListDataSetRevisions (Prelude.Maybe Prelude.Text)
+listDataSetRevisions_nextToken = Lens.lens (\ListDataSetRevisions' {nextToken} -> nextToken) (\s@ListDataSetRevisions' {} a -> s {nextToken = a} :: ListDataSetRevisions)
+
+-- | The unique identifier for a data set.
+listDataSetRevisions_dataSetId :: Lens.Lens' ListDataSetRevisions Prelude.Text
+listDataSetRevisions_dataSetId = Lens.lens (\ListDataSetRevisions' {dataSetId} -> dataSetId) (\s@ListDataSetRevisions' {} a -> s {dataSetId = a} :: ListDataSetRevisions)
+
+instance Core.AWSPager ListDataSetRevisions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDataSetRevisionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDataSetRevisionsResponse_revisions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDataSetRevisions_nextToken
+          Lens..~ rs
+          Lens.^? listDataSetRevisionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDataSetRevisions where
+  type
+    AWSResponse ListDataSetRevisions =
+      ListDataSetRevisionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDataSetRevisionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Revisions" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDataSetRevisions where
+  hashWithSalt _salt ListDataSetRevisions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` dataSetId
+
+instance Prelude.NFData ListDataSetRevisions where
+  rnf ListDataSetRevisions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf dataSetId
+
+instance Data.ToHeaders ListDataSetRevisions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDataSetRevisions where
+  toPath ListDataSetRevisions' {..} =
+    Prelude.mconcat
+      ["/v1/data-sets/", Data.toBS dataSetId, "/revisions"]
+
+instance Data.ToQuery ListDataSetRevisions where
+  toQuery ListDataSetRevisions' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDataSetRevisionsResponse' smart constructor.
+data ListDataSetRevisionsResponse = ListDataSetRevisionsResponse'
+  { -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The asset objects listed by the request.
+    revisions :: Prelude.Maybe [RevisionEntry],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSetRevisionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataSetRevisionsResponse_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'revisions', 'listDataSetRevisionsResponse_revisions' - The asset objects listed by the request.
+--
+-- 'httpStatus', 'listDataSetRevisionsResponse_httpStatus' - The response's http status code.
+newListDataSetRevisionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDataSetRevisionsResponse
+newListDataSetRevisionsResponse pHttpStatus_ =
+  ListDataSetRevisionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      revisions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listDataSetRevisionsResponse_nextToken :: Lens.Lens' ListDataSetRevisionsResponse (Prelude.Maybe Prelude.Text)
+listDataSetRevisionsResponse_nextToken = Lens.lens (\ListDataSetRevisionsResponse' {nextToken} -> nextToken) (\s@ListDataSetRevisionsResponse' {} a -> s {nextToken = a} :: ListDataSetRevisionsResponse)
+
+-- | The asset objects listed by the request.
+listDataSetRevisionsResponse_revisions :: Lens.Lens' ListDataSetRevisionsResponse (Prelude.Maybe [RevisionEntry])
+listDataSetRevisionsResponse_revisions = Lens.lens (\ListDataSetRevisionsResponse' {revisions} -> revisions) (\s@ListDataSetRevisionsResponse' {} a -> s {revisions = a} :: ListDataSetRevisionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listDataSetRevisionsResponse_httpStatus :: Lens.Lens' ListDataSetRevisionsResponse Prelude.Int
+listDataSetRevisionsResponse_httpStatus = Lens.lens (\ListDataSetRevisionsResponse' {httpStatus} -> httpStatus) (\s@ListDataSetRevisionsResponse' {} a -> s {httpStatus = a} :: ListDataSetRevisionsResponse)
+
+instance Prelude.NFData ListDataSetRevisionsResponse where
+  rnf ListDataSetRevisionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf revisions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/ListDataSets.hs b/gen/Amazonka/DataExchange/ListDataSets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/ListDataSets.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.ListDataSets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation lists your data sets. When listing by origin OWNED,
+-- results are sorted by CreatedAt in descending order. When listing by
+-- origin ENTITLED, there is no order and the maxResults parameter is
+-- ignored.
+--
+-- This operation returns paginated results.
+module Amazonka.DataExchange.ListDataSets
+  ( -- * Creating a Request
+    ListDataSets (..),
+    newListDataSets,
+
+    -- * Request Lenses
+    listDataSets_maxResults,
+    listDataSets_nextToken,
+    listDataSets_origin,
+
+    -- * Destructuring the Response
+    ListDataSetsResponse (..),
+    newListDataSetsResponse,
+
+    -- * Response Lenses
+    listDataSetsResponse_dataSets,
+    listDataSetsResponse_nextToken,
+    listDataSetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDataSets' smart constructor.
+data ListDataSets = ListDataSets'
+  { -- | The maximum number of results returned by a single call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A property that defines the data set as OWNED by the account (for
+    -- providers) or ENTITLED to the account (for subscribers).
+    origin :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDataSets_maxResults' - The maximum number of results returned by a single call.
+--
+-- 'nextToken', 'listDataSets_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'origin', 'listDataSets_origin' - A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+newListDataSets ::
+  ListDataSets
+newListDataSets =
+  ListDataSets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      origin = Prelude.Nothing
+    }
+
+-- | The maximum number of results returned by a single call.
+listDataSets_maxResults :: Lens.Lens' ListDataSets (Prelude.Maybe Prelude.Natural)
+listDataSets_maxResults = Lens.lens (\ListDataSets' {maxResults} -> maxResults) (\s@ListDataSets' {} a -> s {maxResults = a} :: ListDataSets)
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listDataSets_nextToken :: Lens.Lens' ListDataSets (Prelude.Maybe Prelude.Text)
+listDataSets_nextToken = Lens.lens (\ListDataSets' {nextToken} -> nextToken) (\s@ListDataSets' {} a -> s {nextToken = a} :: ListDataSets)
+
+-- | A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+listDataSets_origin :: Lens.Lens' ListDataSets (Prelude.Maybe Prelude.Text)
+listDataSets_origin = Lens.lens (\ListDataSets' {origin} -> origin) (\s@ListDataSets' {} a -> s {origin = a} :: ListDataSets)
+
+instance Core.AWSPager ListDataSets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDataSetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDataSetsResponse_dataSets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDataSets_nextToken
+          Lens..~ rs
+          Lens.^? listDataSetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDataSets where
+  type AWSResponse ListDataSets = ListDataSetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDataSetsResponse'
+            Prelude.<$> (x Data..?> "DataSets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDataSets where
+  hashWithSalt _salt ListDataSets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` origin
+
+instance Prelude.NFData ListDataSets where
+  rnf ListDataSets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf origin
+
+instance Data.ToHeaders ListDataSets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListDataSets where
+  toPath = Prelude.const "/v1/data-sets"
+
+instance Data.ToQuery ListDataSets where
+  toQuery ListDataSets' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "origin" Data.=: origin
+      ]
+
+-- | /See:/ 'newListDataSetsResponse' smart constructor.
+data ListDataSetsResponse = ListDataSetsResponse'
+  { -- | The data set objects listed by the request.
+    dataSets :: Prelude.Maybe [DataSetEntry],
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDataSetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSets', 'listDataSetsResponse_dataSets' - The data set objects listed by the request.
+--
+-- 'nextToken', 'listDataSetsResponse_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'httpStatus', 'listDataSetsResponse_httpStatus' - The response's http status code.
+newListDataSetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDataSetsResponse
+newListDataSetsResponse pHttpStatus_ =
+  ListDataSetsResponse'
+    { dataSets = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The data set objects listed by the request.
+listDataSetsResponse_dataSets :: Lens.Lens' ListDataSetsResponse (Prelude.Maybe [DataSetEntry])
+listDataSetsResponse_dataSets = Lens.lens (\ListDataSetsResponse' {dataSets} -> dataSets) (\s@ListDataSetsResponse' {} a -> s {dataSets = a} :: ListDataSetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listDataSetsResponse_nextToken :: Lens.Lens' ListDataSetsResponse (Prelude.Maybe Prelude.Text)
+listDataSetsResponse_nextToken = Lens.lens (\ListDataSetsResponse' {nextToken} -> nextToken) (\s@ListDataSetsResponse' {} a -> s {nextToken = a} :: ListDataSetsResponse)
+
+-- | The response's http status code.
+listDataSetsResponse_httpStatus :: Lens.Lens' ListDataSetsResponse Prelude.Int
+listDataSetsResponse_httpStatus = Lens.lens (\ListDataSetsResponse' {httpStatus} -> httpStatus) (\s@ListDataSetsResponse' {} a -> s {httpStatus = a} :: ListDataSetsResponse)
+
+instance Prelude.NFData ListDataSetsResponse where
+  rnf ListDataSetsResponse' {..} =
+    Prelude.rnf dataSets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/ListEventActions.hs b/gen/Amazonka/DataExchange/ListEventActions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/ListEventActions.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.ListEventActions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation lists your event actions.
+--
+-- This operation returns paginated results.
+module Amazonka.DataExchange.ListEventActions
+  ( -- * Creating a Request
+    ListEventActions (..),
+    newListEventActions,
+
+    -- * Request Lenses
+    listEventActions_eventSourceId,
+    listEventActions_maxResults,
+    listEventActions_nextToken,
+
+    -- * Destructuring the Response
+    ListEventActionsResponse (..),
+    newListEventActionsResponse,
+
+    -- * Response Lenses
+    listEventActionsResponse_eventActions,
+    listEventActionsResponse_nextToken,
+    listEventActionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEventActions' smart constructor.
+data ListEventActions = ListEventActions'
+  { -- | The unique identifier for the event source.
+    eventSourceId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results returned by a single call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventActions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventSourceId', 'listEventActions_eventSourceId' - The unique identifier for the event source.
+--
+-- 'maxResults', 'listEventActions_maxResults' - The maximum number of results returned by a single call.
+--
+-- 'nextToken', 'listEventActions_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+newListEventActions ::
+  ListEventActions
+newListEventActions =
+  ListEventActions'
+    { eventSourceId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The unique identifier for the event source.
+listEventActions_eventSourceId :: Lens.Lens' ListEventActions (Prelude.Maybe Prelude.Text)
+listEventActions_eventSourceId = Lens.lens (\ListEventActions' {eventSourceId} -> eventSourceId) (\s@ListEventActions' {} a -> s {eventSourceId = a} :: ListEventActions)
+
+-- | The maximum number of results returned by a single call.
+listEventActions_maxResults :: Lens.Lens' ListEventActions (Prelude.Maybe Prelude.Natural)
+listEventActions_maxResults = Lens.lens (\ListEventActions' {maxResults} -> maxResults) (\s@ListEventActions' {} a -> s {maxResults = a} :: ListEventActions)
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listEventActions_nextToken :: Lens.Lens' ListEventActions (Prelude.Maybe Prelude.Text)
+listEventActions_nextToken = Lens.lens (\ListEventActions' {nextToken} -> nextToken) (\s@ListEventActions' {} a -> s {nextToken = a} :: ListEventActions)
+
+instance Core.AWSPager ListEventActions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEventActionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listEventActionsResponse_eventActions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEventActions_nextToken
+          Lens..~ rs
+          Lens.^? listEventActionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEventActions where
+  type
+    AWSResponse ListEventActions =
+      ListEventActionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEventActionsResponse'
+            Prelude.<$> (x Data..?> "EventActions" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEventActions where
+  hashWithSalt _salt ListEventActions' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventSourceId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListEventActions where
+  rnf ListEventActions' {..} =
+    Prelude.rnf eventSourceId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListEventActions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListEventActions where
+  toPath = Prelude.const "/v1/event-actions"
+
+instance Data.ToQuery ListEventActions where
+  toQuery ListEventActions' {..} =
+    Prelude.mconcat
+      [ "eventSourceId" Data.=: eventSourceId,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListEventActionsResponse' smart constructor.
+data ListEventActionsResponse = ListEventActionsResponse'
+  { -- | The event action objects listed by the request.
+    eventActions :: Prelude.Maybe [EventActionEntry],
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEventActionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventActions', 'listEventActionsResponse_eventActions' - The event action objects listed by the request.
+--
+-- 'nextToken', 'listEventActionsResponse_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'httpStatus', 'listEventActionsResponse_httpStatus' - The response's http status code.
+newListEventActionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEventActionsResponse
+newListEventActionsResponse pHttpStatus_ =
+  ListEventActionsResponse'
+    { eventActions =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The event action objects listed by the request.
+listEventActionsResponse_eventActions :: Lens.Lens' ListEventActionsResponse (Prelude.Maybe [EventActionEntry])
+listEventActionsResponse_eventActions = Lens.lens (\ListEventActionsResponse' {eventActions} -> eventActions) (\s@ListEventActionsResponse' {} a -> s {eventActions = a} :: ListEventActionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listEventActionsResponse_nextToken :: Lens.Lens' ListEventActionsResponse (Prelude.Maybe Prelude.Text)
+listEventActionsResponse_nextToken = Lens.lens (\ListEventActionsResponse' {nextToken} -> nextToken) (\s@ListEventActionsResponse' {} a -> s {nextToken = a} :: ListEventActionsResponse)
+
+-- | The response's http status code.
+listEventActionsResponse_httpStatus :: Lens.Lens' ListEventActionsResponse Prelude.Int
+listEventActionsResponse_httpStatus = Lens.lens (\ListEventActionsResponse' {httpStatus} -> httpStatus) (\s@ListEventActionsResponse' {} a -> s {httpStatus = a} :: ListEventActionsResponse)
+
+instance Prelude.NFData ListEventActionsResponse where
+  rnf ListEventActionsResponse' {..} =
+    Prelude.rnf eventActions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/ListJobs.hs b/gen/Amazonka/DataExchange/ListJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/ListJobs.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.ListJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation lists your jobs sorted by CreatedAt in descending order.
+--
+-- This operation returns paginated results.
+module Amazonka.DataExchange.ListJobs
+  ( -- * Creating a Request
+    ListJobs (..),
+    newListJobs,
+
+    -- * Request Lenses
+    listJobs_dataSetId,
+    listJobs_maxResults,
+    listJobs_nextToken,
+    listJobs_revisionId,
+
+    -- * Destructuring the Response
+    ListJobsResponse (..),
+    newListJobsResponse,
+
+    -- * Response Lenses
+    listJobsResponse_jobs,
+    listJobsResponse_nextToken,
+    listJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListJobs' smart constructor.
+data ListJobs = ListJobs'
+  { -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results returned by a single call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSetId', 'listJobs_dataSetId' - The unique identifier for a data set.
+--
+-- 'maxResults', 'listJobs_maxResults' - The maximum number of results returned by a single call.
+--
+-- 'nextToken', 'listJobs_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'revisionId', 'listJobs_revisionId' - The unique identifier for a revision.
+newListJobs ::
+  ListJobs
+newListJobs =
+  ListJobs'
+    { dataSetId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      revisionId = Prelude.Nothing
+    }
+
+-- | The unique identifier for a data set.
+listJobs_dataSetId :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Text)
+listJobs_dataSetId = Lens.lens (\ListJobs' {dataSetId} -> dataSetId) (\s@ListJobs' {} a -> s {dataSetId = a} :: ListJobs)
+
+-- | The maximum number of results returned by a single call.
+listJobs_maxResults :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Natural)
+listJobs_maxResults = Lens.lens (\ListJobs' {maxResults} -> maxResults) (\s@ListJobs' {} a -> s {maxResults = a} :: ListJobs)
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listJobs_nextToken :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Text)
+listJobs_nextToken = Lens.lens (\ListJobs' {nextToken} -> nextToken) (\s@ListJobs' {} a -> s {nextToken = a} :: ListJobs)
+
+-- | The unique identifier for a revision.
+listJobs_revisionId :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Text)
+listJobs_revisionId = Lens.lens (\ListJobs' {revisionId} -> revisionId) (\s@ListJobs' {} a -> s {revisionId = a} :: ListJobs)
+
+instance Core.AWSPager ListJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listJobsResponse_jobs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listJobs_nextToken
+          Lens..~ rs
+          Lens.^? listJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListJobs where
+  type AWSResponse ListJobs = ListJobsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListJobsResponse'
+            Prelude.<$> (x Data..?> "Jobs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListJobs where
+  hashWithSalt _salt ListJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData ListJobs where
+  rnf ListJobs' {..} =
+    Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToHeaders ListJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListJobs where
+  toPath = Prelude.const "/v1/jobs"
+
+instance Data.ToQuery ListJobs where
+  toQuery ListJobs' {..} =
+    Prelude.mconcat
+      [ "dataSetId" Data.=: dataSetId,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "revisionId" Data.=: revisionId
+      ]
+
+-- | /See:/ 'newListJobsResponse' smart constructor.
+data ListJobsResponse = ListJobsResponse'
+  { -- | The jobs listed by the request.
+    jobs :: Prelude.Maybe [JobEntry],
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobs', 'listJobsResponse_jobs' - The jobs listed by the request.
+--
+-- 'nextToken', 'listJobsResponse_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'httpStatus', 'listJobsResponse_httpStatus' - The response's http status code.
+newListJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListJobsResponse
+newListJobsResponse pHttpStatus_ =
+  ListJobsResponse'
+    { jobs = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The jobs listed by the request.
+listJobsResponse_jobs :: Lens.Lens' ListJobsResponse (Prelude.Maybe [JobEntry])
+listJobsResponse_jobs = Lens.lens (\ListJobsResponse' {jobs} -> jobs) (\s@ListJobsResponse' {} a -> s {jobs = a} :: ListJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listJobsResponse_nextToken :: Lens.Lens' ListJobsResponse (Prelude.Maybe Prelude.Text)
+listJobsResponse_nextToken = Lens.lens (\ListJobsResponse' {nextToken} -> nextToken) (\s@ListJobsResponse' {} a -> s {nextToken = a} :: ListJobsResponse)
+
+-- | The response's http status code.
+listJobsResponse_httpStatus :: Lens.Lens' ListJobsResponse Prelude.Int
+listJobsResponse_httpStatus = Lens.lens (\ListJobsResponse' {httpStatus} -> httpStatus) (\s@ListJobsResponse' {} a -> s {httpStatus = a} :: ListJobsResponse)
+
+instance Prelude.NFData ListJobsResponse where
+  rnf ListJobsResponse' {..} =
+    Prelude.rnf jobs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/ListRevisionAssets.hs b/gen/Amazonka/DataExchange/ListRevisionAssets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/ListRevisionAssets.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.ListRevisionAssets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation lists a revision\'s assets sorted alphabetically in
+-- descending order.
+--
+-- This operation returns paginated results.
+module Amazonka.DataExchange.ListRevisionAssets
+  ( -- * Creating a Request
+    ListRevisionAssets (..),
+    newListRevisionAssets,
+
+    -- * Request Lenses
+    listRevisionAssets_maxResults,
+    listRevisionAssets_nextToken,
+    listRevisionAssets_dataSetId,
+    listRevisionAssets_revisionId,
+
+    -- * Destructuring the Response
+    ListRevisionAssetsResponse (..),
+    newListRevisionAssetsResponse,
+
+    -- * Response Lenses
+    listRevisionAssetsResponse_assets,
+    listRevisionAssetsResponse_nextToken,
+    listRevisionAssetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRevisionAssets' smart constructor.
+data ListRevisionAssets = ListRevisionAssets'
+  { -- | The maximum number of results returned by a single call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRevisionAssets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listRevisionAssets_maxResults' - The maximum number of results returned by a single call.
+--
+-- 'nextToken', 'listRevisionAssets_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'dataSetId', 'listRevisionAssets_dataSetId' - The unique identifier for a data set.
+--
+-- 'revisionId', 'listRevisionAssets_revisionId' - The unique identifier for a revision.
+newListRevisionAssets ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ListRevisionAssets
+newListRevisionAssets pDataSetId_ pRevisionId_ =
+  ListRevisionAssets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      dataSetId = pDataSetId_,
+      revisionId = pRevisionId_
+    }
+
+-- | The maximum number of results returned by a single call.
+listRevisionAssets_maxResults :: Lens.Lens' ListRevisionAssets (Prelude.Maybe Prelude.Natural)
+listRevisionAssets_maxResults = Lens.lens (\ListRevisionAssets' {maxResults} -> maxResults) (\s@ListRevisionAssets' {} a -> s {maxResults = a} :: ListRevisionAssets)
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listRevisionAssets_nextToken :: Lens.Lens' ListRevisionAssets (Prelude.Maybe Prelude.Text)
+listRevisionAssets_nextToken = Lens.lens (\ListRevisionAssets' {nextToken} -> nextToken) (\s@ListRevisionAssets' {} a -> s {nextToken = a} :: ListRevisionAssets)
+
+-- | The unique identifier for a data set.
+listRevisionAssets_dataSetId :: Lens.Lens' ListRevisionAssets Prelude.Text
+listRevisionAssets_dataSetId = Lens.lens (\ListRevisionAssets' {dataSetId} -> dataSetId) (\s@ListRevisionAssets' {} a -> s {dataSetId = a} :: ListRevisionAssets)
+
+-- | The unique identifier for a revision.
+listRevisionAssets_revisionId :: Lens.Lens' ListRevisionAssets Prelude.Text
+listRevisionAssets_revisionId = Lens.lens (\ListRevisionAssets' {revisionId} -> revisionId) (\s@ListRevisionAssets' {} a -> s {revisionId = a} :: ListRevisionAssets)
+
+instance Core.AWSPager ListRevisionAssets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRevisionAssetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listRevisionAssetsResponse_assets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRevisionAssets_nextToken
+          Lens..~ rs
+          Lens.^? listRevisionAssetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRevisionAssets where
+  type
+    AWSResponse ListRevisionAssets =
+      ListRevisionAssetsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRevisionAssetsResponse'
+            Prelude.<$> (x Data..?> "Assets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListRevisionAssets where
+  hashWithSalt _salt ListRevisionAssets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData ListRevisionAssets where
+  rnf ListRevisionAssets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToHeaders ListRevisionAssets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListRevisionAssets where
+  toPath ListRevisionAssets' {..} =
+    Prelude.mconcat
+      [ "/v1/data-sets/",
+        Data.toBS dataSetId,
+        "/revisions/",
+        Data.toBS revisionId,
+        "/assets"
+      ]
+
+instance Data.ToQuery ListRevisionAssets where
+  toQuery ListRevisionAssets' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListRevisionAssetsResponse' smart constructor.
+data ListRevisionAssetsResponse = ListRevisionAssetsResponse'
+  { -- | The asset objects listed by the request.
+    assets :: Prelude.Maybe [AssetEntry],
+    -- | The token value retrieved from a previous call to access the next page
+    -- of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRevisionAssetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assets', 'listRevisionAssetsResponse_assets' - The asset objects listed by the request.
+--
+-- 'nextToken', 'listRevisionAssetsResponse_nextToken' - The token value retrieved from a previous call to access the next page
+-- of results.
+--
+-- 'httpStatus', 'listRevisionAssetsResponse_httpStatus' - The response's http status code.
+newListRevisionAssetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRevisionAssetsResponse
+newListRevisionAssetsResponse pHttpStatus_ =
+  ListRevisionAssetsResponse'
+    { assets =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The asset objects listed by the request.
+listRevisionAssetsResponse_assets :: Lens.Lens' ListRevisionAssetsResponse (Prelude.Maybe [AssetEntry])
+listRevisionAssetsResponse_assets = Lens.lens (\ListRevisionAssetsResponse' {assets} -> assets) (\s@ListRevisionAssetsResponse' {} a -> s {assets = a} :: ListRevisionAssetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token value retrieved from a previous call to access the next page
+-- of results.
+listRevisionAssetsResponse_nextToken :: Lens.Lens' ListRevisionAssetsResponse (Prelude.Maybe Prelude.Text)
+listRevisionAssetsResponse_nextToken = Lens.lens (\ListRevisionAssetsResponse' {nextToken} -> nextToken) (\s@ListRevisionAssetsResponse' {} a -> s {nextToken = a} :: ListRevisionAssetsResponse)
+
+-- | The response's http status code.
+listRevisionAssetsResponse_httpStatus :: Lens.Lens' ListRevisionAssetsResponse Prelude.Int
+listRevisionAssetsResponse_httpStatus = Lens.lens (\ListRevisionAssetsResponse' {httpStatus} -> httpStatus) (\s@ListRevisionAssetsResponse' {} a -> s {httpStatus = a} :: ListRevisionAssetsResponse)
+
+instance Prelude.NFData ListRevisionAssetsResponse where
+  rnf ListRevisionAssetsResponse' {..} =
+    Prelude.rnf assets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/ListTagsForResource.hs b/gen/Amazonka/DataExchange/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/ListTagsForResource.hs
@@ -0,0 +1,159 @@
+{-# 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.DataExchange.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)
+--
+-- This operation lists the tags on the resource.
+module Amazonka.DataExchange.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.DataExchange.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'
+  { -- | An Amazon Resource Name (ARN) that uniquely identifies an AWS 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' - An Amazon Resource Name (ARN) that uniquely identifies an AWS resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | An Amazon Resource Name (ARN) that uniquely identifies an AWS 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.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A label that consists of a customer-defined key and an optional value.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | 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' - A label that consists of a customer-defined key and an optional value.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A label that consists of a customer-defined key and an optional value.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+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/DataExchange/RevokeRevision.hs b/gen/Amazonka/DataExchange/RevokeRevision.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/RevokeRevision.hs
@@ -0,0 +1,369 @@
+{-# 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.DataExchange.RevokeRevision
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation revokes subscribers\' access to a revision.
+module Amazonka.DataExchange.RevokeRevision
+  ( -- * Creating a Request
+    RevokeRevision (..),
+    newRevokeRevision,
+
+    -- * Request Lenses
+    revokeRevision_dataSetId,
+    revokeRevision_revisionId,
+    revokeRevision_revocationComment,
+
+    -- * Destructuring the Response
+    RevokeRevisionResponse (..),
+    newRevokeRevisionResponse,
+
+    -- * Response Lenses
+    revokeRevisionResponse_arn,
+    revokeRevisionResponse_comment,
+    revokeRevisionResponse_createdAt,
+    revokeRevisionResponse_dataSetId,
+    revokeRevisionResponse_finalized,
+    revokeRevisionResponse_id,
+    revokeRevisionResponse_revocationComment,
+    revokeRevisionResponse_revoked,
+    revokeRevisionResponse_revokedAt,
+    revokeRevisionResponse_sourceId,
+    revokeRevisionResponse_updatedAt,
+    revokeRevisionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRevokeRevision' smart constructor.
+data RevokeRevision = RevokeRevision'
+  { -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text,
+    -- | A required comment to inform subscribers of the reason their access to
+    -- the revision was revoked.
+    revocationComment :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeRevision' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSetId', 'revokeRevision_dataSetId' - The unique identifier for a data set.
+--
+-- 'revisionId', 'revokeRevision_revisionId' - The unique identifier for a revision.
+--
+-- 'revocationComment', 'revokeRevision_revocationComment' - A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+newRevokeRevision ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  -- | 'revocationComment'
+  Prelude.Text ->
+  RevokeRevision
+newRevokeRevision
+  pDataSetId_
+  pRevisionId_
+  pRevocationComment_ =
+    RevokeRevision'
+      { dataSetId = pDataSetId_,
+        revisionId = pRevisionId_,
+        revocationComment = pRevocationComment_
+      }
+
+-- | The unique identifier for a data set.
+revokeRevision_dataSetId :: Lens.Lens' RevokeRevision Prelude.Text
+revokeRevision_dataSetId = Lens.lens (\RevokeRevision' {dataSetId} -> dataSetId) (\s@RevokeRevision' {} a -> s {dataSetId = a} :: RevokeRevision)
+
+-- | The unique identifier for a revision.
+revokeRevision_revisionId :: Lens.Lens' RevokeRevision Prelude.Text
+revokeRevision_revisionId = Lens.lens (\RevokeRevision' {revisionId} -> revisionId) (\s@RevokeRevision' {} a -> s {revisionId = a} :: RevokeRevision)
+
+-- | A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+revokeRevision_revocationComment :: Lens.Lens' RevokeRevision Prelude.Text
+revokeRevision_revocationComment = Lens.lens (\RevokeRevision' {revocationComment} -> revocationComment) (\s@RevokeRevision' {} a -> s {revocationComment = a} :: RevokeRevision)
+
+instance Core.AWSRequest RevokeRevision where
+  type
+    AWSResponse RevokeRevision =
+      RevokeRevisionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RevokeRevisionResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Comment")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "DataSetId")
+            Prelude.<*> (x Data..?> "Finalized")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "RevocationComment")
+            Prelude.<*> (x Data..?> "Revoked")
+            Prelude.<*> (x Data..?> "RevokedAt")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RevokeRevision where
+  hashWithSalt _salt RevokeRevision' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` revisionId
+      `Prelude.hashWithSalt` revocationComment
+
+instance Prelude.NFData RevokeRevision where
+  rnf RevokeRevision' {..} =
+    Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf revocationComment
+
+instance Data.ToHeaders RevokeRevision where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RevokeRevision where
+  toJSON RevokeRevision' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("RevocationComment" Data..= revocationComment)
+          ]
+      )
+
+instance Data.ToPath RevokeRevision where
+  toPath RevokeRevision' {..} =
+    Prelude.mconcat
+      [ "/v1/data-sets/",
+        Data.toBS dataSetId,
+        "/revisions/",
+        Data.toBS revisionId,
+        "/revoke"
+      ]
+
+instance Data.ToQuery RevokeRevision where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRevokeRevisionResponse' smart constructor.
+data RevokeRevisionResponse = RevokeRevisionResponse'
+  { -- | The ARN for the revision.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | An optional comment about the revision.
+    comment :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the revision was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the data set associated with the data set
+    -- revision.
+    dataSetId :: Prelude.Maybe Prelude.Text,
+    -- | To publish a revision to a data set in a product, the revision must
+    -- first be finalized. Finalizing a revision tells AWS Data Exchange that
+    -- changes to the assets in the revision are complete. After it\'s in this
+    -- read-only state, you can publish the revision to your products.
+    -- Finalized revisions can be published through the AWS Data Exchange
+    -- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+    -- Marketplace Catalog API action. When using the API, revisions are
+    -- uniquely identified by their ARN.
+    finalized :: Prelude.Maybe Prelude.Bool,
+    -- | The unique identifier for the revision.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | A required comment to inform subscribers of the reason their access to
+    -- the revision was revoked.
+    revocationComment :: Prelude.Maybe Prelude.Text,
+    -- | A status indicating that subscribers\' access to the revision was
+    -- revoked.
+    revoked :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time that the revision was revoked, in ISO 8601 format.
+    revokedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The revision ID of the owned revision corresponding to the entitled
+    -- revision being viewed. This parameter is returned when a revision owner
+    -- is viewing the entitled copy of its owned revision.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the revision was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeRevisionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'revokeRevisionResponse_arn' - The ARN for the revision.
+--
+-- 'comment', 'revokeRevisionResponse_comment' - An optional comment about the revision.
+--
+-- 'createdAt', 'revokeRevisionResponse_createdAt' - The date and time that the revision was created, in ISO 8601 format.
+--
+-- 'dataSetId', 'revokeRevisionResponse_dataSetId' - The unique identifier for the data set associated with the data set
+-- revision.
+--
+-- 'finalized', 'revokeRevisionResponse_finalized' - To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- changes to the assets in the revision are complete. After it\'s in this
+-- read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+--
+-- 'id', 'revokeRevisionResponse_id' - The unique identifier for the revision.
+--
+-- 'revocationComment', 'revokeRevisionResponse_revocationComment' - A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+--
+-- 'revoked', 'revokeRevisionResponse_revoked' - A status indicating that subscribers\' access to the revision was
+-- revoked.
+--
+-- 'revokedAt', 'revokeRevisionResponse_revokedAt' - The date and time that the revision was revoked, in ISO 8601 format.
+--
+-- 'sourceId', 'revokeRevisionResponse_sourceId' - The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+--
+-- 'updatedAt', 'revokeRevisionResponse_updatedAt' - The date and time that the revision was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'revokeRevisionResponse_httpStatus' - The response's http status code.
+newRevokeRevisionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RevokeRevisionResponse
+newRevokeRevisionResponse pHttpStatus_ =
+  RevokeRevisionResponse'
+    { arn = Prelude.Nothing,
+      comment = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      dataSetId = Prelude.Nothing,
+      finalized = Prelude.Nothing,
+      id = Prelude.Nothing,
+      revocationComment = Prelude.Nothing,
+      revoked = Prelude.Nothing,
+      revokedAt = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the revision.
+revokeRevisionResponse_arn :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.Text)
+revokeRevisionResponse_arn = Lens.lens (\RevokeRevisionResponse' {arn} -> arn) (\s@RevokeRevisionResponse' {} a -> s {arn = a} :: RevokeRevisionResponse)
+
+-- | An optional comment about the revision.
+revokeRevisionResponse_comment :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.Text)
+revokeRevisionResponse_comment = Lens.lens (\RevokeRevisionResponse' {comment} -> comment) (\s@RevokeRevisionResponse' {} a -> s {comment = a} :: RevokeRevisionResponse)
+
+-- | The date and time that the revision was created, in ISO 8601 format.
+revokeRevisionResponse_createdAt :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+revokeRevisionResponse_createdAt = Lens.lens (\RevokeRevisionResponse' {createdAt} -> createdAt) (\s@RevokeRevisionResponse' {} a -> s {createdAt = a} :: RevokeRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the data set associated with the data set
+-- revision.
+revokeRevisionResponse_dataSetId :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.Text)
+revokeRevisionResponse_dataSetId = Lens.lens (\RevokeRevisionResponse' {dataSetId} -> dataSetId) (\s@RevokeRevisionResponse' {} a -> s {dataSetId = a} :: RevokeRevisionResponse)
+
+-- | To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- changes to the assets in the revision are complete. After it\'s in this
+-- read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+revokeRevisionResponse_finalized :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.Bool)
+revokeRevisionResponse_finalized = Lens.lens (\RevokeRevisionResponse' {finalized} -> finalized) (\s@RevokeRevisionResponse' {} a -> s {finalized = a} :: RevokeRevisionResponse)
+
+-- | The unique identifier for the revision.
+revokeRevisionResponse_id :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.Text)
+revokeRevisionResponse_id = Lens.lens (\RevokeRevisionResponse' {id} -> id) (\s@RevokeRevisionResponse' {} a -> s {id = a} :: RevokeRevisionResponse)
+
+-- | A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+revokeRevisionResponse_revocationComment :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.Text)
+revokeRevisionResponse_revocationComment = Lens.lens (\RevokeRevisionResponse' {revocationComment} -> revocationComment) (\s@RevokeRevisionResponse' {} a -> s {revocationComment = a} :: RevokeRevisionResponse)
+
+-- | A status indicating that subscribers\' access to the revision was
+-- revoked.
+revokeRevisionResponse_revoked :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.Bool)
+revokeRevisionResponse_revoked = Lens.lens (\RevokeRevisionResponse' {revoked} -> revoked) (\s@RevokeRevisionResponse' {} a -> s {revoked = a} :: RevokeRevisionResponse)
+
+-- | The date and time that the revision was revoked, in ISO 8601 format.
+revokeRevisionResponse_revokedAt :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+revokeRevisionResponse_revokedAt = Lens.lens (\RevokeRevisionResponse' {revokedAt} -> revokedAt) (\s@RevokeRevisionResponse' {} a -> s {revokedAt = a} :: RevokeRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+revokeRevisionResponse_sourceId :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.Text)
+revokeRevisionResponse_sourceId = Lens.lens (\RevokeRevisionResponse' {sourceId} -> sourceId) (\s@RevokeRevisionResponse' {} a -> s {sourceId = a} :: RevokeRevisionResponse)
+
+-- | The date and time that the revision was last updated, in ISO 8601
+-- format.
+revokeRevisionResponse_updatedAt :: Lens.Lens' RevokeRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+revokeRevisionResponse_updatedAt = Lens.lens (\RevokeRevisionResponse' {updatedAt} -> updatedAt) (\s@RevokeRevisionResponse' {} a -> s {updatedAt = a} :: RevokeRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+revokeRevisionResponse_httpStatus :: Lens.Lens' RevokeRevisionResponse Prelude.Int
+revokeRevisionResponse_httpStatus = Lens.lens (\RevokeRevisionResponse' {httpStatus} -> httpStatus) (\s@RevokeRevisionResponse' {} a -> s {httpStatus = a} :: RevokeRevisionResponse)
+
+instance Prelude.NFData RevokeRevisionResponse where
+  rnf RevokeRevisionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf finalized
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf revocationComment
+      `Prelude.seq` Prelude.rnf revoked
+      `Prelude.seq` Prelude.rnf revokedAt
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/SendApiAsset.hs b/gen/Amazonka/DataExchange/SendApiAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/SendApiAsset.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.DataExchange.SendApiAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation invokes an API Gateway API asset. The request is proxied
+-- to the provider’s API Gateway API.
+module Amazonka.DataExchange.SendApiAsset
+  ( -- * Creating a Request
+    SendApiAsset (..),
+    newSendApiAsset,
+
+    -- * Request Lenses
+    sendApiAsset_body,
+    sendApiAsset_method,
+    sendApiAsset_path,
+    sendApiAsset_queryStringParameters,
+    sendApiAsset_requestHeaders,
+    sendApiAsset_assetId,
+    sendApiAsset_dataSetId,
+    sendApiAsset_revisionId,
+
+    -- * Destructuring the Response
+    SendApiAssetResponse (..),
+    newSendApiAssetResponse,
+
+    -- * Response Lenses
+    sendApiAssetResponse_body,
+    sendApiAssetResponse_responseHeaders,
+    sendApiAssetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSendApiAsset' smart constructor.
+data SendApiAsset = SendApiAsset'
+  { -- | The request body.
+    body :: Prelude.Maybe Prelude.ByteString,
+    -- | HTTP method value for the API request. Alternatively, you can use the
+    -- appropriate verb in your request.
+    method :: Prelude.Maybe Prelude.Text,
+    -- | URI path value for the API request. Alternatively, you can set the URI
+    -- path directly by invoking \/v1\/{pathValue}.
+    path :: Prelude.Maybe Prelude.Text,
+    -- | Attach query string parameters to the end of the URI (for example,
+    -- \/v1\/examplePath?exampleParam=exampleValue).
+    queryStringParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Any header value prefixed with x-amzn-dataexchange-header- will have
+    -- that stripped before sending the Asset API request. Use this when you
+    -- want to override a header that AWS Data Exchange uses. Alternatively,
+    -- you can use the header without a prefix to the HTTP request.
+    requestHeaders :: Prelude.HashMap Prelude.Text Prelude.Text,
+    -- | Asset ID value for the API request.
+    assetId :: Prelude.Text,
+    -- | Data set ID value for the API request.
+    dataSetId :: Prelude.Text,
+    -- | Revision ID value for the API request.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendApiAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'body', 'sendApiAsset_body' - The request body.
+--
+-- 'method', 'sendApiAsset_method' - HTTP method value for the API request. Alternatively, you can use the
+-- appropriate verb in your request.
+--
+-- 'path', 'sendApiAsset_path' - URI path value for the API request. Alternatively, you can set the URI
+-- path directly by invoking \/v1\/{pathValue}.
+--
+-- 'queryStringParameters', 'sendApiAsset_queryStringParameters' - Attach query string parameters to the end of the URI (for example,
+-- \/v1\/examplePath?exampleParam=exampleValue).
+--
+-- 'requestHeaders', 'sendApiAsset_requestHeaders' - Any header value prefixed with x-amzn-dataexchange-header- will have
+-- that stripped before sending the Asset API request. Use this when you
+-- want to override a header that AWS Data Exchange uses. Alternatively,
+-- you can use the header without a prefix to the HTTP request.
+--
+-- 'assetId', 'sendApiAsset_assetId' - Asset ID value for the API request.
+--
+-- 'dataSetId', 'sendApiAsset_dataSetId' - Data set ID value for the API request.
+--
+-- 'revisionId', 'sendApiAsset_revisionId' - Revision ID value for the API request.
+newSendApiAsset ::
+  -- | 'assetId'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  SendApiAsset
+newSendApiAsset pAssetId_ pDataSetId_ pRevisionId_ =
+  SendApiAsset'
+    { body = Prelude.Nothing,
+      method = Prelude.Nothing,
+      path = Prelude.Nothing,
+      queryStringParameters = Prelude.Nothing,
+      requestHeaders = Prelude.mempty,
+      assetId = pAssetId_,
+      dataSetId = pDataSetId_,
+      revisionId = pRevisionId_
+    }
+
+-- | The request body.
+sendApiAsset_body :: Lens.Lens' SendApiAsset (Prelude.Maybe Prelude.ByteString)
+sendApiAsset_body = Lens.lens (\SendApiAsset' {body} -> body) (\s@SendApiAsset' {} a -> s {body = a} :: SendApiAsset)
+
+-- | HTTP method value for the API request. Alternatively, you can use the
+-- appropriate verb in your request.
+sendApiAsset_method :: Lens.Lens' SendApiAsset (Prelude.Maybe Prelude.Text)
+sendApiAsset_method = Lens.lens (\SendApiAsset' {method} -> method) (\s@SendApiAsset' {} a -> s {method = a} :: SendApiAsset)
+
+-- | URI path value for the API request. Alternatively, you can set the URI
+-- path directly by invoking \/v1\/{pathValue}.
+sendApiAsset_path :: Lens.Lens' SendApiAsset (Prelude.Maybe Prelude.Text)
+sendApiAsset_path = Lens.lens (\SendApiAsset' {path} -> path) (\s@SendApiAsset' {} a -> s {path = a} :: SendApiAsset)
+
+-- | Attach query string parameters to the end of the URI (for example,
+-- \/v1\/examplePath?exampleParam=exampleValue).
+sendApiAsset_queryStringParameters :: Lens.Lens' SendApiAsset (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+sendApiAsset_queryStringParameters = Lens.lens (\SendApiAsset' {queryStringParameters} -> queryStringParameters) (\s@SendApiAsset' {} a -> s {queryStringParameters = a} :: SendApiAsset) Prelude.. Lens.mapping Lens.coerced
+
+-- | Any header value prefixed with x-amzn-dataexchange-header- will have
+-- that stripped before sending the Asset API request. Use this when you
+-- want to override a header that AWS Data Exchange uses. Alternatively,
+-- you can use the header without a prefix to the HTTP request.
+sendApiAsset_requestHeaders :: Lens.Lens' SendApiAsset (Prelude.HashMap Prelude.Text Prelude.Text)
+sendApiAsset_requestHeaders = Lens.lens (\SendApiAsset' {requestHeaders} -> requestHeaders) (\s@SendApiAsset' {} a -> s {requestHeaders = a} :: SendApiAsset) Prelude.. Lens.coerced
+
+-- | Asset ID value for the API request.
+sendApiAsset_assetId :: Lens.Lens' SendApiAsset Prelude.Text
+sendApiAsset_assetId = Lens.lens (\SendApiAsset' {assetId} -> assetId) (\s@SendApiAsset' {} a -> s {assetId = a} :: SendApiAsset)
+
+-- | Data set ID value for the API request.
+sendApiAsset_dataSetId :: Lens.Lens' SendApiAsset Prelude.Text
+sendApiAsset_dataSetId = Lens.lens (\SendApiAsset' {dataSetId} -> dataSetId) (\s@SendApiAsset' {} a -> s {dataSetId = a} :: SendApiAsset)
+
+-- | Revision ID value for the API request.
+sendApiAsset_revisionId :: Lens.Lens' SendApiAsset Prelude.Text
+sendApiAsset_revisionId = Lens.lens (\SendApiAsset' {revisionId} -> revisionId) (\s@SendApiAsset' {} a -> s {revisionId = a} :: SendApiAsset)
+
+instance Core.AWSRequest SendApiAsset where
+  type AWSResponse SendApiAsset = SendApiAssetResponse
+  request overrides =
+    Request.postBody (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          SendApiAssetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (Data.parseHeadersMap "" h)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SendApiAsset where
+  hashWithSalt _salt SendApiAsset' {..} =
+    _salt
+      `Prelude.hashWithSalt` body
+      `Prelude.hashWithSalt` method
+      `Prelude.hashWithSalt` path
+      `Prelude.hashWithSalt` queryStringParameters
+      `Prelude.hashWithSalt` requestHeaders
+      `Prelude.hashWithSalt` assetId
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData SendApiAsset where
+  rnf SendApiAsset' {..} =
+    Prelude.rnf body
+      `Prelude.seq` Prelude.rnf method
+      `Prelude.seq` Prelude.rnf path
+      `Prelude.seq` Prelude.rnf queryStringParameters
+      `Prelude.seq` Prelude.rnf requestHeaders
+      `Prelude.seq` Prelude.rnf assetId
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToBody SendApiAsset where
+  toBody SendApiAsset' {..} = Data.toBody body
+
+instance Data.ToHeaders SendApiAsset where
+  toHeaders SendApiAsset' {..} =
+    Prelude.mconcat
+      [ "x-amzn-dataexchange-http-method" Data.=# method,
+        "x-amzn-dataexchange-path" Data.=# path,
+        "x-amzn-dataexchange-header-" Data.=# requestHeaders,
+        "x-amzn-dataexchange-asset-id" Data.=# assetId,
+        "x-amzn-dataexchange-data-set-id" Data.=# dataSetId,
+        "x-amzn-dataexchange-revision-id" Data.=# revisionId,
+        "Content-Type"
+          Data.=# ("application/x-amz-json-1.1" :: Prelude.ByteString)
+      ]
+
+instance Data.ToPath SendApiAsset where
+  toPath = Prelude.const "/v1"
+
+instance Data.ToQuery SendApiAsset where
+  toQuery SendApiAsset' {..} =
+    Prelude.mconcat
+      [ "QueryStringParameters"
+          Data.=: Data.toQuery
+            ( Data.toQueryMap "entry" "key" "value"
+                Prelude.<$> queryStringParameters
+            )
+      ]
+
+-- | /See:/ 'newSendApiAssetResponse' smart constructor.
+data SendApiAssetResponse = SendApiAssetResponse'
+  { -- | The response body from the underlying API tracked by the API asset.
+    body :: Prelude.Maybe Prelude.ByteString,
+    -- | The response headers from the underlying API tracked by the API asset.
+    responseHeaders :: Prelude.HashMap Prelude.Text Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendApiAssetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'body', 'sendApiAssetResponse_body' - The response body from the underlying API tracked by the API asset.
+--
+-- 'responseHeaders', 'sendApiAssetResponse_responseHeaders' - The response headers from the underlying API tracked by the API asset.
+--
+-- 'httpStatus', 'sendApiAssetResponse_httpStatus' - The response's http status code.
+newSendApiAssetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SendApiAssetResponse
+newSendApiAssetResponse pHttpStatus_ =
+  SendApiAssetResponse'
+    { body = Prelude.Nothing,
+      responseHeaders = Prelude.mempty,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The response body from the underlying API tracked by the API asset.
+sendApiAssetResponse_body :: Lens.Lens' SendApiAssetResponse (Prelude.Maybe Prelude.ByteString)
+sendApiAssetResponse_body = Lens.lens (\SendApiAssetResponse' {body} -> body) (\s@SendApiAssetResponse' {} a -> s {body = a} :: SendApiAssetResponse)
+
+-- | The response headers from the underlying API tracked by the API asset.
+sendApiAssetResponse_responseHeaders :: Lens.Lens' SendApiAssetResponse (Prelude.HashMap Prelude.Text Prelude.Text)
+sendApiAssetResponse_responseHeaders = Lens.lens (\SendApiAssetResponse' {responseHeaders} -> responseHeaders) (\s@SendApiAssetResponse' {} a -> s {responseHeaders = a} :: SendApiAssetResponse) Prelude.. Lens.coerced
+
+-- | The response's http status code.
+sendApiAssetResponse_httpStatus :: Lens.Lens' SendApiAssetResponse Prelude.Int
+sendApiAssetResponse_httpStatus = Lens.lens (\SendApiAssetResponse' {httpStatus} -> httpStatus) (\s@SendApiAssetResponse' {} a -> s {httpStatus = a} :: SendApiAssetResponse)
+
+instance Prelude.NFData SendApiAssetResponse where
+  rnf SendApiAssetResponse' {..} =
+    Prelude.rnf body
+      `Prelude.seq` Prelude.rnf responseHeaders
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/StartJob.hs b/gen/Amazonka/DataExchange/StartJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/StartJob.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.StartJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation starts a job.
+module Amazonka.DataExchange.StartJob
+  ( -- * Creating a Request
+    StartJob (..),
+    newStartJob,
+
+    -- * Request Lenses
+    startJob_jobId,
+
+    -- * Destructuring the Response
+    StartJobResponse (..),
+    newStartJobResponse,
+
+    -- * Response Lenses
+    startJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartJob' smart constructor.
+data StartJob = StartJob'
+  { -- | The unique identifier for a job.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'startJob_jobId' - The unique identifier for a job.
+newStartJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  StartJob
+newStartJob pJobId_ = StartJob' {jobId = pJobId_}
+
+-- | The unique identifier for a job.
+startJob_jobId :: Lens.Lens' StartJob Prelude.Text
+startJob_jobId = Lens.lens (\StartJob' {jobId} -> jobId) (\s@StartJob' {} a -> s {jobId = a} :: StartJob)
+
+instance Core.AWSRequest StartJob where
+  type AWSResponse StartJob = StartJobResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartJob where
+  hashWithSalt _salt StartJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData StartJob where
+  rnf StartJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders StartJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartJob where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath StartJob where
+  toPath StartJob' {..} =
+    Prelude.mconcat ["/v1/jobs/", Data.toBS jobId]
+
+instance Data.ToQuery StartJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartJobResponse' smart constructor.
+data StartJobResponse = StartJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startJobResponse_httpStatus' - The response's http status code.
+newStartJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartJobResponse
+newStartJobResponse pHttpStatus_ =
+  StartJobResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+startJobResponse_httpStatus :: Lens.Lens' StartJobResponse Prelude.Int
+startJobResponse_httpStatus = Lens.lens (\StartJobResponse' {httpStatus} -> httpStatus) (\s@StartJobResponse' {} a -> s {httpStatus = a} :: StartJobResponse)
+
+instance Prelude.NFData StartJobResponse where
+  rnf StartJobResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/TagResource.hs b/gen/Amazonka/DataExchange/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/TagResource.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.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)
+--
+-- This operation tags a resource.
+module Amazonka.DataExchange.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.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'
+  { -- | An Amazon Resource Name (ARN) that uniquely identifies an AWS resource.
+    resourceArn :: Prelude.Text,
+    -- | A label that consists of a customer-defined key and an optional value.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  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' - An Amazon Resource Name (ARN) that uniquely identifies an AWS resource.
+--
+-- 'tags', 'tagResource_tags' - A label that consists of a customer-defined key and an optional value.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | An Amazon Resource Name (ARN) that uniquely identifies an AWS resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A label that consists of a customer-defined key and an optional value.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+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.receiveNull TagResourceResponse'
+
+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
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  {
+  }
+  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.
+newTagResourceResponse ::
+  TagResourceResponse
+newTagResourceResponse = TagResourceResponse'
+
+instance Prelude.NFData TagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DataExchange/Types.hs b/gen/Amazonka/DataExchange/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types.hs
@@ -0,0 +1,704 @@
+{-# 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.DataExchange.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.DataExchange.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceLimitExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * AssetType
+    AssetType (..),
+
+    -- * Code
+    Code (..),
+
+    -- * DatabaseLFTagPolicyPermission
+    DatabaseLFTagPolicyPermission (..),
+
+    -- * JobErrorLimitName
+    JobErrorLimitName (..),
+
+    -- * JobErrorResourceTypes
+    JobErrorResourceTypes (..),
+
+    -- * LFPermission
+    LFPermission (..),
+
+    -- * LFResourceType
+    LFResourceType (..),
+
+    -- * LakeFormationDataPermissionType
+    LakeFormationDataPermissionType (..),
+
+    -- * Origin
+    Origin (..),
+
+    -- * ProtocolType
+    ProtocolType (..),
+
+    -- * ServerSideEncryptionTypes
+    ServerSideEncryptionTypes (..),
+
+    -- * State
+    State (..),
+
+    -- * TableTagPolicyLFPermission
+    TableTagPolicyLFPermission (..),
+
+    -- * Type
+    Type (..),
+
+    -- * Action
+    Action (..),
+    newAction,
+    action_exportRevisionToS3,
+
+    -- * ApiGatewayApiAsset
+    ApiGatewayApiAsset (..),
+    newApiGatewayApiAsset,
+    apiGatewayApiAsset_apiDescription,
+    apiGatewayApiAsset_apiEndpoint,
+    apiGatewayApiAsset_apiId,
+    apiGatewayApiAsset_apiKey,
+    apiGatewayApiAsset_apiName,
+    apiGatewayApiAsset_apiSpecificationDownloadUrl,
+    apiGatewayApiAsset_apiSpecificationDownloadUrlExpiresAt,
+    apiGatewayApiAsset_protocolType,
+    apiGatewayApiAsset_stage,
+
+    -- * AssetDestinationEntry
+    AssetDestinationEntry (..),
+    newAssetDestinationEntry,
+    assetDestinationEntry_key,
+    assetDestinationEntry_assetId,
+    assetDestinationEntry_bucket,
+
+    -- * AssetDetails
+    AssetDetails (..),
+    newAssetDetails,
+    assetDetails_apiGatewayApiAsset,
+    assetDetails_lakeFormationDataPermissionAsset,
+    assetDetails_redshiftDataShareAsset,
+    assetDetails_s3DataAccessAsset,
+    assetDetails_s3SnapshotAsset,
+
+    -- * AssetEntry
+    AssetEntry (..),
+    newAssetEntry,
+    assetEntry_sourceId,
+    assetEntry_arn,
+    assetEntry_assetDetails,
+    assetEntry_assetType,
+    assetEntry_createdAt,
+    assetEntry_dataSetId,
+    assetEntry_id,
+    assetEntry_name,
+    assetEntry_revisionId,
+    assetEntry_updatedAt,
+
+    -- * AssetSourceEntry
+    AssetSourceEntry (..),
+    newAssetSourceEntry,
+    assetSourceEntry_bucket,
+    assetSourceEntry_key,
+
+    -- * AutoExportRevisionDestinationEntry
+    AutoExportRevisionDestinationEntry (..),
+    newAutoExportRevisionDestinationEntry,
+    autoExportRevisionDestinationEntry_keyPattern,
+    autoExportRevisionDestinationEntry_bucket,
+
+    -- * AutoExportRevisionToS3RequestDetails
+    AutoExportRevisionToS3RequestDetails (..),
+    newAutoExportRevisionToS3RequestDetails,
+    autoExportRevisionToS3RequestDetails_encryption,
+    autoExportRevisionToS3RequestDetails_revisionDestination,
+
+    -- * CreateS3DataAccessFromS3BucketRequestDetails
+    CreateS3DataAccessFromS3BucketRequestDetails (..),
+    newCreateS3DataAccessFromS3BucketRequestDetails,
+    createS3DataAccessFromS3BucketRequestDetails_assetSource,
+    createS3DataAccessFromS3BucketRequestDetails_dataSetId,
+    createS3DataAccessFromS3BucketRequestDetails_revisionId,
+
+    -- * CreateS3DataAccessFromS3BucketResponseDetails
+    CreateS3DataAccessFromS3BucketResponseDetails (..),
+    newCreateS3DataAccessFromS3BucketResponseDetails,
+    createS3DataAccessFromS3BucketResponseDetails_assetSource,
+    createS3DataAccessFromS3BucketResponseDetails_dataSetId,
+    createS3DataAccessFromS3BucketResponseDetails_revisionId,
+
+    -- * DataSetEntry
+    DataSetEntry (..),
+    newDataSetEntry,
+    dataSetEntry_originDetails,
+    dataSetEntry_sourceId,
+    dataSetEntry_arn,
+    dataSetEntry_assetType,
+    dataSetEntry_createdAt,
+    dataSetEntry_description,
+    dataSetEntry_id,
+    dataSetEntry_name,
+    dataSetEntry_origin,
+    dataSetEntry_updatedAt,
+
+    -- * DatabaseLFTagPolicy
+    DatabaseLFTagPolicy (..),
+    newDatabaseLFTagPolicy,
+    databaseLFTagPolicy_expression,
+
+    -- * DatabaseLFTagPolicyAndPermissions
+    DatabaseLFTagPolicyAndPermissions (..),
+    newDatabaseLFTagPolicyAndPermissions,
+    databaseLFTagPolicyAndPermissions_expression,
+    databaseLFTagPolicyAndPermissions_permissions,
+
+    -- * Details
+    Details (..),
+    newDetails,
+    details_importAssetFromSignedUrlJobErrorDetails,
+    details_importAssetsFromS3JobErrorDetails,
+
+    -- * Event
+    Event (..),
+    newEvent,
+    event_revisionPublished,
+
+    -- * EventActionEntry
+    EventActionEntry (..),
+    newEventActionEntry,
+    eventActionEntry_action,
+    eventActionEntry_arn,
+    eventActionEntry_createdAt,
+    eventActionEntry_event,
+    eventActionEntry_id,
+    eventActionEntry_updatedAt,
+
+    -- * ExportAssetToSignedUrlRequestDetails
+    ExportAssetToSignedUrlRequestDetails (..),
+    newExportAssetToSignedUrlRequestDetails,
+    exportAssetToSignedUrlRequestDetails_assetId,
+    exportAssetToSignedUrlRequestDetails_dataSetId,
+    exportAssetToSignedUrlRequestDetails_revisionId,
+
+    -- * ExportAssetToSignedUrlResponseDetails
+    ExportAssetToSignedUrlResponseDetails (..),
+    newExportAssetToSignedUrlResponseDetails,
+    exportAssetToSignedUrlResponseDetails_signedUrl,
+    exportAssetToSignedUrlResponseDetails_signedUrlExpiresAt,
+    exportAssetToSignedUrlResponseDetails_assetId,
+    exportAssetToSignedUrlResponseDetails_dataSetId,
+    exportAssetToSignedUrlResponseDetails_revisionId,
+
+    -- * ExportAssetsToS3RequestDetails
+    ExportAssetsToS3RequestDetails (..),
+    newExportAssetsToS3RequestDetails,
+    exportAssetsToS3RequestDetails_encryption,
+    exportAssetsToS3RequestDetails_assetDestinations,
+    exportAssetsToS3RequestDetails_dataSetId,
+    exportAssetsToS3RequestDetails_revisionId,
+
+    -- * ExportAssetsToS3ResponseDetails
+    ExportAssetsToS3ResponseDetails (..),
+    newExportAssetsToS3ResponseDetails,
+    exportAssetsToS3ResponseDetails_encryption,
+    exportAssetsToS3ResponseDetails_assetDestinations,
+    exportAssetsToS3ResponseDetails_dataSetId,
+    exportAssetsToS3ResponseDetails_revisionId,
+
+    -- * ExportRevisionsToS3RequestDetails
+    ExportRevisionsToS3RequestDetails (..),
+    newExportRevisionsToS3RequestDetails,
+    exportRevisionsToS3RequestDetails_encryption,
+    exportRevisionsToS3RequestDetails_dataSetId,
+    exportRevisionsToS3RequestDetails_revisionDestinations,
+
+    -- * ExportRevisionsToS3ResponseDetails
+    ExportRevisionsToS3ResponseDetails (..),
+    newExportRevisionsToS3ResponseDetails,
+    exportRevisionsToS3ResponseDetails_encryption,
+    exportRevisionsToS3ResponseDetails_eventActionArn,
+    exportRevisionsToS3ResponseDetails_dataSetId,
+    exportRevisionsToS3ResponseDetails_revisionDestinations,
+
+    -- * ExportServerSideEncryption
+    ExportServerSideEncryption (..),
+    newExportServerSideEncryption,
+    exportServerSideEncryption_kmsKeyArn,
+    exportServerSideEncryption_type,
+
+    -- * ImportAssetFromApiGatewayApiRequestDetails
+    ImportAssetFromApiGatewayApiRequestDetails (..),
+    newImportAssetFromApiGatewayApiRequestDetails,
+    importAssetFromApiGatewayApiRequestDetails_apiDescription,
+    importAssetFromApiGatewayApiRequestDetails_apiKey,
+    importAssetFromApiGatewayApiRequestDetails_apiId,
+    importAssetFromApiGatewayApiRequestDetails_apiName,
+    importAssetFromApiGatewayApiRequestDetails_apiSpecificationMd5Hash,
+    importAssetFromApiGatewayApiRequestDetails_dataSetId,
+    importAssetFromApiGatewayApiRequestDetails_protocolType,
+    importAssetFromApiGatewayApiRequestDetails_revisionId,
+    importAssetFromApiGatewayApiRequestDetails_stage,
+
+    -- * ImportAssetFromApiGatewayApiResponseDetails
+    ImportAssetFromApiGatewayApiResponseDetails (..),
+    newImportAssetFromApiGatewayApiResponseDetails,
+    importAssetFromApiGatewayApiResponseDetails_apiDescription,
+    importAssetFromApiGatewayApiResponseDetails_apiKey,
+    importAssetFromApiGatewayApiResponseDetails_apiId,
+    importAssetFromApiGatewayApiResponseDetails_apiName,
+    importAssetFromApiGatewayApiResponseDetails_apiSpecificationMd5Hash,
+    importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrl,
+    importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrlExpiresAt,
+    importAssetFromApiGatewayApiResponseDetails_dataSetId,
+    importAssetFromApiGatewayApiResponseDetails_protocolType,
+    importAssetFromApiGatewayApiResponseDetails_revisionId,
+    importAssetFromApiGatewayApiResponseDetails_stage,
+
+    -- * ImportAssetFromSignedUrlJobErrorDetails
+    ImportAssetFromSignedUrlJobErrorDetails (..),
+    newImportAssetFromSignedUrlJobErrorDetails,
+    importAssetFromSignedUrlJobErrorDetails_assetName,
+
+    -- * ImportAssetFromSignedUrlRequestDetails
+    ImportAssetFromSignedUrlRequestDetails (..),
+    newImportAssetFromSignedUrlRequestDetails,
+    importAssetFromSignedUrlRequestDetails_assetName,
+    importAssetFromSignedUrlRequestDetails_dataSetId,
+    importAssetFromSignedUrlRequestDetails_md5Hash,
+    importAssetFromSignedUrlRequestDetails_revisionId,
+
+    -- * ImportAssetFromSignedUrlResponseDetails
+    ImportAssetFromSignedUrlResponseDetails (..),
+    newImportAssetFromSignedUrlResponseDetails,
+    importAssetFromSignedUrlResponseDetails_md5Hash,
+    importAssetFromSignedUrlResponseDetails_signedUrl,
+    importAssetFromSignedUrlResponseDetails_signedUrlExpiresAt,
+    importAssetFromSignedUrlResponseDetails_assetName,
+    importAssetFromSignedUrlResponseDetails_dataSetId,
+    importAssetFromSignedUrlResponseDetails_revisionId,
+
+    -- * ImportAssetsFromLakeFormationTagPolicyRequestDetails
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails (..),
+    newImportAssetsFromLakeFormationTagPolicyRequestDetails,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_database,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_table,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_catalogId,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_roleArn,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_dataSetId,
+    importAssetsFromLakeFormationTagPolicyRequestDetails_revisionId,
+
+    -- * ImportAssetsFromLakeFormationTagPolicyResponseDetails
+    ImportAssetsFromLakeFormationTagPolicyResponseDetails (..),
+    newImportAssetsFromLakeFormationTagPolicyResponseDetails,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_database,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_table,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_catalogId,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_roleArn,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_dataSetId,
+    importAssetsFromLakeFormationTagPolicyResponseDetails_revisionId,
+
+    -- * ImportAssetsFromRedshiftDataSharesRequestDetails
+    ImportAssetsFromRedshiftDataSharesRequestDetails (..),
+    newImportAssetsFromRedshiftDataSharesRequestDetails,
+    importAssetsFromRedshiftDataSharesRequestDetails_assetSources,
+    importAssetsFromRedshiftDataSharesRequestDetails_dataSetId,
+    importAssetsFromRedshiftDataSharesRequestDetails_revisionId,
+
+    -- * ImportAssetsFromRedshiftDataSharesResponseDetails
+    ImportAssetsFromRedshiftDataSharesResponseDetails (..),
+    newImportAssetsFromRedshiftDataSharesResponseDetails,
+    importAssetsFromRedshiftDataSharesResponseDetails_assetSources,
+    importAssetsFromRedshiftDataSharesResponseDetails_dataSetId,
+    importAssetsFromRedshiftDataSharesResponseDetails_revisionId,
+
+    -- * ImportAssetsFromS3RequestDetails
+    ImportAssetsFromS3RequestDetails (..),
+    newImportAssetsFromS3RequestDetails,
+    importAssetsFromS3RequestDetails_assetSources,
+    importAssetsFromS3RequestDetails_dataSetId,
+    importAssetsFromS3RequestDetails_revisionId,
+
+    -- * ImportAssetsFromS3ResponseDetails
+    ImportAssetsFromS3ResponseDetails (..),
+    newImportAssetsFromS3ResponseDetails,
+    importAssetsFromS3ResponseDetails_assetSources,
+    importAssetsFromS3ResponseDetails_dataSetId,
+    importAssetsFromS3ResponseDetails_revisionId,
+
+    -- * JobEntry
+    JobEntry (..),
+    newJobEntry,
+    jobEntry_errors,
+    jobEntry_arn,
+    jobEntry_createdAt,
+    jobEntry_details,
+    jobEntry_id,
+    jobEntry_state,
+    jobEntry_type,
+    jobEntry_updatedAt,
+
+    -- * JobError
+    JobError (..),
+    newJobError,
+    jobError_details,
+    jobError_limitName,
+    jobError_limitValue,
+    jobError_resourceId,
+    jobError_resourceType,
+    jobError_code,
+    jobError_message,
+
+    -- * LFResourceDetails
+    LFResourceDetails (..),
+    newLFResourceDetails,
+    lFResourceDetails_database,
+    lFResourceDetails_table,
+
+    -- * LFTag
+    LFTag (..),
+    newLFTag,
+    lFTag_tagKey,
+    lFTag_tagValues,
+
+    -- * LFTagPolicyDetails
+    LFTagPolicyDetails (..),
+    newLFTagPolicyDetails,
+    lFTagPolicyDetails_catalogId,
+    lFTagPolicyDetails_resourceType,
+    lFTagPolicyDetails_resourceDetails,
+
+    -- * LakeFormationDataPermissionAsset
+    LakeFormationDataPermissionAsset (..),
+    newLakeFormationDataPermissionAsset,
+    lakeFormationDataPermissionAsset_roleArn,
+    lakeFormationDataPermissionAsset_lakeFormationDataPermissionDetails,
+    lakeFormationDataPermissionAsset_lakeFormationDataPermissionType,
+    lakeFormationDataPermissionAsset_permissions,
+
+    -- * LakeFormationDataPermissionDetails
+    LakeFormationDataPermissionDetails (..),
+    newLakeFormationDataPermissionDetails,
+    lakeFormationDataPermissionDetails_lFTagPolicy,
+
+    -- * OriginDetails
+    OriginDetails (..),
+    newOriginDetails,
+    originDetails_productId,
+
+    -- * RedshiftDataShareAsset
+    RedshiftDataShareAsset (..),
+    newRedshiftDataShareAsset,
+    redshiftDataShareAsset_arn,
+
+    -- * RedshiftDataShareAssetSourceEntry
+    RedshiftDataShareAssetSourceEntry (..),
+    newRedshiftDataShareAssetSourceEntry,
+    redshiftDataShareAssetSourceEntry_dataShareArn,
+
+    -- * RequestDetails
+    RequestDetails (..),
+    newRequestDetails,
+    requestDetails_createS3DataAccessFromS3Bucket,
+    requestDetails_exportAssetToSignedUrl,
+    requestDetails_exportAssetsToS3,
+    requestDetails_exportRevisionsToS3,
+    requestDetails_importAssetFromApiGatewayApi,
+    requestDetails_importAssetFromSignedUrl,
+    requestDetails_importAssetsFromLakeFormationTagPolicy,
+    requestDetails_importAssetsFromRedshiftDataShares,
+    requestDetails_importAssetsFromS3,
+
+    -- * ResponseDetails
+    ResponseDetails (..),
+    newResponseDetails,
+    responseDetails_createS3DataAccessFromS3Bucket,
+    responseDetails_exportAssetToSignedUrl,
+    responseDetails_exportAssetsToS3,
+    responseDetails_exportRevisionsToS3,
+    responseDetails_importAssetFromApiGatewayApi,
+    responseDetails_importAssetFromSignedUrl,
+    responseDetails_importAssetsFromLakeFormationTagPolicy,
+    responseDetails_importAssetsFromRedshiftDataShares,
+    responseDetails_importAssetsFromS3,
+
+    -- * RevisionDestinationEntry
+    RevisionDestinationEntry (..),
+    newRevisionDestinationEntry,
+    revisionDestinationEntry_keyPattern,
+    revisionDestinationEntry_bucket,
+    revisionDestinationEntry_revisionId,
+
+    -- * RevisionEntry
+    RevisionEntry (..),
+    newRevisionEntry,
+    revisionEntry_comment,
+    revisionEntry_finalized,
+    revisionEntry_revocationComment,
+    revisionEntry_revoked,
+    revisionEntry_revokedAt,
+    revisionEntry_sourceId,
+    revisionEntry_arn,
+    revisionEntry_createdAt,
+    revisionEntry_dataSetId,
+    revisionEntry_id,
+    revisionEntry_updatedAt,
+
+    -- * RevisionPublished
+    RevisionPublished (..),
+    newRevisionPublished,
+    revisionPublished_dataSetId,
+
+    -- * S3DataAccessAsset
+    S3DataAccessAsset (..),
+    newS3DataAccessAsset,
+    s3DataAccessAsset_keyPrefixes,
+    s3DataAccessAsset_keys,
+    s3DataAccessAsset_s3AccessPointAlias,
+    s3DataAccessAsset_s3AccessPointArn,
+    s3DataAccessAsset_bucket,
+
+    -- * S3DataAccessAssetSourceEntry
+    S3DataAccessAssetSourceEntry (..),
+    newS3DataAccessAssetSourceEntry,
+    s3DataAccessAssetSourceEntry_keyPrefixes,
+    s3DataAccessAssetSourceEntry_keys,
+    s3DataAccessAssetSourceEntry_bucket,
+
+    -- * S3SnapshotAsset
+    S3SnapshotAsset (..),
+    newS3SnapshotAsset,
+    s3SnapshotAsset_size,
+
+    -- * TableLFTagPolicy
+    TableLFTagPolicy (..),
+    newTableLFTagPolicy,
+    tableLFTagPolicy_expression,
+
+    -- * TableLFTagPolicyAndPermissions
+    TableLFTagPolicyAndPermissions (..),
+    newTableLFTagPolicyAndPermissions,
+    tableLFTagPolicyAndPermissions_expression,
+    tableLFTagPolicyAndPermissions_permissions,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.DataExchange.Types.Action
+import Amazonka.DataExchange.Types.ApiGatewayApiAsset
+import Amazonka.DataExchange.Types.AssetDestinationEntry
+import Amazonka.DataExchange.Types.AssetDetails
+import Amazonka.DataExchange.Types.AssetEntry
+import Amazonka.DataExchange.Types.AssetSourceEntry
+import Amazonka.DataExchange.Types.AssetType
+import Amazonka.DataExchange.Types.AutoExportRevisionDestinationEntry
+import Amazonka.DataExchange.Types.AutoExportRevisionToS3RequestDetails
+import Amazonka.DataExchange.Types.Code
+import Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketRequestDetails
+import Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketResponseDetails
+import Amazonka.DataExchange.Types.DataSetEntry
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicy
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicyAndPermissions
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicyPermission
+import Amazonka.DataExchange.Types.Details
+import Amazonka.DataExchange.Types.Event
+import Amazonka.DataExchange.Types.EventActionEntry
+import Amazonka.DataExchange.Types.ExportAssetToSignedUrlRequestDetails
+import Amazonka.DataExchange.Types.ExportAssetToSignedUrlResponseDetails
+import Amazonka.DataExchange.Types.ExportAssetsToS3RequestDetails
+import Amazonka.DataExchange.Types.ExportAssetsToS3ResponseDetails
+import Amazonka.DataExchange.Types.ExportRevisionsToS3RequestDetails
+import Amazonka.DataExchange.Types.ExportRevisionsToS3ResponseDetails
+import Amazonka.DataExchange.Types.ExportServerSideEncryption
+import Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlJobErrorDetails
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromS3RequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromS3ResponseDetails
+import Amazonka.DataExchange.Types.JobEntry
+import Amazonka.DataExchange.Types.JobError
+import Amazonka.DataExchange.Types.JobErrorLimitName
+import Amazonka.DataExchange.Types.JobErrorResourceTypes
+import Amazonka.DataExchange.Types.LFPermission
+import Amazonka.DataExchange.Types.LFResourceDetails
+import Amazonka.DataExchange.Types.LFResourceType
+import Amazonka.DataExchange.Types.LFTag
+import Amazonka.DataExchange.Types.LFTagPolicyDetails
+import Amazonka.DataExchange.Types.LakeFormationDataPermissionAsset
+import Amazonka.DataExchange.Types.LakeFormationDataPermissionDetails
+import Amazonka.DataExchange.Types.LakeFormationDataPermissionType
+import Amazonka.DataExchange.Types.Origin
+import Amazonka.DataExchange.Types.OriginDetails
+import Amazonka.DataExchange.Types.ProtocolType
+import Amazonka.DataExchange.Types.RedshiftDataShareAsset
+import Amazonka.DataExchange.Types.RedshiftDataShareAssetSourceEntry
+import Amazonka.DataExchange.Types.RequestDetails
+import Amazonka.DataExchange.Types.ResponseDetails
+import Amazonka.DataExchange.Types.RevisionDestinationEntry
+import Amazonka.DataExchange.Types.RevisionEntry
+import Amazonka.DataExchange.Types.RevisionPublished
+import Amazonka.DataExchange.Types.S3DataAccessAsset
+import Amazonka.DataExchange.Types.S3DataAccessAssetSourceEntry
+import Amazonka.DataExchange.Types.S3SnapshotAsset
+import Amazonka.DataExchange.Types.ServerSideEncryptionTypes
+import Amazonka.DataExchange.Types.State
+import Amazonka.DataExchange.Types.TableLFTagPolicy
+import Amazonka.DataExchange.Types.TableLFTagPolicyAndPermissions
+import Amazonka.DataExchange.Types.TableTagPolicyLFPermission
+import Amazonka.DataExchange.Types.Type
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2017-07-25@ of the Amazon Data Exchange SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "DataExchange",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "dataexchange",
+      Core.signingName = "dataexchange",
+      Core.version = "2017-07-25",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "DataExchange",
+      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
+
+-- | Access to the resource is denied.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The request couldn\'t be completed because it conflicted with the
+-- current state of the resource.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | An exception occurred with the service.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The resource couldn\'t be found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The request has exceeded the quotas imposed by the service.
+_ServiceLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceLimitExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The limit on the number of requests per second was exceeded.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The request was invalid.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/DataExchange/Types/Action.hs b/gen/Amazonka/DataExchange/Types/Action.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/Action.hs
@@ -0,0 +1,78 @@
+{-# 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.DataExchange.Types.Action
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.Action where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AutoExportRevisionToS3RequestDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | What occurs after a certain event.
+--
+-- /See:/ 'newAction' smart constructor.
+data Action = Action'
+  { -- | Details for the export revision to Amazon S3 action.
+    exportRevisionToS3 :: Prelude.Maybe AutoExportRevisionToS3RequestDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Action' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exportRevisionToS3', 'action_exportRevisionToS3' - Details for the export revision to Amazon S3 action.
+newAction ::
+  Action
+newAction =
+  Action' {exportRevisionToS3 = Prelude.Nothing}
+
+-- | Details for the export revision to Amazon S3 action.
+action_exportRevisionToS3 :: Lens.Lens' Action (Prelude.Maybe AutoExportRevisionToS3RequestDetails)
+action_exportRevisionToS3 = Lens.lens (\Action' {exportRevisionToS3} -> exportRevisionToS3) (\s@Action' {} a -> s {exportRevisionToS3 = a} :: Action)
+
+instance Data.FromJSON Action where
+  parseJSON =
+    Data.withObject
+      "Action"
+      ( \x ->
+          Action'
+            Prelude.<$> (x Data..:? "ExportRevisionToS3")
+      )
+
+instance Prelude.Hashable Action where
+  hashWithSalt _salt Action' {..} =
+    _salt `Prelude.hashWithSalt` exportRevisionToS3
+
+instance Prelude.NFData Action where
+  rnf Action' {..} = Prelude.rnf exportRevisionToS3
+
+instance Data.ToJSON Action where
+  toJSON Action' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ExportRevisionToS3" Data..=)
+              Prelude.<$> exportRevisionToS3
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/ApiGatewayApiAsset.hs b/gen/Amazonka/DataExchange/Types/ApiGatewayApiAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ApiGatewayApiAsset.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.DataExchange.Types.ApiGatewayApiAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ApiGatewayApiAsset where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.ProtocolType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The API Gateway API that is the asset.
+--
+-- /See:/ 'newApiGatewayApiAsset' smart constructor.
+data ApiGatewayApiAsset = ApiGatewayApiAsset'
+  { -- | The API description of the API asset.
+    apiDescription :: Prelude.Maybe Prelude.Text,
+    -- | The API endpoint of the API asset.
+    apiEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the API asset.
+    apiId :: Prelude.Maybe Prelude.Text,
+    -- | The API key of the API asset.
+    apiKey :: Prelude.Maybe Prelude.Text,
+    -- | The API name of the API asset.
+    apiName :: Prelude.Maybe Prelude.Text,
+    -- | The download URL of the API specification of the API asset.
+    apiSpecificationDownloadUrl :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the upload URL expires, in ISO 8601 format.
+    apiSpecificationDownloadUrlExpiresAt :: Prelude.Maybe Data.ISO8601,
+    -- | The protocol type of the API asset.
+    protocolType :: Prelude.Maybe ProtocolType,
+    -- | The stage of the API asset.
+    stage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApiGatewayApiAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiDescription', 'apiGatewayApiAsset_apiDescription' - The API description of the API asset.
+--
+-- 'apiEndpoint', 'apiGatewayApiAsset_apiEndpoint' - The API endpoint of the API asset.
+--
+-- 'apiId', 'apiGatewayApiAsset_apiId' - The unique identifier of the API asset.
+--
+-- 'apiKey', 'apiGatewayApiAsset_apiKey' - The API key of the API asset.
+--
+-- 'apiName', 'apiGatewayApiAsset_apiName' - The API name of the API asset.
+--
+-- 'apiSpecificationDownloadUrl', 'apiGatewayApiAsset_apiSpecificationDownloadUrl' - The download URL of the API specification of the API asset.
+--
+-- 'apiSpecificationDownloadUrlExpiresAt', 'apiGatewayApiAsset_apiSpecificationDownloadUrlExpiresAt' - The date and time that the upload URL expires, in ISO 8601 format.
+--
+-- 'protocolType', 'apiGatewayApiAsset_protocolType' - The protocol type of the API asset.
+--
+-- 'stage', 'apiGatewayApiAsset_stage' - The stage of the API asset.
+newApiGatewayApiAsset ::
+  ApiGatewayApiAsset
+newApiGatewayApiAsset =
+  ApiGatewayApiAsset'
+    { apiDescription =
+        Prelude.Nothing,
+      apiEndpoint = Prelude.Nothing,
+      apiId = Prelude.Nothing,
+      apiKey = Prelude.Nothing,
+      apiName = Prelude.Nothing,
+      apiSpecificationDownloadUrl = Prelude.Nothing,
+      apiSpecificationDownloadUrlExpiresAt =
+        Prelude.Nothing,
+      protocolType = Prelude.Nothing,
+      stage = Prelude.Nothing
+    }
+
+-- | The API description of the API asset.
+apiGatewayApiAsset_apiDescription :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe Prelude.Text)
+apiGatewayApiAsset_apiDescription = Lens.lens (\ApiGatewayApiAsset' {apiDescription} -> apiDescription) (\s@ApiGatewayApiAsset' {} a -> s {apiDescription = a} :: ApiGatewayApiAsset)
+
+-- | The API endpoint of the API asset.
+apiGatewayApiAsset_apiEndpoint :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe Prelude.Text)
+apiGatewayApiAsset_apiEndpoint = Lens.lens (\ApiGatewayApiAsset' {apiEndpoint} -> apiEndpoint) (\s@ApiGatewayApiAsset' {} a -> s {apiEndpoint = a} :: ApiGatewayApiAsset)
+
+-- | The unique identifier of the API asset.
+apiGatewayApiAsset_apiId :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe Prelude.Text)
+apiGatewayApiAsset_apiId = Lens.lens (\ApiGatewayApiAsset' {apiId} -> apiId) (\s@ApiGatewayApiAsset' {} a -> s {apiId = a} :: ApiGatewayApiAsset)
+
+-- | The API key of the API asset.
+apiGatewayApiAsset_apiKey :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe Prelude.Text)
+apiGatewayApiAsset_apiKey = Lens.lens (\ApiGatewayApiAsset' {apiKey} -> apiKey) (\s@ApiGatewayApiAsset' {} a -> s {apiKey = a} :: ApiGatewayApiAsset)
+
+-- | The API name of the API asset.
+apiGatewayApiAsset_apiName :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe Prelude.Text)
+apiGatewayApiAsset_apiName = Lens.lens (\ApiGatewayApiAsset' {apiName} -> apiName) (\s@ApiGatewayApiAsset' {} a -> s {apiName = a} :: ApiGatewayApiAsset)
+
+-- | The download URL of the API specification of the API asset.
+apiGatewayApiAsset_apiSpecificationDownloadUrl :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe Prelude.Text)
+apiGatewayApiAsset_apiSpecificationDownloadUrl = Lens.lens (\ApiGatewayApiAsset' {apiSpecificationDownloadUrl} -> apiSpecificationDownloadUrl) (\s@ApiGatewayApiAsset' {} a -> s {apiSpecificationDownloadUrl = a} :: ApiGatewayApiAsset)
+
+-- | The date and time that the upload URL expires, in ISO 8601 format.
+apiGatewayApiAsset_apiSpecificationDownloadUrlExpiresAt :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe Prelude.UTCTime)
+apiGatewayApiAsset_apiSpecificationDownloadUrlExpiresAt = Lens.lens (\ApiGatewayApiAsset' {apiSpecificationDownloadUrlExpiresAt} -> apiSpecificationDownloadUrlExpiresAt) (\s@ApiGatewayApiAsset' {} a -> s {apiSpecificationDownloadUrlExpiresAt = a} :: ApiGatewayApiAsset) Prelude.. Lens.mapping Data._Time
+
+-- | The protocol type of the API asset.
+apiGatewayApiAsset_protocolType :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe ProtocolType)
+apiGatewayApiAsset_protocolType = Lens.lens (\ApiGatewayApiAsset' {protocolType} -> protocolType) (\s@ApiGatewayApiAsset' {} a -> s {protocolType = a} :: ApiGatewayApiAsset)
+
+-- | The stage of the API asset.
+apiGatewayApiAsset_stage :: Lens.Lens' ApiGatewayApiAsset (Prelude.Maybe Prelude.Text)
+apiGatewayApiAsset_stage = Lens.lens (\ApiGatewayApiAsset' {stage} -> stage) (\s@ApiGatewayApiAsset' {} a -> s {stage = a} :: ApiGatewayApiAsset)
+
+instance Data.FromJSON ApiGatewayApiAsset where
+  parseJSON =
+    Data.withObject
+      "ApiGatewayApiAsset"
+      ( \x ->
+          ApiGatewayApiAsset'
+            Prelude.<$> (x Data..:? "ApiDescription")
+            Prelude.<*> (x Data..:? "ApiEndpoint")
+            Prelude.<*> (x Data..:? "ApiId")
+            Prelude.<*> (x Data..:? "ApiKey")
+            Prelude.<*> (x Data..:? "ApiName")
+            Prelude.<*> (x Data..:? "ApiSpecificationDownloadUrl")
+            Prelude.<*> (x Data..:? "ApiSpecificationDownloadUrlExpiresAt")
+            Prelude.<*> (x Data..:? "ProtocolType")
+            Prelude.<*> (x Data..:? "Stage")
+      )
+
+instance Prelude.Hashable ApiGatewayApiAsset where
+  hashWithSalt _salt ApiGatewayApiAsset' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiDescription
+      `Prelude.hashWithSalt` apiEndpoint
+      `Prelude.hashWithSalt` apiId
+      `Prelude.hashWithSalt` apiKey
+      `Prelude.hashWithSalt` apiName
+      `Prelude.hashWithSalt` apiSpecificationDownloadUrl
+      `Prelude.hashWithSalt` apiSpecificationDownloadUrlExpiresAt
+      `Prelude.hashWithSalt` protocolType
+      `Prelude.hashWithSalt` stage
+
+instance Prelude.NFData ApiGatewayApiAsset where
+  rnf ApiGatewayApiAsset' {..} =
+    Prelude.rnf apiDescription
+      `Prelude.seq` Prelude.rnf apiEndpoint
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiKey
+      `Prelude.seq` Prelude.rnf apiName
+      `Prelude.seq` Prelude.rnf apiSpecificationDownloadUrl
+      `Prelude.seq` Prelude.rnf apiSpecificationDownloadUrlExpiresAt
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf stage
diff --git a/gen/Amazonka/DataExchange/Types/AssetDestinationEntry.hs b/gen/Amazonka/DataExchange/Types/AssetDestinationEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/AssetDestinationEntry.hs
@@ -0,0 +1,110 @@
+{-# 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.DataExchange.Types.AssetDestinationEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.AssetDestinationEntry 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 destination for the asset.
+--
+-- /See:/ 'newAssetDestinationEntry' smart constructor.
+data AssetDestinationEntry = AssetDestinationEntry'
+  { -- | The name of the object in Amazon S3 for the asset.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the asset.
+    assetId :: Prelude.Text,
+    -- | The Amazon S3 bucket that is the destination for the asset.
+    bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetDestinationEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'assetDestinationEntry_key' - The name of the object in Amazon S3 for the asset.
+--
+-- 'assetId', 'assetDestinationEntry_assetId' - The unique identifier for the asset.
+--
+-- 'bucket', 'assetDestinationEntry_bucket' - The Amazon S3 bucket that is the destination for the asset.
+newAssetDestinationEntry ::
+  -- | 'assetId'
+  Prelude.Text ->
+  -- | 'bucket'
+  Prelude.Text ->
+  AssetDestinationEntry
+newAssetDestinationEntry pAssetId_ pBucket_ =
+  AssetDestinationEntry'
+    { key = Prelude.Nothing,
+      assetId = pAssetId_,
+      bucket = pBucket_
+    }
+
+-- | The name of the object in Amazon S3 for the asset.
+assetDestinationEntry_key :: Lens.Lens' AssetDestinationEntry (Prelude.Maybe Prelude.Text)
+assetDestinationEntry_key = Lens.lens (\AssetDestinationEntry' {key} -> key) (\s@AssetDestinationEntry' {} a -> s {key = a} :: AssetDestinationEntry)
+
+-- | The unique identifier for the asset.
+assetDestinationEntry_assetId :: Lens.Lens' AssetDestinationEntry Prelude.Text
+assetDestinationEntry_assetId = Lens.lens (\AssetDestinationEntry' {assetId} -> assetId) (\s@AssetDestinationEntry' {} a -> s {assetId = a} :: AssetDestinationEntry)
+
+-- | The Amazon S3 bucket that is the destination for the asset.
+assetDestinationEntry_bucket :: Lens.Lens' AssetDestinationEntry Prelude.Text
+assetDestinationEntry_bucket = Lens.lens (\AssetDestinationEntry' {bucket} -> bucket) (\s@AssetDestinationEntry' {} a -> s {bucket = a} :: AssetDestinationEntry)
+
+instance Data.FromJSON AssetDestinationEntry where
+  parseJSON =
+    Data.withObject
+      "AssetDestinationEntry"
+      ( \x ->
+          AssetDestinationEntry'
+            Prelude.<$> (x Data..:? "Key")
+            Prelude.<*> (x Data..: "AssetId")
+            Prelude.<*> (x Data..: "Bucket")
+      )
+
+instance Prelude.Hashable AssetDestinationEntry where
+  hashWithSalt _salt AssetDestinationEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` assetId
+      `Prelude.hashWithSalt` bucket
+
+instance Prelude.NFData AssetDestinationEntry where
+  rnf AssetDestinationEntry' {..} =
+    Prelude.rnf key
+      `Prelude.seq` Prelude.rnf assetId
+      `Prelude.seq` Prelude.rnf bucket
+
+instance Data.ToJSON AssetDestinationEntry where
+  toJSON AssetDestinationEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Key" Data..=) Prelude.<$> key,
+            Prelude.Just ("AssetId" Data..= assetId),
+            Prelude.Just ("Bucket" Data..= bucket)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/AssetDetails.hs b/gen/Amazonka/DataExchange/Types/AssetDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/AssetDetails.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.AssetDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.AssetDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.ApiGatewayApiAsset
+import Amazonka.DataExchange.Types.LakeFormationDataPermissionAsset
+import Amazonka.DataExchange.Types.RedshiftDataShareAsset
+import Amazonka.DataExchange.Types.S3DataAccessAsset
+import Amazonka.DataExchange.Types.S3SnapshotAsset
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the asset.
+--
+-- /See:/ 'newAssetDetails' smart constructor.
+data AssetDetails = AssetDetails'
+  { -- | Information about the API Gateway API asset.
+    apiGatewayApiAsset :: Prelude.Maybe ApiGatewayApiAsset,
+    -- | The AWS Lake Formation data permission that is the asset.
+    lakeFormationDataPermissionAsset :: Prelude.Maybe LakeFormationDataPermissionAsset,
+    -- | The Amazon Redshift datashare that is the asset.
+    redshiftDataShareAsset :: Prelude.Maybe RedshiftDataShareAsset,
+    -- | The Amazon S3 data access that is the asset.
+    s3DataAccessAsset :: Prelude.Maybe S3DataAccessAsset,
+    -- | The Amazon S3 object that is the asset.
+    s3SnapshotAsset :: Prelude.Maybe S3SnapshotAsset
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiGatewayApiAsset', 'assetDetails_apiGatewayApiAsset' - Information about the API Gateway API asset.
+--
+-- 'lakeFormationDataPermissionAsset', 'assetDetails_lakeFormationDataPermissionAsset' - The AWS Lake Formation data permission that is the asset.
+--
+-- 'redshiftDataShareAsset', 'assetDetails_redshiftDataShareAsset' - The Amazon Redshift datashare that is the asset.
+--
+-- 's3DataAccessAsset', 'assetDetails_s3DataAccessAsset' - The Amazon S3 data access that is the asset.
+--
+-- 's3SnapshotAsset', 'assetDetails_s3SnapshotAsset' - The Amazon S3 object that is the asset.
+newAssetDetails ::
+  AssetDetails
+newAssetDetails =
+  AssetDetails'
+    { apiGatewayApiAsset = Prelude.Nothing,
+      lakeFormationDataPermissionAsset = Prelude.Nothing,
+      redshiftDataShareAsset = Prelude.Nothing,
+      s3DataAccessAsset = Prelude.Nothing,
+      s3SnapshotAsset = Prelude.Nothing
+    }
+
+-- | Information about the API Gateway API asset.
+assetDetails_apiGatewayApiAsset :: Lens.Lens' AssetDetails (Prelude.Maybe ApiGatewayApiAsset)
+assetDetails_apiGatewayApiAsset = Lens.lens (\AssetDetails' {apiGatewayApiAsset} -> apiGatewayApiAsset) (\s@AssetDetails' {} a -> s {apiGatewayApiAsset = a} :: AssetDetails)
+
+-- | The AWS Lake Formation data permission that is the asset.
+assetDetails_lakeFormationDataPermissionAsset :: Lens.Lens' AssetDetails (Prelude.Maybe LakeFormationDataPermissionAsset)
+assetDetails_lakeFormationDataPermissionAsset = Lens.lens (\AssetDetails' {lakeFormationDataPermissionAsset} -> lakeFormationDataPermissionAsset) (\s@AssetDetails' {} a -> s {lakeFormationDataPermissionAsset = a} :: AssetDetails)
+
+-- | The Amazon Redshift datashare that is the asset.
+assetDetails_redshiftDataShareAsset :: Lens.Lens' AssetDetails (Prelude.Maybe RedshiftDataShareAsset)
+assetDetails_redshiftDataShareAsset = Lens.lens (\AssetDetails' {redshiftDataShareAsset} -> redshiftDataShareAsset) (\s@AssetDetails' {} a -> s {redshiftDataShareAsset = a} :: AssetDetails)
+
+-- | The Amazon S3 data access that is the asset.
+assetDetails_s3DataAccessAsset :: Lens.Lens' AssetDetails (Prelude.Maybe S3DataAccessAsset)
+assetDetails_s3DataAccessAsset = Lens.lens (\AssetDetails' {s3DataAccessAsset} -> s3DataAccessAsset) (\s@AssetDetails' {} a -> s {s3DataAccessAsset = a} :: AssetDetails)
+
+-- | The Amazon S3 object that is the asset.
+assetDetails_s3SnapshotAsset :: Lens.Lens' AssetDetails (Prelude.Maybe S3SnapshotAsset)
+assetDetails_s3SnapshotAsset = Lens.lens (\AssetDetails' {s3SnapshotAsset} -> s3SnapshotAsset) (\s@AssetDetails' {} a -> s {s3SnapshotAsset = a} :: AssetDetails)
+
+instance Data.FromJSON AssetDetails where
+  parseJSON =
+    Data.withObject
+      "AssetDetails"
+      ( \x ->
+          AssetDetails'
+            Prelude.<$> (x Data..:? "ApiGatewayApiAsset")
+            Prelude.<*> (x Data..:? "LakeFormationDataPermissionAsset")
+            Prelude.<*> (x Data..:? "RedshiftDataShareAsset")
+            Prelude.<*> (x Data..:? "S3DataAccessAsset")
+            Prelude.<*> (x Data..:? "S3SnapshotAsset")
+      )
+
+instance Prelude.Hashable AssetDetails where
+  hashWithSalt _salt AssetDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` apiGatewayApiAsset
+      `Prelude.hashWithSalt` lakeFormationDataPermissionAsset
+      `Prelude.hashWithSalt` redshiftDataShareAsset
+      `Prelude.hashWithSalt` s3DataAccessAsset
+      `Prelude.hashWithSalt` s3SnapshotAsset
+
+instance Prelude.NFData AssetDetails where
+  rnf AssetDetails' {..} =
+    Prelude.rnf apiGatewayApiAsset
+      `Prelude.seq` Prelude.rnf lakeFormationDataPermissionAsset
+      `Prelude.seq` Prelude.rnf redshiftDataShareAsset
+      `Prelude.seq` Prelude.rnf s3DataAccessAsset
+      `Prelude.seq` Prelude.rnf s3SnapshotAsset
diff --git a/gen/Amazonka/DataExchange/Types/AssetEntry.hs b/gen/Amazonka/DataExchange/Types/AssetEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/AssetEntry.hs
@@ -0,0 +1,245 @@
+{-# 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.DataExchange.Types.AssetEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.AssetEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AssetDetails
+import Amazonka.DataExchange.Types.AssetType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An asset in AWS Data Exchange is a piece of data (Amazon S3 object) or a
+-- means of fulfilling data (Amazon Redshift datashare or Amazon API
+-- Gateway API, AWS Lake Formation data permission, or Amazon S3 data
+-- access). The asset can be a structured data file, an image file, or some
+-- other data file that can be stored as an Amazon S3 object, an Amazon API
+-- Gateway API, or an Amazon Redshift datashare, an AWS Lake Formation data
+-- permission, or an Amazon S3 data access. When you create an import job
+-- for your files, API Gateway APIs, Amazon Redshift datashares, AWS Lake
+-- Formation data permission, or Amazon S3 data access, you create an asset
+-- in AWS Data Exchange.
+--
+-- /See:/ 'newAssetEntry' smart constructor.
+data AssetEntry = AssetEntry'
+  { -- | The asset ID of the owned asset corresponding to the entitled asset
+    -- being viewed. This parameter is returned when an asset owner is viewing
+    -- the entitled copy of its owned asset.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN for the asset.
+    arn :: Prelude.Text,
+    -- | Details about the asset.
+    assetDetails :: AssetDetails,
+    -- | The type of asset that is added to a data set.
+    assetType :: AssetType,
+    -- | The date and time that the asset was created, in ISO 8601 format.
+    createdAt :: Data.ISO8601,
+    -- | The unique identifier for the data set associated with this asset.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the asset.
+    id :: Prelude.Text,
+    -- | The name of the asset. When importing from Amazon S3, the Amazon S3
+    -- object key is used as the asset name. When exporting to Amazon S3, the
+    -- asset name is used as default target Amazon S3 object key. When
+    -- importing from Amazon API Gateway API, the API name is used as the asset
+    -- name. When importing from Amazon Redshift, the datashare name is used as
+    -- the asset name. When importing from AWS Lake Formation, the static
+    -- values of \"Database(s) included in LF-tag policy\" or \"Table(s)
+    -- included in LF-tag policy\" are used as the asset name.
+    name :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this asset.
+    revisionId :: Prelude.Text,
+    -- | The date and time that the asset was last updated, in ISO 8601 format.
+    updatedAt :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sourceId', 'assetEntry_sourceId' - The asset ID of the owned asset corresponding to the entitled asset
+-- being viewed. This parameter is returned when an asset owner is viewing
+-- the entitled copy of its owned asset.
+--
+-- 'arn', 'assetEntry_arn' - The ARN for the asset.
+--
+-- 'assetDetails', 'assetEntry_assetDetails' - Details about the asset.
+--
+-- 'assetType', 'assetEntry_assetType' - The type of asset that is added to a data set.
+--
+-- 'createdAt', 'assetEntry_createdAt' - The date and time that the asset was created, in ISO 8601 format.
+--
+-- 'dataSetId', 'assetEntry_dataSetId' - The unique identifier for the data set associated with this asset.
+--
+-- 'id', 'assetEntry_id' - The unique identifier for the asset.
+--
+-- 'name', 'assetEntry_name' - The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name. When exporting to Amazon S3, the
+-- asset name is used as default target Amazon S3 object key. When
+-- importing from Amazon API Gateway API, the API name is used as the asset
+-- name. When importing from Amazon Redshift, the datashare name is used as
+-- the asset name. When importing from AWS Lake Formation, the static
+-- values of \"Database(s) included in LF-tag policy\" or \"Table(s)
+-- included in LF-tag policy\" are used as the asset name.
+--
+-- 'revisionId', 'assetEntry_revisionId' - The unique identifier for the revision associated with this asset.
+--
+-- 'updatedAt', 'assetEntry_updatedAt' - The date and time that the asset was last updated, in ISO 8601 format.
+newAssetEntry ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'assetDetails'
+  AssetDetails ->
+  -- | 'assetType'
+  AssetType ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  AssetEntry
+newAssetEntry
+  pArn_
+  pAssetDetails_
+  pAssetType_
+  pCreatedAt_
+  pDataSetId_
+  pId_
+  pName_
+  pRevisionId_
+  pUpdatedAt_ =
+    AssetEntry'
+      { sourceId = Prelude.Nothing,
+        arn = pArn_,
+        assetDetails = pAssetDetails_,
+        assetType = pAssetType_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        dataSetId = pDataSetId_,
+        id = pId_,
+        name = pName_,
+        revisionId = pRevisionId_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | The asset ID of the owned asset corresponding to the entitled asset
+-- being viewed. This parameter is returned when an asset owner is viewing
+-- the entitled copy of its owned asset.
+assetEntry_sourceId :: Lens.Lens' AssetEntry (Prelude.Maybe Prelude.Text)
+assetEntry_sourceId = Lens.lens (\AssetEntry' {sourceId} -> sourceId) (\s@AssetEntry' {} a -> s {sourceId = a} :: AssetEntry)
+
+-- | The ARN for the asset.
+assetEntry_arn :: Lens.Lens' AssetEntry Prelude.Text
+assetEntry_arn = Lens.lens (\AssetEntry' {arn} -> arn) (\s@AssetEntry' {} a -> s {arn = a} :: AssetEntry)
+
+-- | Details about the asset.
+assetEntry_assetDetails :: Lens.Lens' AssetEntry AssetDetails
+assetEntry_assetDetails = Lens.lens (\AssetEntry' {assetDetails} -> assetDetails) (\s@AssetEntry' {} a -> s {assetDetails = a} :: AssetEntry)
+
+-- | The type of asset that is added to a data set.
+assetEntry_assetType :: Lens.Lens' AssetEntry AssetType
+assetEntry_assetType = Lens.lens (\AssetEntry' {assetType} -> assetType) (\s@AssetEntry' {} a -> s {assetType = a} :: AssetEntry)
+
+-- | The date and time that the asset was created, in ISO 8601 format.
+assetEntry_createdAt :: Lens.Lens' AssetEntry Prelude.UTCTime
+assetEntry_createdAt = Lens.lens (\AssetEntry' {createdAt} -> createdAt) (\s@AssetEntry' {} a -> s {createdAt = a} :: AssetEntry) Prelude.. Data._Time
+
+-- | The unique identifier for the data set associated with this asset.
+assetEntry_dataSetId :: Lens.Lens' AssetEntry Prelude.Text
+assetEntry_dataSetId = Lens.lens (\AssetEntry' {dataSetId} -> dataSetId) (\s@AssetEntry' {} a -> s {dataSetId = a} :: AssetEntry)
+
+-- | The unique identifier for the asset.
+assetEntry_id :: Lens.Lens' AssetEntry Prelude.Text
+assetEntry_id = Lens.lens (\AssetEntry' {id} -> id) (\s@AssetEntry' {} a -> s {id = a} :: AssetEntry)
+
+-- | The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name. When exporting to Amazon S3, the
+-- asset name is used as default target Amazon S3 object key. When
+-- importing from Amazon API Gateway API, the API name is used as the asset
+-- name. When importing from Amazon Redshift, the datashare name is used as
+-- the asset name. When importing from AWS Lake Formation, the static
+-- values of \"Database(s) included in LF-tag policy\" or \"Table(s)
+-- included in LF-tag policy\" are used as the asset name.
+assetEntry_name :: Lens.Lens' AssetEntry Prelude.Text
+assetEntry_name = Lens.lens (\AssetEntry' {name} -> name) (\s@AssetEntry' {} a -> s {name = a} :: AssetEntry)
+
+-- | The unique identifier for the revision associated with this asset.
+assetEntry_revisionId :: Lens.Lens' AssetEntry Prelude.Text
+assetEntry_revisionId = Lens.lens (\AssetEntry' {revisionId} -> revisionId) (\s@AssetEntry' {} a -> s {revisionId = a} :: AssetEntry)
+
+-- | The date and time that the asset was last updated, in ISO 8601 format.
+assetEntry_updatedAt :: Lens.Lens' AssetEntry Prelude.UTCTime
+assetEntry_updatedAt = Lens.lens (\AssetEntry' {updatedAt} -> updatedAt) (\s@AssetEntry' {} a -> s {updatedAt = a} :: AssetEntry) Prelude.. Data._Time
+
+instance Data.FromJSON AssetEntry where
+  parseJSON =
+    Data.withObject
+      "AssetEntry"
+      ( \x ->
+          AssetEntry'
+            Prelude.<$> (x Data..:? "SourceId")
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "AssetDetails")
+            Prelude.<*> (x Data..: "AssetType")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "Id")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "RevisionId")
+            Prelude.<*> (x Data..: "UpdatedAt")
+      )
+
+instance Prelude.Hashable AssetEntry where
+  hashWithSalt _salt AssetEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` sourceId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` assetDetails
+      `Prelude.hashWithSalt` assetType
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` revisionId
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData AssetEntry where
+  rnf AssetEntry' {..} =
+    Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf assetDetails
+      `Prelude.seq` Prelude.rnf assetType
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/DataExchange/Types/AssetSourceEntry.hs b/gen/Amazonka/DataExchange/Types/AssetSourceEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/AssetSourceEntry.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.DataExchange.Types.AssetSourceEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.AssetSourceEntry 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 source of the assets.
+--
+-- /See:/ 'newAssetSourceEntry' smart constructor.
+data AssetSourceEntry = AssetSourceEntry'
+  { -- | The Amazon S3 bucket that\'s part of the source of the asset.
+    bucket :: Prelude.Text,
+    -- | The name of the object in Amazon S3 for the asset.
+    key :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssetSourceEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucket', 'assetSourceEntry_bucket' - The Amazon S3 bucket that\'s part of the source of the asset.
+--
+-- 'key', 'assetSourceEntry_key' - The name of the object in Amazon S3 for the asset.
+newAssetSourceEntry ::
+  -- | 'bucket'
+  Prelude.Text ->
+  -- | 'key'
+  Prelude.Text ->
+  AssetSourceEntry
+newAssetSourceEntry pBucket_ pKey_ =
+  AssetSourceEntry' {bucket = pBucket_, key = pKey_}
+
+-- | The Amazon S3 bucket that\'s part of the source of the asset.
+assetSourceEntry_bucket :: Lens.Lens' AssetSourceEntry Prelude.Text
+assetSourceEntry_bucket = Lens.lens (\AssetSourceEntry' {bucket} -> bucket) (\s@AssetSourceEntry' {} a -> s {bucket = a} :: AssetSourceEntry)
+
+-- | The name of the object in Amazon S3 for the asset.
+assetSourceEntry_key :: Lens.Lens' AssetSourceEntry Prelude.Text
+assetSourceEntry_key = Lens.lens (\AssetSourceEntry' {key} -> key) (\s@AssetSourceEntry' {} a -> s {key = a} :: AssetSourceEntry)
+
+instance Data.FromJSON AssetSourceEntry where
+  parseJSON =
+    Data.withObject
+      "AssetSourceEntry"
+      ( \x ->
+          AssetSourceEntry'
+            Prelude.<$> (x Data..: "Bucket")
+            Prelude.<*> (x Data..: "Key")
+      )
+
+instance Prelude.Hashable AssetSourceEntry where
+  hashWithSalt _salt AssetSourceEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` key
+
+instance Prelude.NFData AssetSourceEntry where
+  rnf AssetSourceEntry' {..} =
+    Prelude.rnf bucket `Prelude.seq` Prelude.rnf key
+
+instance Data.ToJSON AssetSourceEntry where
+  toJSON AssetSourceEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Bucket" Data..= bucket),
+            Prelude.Just ("Key" Data..= key)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/AssetType.hs b/gen/Amazonka/DataExchange/Types/AssetType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/AssetType.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.DataExchange.Types.AssetType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.AssetType
+  ( AssetType
+      ( ..,
+        AssetType_API_GATEWAY_API,
+        AssetType_LAKE_FORMATION_DATA_PERMISSION,
+        AssetType_REDSHIFT_DATA_SHARE,
+        AssetType_S3_DATA_ACCESS,
+        AssetType_S3_SNAPSHOT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssetType = AssetType'
+  { fromAssetType ::
+      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 AssetType_API_GATEWAY_API :: AssetType
+pattern AssetType_API_GATEWAY_API = AssetType' "API_GATEWAY_API"
+
+pattern AssetType_LAKE_FORMATION_DATA_PERMISSION :: AssetType
+pattern AssetType_LAKE_FORMATION_DATA_PERMISSION = AssetType' "LAKE_FORMATION_DATA_PERMISSION"
+
+pattern AssetType_REDSHIFT_DATA_SHARE :: AssetType
+pattern AssetType_REDSHIFT_DATA_SHARE = AssetType' "REDSHIFT_DATA_SHARE"
+
+pattern AssetType_S3_DATA_ACCESS :: AssetType
+pattern AssetType_S3_DATA_ACCESS = AssetType' "S3_DATA_ACCESS"
+
+pattern AssetType_S3_SNAPSHOT :: AssetType
+pattern AssetType_S3_SNAPSHOT = AssetType' "S3_SNAPSHOT"
+
+{-# COMPLETE
+  AssetType_API_GATEWAY_API,
+  AssetType_LAKE_FORMATION_DATA_PERMISSION,
+  AssetType_REDSHIFT_DATA_SHARE,
+  AssetType_S3_DATA_ACCESS,
+  AssetType_S3_SNAPSHOT,
+  AssetType'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/AutoExportRevisionDestinationEntry.hs b/gen/Amazonka/DataExchange/Types/AutoExportRevisionDestinationEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/AutoExportRevisionDestinationEntry.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.AutoExportRevisionDestinationEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.AutoExportRevisionDestinationEntry 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 revision destination is the Amazon S3 bucket folder destination to
+-- where the export will be sent.
+--
+-- /See:/ 'newAutoExportRevisionDestinationEntry' smart constructor.
+data AutoExportRevisionDestinationEntry = AutoExportRevisionDestinationEntry'
+  { -- | A string representing the pattern for generated names of the individual
+    -- assets in the revision. For more information about key patterns, see
+    -- <https://docs.aws.amazon.com/data-exchange/latest/userguide/jobs.html#revision-export-keypatterns Key patterns when exporting revisions>.
+    keyPattern :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket that is the destination for the event action.
+    bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoExportRevisionDestinationEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyPattern', 'autoExportRevisionDestinationEntry_keyPattern' - A string representing the pattern for generated names of the individual
+-- assets in the revision. For more information about key patterns, see
+-- <https://docs.aws.amazon.com/data-exchange/latest/userguide/jobs.html#revision-export-keypatterns Key patterns when exporting revisions>.
+--
+-- 'bucket', 'autoExportRevisionDestinationEntry_bucket' - The Amazon S3 bucket that is the destination for the event action.
+newAutoExportRevisionDestinationEntry ::
+  -- | 'bucket'
+  Prelude.Text ->
+  AutoExportRevisionDestinationEntry
+newAutoExportRevisionDestinationEntry pBucket_ =
+  AutoExportRevisionDestinationEntry'
+    { keyPattern =
+        Prelude.Nothing,
+      bucket = pBucket_
+    }
+
+-- | A string representing the pattern for generated names of the individual
+-- assets in the revision. For more information about key patterns, see
+-- <https://docs.aws.amazon.com/data-exchange/latest/userguide/jobs.html#revision-export-keypatterns Key patterns when exporting revisions>.
+autoExportRevisionDestinationEntry_keyPattern :: Lens.Lens' AutoExportRevisionDestinationEntry (Prelude.Maybe Prelude.Text)
+autoExportRevisionDestinationEntry_keyPattern = Lens.lens (\AutoExportRevisionDestinationEntry' {keyPattern} -> keyPattern) (\s@AutoExportRevisionDestinationEntry' {} a -> s {keyPattern = a} :: AutoExportRevisionDestinationEntry)
+
+-- | The Amazon S3 bucket that is the destination for the event action.
+autoExportRevisionDestinationEntry_bucket :: Lens.Lens' AutoExportRevisionDestinationEntry Prelude.Text
+autoExportRevisionDestinationEntry_bucket = Lens.lens (\AutoExportRevisionDestinationEntry' {bucket} -> bucket) (\s@AutoExportRevisionDestinationEntry' {} a -> s {bucket = a} :: AutoExportRevisionDestinationEntry)
+
+instance
+  Data.FromJSON
+    AutoExportRevisionDestinationEntry
+  where
+  parseJSON =
+    Data.withObject
+      "AutoExportRevisionDestinationEntry"
+      ( \x ->
+          AutoExportRevisionDestinationEntry'
+            Prelude.<$> (x Data..:? "KeyPattern")
+            Prelude.<*> (x Data..: "Bucket")
+      )
+
+instance
+  Prelude.Hashable
+    AutoExportRevisionDestinationEntry
+  where
+  hashWithSalt
+    _salt
+    AutoExportRevisionDestinationEntry' {..} =
+      _salt
+        `Prelude.hashWithSalt` keyPattern
+        `Prelude.hashWithSalt` bucket
+
+instance
+  Prelude.NFData
+    AutoExportRevisionDestinationEntry
+  where
+  rnf AutoExportRevisionDestinationEntry' {..} =
+    Prelude.rnf keyPattern
+      `Prelude.seq` Prelude.rnf bucket
+
+instance
+  Data.ToJSON
+    AutoExportRevisionDestinationEntry
+  where
+  toJSON AutoExportRevisionDestinationEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("KeyPattern" Data..=) Prelude.<$> keyPattern,
+            Prelude.Just ("Bucket" Data..= bucket)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/AutoExportRevisionToS3RequestDetails.hs b/gen/Amazonka/DataExchange/Types/AutoExportRevisionToS3RequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/AutoExportRevisionToS3RequestDetails.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.AutoExportRevisionToS3RequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.AutoExportRevisionToS3RequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AutoExportRevisionDestinationEntry
+import Amazonka.DataExchange.Types.ExportServerSideEncryption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of the operation to be performed by the job.
+--
+-- /See:/ 'newAutoExportRevisionToS3RequestDetails' smart constructor.
+data AutoExportRevisionToS3RequestDetails = AutoExportRevisionToS3RequestDetails'
+  { -- | Encryption configuration for the auto export job.
+    encryption :: Prelude.Maybe ExportServerSideEncryption,
+    -- | A revision destination is the Amazon S3 bucket folder destination to
+    -- where the export will be sent.
+    revisionDestination :: AutoExportRevisionDestinationEntry
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AutoExportRevisionToS3RequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryption', 'autoExportRevisionToS3RequestDetails_encryption' - Encryption configuration for the auto export job.
+--
+-- 'revisionDestination', 'autoExportRevisionToS3RequestDetails_revisionDestination' - A revision destination is the Amazon S3 bucket folder destination to
+-- where the export will be sent.
+newAutoExportRevisionToS3RequestDetails ::
+  -- | 'revisionDestination'
+  AutoExportRevisionDestinationEntry ->
+  AutoExportRevisionToS3RequestDetails
+newAutoExportRevisionToS3RequestDetails
+  pRevisionDestination_ =
+    AutoExportRevisionToS3RequestDetails'
+      { encryption =
+          Prelude.Nothing,
+        revisionDestination =
+          pRevisionDestination_
+      }
+
+-- | Encryption configuration for the auto export job.
+autoExportRevisionToS3RequestDetails_encryption :: Lens.Lens' AutoExportRevisionToS3RequestDetails (Prelude.Maybe ExportServerSideEncryption)
+autoExportRevisionToS3RequestDetails_encryption = Lens.lens (\AutoExportRevisionToS3RequestDetails' {encryption} -> encryption) (\s@AutoExportRevisionToS3RequestDetails' {} a -> s {encryption = a} :: AutoExportRevisionToS3RequestDetails)
+
+-- | A revision destination is the Amazon S3 bucket folder destination to
+-- where the export will be sent.
+autoExportRevisionToS3RequestDetails_revisionDestination :: Lens.Lens' AutoExportRevisionToS3RequestDetails AutoExportRevisionDestinationEntry
+autoExportRevisionToS3RequestDetails_revisionDestination = Lens.lens (\AutoExportRevisionToS3RequestDetails' {revisionDestination} -> revisionDestination) (\s@AutoExportRevisionToS3RequestDetails' {} a -> s {revisionDestination = a} :: AutoExportRevisionToS3RequestDetails)
+
+instance
+  Data.FromJSON
+    AutoExportRevisionToS3RequestDetails
+  where
+  parseJSON =
+    Data.withObject
+      "AutoExportRevisionToS3RequestDetails"
+      ( \x ->
+          AutoExportRevisionToS3RequestDetails'
+            Prelude.<$> (x Data..:? "Encryption")
+            Prelude.<*> (x Data..: "RevisionDestination")
+      )
+
+instance
+  Prelude.Hashable
+    AutoExportRevisionToS3RequestDetails
+  where
+  hashWithSalt
+    _salt
+    AutoExportRevisionToS3RequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` encryption
+        `Prelude.hashWithSalt` revisionDestination
+
+instance
+  Prelude.NFData
+    AutoExportRevisionToS3RequestDetails
+  where
+  rnf AutoExportRevisionToS3RequestDetails' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf revisionDestination
+
+instance
+  Data.ToJSON
+    AutoExportRevisionToS3RequestDetails
+  where
+  toJSON AutoExportRevisionToS3RequestDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Encryption" Data..=) Prelude.<$> encryption,
+            Prelude.Just
+              ("RevisionDestination" Data..= revisionDestination)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/Code.hs b/gen/Amazonka/DataExchange/Types/Code.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/Code.hs
@@ -0,0 +1,93 @@
+{-# 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.DataExchange.Types.Code
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.Code
+  ( Code
+      ( ..,
+        Code_ACCESS_DENIED_EXCEPTION,
+        Code_INTERNAL_SERVER_EXCEPTION,
+        Code_MALWARE_DETECTED,
+        Code_MALWARE_SCAN_ENCRYPTED_FILE,
+        Code_RESOURCE_NOT_FOUND_EXCEPTION,
+        Code_SERVICE_QUOTA_EXCEEDED_EXCEPTION,
+        Code_VALIDATION_EXCEPTION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Code = Code' {fromCode :: 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 Code_ACCESS_DENIED_EXCEPTION :: Code
+pattern Code_ACCESS_DENIED_EXCEPTION = Code' "ACCESS_DENIED_EXCEPTION"
+
+pattern Code_INTERNAL_SERVER_EXCEPTION :: Code
+pattern Code_INTERNAL_SERVER_EXCEPTION = Code' "INTERNAL_SERVER_EXCEPTION"
+
+pattern Code_MALWARE_DETECTED :: Code
+pattern Code_MALWARE_DETECTED = Code' "MALWARE_DETECTED"
+
+pattern Code_MALWARE_SCAN_ENCRYPTED_FILE :: Code
+pattern Code_MALWARE_SCAN_ENCRYPTED_FILE = Code' "MALWARE_SCAN_ENCRYPTED_FILE"
+
+pattern Code_RESOURCE_NOT_FOUND_EXCEPTION :: Code
+pattern Code_RESOURCE_NOT_FOUND_EXCEPTION = Code' "RESOURCE_NOT_FOUND_EXCEPTION"
+
+pattern Code_SERVICE_QUOTA_EXCEEDED_EXCEPTION :: Code
+pattern Code_SERVICE_QUOTA_EXCEEDED_EXCEPTION = Code' "SERVICE_QUOTA_EXCEEDED_EXCEPTION"
+
+pattern Code_VALIDATION_EXCEPTION :: Code
+pattern Code_VALIDATION_EXCEPTION = Code' "VALIDATION_EXCEPTION"
+
+{-# COMPLETE
+  Code_ACCESS_DENIED_EXCEPTION,
+  Code_INTERNAL_SERVER_EXCEPTION,
+  Code_MALWARE_DETECTED,
+  Code_MALWARE_SCAN_ENCRYPTED_FILE,
+  Code_RESOURCE_NOT_FOUND_EXCEPTION,
+  Code_SERVICE_QUOTA_EXCEEDED_EXCEPTION,
+  Code_VALIDATION_EXCEPTION,
+  Code'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/CreateS3DataAccessFromS3BucketRequestDetails.hs b/gen/Amazonka/DataExchange/Types/CreateS3DataAccessFromS3BucketRequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/CreateS3DataAccessFromS3BucketRequestDetails.hs
@@ -0,0 +1,122 @@
+{-# 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.DataExchange.Types.CreateS3DataAccessFromS3BucketRequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketRequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.S3DataAccessAssetSourceEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of the operation to create an Amazon S3 data access from an S3
+-- bucket.
+--
+-- /See:/ 'newCreateS3DataAccessFromS3BucketRequestDetails' smart constructor.
+data CreateS3DataAccessFromS3BucketRequestDetails = CreateS3DataAccessFromS3BucketRequestDetails'
+  { -- | Details about the S3 data access source asset.
+    assetSource :: S3DataAccessAssetSourceEntry,
+    -- | The unique identifier for the data set associated with the creation of
+    -- this Amazon S3 data access.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateS3DataAccessFromS3BucketRequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetSource', 'createS3DataAccessFromS3BucketRequestDetails_assetSource' - Details about the S3 data access source asset.
+--
+-- 'dataSetId', 'createS3DataAccessFromS3BucketRequestDetails_dataSetId' - The unique identifier for the data set associated with the creation of
+-- this Amazon S3 data access.
+--
+-- 'revisionId', 'createS3DataAccessFromS3BucketRequestDetails_revisionId' - The unique identifier for a revision.
+newCreateS3DataAccessFromS3BucketRequestDetails ::
+  -- | 'assetSource'
+  S3DataAccessAssetSourceEntry ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  CreateS3DataAccessFromS3BucketRequestDetails
+newCreateS3DataAccessFromS3BucketRequestDetails
+  pAssetSource_
+  pDataSetId_
+  pRevisionId_ =
+    CreateS3DataAccessFromS3BucketRequestDetails'
+      { assetSource =
+          pAssetSource_,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | Details about the S3 data access source asset.
+createS3DataAccessFromS3BucketRequestDetails_assetSource :: Lens.Lens' CreateS3DataAccessFromS3BucketRequestDetails S3DataAccessAssetSourceEntry
+createS3DataAccessFromS3BucketRequestDetails_assetSource = Lens.lens (\CreateS3DataAccessFromS3BucketRequestDetails' {assetSource} -> assetSource) (\s@CreateS3DataAccessFromS3BucketRequestDetails' {} a -> s {assetSource = a} :: CreateS3DataAccessFromS3BucketRequestDetails)
+
+-- | The unique identifier for the data set associated with the creation of
+-- this Amazon S3 data access.
+createS3DataAccessFromS3BucketRequestDetails_dataSetId :: Lens.Lens' CreateS3DataAccessFromS3BucketRequestDetails Prelude.Text
+createS3DataAccessFromS3BucketRequestDetails_dataSetId = Lens.lens (\CreateS3DataAccessFromS3BucketRequestDetails' {dataSetId} -> dataSetId) (\s@CreateS3DataAccessFromS3BucketRequestDetails' {} a -> s {dataSetId = a} :: CreateS3DataAccessFromS3BucketRequestDetails)
+
+-- | The unique identifier for a revision.
+createS3DataAccessFromS3BucketRequestDetails_revisionId :: Lens.Lens' CreateS3DataAccessFromS3BucketRequestDetails Prelude.Text
+createS3DataAccessFromS3BucketRequestDetails_revisionId = Lens.lens (\CreateS3DataAccessFromS3BucketRequestDetails' {revisionId} -> revisionId) (\s@CreateS3DataAccessFromS3BucketRequestDetails' {} a -> s {revisionId = a} :: CreateS3DataAccessFromS3BucketRequestDetails)
+
+instance
+  Prelude.Hashable
+    CreateS3DataAccessFromS3BucketRequestDetails
+  where
+  hashWithSalt
+    _salt
+    CreateS3DataAccessFromS3BucketRequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetSource
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    CreateS3DataAccessFromS3BucketRequestDetails
+  where
+  rnf CreateS3DataAccessFromS3BucketRequestDetails' {..} =
+    Prelude.rnf assetSource
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance
+  Data.ToJSON
+    CreateS3DataAccessFromS3BucketRequestDetails
+  where
+  toJSON
+    CreateS3DataAccessFromS3BucketRequestDetails' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ Prelude.Just ("AssetSource" Data..= assetSource),
+              Prelude.Just ("DataSetId" Data..= dataSetId),
+              Prelude.Just ("RevisionId" Data..= revisionId)
+            ]
+        )
diff --git a/gen/Amazonka/DataExchange/Types/CreateS3DataAccessFromS3BucketResponseDetails.hs b/gen/Amazonka/DataExchange/Types/CreateS3DataAccessFromS3BucketResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/CreateS3DataAccessFromS3BucketResponseDetails.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.S3DataAccessAssetSourceEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the response of the operation to create an S3 data access
+-- from an S3 bucket.
+--
+-- /See:/ 'newCreateS3DataAccessFromS3BucketResponseDetails' smart constructor.
+data CreateS3DataAccessFromS3BucketResponseDetails = CreateS3DataAccessFromS3BucketResponseDetails'
+  { -- | Details about the asset source from an Amazon S3 bucket.
+    assetSource :: S3DataAccessAssetSourceEntry,
+    -- | The unique identifier for this data set.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateS3DataAccessFromS3BucketResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetSource', 'createS3DataAccessFromS3BucketResponseDetails_assetSource' - Details about the asset source from an Amazon S3 bucket.
+--
+-- 'dataSetId', 'createS3DataAccessFromS3BucketResponseDetails_dataSetId' - The unique identifier for this data set.
+--
+-- 'revisionId', 'createS3DataAccessFromS3BucketResponseDetails_revisionId' - The unique identifier for the revision.
+newCreateS3DataAccessFromS3BucketResponseDetails ::
+  -- | 'assetSource'
+  S3DataAccessAssetSourceEntry ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  CreateS3DataAccessFromS3BucketResponseDetails
+newCreateS3DataAccessFromS3BucketResponseDetails
+  pAssetSource_
+  pDataSetId_
+  pRevisionId_ =
+    CreateS3DataAccessFromS3BucketResponseDetails'
+      { assetSource =
+          pAssetSource_,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | Details about the asset source from an Amazon S3 bucket.
+createS3DataAccessFromS3BucketResponseDetails_assetSource :: Lens.Lens' CreateS3DataAccessFromS3BucketResponseDetails S3DataAccessAssetSourceEntry
+createS3DataAccessFromS3BucketResponseDetails_assetSource = Lens.lens (\CreateS3DataAccessFromS3BucketResponseDetails' {assetSource} -> assetSource) (\s@CreateS3DataAccessFromS3BucketResponseDetails' {} a -> s {assetSource = a} :: CreateS3DataAccessFromS3BucketResponseDetails)
+
+-- | The unique identifier for this data set.
+createS3DataAccessFromS3BucketResponseDetails_dataSetId :: Lens.Lens' CreateS3DataAccessFromS3BucketResponseDetails Prelude.Text
+createS3DataAccessFromS3BucketResponseDetails_dataSetId = Lens.lens (\CreateS3DataAccessFromS3BucketResponseDetails' {dataSetId} -> dataSetId) (\s@CreateS3DataAccessFromS3BucketResponseDetails' {} a -> s {dataSetId = a} :: CreateS3DataAccessFromS3BucketResponseDetails)
+
+-- | The unique identifier for the revision.
+createS3DataAccessFromS3BucketResponseDetails_revisionId :: Lens.Lens' CreateS3DataAccessFromS3BucketResponseDetails Prelude.Text
+createS3DataAccessFromS3BucketResponseDetails_revisionId = Lens.lens (\CreateS3DataAccessFromS3BucketResponseDetails' {revisionId} -> revisionId) (\s@CreateS3DataAccessFromS3BucketResponseDetails' {} a -> s {revisionId = a} :: CreateS3DataAccessFromS3BucketResponseDetails)
+
+instance
+  Data.FromJSON
+    CreateS3DataAccessFromS3BucketResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "CreateS3DataAccessFromS3BucketResponseDetails"
+      ( \x ->
+          CreateS3DataAccessFromS3BucketResponseDetails'
+            Prelude.<$> (x Data..: "AssetSource")
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "RevisionId")
+      )
+
+instance
+  Prelude.Hashable
+    CreateS3DataAccessFromS3BucketResponseDetails
+  where
+  hashWithSalt
+    _salt
+    CreateS3DataAccessFromS3BucketResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetSource
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    CreateS3DataAccessFromS3BucketResponseDetails
+  where
+  rnf
+    CreateS3DataAccessFromS3BucketResponseDetails' {..} =
+      Prelude.rnf assetSource
+        `Prelude.seq` Prelude.rnf dataSetId
+        `Prelude.seq` Prelude.rnf revisionId
diff --git a/gen/Amazonka/DataExchange/Types/DataSetEntry.hs b/gen/Amazonka/DataExchange/Types/DataSetEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/DataSetEntry.hs
@@ -0,0 +1,222 @@
+{-# 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.DataExchange.Types.DataSetEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.DataSetEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AssetType
+import Amazonka.DataExchange.Types.Origin
+import Amazonka.DataExchange.Types.OriginDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | A data set is an AWS resource with one or more revisions.
+--
+-- /See:/ 'newDataSetEntry' smart constructor.
+data DataSetEntry = DataSetEntry'
+  { -- | If the origin of this data set is ENTITLED, includes the details for the
+    -- product on AWS Marketplace.
+    originDetails :: Prelude.Maybe OriginDetails,
+    -- | The data set ID of the owned data set corresponding to the entitled data
+    -- set being viewed. This parameter is returned when a data set owner is
+    -- viewing the entitled copy of its owned data set.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN for the data set.
+    arn :: Prelude.Text,
+    -- | The type of asset that is added to a data set.
+    assetType :: AssetType,
+    -- | The date and time that the data set was created, in ISO 8601 format.
+    createdAt :: Data.ISO8601,
+    -- | The description for the data set.
+    description :: Prelude.Text,
+    -- | The unique identifier for the data set.
+    id :: Prelude.Text,
+    -- | The name of the data set.
+    name :: Prelude.Text,
+    -- | A property that defines the data set as OWNED by the account (for
+    -- providers) or ENTITLED to the account (for subscribers).
+    origin :: Origin,
+    -- | The date and time that the data set was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSetEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'originDetails', 'dataSetEntry_originDetails' - If the origin of this data set is ENTITLED, includes the details for the
+-- product on AWS Marketplace.
+--
+-- 'sourceId', 'dataSetEntry_sourceId' - The data set ID of the owned data set corresponding to the entitled data
+-- set being viewed. This parameter is returned when a data set owner is
+-- viewing the entitled copy of its owned data set.
+--
+-- 'arn', 'dataSetEntry_arn' - The ARN for the data set.
+--
+-- 'assetType', 'dataSetEntry_assetType' - The type of asset that is added to a data set.
+--
+-- 'createdAt', 'dataSetEntry_createdAt' - The date and time that the data set was created, in ISO 8601 format.
+--
+-- 'description', 'dataSetEntry_description' - The description for the data set.
+--
+-- 'id', 'dataSetEntry_id' - The unique identifier for the data set.
+--
+-- 'name', 'dataSetEntry_name' - The name of the data set.
+--
+-- 'origin', 'dataSetEntry_origin' - A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+--
+-- 'updatedAt', 'dataSetEntry_updatedAt' - The date and time that the data set was last updated, in ISO 8601
+-- format.
+newDataSetEntry ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'assetType'
+  AssetType ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'origin'
+  Origin ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  DataSetEntry
+newDataSetEntry
+  pArn_
+  pAssetType_
+  pCreatedAt_
+  pDescription_
+  pId_
+  pName_
+  pOrigin_
+  pUpdatedAt_ =
+    DataSetEntry'
+      { originDetails = Prelude.Nothing,
+        sourceId = Prelude.Nothing,
+        arn = pArn_,
+        assetType = pAssetType_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        description = pDescription_,
+        id = pId_,
+        name = pName_,
+        origin = pOrigin_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | If the origin of this data set is ENTITLED, includes the details for the
+-- product on AWS Marketplace.
+dataSetEntry_originDetails :: Lens.Lens' DataSetEntry (Prelude.Maybe OriginDetails)
+dataSetEntry_originDetails = Lens.lens (\DataSetEntry' {originDetails} -> originDetails) (\s@DataSetEntry' {} a -> s {originDetails = a} :: DataSetEntry)
+
+-- | The data set ID of the owned data set corresponding to the entitled data
+-- set being viewed. This parameter is returned when a data set owner is
+-- viewing the entitled copy of its owned data set.
+dataSetEntry_sourceId :: Lens.Lens' DataSetEntry (Prelude.Maybe Prelude.Text)
+dataSetEntry_sourceId = Lens.lens (\DataSetEntry' {sourceId} -> sourceId) (\s@DataSetEntry' {} a -> s {sourceId = a} :: DataSetEntry)
+
+-- | The ARN for the data set.
+dataSetEntry_arn :: Lens.Lens' DataSetEntry Prelude.Text
+dataSetEntry_arn = Lens.lens (\DataSetEntry' {arn} -> arn) (\s@DataSetEntry' {} a -> s {arn = a} :: DataSetEntry)
+
+-- | The type of asset that is added to a data set.
+dataSetEntry_assetType :: Lens.Lens' DataSetEntry AssetType
+dataSetEntry_assetType = Lens.lens (\DataSetEntry' {assetType} -> assetType) (\s@DataSetEntry' {} a -> s {assetType = a} :: DataSetEntry)
+
+-- | The date and time that the data set was created, in ISO 8601 format.
+dataSetEntry_createdAt :: Lens.Lens' DataSetEntry Prelude.UTCTime
+dataSetEntry_createdAt = Lens.lens (\DataSetEntry' {createdAt} -> createdAt) (\s@DataSetEntry' {} a -> s {createdAt = a} :: DataSetEntry) Prelude.. Data._Time
+
+-- | The description for the data set.
+dataSetEntry_description :: Lens.Lens' DataSetEntry Prelude.Text
+dataSetEntry_description = Lens.lens (\DataSetEntry' {description} -> description) (\s@DataSetEntry' {} a -> s {description = a} :: DataSetEntry)
+
+-- | The unique identifier for the data set.
+dataSetEntry_id :: Lens.Lens' DataSetEntry Prelude.Text
+dataSetEntry_id = Lens.lens (\DataSetEntry' {id} -> id) (\s@DataSetEntry' {} a -> s {id = a} :: DataSetEntry)
+
+-- | The name of the data set.
+dataSetEntry_name :: Lens.Lens' DataSetEntry Prelude.Text
+dataSetEntry_name = Lens.lens (\DataSetEntry' {name} -> name) (\s@DataSetEntry' {} a -> s {name = a} :: DataSetEntry)
+
+-- | A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+dataSetEntry_origin :: Lens.Lens' DataSetEntry Origin
+dataSetEntry_origin = Lens.lens (\DataSetEntry' {origin} -> origin) (\s@DataSetEntry' {} a -> s {origin = a} :: DataSetEntry)
+
+-- | The date and time that the data set was last updated, in ISO 8601
+-- format.
+dataSetEntry_updatedAt :: Lens.Lens' DataSetEntry Prelude.UTCTime
+dataSetEntry_updatedAt = Lens.lens (\DataSetEntry' {updatedAt} -> updatedAt) (\s@DataSetEntry' {} a -> s {updatedAt = a} :: DataSetEntry) Prelude.. Data._Time
+
+instance Data.FromJSON DataSetEntry where
+  parseJSON =
+    Data.withObject
+      "DataSetEntry"
+      ( \x ->
+          DataSetEntry'
+            Prelude.<$> (x Data..:? "OriginDetails")
+            Prelude.<*> (x Data..:? "SourceId")
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "AssetType")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "Description")
+            Prelude.<*> (x Data..: "Id")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Origin")
+            Prelude.<*> (x Data..: "UpdatedAt")
+      )
+
+instance Prelude.Hashable DataSetEntry where
+  hashWithSalt _salt DataSetEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` originDetails
+      `Prelude.hashWithSalt` sourceId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` assetType
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` origin
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData DataSetEntry where
+  rnf DataSetEntry' {..} =
+    Prelude.rnf originDetails
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf assetType
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicy.hs b/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicy.hs
@@ -0,0 +1,69 @@
+{-# 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.DataExchange.Types.DatabaseLFTagPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.DatabaseLFTagPolicy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.LFTag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The LF-tag policy for database resources.
+--
+-- /See:/ 'newDatabaseLFTagPolicy' smart constructor.
+data DatabaseLFTagPolicy = DatabaseLFTagPolicy'
+  { -- | A list of LF-tag conditions that apply to database resources.
+    expression :: [LFTag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatabaseLFTagPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expression', 'databaseLFTagPolicy_expression' - A list of LF-tag conditions that apply to database resources.
+newDatabaseLFTagPolicy ::
+  DatabaseLFTagPolicy
+newDatabaseLFTagPolicy =
+  DatabaseLFTagPolicy' {expression = Prelude.mempty}
+
+-- | A list of LF-tag conditions that apply to database resources.
+databaseLFTagPolicy_expression :: Lens.Lens' DatabaseLFTagPolicy [LFTag]
+databaseLFTagPolicy_expression = Lens.lens (\DatabaseLFTagPolicy' {expression} -> expression) (\s@DatabaseLFTagPolicy' {} a -> s {expression = a} :: DatabaseLFTagPolicy) Prelude.. Lens.coerced
+
+instance Data.FromJSON DatabaseLFTagPolicy where
+  parseJSON =
+    Data.withObject
+      "DatabaseLFTagPolicy"
+      ( \x ->
+          DatabaseLFTagPolicy'
+            Prelude.<$> (x Data..:? "Expression" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable DatabaseLFTagPolicy where
+  hashWithSalt _salt DatabaseLFTagPolicy' {..} =
+    _salt `Prelude.hashWithSalt` expression
+
+instance Prelude.NFData DatabaseLFTagPolicy where
+  rnf DatabaseLFTagPolicy' {..} = Prelude.rnf expression
diff --git a/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicyAndPermissions.hs b/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicyAndPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicyAndPermissions.hs
@@ -0,0 +1,110 @@
+{-# 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.DataExchange.Types.DatabaseLFTagPolicyAndPermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.DatabaseLFTagPolicyAndPermissions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicyPermission
+import Amazonka.DataExchange.Types.LFTag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The LF-tag policy and permissions for database resources.
+--
+-- /See:/ 'newDatabaseLFTagPolicyAndPermissions' smart constructor.
+data DatabaseLFTagPolicyAndPermissions = DatabaseLFTagPolicyAndPermissions'
+  { -- | A list of LF-tag conditions that apply to database resources.
+    expression :: [LFTag],
+    -- | The permissions granted to subscribers on database resources.
+    permissions :: [DatabaseLFTagPolicyPermission]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatabaseLFTagPolicyAndPermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expression', 'databaseLFTagPolicyAndPermissions_expression' - A list of LF-tag conditions that apply to database resources.
+--
+-- 'permissions', 'databaseLFTagPolicyAndPermissions_permissions' - The permissions granted to subscribers on database resources.
+newDatabaseLFTagPolicyAndPermissions ::
+  DatabaseLFTagPolicyAndPermissions
+newDatabaseLFTagPolicyAndPermissions =
+  DatabaseLFTagPolicyAndPermissions'
+    { expression =
+        Prelude.mempty,
+      permissions = Prelude.mempty
+    }
+
+-- | A list of LF-tag conditions that apply to database resources.
+databaseLFTagPolicyAndPermissions_expression :: Lens.Lens' DatabaseLFTagPolicyAndPermissions [LFTag]
+databaseLFTagPolicyAndPermissions_expression = Lens.lens (\DatabaseLFTagPolicyAndPermissions' {expression} -> expression) (\s@DatabaseLFTagPolicyAndPermissions' {} a -> s {expression = a} :: DatabaseLFTagPolicyAndPermissions) Prelude.. Lens.coerced
+
+-- | The permissions granted to subscribers on database resources.
+databaseLFTagPolicyAndPermissions_permissions :: Lens.Lens' DatabaseLFTagPolicyAndPermissions [DatabaseLFTagPolicyPermission]
+databaseLFTagPolicyAndPermissions_permissions = Lens.lens (\DatabaseLFTagPolicyAndPermissions' {permissions} -> permissions) (\s@DatabaseLFTagPolicyAndPermissions' {} a -> s {permissions = a} :: DatabaseLFTagPolicyAndPermissions) Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    DatabaseLFTagPolicyAndPermissions
+  where
+  parseJSON =
+    Data.withObject
+      "DatabaseLFTagPolicyAndPermissions"
+      ( \x ->
+          DatabaseLFTagPolicyAndPermissions'
+            Prelude.<$> (x Data..:? "Expression" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Permissions" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    DatabaseLFTagPolicyAndPermissions
+  where
+  hashWithSalt
+    _salt
+    DatabaseLFTagPolicyAndPermissions' {..} =
+      _salt
+        `Prelude.hashWithSalt` expression
+        `Prelude.hashWithSalt` permissions
+
+instance
+  Prelude.NFData
+    DatabaseLFTagPolicyAndPermissions
+  where
+  rnf DatabaseLFTagPolicyAndPermissions' {..} =
+    Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf permissions
+
+instance
+  Data.ToJSON
+    DatabaseLFTagPolicyAndPermissions
+  where
+  toJSON DatabaseLFTagPolicyAndPermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Expression" Data..= expression),
+            Prelude.Just ("Permissions" Data..= permissions)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicyPermission.hs b/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicyPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/DatabaseLFTagPolicyPermission.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.DatabaseLFTagPolicyPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.DatabaseLFTagPolicyPermission
+  ( DatabaseLFTagPolicyPermission
+      ( ..,
+        DatabaseLFTagPolicyPermission_DESCRIBE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DatabaseLFTagPolicyPermission = DatabaseLFTagPolicyPermission'
+  { fromDatabaseLFTagPolicyPermission ::
+      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 DatabaseLFTagPolicyPermission_DESCRIBE :: DatabaseLFTagPolicyPermission
+pattern DatabaseLFTagPolicyPermission_DESCRIBE = DatabaseLFTagPolicyPermission' "DESCRIBE"
+
+{-# COMPLETE
+  DatabaseLFTagPolicyPermission_DESCRIBE,
+  DatabaseLFTagPolicyPermission'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/Details.hs b/gen/Amazonka/DataExchange/Types/Details.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/Details.hs
@@ -0,0 +1,92 @@
+{-# 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.DataExchange.Types.Details
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.Details where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AssetSourceEntry
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlJobErrorDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the job error.
+--
+-- /See:/ 'newDetails' smart constructor.
+data Details = Details'
+  { -- | Information about the job error.
+    importAssetFromSignedUrlJobErrorDetails :: Prelude.Maybe ImportAssetFromSignedUrlJobErrorDetails,
+    -- | Details about the job error.
+    importAssetsFromS3JobErrorDetails :: Prelude.Maybe [AssetSourceEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Details' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'importAssetFromSignedUrlJobErrorDetails', 'details_importAssetFromSignedUrlJobErrorDetails' - Information about the job error.
+--
+-- 'importAssetsFromS3JobErrorDetails', 'details_importAssetsFromS3JobErrorDetails' - Details about the job error.
+newDetails ::
+  Details
+newDetails =
+  Details'
+    { importAssetFromSignedUrlJobErrorDetails =
+        Prelude.Nothing,
+      importAssetsFromS3JobErrorDetails = Prelude.Nothing
+    }
+
+-- | Information about the job error.
+details_importAssetFromSignedUrlJobErrorDetails :: Lens.Lens' Details (Prelude.Maybe ImportAssetFromSignedUrlJobErrorDetails)
+details_importAssetFromSignedUrlJobErrorDetails = Lens.lens (\Details' {importAssetFromSignedUrlJobErrorDetails} -> importAssetFromSignedUrlJobErrorDetails) (\s@Details' {} a -> s {importAssetFromSignedUrlJobErrorDetails = a} :: Details)
+
+-- | Details about the job error.
+details_importAssetsFromS3JobErrorDetails :: Lens.Lens' Details (Prelude.Maybe [AssetSourceEntry])
+details_importAssetsFromS3JobErrorDetails = Lens.lens (\Details' {importAssetsFromS3JobErrorDetails} -> importAssetsFromS3JobErrorDetails) (\s@Details' {} a -> s {importAssetsFromS3JobErrorDetails = a} :: Details) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Details where
+  parseJSON =
+    Data.withObject
+      "Details"
+      ( \x ->
+          Details'
+            Prelude.<$> ( x
+                            Data..:? "ImportAssetFromSignedUrlJobErrorDetails"
+                        )
+            Prelude.<*> ( x
+                            Data..:? "ImportAssetsFromS3JobErrorDetails"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable Details where
+  hashWithSalt _salt Details' {..} =
+    _salt
+      `Prelude.hashWithSalt` importAssetFromSignedUrlJobErrorDetails
+      `Prelude.hashWithSalt` importAssetsFromS3JobErrorDetails
+
+instance Prelude.NFData Details where
+  rnf Details' {..} =
+    Prelude.rnf importAssetFromSignedUrlJobErrorDetails
+      `Prelude.seq` Prelude.rnf importAssetsFromS3JobErrorDetails
diff --git a/gen/Amazonka/DataExchange/Types/Event.hs b/gen/Amazonka/DataExchange/Types/Event.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/Event.hs
@@ -0,0 +1,77 @@
+{-# 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.DataExchange.Types.Event
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.Event where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.RevisionPublished
+import qualified Amazonka.Prelude as Prelude
+
+-- | What occurs to start an action.
+--
+-- /See:/ 'newEvent' smart constructor.
+data Event = Event'
+  { -- | What occurs to start the revision publish action.
+    revisionPublished :: Prelude.Maybe RevisionPublished
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Event' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'revisionPublished', 'event_revisionPublished' - What occurs to start the revision publish action.
+newEvent ::
+  Event
+newEvent =
+  Event' {revisionPublished = Prelude.Nothing}
+
+-- | What occurs to start the revision publish action.
+event_revisionPublished :: Lens.Lens' Event (Prelude.Maybe RevisionPublished)
+event_revisionPublished = Lens.lens (\Event' {revisionPublished} -> revisionPublished) (\s@Event' {} a -> s {revisionPublished = a} :: Event)
+
+instance Data.FromJSON Event where
+  parseJSON =
+    Data.withObject
+      "Event"
+      ( \x ->
+          Event' Prelude.<$> (x Data..:? "RevisionPublished")
+      )
+
+instance Prelude.Hashable Event where
+  hashWithSalt _salt Event' {..} =
+    _salt `Prelude.hashWithSalt` revisionPublished
+
+instance Prelude.NFData Event where
+  rnf Event' {..} = Prelude.rnf revisionPublished
+
+instance Data.ToJSON Event where
+  toJSON Event' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("RevisionPublished" Data..=)
+              Prelude.<$> revisionPublished
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/EventActionEntry.hs b/gen/Amazonka/DataExchange/Types/EventActionEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/EventActionEntry.hs
@@ -0,0 +1,157 @@
+{-# 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.DataExchange.Types.EventActionEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.EventActionEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.Action
+import Amazonka.DataExchange.Types.Event
+import qualified Amazonka.Prelude as Prelude
+
+-- | An event action is an object that defines the relationship between a
+-- specific event and an automated action that will be taken on behalf of
+-- the customer.
+--
+-- /See:/ 'newEventActionEntry' smart constructor.
+data EventActionEntry = EventActionEntry'
+  { -- | What occurs after a certain event.
+    action :: Action,
+    -- | The Amazon Resource Name (ARN) for the event action.
+    arn :: Prelude.Text,
+    -- | The date and time that the event action was created, in ISO 8601 format.
+    createdAt :: Data.ISO8601,
+    -- | What occurs to start an action.
+    event :: Event,
+    -- | The unique identifier for the event action.
+    id :: Prelude.Text,
+    -- | The date and time that the event action was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventActionEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'eventActionEntry_action' - What occurs after a certain event.
+--
+-- 'arn', 'eventActionEntry_arn' - The Amazon Resource Name (ARN) for the event action.
+--
+-- 'createdAt', 'eventActionEntry_createdAt' - The date and time that the event action was created, in ISO 8601 format.
+--
+-- 'event', 'eventActionEntry_event' - What occurs to start an action.
+--
+-- 'id', 'eventActionEntry_id' - The unique identifier for the event action.
+--
+-- 'updatedAt', 'eventActionEntry_updatedAt' - The date and time that the event action was last updated, in ISO 8601
+-- format.
+newEventActionEntry ::
+  -- | 'action'
+  Action ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'event'
+  Event ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  EventActionEntry
+newEventActionEntry
+  pAction_
+  pArn_
+  pCreatedAt_
+  pEvent_
+  pId_
+  pUpdatedAt_ =
+    EventActionEntry'
+      { action = pAction_,
+        arn = pArn_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        event = pEvent_,
+        id = pId_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | What occurs after a certain event.
+eventActionEntry_action :: Lens.Lens' EventActionEntry Action
+eventActionEntry_action = Lens.lens (\EventActionEntry' {action} -> action) (\s@EventActionEntry' {} a -> s {action = a} :: EventActionEntry)
+
+-- | The Amazon Resource Name (ARN) for the event action.
+eventActionEntry_arn :: Lens.Lens' EventActionEntry Prelude.Text
+eventActionEntry_arn = Lens.lens (\EventActionEntry' {arn} -> arn) (\s@EventActionEntry' {} a -> s {arn = a} :: EventActionEntry)
+
+-- | The date and time that the event action was created, in ISO 8601 format.
+eventActionEntry_createdAt :: Lens.Lens' EventActionEntry Prelude.UTCTime
+eventActionEntry_createdAt = Lens.lens (\EventActionEntry' {createdAt} -> createdAt) (\s@EventActionEntry' {} a -> s {createdAt = a} :: EventActionEntry) Prelude.. Data._Time
+
+-- | What occurs to start an action.
+eventActionEntry_event :: Lens.Lens' EventActionEntry Event
+eventActionEntry_event = Lens.lens (\EventActionEntry' {event} -> event) (\s@EventActionEntry' {} a -> s {event = a} :: EventActionEntry)
+
+-- | The unique identifier for the event action.
+eventActionEntry_id :: Lens.Lens' EventActionEntry Prelude.Text
+eventActionEntry_id = Lens.lens (\EventActionEntry' {id} -> id) (\s@EventActionEntry' {} a -> s {id = a} :: EventActionEntry)
+
+-- | The date and time that the event action was last updated, in ISO 8601
+-- format.
+eventActionEntry_updatedAt :: Lens.Lens' EventActionEntry Prelude.UTCTime
+eventActionEntry_updatedAt = Lens.lens (\EventActionEntry' {updatedAt} -> updatedAt) (\s@EventActionEntry' {} a -> s {updatedAt = a} :: EventActionEntry) Prelude.. Data._Time
+
+instance Data.FromJSON EventActionEntry where
+  parseJSON =
+    Data.withObject
+      "EventActionEntry"
+      ( \x ->
+          EventActionEntry'
+            Prelude.<$> (x Data..: "Action")
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "Event")
+            Prelude.<*> (x Data..: "Id")
+            Prelude.<*> (x Data..: "UpdatedAt")
+      )
+
+instance Prelude.Hashable EventActionEntry where
+  hashWithSalt _salt EventActionEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` event
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData EventActionEntry where
+  rnf EventActionEntry' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf event
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/DataExchange/Types/ExportAssetToSignedUrlRequestDetails.hs b/gen/Amazonka/DataExchange/Types/ExportAssetToSignedUrlRequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ExportAssetToSignedUrlRequestDetails.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ExportAssetToSignedUrlRequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ExportAssetToSignedUrlRequestDetails 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
+
+-- | Details of the operation to be performed by the job.
+--
+-- /See:/ 'newExportAssetToSignedUrlRequestDetails' smart constructor.
+data ExportAssetToSignedUrlRequestDetails = ExportAssetToSignedUrlRequestDetails'
+  { -- | The unique identifier for the asset that is exported to a signed URL.
+    assetId :: Prelude.Text,
+    -- | The unique identifier for the data set associated with this export job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this export
+    -- request.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportAssetToSignedUrlRequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetId', 'exportAssetToSignedUrlRequestDetails_assetId' - The unique identifier for the asset that is exported to a signed URL.
+--
+-- 'dataSetId', 'exportAssetToSignedUrlRequestDetails_dataSetId' - The unique identifier for the data set associated with this export job.
+--
+-- 'revisionId', 'exportAssetToSignedUrlRequestDetails_revisionId' - The unique identifier for the revision associated with this export
+-- request.
+newExportAssetToSignedUrlRequestDetails ::
+  -- | 'assetId'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ExportAssetToSignedUrlRequestDetails
+newExportAssetToSignedUrlRequestDetails
+  pAssetId_
+  pDataSetId_
+  pRevisionId_ =
+    ExportAssetToSignedUrlRequestDetails'
+      { assetId =
+          pAssetId_,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | The unique identifier for the asset that is exported to a signed URL.
+exportAssetToSignedUrlRequestDetails_assetId :: Lens.Lens' ExportAssetToSignedUrlRequestDetails Prelude.Text
+exportAssetToSignedUrlRequestDetails_assetId = Lens.lens (\ExportAssetToSignedUrlRequestDetails' {assetId} -> assetId) (\s@ExportAssetToSignedUrlRequestDetails' {} a -> s {assetId = a} :: ExportAssetToSignedUrlRequestDetails)
+
+-- | The unique identifier for the data set associated with this export job.
+exportAssetToSignedUrlRequestDetails_dataSetId :: Lens.Lens' ExportAssetToSignedUrlRequestDetails Prelude.Text
+exportAssetToSignedUrlRequestDetails_dataSetId = Lens.lens (\ExportAssetToSignedUrlRequestDetails' {dataSetId} -> dataSetId) (\s@ExportAssetToSignedUrlRequestDetails' {} a -> s {dataSetId = a} :: ExportAssetToSignedUrlRequestDetails)
+
+-- | The unique identifier for the revision associated with this export
+-- request.
+exportAssetToSignedUrlRequestDetails_revisionId :: Lens.Lens' ExportAssetToSignedUrlRequestDetails Prelude.Text
+exportAssetToSignedUrlRequestDetails_revisionId = Lens.lens (\ExportAssetToSignedUrlRequestDetails' {revisionId} -> revisionId) (\s@ExportAssetToSignedUrlRequestDetails' {} a -> s {revisionId = a} :: ExportAssetToSignedUrlRequestDetails)
+
+instance
+  Prelude.Hashable
+    ExportAssetToSignedUrlRequestDetails
+  where
+  hashWithSalt
+    _salt
+    ExportAssetToSignedUrlRequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetId
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ExportAssetToSignedUrlRequestDetails
+  where
+  rnf ExportAssetToSignedUrlRequestDetails' {..} =
+    Prelude.rnf assetId
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance
+  Data.ToJSON
+    ExportAssetToSignedUrlRequestDetails
+  where
+  toJSON ExportAssetToSignedUrlRequestDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("AssetId" Data..= assetId),
+            Prelude.Just ("DataSetId" Data..= dataSetId),
+            Prelude.Just ("RevisionId" Data..= revisionId)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/ExportAssetToSignedUrlResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ExportAssetToSignedUrlResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ExportAssetToSignedUrlResponseDetails.hs
@@ -0,0 +1,144 @@
+{-# 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.DataExchange.Types.ExportAssetToSignedUrlResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ExportAssetToSignedUrlResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details of the export to signed URL response.
+--
+-- /See:/ 'newExportAssetToSignedUrlResponseDetails' smart constructor.
+data ExportAssetToSignedUrlResponseDetails = ExportAssetToSignedUrlResponseDetails'
+  { -- | The signed URL for the export request.
+    signedUrl :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the signed URL expires, in ISO 8601 format.
+    signedUrlExpiresAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the asset associated with this export job.
+    assetId :: Prelude.Text,
+    -- | The unique identifier for the data set associated with this export job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this export
+    -- response.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportAssetToSignedUrlResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'signedUrl', 'exportAssetToSignedUrlResponseDetails_signedUrl' - The signed URL for the export request.
+--
+-- 'signedUrlExpiresAt', 'exportAssetToSignedUrlResponseDetails_signedUrlExpiresAt' - The date and time that the signed URL expires, in ISO 8601 format.
+--
+-- 'assetId', 'exportAssetToSignedUrlResponseDetails_assetId' - The unique identifier for the asset associated with this export job.
+--
+-- 'dataSetId', 'exportAssetToSignedUrlResponseDetails_dataSetId' - The unique identifier for the data set associated with this export job.
+--
+-- 'revisionId', 'exportAssetToSignedUrlResponseDetails_revisionId' - The unique identifier for the revision associated with this export
+-- response.
+newExportAssetToSignedUrlResponseDetails ::
+  -- | 'assetId'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ExportAssetToSignedUrlResponseDetails
+newExportAssetToSignedUrlResponseDetails
+  pAssetId_
+  pDataSetId_
+  pRevisionId_ =
+    ExportAssetToSignedUrlResponseDetails'
+      { signedUrl =
+          Prelude.Nothing,
+        signedUrlExpiresAt = Prelude.Nothing,
+        assetId = pAssetId_,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | The signed URL for the export request.
+exportAssetToSignedUrlResponseDetails_signedUrl :: Lens.Lens' ExportAssetToSignedUrlResponseDetails (Prelude.Maybe Prelude.Text)
+exportAssetToSignedUrlResponseDetails_signedUrl = Lens.lens (\ExportAssetToSignedUrlResponseDetails' {signedUrl} -> signedUrl) (\s@ExportAssetToSignedUrlResponseDetails' {} a -> s {signedUrl = a} :: ExportAssetToSignedUrlResponseDetails)
+
+-- | The date and time that the signed URL expires, in ISO 8601 format.
+exportAssetToSignedUrlResponseDetails_signedUrlExpiresAt :: Lens.Lens' ExportAssetToSignedUrlResponseDetails (Prelude.Maybe Prelude.UTCTime)
+exportAssetToSignedUrlResponseDetails_signedUrlExpiresAt = Lens.lens (\ExportAssetToSignedUrlResponseDetails' {signedUrlExpiresAt} -> signedUrlExpiresAt) (\s@ExportAssetToSignedUrlResponseDetails' {} a -> s {signedUrlExpiresAt = a} :: ExportAssetToSignedUrlResponseDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the asset associated with this export job.
+exportAssetToSignedUrlResponseDetails_assetId :: Lens.Lens' ExportAssetToSignedUrlResponseDetails Prelude.Text
+exportAssetToSignedUrlResponseDetails_assetId = Lens.lens (\ExportAssetToSignedUrlResponseDetails' {assetId} -> assetId) (\s@ExportAssetToSignedUrlResponseDetails' {} a -> s {assetId = a} :: ExportAssetToSignedUrlResponseDetails)
+
+-- | The unique identifier for the data set associated with this export job.
+exportAssetToSignedUrlResponseDetails_dataSetId :: Lens.Lens' ExportAssetToSignedUrlResponseDetails Prelude.Text
+exportAssetToSignedUrlResponseDetails_dataSetId = Lens.lens (\ExportAssetToSignedUrlResponseDetails' {dataSetId} -> dataSetId) (\s@ExportAssetToSignedUrlResponseDetails' {} a -> s {dataSetId = a} :: ExportAssetToSignedUrlResponseDetails)
+
+-- | The unique identifier for the revision associated with this export
+-- response.
+exportAssetToSignedUrlResponseDetails_revisionId :: Lens.Lens' ExportAssetToSignedUrlResponseDetails Prelude.Text
+exportAssetToSignedUrlResponseDetails_revisionId = Lens.lens (\ExportAssetToSignedUrlResponseDetails' {revisionId} -> revisionId) (\s@ExportAssetToSignedUrlResponseDetails' {} a -> s {revisionId = a} :: ExportAssetToSignedUrlResponseDetails)
+
+instance
+  Data.FromJSON
+    ExportAssetToSignedUrlResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ExportAssetToSignedUrlResponseDetails"
+      ( \x ->
+          ExportAssetToSignedUrlResponseDetails'
+            Prelude.<$> (x Data..:? "SignedUrl")
+            Prelude.<*> (x Data..:? "SignedUrlExpiresAt")
+            Prelude.<*> (x Data..: "AssetId")
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "RevisionId")
+      )
+
+instance
+  Prelude.Hashable
+    ExportAssetToSignedUrlResponseDetails
+  where
+  hashWithSalt
+    _salt
+    ExportAssetToSignedUrlResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` signedUrl
+        `Prelude.hashWithSalt` signedUrlExpiresAt
+        `Prelude.hashWithSalt` assetId
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ExportAssetToSignedUrlResponseDetails
+  where
+  rnf ExportAssetToSignedUrlResponseDetails' {..} =
+    Prelude.rnf signedUrl
+      `Prelude.seq` Prelude.rnf signedUrlExpiresAt
+      `Prelude.seq` Prelude.rnf assetId
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
diff --git a/gen/Amazonka/DataExchange/Types/ExportAssetsToS3RequestDetails.hs b/gen/Amazonka/DataExchange/Types/ExportAssetsToS3RequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ExportAssetsToS3RequestDetails.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ExportAssetsToS3RequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ExportAssetsToS3RequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AssetDestinationEntry
+import Amazonka.DataExchange.Types.ExportServerSideEncryption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of the operation to be performed by the job.
+--
+-- /See:/ 'newExportAssetsToS3RequestDetails' smart constructor.
+data ExportAssetsToS3RequestDetails = ExportAssetsToS3RequestDetails'
+  { -- | Encryption configuration for the export job.
+    encryption :: Prelude.Maybe ExportServerSideEncryption,
+    -- | The destination for the asset.
+    assetDestinations :: [AssetDestinationEntry],
+    -- | The unique identifier for the data set associated with this export job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this export
+    -- request.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportAssetsToS3RequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryption', 'exportAssetsToS3RequestDetails_encryption' - Encryption configuration for the export job.
+--
+-- 'assetDestinations', 'exportAssetsToS3RequestDetails_assetDestinations' - The destination for the asset.
+--
+-- 'dataSetId', 'exportAssetsToS3RequestDetails_dataSetId' - The unique identifier for the data set associated with this export job.
+--
+-- 'revisionId', 'exportAssetsToS3RequestDetails_revisionId' - The unique identifier for the revision associated with this export
+-- request.
+newExportAssetsToS3RequestDetails ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ExportAssetsToS3RequestDetails
+newExportAssetsToS3RequestDetails
+  pDataSetId_
+  pRevisionId_ =
+    ExportAssetsToS3RequestDetails'
+      { encryption =
+          Prelude.Nothing,
+        assetDestinations = Prelude.mempty,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | Encryption configuration for the export job.
+exportAssetsToS3RequestDetails_encryption :: Lens.Lens' ExportAssetsToS3RequestDetails (Prelude.Maybe ExportServerSideEncryption)
+exportAssetsToS3RequestDetails_encryption = Lens.lens (\ExportAssetsToS3RequestDetails' {encryption} -> encryption) (\s@ExportAssetsToS3RequestDetails' {} a -> s {encryption = a} :: ExportAssetsToS3RequestDetails)
+
+-- | The destination for the asset.
+exportAssetsToS3RequestDetails_assetDestinations :: Lens.Lens' ExportAssetsToS3RequestDetails [AssetDestinationEntry]
+exportAssetsToS3RequestDetails_assetDestinations = Lens.lens (\ExportAssetsToS3RequestDetails' {assetDestinations} -> assetDestinations) (\s@ExportAssetsToS3RequestDetails' {} a -> s {assetDestinations = a} :: ExportAssetsToS3RequestDetails) Prelude.. Lens.coerced
+
+-- | The unique identifier for the data set associated with this export job.
+exportAssetsToS3RequestDetails_dataSetId :: Lens.Lens' ExportAssetsToS3RequestDetails Prelude.Text
+exportAssetsToS3RequestDetails_dataSetId = Lens.lens (\ExportAssetsToS3RequestDetails' {dataSetId} -> dataSetId) (\s@ExportAssetsToS3RequestDetails' {} a -> s {dataSetId = a} :: ExportAssetsToS3RequestDetails)
+
+-- | The unique identifier for the revision associated with this export
+-- request.
+exportAssetsToS3RequestDetails_revisionId :: Lens.Lens' ExportAssetsToS3RequestDetails Prelude.Text
+exportAssetsToS3RequestDetails_revisionId = Lens.lens (\ExportAssetsToS3RequestDetails' {revisionId} -> revisionId) (\s@ExportAssetsToS3RequestDetails' {} a -> s {revisionId = a} :: ExportAssetsToS3RequestDetails)
+
+instance
+  Prelude.Hashable
+    ExportAssetsToS3RequestDetails
+  where
+  hashWithSalt
+    _salt
+    ExportAssetsToS3RequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` encryption
+        `Prelude.hashWithSalt` assetDestinations
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ExportAssetsToS3RequestDetails
+  where
+  rnf ExportAssetsToS3RequestDetails' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf assetDestinations
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToJSON ExportAssetsToS3RequestDetails where
+  toJSON ExportAssetsToS3RequestDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Encryption" Data..=) Prelude.<$> encryption,
+            Prelude.Just
+              ("AssetDestinations" Data..= assetDestinations),
+            Prelude.Just ("DataSetId" Data..= dataSetId),
+            Prelude.Just ("RevisionId" Data..= revisionId)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/ExportAssetsToS3ResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ExportAssetsToS3ResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ExportAssetsToS3ResponseDetails.hs
@@ -0,0 +1,134 @@
+{-# 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.DataExchange.Types.ExportAssetsToS3ResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ExportAssetsToS3ResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AssetDestinationEntry
+import Amazonka.DataExchange.Types.ExportServerSideEncryption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the export to Amazon S3 response.
+--
+-- /See:/ 'newExportAssetsToS3ResponseDetails' smart constructor.
+data ExportAssetsToS3ResponseDetails = ExportAssetsToS3ResponseDetails'
+  { -- | Encryption configuration of the export job.
+    encryption :: Prelude.Maybe ExportServerSideEncryption,
+    -- | The destination in Amazon S3 where the asset is exported.
+    assetDestinations :: [AssetDestinationEntry],
+    -- | The unique identifier for the data set associated with this export job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this export
+    -- response.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportAssetsToS3ResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryption', 'exportAssetsToS3ResponseDetails_encryption' - Encryption configuration of the export job.
+--
+-- 'assetDestinations', 'exportAssetsToS3ResponseDetails_assetDestinations' - The destination in Amazon S3 where the asset is exported.
+--
+-- 'dataSetId', 'exportAssetsToS3ResponseDetails_dataSetId' - The unique identifier for the data set associated with this export job.
+--
+-- 'revisionId', 'exportAssetsToS3ResponseDetails_revisionId' - The unique identifier for the revision associated with this export
+-- response.
+newExportAssetsToS3ResponseDetails ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ExportAssetsToS3ResponseDetails
+newExportAssetsToS3ResponseDetails
+  pDataSetId_
+  pRevisionId_ =
+    ExportAssetsToS3ResponseDetails'
+      { encryption =
+          Prelude.Nothing,
+        assetDestinations = Prelude.mempty,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | Encryption configuration of the export job.
+exportAssetsToS3ResponseDetails_encryption :: Lens.Lens' ExportAssetsToS3ResponseDetails (Prelude.Maybe ExportServerSideEncryption)
+exportAssetsToS3ResponseDetails_encryption = Lens.lens (\ExportAssetsToS3ResponseDetails' {encryption} -> encryption) (\s@ExportAssetsToS3ResponseDetails' {} a -> s {encryption = a} :: ExportAssetsToS3ResponseDetails)
+
+-- | The destination in Amazon S3 where the asset is exported.
+exportAssetsToS3ResponseDetails_assetDestinations :: Lens.Lens' ExportAssetsToS3ResponseDetails [AssetDestinationEntry]
+exportAssetsToS3ResponseDetails_assetDestinations = Lens.lens (\ExportAssetsToS3ResponseDetails' {assetDestinations} -> assetDestinations) (\s@ExportAssetsToS3ResponseDetails' {} a -> s {assetDestinations = a} :: ExportAssetsToS3ResponseDetails) Prelude.. Lens.coerced
+
+-- | The unique identifier for the data set associated with this export job.
+exportAssetsToS3ResponseDetails_dataSetId :: Lens.Lens' ExportAssetsToS3ResponseDetails Prelude.Text
+exportAssetsToS3ResponseDetails_dataSetId = Lens.lens (\ExportAssetsToS3ResponseDetails' {dataSetId} -> dataSetId) (\s@ExportAssetsToS3ResponseDetails' {} a -> s {dataSetId = a} :: ExportAssetsToS3ResponseDetails)
+
+-- | The unique identifier for the revision associated with this export
+-- response.
+exportAssetsToS3ResponseDetails_revisionId :: Lens.Lens' ExportAssetsToS3ResponseDetails Prelude.Text
+exportAssetsToS3ResponseDetails_revisionId = Lens.lens (\ExportAssetsToS3ResponseDetails' {revisionId} -> revisionId) (\s@ExportAssetsToS3ResponseDetails' {} a -> s {revisionId = a} :: ExportAssetsToS3ResponseDetails)
+
+instance
+  Data.FromJSON
+    ExportAssetsToS3ResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ExportAssetsToS3ResponseDetails"
+      ( \x ->
+          ExportAssetsToS3ResponseDetails'
+            Prelude.<$> (x Data..:? "Encryption")
+            Prelude.<*> ( x
+                            Data..:? "AssetDestinations"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "RevisionId")
+      )
+
+instance
+  Prelude.Hashable
+    ExportAssetsToS3ResponseDetails
+  where
+  hashWithSalt
+    _salt
+    ExportAssetsToS3ResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` encryption
+        `Prelude.hashWithSalt` assetDestinations
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ExportAssetsToS3ResponseDetails
+  where
+  rnf ExportAssetsToS3ResponseDetails' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf assetDestinations
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
diff --git a/gen/Amazonka/DataExchange/Types/ExportRevisionsToS3RequestDetails.hs b/gen/Amazonka/DataExchange/Types/ExportRevisionsToS3RequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ExportRevisionsToS3RequestDetails.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ExportRevisionsToS3RequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ExportRevisionsToS3RequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.ExportServerSideEncryption
+import Amazonka.DataExchange.Types.RevisionDestinationEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of the operation to be performed by the job.
+--
+-- /See:/ 'newExportRevisionsToS3RequestDetails' smart constructor.
+data ExportRevisionsToS3RequestDetails = ExportRevisionsToS3RequestDetails'
+  { -- | Encryption configuration for the export job.
+    encryption :: Prelude.Maybe ExportServerSideEncryption,
+    -- | The unique identifier for the data set associated with this export job.
+    dataSetId :: Prelude.Text,
+    -- | The destination for the revision.
+    revisionDestinations :: [RevisionDestinationEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportRevisionsToS3RequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryption', 'exportRevisionsToS3RequestDetails_encryption' - Encryption configuration for the export job.
+--
+-- 'dataSetId', 'exportRevisionsToS3RequestDetails_dataSetId' - The unique identifier for the data set associated with this export job.
+--
+-- 'revisionDestinations', 'exportRevisionsToS3RequestDetails_revisionDestinations' - The destination for the revision.
+newExportRevisionsToS3RequestDetails ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  ExportRevisionsToS3RequestDetails
+newExportRevisionsToS3RequestDetails pDataSetId_ =
+  ExportRevisionsToS3RequestDetails'
+    { encryption =
+        Prelude.Nothing,
+      dataSetId = pDataSetId_,
+      revisionDestinations = Prelude.mempty
+    }
+
+-- | Encryption configuration for the export job.
+exportRevisionsToS3RequestDetails_encryption :: Lens.Lens' ExportRevisionsToS3RequestDetails (Prelude.Maybe ExportServerSideEncryption)
+exportRevisionsToS3RequestDetails_encryption = Lens.lens (\ExportRevisionsToS3RequestDetails' {encryption} -> encryption) (\s@ExportRevisionsToS3RequestDetails' {} a -> s {encryption = a} :: ExportRevisionsToS3RequestDetails)
+
+-- | The unique identifier for the data set associated with this export job.
+exportRevisionsToS3RequestDetails_dataSetId :: Lens.Lens' ExportRevisionsToS3RequestDetails Prelude.Text
+exportRevisionsToS3RequestDetails_dataSetId = Lens.lens (\ExportRevisionsToS3RequestDetails' {dataSetId} -> dataSetId) (\s@ExportRevisionsToS3RequestDetails' {} a -> s {dataSetId = a} :: ExportRevisionsToS3RequestDetails)
+
+-- | The destination for the revision.
+exportRevisionsToS3RequestDetails_revisionDestinations :: Lens.Lens' ExportRevisionsToS3RequestDetails [RevisionDestinationEntry]
+exportRevisionsToS3RequestDetails_revisionDestinations = Lens.lens (\ExportRevisionsToS3RequestDetails' {revisionDestinations} -> revisionDestinations) (\s@ExportRevisionsToS3RequestDetails' {} a -> s {revisionDestinations = a} :: ExportRevisionsToS3RequestDetails) Prelude.. Lens.coerced
+
+instance
+  Prelude.Hashable
+    ExportRevisionsToS3RequestDetails
+  where
+  hashWithSalt
+    _salt
+    ExportRevisionsToS3RequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` encryption
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionDestinations
+
+instance
+  Prelude.NFData
+    ExportRevisionsToS3RequestDetails
+  where
+  rnf ExportRevisionsToS3RequestDetails' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionDestinations
+
+instance
+  Data.ToJSON
+    ExportRevisionsToS3RequestDetails
+  where
+  toJSON ExportRevisionsToS3RequestDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Encryption" Data..=) Prelude.<$> encryption,
+            Prelude.Just ("DataSetId" Data..= dataSetId),
+            Prelude.Just
+              ( "RevisionDestinations"
+                  Data..= revisionDestinations
+              )
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/ExportRevisionsToS3ResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ExportRevisionsToS3ResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ExportRevisionsToS3ResponseDetails.hs
@@ -0,0 +1,127 @@
+{-# 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.DataExchange.Types.ExportRevisionsToS3ResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ExportRevisionsToS3ResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.ExportServerSideEncryption
+import Amazonka.DataExchange.Types.RevisionDestinationEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the export revisions to Amazon S3 response.
+--
+-- /See:/ 'newExportRevisionsToS3ResponseDetails' smart constructor.
+data ExportRevisionsToS3ResponseDetails = ExportRevisionsToS3ResponseDetails'
+  { -- | Encryption configuration of the export job.
+    encryption :: Prelude.Maybe ExportServerSideEncryption,
+    -- | The Amazon Resource Name (ARN) of the event action.
+    eventActionArn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the data set associated with this export job.
+    dataSetId :: Prelude.Text,
+    -- | The destination in Amazon S3 where the revision is exported.
+    revisionDestinations :: [RevisionDestinationEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportRevisionsToS3ResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryption', 'exportRevisionsToS3ResponseDetails_encryption' - Encryption configuration of the export job.
+--
+-- 'eventActionArn', 'exportRevisionsToS3ResponseDetails_eventActionArn' - The Amazon Resource Name (ARN) of the event action.
+--
+-- 'dataSetId', 'exportRevisionsToS3ResponseDetails_dataSetId' - The unique identifier for the data set associated with this export job.
+--
+-- 'revisionDestinations', 'exportRevisionsToS3ResponseDetails_revisionDestinations' - The destination in Amazon S3 where the revision is exported.
+newExportRevisionsToS3ResponseDetails ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  ExportRevisionsToS3ResponseDetails
+newExportRevisionsToS3ResponseDetails pDataSetId_ =
+  ExportRevisionsToS3ResponseDetails'
+    { encryption =
+        Prelude.Nothing,
+      eventActionArn = Prelude.Nothing,
+      dataSetId = pDataSetId_,
+      revisionDestinations = Prelude.mempty
+    }
+
+-- | Encryption configuration of the export job.
+exportRevisionsToS3ResponseDetails_encryption :: Lens.Lens' ExportRevisionsToS3ResponseDetails (Prelude.Maybe ExportServerSideEncryption)
+exportRevisionsToS3ResponseDetails_encryption = Lens.lens (\ExportRevisionsToS3ResponseDetails' {encryption} -> encryption) (\s@ExportRevisionsToS3ResponseDetails' {} a -> s {encryption = a} :: ExportRevisionsToS3ResponseDetails)
+
+-- | The Amazon Resource Name (ARN) of the event action.
+exportRevisionsToS3ResponseDetails_eventActionArn :: Lens.Lens' ExportRevisionsToS3ResponseDetails (Prelude.Maybe Prelude.Text)
+exportRevisionsToS3ResponseDetails_eventActionArn = Lens.lens (\ExportRevisionsToS3ResponseDetails' {eventActionArn} -> eventActionArn) (\s@ExportRevisionsToS3ResponseDetails' {} a -> s {eventActionArn = a} :: ExportRevisionsToS3ResponseDetails)
+
+-- | The unique identifier for the data set associated with this export job.
+exportRevisionsToS3ResponseDetails_dataSetId :: Lens.Lens' ExportRevisionsToS3ResponseDetails Prelude.Text
+exportRevisionsToS3ResponseDetails_dataSetId = Lens.lens (\ExportRevisionsToS3ResponseDetails' {dataSetId} -> dataSetId) (\s@ExportRevisionsToS3ResponseDetails' {} a -> s {dataSetId = a} :: ExportRevisionsToS3ResponseDetails)
+
+-- | The destination in Amazon S3 where the revision is exported.
+exportRevisionsToS3ResponseDetails_revisionDestinations :: Lens.Lens' ExportRevisionsToS3ResponseDetails [RevisionDestinationEntry]
+exportRevisionsToS3ResponseDetails_revisionDestinations = Lens.lens (\ExportRevisionsToS3ResponseDetails' {revisionDestinations} -> revisionDestinations) (\s@ExportRevisionsToS3ResponseDetails' {} a -> s {revisionDestinations = a} :: ExportRevisionsToS3ResponseDetails) Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    ExportRevisionsToS3ResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ExportRevisionsToS3ResponseDetails"
+      ( \x ->
+          ExportRevisionsToS3ResponseDetails'
+            Prelude.<$> (x Data..:? "Encryption")
+            Prelude.<*> (x Data..:? "EventActionArn")
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> ( x
+                            Data..:? "RevisionDestinations"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ExportRevisionsToS3ResponseDetails
+  where
+  hashWithSalt
+    _salt
+    ExportRevisionsToS3ResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` encryption
+        `Prelude.hashWithSalt` eventActionArn
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionDestinations
+
+instance
+  Prelude.NFData
+    ExportRevisionsToS3ResponseDetails
+  where
+  rnf ExportRevisionsToS3ResponseDetails' {..} =
+    Prelude.rnf encryption
+      `Prelude.seq` Prelude.rnf eventActionArn
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionDestinations
diff --git a/gen/Amazonka/DataExchange/Types/ExportServerSideEncryption.hs b/gen/Amazonka/DataExchange/Types/ExportServerSideEncryption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ExportServerSideEncryption.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ExportServerSideEncryption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ExportServerSideEncryption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.ServerSideEncryptionTypes
+import qualified Amazonka.Prelude as Prelude
+
+-- | Encryption configuration of the export job. Includes the encryption type
+-- in addition to the AWS KMS key. The KMS key is only necessary if you
+-- chose the KMS encryption type.
+--
+-- /See:/ 'newExportServerSideEncryption' smart constructor.
+data ExportServerSideEncryption = ExportServerSideEncryption'
+  { -- | The Amazon Resource Name (ARN) of the AWS KMS key you want to use to
+    -- encrypt the Amazon S3 objects. This parameter is required if you choose
+    -- aws:kms as an encryption type.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The type of server side encryption used for encrypting the objects in
+    -- Amazon S3.
+    type' :: ServerSideEncryptionTypes
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportServerSideEncryption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyArn', 'exportServerSideEncryption_kmsKeyArn' - The Amazon Resource Name (ARN) of the AWS KMS key you want to use to
+-- encrypt the Amazon S3 objects. This parameter is required if you choose
+-- aws:kms as an encryption type.
+--
+-- 'type'', 'exportServerSideEncryption_type' - The type of server side encryption used for encrypting the objects in
+-- Amazon S3.
+newExportServerSideEncryption ::
+  -- | 'type''
+  ServerSideEncryptionTypes ->
+  ExportServerSideEncryption
+newExportServerSideEncryption pType_ =
+  ExportServerSideEncryption'
+    { kmsKeyArn =
+        Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | The Amazon Resource Name (ARN) of the AWS KMS key you want to use to
+-- encrypt the Amazon S3 objects. This parameter is required if you choose
+-- aws:kms as an encryption type.
+exportServerSideEncryption_kmsKeyArn :: Lens.Lens' ExportServerSideEncryption (Prelude.Maybe Prelude.Text)
+exportServerSideEncryption_kmsKeyArn = Lens.lens (\ExportServerSideEncryption' {kmsKeyArn} -> kmsKeyArn) (\s@ExportServerSideEncryption' {} a -> s {kmsKeyArn = a} :: ExportServerSideEncryption)
+
+-- | The type of server side encryption used for encrypting the objects in
+-- Amazon S3.
+exportServerSideEncryption_type :: Lens.Lens' ExportServerSideEncryption ServerSideEncryptionTypes
+exportServerSideEncryption_type = Lens.lens (\ExportServerSideEncryption' {type'} -> type') (\s@ExportServerSideEncryption' {} a -> s {type' = a} :: ExportServerSideEncryption)
+
+instance Data.FromJSON ExportServerSideEncryption where
+  parseJSON =
+    Data.withObject
+      "ExportServerSideEncryption"
+      ( \x ->
+          ExportServerSideEncryption'
+            Prelude.<$> (x Data..:? "KmsKeyArn")
+            Prelude.<*> (x Data..: "Type")
+      )
+
+instance Prelude.Hashable ExportServerSideEncryption where
+  hashWithSalt _salt ExportServerSideEncryption' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ExportServerSideEncryption where
+  rnf ExportServerSideEncryption' {..} =
+    Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON ExportServerSideEncryption where
+  toJSON ExportServerSideEncryption' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("KmsKeyArn" Data..=) Prelude.<$> kmsKeyArn,
+            Prelude.Just ("Type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetFromApiGatewayApiRequestDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetFromApiGatewayApiRequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetFromApiGatewayApiRequestDetails.hs
@@ -0,0 +1,210 @@
+{-# 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.DataExchange.Types.ImportAssetFromApiGatewayApiRequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiRequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.ProtocolType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The request details.
+--
+-- /See:/ 'newImportAssetFromApiGatewayApiRequestDetails' smart constructor.
+data ImportAssetFromApiGatewayApiRequestDetails = ImportAssetFromApiGatewayApiRequestDetails'
+  { -- | The API description. Markdown supported.
+    apiDescription :: Prelude.Maybe Prelude.Text,
+    -- | The API Gateway API key.
+    apiKey :: Prelude.Maybe Prelude.Text,
+    -- | The API Gateway API ID.
+    apiId :: Prelude.Text,
+    -- | The API name.
+    apiName :: Prelude.Text,
+    -- | The Base64-encoded MD5 hash of the OpenAPI 3.0 JSON API specification
+    -- file. It is used to ensure the integrity of the file.
+    apiSpecificationMd5Hash :: Prelude.Text,
+    -- | The data set ID.
+    dataSetId :: Prelude.Text,
+    -- | The protocol type.
+    protocolType :: ProtocolType,
+    -- | The revision ID.
+    revisionId :: Prelude.Text,
+    -- | The API stage.
+    stage :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetFromApiGatewayApiRequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiDescription', 'importAssetFromApiGatewayApiRequestDetails_apiDescription' - The API description. Markdown supported.
+--
+-- 'apiKey', 'importAssetFromApiGatewayApiRequestDetails_apiKey' - The API Gateway API key.
+--
+-- 'apiId', 'importAssetFromApiGatewayApiRequestDetails_apiId' - The API Gateway API ID.
+--
+-- 'apiName', 'importAssetFromApiGatewayApiRequestDetails_apiName' - The API name.
+--
+-- 'apiSpecificationMd5Hash', 'importAssetFromApiGatewayApiRequestDetails_apiSpecificationMd5Hash' - The Base64-encoded MD5 hash of the OpenAPI 3.0 JSON API specification
+-- file. It is used to ensure the integrity of the file.
+--
+-- 'dataSetId', 'importAssetFromApiGatewayApiRequestDetails_dataSetId' - The data set ID.
+--
+-- 'protocolType', 'importAssetFromApiGatewayApiRequestDetails_protocolType' - The protocol type.
+--
+-- 'revisionId', 'importAssetFromApiGatewayApiRequestDetails_revisionId' - The revision ID.
+--
+-- 'stage', 'importAssetFromApiGatewayApiRequestDetails_stage' - The API stage.
+newImportAssetFromApiGatewayApiRequestDetails ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'apiName'
+  Prelude.Text ->
+  -- | 'apiSpecificationMd5Hash'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'protocolType'
+  ProtocolType ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  -- | 'stage'
+  Prelude.Text ->
+  ImportAssetFromApiGatewayApiRequestDetails
+newImportAssetFromApiGatewayApiRequestDetails
+  pApiId_
+  pApiName_
+  pApiSpecificationMd5Hash_
+  pDataSetId_
+  pProtocolType_
+  pRevisionId_
+  pStage_ =
+    ImportAssetFromApiGatewayApiRequestDetails'
+      { apiDescription =
+          Prelude.Nothing,
+        apiKey = Prelude.Nothing,
+        apiId = pApiId_,
+        apiName = pApiName_,
+        apiSpecificationMd5Hash =
+          pApiSpecificationMd5Hash_,
+        dataSetId = pDataSetId_,
+        protocolType = pProtocolType_,
+        revisionId = pRevisionId_,
+        stage = pStage_
+      }
+
+-- | The API description. Markdown supported.
+importAssetFromApiGatewayApiRequestDetails_apiDescription :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails (Prelude.Maybe Prelude.Text)
+importAssetFromApiGatewayApiRequestDetails_apiDescription = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {apiDescription} -> apiDescription) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {apiDescription = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+-- | The API Gateway API key.
+importAssetFromApiGatewayApiRequestDetails_apiKey :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails (Prelude.Maybe Prelude.Text)
+importAssetFromApiGatewayApiRequestDetails_apiKey = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {apiKey} -> apiKey) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {apiKey = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+-- | The API Gateway API ID.
+importAssetFromApiGatewayApiRequestDetails_apiId :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails Prelude.Text
+importAssetFromApiGatewayApiRequestDetails_apiId = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {apiId} -> apiId) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {apiId = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+-- | The API name.
+importAssetFromApiGatewayApiRequestDetails_apiName :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails Prelude.Text
+importAssetFromApiGatewayApiRequestDetails_apiName = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {apiName} -> apiName) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {apiName = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+-- | The Base64-encoded MD5 hash of the OpenAPI 3.0 JSON API specification
+-- file. It is used to ensure the integrity of the file.
+importAssetFromApiGatewayApiRequestDetails_apiSpecificationMd5Hash :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails Prelude.Text
+importAssetFromApiGatewayApiRequestDetails_apiSpecificationMd5Hash = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {apiSpecificationMd5Hash} -> apiSpecificationMd5Hash) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {apiSpecificationMd5Hash = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+-- | The data set ID.
+importAssetFromApiGatewayApiRequestDetails_dataSetId :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails Prelude.Text
+importAssetFromApiGatewayApiRequestDetails_dataSetId = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {dataSetId} -> dataSetId) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {dataSetId = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+-- | The protocol type.
+importAssetFromApiGatewayApiRequestDetails_protocolType :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails ProtocolType
+importAssetFromApiGatewayApiRequestDetails_protocolType = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {protocolType} -> protocolType) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {protocolType = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+-- | The revision ID.
+importAssetFromApiGatewayApiRequestDetails_revisionId :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails Prelude.Text
+importAssetFromApiGatewayApiRequestDetails_revisionId = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {revisionId} -> revisionId) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {revisionId = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+-- | The API stage.
+importAssetFromApiGatewayApiRequestDetails_stage :: Lens.Lens' ImportAssetFromApiGatewayApiRequestDetails Prelude.Text
+importAssetFromApiGatewayApiRequestDetails_stage = Lens.lens (\ImportAssetFromApiGatewayApiRequestDetails' {stage} -> stage) (\s@ImportAssetFromApiGatewayApiRequestDetails' {} a -> s {stage = a} :: ImportAssetFromApiGatewayApiRequestDetails)
+
+instance
+  Prelude.Hashable
+    ImportAssetFromApiGatewayApiRequestDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetFromApiGatewayApiRequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` apiDescription
+        `Prelude.hashWithSalt` apiKey
+        `Prelude.hashWithSalt` apiId
+        `Prelude.hashWithSalt` apiName
+        `Prelude.hashWithSalt` apiSpecificationMd5Hash
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` protocolType
+        `Prelude.hashWithSalt` revisionId
+        `Prelude.hashWithSalt` stage
+
+instance
+  Prelude.NFData
+    ImportAssetFromApiGatewayApiRequestDetails
+  where
+  rnf ImportAssetFromApiGatewayApiRequestDetails' {..} =
+    Prelude.rnf apiDescription
+      `Prelude.seq` Prelude.rnf apiKey
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiName
+      `Prelude.seq` Prelude.rnf apiSpecificationMd5Hash
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf stage
+
+instance
+  Data.ToJSON
+    ImportAssetFromApiGatewayApiRequestDetails
+  where
+  toJSON
+    ImportAssetFromApiGatewayApiRequestDetails' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("ApiDescription" Data..=)
+                Prelude.<$> apiDescription,
+              ("ApiKey" Data..=) Prelude.<$> apiKey,
+              Prelude.Just ("ApiId" Data..= apiId),
+              Prelude.Just ("ApiName" Data..= apiName),
+              Prelude.Just
+                ( "ApiSpecificationMd5Hash"
+                    Data..= apiSpecificationMd5Hash
+                ),
+              Prelude.Just ("DataSetId" Data..= dataSetId),
+              Prelude.Just ("ProtocolType" Data..= protocolType),
+              Prelude.Just ("RevisionId" Data..= revisionId),
+              Prelude.Just ("Stage" Data..= stage)
+            ]
+        )
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetFromApiGatewayApiResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetFromApiGatewayApiResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetFromApiGatewayApiResponseDetails.hs
@@ -0,0 +1,239 @@
+{-# 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.DataExchange.Types.ImportAssetFromApiGatewayApiResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.ProtocolType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The response details.
+--
+-- /See:/ 'newImportAssetFromApiGatewayApiResponseDetails' smart constructor.
+data ImportAssetFromApiGatewayApiResponseDetails = ImportAssetFromApiGatewayApiResponseDetails'
+  { -- | The API description.
+    apiDescription :: Prelude.Maybe Prelude.Text,
+    -- | The API key.
+    apiKey :: Prelude.Maybe Prelude.Text,
+    -- | The API ID.
+    apiId :: Prelude.Text,
+    -- | The API name.
+    apiName :: Prelude.Text,
+    -- | The Base64-encoded Md5 hash for the API asset, used to ensure the
+    -- integrity of the API at that location.
+    apiSpecificationMd5Hash :: Prelude.Text,
+    -- | The upload URL of the API specification.
+    apiSpecificationUploadUrl :: Prelude.Text,
+    -- | The date and time that the upload URL expires, in ISO 8601 format.
+    apiSpecificationUploadUrlExpiresAt :: Data.ISO8601,
+    -- | The data set ID.
+    dataSetId :: Prelude.Text,
+    -- | The protocol type.
+    protocolType :: ProtocolType,
+    -- | The revision ID.
+    revisionId :: Prelude.Text,
+    -- | The API stage.
+    stage :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetFromApiGatewayApiResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apiDescription', 'importAssetFromApiGatewayApiResponseDetails_apiDescription' - The API description.
+--
+-- 'apiKey', 'importAssetFromApiGatewayApiResponseDetails_apiKey' - The API key.
+--
+-- 'apiId', 'importAssetFromApiGatewayApiResponseDetails_apiId' - The API ID.
+--
+-- 'apiName', 'importAssetFromApiGatewayApiResponseDetails_apiName' - The API name.
+--
+-- 'apiSpecificationMd5Hash', 'importAssetFromApiGatewayApiResponseDetails_apiSpecificationMd5Hash' - The Base64-encoded Md5 hash for the API asset, used to ensure the
+-- integrity of the API at that location.
+--
+-- 'apiSpecificationUploadUrl', 'importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrl' - The upload URL of the API specification.
+--
+-- 'apiSpecificationUploadUrlExpiresAt', 'importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrlExpiresAt' - The date and time that the upload URL expires, in ISO 8601 format.
+--
+-- 'dataSetId', 'importAssetFromApiGatewayApiResponseDetails_dataSetId' - The data set ID.
+--
+-- 'protocolType', 'importAssetFromApiGatewayApiResponseDetails_protocolType' - The protocol type.
+--
+-- 'revisionId', 'importAssetFromApiGatewayApiResponseDetails_revisionId' - The revision ID.
+--
+-- 'stage', 'importAssetFromApiGatewayApiResponseDetails_stage' - The API stage.
+newImportAssetFromApiGatewayApiResponseDetails ::
+  -- | 'apiId'
+  Prelude.Text ->
+  -- | 'apiName'
+  Prelude.Text ->
+  -- | 'apiSpecificationMd5Hash'
+  Prelude.Text ->
+  -- | 'apiSpecificationUploadUrl'
+  Prelude.Text ->
+  -- | 'apiSpecificationUploadUrlExpiresAt'
+  Prelude.UTCTime ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'protocolType'
+  ProtocolType ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  -- | 'stage'
+  Prelude.Text ->
+  ImportAssetFromApiGatewayApiResponseDetails
+newImportAssetFromApiGatewayApiResponseDetails
+  pApiId_
+  pApiName_
+  pApiSpecificationMd5Hash_
+  pApiSpecificationUploadUrl_
+  pApiSpecificationUploadUrlExpiresAt_
+  pDataSetId_
+  pProtocolType_
+  pRevisionId_
+  pStage_ =
+    ImportAssetFromApiGatewayApiResponseDetails'
+      { apiDescription =
+          Prelude.Nothing,
+        apiKey = Prelude.Nothing,
+        apiId = pApiId_,
+        apiName = pApiName_,
+        apiSpecificationMd5Hash =
+          pApiSpecificationMd5Hash_,
+        apiSpecificationUploadUrl =
+          pApiSpecificationUploadUrl_,
+        apiSpecificationUploadUrlExpiresAt =
+          Data._Time
+            Lens.# pApiSpecificationUploadUrlExpiresAt_,
+        dataSetId = pDataSetId_,
+        protocolType = pProtocolType_,
+        revisionId = pRevisionId_,
+        stage = pStage_
+      }
+
+-- | The API description.
+importAssetFromApiGatewayApiResponseDetails_apiDescription :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails (Prelude.Maybe Prelude.Text)
+importAssetFromApiGatewayApiResponseDetails_apiDescription = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {apiDescription} -> apiDescription) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {apiDescription = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The API key.
+importAssetFromApiGatewayApiResponseDetails_apiKey :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails (Prelude.Maybe Prelude.Text)
+importAssetFromApiGatewayApiResponseDetails_apiKey = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {apiKey} -> apiKey) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {apiKey = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The API ID.
+importAssetFromApiGatewayApiResponseDetails_apiId :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails Prelude.Text
+importAssetFromApiGatewayApiResponseDetails_apiId = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {apiId} -> apiId) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {apiId = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The API name.
+importAssetFromApiGatewayApiResponseDetails_apiName :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails Prelude.Text
+importAssetFromApiGatewayApiResponseDetails_apiName = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {apiName} -> apiName) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {apiName = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The Base64-encoded Md5 hash for the API asset, used to ensure the
+-- integrity of the API at that location.
+importAssetFromApiGatewayApiResponseDetails_apiSpecificationMd5Hash :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails Prelude.Text
+importAssetFromApiGatewayApiResponseDetails_apiSpecificationMd5Hash = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {apiSpecificationMd5Hash} -> apiSpecificationMd5Hash) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {apiSpecificationMd5Hash = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The upload URL of the API specification.
+importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrl :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails Prelude.Text
+importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrl = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {apiSpecificationUploadUrl} -> apiSpecificationUploadUrl) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {apiSpecificationUploadUrl = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The date and time that the upload URL expires, in ISO 8601 format.
+importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrlExpiresAt :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails Prelude.UTCTime
+importAssetFromApiGatewayApiResponseDetails_apiSpecificationUploadUrlExpiresAt = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {apiSpecificationUploadUrlExpiresAt} -> apiSpecificationUploadUrlExpiresAt) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {apiSpecificationUploadUrlExpiresAt = a} :: ImportAssetFromApiGatewayApiResponseDetails) Prelude.. Data._Time
+
+-- | The data set ID.
+importAssetFromApiGatewayApiResponseDetails_dataSetId :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails Prelude.Text
+importAssetFromApiGatewayApiResponseDetails_dataSetId = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {dataSetId} -> dataSetId) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {dataSetId = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The protocol type.
+importAssetFromApiGatewayApiResponseDetails_protocolType :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails ProtocolType
+importAssetFromApiGatewayApiResponseDetails_protocolType = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {protocolType} -> protocolType) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {protocolType = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The revision ID.
+importAssetFromApiGatewayApiResponseDetails_revisionId :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails Prelude.Text
+importAssetFromApiGatewayApiResponseDetails_revisionId = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {revisionId} -> revisionId) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {revisionId = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+-- | The API stage.
+importAssetFromApiGatewayApiResponseDetails_stage :: Lens.Lens' ImportAssetFromApiGatewayApiResponseDetails Prelude.Text
+importAssetFromApiGatewayApiResponseDetails_stage = Lens.lens (\ImportAssetFromApiGatewayApiResponseDetails' {stage} -> stage) (\s@ImportAssetFromApiGatewayApiResponseDetails' {} a -> s {stage = a} :: ImportAssetFromApiGatewayApiResponseDetails)
+
+instance
+  Data.FromJSON
+    ImportAssetFromApiGatewayApiResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ImportAssetFromApiGatewayApiResponseDetails"
+      ( \x ->
+          ImportAssetFromApiGatewayApiResponseDetails'
+            Prelude.<$> (x Data..:? "ApiDescription")
+            Prelude.<*> (x Data..:? "ApiKey")
+            Prelude.<*> (x Data..: "ApiId")
+            Prelude.<*> (x Data..: "ApiName")
+            Prelude.<*> (x Data..: "ApiSpecificationMd5Hash")
+            Prelude.<*> (x Data..: "ApiSpecificationUploadUrl")
+            Prelude.<*> (x Data..: "ApiSpecificationUploadUrlExpiresAt")
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "ProtocolType")
+            Prelude.<*> (x Data..: "RevisionId")
+            Prelude.<*> (x Data..: "Stage")
+      )
+
+instance
+  Prelude.Hashable
+    ImportAssetFromApiGatewayApiResponseDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetFromApiGatewayApiResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` apiDescription
+        `Prelude.hashWithSalt` apiKey
+        `Prelude.hashWithSalt` apiId
+        `Prelude.hashWithSalt` apiName
+        `Prelude.hashWithSalt` apiSpecificationMd5Hash
+        `Prelude.hashWithSalt` apiSpecificationUploadUrl
+        `Prelude.hashWithSalt` apiSpecificationUploadUrlExpiresAt
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` protocolType
+        `Prelude.hashWithSalt` revisionId
+        `Prelude.hashWithSalt` stage
+
+instance
+  Prelude.NFData
+    ImportAssetFromApiGatewayApiResponseDetails
+  where
+  rnf ImportAssetFromApiGatewayApiResponseDetails' {..} =
+    Prelude.rnf apiDescription
+      `Prelude.seq` Prelude.rnf apiKey
+      `Prelude.seq` Prelude.rnf apiId
+      `Prelude.seq` Prelude.rnf apiName
+      `Prelude.seq` Prelude.rnf apiSpecificationMd5Hash
+      `Prelude.seq` Prelude.rnf apiSpecificationUploadUrl
+      `Prelude.seq` Prelude.rnf apiSpecificationUploadUrlExpiresAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf protocolType
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf stage
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlJobErrorDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlJobErrorDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlJobErrorDetails.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ImportAssetFromSignedUrlJobErrorDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetFromSignedUrlJobErrorDetails 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
+
+-- | Details about the job error.
+--
+-- /See:/ 'newImportAssetFromSignedUrlJobErrorDetails' smart constructor.
+data ImportAssetFromSignedUrlJobErrorDetails = ImportAssetFromSignedUrlJobErrorDetails'
+  { -- | Details about the job error.
+    assetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetFromSignedUrlJobErrorDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetName', 'importAssetFromSignedUrlJobErrorDetails_assetName' - Details about the job error.
+newImportAssetFromSignedUrlJobErrorDetails ::
+  -- | 'assetName'
+  Prelude.Text ->
+  ImportAssetFromSignedUrlJobErrorDetails
+newImportAssetFromSignedUrlJobErrorDetails
+  pAssetName_ =
+    ImportAssetFromSignedUrlJobErrorDetails'
+      { assetName =
+          pAssetName_
+      }
+
+-- | Details about the job error.
+importAssetFromSignedUrlJobErrorDetails_assetName :: Lens.Lens' ImportAssetFromSignedUrlJobErrorDetails Prelude.Text
+importAssetFromSignedUrlJobErrorDetails_assetName = Lens.lens (\ImportAssetFromSignedUrlJobErrorDetails' {assetName} -> assetName) (\s@ImportAssetFromSignedUrlJobErrorDetails' {} a -> s {assetName = a} :: ImportAssetFromSignedUrlJobErrorDetails)
+
+instance
+  Data.FromJSON
+    ImportAssetFromSignedUrlJobErrorDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ImportAssetFromSignedUrlJobErrorDetails"
+      ( \x ->
+          ImportAssetFromSignedUrlJobErrorDetails'
+            Prelude.<$> (x Data..: "AssetName")
+      )
+
+instance
+  Prelude.Hashable
+    ImportAssetFromSignedUrlJobErrorDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetFromSignedUrlJobErrorDetails' {..} =
+      _salt `Prelude.hashWithSalt` assetName
+
+instance
+  Prelude.NFData
+    ImportAssetFromSignedUrlJobErrorDetails
+  where
+  rnf ImportAssetFromSignedUrlJobErrorDetails' {..} =
+    Prelude.rnf assetName
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlRequestDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlRequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlRequestDetails.hs
@@ -0,0 +1,140 @@
+{-# 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.DataExchange.Types.ImportAssetFromSignedUrlRequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetFromSignedUrlRequestDetails 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
+
+-- | Details of the operation to be performed by the job.
+--
+-- /See:/ 'newImportAssetFromSignedUrlRequestDetails' smart constructor.
+data ImportAssetFromSignedUrlRequestDetails = ImportAssetFromSignedUrlRequestDetails'
+  { -- | The name of the asset. When importing from Amazon S3, the Amazon S3
+    -- object key is used as the asset name.
+    assetName :: Prelude.Text,
+    -- | The unique identifier for the data set associated with this import job.
+    dataSetId :: Prelude.Text,
+    -- | The Base64-encoded Md5 hash for the asset, used to ensure the integrity
+    -- of the file at that location.
+    md5Hash :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this import
+    -- request.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetFromSignedUrlRequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetName', 'importAssetFromSignedUrlRequestDetails_assetName' - The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name.
+--
+-- 'dataSetId', 'importAssetFromSignedUrlRequestDetails_dataSetId' - The unique identifier for the data set associated with this import job.
+--
+-- 'md5Hash', 'importAssetFromSignedUrlRequestDetails_md5Hash' - The Base64-encoded Md5 hash for the asset, used to ensure the integrity
+-- of the file at that location.
+--
+-- 'revisionId', 'importAssetFromSignedUrlRequestDetails_revisionId' - The unique identifier for the revision associated with this import
+-- request.
+newImportAssetFromSignedUrlRequestDetails ::
+  -- | 'assetName'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'md5Hash'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ImportAssetFromSignedUrlRequestDetails
+newImportAssetFromSignedUrlRequestDetails
+  pAssetName_
+  pDataSetId_
+  pMd5Hash_
+  pRevisionId_ =
+    ImportAssetFromSignedUrlRequestDetails'
+      { assetName =
+          pAssetName_,
+        dataSetId = pDataSetId_,
+        md5Hash = pMd5Hash_,
+        revisionId = pRevisionId_
+      }
+
+-- | The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name.
+importAssetFromSignedUrlRequestDetails_assetName :: Lens.Lens' ImportAssetFromSignedUrlRequestDetails Prelude.Text
+importAssetFromSignedUrlRequestDetails_assetName = Lens.lens (\ImportAssetFromSignedUrlRequestDetails' {assetName} -> assetName) (\s@ImportAssetFromSignedUrlRequestDetails' {} a -> s {assetName = a} :: ImportAssetFromSignedUrlRequestDetails)
+
+-- | The unique identifier for the data set associated with this import job.
+importAssetFromSignedUrlRequestDetails_dataSetId :: Lens.Lens' ImportAssetFromSignedUrlRequestDetails Prelude.Text
+importAssetFromSignedUrlRequestDetails_dataSetId = Lens.lens (\ImportAssetFromSignedUrlRequestDetails' {dataSetId} -> dataSetId) (\s@ImportAssetFromSignedUrlRequestDetails' {} a -> s {dataSetId = a} :: ImportAssetFromSignedUrlRequestDetails)
+
+-- | The Base64-encoded Md5 hash for the asset, used to ensure the integrity
+-- of the file at that location.
+importAssetFromSignedUrlRequestDetails_md5Hash :: Lens.Lens' ImportAssetFromSignedUrlRequestDetails Prelude.Text
+importAssetFromSignedUrlRequestDetails_md5Hash = Lens.lens (\ImportAssetFromSignedUrlRequestDetails' {md5Hash} -> md5Hash) (\s@ImportAssetFromSignedUrlRequestDetails' {} a -> s {md5Hash = a} :: ImportAssetFromSignedUrlRequestDetails)
+
+-- | The unique identifier for the revision associated with this import
+-- request.
+importAssetFromSignedUrlRequestDetails_revisionId :: Lens.Lens' ImportAssetFromSignedUrlRequestDetails Prelude.Text
+importAssetFromSignedUrlRequestDetails_revisionId = Lens.lens (\ImportAssetFromSignedUrlRequestDetails' {revisionId} -> revisionId) (\s@ImportAssetFromSignedUrlRequestDetails' {} a -> s {revisionId = a} :: ImportAssetFromSignedUrlRequestDetails)
+
+instance
+  Prelude.Hashable
+    ImportAssetFromSignedUrlRequestDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetFromSignedUrlRequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetName
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` md5Hash
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ImportAssetFromSignedUrlRequestDetails
+  where
+  rnf ImportAssetFromSignedUrlRequestDetails' {..} =
+    Prelude.rnf assetName
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf md5Hash
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance
+  Data.ToJSON
+    ImportAssetFromSignedUrlRequestDetails
+  where
+  toJSON ImportAssetFromSignedUrlRequestDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("AssetName" Data..= assetName),
+            Prelude.Just ("DataSetId" Data..= dataSetId),
+            Prelude.Just ("Md5Hash" Data..= md5Hash),
+            Prelude.Just ("RevisionId" Data..= revisionId)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetFromSignedUrlResponseDetails.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.DataExchange.Types.ImportAssetFromSignedUrlResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetFromSignedUrlResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details in the response for an import request, including the signed
+-- URL and other information.
+--
+-- /See:/ 'newImportAssetFromSignedUrlResponseDetails' smart constructor.
+data ImportAssetFromSignedUrlResponseDetails = ImportAssetFromSignedUrlResponseDetails'
+  { -- | The Base64-encoded Md5 hash for the asset, used to ensure the integrity
+    -- of the file at that location.
+    md5Hash :: Prelude.Maybe Prelude.Text,
+    -- | The signed URL.
+    signedUrl :: Prelude.Maybe Prelude.Text,
+    -- | The time and date at which the signed URL expires, in ISO 8601 format.
+    signedUrlExpiresAt :: Prelude.Maybe Data.ISO8601,
+    -- | The name for the asset associated with this import job.
+    assetName :: Prelude.Text,
+    -- | The unique identifier for the data set associated with this import job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this import
+    -- response.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetFromSignedUrlResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'md5Hash', 'importAssetFromSignedUrlResponseDetails_md5Hash' - The Base64-encoded Md5 hash for the asset, used to ensure the integrity
+-- of the file at that location.
+--
+-- 'signedUrl', 'importAssetFromSignedUrlResponseDetails_signedUrl' - The signed URL.
+--
+-- 'signedUrlExpiresAt', 'importAssetFromSignedUrlResponseDetails_signedUrlExpiresAt' - The time and date at which the signed URL expires, in ISO 8601 format.
+--
+-- 'assetName', 'importAssetFromSignedUrlResponseDetails_assetName' - The name for the asset associated with this import job.
+--
+-- 'dataSetId', 'importAssetFromSignedUrlResponseDetails_dataSetId' - The unique identifier for the data set associated with this import job.
+--
+-- 'revisionId', 'importAssetFromSignedUrlResponseDetails_revisionId' - The unique identifier for the revision associated with this import
+-- response.
+newImportAssetFromSignedUrlResponseDetails ::
+  -- | 'assetName'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ImportAssetFromSignedUrlResponseDetails
+newImportAssetFromSignedUrlResponseDetails
+  pAssetName_
+  pDataSetId_
+  pRevisionId_ =
+    ImportAssetFromSignedUrlResponseDetails'
+      { md5Hash =
+          Prelude.Nothing,
+        signedUrl = Prelude.Nothing,
+        signedUrlExpiresAt =
+          Prelude.Nothing,
+        assetName = pAssetName_,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | The Base64-encoded Md5 hash for the asset, used to ensure the integrity
+-- of the file at that location.
+importAssetFromSignedUrlResponseDetails_md5Hash :: Lens.Lens' ImportAssetFromSignedUrlResponseDetails (Prelude.Maybe Prelude.Text)
+importAssetFromSignedUrlResponseDetails_md5Hash = Lens.lens (\ImportAssetFromSignedUrlResponseDetails' {md5Hash} -> md5Hash) (\s@ImportAssetFromSignedUrlResponseDetails' {} a -> s {md5Hash = a} :: ImportAssetFromSignedUrlResponseDetails)
+
+-- | The signed URL.
+importAssetFromSignedUrlResponseDetails_signedUrl :: Lens.Lens' ImportAssetFromSignedUrlResponseDetails (Prelude.Maybe Prelude.Text)
+importAssetFromSignedUrlResponseDetails_signedUrl = Lens.lens (\ImportAssetFromSignedUrlResponseDetails' {signedUrl} -> signedUrl) (\s@ImportAssetFromSignedUrlResponseDetails' {} a -> s {signedUrl = a} :: ImportAssetFromSignedUrlResponseDetails)
+
+-- | The time and date at which the signed URL expires, in ISO 8601 format.
+importAssetFromSignedUrlResponseDetails_signedUrlExpiresAt :: Lens.Lens' ImportAssetFromSignedUrlResponseDetails (Prelude.Maybe Prelude.UTCTime)
+importAssetFromSignedUrlResponseDetails_signedUrlExpiresAt = Lens.lens (\ImportAssetFromSignedUrlResponseDetails' {signedUrlExpiresAt} -> signedUrlExpiresAt) (\s@ImportAssetFromSignedUrlResponseDetails' {} a -> s {signedUrlExpiresAt = a} :: ImportAssetFromSignedUrlResponseDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The name for the asset associated with this import job.
+importAssetFromSignedUrlResponseDetails_assetName :: Lens.Lens' ImportAssetFromSignedUrlResponseDetails Prelude.Text
+importAssetFromSignedUrlResponseDetails_assetName = Lens.lens (\ImportAssetFromSignedUrlResponseDetails' {assetName} -> assetName) (\s@ImportAssetFromSignedUrlResponseDetails' {} a -> s {assetName = a} :: ImportAssetFromSignedUrlResponseDetails)
+
+-- | The unique identifier for the data set associated with this import job.
+importAssetFromSignedUrlResponseDetails_dataSetId :: Lens.Lens' ImportAssetFromSignedUrlResponseDetails Prelude.Text
+importAssetFromSignedUrlResponseDetails_dataSetId = Lens.lens (\ImportAssetFromSignedUrlResponseDetails' {dataSetId} -> dataSetId) (\s@ImportAssetFromSignedUrlResponseDetails' {} a -> s {dataSetId = a} :: ImportAssetFromSignedUrlResponseDetails)
+
+-- | The unique identifier for the revision associated with this import
+-- response.
+importAssetFromSignedUrlResponseDetails_revisionId :: Lens.Lens' ImportAssetFromSignedUrlResponseDetails Prelude.Text
+importAssetFromSignedUrlResponseDetails_revisionId = Lens.lens (\ImportAssetFromSignedUrlResponseDetails' {revisionId} -> revisionId) (\s@ImportAssetFromSignedUrlResponseDetails' {} a -> s {revisionId = a} :: ImportAssetFromSignedUrlResponseDetails)
+
+instance
+  Data.FromJSON
+    ImportAssetFromSignedUrlResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ImportAssetFromSignedUrlResponseDetails"
+      ( \x ->
+          ImportAssetFromSignedUrlResponseDetails'
+            Prelude.<$> (x Data..:? "Md5Hash")
+            Prelude.<*> (x Data..:? "SignedUrl")
+            Prelude.<*> (x Data..:? "SignedUrlExpiresAt")
+            Prelude.<*> (x Data..: "AssetName")
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "RevisionId")
+      )
+
+instance
+  Prelude.Hashable
+    ImportAssetFromSignedUrlResponseDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetFromSignedUrlResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` md5Hash
+        `Prelude.hashWithSalt` signedUrl
+        `Prelude.hashWithSalt` signedUrlExpiresAt
+        `Prelude.hashWithSalt` assetName
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ImportAssetFromSignedUrlResponseDetails
+  where
+  rnf ImportAssetFromSignedUrlResponseDetails' {..} =
+    Prelude.rnf md5Hash
+      `Prelude.seq` Prelude.rnf signedUrl
+      `Prelude.seq` Prelude.rnf signedUrlExpiresAt
+      `Prelude.seq` Prelude.rnf assetName
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetsFromLakeFormationTagPolicyRequestDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetsFromLakeFormationTagPolicyRequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetsFromLakeFormationTagPolicyRequestDetails.hs
@@ -0,0 +1,170 @@
+{-# 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.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyRequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyRequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicyAndPermissions
+import Amazonka.DataExchange.Types.TableLFTagPolicyAndPermissions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the assets imported from an AWS Lake Formation tag policy
+-- request.
+--
+-- /See:/ 'newImportAssetsFromLakeFormationTagPolicyRequestDetails' smart constructor.
+data ImportAssetsFromLakeFormationTagPolicyRequestDetails = ImportAssetsFromLakeFormationTagPolicyRequestDetails'
+  { -- | A structure for the database object.
+    database :: Prelude.Maybe DatabaseLFTagPolicyAndPermissions,
+    -- | A structure for the table object.
+    table :: Prelude.Maybe TableLFTagPolicyAndPermissions,
+    -- | The identifier for the AWS Glue Data Catalog.
+    catalogId :: Prelude.Text,
+    -- | The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+    -- grant and revoke permissions of subscribers to AWS Lake Formation data
+    -- permissions.
+    roleArn :: Prelude.Text,
+    -- | The unique identifier for the data set associated with this import job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this import job.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetsFromLakeFormationTagPolicyRequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'database', 'importAssetsFromLakeFormationTagPolicyRequestDetails_database' - A structure for the database object.
+--
+-- 'table', 'importAssetsFromLakeFormationTagPolicyRequestDetails_table' - A structure for the table object.
+--
+-- 'catalogId', 'importAssetsFromLakeFormationTagPolicyRequestDetails_catalogId' - The identifier for the AWS Glue Data Catalog.
+--
+-- 'roleArn', 'importAssetsFromLakeFormationTagPolicyRequestDetails_roleArn' - The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+-- grant and revoke permissions of subscribers to AWS Lake Formation data
+-- permissions.
+--
+-- 'dataSetId', 'importAssetsFromLakeFormationTagPolicyRequestDetails_dataSetId' - The unique identifier for the data set associated with this import job.
+--
+-- 'revisionId', 'importAssetsFromLakeFormationTagPolicyRequestDetails_revisionId' - The unique identifier for the revision associated with this import job.
+newImportAssetsFromLakeFormationTagPolicyRequestDetails ::
+  -- | 'catalogId'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ImportAssetsFromLakeFormationTagPolicyRequestDetails
+newImportAssetsFromLakeFormationTagPolicyRequestDetails
+  pCatalogId_
+  pRoleArn_
+  pDataSetId_
+  pRevisionId_ =
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails'
+      { database =
+          Prelude.Nothing,
+        table =
+          Prelude.Nothing,
+        catalogId =
+          pCatalogId_,
+        roleArn = pRoleArn_,
+        dataSetId =
+          pDataSetId_,
+        revisionId =
+          pRevisionId_
+      }
+
+-- | A structure for the database object.
+importAssetsFromLakeFormationTagPolicyRequestDetails_database :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyRequestDetails (Prelude.Maybe DatabaseLFTagPolicyAndPermissions)
+importAssetsFromLakeFormationTagPolicyRequestDetails_database = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyRequestDetails' {database} -> database) (\s@ImportAssetsFromLakeFormationTagPolicyRequestDetails' {} a -> s {database = a} :: ImportAssetsFromLakeFormationTagPolicyRequestDetails)
+
+-- | A structure for the table object.
+importAssetsFromLakeFormationTagPolicyRequestDetails_table :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyRequestDetails (Prelude.Maybe TableLFTagPolicyAndPermissions)
+importAssetsFromLakeFormationTagPolicyRequestDetails_table = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyRequestDetails' {table} -> table) (\s@ImportAssetsFromLakeFormationTagPolicyRequestDetails' {} a -> s {table = a} :: ImportAssetsFromLakeFormationTagPolicyRequestDetails)
+
+-- | The identifier for the AWS Glue Data Catalog.
+importAssetsFromLakeFormationTagPolicyRequestDetails_catalogId :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyRequestDetails Prelude.Text
+importAssetsFromLakeFormationTagPolicyRequestDetails_catalogId = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyRequestDetails' {catalogId} -> catalogId) (\s@ImportAssetsFromLakeFormationTagPolicyRequestDetails' {} a -> s {catalogId = a} :: ImportAssetsFromLakeFormationTagPolicyRequestDetails)
+
+-- | The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+-- grant and revoke permissions of subscribers to AWS Lake Formation data
+-- permissions.
+importAssetsFromLakeFormationTagPolicyRequestDetails_roleArn :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyRequestDetails Prelude.Text
+importAssetsFromLakeFormationTagPolicyRequestDetails_roleArn = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyRequestDetails' {roleArn} -> roleArn) (\s@ImportAssetsFromLakeFormationTagPolicyRequestDetails' {} a -> s {roleArn = a} :: ImportAssetsFromLakeFormationTagPolicyRequestDetails)
+
+-- | The unique identifier for the data set associated with this import job.
+importAssetsFromLakeFormationTagPolicyRequestDetails_dataSetId :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyRequestDetails Prelude.Text
+importAssetsFromLakeFormationTagPolicyRequestDetails_dataSetId = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyRequestDetails' {dataSetId} -> dataSetId) (\s@ImportAssetsFromLakeFormationTagPolicyRequestDetails' {} a -> s {dataSetId = a} :: ImportAssetsFromLakeFormationTagPolicyRequestDetails)
+
+-- | The unique identifier for the revision associated with this import job.
+importAssetsFromLakeFormationTagPolicyRequestDetails_revisionId :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyRequestDetails Prelude.Text
+importAssetsFromLakeFormationTagPolicyRequestDetails_revisionId = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyRequestDetails' {revisionId} -> revisionId) (\s@ImportAssetsFromLakeFormationTagPolicyRequestDetails' {} a -> s {revisionId = a} :: ImportAssetsFromLakeFormationTagPolicyRequestDetails)
+
+instance
+  Prelude.Hashable
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` database
+        `Prelude.hashWithSalt` table
+        `Prelude.hashWithSalt` catalogId
+        `Prelude.hashWithSalt` roleArn
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails
+  where
+  rnf
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails' {..} =
+      Prelude.rnf database
+        `Prelude.seq` Prelude.rnf table
+        `Prelude.seq` Prelude.rnf catalogId
+        `Prelude.seq` Prelude.rnf roleArn
+        `Prelude.seq` Prelude.rnf dataSetId
+        `Prelude.seq` Prelude.rnf revisionId
+
+instance
+  Data.ToJSON
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails
+  where
+  toJSON
+    ImportAssetsFromLakeFormationTagPolicyRequestDetails' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ ("Database" Data..=) Prelude.<$> database,
+              ("Table" Data..=) Prelude.<$> table,
+              Prelude.Just ("CatalogId" Data..= catalogId),
+              Prelude.Just ("RoleArn" Data..= roleArn),
+              Prelude.Just ("DataSetId" Data..= dataSetId),
+              Prelude.Just ("RevisionId" Data..= revisionId)
+            ]
+        )
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetsFromLakeFormationTagPolicyResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetsFromLakeFormationTagPolicyResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetsFromLakeFormationTagPolicyResponseDetails.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.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicyAndPermissions
+import Amazonka.DataExchange.Types.TableLFTagPolicyAndPermissions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details from an import AWS Lake Formation tag policy job response.
+--
+-- /See:/ 'newImportAssetsFromLakeFormationTagPolicyResponseDetails' smart constructor.
+data ImportAssetsFromLakeFormationTagPolicyResponseDetails = ImportAssetsFromLakeFormationTagPolicyResponseDetails'
+  { -- | A structure for the database object.
+    database :: Prelude.Maybe DatabaseLFTagPolicyAndPermissions,
+    -- | A structure for the table object.
+    table :: Prelude.Maybe TableLFTagPolicyAndPermissions,
+    -- | The identifier for the AWS Glue Data Catalog.
+    catalogId :: Prelude.Text,
+    -- | The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+    -- grant and revoke permissions to AWS Lake Formation data permissions.
+    roleArn :: Prelude.Text,
+    -- | The unique identifier for the data set associated with this import job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this import job.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetsFromLakeFormationTagPolicyResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'database', 'importAssetsFromLakeFormationTagPolicyResponseDetails_database' - A structure for the database object.
+--
+-- 'table', 'importAssetsFromLakeFormationTagPolicyResponseDetails_table' - A structure for the table object.
+--
+-- 'catalogId', 'importAssetsFromLakeFormationTagPolicyResponseDetails_catalogId' - The identifier for the AWS Glue Data Catalog.
+--
+-- 'roleArn', 'importAssetsFromLakeFormationTagPolicyResponseDetails_roleArn' - The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+-- grant and revoke permissions to AWS Lake Formation data permissions.
+--
+-- 'dataSetId', 'importAssetsFromLakeFormationTagPolicyResponseDetails_dataSetId' - The unique identifier for the data set associated with this import job.
+--
+-- 'revisionId', 'importAssetsFromLakeFormationTagPolicyResponseDetails_revisionId' - The unique identifier for the revision associated with this import job.
+newImportAssetsFromLakeFormationTagPolicyResponseDetails ::
+  -- | 'catalogId'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ImportAssetsFromLakeFormationTagPolicyResponseDetails
+newImportAssetsFromLakeFormationTagPolicyResponseDetails
+  pCatalogId_
+  pRoleArn_
+  pDataSetId_
+  pRevisionId_ =
+    ImportAssetsFromLakeFormationTagPolicyResponseDetails'
+      { database =
+          Prelude.Nothing,
+        table =
+          Prelude.Nothing,
+        catalogId =
+          pCatalogId_,
+        roleArn = pRoleArn_,
+        dataSetId =
+          pDataSetId_,
+        revisionId =
+          pRevisionId_
+      }
+
+-- | A structure for the database object.
+importAssetsFromLakeFormationTagPolicyResponseDetails_database :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyResponseDetails (Prelude.Maybe DatabaseLFTagPolicyAndPermissions)
+importAssetsFromLakeFormationTagPolicyResponseDetails_database = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyResponseDetails' {database} -> database) (\s@ImportAssetsFromLakeFormationTagPolicyResponseDetails' {} a -> s {database = a} :: ImportAssetsFromLakeFormationTagPolicyResponseDetails)
+
+-- | A structure for the table object.
+importAssetsFromLakeFormationTagPolicyResponseDetails_table :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyResponseDetails (Prelude.Maybe TableLFTagPolicyAndPermissions)
+importAssetsFromLakeFormationTagPolicyResponseDetails_table = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyResponseDetails' {table} -> table) (\s@ImportAssetsFromLakeFormationTagPolicyResponseDetails' {} a -> s {table = a} :: ImportAssetsFromLakeFormationTagPolicyResponseDetails)
+
+-- | The identifier for the AWS Glue Data Catalog.
+importAssetsFromLakeFormationTagPolicyResponseDetails_catalogId :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyResponseDetails Prelude.Text
+importAssetsFromLakeFormationTagPolicyResponseDetails_catalogId = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyResponseDetails' {catalogId} -> catalogId) (\s@ImportAssetsFromLakeFormationTagPolicyResponseDetails' {} a -> s {catalogId = a} :: ImportAssetsFromLakeFormationTagPolicyResponseDetails)
+
+-- | The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+-- grant and revoke permissions to AWS Lake Formation data permissions.
+importAssetsFromLakeFormationTagPolicyResponseDetails_roleArn :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyResponseDetails Prelude.Text
+importAssetsFromLakeFormationTagPolicyResponseDetails_roleArn = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyResponseDetails' {roleArn} -> roleArn) (\s@ImportAssetsFromLakeFormationTagPolicyResponseDetails' {} a -> s {roleArn = a} :: ImportAssetsFromLakeFormationTagPolicyResponseDetails)
+
+-- | The unique identifier for the data set associated with this import job.
+importAssetsFromLakeFormationTagPolicyResponseDetails_dataSetId :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyResponseDetails Prelude.Text
+importAssetsFromLakeFormationTagPolicyResponseDetails_dataSetId = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyResponseDetails' {dataSetId} -> dataSetId) (\s@ImportAssetsFromLakeFormationTagPolicyResponseDetails' {} a -> s {dataSetId = a} :: ImportAssetsFromLakeFormationTagPolicyResponseDetails)
+
+-- | The unique identifier for the revision associated with this import job.
+importAssetsFromLakeFormationTagPolicyResponseDetails_revisionId :: Lens.Lens' ImportAssetsFromLakeFormationTagPolicyResponseDetails Prelude.Text
+importAssetsFromLakeFormationTagPolicyResponseDetails_revisionId = Lens.lens (\ImportAssetsFromLakeFormationTagPolicyResponseDetails' {revisionId} -> revisionId) (\s@ImportAssetsFromLakeFormationTagPolicyResponseDetails' {} a -> s {revisionId = a} :: ImportAssetsFromLakeFormationTagPolicyResponseDetails)
+
+instance
+  Data.FromJSON
+    ImportAssetsFromLakeFormationTagPolicyResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ImportAssetsFromLakeFormationTagPolicyResponseDetails"
+      ( \x ->
+          ImportAssetsFromLakeFormationTagPolicyResponseDetails'
+            Prelude.<$> (x Data..:? "Database")
+            Prelude.<*> (x Data..:? "Table")
+            Prelude.<*> (x Data..: "CatalogId")
+            Prelude.<*> (x Data..: "RoleArn")
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "RevisionId")
+      )
+
+instance
+  Prelude.Hashable
+    ImportAssetsFromLakeFormationTagPolicyResponseDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetsFromLakeFormationTagPolicyResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` database
+        `Prelude.hashWithSalt` table
+        `Prelude.hashWithSalt` catalogId
+        `Prelude.hashWithSalt` roleArn
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ImportAssetsFromLakeFormationTagPolicyResponseDetails
+  where
+  rnf
+    ImportAssetsFromLakeFormationTagPolicyResponseDetails' {..} =
+      Prelude.rnf database
+        `Prelude.seq` Prelude.rnf table
+        `Prelude.seq` Prelude.rnf catalogId
+        `Prelude.seq` Prelude.rnf roleArn
+        `Prelude.seq` Prelude.rnf dataSetId
+        `Prelude.seq` Prelude.rnf revisionId
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetsFromRedshiftDataSharesRequestDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetsFromRedshiftDataSharesRequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetsFromRedshiftDataSharesRequestDetails.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesRequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesRequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.RedshiftDataShareAssetSourceEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details from an import from Amazon Redshift datashare request.
+--
+-- /See:/ 'newImportAssetsFromRedshiftDataSharesRequestDetails' smart constructor.
+data ImportAssetsFromRedshiftDataSharesRequestDetails = ImportAssetsFromRedshiftDataSharesRequestDetails'
+  { -- | A list of Amazon Redshift datashare assets.
+    assetSources :: [RedshiftDataShareAssetSourceEntry],
+    -- | The unique identifier for the data set associated with this import job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this import job.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetsFromRedshiftDataSharesRequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetSources', 'importAssetsFromRedshiftDataSharesRequestDetails_assetSources' - A list of Amazon Redshift datashare assets.
+--
+-- 'dataSetId', 'importAssetsFromRedshiftDataSharesRequestDetails_dataSetId' - The unique identifier for the data set associated with this import job.
+--
+-- 'revisionId', 'importAssetsFromRedshiftDataSharesRequestDetails_revisionId' - The unique identifier for the revision associated with this import job.
+newImportAssetsFromRedshiftDataSharesRequestDetails ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ImportAssetsFromRedshiftDataSharesRequestDetails
+newImportAssetsFromRedshiftDataSharesRequestDetails
+  pDataSetId_
+  pRevisionId_ =
+    ImportAssetsFromRedshiftDataSharesRequestDetails'
+      { assetSources =
+          Prelude.mempty,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | A list of Amazon Redshift datashare assets.
+importAssetsFromRedshiftDataSharesRequestDetails_assetSources :: Lens.Lens' ImportAssetsFromRedshiftDataSharesRequestDetails [RedshiftDataShareAssetSourceEntry]
+importAssetsFromRedshiftDataSharesRequestDetails_assetSources = Lens.lens (\ImportAssetsFromRedshiftDataSharesRequestDetails' {assetSources} -> assetSources) (\s@ImportAssetsFromRedshiftDataSharesRequestDetails' {} a -> s {assetSources = a} :: ImportAssetsFromRedshiftDataSharesRequestDetails) Prelude.. Lens.coerced
+
+-- | The unique identifier for the data set associated with this import job.
+importAssetsFromRedshiftDataSharesRequestDetails_dataSetId :: Lens.Lens' ImportAssetsFromRedshiftDataSharesRequestDetails Prelude.Text
+importAssetsFromRedshiftDataSharesRequestDetails_dataSetId = Lens.lens (\ImportAssetsFromRedshiftDataSharesRequestDetails' {dataSetId} -> dataSetId) (\s@ImportAssetsFromRedshiftDataSharesRequestDetails' {} a -> s {dataSetId = a} :: ImportAssetsFromRedshiftDataSharesRequestDetails)
+
+-- | The unique identifier for the revision associated with this import job.
+importAssetsFromRedshiftDataSharesRequestDetails_revisionId :: Lens.Lens' ImportAssetsFromRedshiftDataSharesRequestDetails Prelude.Text
+importAssetsFromRedshiftDataSharesRequestDetails_revisionId = Lens.lens (\ImportAssetsFromRedshiftDataSharesRequestDetails' {revisionId} -> revisionId) (\s@ImportAssetsFromRedshiftDataSharesRequestDetails' {} a -> s {revisionId = a} :: ImportAssetsFromRedshiftDataSharesRequestDetails)
+
+instance
+  Prelude.Hashable
+    ImportAssetsFromRedshiftDataSharesRequestDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetsFromRedshiftDataSharesRequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetSources
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ImportAssetsFromRedshiftDataSharesRequestDetails
+  where
+  rnf
+    ImportAssetsFromRedshiftDataSharesRequestDetails' {..} =
+      Prelude.rnf assetSources
+        `Prelude.seq` Prelude.rnf dataSetId
+        `Prelude.seq` Prelude.rnf revisionId
+
+instance
+  Data.ToJSON
+    ImportAssetsFromRedshiftDataSharesRequestDetails
+  where
+  toJSON
+    ImportAssetsFromRedshiftDataSharesRequestDetails' {..} =
+      Data.object
+        ( Prelude.catMaybes
+            [ Prelude.Just ("AssetSources" Data..= assetSources),
+              Prelude.Just ("DataSetId" Data..= dataSetId),
+              Prelude.Just ("RevisionId" Data..= revisionId)
+            ]
+        )
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetsFromRedshiftDataSharesResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetsFromRedshiftDataSharesResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetsFromRedshiftDataSharesResponseDetails.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.RedshiftDataShareAssetSourceEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details from an import from Amazon Redshift datashare response.
+--
+-- /See:/ 'newImportAssetsFromRedshiftDataSharesResponseDetails' smart constructor.
+data ImportAssetsFromRedshiftDataSharesResponseDetails = ImportAssetsFromRedshiftDataSharesResponseDetails'
+  { -- | A list of Amazon Redshift datashare asset sources.
+    assetSources :: [RedshiftDataShareAssetSourceEntry],
+    -- | The unique identifier for the data set associated with this import job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this import job.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetsFromRedshiftDataSharesResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetSources', 'importAssetsFromRedshiftDataSharesResponseDetails_assetSources' - A list of Amazon Redshift datashare asset sources.
+--
+-- 'dataSetId', 'importAssetsFromRedshiftDataSharesResponseDetails_dataSetId' - The unique identifier for the data set associated with this import job.
+--
+-- 'revisionId', 'importAssetsFromRedshiftDataSharesResponseDetails_revisionId' - The unique identifier for the revision associated with this import job.
+newImportAssetsFromRedshiftDataSharesResponseDetails ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ImportAssetsFromRedshiftDataSharesResponseDetails
+newImportAssetsFromRedshiftDataSharesResponseDetails
+  pDataSetId_
+  pRevisionId_ =
+    ImportAssetsFromRedshiftDataSharesResponseDetails'
+      { assetSources =
+          Prelude.mempty,
+        dataSetId = pDataSetId_,
+        revisionId =
+          pRevisionId_
+      }
+
+-- | A list of Amazon Redshift datashare asset sources.
+importAssetsFromRedshiftDataSharesResponseDetails_assetSources :: Lens.Lens' ImportAssetsFromRedshiftDataSharesResponseDetails [RedshiftDataShareAssetSourceEntry]
+importAssetsFromRedshiftDataSharesResponseDetails_assetSources = Lens.lens (\ImportAssetsFromRedshiftDataSharesResponseDetails' {assetSources} -> assetSources) (\s@ImportAssetsFromRedshiftDataSharesResponseDetails' {} a -> s {assetSources = a} :: ImportAssetsFromRedshiftDataSharesResponseDetails) Prelude.. Lens.coerced
+
+-- | The unique identifier for the data set associated with this import job.
+importAssetsFromRedshiftDataSharesResponseDetails_dataSetId :: Lens.Lens' ImportAssetsFromRedshiftDataSharesResponseDetails Prelude.Text
+importAssetsFromRedshiftDataSharesResponseDetails_dataSetId = Lens.lens (\ImportAssetsFromRedshiftDataSharesResponseDetails' {dataSetId} -> dataSetId) (\s@ImportAssetsFromRedshiftDataSharesResponseDetails' {} a -> s {dataSetId = a} :: ImportAssetsFromRedshiftDataSharesResponseDetails)
+
+-- | The unique identifier for the revision associated with this import job.
+importAssetsFromRedshiftDataSharesResponseDetails_revisionId :: Lens.Lens' ImportAssetsFromRedshiftDataSharesResponseDetails Prelude.Text
+importAssetsFromRedshiftDataSharesResponseDetails_revisionId = Lens.lens (\ImportAssetsFromRedshiftDataSharesResponseDetails' {revisionId} -> revisionId) (\s@ImportAssetsFromRedshiftDataSharesResponseDetails' {} a -> s {revisionId = a} :: ImportAssetsFromRedshiftDataSharesResponseDetails)
+
+instance
+  Data.FromJSON
+    ImportAssetsFromRedshiftDataSharesResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ImportAssetsFromRedshiftDataSharesResponseDetails"
+      ( \x ->
+          ImportAssetsFromRedshiftDataSharesResponseDetails'
+            Prelude.<$> (x Data..:? "AssetSources" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "RevisionId")
+      )
+
+instance
+  Prelude.Hashable
+    ImportAssetsFromRedshiftDataSharesResponseDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetsFromRedshiftDataSharesResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetSources
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ImportAssetsFromRedshiftDataSharesResponseDetails
+  where
+  rnf
+    ImportAssetsFromRedshiftDataSharesResponseDetails' {..} =
+      Prelude.rnf assetSources
+        `Prelude.seq` Prelude.rnf dataSetId
+        `Prelude.seq` Prelude.rnf revisionId
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetsFromS3RequestDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetsFromS3RequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetsFromS3RequestDetails.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ImportAssetsFromS3RequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetsFromS3RequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AssetSourceEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details of the operation to be performed by the job.
+--
+-- /See:/ 'newImportAssetsFromS3RequestDetails' smart constructor.
+data ImportAssetsFromS3RequestDetails = ImportAssetsFromS3RequestDetails'
+  { -- | Is a list of Amazon S3 bucket and object key pairs.
+    assetSources :: [AssetSourceEntry],
+    -- | The unique identifier for the data set associated with this import job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this import
+    -- request.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetsFromS3RequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetSources', 'importAssetsFromS3RequestDetails_assetSources' - Is a list of Amazon S3 bucket and object key pairs.
+--
+-- 'dataSetId', 'importAssetsFromS3RequestDetails_dataSetId' - The unique identifier for the data set associated with this import job.
+--
+-- 'revisionId', 'importAssetsFromS3RequestDetails_revisionId' - The unique identifier for the revision associated with this import
+-- request.
+newImportAssetsFromS3RequestDetails ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ImportAssetsFromS3RequestDetails
+newImportAssetsFromS3RequestDetails
+  pDataSetId_
+  pRevisionId_ =
+    ImportAssetsFromS3RequestDetails'
+      { assetSources =
+          Prelude.mempty,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | Is a list of Amazon S3 bucket and object key pairs.
+importAssetsFromS3RequestDetails_assetSources :: Lens.Lens' ImportAssetsFromS3RequestDetails [AssetSourceEntry]
+importAssetsFromS3RequestDetails_assetSources = Lens.lens (\ImportAssetsFromS3RequestDetails' {assetSources} -> assetSources) (\s@ImportAssetsFromS3RequestDetails' {} a -> s {assetSources = a} :: ImportAssetsFromS3RequestDetails) Prelude.. Lens.coerced
+
+-- | The unique identifier for the data set associated with this import job.
+importAssetsFromS3RequestDetails_dataSetId :: Lens.Lens' ImportAssetsFromS3RequestDetails Prelude.Text
+importAssetsFromS3RequestDetails_dataSetId = Lens.lens (\ImportAssetsFromS3RequestDetails' {dataSetId} -> dataSetId) (\s@ImportAssetsFromS3RequestDetails' {} a -> s {dataSetId = a} :: ImportAssetsFromS3RequestDetails)
+
+-- | The unique identifier for the revision associated with this import
+-- request.
+importAssetsFromS3RequestDetails_revisionId :: Lens.Lens' ImportAssetsFromS3RequestDetails Prelude.Text
+importAssetsFromS3RequestDetails_revisionId = Lens.lens (\ImportAssetsFromS3RequestDetails' {revisionId} -> revisionId) (\s@ImportAssetsFromS3RequestDetails' {} a -> s {revisionId = a} :: ImportAssetsFromS3RequestDetails)
+
+instance
+  Prelude.Hashable
+    ImportAssetsFromS3RequestDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetsFromS3RequestDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetSources
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ImportAssetsFromS3RequestDetails
+  where
+  rnf ImportAssetsFromS3RequestDetails' {..} =
+    Prelude.rnf assetSources
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToJSON ImportAssetsFromS3RequestDetails where
+  toJSON ImportAssetsFromS3RequestDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("AssetSources" Data..= assetSources),
+            Prelude.Just ("DataSetId" Data..= dataSetId),
+            Prelude.Just ("RevisionId" Data..= revisionId)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/ImportAssetsFromS3ResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ImportAssetsFromS3ResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ImportAssetsFromS3ResponseDetails.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ImportAssetsFromS3ResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ImportAssetsFromS3ResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.AssetSourceEntry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details from an import from Amazon S3 response.
+--
+-- /See:/ 'newImportAssetsFromS3ResponseDetails' smart constructor.
+data ImportAssetsFromS3ResponseDetails = ImportAssetsFromS3ResponseDetails'
+  { -- | Is a list of Amazon S3 bucket and object key pairs.
+    assetSources :: [AssetSourceEntry],
+    -- | The unique identifier for the data set associated with this import job.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision associated with this import
+    -- response.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAssetsFromS3ResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetSources', 'importAssetsFromS3ResponseDetails_assetSources' - Is a list of Amazon S3 bucket and object key pairs.
+--
+-- 'dataSetId', 'importAssetsFromS3ResponseDetails_dataSetId' - The unique identifier for the data set associated with this import job.
+--
+-- 'revisionId', 'importAssetsFromS3ResponseDetails_revisionId' - The unique identifier for the revision associated with this import
+-- response.
+newImportAssetsFromS3ResponseDetails ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  ImportAssetsFromS3ResponseDetails
+newImportAssetsFromS3ResponseDetails
+  pDataSetId_
+  pRevisionId_ =
+    ImportAssetsFromS3ResponseDetails'
+      { assetSources =
+          Prelude.mempty,
+        dataSetId = pDataSetId_,
+        revisionId = pRevisionId_
+      }
+
+-- | Is a list of Amazon S3 bucket and object key pairs.
+importAssetsFromS3ResponseDetails_assetSources :: Lens.Lens' ImportAssetsFromS3ResponseDetails [AssetSourceEntry]
+importAssetsFromS3ResponseDetails_assetSources = Lens.lens (\ImportAssetsFromS3ResponseDetails' {assetSources} -> assetSources) (\s@ImportAssetsFromS3ResponseDetails' {} a -> s {assetSources = a} :: ImportAssetsFromS3ResponseDetails) Prelude.. Lens.coerced
+
+-- | The unique identifier for the data set associated with this import job.
+importAssetsFromS3ResponseDetails_dataSetId :: Lens.Lens' ImportAssetsFromS3ResponseDetails Prelude.Text
+importAssetsFromS3ResponseDetails_dataSetId = Lens.lens (\ImportAssetsFromS3ResponseDetails' {dataSetId} -> dataSetId) (\s@ImportAssetsFromS3ResponseDetails' {} a -> s {dataSetId = a} :: ImportAssetsFromS3ResponseDetails)
+
+-- | The unique identifier for the revision associated with this import
+-- response.
+importAssetsFromS3ResponseDetails_revisionId :: Lens.Lens' ImportAssetsFromS3ResponseDetails Prelude.Text
+importAssetsFromS3ResponseDetails_revisionId = Lens.lens (\ImportAssetsFromS3ResponseDetails' {revisionId} -> revisionId) (\s@ImportAssetsFromS3ResponseDetails' {} a -> s {revisionId = a} :: ImportAssetsFromS3ResponseDetails)
+
+instance
+  Data.FromJSON
+    ImportAssetsFromS3ResponseDetails
+  where
+  parseJSON =
+    Data.withObject
+      "ImportAssetsFromS3ResponseDetails"
+      ( \x ->
+          ImportAssetsFromS3ResponseDetails'
+            Prelude.<$> (x Data..:? "AssetSources" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "RevisionId")
+      )
+
+instance
+  Prelude.Hashable
+    ImportAssetsFromS3ResponseDetails
+  where
+  hashWithSalt
+    _salt
+    ImportAssetsFromS3ResponseDetails' {..} =
+      _salt
+        `Prelude.hashWithSalt` assetSources
+        `Prelude.hashWithSalt` dataSetId
+        `Prelude.hashWithSalt` revisionId
+
+instance
+  Prelude.NFData
+    ImportAssetsFromS3ResponseDetails
+  where
+  rnf ImportAssetsFromS3ResponseDetails' {..} =
+    Prelude.rnf assetSources
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
diff --git a/gen/Amazonka/DataExchange/Types/JobEntry.hs b/gen/Amazonka/DataExchange/Types/JobEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/JobEntry.hs
@@ -0,0 +1,187 @@
+{-# 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.DataExchange.Types.JobEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.JobEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.JobError
+import Amazonka.DataExchange.Types.ResponseDetails
+import Amazonka.DataExchange.Types.State
+import Amazonka.DataExchange.Types.Type
+import qualified Amazonka.Prelude as Prelude
+
+-- | AWS Data Exchange Jobs are asynchronous import or export operations used
+-- to create or copy assets. A data set owner can both import and export as
+-- they see fit. Someone with an entitlement to a data set can only export.
+-- Jobs are deleted 90 days after they are created.
+--
+-- /See:/ 'newJobEntry' smart constructor.
+data JobEntry = JobEntry'
+  { -- | Errors for jobs.
+    errors :: Prelude.Maybe [JobError],
+    -- | The ARN for the job.
+    arn :: Prelude.Text,
+    -- | The date and time that the job was created, in ISO 8601 format.
+    createdAt :: Data.ISO8601,
+    -- | Details of the operation to be performed by the job, such as export
+    -- destination details or import source details.
+    details :: ResponseDetails,
+    -- | The unique identifier for the job.
+    id :: Prelude.Text,
+    -- | The state of the job.
+    state :: State,
+    -- | The job type.
+    type' :: Type,
+    -- | The date and time that the job was last updated, in ISO 8601 format.
+    updatedAt :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'jobEntry_errors' - Errors for jobs.
+--
+-- 'arn', 'jobEntry_arn' - The ARN for the job.
+--
+-- 'createdAt', 'jobEntry_createdAt' - The date and time that the job was created, in ISO 8601 format.
+--
+-- 'details', 'jobEntry_details' - Details of the operation to be performed by the job, such as export
+-- destination details or import source details.
+--
+-- 'id', 'jobEntry_id' - The unique identifier for the job.
+--
+-- 'state', 'jobEntry_state' - The state of the job.
+--
+-- 'type'', 'jobEntry_type' - The job type.
+--
+-- 'updatedAt', 'jobEntry_updatedAt' - The date and time that the job was last updated, in ISO 8601 format.
+newJobEntry ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'details'
+  ResponseDetails ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'state'
+  State ->
+  -- | 'type''
+  Type ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  JobEntry
+newJobEntry
+  pArn_
+  pCreatedAt_
+  pDetails_
+  pId_
+  pState_
+  pType_
+  pUpdatedAt_ =
+    JobEntry'
+      { errors = Prelude.Nothing,
+        arn = pArn_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        details = pDetails_,
+        id = pId_,
+        state = pState_,
+        type' = pType_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | Errors for jobs.
+jobEntry_errors :: Lens.Lens' JobEntry (Prelude.Maybe [JobError])
+jobEntry_errors = Lens.lens (\JobEntry' {errors} -> errors) (\s@JobEntry' {} a -> s {errors = a} :: JobEntry) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN for the job.
+jobEntry_arn :: Lens.Lens' JobEntry Prelude.Text
+jobEntry_arn = Lens.lens (\JobEntry' {arn} -> arn) (\s@JobEntry' {} a -> s {arn = a} :: JobEntry)
+
+-- | The date and time that the job was created, in ISO 8601 format.
+jobEntry_createdAt :: Lens.Lens' JobEntry Prelude.UTCTime
+jobEntry_createdAt = Lens.lens (\JobEntry' {createdAt} -> createdAt) (\s@JobEntry' {} a -> s {createdAt = a} :: JobEntry) Prelude.. Data._Time
+
+-- | Details of the operation to be performed by the job, such as export
+-- destination details or import source details.
+jobEntry_details :: Lens.Lens' JobEntry ResponseDetails
+jobEntry_details = Lens.lens (\JobEntry' {details} -> details) (\s@JobEntry' {} a -> s {details = a} :: JobEntry)
+
+-- | The unique identifier for the job.
+jobEntry_id :: Lens.Lens' JobEntry Prelude.Text
+jobEntry_id = Lens.lens (\JobEntry' {id} -> id) (\s@JobEntry' {} a -> s {id = a} :: JobEntry)
+
+-- | The state of the job.
+jobEntry_state :: Lens.Lens' JobEntry State
+jobEntry_state = Lens.lens (\JobEntry' {state} -> state) (\s@JobEntry' {} a -> s {state = a} :: JobEntry)
+
+-- | The job type.
+jobEntry_type :: Lens.Lens' JobEntry Type
+jobEntry_type = Lens.lens (\JobEntry' {type'} -> type') (\s@JobEntry' {} a -> s {type' = a} :: JobEntry)
+
+-- | The date and time that the job was last updated, in ISO 8601 format.
+jobEntry_updatedAt :: Lens.Lens' JobEntry Prelude.UTCTime
+jobEntry_updatedAt = Lens.lens (\JobEntry' {updatedAt} -> updatedAt) (\s@JobEntry' {} a -> s {updatedAt = a} :: JobEntry) Prelude.. Data._Time
+
+instance Data.FromJSON JobEntry where
+  parseJSON =
+    Data.withObject
+      "JobEntry"
+      ( \x ->
+          JobEntry'
+            Prelude.<$> (x Data..:? "Errors" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "Details")
+            Prelude.<*> (x Data..: "Id")
+            Prelude.<*> (x Data..: "State")
+            Prelude.<*> (x Data..: "Type")
+            Prelude.<*> (x Data..: "UpdatedAt")
+      )
+
+instance Prelude.Hashable JobEntry where
+  hashWithSalt _salt JobEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` errors
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` details
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData JobEntry where
+  rnf JobEntry' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf details
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/DataExchange/Types/JobError.hs b/gen/Amazonka/DataExchange/Types/JobError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/JobError.hs
@@ -0,0 +1,152 @@
+{-# 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.DataExchange.Types.JobError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.JobError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.Code
+import Amazonka.DataExchange.Types.Details
+import Amazonka.DataExchange.Types.JobErrorLimitName
+import Amazonka.DataExchange.Types.JobErrorResourceTypes
+import qualified Amazonka.Prelude as Prelude
+
+-- | An error that occurred with the job request.
+--
+-- /See:/ 'newJobError' smart constructor.
+data JobError = JobError'
+  { -- | The details about the job error.
+    details :: Prelude.Maybe Details,
+    -- | The name of the limit that was reached.
+    limitName :: Prelude.Maybe JobErrorLimitName,
+    -- | The value of the exceeded limit.
+    limitValue :: Prelude.Maybe Prelude.Double,
+    -- | The unique identifier for the resource related to the error.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource related to the error.
+    resourceType :: Prelude.Maybe JobErrorResourceTypes,
+    -- | The code for the job error.
+    code :: Code,
+    -- | The message related to the job error.
+    message :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'details', 'jobError_details' - The details about the job error.
+--
+-- 'limitName', 'jobError_limitName' - The name of the limit that was reached.
+--
+-- 'limitValue', 'jobError_limitValue' - The value of the exceeded limit.
+--
+-- 'resourceId', 'jobError_resourceId' - The unique identifier for the resource related to the error.
+--
+-- 'resourceType', 'jobError_resourceType' - The type of resource related to the error.
+--
+-- 'code', 'jobError_code' - The code for the job error.
+--
+-- 'message', 'jobError_message' - The message related to the job error.
+newJobError ::
+  -- | 'code'
+  Code ->
+  -- | 'message'
+  Prelude.Text ->
+  JobError
+newJobError pCode_ pMessage_ =
+  JobError'
+    { details = Prelude.Nothing,
+      limitName = Prelude.Nothing,
+      limitValue = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      code = pCode_,
+      message = pMessage_
+    }
+
+-- | The details about the job error.
+jobError_details :: Lens.Lens' JobError (Prelude.Maybe Details)
+jobError_details = Lens.lens (\JobError' {details} -> details) (\s@JobError' {} a -> s {details = a} :: JobError)
+
+-- | The name of the limit that was reached.
+jobError_limitName :: Lens.Lens' JobError (Prelude.Maybe JobErrorLimitName)
+jobError_limitName = Lens.lens (\JobError' {limitName} -> limitName) (\s@JobError' {} a -> s {limitName = a} :: JobError)
+
+-- | The value of the exceeded limit.
+jobError_limitValue :: Lens.Lens' JobError (Prelude.Maybe Prelude.Double)
+jobError_limitValue = Lens.lens (\JobError' {limitValue} -> limitValue) (\s@JobError' {} a -> s {limitValue = a} :: JobError)
+
+-- | The unique identifier for the resource related to the error.
+jobError_resourceId :: Lens.Lens' JobError (Prelude.Maybe Prelude.Text)
+jobError_resourceId = Lens.lens (\JobError' {resourceId} -> resourceId) (\s@JobError' {} a -> s {resourceId = a} :: JobError)
+
+-- | The type of resource related to the error.
+jobError_resourceType :: Lens.Lens' JobError (Prelude.Maybe JobErrorResourceTypes)
+jobError_resourceType = Lens.lens (\JobError' {resourceType} -> resourceType) (\s@JobError' {} a -> s {resourceType = a} :: JobError)
+
+-- | The code for the job error.
+jobError_code :: Lens.Lens' JobError Code
+jobError_code = Lens.lens (\JobError' {code} -> code) (\s@JobError' {} a -> s {code = a} :: JobError)
+
+-- | The message related to the job error.
+jobError_message :: Lens.Lens' JobError Prelude.Text
+jobError_message = Lens.lens (\JobError' {message} -> message) (\s@JobError' {} a -> s {message = a} :: JobError)
+
+instance Data.FromJSON JobError where
+  parseJSON =
+    Data.withObject
+      "JobError"
+      ( \x ->
+          JobError'
+            Prelude.<$> (x Data..:? "Details")
+            Prelude.<*> (x Data..:? "LimitName")
+            Prelude.<*> (x Data..:? "LimitValue")
+            Prelude.<*> (x Data..:? "ResourceId")
+            Prelude.<*> (x Data..:? "ResourceType")
+            Prelude.<*> (x Data..: "Code")
+            Prelude.<*> (x Data..: "Message")
+      )
+
+instance Prelude.Hashable JobError where
+  hashWithSalt _salt JobError' {..} =
+    _salt
+      `Prelude.hashWithSalt` details
+      `Prelude.hashWithSalt` limitName
+      `Prelude.hashWithSalt` limitValue
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData JobError where
+  rnf JobError' {..} =
+    Prelude.rnf details
+      `Prelude.seq` Prelude.rnf limitName
+      `Prelude.seq` Prelude.rnf limitValue
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/DataExchange/Types/JobErrorLimitName.hs b/gen/Amazonka/DataExchange/Types/JobErrorLimitName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/JobErrorLimitName.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.DataExchange.Types.JobErrorLimitName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.JobErrorLimitName
+  ( JobErrorLimitName
+      ( ..,
+        JobErrorLimitName_AWS_Lake_Formation_data_permission_assets_per_revision,
+        JobErrorLimitName_Amazon_Redshift_datashare_assets_per_revision,
+        JobErrorLimitName_Amazon_S3_data_access_assets_per_revision,
+        JobErrorLimitName_Asset_size_in_GB,
+        JobErrorLimitName_Assets_per_revision
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobErrorLimitName = JobErrorLimitName'
+  { fromJobErrorLimitName ::
+      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 JobErrorLimitName_AWS_Lake_Formation_data_permission_assets_per_revision :: JobErrorLimitName
+pattern JobErrorLimitName_AWS_Lake_Formation_data_permission_assets_per_revision = JobErrorLimitName' "AWS Lake Formation data permission assets per revision"
+
+pattern JobErrorLimitName_Amazon_Redshift_datashare_assets_per_revision :: JobErrorLimitName
+pattern JobErrorLimitName_Amazon_Redshift_datashare_assets_per_revision = JobErrorLimitName' "Amazon Redshift datashare assets per revision"
+
+pattern JobErrorLimitName_Amazon_S3_data_access_assets_per_revision :: JobErrorLimitName
+pattern JobErrorLimitName_Amazon_S3_data_access_assets_per_revision = JobErrorLimitName' "Amazon S3 data access assets per revision"
+
+pattern JobErrorLimitName_Asset_size_in_GB :: JobErrorLimitName
+pattern JobErrorLimitName_Asset_size_in_GB = JobErrorLimitName' "Asset size in GB"
+
+pattern JobErrorLimitName_Assets_per_revision :: JobErrorLimitName
+pattern JobErrorLimitName_Assets_per_revision = JobErrorLimitName' "Assets per revision"
+
+{-# COMPLETE
+  JobErrorLimitName_AWS_Lake_Formation_data_permission_assets_per_revision,
+  JobErrorLimitName_Amazon_Redshift_datashare_assets_per_revision,
+  JobErrorLimitName_Amazon_S3_data_access_assets_per_revision,
+  JobErrorLimitName_Asset_size_in_GB,
+  JobErrorLimitName_Assets_per_revision,
+  JobErrorLimitName'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/JobErrorResourceTypes.hs b/gen/Amazonka/DataExchange/Types/JobErrorResourceTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/JobErrorResourceTypes.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.DataExchange.Types.JobErrorResourceTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.JobErrorResourceTypes
+  ( JobErrorResourceTypes
+      ( ..,
+        JobErrorResourceTypes_ASSET,
+        JobErrorResourceTypes_DATA_SET,
+        JobErrorResourceTypes_REVISION
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobErrorResourceTypes = JobErrorResourceTypes'
+  { fromJobErrorResourceTypes ::
+      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 JobErrorResourceTypes_ASSET :: JobErrorResourceTypes
+pattern JobErrorResourceTypes_ASSET = JobErrorResourceTypes' "ASSET"
+
+pattern JobErrorResourceTypes_DATA_SET :: JobErrorResourceTypes
+pattern JobErrorResourceTypes_DATA_SET = JobErrorResourceTypes' "DATA_SET"
+
+pattern JobErrorResourceTypes_REVISION :: JobErrorResourceTypes
+pattern JobErrorResourceTypes_REVISION = JobErrorResourceTypes' "REVISION"
+
+{-# COMPLETE
+  JobErrorResourceTypes_ASSET,
+  JobErrorResourceTypes_DATA_SET,
+  JobErrorResourceTypes_REVISION,
+  JobErrorResourceTypes'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/LFPermission.hs b/gen/Amazonka/DataExchange/Types/LFPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/LFPermission.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.DataExchange.Types.LFPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.LFPermission
+  ( LFPermission
+      ( ..,
+        LFPermission_DESCRIBE,
+        LFPermission_SELECT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LFPermission = LFPermission'
+  { fromLFPermission ::
+      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 LFPermission_DESCRIBE :: LFPermission
+pattern LFPermission_DESCRIBE = LFPermission' "DESCRIBE"
+
+pattern LFPermission_SELECT :: LFPermission
+pattern LFPermission_SELECT = LFPermission' "SELECT"
+
+{-# COMPLETE
+  LFPermission_DESCRIBE,
+  LFPermission_SELECT,
+  LFPermission'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/LFResourceDetails.hs b/gen/Amazonka/DataExchange/Types/LFResourceDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/LFResourceDetails.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.DataExchange.Types.LFResourceDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.LFResourceDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.DatabaseLFTagPolicy
+import Amazonka.DataExchange.Types.TableLFTagPolicy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the AWS Lake Formation resource (Table or Database)
+-- included in the AWS Lake Formation data permission.
+--
+-- /See:/ 'newLFResourceDetails' smart constructor.
+data LFResourceDetails = LFResourceDetails'
+  { -- | Details about the database resource included in the AWS Lake Formation
+    -- data permission.
+    database :: Prelude.Maybe DatabaseLFTagPolicy,
+    -- | Details about the table resource included in the AWS Lake Formation data
+    -- permission.
+    table :: Prelude.Maybe TableLFTagPolicy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LFResourceDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'database', 'lFResourceDetails_database' - Details about the database resource included in the AWS Lake Formation
+-- data permission.
+--
+-- 'table', 'lFResourceDetails_table' - Details about the table resource included in the AWS Lake Formation data
+-- permission.
+newLFResourceDetails ::
+  LFResourceDetails
+newLFResourceDetails =
+  LFResourceDetails'
+    { database = Prelude.Nothing,
+      table = Prelude.Nothing
+    }
+
+-- | Details about the database resource included in the AWS Lake Formation
+-- data permission.
+lFResourceDetails_database :: Lens.Lens' LFResourceDetails (Prelude.Maybe DatabaseLFTagPolicy)
+lFResourceDetails_database = Lens.lens (\LFResourceDetails' {database} -> database) (\s@LFResourceDetails' {} a -> s {database = a} :: LFResourceDetails)
+
+-- | Details about the table resource included in the AWS Lake Formation data
+-- permission.
+lFResourceDetails_table :: Lens.Lens' LFResourceDetails (Prelude.Maybe TableLFTagPolicy)
+lFResourceDetails_table = Lens.lens (\LFResourceDetails' {table} -> table) (\s@LFResourceDetails' {} a -> s {table = a} :: LFResourceDetails)
+
+instance Data.FromJSON LFResourceDetails where
+  parseJSON =
+    Data.withObject
+      "LFResourceDetails"
+      ( \x ->
+          LFResourceDetails'
+            Prelude.<$> (x Data..:? "Database")
+            Prelude.<*> (x Data..:? "Table")
+      )
+
+instance Prelude.Hashable LFResourceDetails where
+  hashWithSalt _salt LFResourceDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` database
+      `Prelude.hashWithSalt` table
+
+instance Prelude.NFData LFResourceDetails where
+  rnf LFResourceDetails' {..} =
+    Prelude.rnf database
+      `Prelude.seq` Prelude.rnf table
diff --git a/gen/Amazonka/DataExchange/Types/LFResourceType.hs b/gen/Amazonka/DataExchange/Types/LFResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/LFResourceType.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.DataExchange.Types.LFResourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.LFResourceType
+  ( LFResourceType
+      ( ..,
+        LFResourceType_DATABASE,
+        LFResourceType_TABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LFResourceType = LFResourceType'
+  { fromLFResourceType ::
+      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 LFResourceType_DATABASE :: LFResourceType
+pattern LFResourceType_DATABASE = LFResourceType' "DATABASE"
+
+pattern LFResourceType_TABLE :: LFResourceType
+pattern LFResourceType_TABLE = LFResourceType' "TABLE"
+
+{-# COMPLETE
+  LFResourceType_DATABASE,
+  LFResourceType_TABLE,
+  LFResourceType'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/LFTag.hs b/gen/Amazonka/DataExchange/Types/LFTag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/LFTag.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.DataExchange.Types.LFTag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.LFTag 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 structure that allows an LF-admin to grant permissions on certain
+-- conditions.
+--
+-- /See:/ 'newLFTag' smart constructor.
+data LFTag = LFTag'
+  { -- | The key name for the LF-tag.
+    tagKey :: Prelude.Text,
+    -- | A list of LF-tag values.
+    tagValues :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LFTag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tagKey', 'lFTag_tagKey' - The key name for the LF-tag.
+--
+-- 'tagValues', 'lFTag_tagValues' - A list of LF-tag values.
+newLFTag ::
+  -- | 'tagKey'
+  Prelude.Text ->
+  LFTag
+newLFTag pTagKey_ =
+  LFTag'
+    { tagKey = pTagKey_,
+      tagValues = Prelude.mempty
+    }
+
+-- | The key name for the LF-tag.
+lFTag_tagKey :: Lens.Lens' LFTag Prelude.Text
+lFTag_tagKey = Lens.lens (\LFTag' {tagKey} -> tagKey) (\s@LFTag' {} a -> s {tagKey = a} :: LFTag)
+
+-- | A list of LF-tag values.
+lFTag_tagValues :: Lens.Lens' LFTag [Prelude.Text]
+lFTag_tagValues = Lens.lens (\LFTag' {tagValues} -> tagValues) (\s@LFTag' {} a -> s {tagValues = a} :: LFTag) Prelude.. Lens.coerced
+
+instance Data.FromJSON LFTag where
+  parseJSON =
+    Data.withObject
+      "LFTag"
+      ( \x ->
+          LFTag'
+            Prelude.<$> (x Data..: "TagKey")
+            Prelude.<*> (x Data..:? "TagValues" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable LFTag where
+  hashWithSalt _salt LFTag' {..} =
+    _salt
+      `Prelude.hashWithSalt` tagKey
+      `Prelude.hashWithSalt` tagValues
+
+instance Prelude.NFData LFTag where
+  rnf LFTag' {..} =
+    Prelude.rnf tagKey
+      `Prelude.seq` Prelude.rnf tagValues
+
+instance Data.ToJSON LFTag where
+  toJSON LFTag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("TagKey" Data..= tagKey),
+            Prelude.Just ("TagValues" Data..= tagValues)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/LFTagPolicyDetails.hs b/gen/Amazonka/DataExchange/Types/LFTagPolicyDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/LFTagPolicyDetails.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.LFTagPolicyDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.LFTagPolicyDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.LFResourceDetails
+import Amazonka.DataExchange.Types.LFResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the LF-tag policy.
+--
+-- /See:/ 'newLFTagPolicyDetails' smart constructor.
+data LFTagPolicyDetails = LFTagPolicyDetails'
+  { -- | The identifier for the AWS Glue Data Catalog.
+    catalogId :: Prelude.Text,
+    -- | The resource type for which the LF-tag policy applies.
+    resourceType :: LFResourceType,
+    -- | Details for the Lake Formation Resources included in the LF-tag policy.
+    resourceDetails :: LFResourceDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LFTagPolicyDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'catalogId', 'lFTagPolicyDetails_catalogId' - The identifier for the AWS Glue Data Catalog.
+--
+-- 'resourceType', 'lFTagPolicyDetails_resourceType' - The resource type for which the LF-tag policy applies.
+--
+-- 'resourceDetails', 'lFTagPolicyDetails_resourceDetails' - Details for the Lake Formation Resources included in the LF-tag policy.
+newLFTagPolicyDetails ::
+  -- | 'catalogId'
+  Prelude.Text ->
+  -- | 'resourceType'
+  LFResourceType ->
+  -- | 'resourceDetails'
+  LFResourceDetails ->
+  LFTagPolicyDetails
+newLFTagPolicyDetails
+  pCatalogId_
+  pResourceType_
+  pResourceDetails_ =
+    LFTagPolicyDetails'
+      { catalogId = pCatalogId_,
+        resourceType = pResourceType_,
+        resourceDetails = pResourceDetails_
+      }
+
+-- | The identifier for the AWS Glue Data Catalog.
+lFTagPolicyDetails_catalogId :: Lens.Lens' LFTagPolicyDetails Prelude.Text
+lFTagPolicyDetails_catalogId = Lens.lens (\LFTagPolicyDetails' {catalogId} -> catalogId) (\s@LFTagPolicyDetails' {} a -> s {catalogId = a} :: LFTagPolicyDetails)
+
+-- | The resource type for which the LF-tag policy applies.
+lFTagPolicyDetails_resourceType :: Lens.Lens' LFTagPolicyDetails LFResourceType
+lFTagPolicyDetails_resourceType = Lens.lens (\LFTagPolicyDetails' {resourceType} -> resourceType) (\s@LFTagPolicyDetails' {} a -> s {resourceType = a} :: LFTagPolicyDetails)
+
+-- | Details for the Lake Formation Resources included in the LF-tag policy.
+lFTagPolicyDetails_resourceDetails :: Lens.Lens' LFTagPolicyDetails LFResourceDetails
+lFTagPolicyDetails_resourceDetails = Lens.lens (\LFTagPolicyDetails' {resourceDetails} -> resourceDetails) (\s@LFTagPolicyDetails' {} a -> s {resourceDetails = a} :: LFTagPolicyDetails)
+
+instance Data.FromJSON LFTagPolicyDetails where
+  parseJSON =
+    Data.withObject
+      "LFTagPolicyDetails"
+      ( \x ->
+          LFTagPolicyDetails'
+            Prelude.<$> (x Data..: "CatalogId")
+            Prelude.<*> (x Data..: "ResourceType")
+            Prelude.<*> (x Data..: "ResourceDetails")
+      )
+
+instance Prelude.Hashable LFTagPolicyDetails where
+  hashWithSalt _salt LFTagPolicyDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` catalogId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` resourceDetails
+
+instance Prelude.NFData LFTagPolicyDetails where
+  rnf LFTagPolicyDetails' {..} =
+    Prelude.rnf catalogId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf resourceDetails
diff --git a/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionAsset.hs b/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionAsset.hs
@@ -0,0 +1,134 @@
+{-# 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.DataExchange.Types.LakeFormationDataPermissionAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.LakeFormationDataPermissionAsset where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.LFPermission
+import Amazonka.DataExchange.Types.LakeFormationDataPermissionDetails
+import Amazonka.DataExchange.Types.LakeFormationDataPermissionType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The AWS Lake Formation data permission asset.
+--
+-- /See:/ 'newLakeFormationDataPermissionAsset' smart constructor.
+data LakeFormationDataPermissionAsset = LakeFormationDataPermissionAsset'
+  { -- | The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+    -- grant and revoke permissions to AWS Lake Formation data permissions.
+    roleArn :: Prelude.Maybe Prelude.Text,
+    -- | Details about the AWS Lake Formation data permission.
+    lakeFormationDataPermissionDetails :: LakeFormationDataPermissionDetails,
+    -- | The data permission type.
+    lakeFormationDataPermissionType :: LakeFormationDataPermissionType,
+    -- | The permissions granted to the subscribers on the resource.
+    permissions :: [LFPermission]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LakeFormationDataPermissionAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'lakeFormationDataPermissionAsset_roleArn' - The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+-- grant and revoke permissions to AWS Lake Formation data permissions.
+--
+-- 'lakeFormationDataPermissionDetails', 'lakeFormationDataPermissionAsset_lakeFormationDataPermissionDetails' - Details about the AWS Lake Formation data permission.
+--
+-- 'lakeFormationDataPermissionType', 'lakeFormationDataPermissionAsset_lakeFormationDataPermissionType' - The data permission type.
+--
+-- 'permissions', 'lakeFormationDataPermissionAsset_permissions' - The permissions granted to the subscribers on the resource.
+newLakeFormationDataPermissionAsset ::
+  -- | 'lakeFormationDataPermissionDetails'
+  LakeFormationDataPermissionDetails ->
+  -- | 'lakeFormationDataPermissionType'
+  LakeFormationDataPermissionType ->
+  LakeFormationDataPermissionAsset
+newLakeFormationDataPermissionAsset
+  pLakeFormationDataPermissionDetails_
+  pLakeFormationDataPermissionType_ =
+    LakeFormationDataPermissionAsset'
+      { roleArn =
+          Prelude.Nothing,
+        lakeFormationDataPermissionDetails =
+          pLakeFormationDataPermissionDetails_,
+        lakeFormationDataPermissionType =
+          pLakeFormationDataPermissionType_,
+        permissions = Prelude.mempty
+      }
+
+-- | The IAM role\'s ARN that allows AWS Data Exchange to assume the role and
+-- grant and revoke permissions to AWS Lake Formation data permissions.
+lakeFormationDataPermissionAsset_roleArn :: Lens.Lens' LakeFormationDataPermissionAsset (Prelude.Maybe Prelude.Text)
+lakeFormationDataPermissionAsset_roleArn = Lens.lens (\LakeFormationDataPermissionAsset' {roleArn} -> roleArn) (\s@LakeFormationDataPermissionAsset' {} a -> s {roleArn = a} :: LakeFormationDataPermissionAsset)
+
+-- | Details about the AWS Lake Formation data permission.
+lakeFormationDataPermissionAsset_lakeFormationDataPermissionDetails :: Lens.Lens' LakeFormationDataPermissionAsset LakeFormationDataPermissionDetails
+lakeFormationDataPermissionAsset_lakeFormationDataPermissionDetails = Lens.lens (\LakeFormationDataPermissionAsset' {lakeFormationDataPermissionDetails} -> lakeFormationDataPermissionDetails) (\s@LakeFormationDataPermissionAsset' {} a -> s {lakeFormationDataPermissionDetails = a} :: LakeFormationDataPermissionAsset)
+
+-- | The data permission type.
+lakeFormationDataPermissionAsset_lakeFormationDataPermissionType :: Lens.Lens' LakeFormationDataPermissionAsset LakeFormationDataPermissionType
+lakeFormationDataPermissionAsset_lakeFormationDataPermissionType = Lens.lens (\LakeFormationDataPermissionAsset' {lakeFormationDataPermissionType} -> lakeFormationDataPermissionType) (\s@LakeFormationDataPermissionAsset' {} a -> s {lakeFormationDataPermissionType = a} :: LakeFormationDataPermissionAsset)
+
+-- | The permissions granted to the subscribers on the resource.
+lakeFormationDataPermissionAsset_permissions :: Lens.Lens' LakeFormationDataPermissionAsset [LFPermission]
+lakeFormationDataPermissionAsset_permissions = Lens.lens (\LakeFormationDataPermissionAsset' {permissions} -> permissions) (\s@LakeFormationDataPermissionAsset' {} a -> s {permissions = a} :: LakeFormationDataPermissionAsset) Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    LakeFormationDataPermissionAsset
+  where
+  parseJSON =
+    Data.withObject
+      "LakeFormationDataPermissionAsset"
+      ( \x ->
+          LakeFormationDataPermissionAsset'
+            Prelude.<$> (x Data..:? "RoleArn")
+            Prelude.<*> (x Data..: "LakeFormationDataPermissionDetails")
+            Prelude.<*> (x Data..: "LakeFormationDataPermissionType")
+            Prelude.<*> (x Data..:? "Permissions" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    LakeFormationDataPermissionAsset
+  where
+  hashWithSalt
+    _salt
+    LakeFormationDataPermissionAsset' {..} =
+      _salt
+        `Prelude.hashWithSalt` roleArn
+        `Prelude.hashWithSalt` lakeFormationDataPermissionDetails
+        `Prelude.hashWithSalt` lakeFormationDataPermissionType
+        `Prelude.hashWithSalt` permissions
+
+instance
+  Prelude.NFData
+    LakeFormationDataPermissionAsset
+  where
+  rnf LakeFormationDataPermissionAsset' {..} =
+    Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf lakeFormationDataPermissionDetails
+      `Prelude.seq` Prelude.rnf lakeFormationDataPermissionType
+      `Prelude.seq` Prelude.rnf permissions
diff --git a/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionDetails.hs b/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionDetails.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.DataExchange.Types.LakeFormationDataPermissionDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.LakeFormationDataPermissionDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.LFTagPolicyDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the AWS Lake Formation data permission.
+--
+-- /See:/ 'newLakeFormationDataPermissionDetails' smart constructor.
+data LakeFormationDataPermissionDetails = LakeFormationDataPermissionDetails'
+  { -- | Details about the LF-tag policy.
+    lFTagPolicy :: Prelude.Maybe LFTagPolicyDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LakeFormationDataPermissionDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lFTagPolicy', 'lakeFormationDataPermissionDetails_lFTagPolicy' - Details about the LF-tag policy.
+newLakeFormationDataPermissionDetails ::
+  LakeFormationDataPermissionDetails
+newLakeFormationDataPermissionDetails =
+  LakeFormationDataPermissionDetails'
+    { lFTagPolicy =
+        Prelude.Nothing
+    }
+
+-- | Details about the LF-tag policy.
+lakeFormationDataPermissionDetails_lFTagPolicy :: Lens.Lens' LakeFormationDataPermissionDetails (Prelude.Maybe LFTagPolicyDetails)
+lakeFormationDataPermissionDetails_lFTagPolicy = Lens.lens (\LakeFormationDataPermissionDetails' {lFTagPolicy} -> lFTagPolicy) (\s@LakeFormationDataPermissionDetails' {} a -> s {lFTagPolicy = a} :: LakeFormationDataPermissionDetails)
+
+instance
+  Data.FromJSON
+    LakeFormationDataPermissionDetails
+  where
+  parseJSON =
+    Data.withObject
+      "LakeFormationDataPermissionDetails"
+      ( \x ->
+          LakeFormationDataPermissionDetails'
+            Prelude.<$> (x Data..:? "LFTagPolicy")
+      )
+
+instance
+  Prelude.Hashable
+    LakeFormationDataPermissionDetails
+  where
+  hashWithSalt
+    _salt
+    LakeFormationDataPermissionDetails' {..} =
+      _salt `Prelude.hashWithSalt` lFTagPolicy
+
+instance
+  Prelude.NFData
+    LakeFormationDataPermissionDetails
+  where
+  rnf LakeFormationDataPermissionDetails' {..} =
+    Prelude.rnf lFTagPolicy
diff --git a/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionType.hs b/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/LakeFormationDataPermissionType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.LakeFormationDataPermissionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.LakeFormationDataPermissionType
+  ( LakeFormationDataPermissionType
+      ( ..,
+        LakeFormationDataPermissionType_LFTagPolicy
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LakeFormationDataPermissionType = LakeFormationDataPermissionType'
+  { fromLakeFormationDataPermissionType ::
+      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 LakeFormationDataPermissionType_LFTagPolicy :: LakeFormationDataPermissionType
+pattern LakeFormationDataPermissionType_LFTagPolicy = LakeFormationDataPermissionType' "LFTagPolicy"
+
+{-# COMPLETE
+  LakeFormationDataPermissionType_LFTagPolicy,
+  LakeFormationDataPermissionType'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/Origin.hs b/gen/Amazonka/DataExchange/Types/Origin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/Origin.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.DataExchange.Types.Origin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.Origin
+  ( Origin
+      ( ..,
+        Origin_ENTITLED,
+        Origin_OWNED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Origin = Origin' {fromOrigin :: 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 Origin_ENTITLED :: Origin
+pattern Origin_ENTITLED = Origin' "ENTITLED"
+
+pattern Origin_OWNED :: Origin
+pattern Origin_OWNED = Origin' "OWNED"
+
+{-# COMPLETE
+  Origin_ENTITLED,
+  Origin_OWNED,
+  Origin'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/OriginDetails.hs b/gen/Amazonka/DataExchange/Types/OriginDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/OriginDetails.hs
@@ -0,0 +1,69 @@
+{-# 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.DataExchange.Types.OriginDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.OriginDetails 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
+
+-- | Details about the origin of the data set.
+--
+-- /See:/ 'newOriginDetails' smart constructor.
+data OriginDetails = OriginDetails'
+  { -- | The product ID of the origin of the data set.
+    productId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OriginDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'productId', 'originDetails_productId' - The product ID of the origin of the data set.
+newOriginDetails ::
+  -- | 'productId'
+  Prelude.Text ->
+  OriginDetails
+newOriginDetails pProductId_ =
+  OriginDetails' {productId = pProductId_}
+
+-- | The product ID of the origin of the data set.
+originDetails_productId :: Lens.Lens' OriginDetails Prelude.Text
+originDetails_productId = Lens.lens (\OriginDetails' {productId} -> productId) (\s@OriginDetails' {} a -> s {productId = a} :: OriginDetails)
+
+instance Data.FromJSON OriginDetails where
+  parseJSON =
+    Data.withObject
+      "OriginDetails"
+      ( \x ->
+          OriginDetails' Prelude.<$> (x Data..: "ProductId")
+      )
+
+instance Prelude.Hashable OriginDetails where
+  hashWithSalt _salt OriginDetails' {..} =
+    _salt `Prelude.hashWithSalt` productId
+
+instance Prelude.NFData OriginDetails where
+  rnf OriginDetails' {..} = Prelude.rnf productId
diff --git a/gen/Amazonka/DataExchange/Types/ProtocolType.hs b/gen/Amazonka/DataExchange/Types/ProtocolType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ProtocolType.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.ProtocolType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ProtocolType
+  ( ProtocolType
+      ( ..,
+        ProtocolType_REST
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ProtocolType = ProtocolType'
+  { fromProtocolType ::
+      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 ProtocolType_REST :: ProtocolType
+pattern ProtocolType_REST = ProtocolType' "REST"
+
+{-# COMPLETE
+  ProtocolType_REST,
+  ProtocolType'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/RedshiftDataShareAsset.hs b/gen/Amazonka/DataExchange/Types/RedshiftDataShareAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/RedshiftDataShareAsset.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.DataExchange.Types.RedshiftDataShareAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.RedshiftDataShareAsset 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 Amazon Redshift datashare asset.
+--
+-- /See:/ 'newRedshiftDataShareAsset' smart constructor.
+data RedshiftDataShareAsset = RedshiftDataShareAsset'
+  { -- | The Amazon Resource Name (ARN) of the datashare asset.
+    arn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RedshiftDataShareAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'redshiftDataShareAsset_arn' - The Amazon Resource Name (ARN) of the datashare asset.
+newRedshiftDataShareAsset ::
+  -- | 'arn'
+  Prelude.Text ->
+  RedshiftDataShareAsset
+newRedshiftDataShareAsset pArn_ =
+  RedshiftDataShareAsset' {arn = pArn_}
+
+-- | The Amazon Resource Name (ARN) of the datashare asset.
+redshiftDataShareAsset_arn :: Lens.Lens' RedshiftDataShareAsset Prelude.Text
+redshiftDataShareAsset_arn = Lens.lens (\RedshiftDataShareAsset' {arn} -> arn) (\s@RedshiftDataShareAsset' {} a -> s {arn = a} :: RedshiftDataShareAsset)
+
+instance Data.FromJSON RedshiftDataShareAsset where
+  parseJSON =
+    Data.withObject
+      "RedshiftDataShareAsset"
+      ( \x ->
+          RedshiftDataShareAsset'
+            Prelude.<$> (x Data..: "Arn")
+      )
+
+instance Prelude.Hashable RedshiftDataShareAsset where
+  hashWithSalt _salt RedshiftDataShareAsset' {..} =
+    _salt `Prelude.hashWithSalt` arn
+
+instance Prelude.NFData RedshiftDataShareAsset where
+  rnf RedshiftDataShareAsset' {..} = Prelude.rnf arn
diff --git a/gen/Amazonka/DataExchange/Types/RedshiftDataShareAssetSourceEntry.hs b/gen/Amazonka/DataExchange/Types/RedshiftDataShareAssetSourceEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/RedshiftDataShareAssetSourceEntry.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.RedshiftDataShareAssetSourceEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.RedshiftDataShareAssetSourceEntry 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 source of the Amazon Redshift datashare asset.
+--
+-- /See:/ 'newRedshiftDataShareAssetSourceEntry' smart constructor.
+data RedshiftDataShareAssetSourceEntry = RedshiftDataShareAssetSourceEntry'
+  { -- | The Amazon Resource Name (ARN) of the datashare asset.
+    dataShareArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RedshiftDataShareAssetSourceEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataShareArn', 'redshiftDataShareAssetSourceEntry_dataShareArn' - The Amazon Resource Name (ARN) of the datashare asset.
+newRedshiftDataShareAssetSourceEntry ::
+  -- | 'dataShareArn'
+  Prelude.Text ->
+  RedshiftDataShareAssetSourceEntry
+newRedshiftDataShareAssetSourceEntry pDataShareArn_ =
+  RedshiftDataShareAssetSourceEntry'
+    { dataShareArn =
+        pDataShareArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the datashare asset.
+redshiftDataShareAssetSourceEntry_dataShareArn :: Lens.Lens' RedshiftDataShareAssetSourceEntry Prelude.Text
+redshiftDataShareAssetSourceEntry_dataShareArn = Lens.lens (\RedshiftDataShareAssetSourceEntry' {dataShareArn} -> dataShareArn) (\s@RedshiftDataShareAssetSourceEntry' {} a -> s {dataShareArn = a} :: RedshiftDataShareAssetSourceEntry)
+
+instance
+  Data.FromJSON
+    RedshiftDataShareAssetSourceEntry
+  where
+  parseJSON =
+    Data.withObject
+      "RedshiftDataShareAssetSourceEntry"
+      ( \x ->
+          RedshiftDataShareAssetSourceEntry'
+            Prelude.<$> (x Data..: "DataShareArn")
+      )
+
+instance
+  Prelude.Hashable
+    RedshiftDataShareAssetSourceEntry
+  where
+  hashWithSalt
+    _salt
+    RedshiftDataShareAssetSourceEntry' {..} =
+      _salt `Prelude.hashWithSalt` dataShareArn
+
+instance
+  Prelude.NFData
+    RedshiftDataShareAssetSourceEntry
+  where
+  rnf RedshiftDataShareAssetSourceEntry' {..} =
+    Prelude.rnf dataShareArn
+
+instance
+  Data.ToJSON
+    RedshiftDataShareAssetSourceEntry
+  where
+  toJSON RedshiftDataShareAssetSourceEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("DataShareArn" Data..= dataShareArn)]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/RequestDetails.hs b/gen/Amazonka/DataExchange/Types/RequestDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/RequestDetails.hs
@@ -0,0 +1,190 @@
+{-# 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.DataExchange.Types.RequestDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.RequestDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketRequestDetails
+import Amazonka.DataExchange.Types.ExportAssetToSignedUrlRequestDetails
+import Amazonka.DataExchange.Types.ExportAssetsToS3RequestDetails
+import Amazonka.DataExchange.Types.ExportRevisionsToS3RequestDetails
+import Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesRequestDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromS3RequestDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | The details for the request.
+--
+-- /See:/ 'newRequestDetails' smart constructor.
+data RequestDetails = RequestDetails'
+  { -- | Details of the request to create S3 data access from the Amazon S3
+    -- bucket.
+    createS3DataAccessFromS3Bucket :: Prelude.Maybe CreateS3DataAccessFromS3BucketRequestDetails,
+    -- | Details about the export to signed URL request.
+    exportAssetToSignedUrl :: Prelude.Maybe ExportAssetToSignedUrlRequestDetails,
+    -- | Details about the export to Amazon S3 request.
+    exportAssetsToS3 :: Prelude.Maybe ExportAssetsToS3RequestDetails,
+    -- | Details about the export to Amazon S3 request.
+    exportRevisionsToS3 :: Prelude.Maybe ExportRevisionsToS3RequestDetails,
+    -- | Details about the import from signed URL request.
+    importAssetFromApiGatewayApi :: Prelude.Maybe ImportAssetFromApiGatewayApiRequestDetails,
+    -- | Details about the import from Amazon S3 request.
+    importAssetFromSignedUrl :: Prelude.Maybe ImportAssetFromSignedUrlRequestDetails,
+    -- | Request details for the ImportAssetsFromLakeFormationTagPolicy job.
+    importAssetsFromLakeFormationTagPolicy :: Prelude.Maybe ImportAssetsFromLakeFormationTagPolicyRequestDetails,
+    -- | Details from an import from Amazon Redshift datashare request.
+    importAssetsFromRedshiftDataShares :: Prelude.Maybe ImportAssetsFromRedshiftDataSharesRequestDetails,
+    -- | Details about the import asset from API Gateway API request.
+    importAssetsFromS3 :: Prelude.Maybe ImportAssetsFromS3RequestDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createS3DataAccessFromS3Bucket', 'requestDetails_createS3DataAccessFromS3Bucket' - Details of the request to create S3 data access from the Amazon S3
+-- bucket.
+--
+-- 'exportAssetToSignedUrl', 'requestDetails_exportAssetToSignedUrl' - Details about the export to signed URL request.
+--
+-- 'exportAssetsToS3', 'requestDetails_exportAssetsToS3' - Details about the export to Amazon S3 request.
+--
+-- 'exportRevisionsToS3', 'requestDetails_exportRevisionsToS3' - Details about the export to Amazon S3 request.
+--
+-- 'importAssetFromApiGatewayApi', 'requestDetails_importAssetFromApiGatewayApi' - Details about the import from signed URL request.
+--
+-- 'importAssetFromSignedUrl', 'requestDetails_importAssetFromSignedUrl' - Details about the import from Amazon S3 request.
+--
+-- 'importAssetsFromLakeFormationTagPolicy', 'requestDetails_importAssetsFromLakeFormationTagPolicy' - Request details for the ImportAssetsFromLakeFormationTagPolicy job.
+--
+-- 'importAssetsFromRedshiftDataShares', 'requestDetails_importAssetsFromRedshiftDataShares' - Details from an import from Amazon Redshift datashare request.
+--
+-- 'importAssetsFromS3', 'requestDetails_importAssetsFromS3' - Details about the import asset from API Gateway API request.
+newRequestDetails ::
+  RequestDetails
+newRequestDetails =
+  RequestDetails'
+    { createS3DataAccessFromS3Bucket =
+        Prelude.Nothing,
+      exportAssetToSignedUrl = Prelude.Nothing,
+      exportAssetsToS3 = Prelude.Nothing,
+      exportRevisionsToS3 = Prelude.Nothing,
+      importAssetFromApiGatewayApi = Prelude.Nothing,
+      importAssetFromSignedUrl = Prelude.Nothing,
+      importAssetsFromLakeFormationTagPolicy =
+        Prelude.Nothing,
+      importAssetsFromRedshiftDataShares = Prelude.Nothing,
+      importAssetsFromS3 = Prelude.Nothing
+    }
+
+-- | Details of the request to create S3 data access from the Amazon S3
+-- bucket.
+requestDetails_createS3DataAccessFromS3Bucket :: Lens.Lens' RequestDetails (Prelude.Maybe CreateS3DataAccessFromS3BucketRequestDetails)
+requestDetails_createS3DataAccessFromS3Bucket = Lens.lens (\RequestDetails' {createS3DataAccessFromS3Bucket} -> createS3DataAccessFromS3Bucket) (\s@RequestDetails' {} a -> s {createS3DataAccessFromS3Bucket = a} :: RequestDetails)
+
+-- | Details about the export to signed URL request.
+requestDetails_exportAssetToSignedUrl :: Lens.Lens' RequestDetails (Prelude.Maybe ExportAssetToSignedUrlRequestDetails)
+requestDetails_exportAssetToSignedUrl = Lens.lens (\RequestDetails' {exportAssetToSignedUrl} -> exportAssetToSignedUrl) (\s@RequestDetails' {} a -> s {exportAssetToSignedUrl = a} :: RequestDetails)
+
+-- | Details about the export to Amazon S3 request.
+requestDetails_exportAssetsToS3 :: Lens.Lens' RequestDetails (Prelude.Maybe ExportAssetsToS3RequestDetails)
+requestDetails_exportAssetsToS3 = Lens.lens (\RequestDetails' {exportAssetsToS3} -> exportAssetsToS3) (\s@RequestDetails' {} a -> s {exportAssetsToS3 = a} :: RequestDetails)
+
+-- | Details about the export to Amazon S3 request.
+requestDetails_exportRevisionsToS3 :: Lens.Lens' RequestDetails (Prelude.Maybe ExportRevisionsToS3RequestDetails)
+requestDetails_exportRevisionsToS3 = Lens.lens (\RequestDetails' {exportRevisionsToS3} -> exportRevisionsToS3) (\s@RequestDetails' {} a -> s {exportRevisionsToS3 = a} :: RequestDetails)
+
+-- | Details about the import from signed URL request.
+requestDetails_importAssetFromApiGatewayApi :: Lens.Lens' RequestDetails (Prelude.Maybe ImportAssetFromApiGatewayApiRequestDetails)
+requestDetails_importAssetFromApiGatewayApi = Lens.lens (\RequestDetails' {importAssetFromApiGatewayApi} -> importAssetFromApiGatewayApi) (\s@RequestDetails' {} a -> s {importAssetFromApiGatewayApi = a} :: RequestDetails)
+
+-- | Details about the import from Amazon S3 request.
+requestDetails_importAssetFromSignedUrl :: Lens.Lens' RequestDetails (Prelude.Maybe ImportAssetFromSignedUrlRequestDetails)
+requestDetails_importAssetFromSignedUrl = Lens.lens (\RequestDetails' {importAssetFromSignedUrl} -> importAssetFromSignedUrl) (\s@RequestDetails' {} a -> s {importAssetFromSignedUrl = a} :: RequestDetails)
+
+-- | Request details for the ImportAssetsFromLakeFormationTagPolicy job.
+requestDetails_importAssetsFromLakeFormationTagPolicy :: Lens.Lens' RequestDetails (Prelude.Maybe ImportAssetsFromLakeFormationTagPolicyRequestDetails)
+requestDetails_importAssetsFromLakeFormationTagPolicy = Lens.lens (\RequestDetails' {importAssetsFromLakeFormationTagPolicy} -> importAssetsFromLakeFormationTagPolicy) (\s@RequestDetails' {} a -> s {importAssetsFromLakeFormationTagPolicy = a} :: RequestDetails)
+
+-- | Details from an import from Amazon Redshift datashare request.
+requestDetails_importAssetsFromRedshiftDataShares :: Lens.Lens' RequestDetails (Prelude.Maybe ImportAssetsFromRedshiftDataSharesRequestDetails)
+requestDetails_importAssetsFromRedshiftDataShares = Lens.lens (\RequestDetails' {importAssetsFromRedshiftDataShares} -> importAssetsFromRedshiftDataShares) (\s@RequestDetails' {} a -> s {importAssetsFromRedshiftDataShares = a} :: RequestDetails)
+
+-- | Details about the import asset from API Gateway API request.
+requestDetails_importAssetsFromS3 :: Lens.Lens' RequestDetails (Prelude.Maybe ImportAssetsFromS3RequestDetails)
+requestDetails_importAssetsFromS3 = Lens.lens (\RequestDetails' {importAssetsFromS3} -> importAssetsFromS3) (\s@RequestDetails' {} a -> s {importAssetsFromS3 = a} :: RequestDetails)
+
+instance Prelude.Hashable RequestDetails where
+  hashWithSalt _salt RequestDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` createS3DataAccessFromS3Bucket
+      `Prelude.hashWithSalt` exportAssetToSignedUrl
+      `Prelude.hashWithSalt` exportAssetsToS3
+      `Prelude.hashWithSalt` exportRevisionsToS3
+      `Prelude.hashWithSalt` importAssetFromApiGatewayApi
+      `Prelude.hashWithSalt` importAssetFromSignedUrl
+      `Prelude.hashWithSalt` importAssetsFromLakeFormationTagPolicy
+      `Prelude.hashWithSalt` importAssetsFromRedshiftDataShares
+      `Prelude.hashWithSalt` importAssetsFromS3
+
+instance Prelude.NFData RequestDetails where
+  rnf RequestDetails' {..} =
+    Prelude.rnf createS3DataAccessFromS3Bucket
+      `Prelude.seq` Prelude.rnf exportAssetToSignedUrl
+      `Prelude.seq` Prelude.rnf exportAssetsToS3
+      `Prelude.seq` Prelude.rnf exportRevisionsToS3
+      `Prelude.seq` Prelude.rnf importAssetFromApiGatewayApi
+      `Prelude.seq` Prelude.rnf importAssetFromSignedUrl
+      `Prelude.seq` Prelude.rnf importAssetsFromLakeFormationTagPolicy
+      `Prelude.seq` Prelude.rnf importAssetsFromRedshiftDataShares
+      `Prelude.seq` Prelude.rnf importAssetsFromS3
+
+instance Data.ToJSON RequestDetails where
+  toJSON RequestDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CreateS3DataAccessFromS3Bucket" Data..=)
+              Prelude.<$> createS3DataAccessFromS3Bucket,
+            ("ExportAssetToSignedUrl" Data..=)
+              Prelude.<$> exportAssetToSignedUrl,
+            ("ExportAssetsToS3" Data..=)
+              Prelude.<$> exportAssetsToS3,
+            ("ExportRevisionsToS3" Data..=)
+              Prelude.<$> exportRevisionsToS3,
+            ("ImportAssetFromApiGatewayApi" Data..=)
+              Prelude.<$> importAssetFromApiGatewayApi,
+            ("ImportAssetFromSignedUrl" Data..=)
+              Prelude.<$> importAssetFromSignedUrl,
+            ("ImportAssetsFromLakeFormationTagPolicy" Data..=)
+              Prelude.<$> importAssetsFromLakeFormationTagPolicy,
+            ("ImportAssetsFromRedshiftDataShares" Data..=)
+              Prelude.<$> importAssetsFromRedshiftDataShares,
+            ("ImportAssetsFromS3" Data..=)
+              Prelude.<$> importAssetsFromS3
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/ResponseDetails.hs b/gen/Amazonka/DataExchange/Types/ResponseDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ResponseDetails.hs
@@ -0,0 +1,179 @@
+{-# 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.DataExchange.Types.ResponseDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ResponseDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.CreateS3DataAccessFromS3BucketResponseDetails
+import Amazonka.DataExchange.Types.ExportAssetToSignedUrlResponseDetails
+import Amazonka.DataExchange.Types.ExportAssetsToS3ResponseDetails
+import Amazonka.DataExchange.Types.ExportRevisionsToS3ResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetFromApiGatewayApiResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetFromSignedUrlResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromLakeFormationTagPolicyResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromRedshiftDataSharesResponseDetails
+import Amazonka.DataExchange.Types.ImportAssetsFromS3ResponseDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details for the response.
+--
+-- /See:/ 'newResponseDetails' smart constructor.
+data ResponseDetails = ResponseDetails'
+  { -- | Response details from the CreateS3DataAccessFromS3Bucket job.
+    createS3DataAccessFromS3Bucket :: Prelude.Maybe CreateS3DataAccessFromS3BucketResponseDetails,
+    -- | Details for the export to signed URL response.
+    exportAssetToSignedUrl :: Prelude.Maybe ExportAssetToSignedUrlResponseDetails,
+    -- | Details for the export to Amazon S3 response.
+    exportAssetsToS3 :: Prelude.Maybe ExportAssetsToS3ResponseDetails,
+    -- | Details for the export revisions to Amazon S3 response.
+    exportRevisionsToS3 :: Prelude.Maybe ExportRevisionsToS3ResponseDetails,
+    -- | The response details.
+    importAssetFromApiGatewayApi :: Prelude.Maybe ImportAssetFromApiGatewayApiResponseDetails,
+    -- | Details for the import from signed URL response.
+    importAssetFromSignedUrl :: Prelude.Maybe ImportAssetFromSignedUrlResponseDetails,
+    -- | Response details from the ImportAssetsFromLakeFormationTagPolicy job.
+    importAssetsFromLakeFormationTagPolicy :: Prelude.Maybe ImportAssetsFromLakeFormationTagPolicyResponseDetails,
+    -- | Details from an import from Amazon Redshift datashare response.
+    importAssetsFromRedshiftDataShares :: Prelude.Maybe ImportAssetsFromRedshiftDataSharesResponseDetails,
+    -- | Details for the import from Amazon S3 response.
+    importAssetsFromS3 :: Prelude.Maybe ImportAssetsFromS3ResponseDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResponseDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createS3DataAccessFromS3Bucket', 'responseDetails_createS3DataAccessFromS3Bucket' - Response details from the CreateS3DataAccessFromS3Bucket job.
+--
+-- 'exportAssetToSignedUrl', 'responseDetails_exportAssetToSignedUrl' - Details for the export to signed URL response.
+--
+-- 'exportAssetsToS3', 'responseDetails_exportAssetsToS3' - Details for the export to Amazon S3 response.
+--
+-- 'exportRevisionsToS3', 'responseDetails_exportRevisionsToS3' - Details for the export revisions to Amazon S3 response.
+--
+-- 'importAssetFromApiGatewayApi', 'responseDetails_importAssetFromApiGatewayApi' - The response details.
+--
+-- 'importAssetFromSignedUrl', 'responseDetails_importAssetFromSignedUrl' - Details for the import from signed URL response.
+--
+-- 'importAssetsFromLakeFormationTagPolicy', 'responseDetails_importAssetsFromLakeFormationTagPolicy' - Response details from the ImportAssetsFromLakeFormationTagPolicy job.
+--
+-- 'importAssetsFromRedshiftDataShares', 'responseDetails_importAssetsFromRedshiftDataShares' - Details from an import from Amazon Redshift datashare response.
+--
+-- 'importAssetsFromS3', 'responseDetails_importAssetsFromS3' - Details for the import from Amazon S3 response.
+newResponseDetails ::
+  ResponseDetails
+newResponseDetails =
+  ResponseDetails'
+    { createS3DataAccessFromS3Bucket =
+        Prelude.Nothing,
+      exportAssetToSignedUrl = Prelude.Nothing,
+      exportAssetsToS3 = Prelude.Nothing,
+      exportRevisionsToS3 = Prelude.Nothing,
+      importAssetFromApiGatewayApi = Prelude.Nothing,
+      importAssetFromSignedUrl = Prelude.Nothing,
+      importAssetsFromLakeFormationTagPolicy =
+        Prelude.Nothing,
+      importAssetsFromRedshiftDataShares = Prelude.Nothing,
+      importAssetsFromS3 = Prelude.Nothing
+    }
+
+-- | Response details from the CreateS3DataAccessFromS3Bucket job.
+responseDetails_createS3DataAccessFromS3Bucket :: Lens.Lens' ResponseDetails (Prelude.Maybe CreateS3DataAccessFromS3BucketResponseDetails)
+responseDetails_createS3DataAccessFromS3Bucket = Lens.lens (\ResponseDetails' {createS3DataAccessFromS3Bucket} -> createS3DataAccessFromS3Bucket) (\s@ResponseDetails' {} a -> s {createS3DataAccessFromS3Bucket = a} :: ResponseDetails)
+
+-- | Details for the export to signed URL response.
+responseDetails_exportAssetToSignedUrl :: Lens.Lens' ResponseDetails (Prelude.Maybe ExportAssetToSignedUrlResponseDetails)
+responseDetails_exportAssetToSignedUrl = Lens.lens (\ResponseDetails' {exportAssetToSignedUrl} -> exportAssetToSignedUrl) (\s@ResponseDetails' {} a -> s {exportAssetToSignedUrl = a} :: ResponseDetails)
+
+-- | Details for the export to Amazon S3 response.
+responseDetails_exportAssetsToS3 :: Lens.Lens' ResponseDetails (Prelude.Maybe ExportAssetsToS3ResponseDetails)
+responseDetails_exportAssetsToS3 = Lens.lens (\ResponseDetails' {exportAssetsToS3} -> exportAssetsToS3) (\s@ResponseDetails' {} a -> s {exportAssetsToS3 = a} :: ResponseDetails)
+
+-- | Details for the export revisions to Amazon S3 response.
+responseDetails_exportRevisionsToS3 :: Lens.Lens' ResponseDetails (Prelude.Maybe ExportRevisionsToS3ResponseDetails)
+responseDetails_exportRevisionsToS3 = Lens.lens (\ResponseDetails' {exportRevisionsToS3} -> exportRevisionsToS3) (\s@ResponseDetails' {} a -> s {exportRevisionsToS3 = a} :: ResponseDetails)
+
+-- | The response details.
+responseDetails_importAssetFromApiGatewayApi :: Lens.Lens' ResponseDetails (Prelude.Maybe ImportAssetFromApiGatewayApiResponseDetails)
+responseDetails_importAssetFromApiGatewayApi = Lens.lens (\ResponseDetails' {importAssetFromApiGatewayApi} -> importAssetFromApiGatewayApi) (\s@ResponseDetails' {} a -> s {importAssetFromApiGatewayApi = a} :: ResponseDetails)
+
+-- | Details for the import from signed URL response.
+responseDetails_importAssetFromSignedUrl :: Lens.Lens' ResponseDetails (Prelude.Maybe ImportAssetFromSignedUrlResponseDetails)
+responseDetails_importAssetFromSignedUrl = Lens.lens (\ResponseDetails' {importAssetFromSignedUrl} -> importAssetFromSignedUrl) (\s@ResponseDetails' {} a -> s {importAssetFromSignedUrl = a} :: ResponseDetails)
+
+-- | Response details from the ImportAssetsFromLakeFormationTagPolicy job.
+responseDetails_importAssetsFromLakeFormationTagPolicy :: Lens.Lens' ResponseDetails (Prelude.Maybe ImportAssetsFromLakeFormationTagPolicyResponseDetails)
+responseDetails_importAssetsFromLakeFormationTagPolicy = Lens.lens (\ResponseDetails' {importAssetsFromLakeFormationTagPolicy} -> importAssetsFromLakeFormationTagPolicy) (\s@ResponseDetails' {} a -> s {importAssetsFromLakeFormationTagPolicy = a} :: ResponseDetails)
+
+-- | Details from an import from Amazon Redshift datashare response.
+responseDetails_importAssetsFromRedshiftDataShares :: Lens.Lens' ResponseDetails (Prelude.Maybe ImportAssetsFromRedshiftDataSharesResponseDetails)
+responseDetails_importAssetsFromRedshiftDataShares = Lens.lens (\ResponseDetails' {importAssetsFromRedshiftDataShares} -> importAssetsFromRedshiftDataShares) (\s@ResponseDetails' {} a -> s {importAssetsFromRedshiftDataShares = a} :: ResponseDetails)
+
+-- | Details for the import from Amazon S3 response.
+responseDetails_importAssetsFromS3 :: Lens.Lens' ResponseDetails (Prelude.Maybe ImportAssetsFromS3ResponseDetails)
+responseDetails_importAssetsFromS3 = Lens.lens (\ResponseDetails' {importAssetsFromS3} -> importAssetsFromS3) (\s@ResponseDetails' {} a -> s {importAssetsFromS3 = a} :: ResponseDetails)
+
+instance Data.FromJSON ResponseDetails where
+  parseJSON =
+    Data.withObject
+      "ResponseDetails"
+      ( \x ->
+          ResponseDetails'
+            Prelude.<$> (x Data..:? "CreateS3DataAccessFromS3Bucket")
+            Prelude.<*> (x Data..:? "ExportAssetToSignedUrl")
+            Prelude.<*> (x Data..:? "ExportAssetsToS3")
+            Prelude.<*> (x Data..:? "ExportRevisionsToS3")
+            Prelude.<*> (x Data..:? "ImportAssetFromApiGatewayApi")
+            Prelude.<*> (x Data..:? "ImportAssetFromSignedUrl")
+            Prelude.<*> (x Data..:? "ImportAssetsFromLakeFormationTagPolicy")
+            Prelude.<*> (x Data..:? "ImportAssetsFromRedshiftDataShares")
+            Prelude.<*> (x Data..:? "ImportAssetsFromS3")
+      )
+
+instance Prelude.Hashable ResponseDetails where
+  hashWithSalt _salt ResponseDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` createS3DataAccessFromS3Bucket
+      `Prelude.hashWithSalt` exportAssetToSignedUrl
+      `Prelude.hashWithSalt` exportAssetsToS3
+      `Prelude.hashWithSalt` exportRevisionsToS3
+      `Prelude.hashWithSalt` importAssetFromApiGatewayApi
+      `Prelude.hashWithSalt` importAssetFromSignedUrl
+      `Prelude.hashWithSalt` importAssetsFromLakeFormationTagPolicy
+      `Prelude.hashWithSalt` importAssetsFromRedshiftDataShares
+      `Prelude.hashWithSalt` importAssetsFromS3
+
+instance Prelude.NFData ResponseDetails where
+  rnf ResponseDetails' {..} =
+    Prelude.rnf createS3DataAccessFromS3Bucket
+      `Prelude.seq` Prelude.rnf exportAssetToSignedUrl
+      `Prelude.seq` Prelude.rnf exportAssetsToS3
+      `Prelude.seq` Prelude.rnf exportRevisionsToS3
+      `Prelude.seq` Prelude.rnf importAssetFromApiGatewayApi
+      `Prelude.seq` Prelude.rnf importAssetFromSignedUrl
+      `Prelude.seq` Prelude.rnf importAssetsFromLakeFormationTagPolicy
+      `Prelude.seq` Prelude.rnf importAssetsFromRedshiftDataShares
+      `Prelude.seq` Prelude.rnf importAssetsFromS3
diff --git a/gen/Amazonka/DataExchange/Types/RevisionDestinationEntry.hs b/gen/Amazonka/DataExchange/Types/RevisionDestinationEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/RevisionDestinationEntry.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.RevisionDestinationEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.RevisionDestinationEntry 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 destination where the assets in the revision will be exported.
+--
+-- /See:/ 'newRevisionDestinationEntry' smart constructor.
+data RevisionDestinationEntry = RevisionDestinationEntry'
+  { -- | A string representing the pattern for generated names of the individual
+    -- assets in the revision. For more information about key patterns, see
+    -- <https://docs.aws.amazon.com/data-exchange/latest/userguide/jobs.html#revision-export-keypatterns Key patterns when exporting revisions>.
+    keyPattern :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket that is the destination for the assets in the
+    -- revision.
+    bucket :: Prelude.Text,
+    -- | The unique identifier for the revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevisionDestinationEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyPattern', 'revisionDestinationEntry_keyPattern' - A string representing the pattern for generated names of the individual
+-- assets in the revision. For more information about key patterns, see
+-- <https://docs.aws.amazon.com/data-exchange/latest/userguide/jobs.html#revision-export-keypatterns Key patterns when exporting revisions>.
+--
+-- 'bucket', 'revisionDestinationEntry_bucket' - The Amazon S3 bucket that is the destination for the assets in the
+-- revision.
+--
+-- 'revisionId', 'revisionDestinationEntry_revisionId' - The unique identifier for the revision.
+newRevisionDestinationEntry ::
+  -- | 'bucket'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  RevisionDestinationEntry
+newRevisionDestinationEntry pBucket_ pRevisionId_ =
+  RevisionDestinationEntry'
+    { keyPattern =
+        Prelude.Nothing,
+      bucket = pBucket_,
+      revisionId = pRevisionId_
+    }
+
+-- | A string representing the pattern for generated names of the individual
+-- assets in the revision. For more information about key patterns, see
+-- <https://docs.aws.amazon.com/data-exchange/latest/userguide/jobs.html#revision-export-keypatterns Key patterns when exporting revisions>.
+revisionDestinationEntry_keyPattern :: Lens.Lens' RevisionDestinationEntry (Prelude.Maybe Prelude.Text)
+revisionDestinationEntry_keyPattern = Lens.lens (\RevisionDestinationEntry' {keyPattern} -> keyPattern) (\s@RevisionDestinationEntry' {} a -> s {keyPattern = a} :: RevisionDestinationEntry)
+
+-- | The Amazon S3 bucket that is the destination for the assets in the
+-- revision.
+revisionDestinationEntry_bucket :: Lens.Lens' RevisionDestinationEntry Prelude.Text
+revisionDestinationEntry_bucket = Lens.lens (\RevisionDestinationEntry' {bucket} -> bucket) (\s@RevisionDestinationEntry' {} a -> s {bucket = a} :: RevisionDestinationEntry)
+
+-- | The unique identifier for the revision.
+revisionDestinationEntry_revisionId :: Lens.Lens' RevisionDestinationEntry Prelude.Text
+revisionDestinationEntry_revisionId = Lens.lens (\RevisionDestinationEntry' {revisionId} -> revisionId) (\s@RevisionDestinationEntry' {} a -> s {revisionId = a} :: RevisionDestinationEntry)
+
+instance Data.FromJSON RevisionDestinationEntry where
+  parseJSON =
+    Data.withObject
+      "RevisionDestinationEntry"
+      ( \x ->
+          RevisionDestinationEntry'
+            Prelude.<$> (x Data..:? "KeyPattern")
+            Prelude.<*> (x Data..: "Bucket")
+            Prelude.<*> (x Data..: "RevisionId")
+      )
+
+instance Prelude.Hashable RevisionDestinationEntry where
+  hashWithSalt _salt RevisionDestinationEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyPattern
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData RevisionDestinationEntry where
+  rnf RevisionDestinationEntry' {..} =
+    Prelude.rnf keyPattern
+      `Prelude.seq` Prelude.rnf bucket
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToJSON RevisionDestinationEntry where
+  toJSON RevisionDestinationEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("KeyPattern" Data..=) Prelude.<$> keyPattern,
+            Prelude.Just ("Bucket" Data..= bucket),
+            Prelude.Just ("RevisionId" Data..= revisionId)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/RevisionEntry.hs b/gen/Amazonka/DataExchange/Types/RevisionEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/RevisionEntry.hs
@@ -0,0 +1,246 @@
+{-# 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.DataExchange.Types.RevisionEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.RevisionEntry 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 revision is a container for one or more assets.
+--
+-- /See:/ 'newRevisionEntry' smart constructor.
+data RevisionEntry = RevisionEntry'
+  { -- | An optional comment about the revision.
+    comment :: Prelude.Maybe Prelude.Text,
+    -- | To publish a revision to a data set in a product, the revision must
+    -- first be finalized. Finalizing a revision tells AWS Data Exchange that
+    -- your changes to the assets in the revision are complete. After it\'s in
+    -- this read-only state, you can publish the revision to your products.
+    -- Finalized revisions can be published through the AWS Data Exchange
+    -- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+    -- Marketplace Catalog API action. When using the API, revisions are
+    -- uniquely identified by their ARN.
+    finalized :: Prelude.Maybe Prelude.Bool,
+    -- | A required comment to inform subscribers of the reason their access to
+    -- the revision was revoked.
+    revocationComment :: Prelude.Maybe Prelude.Text,
+    -- | A status indicating that subscribers\' access to the revision was
+    -- revoked.
+    revoked :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time that the revision was revoked, in ISO 8601 format.
+    revokedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The revision ID of the owned revision corresponding to the entitled
+    -- revision being viewed. This parameter is returned when a revision owner
+    -- is viewing the entitled copy of its owned revision.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN for the revision.
+    arn :: Prelude.Text,
+    -- | The date and time that the revision was created, in ISO 8601 format.
+    createdAt :: Data.ISO8601,
+    -- | The unique identifier for the data set associated with the data set
+    -- revision.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for the revision.
+    id :: Prelude.Text,
+    -- | The date and time that the revision was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevisionEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comment', 'revisionEntry_comment' - An optional comment about the revision.
+--
+-- 'finalized', 'revisionEntry_finalized' - To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- your changes to the assets in the revision are complete. After it\'s in
+-- this read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+--
+-- 'revocationComment', 'revisionEntry_revocationComment' - A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+--
+-- 'revoked', 'revisionEntry_revoked' - A status indicating that subscribers\' access to the revision was
+-- revoked.
+--
+-- 'revokedAt', 'revisionEntry_revokedAt' - The date and time that the revision was revoked, in ISO 8601 format.
+--
+-- 'sourceId', 'revisionEntry_sourceId' - The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+--
+-- 'arn', 'revisionEntry_arn' - The ARN for the revision.
+--
+-- 'createdAt', 'revisionEntry_createdAt' - The date and time that the revision was created, in ISO 8601 format.
+--
+-- 'dataSetId', 'revisionEntry_dataSetId' - The unique identifier for the data set associated with the data set
+-- revision.
+--
+-- 'id', 'revisionEntry_id' - The unique identifier for the revision.
+--
+-- 'updatedAt', 'revisionEntry_updatedAt' - The date and time that the revision was last updated, in ISO 8601
+-- format.
+newRevisionEntry ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'updatedAt'
+  Prelude.UTCTime ->
+  RevisionEntry
+newRevisionEntry
+  pArn_
+  pCreatedAt_
+  pDataSetId_
+  pId_
+  pUpdatedAt_ =
+    RevisionEntry'
+      { comment = Prelude.Nothing,
+        finalized = Prelude.Nothing,
+        revocationComment = Prelude.Nothing,
+        revoked = Prelude.Nothing,
+        revokedAt = Prelude.Nothing,
+        sourceId = Prelude.Nothing,
+        arn = pArn_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        dataSetId = pDataSetId_,
+        id = pId_,
+        updatedAt = Data._Time Lens.# pUpdatedAt_
+      }
+
+-- | An optional comment about the revision.
+revisionEntry_comment :: Lens.Lens' RevisionEntry (Prelude.Maybe Prelude.Text)
+revisionEntry_comment = Lens.lens (\RevisionEntry' {comment} -> comment) (\s@RevisionEntry' {} a -> s {comment = a} :: RevisionEntry)
+
+-- | To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- your changes to the assets in the revision are complete. After it\'s in
+-- this read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+revisionEntry_finalized :: Lens.Lens' RevisionEntry (Prelude.Maybe Prelude.Bool)
+revisionEntry_finalized = Lens.lens (\RevisionEntry' {finalized} -> finalized) (\s@RevisionEntry' {} a -> s {finalized = a} :: RevisionEntry)
+
+-- | A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+revisionEntry_revocationComment :: Lens.Lens' RevisionEntry (Prelude.Maybe Prelude.Text)
+revisionEntry_revocationComment = Lens.lens (\RevisionEntry' {revocationComment} -> revocationComment) (\s@RevisionEntry' {} a -> s {revocationComment = a} :: RevisionEntry)
+
+-- | A status indicating that subscribers\' access to the revision was
+-- revoked.
+revisionEntry_revoked :: Lens.Lens' RevisionEntry (Prelude.Maybe Prelude.Bool)
+revisionEntry_revoked = Lens.lens (\RevisionEntry' {revoked} -> revoked) (\s@RevisionEntry' {} a -> s {revoked = a} :: RevisionEntry)
+
+-- | The date and time that the revision was revoked, in ISO 8601 format.
+revisionEntry_revokedAt :: Lens.Lens' RevisionEntry (Prelude.Maybe Prelude.UTCTime)
+revisionEntry_revokedAt = Lens.lens (\RevisionEntry' {revokedAt} -> revokedAt) (\s@RevisionEntry' {} a -> s {revokedAt = a} :: RevisionEntry) Prelude.. Lens.mapping Data._Time
+
+-- | The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+revisionEntry_sourceId :: Lens.Lens' RevisionEntry (Prelude.Maybe Prelude.Text)
+revisionEntry_sourceId = Lens.lens (\RevisionEntry' {sourceId} -> sourceId) (\s@RevisionEntry' {} a -> s {sourceId = a} :: RevisionEntry)
+
+-- | The ARN for the revision.
+revisionEntry_arn :: Lens.Lens' RevisionEntry Prelude.Text
+revisionEntry_arn = Lens.lens (\RevisionEntry' {arn} -> arn) (\s@RevisionEntry' {} a -> s {arn = a} :: RevisionEntry)
+
+-- | The date and time that the revision was created, in ISO 8601 format.
+revisionEntry_createdAt :: Lens.Lens' RevisionEntry Prelude.UTCTime
+revisionEntry_createdAt = Lens.lens (\RevisionEntry' {createdAt} -> createdAt) (\s@RevisionEntry' {} a -> s {createdAt = a} :: RevisionEntry) Prelude.. Data._Time
+
+-- | The unique identifier for the data set associated with the data set
+-- revision.
+revisionEntry_dataSetId :: Lens.Lens' RevisionEntry Prelude.Text
+revisionEntry_dataSetId = Lens.lens (\RevisionEntry' {dataSetId} -> dataSetId) (\s@RevisionEntry' {} a -> s {dataSetId = a} :: RevisionEntry)
+
+-- | The unique identifier for the revision.
+revisionEntry_id :: Lens.Lens' RevisionEntry Prelude.Text
+revisionEntry_id = Lens.lens (\RevisionEntry' {id} -> id) (\s@RevisionEntry' {} a -> s {id = a} :: RevisionEntry)
+
+-- | The date and time that the revision was last updated, in ISO 8601
+-- format.
+revisionEntry_updatedAt :: Lens.Lens' RevisionEntry Prelude.UTCTime
+revisionEntry_updatedAt = Lens.lens (\RevisionEntry' {updatedAt} -> updatedAt) (\s@RevisionEntry' {} a -> s {updatedAt = a} :: RevisionEntry) Prelude.. Data._Time
+
+instance Data.FromJSON RevisionEntry where
+  parseJSON =
+    Data.withObject
+      "RevisionEntry"
+      ( \x ->
+          RevisionEntry'
+            Prelude.<$> (x Data..:? "Comment")
+            Prelude.<*> (x Data..:? "Finalized")
+            Prelude.<*> (x Data..:? "RevocationComment")
+            Prelude.<*> (x Data..:? "Revoked")
+            Prelude.<*> (x Data..:? "RevokedAt")
+            Prelude.<*> (x Data..:? "SourceId")
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "CreatedAt")
+            Prelude.<*> (x Data..: "DataSetId")
+            Prelude.<*> (x Data..: "Id")
+            Prelude.<*> (x Data..: "UpdatedAt")
+      )
+
+instance Prelude.Hashable RevisionEntry where
+  hashWithSalt _salt RevisionEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` comment
+      `Prelude.hashWithSalt` finalized
+      `Prelude.hashWithSalt` revocationComment
+      `Prelude.hashWithSalt` revoked
+      `Prelude.hashWithSalt` revokedAt
+      `Prelude.hashWithSalt` sourceId
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` updatedAt
+
+instance Prelude.NFData RevisionEntry where
+  rnf RevisionEntry' {..} =
+    Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf finalized
+      `Prelude.seq` Prelude.rnf revocationComment
+      `Prelude.seq` Prelude.rnf revoked
+      `Prelude.seq` Prelude.rnf revokedAt
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf updatedAt
diff --git a/gen/Amazonka/DataExchange/Types/RevisionPublished.hs b/gen/Amazonka/DataExchange/Types/RevisionPublished.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/RevisionPublished.hs
@@ -0,0 +1,77 @@
+{-# 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.DataExchange.Types.RevisionPublished
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.RevisionPublished 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 published revision.
+--
+-- /See:/ 'newRevisionPublished' smart constructor.
+data RevisionPublished = RevisionPublished'
+  { -- | The data set ID of the published revision.
+    dataSetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevisionPublished' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSetId', 'revisionPublished_dataSetId' - The data set ID of the published revision.
+newRevisionPublished ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  RevisionPublished
+newRevisionPublished pDataSetId_ =
+  RevisionPublished' {dataSetId = pDataSetId_}
+
+-- | The data set ID of the published revision.
+revisionPublished_dataSetId :: Lens.Lens' RevisionPublished Prelude.Text
+revisionPublished_dataSetId = Lens.lens (\RevisionPublished' {dataSetId} -> dataSetId) (\s@RevisionPublished' {} a -> s {dataSetId = a} :: RevisionPublished)
+
+instance Data.FromJSON RevisionPublished where
+  parseJSON =
+    Data.withObject
+      "RevisionPublished"
+      ( \x ->
+          RevisionPublished'
+            Prelude.<$> (x Data..: "DataSetId")
+      )
+
+instance Prelude.Hashable RevisionPublished where
+  hashWithSalt _salt RevisionPublished' {..} =
+    _salt `Prelude.hashWithSalt` dataSetId
+
+instance Prelude.NFData RevisionPublished where
+  rnf RevisionPublished' {..} = Prelude.rnf dataSetId
+
+instance Data.ToJSON RevisionPublished where
+  toJSON RevisionPublished' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("DataSetId" Data..= dataSetId)]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/S3DataAccessAsset.hs b/gen/Amazonka/DataExchange/Types/S3DataAccessAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/S3DataAccessAsset.hs
@@ -0,0 +1,134 @@
+{-# 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.DataExchange.Types.S3DataAccessAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.S3DataAccessAsset 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 Amazon S3 data access that is the asset.
+--
+-- /See:/ 'newS3DataAccessAsset' smart constructor.
+data S3DataAccessAsset = S3DataAccessAsset'
+  { -- | The Amazon S3 bucket used for hosting shared data in the Amazon S3 data
+    -- access.
+    keyPrefixes :: Prelude.Maybe [Prelude.Text],
+    -- | S3 keys made available using this asset.
+    keys :: Prelude.Maybe [Prelude.Text],
+    -- | The automatically-generated bucket-style alias for your Amazon S3 Access
+    -- Point. Customers can access their entitled data using the S3 Access
+    -- Point alias.
+    s3AccessPointAlias :: Prelude.Maybe Prelude.Text,
+    -- | The ARN for your Amazon S3 Access Point. Customers can also access their
+    -- entitled data using the S3 Access Point ARN.
+    s3AccessPointArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket hosting data to be shared in the S3 data access.
+    bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3DataAccessAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyPrefixes', 's3DataAccessAsset_keyPrefixes' - The Amazon S3 bucket used for hosting shared data in the Amazon S3 data
+-- access.
+--
+-- 'keys', 's3DataAccessAsset_keys' - S3 keys made available using this asset.
+--
+-- 's3AccessPointAlias', 's3DataAccessAsset_s3AccessPointAlias' - The automatically-generated bucket-style alias for your Amazon S3 Access
+-- Point. Customers can access their entitled data using the S3 Access
+-- Point alias.
+--
+-- 's3AccessPointArn', 's3DataAccessAsset_s3AccessPointArn' - The ARN for your Amazon S3 Access Point. Customers can also access their
+-- entitled data using the S3 Access Point ARN.
+--
+-- 'bucket', 's3DataAccessAsset_bucket' - The Amazon S3 bucket hosting data to be shared in the S3 data access.
+newS3DataAccessAsset ::
+  -- | 'bucket'
+  Prelude.Text ->
+  S3DataAccessAsset
+newS3DataAccessAsset pBucket_ =
+  S3DataAccessAsset'
+    { keyPrefixes = Prelude.Nothing,
+      keys = Prelude.Nothing,
+      s3AccessPointAlias = Prelude.Nothing,
+      s3AccessPointArn = Prelude.Nothing,
+      bucket = pBucket_
+    }
+
+-- | The Amazon S3 bucket used for hosting shared data in the Amazon S3 data
+-- access.
+s3DataAccessAsset_keyPrefixes :: Lens.Lens' S3DataAccessAsset (Prelude.Maybe [Prelude.Text])
+s3DataAccessAsset_keyPrefixes = Lens.lens (\S3DataAccessAsset' {keyPrefixes} -> keyPrefixes) (\s@S3DataAccessAsset' {} a -> s {keyPrefixes = a} :: S3DataAccessAsset) Prelude.. Lens.mapping Lens.coerced
+
+-- | S3 keys made available using this asset.
+s3DataAccessAsset_keys :: Lens.Lens' S3DataAccessAsset (Prelude.Maybe [Prelude.Text])
+s3DataAccessAsset_keys = Lens.lens (\S3DataAccessAsset' {keys} -> keys) (\s@S3DataAccessAsset' {} a -> s {keys = a} :: S3DataAccessAsset) Prelude.. Lens.mapping Lens.coerced
+
+-- | The automatically-generated bucket-style alias for your Amazon S3 Access
+-- Point. Customers can access their entitled data using the S3 Access
+-- Point alias.
+s3DataAccessAsset_s3AccessPointAlias :: Lens.Lens' S3DataAccessAsset (Prelude.Maybe Prelude.Text)
+s3DataAccessAsset_s3AccessPointAlias = Lens.lens (\S3DataAccessAsset' {s3AccessPointAlias} -> s3AccessPointAlias) (\s@S3DataAccessAsset' {} a -> s {s3AccessPointAlias = a} :: S3DataAccessAsset)
+
+-- | The ARN for your Amazon S3 Access Point. Customers can also access their
+-- entitled data using the S3 Access Point ARN.
+s3DataAccessAsset_s3AccessPointArn :: Lens.Lens' S3DataAccessAsset (Prelude.Maybe Prelude.Text)
+s3DataAccessAsset_s3AccessPointArn = Lens.lens (\S3DataAccessAsset' {s3AccessPointArn} -> s3AccessPointArn) (\s@S3DataAccessAsset' {} a -> s {s3AccessPointArn = a} :: S3DataAccessAsset)
+
+-- | The Amazon S3 bucket hosting data to be shared in the S3 data access.
+s3DataAccessAsset_bucket :: Lens.Lens' S3DataAccessAsset Prelude.Text
+s3DataAccessAsset_bucket = Lens.lens (\S3DataAccessAsset' {bucket} -> bucket) (\s@S3DataAccessAsset' {} a -> s {bucket = a} :: S3DataAccessAsset)
+
+instance Data.FromJSON S3DataAccessAsset where
+  parseJSON =
+    Data.withObject
+      "S3DataAccessAsset"
+      ( \x ->
+          S3DataAccessAsset'
+            Prelude.<$> (x Data..:? "KeyPrefixes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Keys" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "S3AccessPointAlias")
+            Prelude.<*> (x Data..:? "S3AccessPointArn")
+            Prelude.<*> (x Data..: "Bucket")
+      )
+
+instance Prelude.Hashable S3DataAccessAsset where
+  hashWithSalt _salt S3DataAccessAsset' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyPrefixes
+      `Prelude.hashWithSalt` keys
+      `Prelude.hashWithSalt` s3AccessPointAlias
+      `Prelude.hashWithSalt` s3AccessPointArn
+      `Prelude.hashWithSalt` bucket
+
+instance Prelude.NFData S3DataAccessAsset where
+  rnf S3DataAccessAsset' {..} =
+    Prelude.rnf keyPrefixes
+      `Prelude.seq` Prelude.rnf keys
+      `Prelude.seq` Prelude.rnf s3AccessPointAlias
+      `Prelude.seq` Prelude.rnf s3AccessPointArn
+      `Prelude.seq` Prelude.rnf bucket
diff --git a/gen/Amazonka/DataExchange/Types/S3DataAccessAssetSourceEntry.hs b/gen/Amazonka/DataExchange/Types/S3DataAccessAssetSourceEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/S3DataAccessAssetSourceEntry.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.DataExchange.Types.S3DataAccessAssetSourceEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.S3DataAccessAssetSourceEntry 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
+
+-- | Source details for an Amazon S3 data access asset.
+--
+-- /See:/ 'newS3DataAccessAssetSourceEntry' smart constructor.
+data S3DataAccessAssetSourceEntry = S3DataAccessAssetSourceEntry'
+  { -- | Organizes Amazon S3 asset key prefixes stored in an Amazon S3 bucket.
+    keyPrefixes :: Prelude.Maybe [Prelude.Text],
+    -- | The keys used to create the Amazon S3 data access.
+    keys :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon S3 bucket used for hosting shared data in the Amazon S3 data
+    -- access.
+    bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3DataAccessAssetSourceEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyPrefixes', 's3DataAccessAssetSourceEntry_keyPrefixes' - Organizes Amazon S3 asset key prefixes stored in an Amazon S3 bucket.
+--
+-- 'keys', 's3DataAccessAssetSourceEntry_keys' - The keys used to create the Amazon S3 data access.
+--
+-- 'bucket', 's3DataAccessAssetSourceEntry_bucket' - The Amazon S3 bucket used for hosting shared data in the Amazon S3 data
+-- access.
+newS3DataAccessAssetSourceEntry ::
+  -- | 'bucket'
+  Prelude.Text ->
+  S3DataAccessAssetSourceEntry
+newS3DataAccessAssetSourceEntry pBucket_ =
+  S3DataAccessAssetSourceEntry'
+    { keyPrefixes =
+        Prelude.Nothing,
+      keys = Prelude.Nothing,
+      bucket = pBucket_
+    }
+
+-- | Organizes Amazon S3 asset key prefixes stored in an Amazon S3 bucket.
+s3DataAccessAssetSourceEntry_keyPrefixes :: Lens.Lens' S3DataAccessAssetSourceEntry (Prelude.Maybe [Prelude.Text])
+s3DataAccessAssetSourceEntry_keyPrefixes = Lens.lens (\S3DataAccessAssetSourceEntry' {keyPrefixes} -> keyPrefixes) (\s@S3DataAccessAssetSourceEntry' {} a -> s {keyPrefixes = a} :: S3DataAccessAssetSourceEntry) Prelude.. Lens.mapping Lens.coerced
+
+-- | The keys used to create the Amazon S3 data access.
+s3DataAccessAssetSourceEntry_keys :: Lens.Lens' S3DataAccessAssetSourceEntry (Prelude.Maybe [Prelude.Text])
+s3DataAccessAssetSourceEntry_keys = Lens.lens (\S3DataAccessAssetSourceEntry' {keys} -> keys) (\s@S3DataAccessAssetSourceEntry' {} a -> s {keys = a} :: S3DataAccessAssetSourceEntry) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon S3 bucket used for hosting shared data in the Amazon S3 data
+-- access.
+s3DataAccessAssetSourceEntry_bucket :: Lens.Lens' S3DataAccessAssetSourceEntry Prelude.Text
+s3DataAccessAssetSourceEntry_bucket = Lens.lens (\S3DataAccessAssetSourceEntry' {bucket} -> bucket) (\s@S3DataAccessAssetSourceEntry' {} a -> s {bucket = a} :: S3DataAccessAssetSourceEntry)
+
+instance Data.FromJSON S3DataAccessAssetSourceEntry where
+  parseJSON =
+    Data.withObject
+      "S3DataAccessAssetSourceEntry"
+      ( \x ->
+          S3DataAccessAssetSourceEntry'
+            Prelude.<$> (x Data..:? "KeyPrefixes" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Keys" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Bucket")
+      )
+
+instance
+  Prelude.Hashable
+    S3DataAccessAssetSourceEntry
+  where
+  hashWithSalt _salt S3DataAccessAssetSourceEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` keyPrefixes
+      `Prelude.hashWithSalt` keys
+      `Prelude.hashWithSalt` bucket
+
+instance Prelude.NFData S3DataAccessAssetSourceEntry where
+  rnf S3DataAccessAssetSourceEntry' {..} =
+    Prelude.rnf keyPrefixes
+      `Prelude.seq` Prelude.rnf keys
+      `Prelude.seq` Prelude.rnf bucket
+
+instance Data.ToJSON S3DataAccessAssetSourceEntry where
+  toJSON S3DataAccessAssetSourceEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("KeyPrefixes" Data..=) Prelude.<$> keyPrefixes,
+            ("Keys" Data..=) Prelude.<$> keys,
+            Prelude.Just ("Bucket" Data..= bucket)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/S3SnapshotAsset.hs b/gen/Amazonka/DataExchange/Types/S3SnapshotAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/S3SnapshotAsset.hs
@@ -0,0 +1,69 @@
+{-# 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.DataExchange.Types.S3SnapshotAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.S3SnapshotAsset 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 Amazon S3 object that is the asset.
+--
+-- /See:/ 'newS3SnapshotAsset' smart constructor.
+data S3SnapshotAsset = S3SnapshotAsset'
+  { -- | The size of the Amazon S3 object that is the object.
+    size :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3SnapshotAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'size', 's3SnapshotAsset_size' - The size of the Amazon S3 object that is the object.
+newS3SnapshotAsset ::
+  -- | 'size'
+  Prelude.Double ->
+  S3SnapshotAsset
+newS3SnapshotAsset pSize_ =
+  S3SnapshotAsset' {size = pSize_}
+
+-- | The size of the Amazon S3 object that is the object.
+s3SnapshotAsset_size :: Lens.Lens' S3SnapshotAsset Prelude.Double
+s3SnapshotAsset_size = Lens.lens (\S3SnapshotAsset' {size} -> size) (\s@S3SnapshotAsset' {} a -> s {size = a} :: S3SnapshotAsset)
+
+instance Data.FromJSON S3SnapshotAsset where
+  parseJSON =
+    Data.withObject
+      "S3SnapshotAsset"
+      ( \x ->
+          S3SnapshotAsset' Prelude.<$> (x Data..: "Size")
+      )
+
+instance Prelude.Hashable S3SnapshotAsset where
+  hashWithSalt _salt S3SnapshotAsset' {..} =
+    _salt `Prelude.hashWithSalt` size
+
+instance Prelude.NFData S3SnapshotAsset where
+  rnf S3SnapshotAsset' {..} = Prelude.rnf size
diff --git a/gen/Amazonka/DataExchange/Types/ServerSideEncryptionTypes.hs b/gen/Amazonka/DataExchange/Types/ServerSideEncryptionTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/ServerSideEncryptionTypes.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.DataExchange.Types.ServerSideEncryptionTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.ServerSideEncryptionTypes
+  ( ServerSideEncryptionTypes
+      ( ..,
+        ServerSideEncryptionTypes_AES256,
+        ServerSideEncryptionTypes_Aws_kms
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServerSideEncryptionTypes = ServerSideEncryptionTypes'
+  { fromServerSideEncryptionTypes ::
+      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 ServerSideEncryptionTypes_AES256 :: ServerSideEncryptionTypes
+pattern ServerSideEncryptionTypes_AES256 = ServerSideEncryptionTypes' "AES256"
+
+pattern ServerSideEncryptionTypes_Aws_kms :: ServerSideEncryptionTypes
+pattern ServerSideEncryptionTypes_Aws_kms = ServerSideEncryptionTypes' "aws:kms"
+
+{-# COMPLETE
+  ServerSideEncryptionTypes_AES256,
+  ServerSideEncryptionTypes_Aws_kms,
+  ServerSideEncryptionTypes'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/State.hs b/gen/Amazonka/DataExchange/Types/State.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/State.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.DataExchange.Types.State
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.State
+  ( State
+      ( ..,
+        State_CANCELLED,
+        State_COMPLETED,
+        State_ERROR,
+        State_IN_PROGRESS,
+        State_TIMED_OUT,
+        State_WAITING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype State = State' {fromState :: 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 State_CANCELLED :: State
+pattern State_CANCELLED = State' "CANCELLED"
+
+pattern State_COMPLETED :: State
+pattern State_COMPLETED = State' "COMPLETED"
+
+pattern State_ERROR :: State
+pattern State_ERROR = State' "ERROR"
+
+pattern State_IN_PROGRESS :: State
+pattern State_IN_PROGRESS = State' "IN_PROGRESS"
+
+pattern State_TIMED_OUT :: State
+pattern State_TIMED_OUT = State' "TIMED_OUT"
+
+pattern State_WAITING :: State
+pattern State_WAITING = State' "WAITING"
+
+{-# COMPLETE
+  State_CANCELLED,
+  State_COMPLETED,
+  State_ERROR,
+  State_IN_PROGRESS,
+  State_TIMED_OUT,
+  State_WAITING,
+  State'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/TableLFTagPolicy.hs b/gen/Amazonka/DataExchange/Types/TableLFTagPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/TableLFTagPolicy.hs
@@ -0,0 +1,69 @@
+{-# 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.DataExchange.Types.TableLFTagPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.TableLFTagPolicy where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.LFTag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The LF-tag policy for a table resource.
+--
+-- /See:/ 'newTableLFTagPolicy' smart constructor.
+data TableLFTagPolicy = TableLFTagPolicy'
+  { -- | A list of LF-tag conditions that apply to table resources.
+    expression :: [LFTag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TableLFTagPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expression', 'tableLFTagPolicy_expression' - A list of LF-tag conditions that apply to table resources.
+newTableLFTagPolicy ::
+  TableLFTagPolicy
+newTableLFTagPolicy =
+  TableLFTagPolicy' {expression = Prelude.mempty}
+
+-- | A list of LF-tag conditions that apply to table resources.
+tableLFTagPolicy_expression :: Lens.Lens' TableLFTagPolicy [LFTag]
+tableLFTagPolicy_expression = Lens.lens (\TableLFTagPolicy' {expression} -> expression) (\s@TableLFTagPolicy' {} a -> s {expression = a} :: TableLFTagPolicy) Prelude.. Lens.coerced
+
+instance Data.FromJSON TableLFTagPolicy where
+  parseJSON =
+    Data.withObject
+      "TableLFTagPolicy"
+      ( \x ->
+          TableLFTagPolicy'
+            Prelude.<$> (x Data..:? "Expression" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable TableLFTagPolicy where
+  hashWithSalt _salt TableLFTagPolicy' {..} =
+    _salt `Prelude.hashWithSalt` expression
+
+instance Prelude.NFData TableLFTagPolicy where
+  rnf TableLFTagPolicy' {..} = Prelude.rnf expression
diff --git a/gen/Amazonka/DataExchange/Types/TableLFTagPolicyAndPermissions.hs b/gen/Amazonka/DataExchange/Types/TableLFTagPolicyAndPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/TableLFTagPolicyAndPermissions.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.DataExchange.Types.TableLFTagPolicyAndPermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.TableLFTagPolicyAndPermissions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types.LFTag
+import Amazonka.DataExchange.Types.TableTagPolicyLFPermission
+import qualified Amazonka.Prelude as Prelude
+
+-- | The LF-tag policy and permissions that apply to table resources.
+--
+-- /See:/ 'newTableLFTagPolicyAndPermissions' smart constructor.
+data TableLFTagPolicyAndPermissions = TableLFTagPolicyAndPermissions'
+  { -- | A list of LF-tag conditions that apply to table resources.
+    expression :: [LFTag],
+    -- | The permissions granted to subscribers on table resources.
+    permissions :: [TableTagPolicyLFPermission]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TableLFTagPolicyAndPermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expression', 'tableLFTagPolicyAndPermissions_expression' - A list of LF-tag conditions that apply to table resources.
+--
+-- 'permissions', 'tableLFTagPolicyAndPermissions_permissions' - The permissions granted to subscribers on table resources.
+newTableLFTagPolicyAndPermissions ::
+  TableLFTagPolicyAndPermissions
+newTableLFTagPolicyAndPermissions =
+  TableLFTagPolicyAndPermissions'
+    { expression =
+        Prelude.mempty,
+      permissions = Prelude.mempty
+    }
+
+-- | A list of LF-tag conditions that apply to table resources.
+tableLFTagPolicyAndPermissions_expression :: Lens.Lens' TableLFTagPolicyAndPermissions [LFTag]
+tableLFTagPolicyAndPermissions_expression = Lens.lens (\TableLFTagPolicyAndPermissions' {expression} -> expression) (\s@TableLFTagPolicyAndPermissions' {} a -> s {expression = a} :: TableLFTagPolicyAndPermissions) Prelude.. Lens.coerced
+
+-- | The permissions granted to subscribers on table resources.
+tableLFTagPolicyAndPermissions_permissions :: Lens.Lens' TableLFTagPolicyAndPermissions [TableTagPolicyLFPermission]
+tableLFTagPolicyAndPermissions_permissions = Lens.lens (\TableLFTagPolicyAndPermissions' {permissions} -> permissions) (\s@TableLFTagPolicyAndPermissions' {} a -> s {permissions = a} :: TableLFTagPolicyAndPermissions) Prelude.. Lens.coerced
+
+instance Data.FromJSON TableLFTagPolicyAndPermissions where
+  parseJSON =
+    Data.withObject
+      "TableLFTagPolicyAndPermissions"
+      ( \x ->
+          TableLFTagPolicyAndPermissions'
+            Prelude.<$> (x Data..:? "Expression" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Permissions" Data..!= Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    TableLFTagPolicyAndPermissions
+  where
+  hashWithSalt
+    _salt
+    TableLFTagPolicyAndPermissions' {..} =
+      _salt
+        `Prelude.hashWithSalt` expression
+        `Prelude.hashWithSalt` permissions
+
+instance
+  Prelude.NFData
+    TableLFTagPolicyAndPermissions
+  where
+  rnf TableLFTagPolicyAndPermissions' {..} =
+    Prelude.rnf expression
+      `Prelude.seq` Prelude.rnf permissions
+
+instance Data.ToJSON TableLFTagPolicyAndPermissions where
+  toJSON TableLFTagPolicyAndPermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Expression" Data..= expression),
+            Prelude.Just ("Permissions" Data..= permissions)
+          ]
+      )
diff --git a/gen/Amazonka/DataExchange/Types/TableTagPolicyLFPermission.hs b/gen/Amazonka/DataExchange/Types/TableTagPolicyLFPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/TableTagPolicyLFPermission.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.DataExchange.Types.TableTagPolicyLFPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.TableTagPolicyLFPermission
+  ( TableTagPolicyLFPermission
+      ( ..,
+        TableTagPolicyLFPermission_DESCRIBE,
+        TableTagPolicyLFPermission_SELECT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TableTagPolicyLFPermission = TableTagPolicyLFPermission'
+  { fromTableTagPolicyLFPermission ::
+      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 TableTagPolicyLFPermission_DESCRIBE :: TableTagPolicyLFPermission
+pattern TableTagPolicyLFPermission_DESCRIBE = TableTagPolicyLFPermission' "DESCRIBE"
+
+pattern TableTagPolicyLFPermission_SELECT :: TableTagPolicyLFPermission
+pattern TableTagPolicyLFPermission_SELECT = TableTagPolicyLFPermission' "SELECT"
+
+{-# COMPLETE
+  TableTagPolicyLFPermission_DESCRIBE,
+  TableTagPolicyLFPermission_SELECT,
+  TableTagPolicyLFPermission'
+  #-}
diff --git a/gen/Amazonka/DataExchange/Types/Type.hs b/gen/Amazonka/DataExchange/Types/Type.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/Types/Type.hs
@@ -0,0 +1,103 @@
+{-# 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.DataExchange.Types.Type
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.DataExchange.Types.Type
+  ( Type
+      ( ..,
+        Type_CREATE_S3_DATA_ACCESS_FROM_S3_BUCKET,
+        Type_EXPORT_ASSETS_TO_S3,
+        Type_EXPORT_ASSET_TO_SIGNED_URL,
+        Type_EXPORT_REVISIONS_TO_S3,
+        Type_IMPORT_ASSETS_FROM_LAKE_FORMATION_TAG_POLICY,
+        Type_IMPORT_ASSETS_FROM_REDSHIFT_DATA_SHARES,
+        Type_IMPORT_ASSETS_FROM_S3,
+        Type_IMPORT_ASSET_FROM_API_GATEWAY_API,
+        Type_IMPORT_ASSET_FROM_SIGNED_URL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Type = Type' {fromType :: 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 Type_CREATE_S3_DATA_ACCESS_FROM_S3_BUCKET :: Type
+pattern Type_CREATE_S3_DATA_ACCESS_FROM_S3_BUCKET = Type' "CREATE_S3_DATA_ACCESS_FROM_S3_BUCKET"
+
+pattern Type_EXPORT_ASSETS_TO_S3 :: Type
+pattern Type_EXPORT_ASSETS_TO_S3 = Type' "EXPORT_ASSETS_TO_S3"
+
+pattern Type_EXPORT_ASSET_TO_SIGNED_URL :: Type
+pattern Type_EXPORT_ASSET_TO_SIGNED_URL = Type' "EXPORT_ASSET_TO_SIGNED_URL"
+
+pattern Type_EXPORT_REVISIONS_TO_S3 :: Type
+pattern Type_EXPORT_REVISIONS_TO_S3 = Type' "EXPORT_REVISIONS_TO_S3"
+
+pattern Type_IMPORT_ASSETS_FROM_LAKE_FORMATION_TAG_POLICY :: Type
+pattern Type_IMPORT_ASSETS_FROM_LAKE_FORMATION_TAG_POLICY = Type' "IMPORT_ASSETS_FROM_LAKE_FORMATION_TAG_POLICY"
+
+pattern Type_IMPORT_ASSETS_FROM_REDSHIFT_DATA_SHARES :: Type
+pattern Type_IMPORT_ASSETS_FROM_REDSHIFT_DATA_SHARES = Type' "IMPORT_ASSETS_FROM_REDSHIFT_DATA_SHARES"
+
+pattern Type_IMPORT_ASSETS_FROM_S3 :: Type
+pattern Type_IMPORT_ASSETS_FROM_S3 = Type' "IMPORT_ASSETS_FROM_S3"
+
+pattern Type_IMPORT_ASSET_FROM_API_GATEWAY_API :: Type
+pattern Type_IMPORT_ASSET_FROM_API_GATEWAY_API = Type' "IMPORT_ASSET_FROM_API_GATEWAY_API"
+
+pattern Type_IMPORT_ASSET_FROM_SIGNED_URL :: Type
+pattern Type_IMPORT_ASSET_FROM_SIGNED_URL = Type' "IMPORT_ASSET_FROM_SIGNED_URL"
+
+{-# COMPLETE
+  Type_CREATE_S3_DATA_ACCESS_FROM_S3_BUCKET,
+  Type_EXPORT_ASSETS_TO_S3,
+  Type_EXPORT_ASSET_TO_SIGNED_URL,
+  Type_EXPORT_REVISIONS_TO_S3,
+  Type_IMPORT_ASSETS_FROM_LAKE_FORMATION_TAG_POLICY,
+  Type_IMPORT_ASSETS_FROM_REDSHIFT_DATA_SHARES,
+  Type_IMPORT_ASSETS_FROM_S3,
+  Type_IMPORT_ASSET_FROM_API_GATEWAY_API,
+  Type_IMPORT_ASSET_FROM_SIGNED_URL,
+  Type'
+  #-}
diff --git a/gen/Amazonka/DataExchange/UntagResource.hs b/gen/Amazonka/DataExchange/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/UntagResource.hs
@@ -0,0 +1,140 @@
+{-# 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.DataExchange.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)
+--
+-- This operation removes one or more tags from a resource.
+module Amazonka.DataExchange.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.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'
+  { -- | An Amazon Resource Name (ARN) that uniquely identifies an AWS resource.
+    resourceArn :: Prelude.Text,
+    -- | The key tags.
+    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' - An Amazon Resource Name (ARN) that uniquely identifies an AWS resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The key tags.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | An Amazon Resource Name (ARN) that uniquely identifies an AWS resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The key tags.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull UntagResourceResponse'
+
+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
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  {
+  }
+  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.
+newUntagResourceResponse ::
+  UntagResourceResponse
+newUntagResourceResponse = UntagResourceResponse'
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/DataExchange/UpdateAsset.hs b/gen/Amazonka/DataExchange/UpdateAsset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/UpdateAsset.hs
@@ -0,0 +1,375 @@
+{-# 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.DataExchange.UpdateAsset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation updates an asset.
+module Amazonka.DataExchange.UpdateAsset
+  ( -- * Creating a Request
+    UpdateAsset (..),
+    newUpdateAsset,
+
+    -- * Request Lenses
+    updateAsset_assetId,
+    updateAsset_dataSetId,
+    updateAsset_name,
+    updateAsset_revisionId,
+
+    -- * Destructuring the Response
+    UpdateAssetResponse (..),
+    newUpdateAssetResponse,
+
+    -- * Response Lenses
+    updateAssetResponse_arn,
+    updateAssetResponse_assetDetails,
+    updateAssetResponse_assetType,
+    updateAssetResponse_createdAt,
+    updateAssetResponse_dataSetId,
+    updateAssetResponse_id,
+    updateAssetResponse_name,
+    updateAssetResponse_revisionId,
+    updateAssetResponse_sourceId,
+    updateAssetResponse_updatedAt,
+    updateAssetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAsset' smart constructor.
+data UpdateAsset = UpdateAsset'
+  { -- | The unique identifier for an asset.
+    assetId :: Prelude.Text,
+    -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text,
+    -- | The name of the asset. When importing from Amazon S3, the Amazon S3
+    -- object key is used as the asset name. When exporting to Amazon S3, the
+    -- asset name is used as default target Amazon S3 object key. When
+    -- importing from Amazon API Gateway API, the API name is used as the asset
+    -- name. When importing from Amazon Redshift, the datashare name is used as
+    -- the asset name. When importing from AWS Lake Formation, the static
+    -- values of \"Database(s) included in the LF-tag policy\" or \"Table(s)
+    -- included in LF-tag policy\" are used as the name.
+    name :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAsset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assetId', 'updateAsset_assetId' - The unique identifier for an asset.
+--
+-- 'dataSetId', 'updateAsset_dataSetId' - The unique identifier for a data set.
+--
+-- 'name', 'updateAsset_name' - The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name. When exporting to Amazon S3, the
+-- asset name is used as default target Amazon S3 object key. When
+-- importing from Amazon API Gateway API, the API name is used as the asset
+-- name. When importing from Amazon Redshift, the datashare name is used as
+-- the asset name. When importing from AWS Lake Formation, the static
+-- values of \"Database(s) included in the LF-tag policy\" or \"Table(s)
+-- included in LF-tag policy\" are used as the name.
+--
+-- 'revisionId', 'updateAsset_revisionId' - The unique identifier for a revision.
+newUpdateAsset ::
+  -- | 'assetId'
+  Prelude.Text ->
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  UpdateAsset
+newUpdateAsset
+  pAssetId_
+  pDataSetId_
+  pName_
+  pRevisionId_ =
+    UpdateAsset'
+      { assetId = pAssetId_,
+        dataSetId = pDataSetId_,
+        name = pName_,
+        revisionId = pRevisionId_
+      }
+
+-- | The unique identifier for an asset.
+updateAsset_assetId :: Lens.Lens' UpdateAsset Prelude.Text
+updateAsset_assetId = Lens.lens (\UpdateAsset' {assetId} -> assetId) (\s@UpdateAsset' {} a -> s {assetId = a} :: UpdateAsset)
+
+-- | The unique identifier for a data set.
+updateAsset_dataSetId :: Lens.Lens' UpdateAsset Prelude.Text
+updateAsset_dataSetId = Lens.lens (\UpdateAsset' {dataSetId} -> dataSetId) (\s@UpdateAsset' {} a -> s {dataSetId = a} :: UpdateAsset)
+
+-- | The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name. When exporting to Amazon S3, the
+-- asset name is used as default target Amazon S3 object key. When
+-- importing from Amazon API Gateway API, the API name is used as the asset
+-- name. When importing from Amazon Redshift, the datashare name is used as
+-- the asset name. When importing from AWS Lake Formation, the static
+-- values of \"Database(s) included in the LF-tag policy\" or \"Table(s)
+-- included in LF-tag policy\" are used as the name.
+updateAsset_name :: Lens.Lens' UpdateAsset Prelude.Text
+updateAsset_name = Lens.lens (\UpdateAsset' {name} -> name) (\s@UpdateAsset' {} a -> s {name = a} :: UpdateAsset)
+
+-- | The unique identifier for a revision.
+updateAsset_revisionId :: Lens.Lens' UpdateAsset Prelude.Text
+updateAsset_revisionId = Lens.lens (\UpdateAsset' {revisionId} -> revisionId) (\s@UpdateAsset' {} a -> s {revisionId = a} :: UpdateAsset)
+
+instance Core.AWSRequest UpdateAsset where
+  type AWSResponse UpdateAsset = UpdateAssetResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAssetResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "AssetDetails")
+            Prelude.<*> (x Data..?> "AssetType")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "DataSetId")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "RevisionId")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAsset where
+  hashWithSalt _salt UpdateAsset' {..} =
+    _salt
+      `Prelude.hashWithSalt` assetId
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData UpdateAsset where
+  rnf UpdateAsset' {..} =
+    Prelude.rnf assetId
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToHeaders UpdateAsset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAsset where
+  toJSON UpdateAsset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath UpdateAsset where
+  toPath UpdateAsset' {..} =
+    Prelude.mconcat
+      [ "/v1/data-sets/",
+        Data.toBS dataSetId,
+        "/revisions/",
+        Data.toBS revisionId,
+        "/assets/",
+        Data.toBS assetId
+      ]
+
+instance Data.ToQuery UpdateAsset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAssetResponse' smart constructor.
+data UpdateAssetResponse = UpdateAssetResponse'
+  { -- | The ARN for the asset.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Details about the asset.
+    assetDetails :: Prelude.Maybe AssetDetails,
+    -- | The type of asset that is added to a data set.
+    assetType :: Prelude.Maybe AssetType,
+    -- | The date and time that the asset was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the data set associated with this asset.
+    dataSetId :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the asset.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the asset. When importing from Amazon S3, the Amazon S3
+    -- object key is used as the asset name. When exporting to Amazon S3, the
+    -- asset name is used as default target Amazon S3 object key. When
+    -- importing from Amazon API Gateway API, the API name is used as the asset
+    -- name. When importing from Amazon Redshift, the datashare name is used as
+    -- the asset name. When importing from AWS Lake Formation, the static
+    -- values of \"Database(s) included in the LF-tag policy\"- or \"Table(s)
+    -- included in LF-tag policy\" are used as the asset name.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the revision associated with this asset.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The asset ID of the owned asset corresponding to the entitled asset
+    -- being viewed. This parameter is returned when an asset owner is viewing
+    -- the entitled copy of its owned asset.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the asset was last updated, in ISO 8601 format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAssetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateAssetResponse_arn' - The ARN for the asset.
+--
+-- 'assetDetails', 'updateAssetResponse_assetDetails' - Details about the asset.
+--
+-- 'assetType', 'updateAssetResponse_assetType' - The type of asset that is added to a data set.
+--
+-- 'createdAt', 'updateAssetResponse_createdAt' - The date and time that the asset was created, in ISO 8601 format.
+--
+-- 'dataSetId', 'updateAssetResponse_dataSetId' - The unique identifier for the data set associated with this asset.
+--
+-- 'id', 'updateAssetResponse_id' - The unique identifier for the asset.
+--
+-- 'name', 'updateAssetResponse_name' - The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name. When exporting to Amazon S3, the
+-- asset name is used as default target Amazon S3 object key. When
+-- importing from Amazon API Gateway API, the API name is used as the asset
+-- name. When importing from Amazon Redshift, the datashare name is used as
+-- the asset name. When importing from AWS Lake Formation, the static
+-- values of \"Database(s) included in the LF-tag policy\"- or \"Table(s)
+-- included in LF-tag policy\" are used as the asset name.
+--
+-- 'revisionId', 'updateAssetResponse_revisionId' - The unique identifier for the revision associated with this asset.
+--
+-- 'sourceId', 'updateAssetResponse_sourceId' - The asset ID of the owned asset corresponding to the entitled asset
+-- being viewed. This parameter is returned when an asset owner is viewing
+-- the entitled copy of its owned asset.
+--
+-- 'updatedAt', 'updateAssetResponse_updatedAt' - The date and time that the asset was last updated, in ISO 8601 format.
+--
+-- 'httpStatus', 'updateAssetResponse_httpStatus' - The response's http status code.
+newUpdateAssetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAssetResponse
+newUpdateAssetResponse pHttpStatus_ =
+  UpdateAssetResponse'
+    { arn = Prelude.Nothing,
+      assetDetails = Prelude.Nothing,
+      assetType = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      dataSetId = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the asset.
+updateAssetResponse_arn :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe Prelude.Text)
+updateAssetResponse_arn = Lens.lens (\UpdateAssetResponse' {arn} -> arn) (\s@UpdateAssetResponse' {} a -> s {arn = a} :: UpdateAssetResponse)
+
+-- | Details about the asset.
+updateAssetResponse_assetDetails :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe AssetDetails)
+updateAssetResponse_assetDetails = Lens.lens (\UpdateAssetResponse' {assetDetails} -> assetDetails) (\s@UpdateAssetResponse' {} a -> s {assetDetails = a} :: UpdateAssetResponse)
+
+-- | The type of asset that is added to a data set.
+updateAssetResponse_assetType :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe AssetType)
+updateAssetResponse_assetType = Lens.lens (\UpdateAssetResponse' {assetType} -> assetType) (\s@UpdateAssetResponse' {} a -> s {assetType = a} :: UpdateAssetResponse)
+
+-- | The date and time that the asset was created, in ISO 8601 format.
+updateAssetResponse_createdAt :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe Prelude.UTCTime)
+updateAssetResponse_createdAt = Lens.lens (\UpdateAssetResponse' {createdAt} -> createdAt) (\s@UpdateAssetResponse' {} a -> s {createdAt = a} :: UpdateAssetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the data set associated with this asset.
+updateAssetResponse_dataSetId :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe Prelude.Text)
+updateAssetResponse_dataSetId = Lens.lens (\UpdateAssetResponse' {dataSetId} -> dataSetId) (\s@UpdateAssetResponse' {} a -> s {dataSetId = a} :: UpdateAssetResponse)
+
+-- | The unique identifier for the asset.
+updateAssetResponse_id :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe Prelude.Text)
+updateAssetResponse_id = Lens.lens (\UpdateAssetResponse' {id} -> id) (\s@UpdateAssetResponse' {} a -> s {id = a} :: UpdateAssetResponse)
+
+-- | The name of the asset. When importing from Amazon S3, the Amazon S3
+-- object key is used as the asset name. When exporting to Amazon S3, the
+-- asset name is used as default target Amazon S3 object key. When
+-- importing from Amazon API Gateway API, the API name is used as the asset
+-- name. When importing from Amazon Redshift, the datashare name is used as
+-- the asset name. When importing from AWS Lake Formation, the static
+-- values of \"Database(s) included in the LF-tag policy\"- or \"Table(s)
+-- included in LF-tag policy\" are used as the asset name.
+updateAssetResponse_name :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe Prelude.Text)
+updateAssetResponse_name = Lens.lens (\UpdateAssetResponse' {name} -> name) (\s@UpdateAssetResponse' {} a -> s {name = a} :: UpdateAssetResponse)
+
+-- | The unique identifier for the revision associated with this asset.
+updateAssetResponse_revisionId :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe Prelude.Text)
+updateAssetResponse_revisionId = Lens.lens (\UpdateAssetResponse' {revisionId} -> revisionId) (\s@UpdateAssetResponse' {} a -> s {revisionId = a} :: UpdateAssetResponse)
+
+-- | The asset ID of the owned asset corresponding to the entitled asset
+-- being viewed. This parameter is returned when an asset owner is viewing
+-- the entitled copy of its owned asset.
+updateAssetResponse_sourceId :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe Prelude.Text)
+updateAssetResponse_sourceId = Lens.lens (\UpdateAssetResponse' {sourceId} -> sourceId) (\s@UpdateAssetResponse' {} a -> s {sourceId = a} :: UpdateAssetResponse)
+
+-- | The date and time that the asset was last updated, in ISO 8601 format.
+updateAssetResponse_updatedAt :: Lens.Lens' UpdateAssetResponse (Prelude.Maybe Prelude.UTCTime)
+updateAssetResponse_updatedAt = Lens.lens (\UpdateAssetResponse' {updatedAt} -> updatedAt) (\s@UpdateAssetResponse' {} a -> s {updatedAt = a} :: UpdateAssetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+updateAssetResponse_httpStatus :: Lens.Lens' UpdateAssetResponse Prelude.Int
+updateAssetResponse_httpStatus = Lens.lens (\UpdateAssetResponse' {httpStatus} -> httpStatus) (\s@UpdateAssetResponse' {} a -> s {httpStatus = a} :: UpdateAssetResponse)
+
+instance Prelude.NFData UpdateAssetResponse where
+  rnf UpdateAssetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf assetDetails
+      `Prelude.seq` Prelude.rnf assetType
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/UpdateDataSet.hs b/gen/Amazonka/DataExchange/UpdateDataSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/UpdateDataSet.hs
@@ -0,0 +1,318 @@
+{-# 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.DataExchange.UpdateDataSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation updates a data set.
+module Amazonka.DataExchange.UpdateDataSet
+  ( -- * Creating a Request
+    UpdateDataSet (..),
+    newUpdateDataSet,
+
+    -- * Request Lenses
+    updateDataSet_description,
+    updateDataSet_name,
+    updateDataSet_dataSetId,
+
+    -- * Destructuring the Response
+    UpdateDataSetResponse (..),
+    newUpdateDataSetResponse,
+
+    -- * Response Lenses
+    updateDataSetResponse_arn,
+    updateDataSetResponse_assetType,
+    updateDataSetResponse_createdAt,
+    updateDataSetResponse_description,
+    updateDataSetResponse_id,
+    updateDataSetResponse_name,
+    updateDataSetResponse_origin,
+    updateDataSetResponse_originDetails,
+    updateDataSetResponse_sourceId,
+    updateDataSetResponse_updatedAt,
+    updateDataSetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDataSet' smart constructor.
+data UpdateDataSet = UpdateDataSet'
+  { -- | The description for the data set.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data set.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDataSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDataSet_description' - The description for the data set.
+--
+-- 'name', 'updateDataSet_name' - The name of the data set.
+--
+-- 'dataSetId', 'updateDataSet_dataSetId' - The unique identifier for a data set.
+newUpdateDataSet ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  UpdateDataSet
+newUpdateDataSet pDataSetId_ =
+  UpdateDataSet'
+    { description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      dataSetId = pDataSetId_
+    }
+
+-- | The description for the data set.
+updateDataSet_description :: Lens.Lens' UpdateDataSet (Prelude.Maybe Prelude.Text)
+updateDataSet_description = Lens.lens (\UpdateDataSet' {description} -> description) (\s@UpdateDataSet' {} a -> s {description = a} :: UpdateDataSet)
+
+-- | The name of the data set.
+updateDataSet_name :: Lens.Lens' UpdateDataSet (Prelude.Maybe Prelude.Text)
+updateDataSet_name = Lens.lens (\UpdateDataSet' {name} -> name) (\s@UpdateDataSet' {} a -> s {name = a} :: UpdateDataSet)
+
+-- | The unique identifier for a data set.
+updateDataSet_dataSetId :: Lens.Lens' UpdateDataSet Prelude.Text
+updateDataSet_dataSetId = Lens.lens (\UpdateDataSet' {dataSetId} -> dataSetId) (\s@UpdateDataSet' {} a -> s {dataSetId = a} :: UpdateDataSet)
+
+instance Core.AWSRequest UpdateDataSet where
+  type
+    AWSResponse UpdateDataSet =
+      UpdateDataSetResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDataSetResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "AssetType")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Description")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "Origin")
+            Prelude.<*> (x Data..?> "OriginDetails")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDataSet where
+  hashWithSalt _salt UpdateDataSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` dataSetId
+
+instance Prelude.NFData UpdateDataSet where
+  rnf UpdateDataSet' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf dataSetId
+
+instance Data.ToHeaders UpdateDataSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDataSet where
+  toJSON UpdateDataSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("Name" Data..=) Prelude.<$> name
+          ]
+      )
+
+instance Data.ToPath UpdateDataSet where
+  toPath UpdateDataSet' {..} =
+    Prelude.mconcat
+      ["/v1/data-sets/", Data.toBS dataSetId]
+
+instance Data.ToQuery UpdateDataSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDataSetResponse' smart constructor.
+data UpdateDataSetResponse = UpdateDataSetResponse'
+  { -- | The ARN for the data set.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The type of asset that is added to a data set.
+    assetType :: Prelude.Maybe AssetType,
+    -- | The date and time that the data set was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The description for the data set.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for the data set.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the data set.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | A property that defines the data set as OWNED by the account (for
+    -- providers) or ENTITLED to the account (for subscribers).
+    origin :: Prelude.Maybe Origin,
+    -- | If the origin of this data set is ENTITLED, includes the details for the
+    -- product on AWS Marketplace.
+    originDetails :: Prelude.Maybe OriginDetails,
+    -- | The data set ID of the owned data set corresponding to the entitled data
+    -- set being viewed. This parameter is returned when a data set owner is
+    -- viewing the entitled copy of its owned data set.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the data set was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDataSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateDataSetResponse_arn' - The ARN for the data set.
+--
+-- 'assetType', 'updateDataSetResponse_assetType' - The type of asset that is added to a data set.
+--
+-- 'createdAt', 'updateDataSetResponse_createdAt' - The date and time that the data set was created, in ISO 8601 format.
+--
+-- 'description', 'updateDataSetResponse_description' - The description for the data set.
+--
+-- 'id', 'updateDataSetResponse_id' - The unique identifier for the data set.
+--
+-- 'name', 'updateDataSetResponse_name' - The name of the data set.
+--
+-- 'origin', 'updateDataSetResponse_origin' - A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+--
+-- 'originDetails', 'updateDataSetResponse_originDetails' - If the origin of this data set is ENTITLED, includes the details for the
+-- product on AWS Marketplace.
+--
+-- 'sourceId', 'updateDataSetResponse_sourceId' - The data set ID of the owned data set corresponding to the entitled data
+-- set being viewed. This parameter is returned when a data set owner is
+-- viewing the entitled copy of its owned data set.
+--
+-- 'updatedAt', 'updateDataSetResponse_updatedAt' - The date and time that the data set was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'updateDataSetResponse_httpStatus' - The response's http status code.
+newUpdateDataSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDataSetResponse
+newUpdateDataSetResponse pHttpStatus_ =
+  UpdateDataSetResponse'
+    { arn = Prelude.Nothing,
+      assetType = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      origin = Prelude.Nothing,
+      originDetails = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the data set.
+updateDataSetResponse_arn :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe Prelude.Text)
+updateDataSetResponse_arn = Lens.lens (\UpdateDataSetResponse' {arn} -> arn) (\s@UpdateDataSetResponse' {} a -> s {arn = a} :: UpdateDataSetResponse)
+
+-- | The type of asset that is added to a data set.
+updateDataSetResponse_assetType :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe AssetType)
+updateDataSetResponse_assetType = Lens.lens (\UpdateDataSetResponse' {assetType} -> assetType) (\s@UpdateDataSetResponse' {} a -> s {assetType = a} :: UpdateDataSetResponse)
+
+-- | The date and time that the data set was created, in ISO 8601 format.
+updateDataSetResponse_createdAt :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe Prelude.UTCTime)
+updateDataSetResponse_createdAt = Lens.lens (\UpdateDataSetResponse' {createdAt} -> createdAt) (\s@UpdateDataSetResponse' {} a -> s {createdAt = a} :: UpdateDataSetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The description for the data set.
+updateDataSetResponse_description :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe Prelude.Text)
+updateDataSetResponse_description = Lens.lens (\UpdateDataSetResponse' {description} -> description) (\s@UpdateDataSetResponse' {} a -> s {description = a} :: UpdateDataSetResponse)
+
+-- | The unique identifier for the data set.
+updateDataSetResponse_id :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe Prelude.Text)
+updateDataSetResponse_id = Lens.lens (\UpdateDataSetResponse' {id} -> id) (\s@UpdateDataSetResponse' {} a -> s {id = a} :: UpdateDataSetResponse)
+
+-- | The name of the data set.
+updateDataSetResponse_name :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe Prelude.Text)
+updateDataSetResponse_name = Lens.lens (\UpdateDataSetResponse' {name} -> name) (\s@UpdateDataSetResponse' {} a -> s {name = a} :: UpdateDataSetResponse)
+
+-- | A property that defines the data set as OWNED by the account (for
+-- providers) or ENTITLED to the account (for subscribers).
+updateDataSetResponse_origin :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe Origin)
+updateDataSetResponse_origin = Lens.lens (\UpdateDataSetResponse' {origin} -> origin) (\s@UpdateDataSetResponse' {} a -> s {origin = a} :: UpdateDataSetResponse)
+
+-- | If the origin of this data set is ENTITLED, includes the details for the
+-- product on AWS Marketplace.
+updateDataSetResponse_originDetails :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe OriginDetails)
+updateDataSetResponse_originDetails = Lens.lens (\UpdateDataSetResponse' {originDetails} -> originDetails) (\s@UpdateDataSetResponse' {} a -> s {originDetails = a} :: UpdateDataSetResponse)
+
+-- | The data set ID of the owned data set corresponding to the entitled data
+-- set being viewed. This parameter is returned when a data set owner is
+-- viewing the entitled copy of its owned data set.
+updateDataSetResponse_sourceId :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe Prelude.Text)
+updateDataSetResponse_sourceId = Lens.lens (\UpdateDataSetResponse' {sourceId} -> sourceId) (\s@UpdateDataSetResponse' {} a -> s {sourceId = a} :: UpdateDataSetResponse)
+
+-- | The date and time that the data set was last updated, in ISO 8601
+-- format.
+updateDataSetResponse_updatedAt :: Lens.Lens' UpdateDataSetResponse (Prelude.Maybe Prelude.UTCTime)
+updateDataSetResponse_updatedAt = Lens.lens (\UpdateDataSetResponse' {updatedAt} -> updatedAt) (\s@UpdateDataSetResponse' {} a -> s {updatedAt = a} :: UpdateDataSetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+updateDataSetResponse_httpStatus :: Lens.Lens' UpdateDataSetResponse Prelude.Int
+updateDataSetResponse_httpStatus = Lens.lens (\UpdateDataSetResponse' {httpStatus} -> httpStatus) (\s@UpdateDataSetResponse' {} a -> s {httpStatus = a} :: UpdateDataSetResponse)
+
+instance Prelude.NFData UpdateDataSetResponse where
+  rnf UpdateDataSetResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf assetType
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf originDetails
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/UpdateEventAction.hs b/gen/Amazonka/DataExchange/UpdateEventAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/UpdateEventAction.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.DataExchange.UpdateEventAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation updates the event action.
+module Amazonka.DataExchange.UpdateEventAction
+  ( -- * Creating a Request
+    UpdateEventAction (..),
+    newUpdateEventAction,
+
+    -- * Request Lenses
+    updateEventAction_action,
+    updateEventAction_eventActionId,
+
+    -- * Destructuring the Response
+    UpdateEventActionResponse (..),
+    newUpdateEventActionResponse,
+
+    -- * Response Lenses
+    updateEventActionResponse_action,
+    updateEventActionResponse_arn,
+    updateEventActionResponse_createdAt,
+    updateEventActionResponse_event,
+    updateEventActionResponse_id,
+    updateEventActionResponse_updatedAt,
+    updateEventActionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateEventAction' smart constructor.
+data UpdateEventAction = UpdateEventAction'
+  { -- | What occurs after a certain event.
+    action :: Prelude.Maybe Action,
+    -- | The unique identifier for the event action.
+    eventActionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'updateEventAction_action' - What occurs after a certain event.
+--
+-- 'eventActionId', 'updateEventAction_eventActionId' - The unique identifier for the event action.
+newUpdateEventAction ::
+  -- | 'eventActionId'
+  Prelude.Text ->
+  UpdateEventAction
+newUpdateEventAction pEventActionId_ =
+  UpdateEventAction'
+    { action = Prelude.Nothing,
+      eventActionId = pEventActionId_
+    }
+
+-- | What occurs after a certain event.
+updateEventAction_action :: Lens.Lens' UpdateEventAction (Prelude.Maybe Action)
+updateEventAction_action = Lens.lens (\UpdateEventAction' {action} -> action) (\s@UpdateEventAction' {} a -> s {action = a} :: UpdateEventAction)
+
+-- | The unique identifier for the event action.
+updateEventAction_eventActionId :: Lens.Lens' UpdateEventAction Prelude.Text
+updateEventAction_eventActionId = Lens.lens (\UpdateEventAction' {eventActionId} -> eventActionId) (\s@UpdateEventAction' {} a -> s {eventActionId = a} :: UpdateEventAction)
+
+instance Core.AWSRequest UpdateEventAction where
+  type
+    AWSResponse UpdateEventAction =
+      UpdateEventActionResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateEventActionResponse'
+            Prelude.<$> (x Data..?> "Action")
+            Prelude.<*> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "Event")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEventAction where
+  hashWithSalt _salt UpdateEventAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` eventActionId
+
+instance Prelude.NFData UpdateEventAction where
+  rnf UpdateEventAction' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf eventActionId
+
+instance Data.ToHeaders UpdateEventAction where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEventAction where
+  toJSON UpdateEventAction' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Action" Data..=) Prelude.<$> action]
+      )
+
+instance Data.ToPath UpdateEventAction where
+  toPath UpdateEventAction' {..} =
+    Prelude.mconcat
+      ["/v1/event-actions/", Data.toBS eventActionId]
+
+instance Data.ToQuery UpdateEventAction where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEventActionResponse' smart constructor.
+data UpdateEventActionResponse = UpdateEventActionResponse'
+  { -- | What occurs after a certain event.
+    action :: Prelude.Maybe Action,
+    -- | The ARN for the event action.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the event action was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | What occurs to start an action.
+    event :: Prelude.Maybe Event,
+    -- | The unique identifier for the event action.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the event action was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEventActionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'updateEventActionResponse_action' - What occurs after a certain event.
+--
+-- 'arn', 'updateEventActionResponse_arn' - The ARN for the event action.
+--
+-- 'createdAt', 'updateEventActionResponse_createdAt' - The date and time that the event action was created, in ISO 8601 format.
+--
+-- 'event', 'updateEventActionResponse_event' - What occurs to start an action.
+--
+-- 'id', 'updateEventActionResponse_id' - The unique identifier for the event action.
+--
+-- 'updatedAt', 'updateEventActionResponse_updatedAt' - The date and time that the event action was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'updateEventActionResponse_httpStatus' - The response's http status code.
+newUpdateEventActionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEventActionResponse
+newUpdateEventActionResponse pHttpStatus_ =
+  UpdateEventActionResponse'
+    { action =
+        Prelude.Nothing,
+      arn = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      event = Prelude.Nothing,
+      id = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | What occurs after a certain event.
+updateEventActionResponse_action :: Lens.Lens' UpdateEventActionResponse (Prelude.Maybe Action)
+updateEventActionResponse_action = Lens.lens (\UpdateEventActionResponse' {action} -> action) (\s@UpdateEventActionResponse' {} a -> s {action = a} :: UpdateEventActionResponse)
+
+-- | The ARN for the event action.
+updateEventActionResponse_arn :: Lens.Lens' UpdateEventActionResponse (Prelude.Maybe Prelude.Text)
+updateEventActionResponse_arn = Lens.lens (\UpdateEventActionResponse' {arn} -> arn) (\s@UpdateEventActionResponse' {} a -> s {arn = a} :: UpdateEventActionResponse)
+
+-- | The date and time that the event action was created, in ISO 8601 format.
+updateEventActionResponse_createdAt :: Lens.Lens' UpdateEventActionResponse (Prelude.Maybe Prelude.UTCTime)
+updateEventActionResponse_createdAt = Lens.lens (\UpdateEventActionResponse' {createdAt} -> createdAt) (\s@UpdateEventActionResponse' {} a -> s {createdAt = a} :: UpdateEventActionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | What occurs to start an action.
+updateEventActionResponse_event :: Lens.Lens' UpdateEventActionResponse (Prelude.Maybe Event)
+updateEventActionResponse_event = Lens.lens (\UpdateEventActionResponse' {event} -> event) (\s@UpdateEventActionResponse' {} a -> s {event = a} :: UpdateEventActionResponse)
+
+-- | The unique identifier for the event action.
+updateEventActionResponse_id :: Lens.Lens' UpdateEventActionResponse (Prelude.Maybe Prelude.Text)
+updateEventActionResponse_id = Lens.lens (\UpdateEventActionResponse' {id} -> id) (\s@UpdateEventActionResponse' {} a -> s {id = a} :: UpdateEventActionResponse)
+
+-- | The date and time that the event action was last updated, in ISO 8601
+-- format.
+updateEventActionResponse_updatedAt :: Lens.Lens' UpdateEventActionResponse (Prelude.Maybe Prelude.UTCTime)
+updateEventActionResponse_updatedAt = Lens.lens (\UpdateEventActionResponse' {updatedAt} -> updatedAt) (\s@UpdateEventActionResponse' {} a -> s {updatedAt = a} :: UpdateEventActionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+updateEventActionResponse_httpStatus :: Lens.Lens' UpdateEventActionResponse Prelude.Int
+updateEventActionResponse_httpStatus = Lens.lens (\UpdateEventActionResponse' {httpStatus} -> httpStatus) (\s@UpdateEventActionResponse' {} a -> s {httpStatus = a} :: UpdateEventActionResponse)
+
+instance Prelude.NFData UpdateEventActionResponse where
+  rnf UpdateEventActionResponse' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf event
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/UpdateRevision.hs b/gen/Amazonka/DataExchange/UpdateRevision.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/UpdateRevision.hs
@@ -0,0 +1,378 @@
+{-# 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.DataExchange.UpdateRevision
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation updates a revision.
+module Amazonka.DataExchange.UpdateRevision
+  ( -- * Creating a Request
+    UpdateRevision (..),
+    newUpdateRevision,
+
+    -- * Request Lenses
+    updateRevision_comment,
+    updateRevision_finalized,
+    updateRevision_dataSetId,
+    updateRevision_revisionId,
+
+    -- * Destructuring the Response
+    UpdateRevisionResponse (..),
+    newUpdateRevisionResponse,
+
+    -- * Response Lenses
+    updateRevisionResponse_arn,
+    updateRevisionResponse_comment,
+    updateRevisionResponse_createdAt,
+    updateRevisionResponse_dataSetId,
+    updateRevisionResponse_finalized,
+    updateRevisionResponse_id,
+    updateRevisionResponse_revocationComment,
+    updateRevisionResponse_revoked,
+    updateRevisionResponse_revokedAt,
+    updateRevisionResponse_sourceId,
+    updateRevisionResponse_updatedAt,
+    updateRevisionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRevision' smart constructor.
+data UpdateRevision = UpdateRevision'
+  { -- | An optional comment about the revision.
+    comment :: Prelude.Maybe Prelude.Text,
+    -- | Finalizing a revision tells AWS Data Exchange that your changes to the
+    -- assets in the revision are complete. After it\'s in this read-only
+    -- state, you can publish the revision to your products.
+    finalized :: Prelude.Maybe Prelude.Bool,
+    -- | The unique identifier for a data set.
+    dataSetId :: Prelude.Text,
+    -- | The unique identifier for a revision.
+    revisionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRevision' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comment', 'updateRevision_comment' - An optional comment about the revision.
+--
+-- 'finalized', 'updateRevision_finalized' - Finalizing a revision tells AWS Data Exchange that your changes to the
+-- assets in the revision are complete. After it\'s in this read-only
+-- state, you can publish the revision to your products.
+--
+-- 'dataSetId', 'updateRevision_dataSetId' - The unique identifier for a data set.
+--
+-- 'revisionId', 'updateRevision_revisionId' - The unique identifier for a revision.
+newUpdateRevision ::
+  -- | 'dataSetId'
+  Prelude.Text ->
+  -- | 'revisionId'
+  Prelude.Text ->
+  UpdateRevision
+newUpdateRevision pDataSetId_ pRevisionId_ =
+  UpdateRevision'
+    { comment = Prelude.Nothing,
+      finalized = Prelude.Nothing,
+      dataSetId = pDataSetId_,
+      revisionId = pRevisionId_
+    }
+
+-- | An optional comment about the revision.
+updateRevision_comment :: Lens.Lens' UpdateRevision (Prelude.Maybe Prelude.Text)
+updateRevision_comment = Lens.lens (\UpdateRevision' {comment} -> comment) (\s@UpdateRevision' {} a -> s {comment = a} :: UpdateRevision)
+
+-- | Finalizing a revision tells AWS Data Exchange that your changes to the
+-- assets in the revision are complete. After it\'s in this read-only
+-- state, you can publish the revision to your products.
+updateRevision_finalized :: Lens.Lens' UpdateRevision (Prelude.Maybe Prelude.Bool)
+updateRevision_finalized = Lens.lens (\UpdateRevision' {finalized} -> finalized) (\s@UpdateRevision' {} a -> s {finalized = a} :: UpdateRevision)
+
+-- | The unique identifier for a data set.
+updateRevision_dataSetId :: Lens.Lens' UpdateRevision Prelude.Text
+updateRevision_dataSetId = Lens.lens (\UpdateRevision' {dataSetId} -> dataSetId) (\s@UpdateRevision' {} a -> s {dataSetId = a} :: UpdateRevision)
+
+-- | The unique identifier for a revision.
+updateRevision_revisionId :: Lens.Lens' UpdateRevision Prelude.Text
+updateRevision_revisionId = Lens.lens (\UpdateRevision' {revisionId} -> revisionId) (\s@UpdateRevision' {} a -> s {revisionId = a} :: UpdateRevision)
+
+instance Core.AWSRequest UpdateRevision where
+  type
+    AWSResponse UpdateRevision =
+      UpdateRevisionResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRevisionResponse'
+            Prelude.<$> (x Data..?> "Arn")
+            Prelude.<*> (x Data..?> "Comment")
+            Prelude.<*> (x Data..?> "CreatedAt")
+            Prelude.<*> (x Data..?> "DataSetId")
+            Prelude.<*> (x Data..?> "Finalized")
+            Prelude.<*> (x Data..?> "Id")
+            Prelude.<*> (x Data..?> "RevocationComment")
+            Prelude.<*> (x Data..?> "Revoked")
+            Prelude.<*> (x Data..?> "RevokedAt")
+            Prelude.<*> (x Data..?> "SourceId")
+            Prelude.<*> (x Data..?> "UpdatedAt")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateRevision where
+  hashWithSalt _salt UpdateRevision' {..} =
+    _salt
+      `Prelude.hashWithSalt` comment
+      `Prelude.hashWithSalt` finalized
+      `Prelude.hashWithSalt` dataSetId
+      `Prelude.hashWithSalt` revisionId
+
+instance Prelude.NFData UpdateRevision where
+  rnf UpdateRevision' {..} =
+    Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf finalized
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf revisionId
+
+instance Data.ToHeaders UpdateRevision where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRevision where
+  toJSON UpdateRevision' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Comment" Data..=) Prelude.<$> comment,
+            ("Finalized" Data..=) Prelude.<$> finalized
+          ]
+      )
+
+instance Data.ToPath UpdateRevision where
+  toPath UpdateRevision' {..} =
+    Prelude.mconcat
+      [ "/v1/data-sets/",
+        Data.toBS dataSetId,
+        "/revisions/",
+        Data.toBS revisionId
+      ]
+
+instance Data.ToQuery UpdateRevision where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRevisionResponse' smart constructor.
+data UpdateRevisionResponse = UpdateRevisionResponse'
+  { -- | The ARN for the revision.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | An optional comment about the revision.
+    comment :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the revision was created, in ISO 8601 format.
+    createdAt :: Prelude.Maybe Data.ISO8601,
+    -- | The unique identifier for the data set associated with the data set
+    -- revision.
+    dataSetId :: Prelude.Maybe Prelude.Text,
+    -- | To publish a revision to a data set in a product, the revision must
+    -- first be finalized. Finalizing a revision tells AWS Data Exchange that
+    -- changes to the assets in the revision are complete. After it\'s in this
+    -- read-only state, you can publish the revision to your products.
+    -- Finalized revisions can be published through the AWS Data Exchange
+    -- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+    -- Marketplace Catalog API action. When using the API, revisions are
+    -- uniquely identified by their ARN.
+    finalized :: Prelude.Maybe Prelude.Bool,
+    -- | The unique identifier for the revision.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | A required comment to inform subscribers of the reason their access to
+    -- the revision was revoked.
+    revocationComment :: Prelude.Maybe Prelude.Text,
+    -- | A status indicating that subscribers\' access to the revision was
+    -- revoked.
+    revoked :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time that the revision was revoked, in ISO 8601 format.
+    revokedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The revision ID of the owned revision corresponding to the entitled
+    -- revision being viewed. This parameter is returned when a revision owner
+    -- is viewing the entitled copy of its owned revision.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time that the revision was last updated, in ISO 8601
+    -- format.
+    updatedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRevisionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateRevisionResponse_arn' - The ARN for the revision.
+--
+-- 'comment', 'updateRevisionResponse_comment' - An optional comment about the revision.
+--
+-- 'createdAt', 'updateRevisionResponse_createdAt' - The date and time that the revision was created, in ISO 8601 format.
+--
+-- 'dataSetId', 'updateRevisionResponse_dataSetId' - The unique identifier for the data set associated with the data set
+-- revision.
+--
+-- 'finalized', 'updateRevisionResponse_finalized' - To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- changes to the assets in the revision are complete. After it\'s in this
+-- read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+--
+-- 'id', 'updateRevisionResponse_id' - The unique identifier for the revision.
+--
+-- 'revocationComment', 'updateRevisionResponse_revocationComment' - A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+--
+-- 'revoked', 'updateRevisionResponse_revoked' - A status indicating that subscribers\' access to the revision was
+-- revoked.
+--
+-- 'revokedAt', 'updateRevisionResponse_revokedAt' - The date and time that the revision was revoked, in ISO 8601 format.
+--
+-- 'sourceId', 'updateRevisionResponse_sourceId' - The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+--
+-- 'updatedAt', 'updateRevisionResponse_updatedAt' - The date and time that the revision was last updated, in ISO 8601
+-- format.
+--
+-- 'httpStatus', 'updateRevisionResponse_httpStatus' - The response's http status code.
+newUpdateRevisionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateRevisionResponse
+newUpdateRevisionResponse pHttpStatus_ =
+  UpdateRevisionResponse'
+    { arn = Prelude.Nothing,
+      comment = Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      dataSetId = Prelude.Nothing,
+      finalized = Prelude.Nothing,
+      id = Prelude.Nothing,
+      revocationComment = Prelude.Nothing,
+      revoked = Prelude.Nothing,
+      revokedAt = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      updatedAt = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ARN for the revision.
+updateRevisionResponse_arn :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.Text)
+updateRevisionResponse_arn = Lens.lens (\UpdateRevisionResponse' {arn} -> arn) (\s@UpdateRevisionResponse' {} a -> s {arn = a} :: UpdateRevisionResponse)
+
+-- | An optional comment about the revision.
+updateRevisionResponse_comment :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.Text)
+updateRevisionResponse_comment = Lens.lens (\UpdateRevisionResponse' {comment} -> comment) (\s@UpdateRevisionResponse' {} a -> s {comment = a} :: UpdateRevisionResponse)
+
+-- | The date and time that the revision was created, in ISO 8601 format.
+updateRevisionResponse_createdAt :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+updateRevisionResponse_createdAt = Lens.lens (\UpdateRevisionResponse' {createdAt} -> createdAt) (\s@UpdateRevisionResponse' {} a -> s {createdAt = a} :: UpdateRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The unique identifier for the data set associated with the data set
+-- revision.
+updateRevisionResponse_dataSetId :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.Text)
+updateRevisionResponse_dataSetId = Lens.lens (\UpdateRevisionResponse' {dataSetId} -> dataSetId) (\s@UpdateRevisionResponse' {} a -> s {dataSetId = a} :: UpdateRevisionResponse)
+
+-- | To publish a revision to a data set in a product, the revision must
+-- first be finalized. Finalizing a revision tells AWS Data Exchange that
+-- changes to the assets in the revision are complete. After it\'s in this
+-- read-only state, you can publish the revision to your products.
+-- Finalized revisions can be published through the AWS Data Exchange
+-- console or the AWS Marketplace Catalog API, using the StartChangeSet AWS
+-- Marketplace Catalog API action. When using the API, revisions are
+-- uniquely identified by their ARN.
+updateRevisionResponse_finalized :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.Bool)
+updateRevisionResponse_finalized = Lens.lens (\UpdateRevisionResponse' {finalized} -> finalized) (\s@UpdateRevisionResponse' {} a -> s {finalized = a} :: UpdateRevisionResponse)
+
+-- | The unique identifier for the revision.
+updateRevisionResponse_id :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.Text)
+updateRevisionResponse_id = Lens.lens (\UpdateRevisionResponse' {id} -> id) (\s@UpdateRevisionResponse' {} a -> s {id = a} :: UpdateRevisionResponse)
+
+-- | A required comment to inform subscribers of the reason their access to
+-- the revision was revoked.
+updateRevisionResponse_revocationComment :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.Text)
+updateRevisionResponse_revocationComment = Lens.lens (\UpdateRevisionResponse' {revocationComment} -> revocationComment) (\s@UpdateRevisionResponse' {} a -> s {revocationComment = a} :: UpdateRevisionResponse)
+
+-- | A status indicating that subscribers\' access to the revision was
+-- revoked.
+updateRevisionResponse_revoked :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.Bool)
+updateRevisionResponse_revoked = Lens.lens (\UpdateRevisionResponse' {revoked} -> revoked) (\s@UpdateRevisionResponse' {} a -> s {revoked = a} :: UpdateRevisionResponse)
+
+-- | The date and time that the revision was revoked, in ISO 8601 format.
+updateRevisionResponse_revokedAt :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+updateRevisionResponse_revokedAt = Lens.lens (\UpdateRevisionResponse' {revokedAt} -> revokedAt) (\s@UpdateRevisionResponse' {} a -> s {revokedAt = a} :: UpdateRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The revision ID of the owned revision corresponding to the entitled
+-- revision being viewed. This parameter is returned when a revision owner
+-- is viewing the entitled copy of its owned revision.
+updateRevisionResponse_sourceId :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.Text)
+updateRevisionResponse_sourceId = Lens.lens (\UpdateRevisionResponse' {sourceId} -> sourceId) (\s@UpdateRevisionResponse' {} a -> s {sourceId = a} :: UpdateRevisionResponse)
+
+-- | The date and time that the revision was last updated, in ISO 8601
+-- format.
+updateRevisionResponse_updatedAt :: Lens.Lens' UpdateRevisionResponse (Prelude.Maybe Prelude.UTCTime)
+updateRevisionResponse_updatedAt = Lens.lens (\UpdateRevisionResponse' {updatedAt} -> updatedAt) (\s@UpdateRevisionResponse' {} a -> s {updatedAt = a} :: UpdateRevisionResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+updateRevisionResponse_httpStatus :: Lens.Lens' UpdateRevisionResponse Prelude.Int
+updateRevisionResponse_httpStatus = Lens.lens (\UpdateRevisionResponse' {httpStatus} -> httpStatus) (\s@UpdateRevisionResponse' {} a -> s {httpStatus = a} :: UpdateRevisionResponse)
+
+instance Prelude.NFData UpdateRevisionResponse where
+  rnf UpdateRevisionResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf dataSetId
+      `Prelude.seq` Prelude.rnf finalized
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf revocationComment
+      `Prelude.seq` Prelude.rnf revoked
+      `Prelude.seq` Prelude.rnf revokedAt
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf updatedAt
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/DataExchange/Waiters.hs b/gen/Amazonka/DataExchange/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/DataExchange/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.DataExchange.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.DataExchange.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.DataExchange.Lens
+import Amazonka.DataExchange.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.DataExchange
+import Test.Amazonka.DataExchange.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "DataExchange"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/DataExchange.hs b/test/Test/Amazonka/DataExchange.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DataExchange.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.DataExchange
+-- Copyright   : (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.DataExchange
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/DataExchange/Internal.hs b/test/Test/Amazonka/DataExchange/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/DataExchange/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.DataExchange.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.DataExchange.Internal where
diff --git a/test/Test/Amazonka/Gen/DataExchange.hs b/test/Test/Amazonka/Gen/DataExchange.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/DataExchange.hs
@@ -0,0 +1,618 @@
+{-# 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.DataExchange
+-- Copyright   : (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.DataExchange where
+
+import Amazonka.DataExchange
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.DataExchange.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCancelJob $
+--             newCancelJob
+--
+--         , requestCreateDataSet $
+--             newCreateDataSet
+--
+--         , requestCreateEventAction $
+--             newCreateEventAction
+--
+--         , requestCreateJob $
+--             newCreateJob
+--
+--         , requestCreateRevision $
+--             newCreateRevision
+--
+--         , requestDeleteAsset $
+--             newDeleteAsset
+--
+--         , requestDeleteDataSet $
+--             newDeleteDataSet
+--
+--         , requestDeleteEventAction $
+--             newDeleteEventAction
+--
+--         , requestDeleteRevision $
+--             newDeleteRevision
+--
+--         , requestGetAsset $
+--             newGetAsset
+--
+--         , requestGetDataSet $
+--             newGetDataSet
+--
+--         , requestGetEventAction $
+--             newGetEventAction
+--
+--         , requestGetJob $
+--             newGetJob
+--
+--         , requestGetRevision $
+--             newGetRevision
+--
+--         , requestListDataSetRevisions $
+--             newListDataSetRevisions
+--
+--         , requestListDataSets $
+--             newListDataSets
+--
+--         , requestListEventActions $
+--             newListEventActions
+--
+--         , requestListJobs $
+--             newListJobs
+--
+--         , requestListRevisionAssets $
+--             newListRevisionAssets
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestRevokeRevision $
+--             newRevokeRevision
+--
+--         , requestSendApiAsset $
+--             newSendApiAsset
+--
+--         , requestStartJob $
+--             newStartJob
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAsset $
+--             newUpdateAsset
+--
+--         , requestUpdateDataSet $
+--             newUpdateDataSet
+--
+--         , requestUpdateEventAction $
+--             newUpdateEventAction
+--
+--         , requestUpdateRevision $
+--             newUpdateRevision
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCancelJob $
+--             newCancelJobResponse
+--
+--         , responseCreateDataSet $
+--             newCreateDataSetResponse
+--
+--         , responseCreateEventAction $
+--             newCreateEventActionResponse
+--
+--         , responseCreateJob $
+--             newCreateJobResponse
+--
+--         , responseCreateRevision $
+--             newCreateRevisionResponse
+--
+--         , responseDeleteAsset $
+--             newDeleteAssetResponse
+--
+--         , responseDeleteDataSet $
+--             newDeleteDataSetResponse
+--
+--         , responseDeleteEventAction $
+--             newDeleteEventActionResponse
+--
+--         , responseDeleteRevision $
+--             newDeleteRevisionResponse
+--
+--         , responseGetAsset $
+--             newGetAssetResponse
+--
+--         , responseGetDataSet $
+--             newGetDataSetResponse
+--
+--         , responseGetEventAction $
+--             newGetEventActionResponse
+--
+--         , responseGetJob $
+--             newGetJobResponse
+--
+--         , responseGetRevision $
+--             newGetRevisionResponse
+--
+--         , responseListDataSetRevisions $
+--             newListDataSetRevisionsResponse
+--
+--         , responseListDataSets $
+--             newListDataSetsResponse
+--
+--         , responseListEventActions $
+--             newListEventActionsResponse
+--
+--         , responseListJobs $
+--             newListJobsResponse
+--
+--         , responseListRevisionAssets $
+--             newListRevisionAssetsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseRevokeRevision $
+--             newRevokeRevisionResponse
+--
+--         , responseSendApiAsset $
+--             newSendApiAssetResponse
+--
+--         , responseStartJob $
+--             newStartJobResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAsset $
+--             newUpdateAssetResponse
+--
+--         , responseUpdateDataSet $
+--             newUpdateDataSetResponse
+--
+--         , responseUpdateEventAction $
+--             newUpdateEventActionResponse
+--
+--         , responseUpdateRevision $
+--             newUpdateRevisionResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCancelJob :: CancelJob -> TestTree
+requestCancelJob =
+  req
+    "CancelJob"
+    "fixture/CancelJob.yaml"
+
+requestCreateDataSet :: CreateDataSet -> TestTree
+requestCreateDataSet =
+  req
+    "CreateDataSet"
+    "fixture/CreateDataSet.yaml"
+
+requestCreateEventAction :: CreateEventAction -> TestTree
+requestCreateEventAction =
+  req
+    "CreateEventAction"
+    "fixture/CreateEventAction.yaml"
+
+requestCreateJob :: CreateJob -> TestTree
+requestCreateJob =
+  req
+    "CreateJob"
+    "fixture/CreateJob.yaml"
+
+requestCreateRevision :: CreateRevision -> TestTree
+requestCreateRevision =
+  req
+    "CreateRevision"
+    "fixture/CreateRevision.yaml"
+
+requestDeleteAsset :: DeleteAsset -> TestTree
+requestDeleteAsset =
+  req
+    "DeleteAsset"
+    "fixture/DeleteAsset.yaml"
+
+requestDeleteDataSet :: DeleteDataSet -> TestTree
+requestDeleteDataSet =
+  req
+    "DeleteDataSet"
+    "fixture/DeleteDataSet.yaml"
+
+requestDeleteEventAction :: DeleteEventAction -> TestTree
+requestDeleteEventAction =
+  req
+    "DeleteEventAction"
+    "fixture/DeleteEventAction.yaml"
+
+requestDeleteRevision :: DeleteRevision -> TestTree
+requestDeleteRevision =
+  req
+    "DeleteRevision"
+    "fixture/DeleteRevision.yaml"
+
+requestGetAsset :: GetAsset -> TestTree
+requestGetAsset =
+  req
+    "GetAsset"
+    "fixture/GetAsset.yaml"
+
+requestGetDataSet :: GetDataSet -> TestTree
+requestGetDataSet =
+  req
+    "GetDataSet"
+    "fixture/GetDataSet.yaml"
+
+requestGetEventAction :: GetEventAction -> TestTree
+requestGetEventAction =
+  req
+    "GetEventAction"
+    "fixture/GetEventAction.yaml"
+
+requestGetJob :: GetJob -> TestTree
+requestGetJob =
+  req
+    "GetJob"
+    "fixture/GetJob.yaml"
+
+requestGetRevision :: GetRevision -> TestTree
+requestGetRevision =
+  req
+    "GetRevision"
+    "fixture/GetRevision.yaml"
+
+requestListDataSetRevisions :: ListDataSetRevisions -> TestTree
+requestListDataSetRevisions =
+  req
+    "ListDataSetRevisions"
+    "fixture/ListDataSetRevisions.yaml"
+
+requestListDataSets :: ListDataSets -> TestTree
+requestListDataSets =
+  req
+    "ListDataSets"
+    "fixture/ListDataSets.yaml"
+
+requestListEventActions :: ListEventActions -> TestTree
+requestListEventActions =
+  req
+    "ListEventActions"
+    "fixture/ListEventActions.yaml"
+
+requestListJobs :: ListJobs -> TestTree
+requestListJobs =
+  req
+    "ListJobs"
+    "fixture/ListJobs.yaml"
+
+requestListRevisionAssets :: ListRevisionAssets -> TestTree
+requestListRevisionAssets =
+  req
+    "ListRevisionAssets"
+    "fixture/ListRevisionAssets.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestRevokeRevision :: RevokeRevision -> TestTree
+requestRevokeRevision =
+  req
+    "RevokeRevision"
+    "fixture/RevokeRevision.yaml"
+
+requestSendApiAsset :: SendApiAsset -> TestTree
+requestSendApiAsset =
+  req
+    "SendApiAsset"
+    "fixture/SendApiAsset.yaml"
+
+requestStartJob :: StartJob -> TestTree
+requestStartJob =
+  req
+    "StartJob"
+    "fixture/StartJob.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAsset :: UpdateAsset -> TestTree
+requestUpdateAsset =
+  req
+    "UpdateAsset"
+    "fixture/UpdateAsset.yaml"
+
+requestUpdateDataSet :: UpdateDataSet -> TestTree
+requestUpdateDataSet =
+  req
+    "UpdateDataSet"
+    "fixture/UpdateDataSet.yaml"
+
+requestUpdateEventAction :: UpdateEventAction -> TestTree
+requestUpdateEventAction =
+  req
+    "UpdateEventAction"
+    "fixture/UpdateEventAction.yaml"
+
+requestUpdateRevision :: UpdateRevision -> TestTree
+requestUpdateRevision =
+  req
+    "UpdateRevision"
+    "fixture/UpdateRevision.yaml"
+
+-- Responses
+
+responseCancelJob :: CancelJobResponse -> TestTree
+responseCancelJob =
+  res
+    "CancelJobResponse"
+    "fixture/CancelJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelJob)
+
+responseCreateDataSet :: CreateDataSetResponse -> TestTree
+responseCreateDataSet =
+  res
+    "CreateDataSetResponse"
+    "fixture/CreateDataSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDataSet)
+
+responseCreateEventAction :: CreateEventActionResponse -> TestTree
+responseCreateEventAction =
+  res
+    "CreateEventActionResponse"
+    "fixture/CreateEventActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEventAction)
+
+responseCreateJob :: CreateJobResponse -> TestTree
+responseCreateJob =
+  res
+    "CreateJobResponse"
+    "fixture/CreateJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateJob)
+
+responseCreateRevision :: CreateRevisionResponse -> TestTree
+responseCreateRevision =
+  res
+    "CreateRevisionResponse"
+    "fixture/CreateRevisionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRevision)
+
+responseDeleteAsset :: DeleteAssetResponse -> TestTree
+responseDeleteAsset =
+  res
+    "DeleteAssetResponse"
+    "fixture/DeleteAssetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAsset)
+
+responseDeleteDataSet :: DeleteDataSetResponse -> TestTree
+responseDeleteDataSet =
+  res
+    "DeleteDataSetResponse"
+    "fixture/DeleteDataSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDataSet)
+
+responseDeleteEventAction :: DeleteEventActionResponse -> TestTree
+responseDeleteEventAction =
+  res
+    "DeleteEventActionResponse"
+    "fixture/DeleteEventActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEventAction)
+
+responseDeleteRevision :: DeleteRevisionResponse -> TestTree
+responseDeleteRevision =
+  res
+    "DeleteRevisionResponse"
+    "fixture/DeleteRevisionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRevision)
+
+responseGetAsset :: GetAssetResponse -> TestTree
+responseGetAsset =
+  res
+    "GetAssetResponse"
+    "fixture/GetAssetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAsset)
+
+responseGetDataSet :: GetDataSetResponse -> TestTree
+responseGetDataSet =
+  res
+    "GetDataSetResponse"
+    "fixture/GetDataSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDataSet)
+
+responseGetEventAction :: GetEventActionResponse -> TestTree
+responseGetEventAction =
+  res
+    "GetEventActionResponse"
+    "fixture/GetEventActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEventAction)
+
+responseGetJob :: GetJobResponse -> TestTree
+responseGetJob =
+  res
+    "GetJobResponse"
+    "fixture/GetJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetJob)
+
+responseGetRevision :: GetRevisionResponse -> TestTree
+responseGetRevision =
+  res
+    "GetRevisionResponse"
+    "fixture/GetRevisionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetRevision)
+
+responseListDataSetRevisions :: ListDataSetRevisionsResponse -> TestTree
+responseListDataSetRevisions =
+  res
+    "ListDataSetRevisionsResponse"
+    "fixture/ListDataSetRevisionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDataSetRevisions)
+
+responseListDataSets :: ListDataSetsResponse -> TestTree
+responseListDataSets =
+  res
+    "ListDataSetsResponse"
+    "fixture/ListDataSetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDataSets)
+
+responseListEventActions :: ListEventActionsResponse -> TestTree
+responseListEventActions =
+  res
+    "ListEventActionsResponse"
+    "fixture/ListEventActionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEventActions)
+
+responseListJobs :: ListJobsResponse -> TestTree
+responseListJobs =
+  res
+    "ListJobsResponse"
+    "fixture/ListJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListJobs)
+
+responseListRevisionAssets :: ListRevisionAssetsResponse -> TestTree
+responseListRevisionAssets =
+  res
+    "ListRevisionAssetsResponse"
+    "fixture/ListRevisionAssetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRevisionAssets)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseRevokeRevision :: RevokeRevisionResponse -> TestTree
+responseRevokeRevision =
+  res
+    "RevokeRevisionResponse"
+    "fixture/RevokeRevisionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeRevision)
+
+responseSendApiAsset :: SendApiAssetResponse -> TestTree
+responseSendApiAsset =
+  res
+    "SendApiAssetResponse"
+    "fixture/SendApiAssetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendApiAsset)
+
+responseStartJob :: StartJobResponse -> TestTree
+responseStartJob =
+  res
+    "StartJobResponse"
+    "fixture/StartJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartJob)
+
+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)
+
+responseUpdateAsset :: UpdateAssetResponse -> TestTree
+responseUpdateAsset =
+  res
+    "UpdateAssetResponse"
+    "fixture/UpdateAssetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAsset)
+
+responseUpdateDataSet :: UpdateDataSetResponse -> TestTree
+responseUpdateDataSet =
+  res
+    "UpdateDataSetResponse"
+    "fixture/UpdateDataSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDataSet)
+
+responseUpdateEventAction :: UpdateEventActionResponse -> TestTree
+responseUpdateEventAction =
+  res
+    "UpdateEventActionResponse"
+    "fixture/UpdateEventActionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEventAction)
+
+responseUpdateRevision :: UpdateRevisionResponse -> TestTree
+responseUpdateRevision =
+  res
+    "UpdateRevisionResponse"
+    "fixture/UpdateRevisionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRevision)
