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 OpenSearch Service Serverless SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-11-01@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-opensearchserverless)
+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.OpenSearchServerless](http://hackage.haskell.org/package/amazonka-opensearchserverless/docs/Amazonka-OpenSearchServerless.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-opensearchserverless` 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-opensearchserverless.cabal b/amazonka-opensearchserverless.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-opensearchserverless.cabal
@@ -0,0 +1,148 @@
+cabal-version:      2.2
+name:               amazonka-opensearchserverless
+version:            2.0
+synopsis:           Amazon OpenSearch Service Serverless SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2021-11-01@ 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.OpenSearchServerless.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.OpenSearchServerless" 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-opensearchserverless
+
+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.OpenSearchServerless
+    Amazonka.OpenSearchServerless.BatchGetCollection
+    Amazonka.OpenSearchServerless.BatchGetVpcEndpoint
+    Amazonka.OpenSearchServerless.CreateAccessPolicy
+    Amazonka.OpenSearchServerless.CreateCollection
+    Amazonka.OpenSearchServerless.CreateSecurityConfig
+    Amazonka.OpenSearchServerless.CreateSecurityPolicy
+    Amazonka.OpenSearchServerless.CreateVpcEndpoint
+    Amazonka.OpenSearchServerless.DeleteAccessPolicy
+    Amazonka.OpenSearchServerless.DeleteCollection
+    Amazonka.OpenSearchServerless.DeleteSecurityConfig
+    Amazonka.OpenSearchServerless.DeleteSecurityPolicy
+    Amazonka.OpenSearchServerless.DeleteVpcEndpoint
+    Amazonka.OpenSearchServerless.GetAccessPolicy
+    Amazonka.OpenSearchServerless.GetAccountSettings
+    Amazonka.OpenSearchServerless.GetPoliciesStats
+    Amazonka.OpenSearchServerless.GetSecurityConfig
+    Amazonka.OpenSearchServerless.GetSecurityPolicy
+    Amazonka.OpenSearchServerless.Lens
+    Amazonka.OpenSearchServerless.ListAccessPolicies
+    Amazonka.OpenSearchServerless.ListCollections
+    Amazonka.OpenSearchServerless.ListSecurityConfigs
+    Amazonka.OpenSearchServerless.ListSecurityPolicies
+    Amazonka.OpenSearchServerless.ListTagsForResource
+    Amazonka.OpenSearchServerless.ListVpcEndpoints
+    Amazonka.OpenSearchServerless.TagResource
+    Amazonka.OpenSearchServerless.Types
+    Amazonka.OpenSearchServerless.Types.AccessPolicyDetail
+    Amazonka.OpenSearchServerless.Types.AccessPolicyStats
+    Amazonka.OpenSearchServerless.Types.AccessPolicySummary
+    Amazonka.OpenSearchServerless.Types.AccessPolicyType
+    Amazonka.OpenSearchServerless.Types.AccountSettingsDetail
+    Amazonka.OpenSearchServerless.Types.CapacityLimits
+    Amazonka.OpenSearchServerless.Types.CollectionDetail
+    Amazonka.OpenSearchServerless.Types.CollectionErrorDetail
+    Amazonka.OpenSearchServerless.Types.CollectionFilters
+    Amazonka.OpenSearchServerless.Types.CollectionStatus
+    Amazonka.OpenSearchServerless.Types.CollectionSummary
+    Amazonka.OpenSearchServerless.Types.CollectionType
+    Amazonka.OpenSearchServerless.Types.CreateCollectionDetail
+    Amazonka.OpenSearchServerless.Types.CreateVpcEndpointDetail
+    Amazonka.OpenSearchServerless.Types.DeleteCollectionDetail
+    Amazonka.OpenSearchServerless.Types.DeleteVpcEndpointDetail
+    Amazonka.OpenSearchServerless.Types.Document
+    Amazonka.OpenSearchServerless.Types.SamlConfigOptions
+    Amazonka.OpenSearchServerless.Types.SecurityConfigDetail
+    Amazonka.OpenSearchServerless.Types.SecurityConfigStats
+    Amazonka.OpenSearchServerless.Types.SecurityConfigSummary
+    Amazonka.OpenSearchServerless.Types.SecurityConfigType
+    Amazonka.OpenSearchServerless.Types.SecurityPolicyDetail
+    Amazonka.OpenSearchServerless.Types.SecurityPolicyStats
+    Amazonka.OpenSearchServerless.Types.SecurityPolicySummary
+    Amazonka.OpenSearchServerless.Types.SecurityPolicyType
+    Amazonka.OpenSearchServerless.Types.Tag
+    Amazonka.OpenSearchServerless.Types.UpdateCollectionDetail
+    Amazonka.OpenSearchServerless.Types.UpdateVpcEndpointDetail
+    Amazonka.OpenSearchServerless.Types.VpcEndpointDetail
+    Amazonka.OpenSearchServerless.Types.VpcEndpointErrorDetail
+    Amazonka.OpenSearchServerless.Types.VpcEndpointFilters
+    Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+    Amazonka.OpenSearchServerless.Types.VpcEndpointSummary
+    Amazonka.OpenSearchServerless.UntagResource
+    Amazonka.OpenSearchServerless.UpdateAccessPolicy
+    Amazonka.OpenSearchServerless.UpdateAccountSettings
+    Amazonka.OpenSearchServerless.UpdateCollection
+    Amazonka.OpenSearchServerless.UpdateSecurityConfig
+    Amazonka.OpenSearchServerless.UpdateSecurityPolicy
+    Amazonka.OpenSearchServerless.UpdateVpcEndpoint
+    Amazonka.OpenSearchServerless.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-opensearchserverless-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.OpenSearchServerless
+    Test.Amazonka.OpenSearchServerless
+    Test.Amazonka.OpenSearchServerless.Internal
+
+  build-depends:
+    , amazonka-core                  >=2.0 && <2.1
+    , amazonka-opensearchserverless
+    , amazonka-test                  >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchGetCollection.yaml b/fixture/BatchGetCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/BatchGetCollectionResponse.proto b/fixture/BatchGetCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetCollectionResponse.proto
diff --git a/fixture/BatchGetVpcEndpoint.yaml b/fixture/BatchGetVpcEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetVpcEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/BatchGetVpcEndpointResponse.proto b/fixture/BatchGetVpcEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetVpcEndpointResponse.proto
diff --git a/fixture/CreateAccessPolicy.yaml b/fixture/CreateAccessPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAccessPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/CreateAccessPolicyResponse.proto b/fixture/CreateAccessPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAccessPolicyResponse.proto
diff --git a/fixture/CreateCollection.yaml b/fixture/CreateCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/CreateCollectionResponse.proto b/fixture/CreateCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCollectionResponse.proto
diff --git a/fixture/CreateSecurityConfig.yaml b/fixture/CreateSecurityConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSecurityConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/CreateSecurityConfigResponse.proto b/fixture/CreateSecurityConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSecurityConfigResponse.proto
diff --git a/fixture/CreateSecurityPolicy.yaml b/fixture/CreateSecurityPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSecurityPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/CreateSecurityPolicyResponse.proto b/fixture/CreateSecurityPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSecurityPolicyResponse.proto
diff --git a/fixture/CreateVpcEndpoint.yaml b/fixture/CreateVpcEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/CreateVpcEndpointResponse.proto b/fixture/CreateVpcEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcEndpointResponse.proto
diff --git a/fixture/DeleteAccessPolicy.yaml b/fixture/DeleteAccessPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccessPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/DeleteAccessPolicyResponse.proto b/fixture/DeleteAccessPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAccessPolicyResponse.proto
diff --git a/fixture/DeleteCollection.yaml b/fixture/DeleteCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/DeleteCollectionResponse.proto b/fixture/DeleteCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCollectionResponse.proto
diff --git a/fixture/DeleteSecurityConfig.yaml b/fixture/DeleteSecurityConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSecurityConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/DeleteSecurityConfigResponse.proto b/fixture/DeleteSecurityConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSecurityConfigResponse.proto
diff --git a/fixture/DeleteSecurityPolicy.yaml b/fixture/DeleteSecurityPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSecurityPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/DeleteSecurityPolicyResponse.proto b/fixture/DeleteSecurityPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSecurityPolicyResponse.proto
diff --git a/fixture/DeleteVpcEndpoint.yaml b/fixture/DeleteVpcEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/DeleteVpcEndpointResponse.proto b/fixture/DeleteVpcEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcEndpointResponse.proto
diff --git a/fixture/GetAccessPolicy.yaml b/fixture/GetAccessPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccessPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/GetAccessPolicyResponse.proto b/fixture/GetAccessPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccessPolicyResponse.proto
diff --git a/fixture/GetAccountSettings.yaml b/fixture/GetAccountSettings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccountSettings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/GetAccountSettingsResponse.proto b/fixture/GetAccountSettingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccountSettingsResponse.proto
diff --git a/fixture/GetPoliciesStats.yaml b/fixture/GetPoliciesStats.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPoliciesStats.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/GetPoliciesStatsResponse.proto b/fixture/GetPoliciesStatsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPoliciesStatsResponse.proto
diff --git a/fixture/GetSecurityConfig.yaml b/fixture/GetSecurityConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSecurityConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/GetSecurityConfigResponse.proto b/fixture/GetSecurityConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSecurityConfigResponse.proto
diff --git a/fixture/GetSecurityPolicy.yaml b/fixture/GetSecurityPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSecurityPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/GetSecurityPolicyResponse.proto b/fixture/GetSecurityPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSecurityPolicyResponse.proto
diff --git a/fixture/ListAccessPolicies.yaml b/fixture/ListAccessPolicies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccessPolicies.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/ListAccessPoliciesResponse.proto b/fixture/ListAccessPoliciesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAccessPoliciesResponse.proto
diff --git a/fixture/ListCollections.yaml b/fixture/ListCollections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCollections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/ListCollectionsResponse.proto b/fixture/ListCollectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCollectionsResponse.proto
diff --git a/fixture/ListSecurityConfigs.yaml b/fixture/ListSecurityConfigs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSecurityConfigs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/ListSecurityConfigsResponse.proto b/fixture/ListSecurityConfigsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSecurityConfigsResponse.proto
diff --git a/fixture/ListSecurityPolicies.yaml b/fixture/ListSecurityPolicies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSecurityPolicies.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/ListSecurityPoliciesResponse.proto b/fixture/ListSecurityPoliciesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSecurityPoliciesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/ListVpcEndpoints.yaml b/fixture/ListVpcEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListVpcEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/ListVpcEndpointsResponse.proto b/fixture/ListVpcEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListVpcEndpointsResponse.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/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/UpdateAccessPolicy.yaml b/fixture/UpdateAccessPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAccessPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/UpdateAccessPolicyResponse.proto b/fixture/UpdateAccessPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAccessPolicyResponse.proto
diff --git a/fixture/UpdateAccountSettings.yaml b/fixture/UpdateAccountSettings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAccountSettings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/UpdateAccountSettingsResponse.proto b/fixture/UpdateAccountSettingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAccountSettingsResponse.proto
diff --git a/fixture/UpdateCollection.yaml b/fixture/UpdateCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/UpdateCollectionResponse.proto b/fixture/UpdateCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCollectionResponse.proto
diff --git a/fixture/UpdateSecurityConfig.yaml b/fixture/UpdateSecurityConfig.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSecurityConfig.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/UpdateSecurityConfigResponse.proto b/fixture/UpdateSecurityConfigResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSecurityConfigResponse.proto
diff --git a/fixture/UpdateSecurityPolicy.yaml b/fixture/UpdateSecurityPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSecurityPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/UpdateSecurityPolicyResponse.proto b/fixture/UpdateSecurityPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSecurityPolicyResponse.proto
diff --git a/fixture/UpdateVpcEndpoint.yaml b/fixture/UpdateVpcEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVpcEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/aoss/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  aoss.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/UpdateVpcEndpointResponse.proto b/fixture/UpdateVpcEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateVpcEndpointResponse.proto
diff --git a/gen/Amazonka/OpenSearchServerless.hs b/gen/Amazonka/OpenSearchServerless.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless.hs
@@ -0,0 +1,431 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2021-11-01@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Use the Amazon OpenSearch Serverless API to create, configure, and
+-- manage OpenSearch Serverless collections and security policies.
+--
+-- OpenSearch Serverless is an on-demand, pre-provisioned serverless
+-- configuration for Amazon OpenSearch Service. OpenSearch Serverless
+-- removes the operational complexities of provisioning, configuring, and
+-- tuning your OpenSearch clusters. It enables you to easily search and
+-- analyze petabytes of data without having to worry about the underlying
+-- infrastructure and data management.
+--
+-- To learn more about OpenSearch Serverless, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html What is Amazon OpenSearch Serverless?>
+module Amazonka.OpenSearchServerless
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchGetCollection
+    BatchGetCollection (BatchGetCollection'),
+    newBatchGetCollection,
+    BatchGetCollectionResponse (BatchGetCollectionResponse'),
+    newBatchGetCollectionResponse,
+
+    -- ** BatchGetVpcEndpoint
+    BatchGetVpcEndpoint (BatchGetVpcEndpoint'),
+    newBatchGetVpcEndpoint,
+    BatchGetVpcEndpointResponse (BatchGetVpcEndpointResponse'),
+    newBatchGetVpcEndpointResponse,
+
+    -- ** CreateAccessPolicy
+    CreateAccessPolicy (CreateAccessPolicy'),
+    newCreateAccessPolicy,
+    CreateAccessPolicyResponse (CreateAccessPolicyResponse'),
+    newCreateAccessPolicyResponse,
+
+    -- ** CreateCollection
+    CreateCollection (CreateCollection'),
+    newCreateCollection,
+    CreateCollectionResponse (CreateCollectionResponse'),
+    newCreateCollectionResponse,
+
+    -- ** CreateSecurityConfig
+    CreateSecurityConfig (CreateSecurityConfig'),
+    newCreateSecurityConfig,
+    CreateSecurityConfigResponse (CreateSecurityConfigResponse'),
+    newCreateSecurityConfigResponse,
+
+    -- ** CreateSecurityPolicy
+    CreateSecurityPolicy (CreateSecurityPolicy'),
+    newCreateSecurityPolicy,
+    CreateSecurityPolicyResponse (CreateSecurityPolicyResponse'),
+    newCreateSecurityPolicyResponse,
+
+    -- ** CreateVpcEndpoint
+    CreateVpcEndpoint (CreateVpcEndpoint'),
+    newCreateVpcEndpoint,
+    CreateVpcEndpointResponse (CreateVpcEndpointResponse'),
+    newCreateVpcEndpointResponse,
+
+    -- ** DeleteAccessPolicy
+    DeleteAccessPolicy (DeleteAccessPolicy'),
+    newDeleteAccessPolicy,
+    DeleteAccessPolicyResponse (DeleteAccessPolicyResponse'),
+    newDeleteAccessPolicyResponse,
+
+    -- ** DeleteCollection
+    DeleteCollection (DeleteCollection'),
+    newDeleteCollection,
+    DeleteCollectionResponse (DeleteCollectionResponse'),
+    newDeleteCollectionResponse,
+
+    -- ** DeleteSecurityConfig
+    DeleteSecurityConfig (DeleteSecurityConfig'),
+    newDeleteSecurityConfig,
+    DeleteSecurityConfigResponse (DeleteSecurityConfigResponse'),
+    newDeleteSecurityConfigResponse,
+
+    -- ** DeleteSecurityPolicy
+    DeleteSecurityPolicy (DeleteSecurityPolicy'),
+    newDeleteSecurityPolicy,
+    DeleteSecurityPolicyResponse (DeleteSecurityPolicyResponse'),
+    newDeleteSecurityPolicyResponse,
+
+    -- ** DeleteVpcEndpoint
+    DeleteVpcEndpoint (DeleteVpcEndpoint'),
+    newDeleteVpcEndpoint,
+    DeleteVpcEndpointResponse (DeleteVpcEndpointResponse'),
+    newDeleteVpcEndpointResponse,
+
+    -- ** GetAccessPolicy
+    GetAccessPolicy (GetAccessPolicy'),
+    newGetAccessPolicy,
+    GetAccessPolicyResponse (GetAccessPolicyResponse'),
+    newGetAccessPolicyResponse,
+
+    -- ** GetAccountSettings
+    GetAccountSettings (GetAccountSettings'),
+    newGetAccountSettings,
+    GetAccountSettingsResponse (GetAccountSettingsResponse'),
+    newGetAccountSettingsResponse,
+
+    -- ** GetPoliciesStats
+    GetPoliciesStats (GetPoliciesStats'),
+    newGetPoliciesStats,
+    GetPoliciesStatsResponse (GetPoliciesStatsResponse'),
+    newGetPoliciesStatsResponse,
+
+    -- ** GetSecurityConfig
+    GetSecurityConfig (GetSecurityConfig'),
+    newGetSecurityConfig,
+    GetSecurityConfigResponse (GetSecurityConfigResponse'),
+    newGetSecurityConfigResponse,
+
+    -- ** GetSecurityPolicy
+    GetSecurityPolicy (GetSecurityPolicy'),
+    newGetSecurityPolicy,
+    GetSecurityPolicyResponse (GetSecurityPolicyResponse'),
+    newGetSecurityPolicyResponse,
+
+    -- ** ListAccessPolicies
+    ListAccessPolicies (ListAccessPolicies'),
+    newListAccessPolicies,
+    ListAccessPoliciesResponse (ListAccessPoliciesResponse'),
+    newListAccessPoliciesResponse,
+
+    -- ** ListCollections
+    ListCollections (ListCollections'),
+    newListCollections,
+    ListCollectionsResponse (ListCollectionsResponse'),
+    newListCollectionsResponse,
+
+    -- ** ListSecurityConfigs
+    ListSecurityConfigs (ListSecurityConfigs'),
+    newListSecurityConfigs,
+    ListSecurityConfigsResponse (ListSecurityConfigsResponse'),
+    newListSecurityConfigsResponse,
+
+    -- ** ListSecurityPolicies
+    ListSecurityPolicies (ListSecurityPolicies'),
+    newListSecurityPolicies,
+    ListSecurityPoliciesResponse (ListSecurityPoliciesResponse'),
+    newListSecurityPoliciesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListVpcEndpoints
+    ListVpcEndpoints (ListVpcEndpoints'),
+    newListVpcEndpoints,
+    ListVpcEndpointsResponse (ListVpcEndpointsResponse'),
+    newListVpcEndpointsResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateAccessPolicy
+    UpdateAccessPolicy (UpdateAccessPolicy'),
+    newUpdateAccessPolicy,
+    UpdateAccessPolicyResponse (UpdateAccessPolicyResponse'),
+    newUpdateAccessPolicyResponse,
+
+    -- ** UpdateAccountSettings
+    UpdateAccountSettings (UpdateAccountSettings'),
+    newUpdateAccountSettings,
+    UpdateAccountSettingsResponse (UpdateAccountSettingsResponse'),
+    newUpdateAccountSettingsResponse,
+
+    -- ** UpdateCollection
+    UpdateCollection (UpdateCollection'),
+    newUpdateCollection,
+    UpdateCollectionResponse (UpdateCollectionResponse'),
+    newUpdateCollectionResponse,
+
+    -- ** UpdateSecurityConfig
+    UpdateSecurityConfig (UpdateSecurityConfig'),
+    newUpdateSecurityConfig,
+    UpdateSecurityConfigResponse (UpdateSecurityConfigResponse'),
+    newUpdateSecurityConfigResponse,
+
+    -- ** UpdateSecurityPolicy
+    UpdateSecurityPolicy (UpdateSecurityPolicy'),
+    newUpdateSecurityPolicy,
+    UpdateSecurityPolicyResponse (UpdateSecurityPolicyResponse'),
+    newUpdateSecurityPolicyResponse,
+
+    -- ** UpdateVpcEndpoint
+    UpdateVpcEndpoint (UpdateVpcEndpoint'),
+    newUpdateVpcEndpoint,
+    UpdateVpcEndpointResponse (UpdateVpcEndpointResponse'),
+    newUpdateVpcEndpointResponse,
+
+    -- * Types
+
+    -- ** AccessPolicyType
+    AccessPolicyType (..),
+
+    -- ** CollectionStatus
+    CollectionStatus (..),
+
+    -- ** CollectionType
+    CollectionType (..),
+
+    -- ** SecurityConfigType
+    SecurityConfigType (..),
+
+    -- ** SecurityPolicyType
+    SecurityPolicyType (..),
+
+    -- ** VpcEndpointStatus
+    VpcEndpointStatus (..),
+
+    -- ** AccessPolicyDetail
+    AccessPolicyDetail (AccessPolicyDetail'),
+    newAccessPolicyDetail,
+
+    -- ** AccessPolicyStats
+    AccessPolicyStats (AccessPolicyStats'),
+    newAccessPolicyStats,
+
+    -- ** AccessPolicySummary
+    AccessPolicySummary (AccessPolicySummary'),
+    newAccessPolicySummary,
+
+    -- ** AccountSettingsDetail
+    AccountSettingsDetail (AccountSettingsDetail'),
+    newAccountSettingsDetail,
+
+    -- ** CapacityLimits
+    CapacityLimits (CapacityLimits'),
+    newCapacityLimits,
+
+    -- ** CollectionDetail
+    CollectionDetail (CollectionDetail'),
+    newCollectionDetail,
+
+    -- ** CollectionErrorDetail
+    CollectionErrorDetail (CollectionErrorDetail'),
+    newCollectionErrorDetail,
+
+    -- ** CollectionFilters
+    CollectionFilters (CollectionFilters'),
+    newCollectionFilters,
+
+    -- ** CollectionSummary
+    CollectionSummary (CollectionSummary'),
+    newCollectionSummary,
+
+    -- ** CreateCollectionDetail
+    CreateCollectionDetail (CreateCollectionDetail'),
+    newCreateCollectionDetail,
+
+    -- ** CreateVpcEndpointDetail
+    CreateVpcEndpointDetail (CreateVpcEndpointDetail'),
+    newCreateVpcEndpointDetail,
+
+    -- ** DeleteCollectionDetail
+    DeleteCollectionDetail (DeleteCollectionDetail'),
+    newDeleteCollectionDetail,
+
+    -- ** DeleteVpcEndpointDetail
+    DeleteVpcEndpointDetail (DeleteVpcEndpointDetail'),
+    newDeleteVpcEndpointDetail,
+
+    -- ** Document
+    Document (Document'),
+    newDocument,
+
+    -- ** SamlConfigOptions
+    SamlConfigOptions (SamlConfigOptions'),
+    newSamlConfigOptions,
+
+    -- ** SecurityConfigDetail
+    SecurityConfigDetail (SecurityConfigDetail'),
+    newSecurityConfigDetail,
+
+    -- ** SecurityConfigStats
+    SecurityConfigStats (SecurityConfigStats'),
+    newSecurityConfigStats,
+
+    -- ** SecurityConfigSummary
+    SecurityConfigSummary (SecurityConfigSummary'),
+    newSecurityConfigSummary,
+
+    -- ** SecurityPolicyDetail
+    SecurityPolicyDetail (SecurityPolicyDetail'),
+    newSecurityPolicyDetail,
+
+    -- ** SecurityPolicyStats
+    SecurityPolicyStats (SecurityPolicyStats'),
+    newSecurityPolicyStats,
+
+    -- ** SecurityPolicySummary
+    SecurityPolicySummary (SecurityPolicySummary'),
+    newSecurityPolicySummary,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** UpdateCollectionDetail
+    UpdateCollectionDetail (UpdateCollectionDetail'),
+    newUpdateCollectionDetail,
+
+    -- ** UpdateVpcEndpointDetail
+    UpdateVpcEndpointDetail (UpdateVpcEndpointDetail'),
+    newUpdateVpcEndpointDetail,
+
+    -- ** VpcEndpointDetail
+    VpcEndpointDetail (VpcEndpointDetail'),
+    newVpcEndpointDetail,
+
+    -- ** VpcEndpointErrorDetail
+    VpcEndpointErrorDetail (VpcEndpointErrorDetail'),
+    newVpcEndpointErrorDetail,
+
+    -- ** VpcEndpointFilters
+    VpcEndpointFilters (VpcEndpointFilters'),
+    newVpcEndpointFilters,
+
+    -- ** VpcEndpointSummary
+    VpcEndpointSummary (VpcEndpointSummary'),
+    newVpcEndpointSummary,
+  )
+where
+
+import Amazonka.OpenSearchServerless.BatchGetCollection
+import Amazonka.OpenSearchServerless.BatchGetVpcEndpoint
+import Amazonka.OpenSearchServerless.CreateAccessPolicy
+import Amazonka.OpenSearchServerless.CreateCollection
+import Amazonka.OpenSearchServerless.CreateSecurityConfig
+import Amazonka.OpenSearchServerless.CreateSecurityPolicy
+import Amazonka.OpenSearchServerless.CreateVpcEndpoint
+import Amazonka.OpenSearchServerless.DeleteAccessPolicy
+import Amazonka.OpenSearchServerless.DeleteCollection
+import Amazonka.OpenSearchServerless.DeleteSecurityConfig
+import Amazonka.OpenSearchServerless.DeleteSecurityPolicy
+import Amazonka.OpenSearchServerless.DeleteVpcEndpoint
+import Amazonka.OpenSearchServerless.GetAccessPolicy
+import Amazonka.OpenSearchServerless.GetAccountSettings
+import Amazonka.OpenSearchServerless.GetPoliciesStats
+import Amazonka.OpenSearchServerless.GetSecurityConfig
+import Amazonka.OpenSearchServerless.GetSecurityPolicy
+import Amazonka.OpenSearchServerless.Lens
+import Amazonka.OpenSearchServerless.ListAccessPolicies
+import Amazonka.OpenSearchServerless.ListCollections
+import Amazonka.OpenSearchServerless.ListSecurityConfigs
+import Amazonka.OpenSearchServerless.ListSecurityPolicies
+import Amazonka.OpenSearchServerless.ListTagsForResource
+import Amazonka.OpenSearchServerless.ListVpcEndpoints
+import Amazonka.OpenSearchServerless.TagResource
+import Amazonka.OpenSearchServerless.Types
+import Amazonka.OpenSearchServerless.UntagResource
+import Amazonka.OpenSearchServerless.UpdateAccessPolicy
+import Amazonka.OpenSearchServerless.UpdateAccountSettings
+import Amazonka.OpenSearchServerless.UpdateCollection
+import Amazonka.OpenSearchServerless.UpdateSecurityConfig
+import Amazonka.OpenSearchServerless.UpdateSecurityPolicy
+import Amazonka.OpenSearchServerless.UpdateVpcEndpoint
+import Amazonka.OpenSearchServerless.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 'OpenSearchServerless'.
+
+-- $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/OpenSearchServerless/BatchGetCollection.hs b/gen/Amazonka/OpenSearchServerless/BatchGetCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/BatchGetCollection.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.BatchGetCollection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns attributes for one or more collections, including the collection
+-- endpoint and the OpenSearch Dashboards endpoint. For more information,
+-- see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html Creating and managing Amazon OpenSearch Serverless collections>.
+module Amazonka.OpenSearchServerless.BatchGetCollection
+  ( -- * Creating a Request
+    BatchGetCollection (..),
+    newBatchGetCollection,
+
+    -- * Request Lenses
+    batchGetCollection_ids,
+    batchGetCollection_names,
+
+    -- * Destructuring the Response
+    BatchGetCollectionResponse (..),
+    newBatchGetCollectionResponse,
+
+    -- * Response Lenses
+    batchGetCollectionResponse_collectionDetails,
+    batchGetCollectionResponse_collectionErrorDetails,
+    batchGetCollectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchGetCollection' smart constructor.
+data BatchGetCollection = BatchGetCollection'
+  { -- | A list of collection IDs. You can\'t provide names and IDs in the same
+    -- request. The ID is part of the collection endpoint. You can also
+    -- retrieve it using the
+    -- <https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListCollections.html ListCollections>
+    -- API.
+    ids :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | A list of collection names. You can\'t provide names and IDs in the same
+    -- request.
+    names :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetCollection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ids', 'batchGetCollection_ids' - A list of collection IDs. You can\'t provide names and IDs in the same
+-- request. The ID is part of the collection endpoint. You can also
+-- retrieve it using the
+-- <https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListCollections.html ListCollections>
+-- API.
+--
+-- 'names', 'batchGetCollection_names' - A list of collection names. You can\'t provide names and IDs in the same
+-- request.
+newBatchGetCollection ::
+  BatchGetCollection
+newBatchGetCollection =
+  BatchGetCollection'
+    { ids = Prelude.Nothing,
+      names = Prelude.Nothing
+    }
+
+-- | A list of collection IDs. You can\'t provide names and IDs in the same
+-- request. The ID is part of the collection endpoint. You can also
+-- retrieve it using the
+-- <https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListCollections.html ListCollections>
+-- API.
+batchGetCollection_ids :: Lens.Lens' BatchGetCollection (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+batchGetCollection_ids = Lens.lens (\BatchGetCollection' {ids} -> ids) (\s@BatchGetCollection' {} a -> s {ids = a} :: BatchGetCollection) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of collection names. You can\'t provide names and IDs in the same
+-- request.
+batchGetCollection_names :: Lens.Lens' BatchGetCollection (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+batchGetCollection_names = Lens.lens (\BatchGetCollection' {names} -> names) (\s@BatchGetCollection' {} a -> s {names = a} :: BatchGetCollection) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest BatchGetCollection where
+  type
+    AWSResponse BatchGetCollection =
+      BatchGetCollectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchGetCollectionResponse'
+            Prelude.<$> ( x
+                            Data..?> "collectionDetails"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "collectionErrorDetails"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchGetCollection where
+  hashWithSalt _salt BatchGetCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` ids
+      `Prelude.hashWithSalt` names
+
+instance Prelude.NFData BatchGetCollection where
+  rnf BatchGetCollection' {..} =
+    Prelude.rnf ids `Prelude.seq` Prelude.rnf names
+
+instance Data.ToHeaders BatchGetCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.BatchGetCollection" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchGetCollection where
+  toJSON BatchGetCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ids" Data..=) Prelude.<$> ids,
+            ("names" Data..=) Prelude.<$> names
+          ]
+      )
+
+instance Data.ToPath BatchGetCollection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchGetCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchGetCollectionResponse' smart constructor.
+data BatchGetCollectionResponse = BatchGetCollectionResponse'
+  { -- | Details about each collection.
+    collectionDetails :: Prelude.Maybe [CollectionDetail],
+    -- | Error information for the request.
+    collectionErrorDetails :: Prelude.Maybe [CollectionErrorDetail],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetCollectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionDetails', 'batchGetCollectionResponse_collectionDetails' - Details about each collection.
+--
+-- 'collectionErrorDetails', 'batchGetCollectionResponse_collectionErrorDetails' - Error information for the request.
+--
+-- 'httpStatus', 'batchGetCollectionResponse_httpStatus' - The response's http status code.
+newBatchGetCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchGetCollectionResponse
+newBatchGetCollectionResponse pHttpStatus_ =
+  BatchGetCollectionResponse'
+    { collectionDetails =
+        Prelude.Nothing,
+      collectionErrorDetails = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about each collection.
+batchGetCollectionResponse_collectionDetails :: Lens.Lens' BatchGetCollectionResponse (Prelude.Maybe [CollectionDetail])
+batchGetCollectionResponse_collectionDetails = Lens.lens (\BatchGetCollectionResponse' {collectionDetails} -> collectionDetails) (\s@BatchGetCollectionResponse' {} a -> s {collectionDetails = a} :: BatchGetCollectionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Error information for the request.
+batchGetCollectionResponse_collectionErrorDetails :: Lens.Lens' BatchGetCollectionResponse (Prelude.Maybe [CollectionErrorDetail])
+batchGetCollectionResponse_collectionErrorDetails = Lens.lens (\BatchGetCollectionResponse' {collectionErrorDetails} -> collectionErrorDetails) (\s@BatchGetCollectionResponse' {} a -> s {collectionErrorDetails = a} :: BatchGetCollectionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchGetCollectionResponse_httpStatus :: Lens.Lens' BatchGetCollectionResponse Prelude.Int
+batchGetCollectionResponse_httpStatus = Lens.lens (\BatchGetCollectionResponse' {httpStatus} -> httpStatus) (\s@BatchGetCollectionResponse' {} a -> s {httpStatus = a} :: BatchGetCollectionResponse)
+
+instance Prelude.NFData BatchGetCollectionResponse where
+  rnf BatchGetCollectionResponse' {..} =
+    Prelude.rnf collectionDetails
+      `Prelude.seq` Prelude.rnf collectionErrorDetails
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/BatchGetVpcEndpoint.hs b/gen/Amazonka/OpenSearchServerless/BatchGetVpcEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/BatchGetVpcEndpoint.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.BatchGetVpcEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns attributes for one or more VPC endpoints associated with the
+-- current account. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html Access Amazon OpenSearch Serverless using an interface endpoint>.
+module Amazonka.OpenSearchServerless.BatchGetVpcEndpoint
+  ( -- * Creating a Request
+    BatchGetVpcEndpoint (..),
+    newBatchGetVpcEndpoint,
+
+    -- * Request Lenses
+    batchGetVpcEndpoint_ids,
+
+    -- * Destructuring the Response
+    BatchGetVpcEndpointResponse (..),
+    newBatchGetVpcEndpointResponse,
+
+    -- * Response Lenses
+    batchGetVpcEndpointResponse_vpcEndpointDetails,
+    batchGetVpcEndpointResponse_vpcEndpointErrorDetails,
+    batchGetVpcEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchGetVpcEndpoint' smart constructor.
+data BatchGetVpcEndpoint = BatchGetVpcEndpoint'
+  { -- | A list of VPC endpoint identifiers.
+    ids :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetVpcEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ids', 'batchGetVpcEndpoint_ids' - A list of VPC endpoint identifiers.
+newBatchGetVpcEndpoint ::
+  -- | 'ids'
+  Prelude.NonEmpty Prelude.Text ->
+  BatchGetVpcEndpoint
+newBatchGetVpcEndpoint pIds_ =
+  BatchGetVpcEndpoint'
+    { ids =
+        Lens.coerced Lens.# pIds_
+    }
+
+-- | A list of VPC endpoint identifiers.
+batchGetVpcEndpoint_ids :: Lens.Lens' BatchGetVpcEndpoint (Prelude.NonEmpty Prelude.Text)
+batchGetVpcEndpoint_ids = Lens.lens (\BatchGetVpcEndpoint' {ids} -> ids) (\s@BatchGetVpcEndpoint' {} a -> s {ids = a} :: BatchGetVpcEndpoint) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchGetVpcEndpoint where
+  type
+    AWSResponse BatchGetVpcEndpoint =
+      BatchGetVpcEndpointResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchGetVpcEndpointResponse'
+            Prelude.<$> ( x
+                            Data..?> "vpcEndpointDetails"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "vpcEndpointErrorDetails"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchGetVpcEndpoint where
+  hashWithSalt _salt BatchGetVpcEndpoint' {..} =
+    _salt `Prelude.hashWithSalt` ids
+
+instance Prelude.NFData BatchGetVpcEndpoint where
+  rnf BatchGetVpcEndpoint' {..} = Prelude.rnf ids
+
+instance Data.ToHeaders BatchGetVpcEndpoint where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.BatchGetVpcEndpoint" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchGetVpcEndpoint where
+  toJSON BatchGetVpcEndpoint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ids" Data..= ids)]
+      )
+
+instance Data.ToPath BatchGetVpcEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchGetVpcEndpoint where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchGetVpcEndpointResponse' smart constructor.
+data BatchGetVpcEndpointResponse = BatchGetVpcEndpointResponse'
+  { -- | Details about the specified VPC endpoint.
+    vpcEndpointDetails :: Prelude.Maybe [VpcEndpointDetail],
+    -- | Error information for a failed request.
+    vpcEndpointErrorDetails :: Prelude.Maybe [VpcEndpointErrorDetail],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetVpcEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcEndpointDetails', 'batchGetVpcEndpointResponse_vpcEndpointDetails' - Details about the specified VPC endpoint.
+--
+-- 'vpcEndpointErrorDetails', 'batchGetVpcEndpointResponse_vpcEndpointErrorDetails' - Error information for a failed request.
+--
+-- 'httpStatus', 'batchGetVpcEndpointResponse_httpStatus' - The response's http status code.
+newBatchGetVpcEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchGetVpcEndpointResponse
+newBatchGetVpcEndpointResponse pHttpStatus_ =
+  BatchGetVpcEndpointResponse'
+    { vpcEndpointDetails =
+        Prelude.Nothing,
+      vpcEndpointErrorDetails = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the specified VPC endpoint.
+batchGetVpcEndpointResponse_vpcEndpointDetails :: Lens.Lens' BatchGetVpcEndpointResponse (Prelude.Maybe [VpcEndpointDetail])
+batchGetVpcEndpointResponse_vpcEndpointDetails = Lens.lens (\BatchGetVpcEndpointResponse' {vpcEndpointDetails} -> vpcEndpointDetails) (\s@BatchGetVpcEndpointResponse' {} a -> s {vpcEndpointDetails = a} :: BatchGetVpcEndpointResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Error information for a failed request.
+batchGetVpcEndpointResponse_vpcEndpointErrorDetails :: Lens.Lens' BatchGetVpcEndpointResponse (Prelude.Maybe [VpcEndpointErrorDetail])
+batchGetVpcEndpointResponse_vpcEndpointErrorDetails = Lens.lens (\BatchGetVpcEndpointResponse' {vpcEndpointErrorDetails} -> vpcEndpointErrorDetails) (\s@BatchGetVpcEndpointResponse' {} a -> s {vpcEndpointErrorDetails = a} :: BatchGetVpcEndpointResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchGetVpcEndpointResponse_httpStatus :: Lens.Lens' BatchGetVpcEndpointResponse Prelude.Int
+batchGetVpcEndpointResponse_httpStatus = Lens.lens (\BatchGetVpcEndpointResponse' {httpStatus} -> httpStatus) (\s@BatchGetVpcEndpointResponse' {} a -> s {httpStatus = a} :: BatchGetVpcEndpointResponse)
+
+instance Prelude.NFData BatchGetVpcEndpointResponse where
+  rnf BatchGetVpcEndpointResponse' {..} =
+    Prelude.rnf vpcEndpointDetails
+      `Prelude.seq` Prelude.rnf vpcEndpointErrorDetails
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/CreateAccessPolicy.hs b/gen/Amazonka/OpenSearchServerless/CreateAccessPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/CreateAccessPolicy.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.CreateAccessPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a data access policy for OpenSearch Serverless. Access policies
+-- limit access to collections and the resources within them, and allow a
+-- user to access that data irrespective of the access mechanism or network
+-- source. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html Data access control for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.CreateAccessPolicy
+  ( -- * Creating a Request
+    CreateAccessPolicy (..),
+    newCreateAccessPolicy,
+
+    -- * Request Lenses
+    createAccessPolicy_clientToken,
+    createAccessPolicy_description,
+    createAccessPolicy_name,
+    createAccessPolicy_policy,
+    createAccessPolicy_type,
+
+    -- * Destructuring the Response
+    CreateAccessPolicyResponse (..),
+    newCreateAccessPolicyResponse,
+
+    -- * Response Lenses
+    createAccessPolicyResponse_accessPolicyDetail,
+    createAccessPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAccessPolicy' smart constructor.
+data CreateAccessPolicy = CreateAccessPolicy'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the policy. Typically used to store information about
+    -- the permissions defined in the policy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy.
+    name :: Prelude.Text,
+    -- | The JSON policy document to use as the content for the policy.
+    policy :: Prelude.Text,
+    -- | The type of policy.
+    type' :: AccessPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAccessPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createAccessPolicy_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'description', 'createAccessPolicy_description' - A description of the policy. Typically used to store information about
+-- the permissions defined in the policy.
+--
+-- 'name', 'createAccessPolicy_name' - The name of the policy.
+--
+-- 'policy', 'createAccessPolicy_policy' - The JSON policy document to use as the content for the policy.
+--
+-- 'type'', 'createAccessPolicy_type' - The type of policy.
+newCreateAccessPolicy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  -- | 'type''
+  AccessPolicyType ->
+  CreateAccessPolicy
+newCreateAccessPolicy pName_ pPolicy_ pType_ =
+  CreateAccessPolicy'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = pName_,
+      policy = pPolicy_,
+      type' = pType_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+createAccessPolicy_clientToken :: Lens.Lens' CreateAccessPolicy (Prelude.Maybe Prelude.Text)
+createAccessPolicy_clientToken = Lens.lens (\CreateAccessPolicy' {clientToken} -> clientToken) (\s@CreateAccessPolicy' {} a -> s {clientToken = a} :: CreateAccessPolicy)
+
+-- | A description of the policy. Typically used to store information about
+-- the permissions defined in the policy.
+createAccessPolicy_description :: Lens.Lens' CreateAccessPolicy (Prelude.Maybe Prelude.Text)
+createAccessPolicy_description = Lens.lens (\CreateAccessPolicy' {description} -> description) (\s@CreateAccessPolicy' {} a -> s {description = a} :: CreateAccessPolicy)
+
+-- | The name of the policy.
+createAccessPolicy_name :: Lens.Lens' CreateAccessPolicy Prelude.Text
+createAccessPolicy_name = Lens.lens (\CreateAccessPolicy' {name} -> name) (\s@CreateAccessPolicy' {} a -> s {name = a} :: CreateAccessPolicy)
+
+-- | The JSON policy document to use as the content for the policy.
+createAccessPolicy_policy :: Lens.Lens' CreateAccessPolicy Prelude.Text
+createAccessPolicy_policy = Lens.lens (\CreateAccessPolicy' {policy} -> policy) (\s@CreateAccessPolicy' {} a -> s {policy = a} :: CreateAccessPolicy)
+
+-- | The type of policy.
+createAccessPolicy_type :: Lens.Lens' CreateAccessPolicy AccessPolicyType
+createAccessPolicy_type = Lens.lens (\CreateAccessPolicy' {type'} -> type') (\s@CreateAccessPolicy' {} a -> s {type' = a} :: CreateAccessPolicy)
+
+instance Core.AWSRequest CreateAccessPolicy where
+  type
+    AWSResponse CreateAccessPolicy =
+      CreateAccessPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAccessPolicyResponse'
+            Prelude.<$> (x Data..?> "accessPolicyDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAccessPolicy where
+  hashWithSalt _salt CreateAccessPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateAccessPolicy where
+  rnf CreateAccessPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateAccessPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.CreateAccessPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAccessPolicy where
+  toJSON CreateAccessPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("policy" Data..= policy),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateAccessPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateAccessPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAccessPolicyResponse' smart constructor.
+data CreateAccessPolicyResponse = CreateAccessPolicyResponse'
+  { -- | Details about the created access policy.
+    accessPolicyDetail :: Prelude.Maybe AccessPolicyDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAccessPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessPolicyDetail', 'createAccessPolicyResponse_accessPolicyDetail' - Details about the created access policy.
+--
+-- 'httpStatus', 'createAccessPolicyResponse_httpStatus' - The response's http status code.
+newCreateAccessPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAccessPolicyResponse
+newCreateAccessPolicyResponse pHttpStatus_ =
+  CreateAccessPolicyResponse'
+    { accessPolicyDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the created access policy.
+createAccessPolicyResponse_accessPolicyDetail :: Lens.Lens' CreateAccessPolicyResponse (Prelude.Maybe AccessPolicyDetail)
+createAccessPolicyResponse_accessPolicyDetail = Lens.lens (\CreateAccessPolicyResponse' {accessPolicyDetail} -> accessPolicyDetail) (\s@CreateAccessPolicyResponse' {} a -> s {accessPolicyDetail = a} :: CreateAccessPolicyResponse)
+
+-- | The response's http status code.
+createAccessPolicyResponse_httpStatus :: Lens.Lens' CreateAccessPolicyResponse Prelude.Int
+createAccessPolicyResponse_httpStatus = Lens.lens (\CreateAccessPolicyResponse' {httpStatus} -> httpStatus) (\s@CreateAccessPolicyResponse' {} a -> s {httpStatus = a} :: CreateAccessPolicyResponse)
+
+instance Prelude.NFData CreateAccessPolicyResponse where
+  rnf CreateAccessPolicyResponse' {..} =
+    Prelude.rnf accessPolicyDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/CreateCollection.hs b/gen/Amazonka/OpenSearchServerless/CreateCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/CreateCollection.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.OpenSearchServerless.CreateCollection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new OpenSearch Serverless collection. For more information,
+-- see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html Creating and managing Amazon OpenSearch Serverless collections>.
+module Amazonka.OpenSearchServerless.CreateCollection
+  ( -- * Creating a Request
+    CreateCollection (..),
+    newCreateCollection,
+
+    -- * Request Lenses
+    createCollection_clientToken,
+    createCollection_description,
+    createCollection_tags,
+    createCollection_type,
+    createCollection_name,
+
+    -- * Destructuring the Response
+    CreateCollectionResponse (..),
+    newCreateCollectionResponse,
+
+    -- * Response Lenses
+    createCollectionResponse_createCollectionDetail,
+    createCollectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCollection' smart constructor.
+data CreateCollection = CreateCollection'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Description of the collection.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | An arbitrary set of tags (key–value pairs) to associate with the
+    -- OpenSearch Serverless collection.
+    tags :: Prelude.Maybe [Tag],
+    -- | The type of collection.
+    type' :: Prelude.Maybe CollectionType,
+    -- | Name of the collection.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCollection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createCollection_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'description', 'createCollection_description' - Description of the collection.
+--
+-- 'tags', 'createCollection_tags' - An arbitrary set of tags (key–value pairs) to associate with the
+-- OpenSearch Serverless collection.
+--
+-- 'type'', 'createCollection_type' - The type of collection.
+--
+-- 'name', 'createCollection_name' - Name of the collection.
+newCreateCollection ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateCollection
+newCreateCollection pName_ =
+  CreateCollection'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+createCollection_clientToken :: Lens.Lens' CreateCollection (Prelude.Maybe Prelude.Text)
+createCollection_clientToken = Lens.lens (\CreateCollection' {clientToken} -> clientToken) (\s@CreateCollection' {} a -> s {clientToken = a} :: CreateCollection)
+
+-- | Description of the collection.
+createCollection_description :: Lens.Lens' CreateCollection (Prelude.Maybe Prelude.Text)
+createCollection_description = Lens.lens (\CreateCollection' {description} -> description) (\s@CreateCollection' {} a -> s {description = a} :: CreateCollection)
+
+-- | An arbitrary set of tags (key–value pairs) to associate with the
+-- OpenSearch Serverless collection.
+createCollection_tags :: Lens.Lens' CreateCollection (Prelude.Maybe [Tag])
+createCollection_tags = Lens.lens (\CreateCollection' {tags} -> tags) (\s@CreateCollection' {} a -> s {tags = a} :: CreateCollection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of collection.
+createCollection_type :: Lens.Lens' CreateCollection (Prelude.Maybe CollectionType)
+createCollection_type = Lens.lens (\CreateCollection' {type'} -> type') (\s@CreateCollection' {} a -> s {type' = a} :: CreateCollection)
+
+-- | Name of the collection.
+createCollection_name :: Lens.Lens' CreateCollection Prelude.Text
+createCollection_name = Lens.lens (\CreateCollection' {name} -> name) (\s@CreateCollection' {} a -> s {name = a} :: CreateCollection)
+
+instance Core.AWSRequest CreateCollection where
+  type
+    AWSResponse CreateCollection =
+      CreateCollectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateCollectionResponse'
+            Prelude.<$> (x Data..?> "createCollectionDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCollection where
+  hashWithSalt _salt CreateCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateCollection where
+  rnf CreateCollection' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.CreateCollection" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCollection where
+  toJSON CreateCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("tags" Data..=) Prelude.<$> tags,
+            ("type" Data..=) Prelude.<$> type',
+            Prelude.Just ("name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateCollection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateCollectionResponse' smart constructor.
+data CreateCollectionResponse = CreateCollectionResponse'
+  { -- | Details about the collection.
+    createCollectionDetail :: Prelude.Maybe CreateCollectionDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCollectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createCollectionDetail', 'createCollectionResponse_createCollectionDetail' - Details about the collection.
+--
+-- 'httpStatus', 'createCollectionResponse_httpStatus' - The response's http status code.
+newCreateCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCollectionResponse
+newCreateCollectionResponse pHttpStatus_ =
+  CreateCollectionResponse'
+    { createCollectionDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the collection.
+createCollectionResponse_createCollectionDetail :: Lens.Lens' CreateCollectionResponse (Prelude.Maybe CreateCollectionDetail)
+createCollectionResponse_createCollectionDetail = Lens.lens (\CreateCollectionResponse' {createCollectionDetail} -> createCollectionDetail) (\s@CreateCollectionResponse' {} a -> s {createCollectionDetail = a} :: CreateCollectionResponse)
+
+-- | The response's http status code.
+createCollectionResponse_httpStatus :: Lens.Lens' CreateCollectionResponse Prelude.Int
+createCollectionResponse_httpStatus = Lens.lens (\CreateCollectionResponse' {httpStatus} -> httpStatus) (\s@CreateCollectionResponse' {} a -> s {httpStatus = a} :: CreateCollectionResponse)
+
+instance Prelude.NFData CreateCollectionResponse where
+  rnf CreateCollectionResponse' {..} =
+    Prelude.rnf createCollectionDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/CreateSecurityConfig.hs b/gen/Amazonka/OpenSearchServerless/CreateSecurityConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/CreateSecurityConfig.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.OpenSearchServerless.CreateSecurityConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Specifies a security configuration for OpenSearch Serverless. For more
+-- information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html SAML authentication for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.CreateSecurityConfig
+  ( -- * Creating a Request
+    CreateSecurityConfig (..),
+    newCreateSecurityConfig,
+
+    -- * Request Lenses
+    createSecurityConfig_clientToken,
+    createSecurityConfig_description,
+    createSecurityConfig_samlOptions,
+    createSecurityConfig_name,
+    createSecurityConfig_type,
+
+    -- * Destructuring the Response
+    CreateSecurityConfigResponse (..),
+    newCreateSecurityConfigResponse,
+
+    -- * Response Lenses
+    createSecurityConfigResponse_securityConfigDetail,
+    createSecurityConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSecurityConfig' smart constructor.
+data CreateSecurityConfig = CreateSecurityConfig'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the security configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Describes SAML options in in the form of a key-value map.
+    samlOptions :: Prelude.Maybe SamlConfigOptions,
+    -- | The name of the security configuration.
+    name :: Prelude.Text,
+    -- | The type of security configuration.
+    type' :: SecurityConfigType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSecurityConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createSecurityConfig_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'description', 'createSecurityConfig_description' - A description of the security configuration.
+--
+-- 'samlOptions', 'createSecurityConfig_samlOptions' - Describes SAML options in in the form of a key-value map.
+--
+-- 'name', 'createSecurityConfig_name' - The name of the security configuration.
+--
+-- 'type'', 'createSecurityConfig_type' - The type of security configuration.
+newCreateSecurityConfig ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  SecurityConfigType ->
+  CreateSecurityConfig
+newCreateSecurityConfig pName_ pType_ =
+  CreateSecurityConfig'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      samlOptions = Prelude.Nothing,
+      name = pName_,
+      type' = pType_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+createSecurityConfig_clientToken :: Lens.Lens' CreateSecurityConfig (Prelude.Maybe Prelude.Text)
+createSecurityConfig_clientToken = Lens.lens (\CreateSecurityConfig' {clientToken} -> clientToken) (\s@CreateSecurityConfig' {} a -> s {clientToken = a} :: CreateSecurityConfig)
+
+-- | A description of the security configuration.
+createSecurityConfig_description :: Lens.Lens' CreateSecurityConfig (Prelude.Maybe Prelude.Text)
+createSecurityConfig_description = Lens.lens (\CreateSecurityConfig' {description} -> description) (\s@CreateSecurityConfig' {} a -> s {description = a} :: CreateSecurityConfig)
+
+-- | Describes SAML options in in the form of a key-value map.
+createSecurityConfig_samlOptions :: Lens.Lens' CreateSecurityConfig (Prelude.Maybe SamlConfigOptions)
+createSecurityConfig_samlOptions = Lens.lens (\CreateSecurityConfig' {samlOptions} -> samlOptions) (\s@CreateSecurityConfig' {} a -> s {samlOptions = a} :: CreateSecurityConfig)
+
+-- | The name of the security configuration.
+createSecurityConfig_name :: Lens.Lens' CreateSecurityConfig Prelude.Text
+createSecurityConfig_name = Lens.lens (\CreateSecurityConfig' {name} -> name) (\s@CreateSecurityConfig' {} a -> s {name = a} :: CreateSecurityConfig)
+
+-- | The type of security configuration.
+createSecurityConfig_type :: Lens.Lens' CreateSecurityConfig SecurityConfigType
+createSecurityConfig_type = Lens.lens (\CreateSecurityConfig' {type'} -> type') (\s@CreateSecurityConfig' {} a -> s {type' = a} :: CreateSecurityConfig)
+
+instance Core.AWSRequest CreateSecurityConfig where
+  type
+    AWSResponse CreateSecurityConfig =
+      CreateSecurityConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSecurityConfigResponse'
+            Prelude.<$> (x Data..?> "securityConfigDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSecurityConfig where
+  hashWithSalt _salt CreateSecurityConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` samlOptions
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateSecurityConfig where
+  rnf CreateSecurityConfig' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf samlOptions
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateSecurityConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.CreateSecurityConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSecurityConfig where
+  toJSON CreateSecurityConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("samlOptions" Data..=) Prelude.<$> samlOptions,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateSecurityConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSecurityConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSecurityConfigResponse' smart constructor.
+data CreateSecurityConfigResponse = CreateSecurityConfigResponse'
+  { -- | Details about the created security configuration.
+    securityConfigDetail :: Prelude.Maybe SecurityConfigDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSecurityConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityConfigDetail', 'createSecurityConfigResponse_securityConfigDetail' - Details about the created security configuration.
+--
+-- 'httpStatus', 'createSecurityConfigResponse_httpStatus' - The response's http status code.
+newCreateSecurityConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSecurityConfigResponse
+newCreateSecurityConfigResponse pHttpStatus_ =
+  CreateSecurityConfigResponse'
+    { securityConfigDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the created security configuration.
+createSecurityConfigResponse_securityConfigDetail :: Lens.Lens' CreateSecurityConfigResponse (Prelude.Maybe SecurityConfigDetail)
+createSecurityConfigResponse_securityConfigDetail = Lens.lens (\CreateSecurityConfigResponse' {securityConfigDetail} -> securityConfigDetail) (\s@CreateSecurityConfigResponse' {} a -> s {securityConfigDetail = a} :: CreateSecurityConfigResponse)
+
+-- | The response's http status code.
+createSecurityConfigResponse_httpStatus :: Lens.Lens' CreateSecurityConfigResponse Prelude.Int
+createSecurityConfigResponse_httpStatus = Lens.lens (\CreateSecurityConfigResponse' {httpStatus} -> httpStatus) (\s@CreateSecurityConfigResponse' {} a -> s {httpStatus = a} :: CreateSecurityConfigResponse)
+
+instance Prelude.NFData CreateSecurityConfigResponse where
+  rnf CreateSecurityConfigResponse' {..} =
+    Prelude.rnf securityConfigDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/CreateSecurityPolicy.hs b/gen/Amazonka/OpenSearchServerless/CreateSecurityPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/CreateSecurityPolicy.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.OpenSearchServerless.CreateSecurityPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a security policy to be used by one or more OpenSearch
+-- Serverless collections. Security policies provide access to a collection
+-- and its OpenSearch Dashboards endpoint from public networks or specific
+-- VPC endpoints. They also allow you to secure a collection with a KMS
+-- encryption key. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-network.html Network access for Amazon OpenSearch Serverless>
+-- and
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-encryption.html Encryption at rest for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.CreateSecurityPolicy
+  ( -- * Creating a Request
+    CreateSecurityPolicy (..),
+    newCreateSecurityPolicy,
+
+    -- * Request Lenses
+    createSecurityPolicy_clientToken,
+    createSecurityPolicy_description,
+    createSecurityPolicy_name,
+    createSecurityPolicy_policy,
+    createSecurityPolicy_type,
+
+    -- * Destructuring the Response
+    CreateSecurityPolicyResponse (..),
+    newCreateSecurityPolicyResponse,
+
+    -- * Response Lenses
+    createSecurityPolicyResponse_securityPolicyDetail,
+    createSecurityPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSecurityPolicy' smart constructor.
+data CreateSecurityPolicy = CreateSecurityPolicy'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the policy. Typically used to store information about
+    -- the permissions defined in the policy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy.
+    name :: Prelude.Text,
+    -- | The JSON policy document to use as the content for the new policy.
+    policy :: Prelude.Text,
+    -- | The type of security policy.
+    type' :: SecurityPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSecurityPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createSecurityPolicy_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'description', 'createSecurityPolicy_description' - A description of the policy. Typically used to store information about
+-- the permissions defined in the policy.
+--
+-- 'name', 'createSecurityPolicy_name' - The name of the policy.
+--
+-- 'policy', 'createSecurityPolicy_policy' - The JSON policy document to use as the content for the new policy.
+--
+-- 'type'', 'createSecurityPolicy_type' - The type of security policy.
+newCreateSecurityPolicy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'policy'
+  Prelude.Text ->
+  -- | 'type''
+  SecurityPolicyType ->
+  CreateSecurityPolicy
+newCreateSecurityPolicy pName_ pPolicy_ pType_ =
+  CreateSecurityPolicy'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = pName_,
+      policy = pPolicy_,
+      type' = pType_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+createSecurityPolicy_clientToken :: Lens.Lens' CreateSecurityPolicy (Prelude.Maybe Prelude.Text)
+createSecurityPolicy_clientToken = Lens.lens (\CreateSecurityPolicy' {clientToken} -> clientToken) (\s@CreateSecurityPolicy' {} a -> s {clientToken = a} :: CreateSecurityPolicy)
+
+-- | A description of the policy. Typically used to store information about
+-- the permissions defined in the policy.
+createSecurityPolicy_description :: Lens.Lens' CreateSecurityPolicy (Prelude.Maybe Prelude.Text)
+createSecurityPolicy_description = Lens.lens (\CreateSecurityPolicy' {description} -> description) (\s@CreateSecurityPolicy' {} a -> s {description = a} :: CreateSecurityPolicy)
+
+-- | The name of the policy.
+createSecurityPolicy_name :: Lens.Lens' CreateSecurityPolicy Prelude.Text
+createSecurityPolicy_name = Lens.lens (\CreateSecurityPolicy' {name} -> name) (\s@CreateSecurityPolicy' {} a -> s {name = a} :: CreateSecurityPolicy)
+
+-- | The JSON policy document to use as the content for the new policy.
+createSecurityPolicy_policy :: Lens.Lens' CreateSecurityPolicy Prelude.Text
+createSecurityPolicy_policy = Lens.lens (\CreateSecurityPolicy' {policy} -> policy) (\s@CreateSecurityPolicy' {} a -> s {policy = a} :: CreateSecurityPolicy)
+
+-- | The type of security policy.
+createSecurityPolicy_type :: Lens.Lens' CreateSecurityPolicy SecurityPolicyType
+createSecurityPolicy_type = Lens.lens (\CreateSecurityPolicy' {type'} -> type') (\s@CreateSecurityPolicy' {} a -> s {type' = a} :: CreateSecurityPolicy)
+
+instance Core.AWSRequest CreateSecurityPolicy where
+  type
+    AWSResponse CreateSecurityPolicy =
+      CreateSecurityPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateSecurityPolicyResponse'
+            Prelude.<$> (x Data..?> "securityPolicyDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSecurityPolicy where
+  hashWithSalt _salt CreateSecurityPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateSecurityPolicy where
+  rnf CreateSecurityPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateSecurityPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.CreateSecurityPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateSecurityPolicy where
+  toJSON CreateSecurityPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("policy" Data..= policy),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath CreateSecurityPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSecurityPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateSecurityPolicyResponse' smart constructor.
+data CreateSecurityPolicyResponse = CreateSecurityPolicyResponse'
+  { -- | Details about the created security policy.
+    securityPolicyDetail :: Prelude.Maybe SecurityPolicyDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSecurityPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityPolicyDetail', 'createSecurityPolicyResponse_securityPolicyDetail' - Details about the created security policy.
+--
+-- 'httpStatus', 'createSecurityPolicyResponse_httpStatus' - The response's http status code.
+newCreateSecurityPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSecurityPolicyResponse
+newCreateSecurityPolicyResponse pHttpStatus_ =
+  CreateSecurityPolicyResponse'
+    { securityPolicyDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the created security policy.
+createSecurityPolicyResponse_securityPolicyDetail :: Lens.Lens' CreateSecurityPolicyResponse (Prelude.Maybe SecurityPolicyDetail)
+createSecurityPolicyResponse_securityPolicyDetail = Lens.lens (\CreateSecurityPolicyResponse' {securityPolicyDetail} -> securityPolicyDetail) (\s@CreateSecurityPolicyResponse' {} a -> s {securityPolicyDetail = a} :: CreateSecurityPolicyResponse)
+
+-- | The response's http status code.
+createSecurityPolicyResponse_httpStatus :: Lens.Lens' CreateSecurityPolicyResponse Prelude.Int
+createSecurityPolicyResponse_httpStatus = Lens.lens (\CreateSecurityPolicyResponse' {httpStatus} -> httpStatus) (\s@CreateSecurityPolicyResponse' {} a -> s {httpStatus = a} :: CreateSecurityPolicyResponse)
+
+instance Prelude.NFData CreateSecurityPolicyResponse where
+  rnf CreateSecurityPolicyResponse' {..} =
+    Prelude.rnf securityPolicyDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/CreateVpcEndpoint.hs b/gen/Amazonka/OpenSearchServerless/CreateVpcEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/CreateVpcEndpoint.hs
@@ -0,0 +1,241 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.CreateVpcEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an OpenSearch Serverless-managed interface VPC endpoint. For
+-- more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html Access Amazon OpenSearch Serverless using an interface endpoint>.
+module Amazonka.OpenSearchServerless.CreateVpcEndpoint
+  ( -- * Creating a Request
+    CreateVpcEndpoint (..),
+    newCreateVpcEndpoint,
+
+    -- * Request Lenses
+    createVpcEndpoint_clientToken,
+    createVpcEndpoint_securityGroupIds,
+    createVpcEndpoint_name,
+    createVpcEndpoint_subnetIds,
+    createVpcEndpoint_vpcId,
+
+    -- * Destructuring the Response
+    CreateVpcEndpointResponse (..),
+    newCreateVpcEndpointResponse,
+
+    -- * Response Lenses
+    createVpcEndpointResponse_createVpcEndpointDetail,
+    createVpcEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVpcEndpoint' smart constructor.
+data CreateVpcEndpoint = CreateVpcEndpoint'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifiers of the security groups that define the ports,
+    -- protocols, and sources for inbound traffic that you are authorizing into
+    -- your endpoint.
+    securityGroupIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The name of the interface endpoint.
+    name :: Prelude.Text,
+    -- | The ID of one or more subnets from which you\'ll access OpenSearch
+    -- Serverless.
+    subnetIds :: Prelude.NonEmpty Prelude.Text,
+    -- | The ID of the VPC from which you\'ll access OpenSearch Serverless.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVpcEndpoint_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'securityGroupIds', 'createVpcEndpoint_securityGroupIds' - The unique identifiers of the security groups that define the ports,
+-- protocols, and sources for inbound traffic that you are authorizing into
+-- your endpoint.
+--
+-- 'name', 'createVpcEndpoint_name' - The name of the interface endpoint.
+--
+-- 'subnetIds', 'createVpcEndpoint_subnetIds' - The ID of one or more subnets from which you\'ll access OpenSearch
+-- Serverless.
+--
+-- 'vpcId', 'createVpcEndpoint_vpcId' - The ID of the VPC from which you\'ll access OpenSearch Serverless.
+newCreateVpcEndpoint ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'subnetIds'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  CreateVpcEndpoint
+newCreateVpcEndpoint pName_ pSubnetIds_ pVpcId_ =
+  CreateVpcEndpoint'
+    { clientToken = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      name = pName_,
+      subnetIds = Lens.coerced Lens.# pSubnetIds_,
+      vpcId = pVpcId_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+createVpcEndpoint_clientToken :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe Prelude.Text)
+createVpcEndpoint_clientToken = Lens.lens (\CreateVpcEndpoint' {clientToken} -> clientToken) (\s@CreateVpcEndpoint' {} a -> s {clientToken = a} :: CreateVpcEndpoint)
+
+-- | The unique identifiers of the security groups that define the ports,
+-- protocols, and sources for inbound traffic that you are authorizing into
+-- your endpoint.
+createVpcEndpoint_securityGroupIds :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createVpcEndpoint_securityGroupIds = Lens.lens (\CreateVpcEndpoint' {securityGroupIds} -> securityGroupIds) (\s@CreateVpcEndpoint' {} a -> s {securityGroupIds = a} :: CreateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the interface endpoint.
+createVpcEndpoint_name :: Lens.Lens' CreateVpcEndpoint Prelude.Text
+createVpcEndpoint_name = Lens.lens (\CreateVpcEndpoint' {name} -> name) (\s@CreateVpcEndpoint' {} a -> s {name = a} :: CreateVpcEndpoint)
+
+-- | The ID of one or more subnets from which you\'ll access OpenSearch
+-- Serverless.
+createVpcEndpoint_subnetIds :: Lens.Lens' CreateVpcEndpoint (Prelude.NonEmpty Prelude.Text)
+createVpcEndpoint_subnetIds = Lens.lens (\CreateVpcEndpoint' {subnetIds} -> subnetIds) (\s@CreateVpcEndpoint' {} a -> s {subnetIds = a} :: CreateVpcEndpoint) Prelude.. Lens.coerced
+
+-- | The ID of the VPC from which you\'ll access OpenSearch Serverless.
+createVpcEndpoint_vpcId :: Lens.Lens' CreateVpcEndpoint Prelude.Text
+createVpcEndpoint_vpcId = Lens.lens (\CreateVpcEndpoint' {vpcId} -> vpcId) (\s@CreateVpcEndpoint' {} a -> s {vpcId = a} :: CreateVpcEndpoint)
+
+instance Core.AWSRequest CreateVpcEndpoint where
+  type
+    AWSResponse CreateVpcEndpoint =
+      CreateVpcEndpointResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateVpcEndpointResponse'
+            Prelude.<$> (x Data..?> "createVpcEndpointDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVpcEndpoint where
+  hashWithSalt _salt CreateVpcEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData CreateVpcEndpoint where
+  rnf CreateVpcEndpoint' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders CreateVpcEndpoint where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.CreateVpcEndpoint" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateVpcEndpoint where
+  toJSON CreateVpcEndpoint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("securityGroupIds" Data..=)
+              Prelude.<$> securityGroupIds,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("subnetIds" Data..= subnetIds),
+            Prelude.Just ("vpcId" Data..= vpcId)
+          ]
+      )
+
+instance Data.ToPath CreateVpcEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpcEndpoint where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateVpcEndpointResponse' smart constructor.
+data CreateVpcEndpointResponse = CreateVpcEndpointResponse'
+  { -- | Details about the created interface VPC endpoint.
+    createVpcEndpointDetail :: Prelude.Maybe CreateVpcEndpointDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createVpcEndpointDetail', 'createVpcEndpointResponse_createVpcEndpointDetail' - Details about the created interface VPC endpoint.
+--
+-- 'httpStatus', 'createVpcEndpointResponse_httpStatus' - The response's http status code.
+newCreateVpcEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpcEndpointResponse
+newCreateVpcEndpointResponse pHttpStatus_ =
+  CreateVpcEndpointResponse'
+    { createVpcEndpointDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the created interface VPC endpoint.
+createVpcEndpointResponse_createVpcEndpointDetail :: Lens.Lens' CreateVpcEndpointResponse (Prelude.Maybe CreateVpcEndpointDetail)
+createVpcEndpointResponse_createVpcEndpointDetail = Lens.lens (\CreateVpcEndpointResponse' {createVpcEndpointDetail} -> createVpcEndpointDetail) (\s@CreateVpcEndpointResponse' {} a -> s {createVpcEndpointDetail = a} :: CreateVpcEndpointResponse)
+
+-- | The response's http status code.
+createVpcEndpointResponse_httpStatus :: Lens.Lens' CreateVpcEndpointResponse Prelude.Int
+createVpcEndpointResponse_httpStatus = Lens.lens (\CreateVpcEndpointResponse' {httpStatus} -> httpStatus) (\s@CreateVpcEndpointResponse' {} a -> s {httpStatus = a} :: CreateVpcEndpointResponse)
+
+instance Prelude.NFData CreateVpcEndpointResponse where
+  rnf CreateVpcEndpointResponse' {..} =
+    Prelude.rnf createVpcEndpointDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/DeleteAccessPolicy.hs b/gen/Amazonka/OpenSearchServerless/DeleteAccessPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/DeleteAccessPolicy.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.DeleteAccessPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an OpenSearch Serverless access policy. For more information,
+-- see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html Data access control for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.DeleteAccessPolicy
+  ( -- * Creating a Request
+    DeleteAccessPolicy (..),
+    newDeleteAccessPolicy,
+
+    -- * Request Lenses
+    deleteAccessPolicy_clientToken,
+    deleteAccessPolicy_name,
+    deleteAccessPolicy_type,
+
+    -- * Destructuring the Response
+    DeleteAccessPolicyResponse (..),
+    newDeleteAccessPolicyResponse,
+
+    -- * Response Lenses
+    deleteAccessPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAccessPolicy' smart constructor.
+data DeleteAccessPolicy = DeleteAccessPolicy'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy to delete.
+    name :: Prelude.Text,
+    -- | The type of policy.
+    type' :: AccessPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccessPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteAccessPolicy_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'name', 'deleteAccessPolicy_name' - The name of the policy to delete.
+--
+-- 'type'', 'deleteAccessPolicy_type' - The type of policy.
+newDeleteAccessPolicy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  AccessPolicyType ->
+  DeleteAccessPolicy
+newDeleteAccessPolicy pName_ pType_ =
+  DeleteAccessPolicy'
+    { clientToken = Prelude.Nothing,
+      name = pName_,
+      type' = pType_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+deleteAccessPolicy_clientToken :: Lens.Lens' DeleteAccessPolicy (Prelude.Maybe Prelude.Text)
+deleteAccessPolicy_clientToken = Lens.lens (\DeleteAccessPolicy' {clientToken} -> clientToken) (\s@DeleteAccessPolicy' {} a -> s {clientToken = a} :: DeleteAccessPolicy)
+
+-- | The name of the policy to delete.
+deleteAccessPolicy_name :: Lens.Lens' DeleteAccessPolicy Prelude.Text
+deleteAccessPolicy_name = Lens.lens (\DeleteAccessPolicy' {name} -> name) (\s@DeleteAccessPolicy' {} a -> s {name = a} :: DeleteAccessPolicy)
+
+-- | The type of policy.
+deleteAccessPolicy_type :: Lens.Lens' DeleteAccessPolicy AccessPolicyType
+deleteAccessPolicy_type = Lens.lens (\DeleteAccessPolicy' {type'} -> type') (\s@DeleteAccessPolicy' {} a -> s {type' = a} :: DeleteAccessPolicy)
+
+instance Core.AWSRequest DeleteAccessPolicy where
+  type
+    AWSResponse DeleteAccessPolicy =
+      DeleteAccessPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAccessPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAccessPolicy where
+  hashWithSalt _salt DeleteAccessPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DeleteAccessPolicy where
+  rnf DeleteAccessPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders DeleteAccessPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.DeleteAccessPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAccessPolicy where
+  toJSON DeleteAccessPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath DeleteAccessPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteAccessPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAccessPolicyResponse' smart constructor.
+data DeleteAccessPolicyResponse = DeleteAccessPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAccessPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAccessPolicyResponse_httpStatus' - The response's http status code.
+newDeleteAccessPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAccessPolicyResponse
+newDeleteAccessPolicyResponse pHttpStatus_ =
+  DeleteAccessPolicyResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteAccessPolicyResponse_httpStatus :: Lens.Lens' DeleteAccessPolicyResponse Prelude.Int
+deleteAccessPolicyResponse_httpStatus = Lens.lens (\DeleteAccessPolicyResponse' {httpStatus} -> httpStatus) (\s@DeleteAccessPolicyResponse' {} a -> s {httpStatus = a} :: DeleteAccessPolicyResponse)
+
+instance Prelude.NFData DeleteAccessPolicyResponse where
+  rnf DeleteAccessPolicyResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/DeleteCollection.hs b/gen/Amazonka/OpenSearchServerless/DeleteCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/DeleteCollection.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.DeleteCollection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an OpenSearch Serverless collection. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html Creating and managing Amazon OpenSearch Serverless collections>.
+module Amazonka.OpenSearchServerless.DeleteCollection
+  ( -- * Creating a Request
+    DeleteCollection (..),
+    newDeleteCollection,
+
+    -- * Request Lenses
+    deleteCollection_clientToken,
+    deleteCollection_id,
+
+    -- * Destructuring the Response
+    DeleteCollectionResponse (..),
+    newDeleteCollectionResponse,
+
+    -- * Response Lenses
+    deleteCollectionResponse_deleteCollectionDetail,
+    deleteCollectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCollection' smart constructor.
+data DeleteCollection = DeleteCollection'
+  { -- | A unique, case-sensitive identifier to ensure idempotency of the
+    -- request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the collection. For example, @1iu5usc406kd@.
+    -- The ID is part of the collection endpoint. You can also retrieve it
+    -- using the
+    -- <https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListCollections.html ListCollections>
+    -- API.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCollection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteCollection_clientToken' - A unique, case-sensitive identifier to ensure idempotency of the
+-- request.
+--
+-- 'id', 'deleteCollection_id' - The unique identifier of the collection. For example, @1iu5usc406kd@.
+-- The ID is part of the collection endpoint. You can also retrieve it
+-- using the
+-- <https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListCollections.html ListCollections>
+-- API.
+newDeleteCollection ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteCollection
+newDeleteCollection pId_ =
+  DeleteCollection'
+    { clientToken = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | A unique, case-sensitive identifier to ensure idempotency of the
+-- request.
+deleteCollection_clientToken :: Lens.Lens' DeleteCollection (Prelude.Maybe Prelude.Text)
+deleteCollection_clientToken = Lens.lens (\DeleteCollection' {clientToken} -> clientToken) (\s@DeleteCollection' {} a -> s {clientToken = a} :: DeleteCollection)
+
+-- | The unique identifier of the collection. For example, @1iu5usc406kd@.
+-- The ID is part of the collection endpoint. You can also retrieve it
+-- using the
+-- <https://docs.aws.amazon.com/opensearch-service/latest/ServerlessAPIReference/API_ListCollections.html ListCollections>
+-- API.
+deleteCollection_id :: Lens.Lens' DeleteCollection Prelude.Text
+deleteCollection_id = Lens.lens (\DeleteCollection' {id} -> id) (\s@DeleteCollection' {} a -> s {id = a} :: DeleteCollection)
+
+instance Core.AWSRequest DeleteCollection where
+  type
+    AWSResponse DeleteCollection =
+      DeleteCollectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteCollectionResponse'
+            Prelude.<$> (x Data..?> "deleteCollectionDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCollection where
+  hashWithSalt _salt DeleteCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteCollection where
+  rnf DeleteCollection' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DeleteCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.DeleteCollection" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteCollection where
+  toJSON DeleteCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath DeleteCollection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteCollectionResponse' smart constructor.
+data DeleteCollectionResponse = DeleteCollectionResponse'
+  { -- | Details of the deleted collection.
+    deleteCollectionDetail :: Prelude.Maybe DeleteCollectionDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCollectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteCollectionDetail', 'deleteCollectionResponse_deleteCollectionDetail' - Details of the deleted collection.
+--
+-- 'httpStatus', 'deleteCollectionResponse_httpStatus' - The response's http status code.
+newDeleteCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCollectionResponse
+newDeleteCollectionResponse pHttpStatus_ =
+  DeleteCollectionResponse'
+    { deleteCollectionDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details of the deleted collection.
+deleteCollectionResponse_deleteCollectionDetail :: Lens.Lens' DeleteCollectionResponse (Prelude.Maybe DeleteCollectionDetail)
+deleteCollectionResponse_deleteCollectionDetail = Lens.lens (\DeleteCollectionResponse' {deleteCollectionDetail} -> deleteCollectionDetail) (\s@DeleteCollectionResponse' {} a -> s {deleteCollectionDetail = a} :: DeleteCollectionResponse)
+
+-- | The response's http status code.
+deleteCollectionResponse_httpStatus :: Lens.Lens' DeleteCollectionResponse Prelude.Int
+deleteCollectionResponse_httpStatus = Lens.lens (\DeleteCollectionResponse' {httpStatus} -> httpStatus) (\s@DeleteCollectionResponse' {} a -> s {httpStatus = a} :: DeleteCollectionResponse)
+
+instance Prelude.NFData DeleteCollectionResponse where
+  rnf DeleteCollectionResponse' {..} =
+    Prelude.rnf deleteCollectionDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/DeleteSecurityConfig.hs b/gen/Amazonka/OpenSearchServerless/DeleteSecurityConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/DeleteSecurityConfig.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.DeleteSecurityConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a security configuration for OpenSearch Serverless. For more
+-- information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html SAML authentication for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.DeleteSecurityConfig
+  ( -- * Creating a Request
+    DeleteSecurityConfig (..),
+    newDeleteSecurityConfig,
+
+    -- * Request Lenses
+    deleteSecurityConfig_clientToken,
+    deleteSecurityConfig_id,
+
+    -- * Destructuring the Response
+    DeleteSecurityConfigResponse (..),
+    newDeleteSecurityConfigResponse,
+
+    -- * Response Lenses
+    deleteSecurityConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSecurityConfig' smart constructor.
+data DeleteSecurityConfig = DeleteSecurityConfig'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The security configuration identifier. For SAML the ID will be
+    -- @saml\/\<accountId>\/\<idpProviderName>@. For example,
+    -- @saml\/123456789123\/OKTADev@.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSecurityConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteSecurityConfig_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'id', 'deleteSecurityConfig_id' - The security configuration identifier. For SAML the ID will be
+-- @saml\/\<accountId>\/\<idpProviderName>@. For example,
+-- @saml\/123456789123\/OKTADev@.
+newDeleteSecurityConfig ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteSecurityConfig
+newDeleteSecurityConfig pId_ =
+  DeleteSecurityConfig'
+    { clientToken =
+        Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+deleteSecurityConfig_clientToken :: Lens.Lens' DeleteSecurityConfig (Prelude.Maybe Prelude.Text)
+deleteSecurityConfig_clientToken = Lens.lens (\DeleteSecurityConfig' {clientToken} -> clientToken) (\s@DeleteSecurityConfig' {} a -> s {clientToken = a} :: DeleteSecurityConfig)
+
+-- | The security configuration identifier. For SAML the ID will be
+-- @saml\/\<accountId>\/\<idpProviderName>@. For example,
+-- @saml\/123456789123\/OKTADev@.
+deleteSecurityConfig_id :: Lens.Lens' DeleteSecurityConfig Prelude.Text
+deleteSecurityConfig_id = Lens.lens (\DeleteSecurityConfig' {id} -> id) (\s@DeleteSecurityConfig' {} a -> s {id = a} :: DeleteSecurityConfig)
+
+instance Core.AWSRequest DeleteSecurityConfig where
+  type
+    AWSResponse DeleteSecurityConfig =
+      DeleteSecurityConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSecurityConfigResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSecurityConfig where
+  hashWithSalt _salt DeleteSecurityConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteSecurityConfig where
+  rnf DeleteSecurityConfig' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DeleteSecurityConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.DeleteSecurityConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSecurityConfig where
+  toJSON DeleteSecurityConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath DeleteSecurityConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSecurityConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSecurityConfigResponse' smart constructor.
+data DeleteSecurityConfigResponse = DeleteSecurityConfigResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSecurityConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteSecurityConfigResponse_httpStatus' - The response's http status code.
+newDeleteSecurityConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSecurityConfigResponse
+newDeleteSecurityConfigResponse pHttpStatus_ =
+  DeleteSecurityConfigResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteSecurityConfigResponse_httpStatus :: Lens.Lens' DeleteSecurityConfigResponse Prelude.Int
+deleteSecurityConfigResponse_httpStatus = Lens.lens (\DeleteSecurityConfigResponse' {httpStatus} -> httpStatus) (\s@DeleteSecurityConfigResponse' {} a -> s {httpStatus = a} :: DeleteSecurityConfigResponse)
+
+instance Prelude.NFData DeleteSecurityConfigResponse where
+  rnf DeleteSecurityConfigResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/DeleteSecurityPolicy.hs b/gen/Amazonka/OpenSearchServerless/DeleteSecurityPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/DeleteSecurityPolicy.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.DeleteSecurityPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an OpenSearch Serverless security policy.
+module Amazonka.OpenSearchServerless.DeleteSecurityPolicy
+  ( -- * Creating a Request
+    DeleteSecurityPolicy (..),
+    newDeleteSecurityPolicy,
+
+    -- * Request Lenses
+    deleteSecurityPolicy_clientToken,
+    deleteSecurityPolicy_name,
+    deleteSecurityPolicy_type,
+
+    -- * Destructuring the Response
+    DeleteSecurityPolicyResponse (..),
+    newDeleteSecurityPolicyResponse,
+
+    -- * Response Lenses
+    deleteSecurityPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSecurityPolicy' smart constructor.
+data DeleteSecurityPolicy = DeleteSecurityPolicy'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy to delete.
+    name :: Prelude.Text,
+    -- | The type of policy.
+    type' :: SecurityPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSecurityPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteSecurityPolicy_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'name', 'deleteSecurityPolicy_name' - The name of the policy to delete.
+--
+-- 'type'', 'deleteSecurityPolicy_type' - The type of policy.
+newDeleteSecurityPolicy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  SecurityPolicyType ->
+  DeleteSecurityPolicy
+newDeleteSecurityPolicy pName_ pType_ =
+  DeleteSecurityPolicy'
+    { clientToken =
+        Prelude.Nothing,
+      name = pName_,
+      type' = pType_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+deleteSecurityPolicy_clientToken :: Lens.Lens' DeleteSecurityPolicy (Prelude.Maybe Prelude.Text)
+deleteSecurityPolicy_clientToken = Lens.lens (\DeleteSecurityPolicy' {clientToken} -> clientToken) (\s@DeleteSecurityPolicy' {} a -> s {clientToken = a} :: DeleteSecurityPolicy)
+
+-- | The name of the policy to delete.
+deleteSecurityPolicy_name :: Lens.Lens' DeleteSecurityPolicy Prelude.Text
+deleteSecurityPolicy_name = Lens.lens (\DeleteSecurityPolicy' {name} -> name) (\s@DeleteSecurityPolicy' {} a -> s {name = a} :: DeleteSecurityPolicy)
+
+-- | The type of policy.
+deleteSecurityPolicy_type :: Lens.Lens' DeleteSecurityPolicy SecurityPolicyType
+deleteSecurityPolicy_type = Lens.lens (\DeleteSecurityPolicy' {type'} -> type') (\s@DeleteSecurityPolicy' {} a -> s {type' = a} :: DeleteSecurityPolicy)
+
+instance Core.AWSRequest DeleteSecurityPolicy where
+  type
+    AWSResponse DeleteSecurityPolicy =
+      DeleteSecurityPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteSecurityPolicyResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSecurityPolicy where
+  hashWithSalt _salt DeleteSecurityPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DeleteSecurityPolicy where
+  rnf DeleteSecurityPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders DeleteSecurityPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.DeleteSecurityPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteSecurityPolicy where
+  toJSON DeleteSecurityPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath DeleteSecurityPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSecurityPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteSecurityPolicyResponse' smart constructor.
+data DeleteSecurityPolicyResponse = DeleteSecurityPolicyResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSecurityPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteSecurityPolicyResponse_httpStatus' - The response's http status code.
+newDeleteSecurityPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSecurityPolicyResponse
+newDeleteSecurityPolicyResponse pHttpStatus_ =
+  DeleteSecurityPolicyResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteSecurityPolicyResponse_httpStatus :: Lens.Lens' DeleteSecurityPolicyResponse Prelude.Int
+deleteSecurityPolicyResponse_httpStatus = Lens.lens (\DeleteSecurityPolicyResponse' {httpStatus} -> httpStatus) (\s@DeleteSecurityPolicyResponse' {} a -> s {httpStatus = a} :: DeleteSecurityPolicyResponse)
+
+instance Prelude.NFData DeleteSecurityPolicyResponse where
+  rnf DeleteSecurityPolicyResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/DeleteVpcEndpoint.hs b/gen/Amazonka/OpenSearchServerless/DeleteVpcEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/DeleteVpcEndpoint.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.DeleteVpcEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an OpenSearch Serverless-managed interface endpoint. For more
+-- information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html Access Amazon OpenSearch Serverless using an interface endpoint>.
+module Amazonka.OpenSearchServerless.DeleteVpcEndpoint
+  ( -- * Creating a Request
+    DeleteVpcEndpoint (..),
+    newDeleteVpcEndpoint,
+
+    -- * Request Lenses
+    deleteVpcEndpoint_clientToken,
+    deleteVpcEndpoint_id,
+
+    -- * Destructuring the Response
+    DeleteVpcEndpointResponse (..),
+    newDeleteVpcEndpointResponse,
+
+    -- * Response Lenses
+    deleteVpcEndpointResponse_deleteVpcEndpointDetail,
+    deleteVpcEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVpcEndpoint' smart constructor.
+data DeleteVpcEndpoint = DeleteVpcEndpoint'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The VPC endpoint identifier.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteVpcEndpoint_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'id', 'deleteVpcEndpoint_id' - The VPC endpoint identifier.
+newDeleteVpcEndpoint ::
+  -- | 'id'
+  Prelude.Text ->
+  DeleteVpcEndpoint
+newDeleteVpcEndpoint pId_ =
+  DeleteVpcEndpoint'
+    { clientToken = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+deleteVpcEndpoint_clientToken :: Lens.Lens' DeleteVpcEndpoint (Prelude.Maybe Prelude.Text)
+deleteVpcEndpoint_clientToken = Lens.lens (\DeleteVpcEndpoint' {clientToken} -> clientToken) (\s@DeleteVpcEndpoint' {} a -> s {clientToken = a} :: DeleteVpcEndpoint)
+
+-- | The VPC endpoint identifier.
+deleteVpcEndpoint_id :: Lens.Lens' DeleteVpcEndpoint Prelude.Text
+deleteVpcEndpoint_id = Lens.lens (\DeleteVpcEndpoint' {id} -> id) (\s@DeleteVpcEndpoint' {} a -> s {id = a} :: DeleteVpcEndpoint)
+
+instance Core.AWSRequest DeleteVpcEndpoint where
+  type
+    AWSResponse DeleteVpcEndpoint =
+      DeleteVpcEndpointResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteVpcEndpointResponse'
+            Prelude.<$> (x Data..?> "deleteVpcEndpointDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteVpcEndpoint where
+  hashWithSalt _salt DeleteVpcEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteVpcEndpoint where
+  rnf DeleteVpcEndpoint' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DeleteVpcEndpoint where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.DeleteVpcEndpoint" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteVpcEndpoint where
+  toJSON DeleteVpcEndpoint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath DeleteVpcEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpcEndpoint where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteVpcEndpointResponse' smart constructor.
+data DeleteVpcEndpointResponse = DeleteVpcEndpointResponse'
+  { -- | Details about the deleted endpoint.
+    deleteVpcEndpointDetail :: Prelude.Maybe DeleteVpcEndpointDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteVpcEndpointDetail', 'deleteVpcEndpointResponse_deleteVpcEndpointDetail' - Details about the deleted endpoint.
+--
+-- 'httpStatus', 'deleteVpcEndpointResponse_httpStatus' - The response's http status code.
+newDeleteVpcEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVpcEndpointResponse
+newDeleteVpcEndpointResponse pHttpStatus_ =
+  DeleteVpcEndpointResponse'
+    { deleteVpcEndpointDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the deleted endpoint.
+deleteVpcEndpointResponse_deleteVpcEndpointDetail :: Lens.Lens' DeleteVpcEndpointResponse (Prelude.Maybe DeleteVpcEndpointDetail)
+deleteVpcEndpointResponse_deleteVpcEndpointDetail = Lens.lens (\DeleteVpcEndpointResponse' {deleteVpcEndpointDetail} -> deleteVpcEndpointDetail) (\s@DeleteVpcEndpointResponse' {} a -> s {deleteVpcEndpointDetail = a} :: DeleteVpcEndpointResponse)
+
+-- | The response's http status code.
+deleteVpcEndpointResponse_httpStatus :: Lens.Lens' DeleteVpcEndpointResponse Prelude.Int
+deleteVpcEndpointResponse_httpStatus = Lens.lens (\DeleteVpcEndpointResponse' {httpStatus} -> httpStatus) (\s@DeleteVpcEndpointResponse' {} a -> s {httpStatus = a} :: DeleteVpcEndpointResponse)
+
+instance Prelude.NFData DeleteVpcEndpointResponse where
+  rnf DeleteVpcEndpointResponse' {..} =
+    Prelude.rnf deleteVpcEndpointDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/GetAccessPolicy.hs b/gen/Amazonka/OpenSearchServerless/GetAccessPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/GetAccessPolicy.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.GetAccessPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an OpenSearch Serverless access policy. For more information,
+-- see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html Data access control for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.GetAccessPolicy
+  ( -- * Creating a Request
+    GetAccessPolicy (..),
+    newGetAccessPolicy,
+
+    -- * Request Lenses
+    getAccessPolicy_name,
+    getAccessPolicy_type,
+
+    -- * Destructuring the Response
+    GetAccessPolicyResponse (..),
+    newGetAccessPolicyResponse,
+
+    -- * Response Lenses
+    getAccessPolicyResponse_accessPolicyDetail,
+    getAccessPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAccessPolicy' smart constructor.
+data GetAccessPolicy = GetAccessPolicy'
+  { -- | The name of the access policy.
+    name :: Prelude.Text,
+    -- | Tye type of policy. Currently the only supported value is @data@.
+    type' :: AccessPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccessPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'getAccessPolicy_name' - The name of the access policy.
+--
+-- 'type'', 'getAccessPolicy_type' - Tye type of policy. Currently the only supported value is @data@.
+newGetAccessPolicy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  AccessPolicyType ->
+  GetAccessPolicy
+newGetAccessPolicy pName_ pType_ =
+  GetAccessPolicy' {name = pName_, type' = pType_}
+
+-- | The name of the access policy.
+getAccessPolicy_name :: Lens.Lens' GetAccessPolicy Prelude.Text
+getAccessPolicy_name = Lens.lens (\GetAccessPolicy' {name} -> name) (\s@GetAccessPolicy' {} a -> s {name = a} :: GetAccessPolicy)
+
+-- | Tye type of policy. Currently the only supported value is @data@.
+getAccessPolicy_type :: Lens.Lens' GetAccessPolicy AccessPolicyType
+getAccessPolicy_type = Lens.lens (\GetAccessPolicy' {type'} -> type') (\s@GetAccessPolicy' {} a -> s {type' = a} :: GetAccessPolicy)
+
+instance Core.AWSRequest GetAccessPolicy where
+  type
+    AWSResponse GetAccessPolicy =
+      GetAccessPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAccessPolicyResponse'
+            Prelude.<$> (x Data..?> "accessPolicyDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAccessPolicy where
+  hashWithSalt _salt GetAccessPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData GetAccessPolicy where
+  rnf GetAccessPolicy' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders GetAccessPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.GetAccessPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAccessPolicy where
+  toJSON GetAccessPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath GetAccessPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAccessPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAccessPolicyResponse' smart constructor.
+data GetAccessPolicyResponse = GetAccessPolicyResponse'
+  { -- | Details about the requested access policy.
+    accessPolicyDetail :: Prelude.Maybe AccessPolicyDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccessPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessPolicyDetail', 'getAccessPolicyResponse_accessPolicyDetail' - Details about the requested access policy.
+--
+-- 'httpStatus', 'getAccessPolicyResponse_httpStatus' - The response's http status code.
+newGetAccessPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAccessPolicyResponse
+newGetAccessPolicyResponse pHttpStatus_ =
+  GetAccessPolicyResponse'
+    { accessPolicyDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the requested access policy.
+getAccessPolicyResponse_accessPolicyDetail :: Lens.Lens' GetAccessPolicyResponse (Prelude.Maybe AccessPolicyDetail)
+getAccessPolicyResponse_accessPolicyDetail = Lens.lens (\GetAccessPolicyResponse' {accessPolicyDetail} -> accessPolicyDetail) (\s@GetAccessPolicyResponse' {} a -> s {accessPolicyDetail = a} :: GetAccessPolicyResponse)
+
+-- | The response's http status code.
+getAccessPolicyResponse_httpStatus :: Lens.Lens' GetAccessPolicyResponse Prelude.Int
+getAccessPolicyResponse_httpStatus = Lens.lens (\GetAccessPolicyResponse' {httpStatus} -> httpStatus) (\s@GetAccessPolicyResponse' {} a -> s {httpStatus = a} :: GetAccessPolicyResponse)
+
+instance Prelude.NFData GetAccessPolicyResponse where
+  rnf GetAccessPolicyResponse' {..} =
+    Prelude.rnf accessPolicyDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/GetAccountSettings.hs b/gen/Amazonka/OpenSearchServerless/GetAccountSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/GetAccountSettings.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.GetAccountSettings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns account-level settings related to OpenSearch Serverless.
+module Amazonka.OpenSearchServerless.GetAccountSettings
+  ( -- * Creating a Request
+    GetAccountSettings (..),
+    newGetAccountSettings,
+
+    -- * Destructuring the Response
+    GetAccountSettingsResponse (..),
+    newGetAccountSettingsResponse,
+
+    -- * Response Lenses
+    getAccountSettingsResponse_accountSettingsDetail,
+    getAccountSettingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAccountSettings' smart constructor.
+data GetAccountSettings = GetAccountSettings'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccountSettings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetAccountSettings ::
+  GetAccountSettings
+newGetAccountSettings = GetAccountSettings'
+
+instance Core.AWSRequest GetAccountSettings where
+  type
+    AWSResponse GetAccountSettings =
+      GetAccountSettingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAccountSettingsResponse'
+            Prelude.<$> (x Data..?> "accountSettingsDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAccountSettings where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetAccountSettings where
+  rnf _ = ()
+
+instance Data.ToHeaders GetAccountSettings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.GetAccountSettings" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAccountSettings where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetAccountSettings where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAccountSettings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAccountSettingsResponse' smart constructor.
+data GetAccountSettingsResponse = GetAccountSettingsResponse'
+  { -- | OpenSearch Serverless-related details for the current account.
+    accountSettingsDetail :: Prelude.Maybe AccountSettingsDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccountSettingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountSettingsDetail', 'getAccountSettingsResponse_accountSettingsDetail' - OpenSearch Serverless-related details for the current account.
+--
+-- 'httpStatus', 'getAccountSettingsResponse_httpStatus' - The response's http status code.
+newGetAccountSettingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAccountSettingsResponse
+newGetAccountSettingsResponse pHttpStatus_ =
+  GetAccountSettingsResponse'
+    { accountSettingsDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | OpenSearch Serverless-related details for the current account.
+getAccountSettingsResponse_accountSettingsDetail :: Lens.Lens' GetAccountSettingsResponse (Prelude.Maybe AccountSettingsDetail)
+getAccountSettingsResponse_accountSettingsDetail = Lens.lens (\GetAccountSettingsResponse' {accountSettingsDetail} -> accountSettingsDetail) (\s@GetAccountSettingsResponse' {} a -> s {accountSettingsDetail = a} :: GetAccountSettingsResponse)
+
+-- | The response's http status code.
+getAccountSettingsResponse_httpStatus :: Lens.Lens' GetAccountSettingsResponse Prelude.Int
+getAccountSettingsResponse_httpStatus = Lens.lens (\GetAccountSettingsResponse' {httpStatus} -> httpStatus) (\s@GetAccountSettingsResponse' {} a -> s {httpStatus = a} :: GetAccountSettingsResponse)
+
+instance Prelude.NFData GetAccountSettingsResponse where
+  rnf GetAccountSettingsResponse' {..} =
+    Prelude.rnf accountSettingsDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/GetPoliciesStats.hs b/gen/Amazonka/OpenSearchServerless/GetPoliciesStats.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/GetPoliciesStats.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.GetPoliciesStats
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns statistical information about your OpenSearch Serverless access
+-- policies, security configurations, and security policies.
+module Amazonka.OpenSearchServerless.GetPoliciesStats
+  ( -- * Creating a Request
+    GetPoliciesStats (..),
+    newGetPoliciesStats,
+
+    -- * Destructuring the Response
+    GetPoliciesStatsResponse (..),
+    newGetPoliciesStatsResponse,
+
+    -- * Response Lenses
+    getPoliciesStatsResponse_accessPolicyStats,
+    getPoliciesStatsResponse_securityConfigStats,
+    getPoliciesStatsResponse_securityPolicyStats,
+    getPoliciesStatsResponse_totalPolicyCount,
+    getPoliciesStatsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPoliciesStats' smart constructor.
+data GetPoliciesStats = GetPoliciesStats'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPoliciesStats' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetPoliciesStats ::
+  GetPoliciesStats
+newGetPoliciesStats = GetPoliciesStats'
+
+instance Core.AWSRequest GetPoliciesStats where
+  type
+    AWSResponse GetPoliciesStats =
+      GetPoliciesStatsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetPoliciesStatsResponse'
+            Prelude.<$> (x Data..?> "AccessPolicyStats")
+            Prelude.<*> (x Data..?> "SecurityConfigStats")
+            Prelude.<*> (x Data..?> "SecurityPolicyStats")
+            Prelude.<*> (x Data..?> "TotalPolicyCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetPoliciesStats where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetPoliciesStats where
+  rnf _ = ()
+
+instance Data.ToHeaders GetPoliciesStats where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.GetPoliciesStats" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetPoliciesStats where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetPoliciesStats where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetPoliciesStats where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetPoliciesStatsResponse' smart constructor.
+data GetPoliciesStatsResponse = GetPoliciesStatsResponse'
+  { -- | Information about the data access policies in your account.
+    accessPolicyStats :: Prelude.Maybe AccessPolicyStats,
+    -- | Information about the security configurations in your account.
+    securityConfigStats :: Prelude.Maybe SecurityConfigStats,
+    -- | Information about the security policies in your account.
+    securityPolicyStats :: Prelude.Maybe SecurityPolicyStats,
+    -- | The total number of OpenSearch Serverless security policies and
+    -- configurations in your account.
+    totalPolicyCount :: Prelude.Maybe Prelude.Integer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPoliciesStatsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessPolicyStats', 'getPoliciesStatsResponse_accessPolicyStats' - Information about the data access policies in your account.
+--
+-- 'securityConfigStats', 'getPoliciesStatsResponse_securityConfigStats' - Information about the security configurations in your account.
+--
+-- 'securityPolicyStats', 'getPoliciesStatsResponse_securityPolicyStats' - Information about the security policies in your account.
+--
+-- 'totalPolicyCount', 'getPoliciesStatsResponse_totalPolicyCount' - The total number of OpenSearch Serverless security policies and
+-- configurations in your account.
+--
+-- 'httpStatus', 'getPoliciesStatsResponse_httpStatus' - The response's http status code.
+newGetPoliciesStatsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetPoliciesStatsResponse
+newGetPoliciesStatsResponse pHttpStatus_ =
+  GetPoliciesStatsResponse'
+    { accessPolicyStats =
+        Prelude.Nothing,
+      securityConfigStats = Prelude.Nothing,
+      securityPolicyStats = Prelude.Nothing,
+      totalPolicyCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the data access policies in your account.
+getPoliciesStatsResponse_accessPolicyStats :: Lens.Lens' GetPoliciesStatsResponse (Prelude.Maybe AccessPolicyStats)
+getPoliciesStatsResponse_accessPolicyStats = Lens.lens (\GetPoliciesStatsResponse' {accessPolicyStats} -> accessPolicyStats) (\s@GetPoliciesStatsResponse' {} a -> s {accessPolicyStats = a} :: GetPoliciesStatsResponse)
+
+-- | Information about the security configurations in your account.
+getPoliciesStatsResponse_securityConfigStats :: Lens.Lens' GetPoliciesStatsResponse (Prelude.Maybe SecurityConfigStats)
+getPoliciesStatsResponse_securityConfigStats = Lens.lens (\GetPoliciesStatsResponse' {securityConfigStats} -> securityConfigStats) (\s@GetPoliciesStatsResponse' {} a -> s {securityConfigStats = a} :: GetPoliciesStatsResponse)
+
+-- | Information about the security policies in your account.
+getPoliciesStatsResponse_securityPolicyStats :: Lens.Lens' GetPoliciesStatsResponse (Prelude.Maybe SecurityPolicyStats)
+getPoliciesStatsResponse_securityPolicyStats = Lens.lens (\GetPoliciesStatsResponse' {securityPolicyStats} -> securityPolicyStats) (\s@GetPoliciesStatsResponse' {} a -> s {securityPolicyStats = a} :: GetPoliciesStatsResponse)
+
+-- | The total number of OpenSearch Serverless security policies and
+-- configurations in your account.
+getPoliciesStatsResponse_totalPolicyCount :: Lens.Lens' GetPoliciesStatsResponse (Prelude.Maybe Prelude.Integer)
+getPoliciesStatsResponse_totalPolicyCount = Lens.lens (\GetPoliciesStatsResponse' {totalPolicyCount} -> totalPolicyCount) (\s@GetPoliciesStatsResponse' {} a -> s {totalPolicyCount = a} :: GetPoliciesStatsResponse)
+
+-- | The response's http status code.
+getPoliciesStatsResponse_httpStatus :: Lens.Lens' GetPoliciesStatsResponse Prelude.Int
+getPoliciesStatsResponse_httpStatus = Lens.lens (\GetPoliciesStatsResponse' {httpStatus} -> httpStatus) (\s@GetPoliciesStatsResponse' {} a -> s {httpStatus = a} :: GetPoliciesStatsResponse)
+
+instance Prelude.NFData GetPoliciesStatsResponse where
+  rnf GetPoliciesStatsResponse' {..} =
+    Prelude.rnf accessPolicyStats
+      `Prelude.seq` Prelude.rnf securityConfigStats
+      `Prelude.seq` Prelude.rnf securityPolicyStats
+      `Prelude.seq` Prelude.rnf totalPolicyCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/GetSecurityConfig.hs b/gen/Amazonka/OpenSearchServerless/GetSecurityConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/GetSecurityConfig.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.GetSecurityConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about an OpenSearch Serverless security
+-- configuration. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html SAML authentication for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.GetSecurityConfig
+  ( -- * Creating a Request
+    GetSecurityConfig (..),
+    newGetSecurityConfig,
+
+    -- * Request Lenses
+    getSecurityConfig_id,
+
+    -- * Destructuring the Response
+    GetSecurityConfigResponse (..),
+    newGetSecurityConfigResponse,
+
+    -- * Response Lenses
+    getSecurityConfigResponse_securityConfigDetail,
+    getSecurityConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSecurityConfig' smart constructor.
+data GetSecurityConfig = GetSecurityConfig'
+  { -- | The unique identifier of the security configuration.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSecurityConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'getSecurityConfig_id' - The unique identifier of the security configuration.
+newGetSecurityConfig ::
+  -- | 'id'
+  Prelude.Text ->
+  GetSecurityConfig
+newGetSecurityConfig pId_ =
+  GetSecurityConfig' {id = pId_}
+
+-- | The unique identifier of the security configuration.
+getSecurityConfig_id :: Lens.Lens' GetSecurityConfig Prelude.Text
+getSecurityConfig_id = Lens.lens (\GetSecurityConfig' {id} -> id) (\s@GetSecurityConfig' {} a -> s {id = a} :: GetSecurityConfig)
+
+instance Core.AWSRequest GetSecurityConfig where
+  type
+    AWSResponse GetSecurityConfig =
+      GetSecurityConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSecurityConfigResponse'
+            Prelude.<$> (x Data..?> "securityConfigDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSecurityConfig where
+  hashWithSalt _salt GetSecurityConfig' {..} =
+    _salt `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetSecurityConfig where
+  rnf GetSecurityConfig' {..} = Prelude.rnf id
+
+instance Data.ToHeaders GetSecurityConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.GetSecurityConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetSecurityConfig where
+  toJSON GetSecurityConfig' {..} =
+    Data.object
+      (Prelude.catMaybes [Prelude.Just ("id" Data..= id)])
+
+instance Data.ToPath GetSecurityConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSecurityConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSecurityConfigResponse' smart constructor.
+data GetSecurityConfigResponse = GetSecurityConfigResponse'
+  { -- | Details of the requested security configuration.
+    securityConfigDetail :: Prelude.Maybe SecurityConfigDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSecurityConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityConfigDetail', 'getSecurityConfigResponse_securityConfigDetail' - Details of the requested security configuration.
+--
+-- 'httpStatus', 'getSecurityConfigResponse_httpStatus' - The response's http status code.
+newGetSecurityConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSecurityConfigResponse
+newGetSecurityConfigResponse pHttpStatus_ =
+  GetSecurityConfigResponse'
+    { securityConfigDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details of the requested security configuration.
+getSecurityConfigResponse_securityConfigDetail :: Lens.Lens' GetSecurityConfigResponse (Prelude.Maybe SecurityConfigDetail)
+getSecurityConfigResponse_securityConfigDetail = Lens.lens (\GetSecurityConfigResponse' {securityConfigDetail} -> securityConfigDetail) (\s@GetSecurityConfigResponse' {} a -> s {securityConfigDetail = a} :: GetSecurityConfigResponse)
+
+-- | The response's http status code.
+getSecurityConfigResponse_httpStatus :: Lens.Lens' GetSecurityConfigResponse Prelude.Int
+getSecurityConfigResponse_httpStatus = Lens.lens (\GetSecurityConfigResponse' {httpStatus} -> httpStatus) (\s@GetSecurityConfigResponse' {} a -> s {httpStatus = a} :: GetSecurityConfigResponse)
+
+instance Prelude.NFData GetSecurityConfigResponse where
+  rnf GetSecurityConfigResponse' {..} =
+    Prelude.rnf securityConfigDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/GetSecurityPolicy.hs b/gen/Amazonka/OpenSearchServerless/GetSecurityPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/GetSecurityPolicy.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.GetSecurityPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about a configured OpenSearch Serverless security
+-- policy. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-network.html Network access for Amazon OpenSearch Serverless>
+-- and
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-encryption.html Encryption at rest for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.GetSecurityPolicy
+  ( -- * Creating a Request
+    GetSecurityPolicy (..),
+    newGetSecurityPolicy,
+
+    -- * Request Lenses
+    getSecurityPolicy_name,
+    getSecurityPolicy_type,
+
+    -- * Destructuring the Response
+    GetSecurityPolicyResponse (..),
+    newGetSecurityPolicyResponse,
+
+    -- * Response Lenses
+    getSecurityPolicyResponse_securityPolicyDetail,
+    getSecurityPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSecurityPolicy' smart constructor.
+data GetSecurityPolicy = GetSecurityPolicy'
+  { -- | The name of the security policy.
+    name :: Prelude.Text,
+    -- | The type of security policy.
+    type' :: SecurityPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSecurityPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'getSecurityPolicy_name' - The name of the security policy.
+--
+-- 'type'', 'getSecurityPolicy_type' - The type of security policy.
+newGetSecurityPolicy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'type''
+  SecurityPolicyType ->
+  GetSecurityPolicy
+newGetSecurityPolicy pName_ pType_ =
+  GetSecurityPolicy' {name = pName_, type' = pType_}
+
+-- | The name of the security policy.
+getSecurityPolicy_name :: Lens.Lens' GetSecurityPolicy Prelude.Text
+getSecurityPolicy_name = Lens.lens (\GetSecurityPolicy' {name} -> name) (\s@GetSecurityPolicy' {} a -> s {name = a} :: GetSecurityPolicy)
+
+-- | The type of security policy.
+getSecurityPolicy_type :: Lens.Lens' GetSecurityPolicy SecurityPolicyType
+getSecurityPolicy_type = Lens.lens (\GetSecurityPolicy' {type'} -> type') (\s@GetSecurityPolicy' {} a -> s {type' = a} :: GetSecurityPolicy)
+
+instance Core.AWSRequest GetSecurityPolicy where
+  type
+    AWSResponse GetSecurityPolicy =
+      GetSecurityPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSecurityPolicyResponse'
+            Prelude.<$> (x Data..?> "securityPolicyDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSecurityPolicy where
+  hashWithSalt _salt GetSecurityPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData GetSecurityPolicy where
+  rnf GetSecurityPolicy' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders GetSecurityPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.GetSecurityPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetSecurityPolicy where
+  toJSON GetSecurityPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("name" Data..= name),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath GetSecurityPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSecurityPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSecurityPolicyResponse' smart constructor.
+data GetSecurityPolicyResponse = GetSecurityPolicyResponse'
+  { -- | Details about the requested security policy.
+    securityPolicyDetail :: Prelude.Maybe SecurityPolicyDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSecurityPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityPolicyDetail', 'getSecurityPolicyResponse_securityPolicyDetail' - Details about the requested security policy.
+--
+-- 'httpStatus', 'getSecurityPolicyResponse_httpStatus' - The response's http status code.
+newGetSecurityPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSecurityPolicyResponse
+newGetSecurityPolicyResponse pHttpStatus_ =
+  GetSecurityPolicyResponse'
+    { securityPolicyDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the requested security policy.
+getSecurityPolicyResponse_securityPolicyDetail :: Lens.Lens' GetSecurityPolicyResponse (Prelude.Maybe SecurityPolicyDetail)
+getSecurityPolicyResponse_securityPolicyDetail = Lens.lens (\GetSecurityPolicyResponse' {securityPolicyDetail} -> securityPolicyDetail) (\s@GetSecurityPolicyResponse' {} a -> s {securityPolicyDetail = a} :: GetSecurityPolicyResponse)
+
+-- | The response's http status code.
+getSecurityPolicyResponse_httpStatus :: Lens.Lens' GetSecurityPolicyResponse Prelude.Int
+getSecurityPolicyResponse_httpStatus = Lens.lens (\GetSecurityPolicyResponse' {httpStatus} -> httpStatus) (\s@GetSecurityPolicyResponse' {} a -> s {httpStatus = a} :: GetSecurityPolicyResponse)
+
+instance Prelude.NFData GetSecurityPolicyResponse where
+  rnf GetSecurityPolicyResponse' {..} =
+    Prelude.rnf securityPolicyDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/Lens.hs b/gen/Amazonka/OpenSearchServerless/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Lens.hs
@@ -0,0 +1,477 @@
+{-# 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.OpenSearchServerless.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.OpenSearchServerless.Lens
+  ( -- * Operations
+
+    -- ** BatchGetCollection
+    batchGetCollection_ids,
+    batchGetCollection_names,
+    batchGetCollectionResponse_collectionDetails,
+    batchGetCollectionResponse_collectionErrorDetails,
+    batchGetCollectionResponse_httpStatus,
+
+    -- ** BatchGetVpcEndpoint
+    batchGetVpcEndpoint_ids,
+    batchGetVpcEndpointResponse_vpcEndpointDetails,
+    batchGetVpcEndpointResponse_vpcEndpointErrorDetails,
+    batchGetVpcEndpointResponse_httpStatus,
+
+    -- ** CreateAccessPolicy
+    createAccessPolicy_clientToken,
+    createAccessPolicy_description,
+    createAccessPolicy_name,
+    createAccessPolicy_policy,
+    createAccessPolicy_type,
+    createAccessPolicyResponse_accessPolicyDetail,
+    createAccessPolicyResponse_httpStatus,
+
+    -- ** CreateCollection
+    createCollection_clientToken,
+    createCollection_description,
+    createCollection_tags,
+    createCollection_type,
+    createCollection_name,
+    createCollectionResponse_createCollectionDetail,
+    createCollectionResponse_httpStatus,
+
+    -- ** CreateSecurityConfig
+    createSecurityConfig_clientToken,
+    createSecurityConfig_description,
+    createSecurityConfig_samlOptions,
+    createSecurityConfig_name,
+    createSecurityConfig_type,
+    createSecurityConfigResponse_securityConfigDetail,
+    createSecurityConfigResponse_httpStatus,
+
+    -- ** CreateSecurityPolicy
+    createSecurityPolicy_clientToken,
+    createSecurityPolicy_description,
+    createSecurityPolicy_name,
+    createSecurityPolicy_policy,
+    createSecurityPolicy_type,
+    createSecurityPolicyResponse_securityPolicyDetail,
+    createSecurityPolicyResponse_httpStatus,
+
+    -- ** CreateVpcEndpoint
+    createVpcEndpoint_clientToken,
+    createVpcEndpoint_securityGroupIds,
+    createVpcEndpoint_name,
+    createVpcEndpoint_subnetIds,
+    createVpcEndpoint_vpcId,
+    createVpcEndpointResponse_createVpcEndpointDetail,
+    createVpcEndpointResponse_httpStatus,
+
+    -- ** DeleteAccessPolicy
+    deleteAccessPolicy_clientToken,
+    deleteAccessPolicy_name,
+    deleteAccessPolicy_type,
+    deleteAccessPolicyResponse_httpStatus,
+
+    -- ** DeleteCollection
+    deleteCollection_clientToken,
+    deleteCollection_id,
+    deleteCollectionResponse_deleteCollectionDetail,
+    deleteCollectionResponse_httpStatus,
+
+    -- ** DeleteSecurityConfig
+    deleteSecurityConfig_clientToken,
+    deleteSecurityConfig_id,
+    deleteSecurityConfigResponse_httpStatus,
+
+    -- ** DeleteSecurityPolicy
+    deleteSecurityPolicy_clientToken,
+    deleteSecurityPolicy_name,
+    deleteSecurityPolicy_type,
+    deleteSecurityPolicyResponse_httpStatus,
+
+    -- ** DeleteVpcEndpoint
+    deleteVpcEndpoint_clientToken,
+    deleteVpcEndpoint_id,
+    deleteVpcEndpointResponse_deleteVpcEndpointDetail,
+    deleteVpcEndpointResponse_httpStatus,
+
+    -- ** GetAccessPolicy
+    getAccessPolicy_name,
+    getAccessPolicy_type,
+    getAccessPolicyResponse_accessPolicyDetail,
+    getAccessPolicyResponse_httpStatus,
+
+    -- ** GetAccountSettings
+    getAccountSettingsResponse_accountSettingsDetail,
+    getAccountSettingsResponse_httpStatus,
+
+    -- ** GetPoliciesStats
+    getPoliciesStatsResponse_accessPolicyStats,
+    getPoliciesStatsResponse_securityConfigStats,
+    getPoliciesStatsResponse_securityPolicyStats,
+    getPoliciesStatsResponse_totalPolicyCount,
+    getPoliciesStatsResponse_httpStatus,
+
+    -- ** GetSecurityConfig
+    getSecurityConfig_id,
+    getSecurityConfigResponse_securityConfigDetail,
+    getSecurityConfigResponse_httpStatus,
+
+    -- ** GetSecurityPolicy
+    getSecurityPolicy_name,
+    getSecurityPolicy_type,
+    getSecurityPolicyResponse_securityPolicyDetail,
+    getSecurityPolicyResponse_httpStatus,
+
+    -- ** ListAccessPolicies
+    listAccessPolicies_maxResults,
+    listAccessPolicies_nextToken,
+    listAccessPolicies_resource,
+    listAccessPolicies_type,
+    listAccessPoliciesResponse_accessPolicySummaries,
+    listAccessPoliciesResponse_nextToken,
+    listAccessPoliciesResponse_httpStatus,
+
+    -- ** ListCollections
+    listCollections_collectionFilters,
+    listCollections_maxResults,
+    listCollections_nextToken,
+    listCollectionsResponse_collectionSummaries,
+    listCollectionsResponse_nextToken,
+    listCollectionsResponse_httpStatus,
+
+    -- ** ListSecurityConfigs
+    listSecurityConfigs_maxResults,
+    listSecurityConfigs_nextToken,
+    listSecurityConfigs_type,
+    listSecurityConfigsResponse_nextToken,
+    listSecurityConfigsResponse_securityConfigSummaries,
+    listSecurityConfigsResponse_httpStatus,
+
+    -- ** ListSecurityPolicies
+    listSecurityPolicies_maxResults,
+    listSecurityPolicies_nextToken,
+    listSecurityPolicies_resource,
+    listSecurityPolicies_type,
+    listSecurityPoliciesResponse_nextToken,
+    listSecurityPoliciesResponse_securityPolicySummaries,
+    listSecurityPoliciesResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListVpcEndpoints
+    listVpcEndpoints_maxResults,
+    listVpcEndpoints_nextToken,
+    listVpcEndpoints_vpcEndpointFilters,
+    listVpcEndpointsResponse_nextToken,
+    listVpcEndpointsResponse_vpcEndpointSummaries,
+    listVpcEndpointsResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateAccessPolicy
+    updateAccessPolicy_clientToken,
+    updateAccessPolicy_description,
+    updateAccessPolicy_policy,
+    updateAccessPolicy_name,
+    updateAccessPolicy_policyVersion,
+    updateAccessPolicy_type,
+    updateAccessPolicyResponse_accessPolicyDetail,
+    updateAccessPolicyResponse_httpStatus,
+
+    -- ** UpdateAccountSettings
+    updateAccountSettings_capacityLimits,
+    updateAccountSettingsResponse_accountSettingsDetail,
+    updateAccountSettingsResponse_httpStatus,
+
+    -- ** UpdateCollection
+    updateCollection_clientToken,
+    updateCollection_description,
+    updateCollection_id,
+    updateCollectionResponse_updateCollectionDetail,
+    updateCollectionResponse_httpStatus,
+
+    -- ** UpdateSecurityConfig
+    updateSecurityConfig_clientToken,
+    updateSecurityConfig_description,
+    updateSecurityConfig_samlOptions,
+    updateSecurityConfig_configVersion,
+    updateSecurityConfig_id,
+    updateSecurityConfigResponse_securityConfigDetail,
+    updateSecurityConfigResponse_httpStatus,
+
+    -- ** UpdateSecurityPolicy
+    updateSecurityPolicy_clientToken,
+    updateSecurityPolicy_description,
+    updateSecurityPolicy_policy,
+    updateSecurityPolicy_name,
+    updateSecurityPolicy_policyVersion,
+    updateSecurityPolicy_type,
+    updateSecurityPolicyResponse_securityPolicyDetail,
+    updateSecurityPolicyResponse_httpStatus,
+
+    -- ** UpdateVpcEndpoint
+    updateVpcEndpoint_addSecurityGroupIds,
+    updateVpcEndpoint_addSubnetIds,
+    updateVpcEndpoint_clientToken,
+    updateVpcEndpoint_removeSecurityGroupIds,
+    updateVpcEndpoint_removeSubnetIds,
+    updateVpcEndpoint_id,
+    updateVpcEndpointResponse_updateVpcEndpointDetail,
+    updateVpcEndpointResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AccessPolicyDetail
+    accessPolicyDetail_createdDate,
+    accessPolicyDetail_description,
+    accessPolicyDetail_lastModifiedDate,
+    accessPolicyDetail_name,
+    accessPolicyDetail_policy,
+    accessPolicyDetail_policyVersion,
+    accessPolicyDetail_type,
+
+    -- ** AccessPolicyStats
+    accessPolicyStats_dataPolicyCount,
+
+    -- ** AccessPolicySummary
+    accessPolicySummary_createdDate,
+    accessPolicySummary_description,
+    accessPolicySummary_lastModifiedDate,
+    accessPolicySummary_name,
+    accessPolicySummary_policyVersion,
+    accessPolicySummary_type,
+
+    -- ** AccountSettingsDetail
+    accountSettingsDetail_capacityLimits,
+
+    -- ** CapacityLimits
+    capacityLimits_maxIndexingCapacityInOCU,
+    capacityLimits_maxSearchCapacityInOCU,
+
+    -- ** CollectionDetail
+    collectionDetail_arn,
+    collectionDetail_collectionEndpoint,
+    collectionDetail_createdDate,
+    collectionDetail_dashboardEndpoint,
+    collectionDetail_description,
+    collectionDetail_id,
+    collectionDetail_kmsKeyArn,
+    collectionDetail_lastModifiedDate,
+    collectionDetail_name,
+    collectionDetail_status,
+    collectionDetail_type,
+
+    -- ** CollectionErrorDetail
+    collectionErrorDetail_errorCode,
+    collectionErrorDetail_errorMessage,
+    collectionErrorDetail_id,
+    collectionErrorDetail_name,
+
+    -- ** CollectionFilters
+    collectionFilters_name,
+    collectionFilters_status,
+
+    -- ** CollectionSummary
+    collectionSummary_arn,
+    collectionSummary_id,
+    collectionSummary_name,
+    collectionSummary_status,
+
+    -- ** CreateCollectionDetail
+    createCollectionDetail_arn,
+    createCollectionDetail_createdDate,
+    createCollectionDetail_description,
+    createCollectionDetail_id,
+    createCollectionDetail_kmsKeyArn,
+    createCollectionDetail_lastModifiedDate,
+    createCollectionDetail_name,
+    createCollectionDetail_status,
+    createCollectionDetail_type,
+
+    -- ** CreateVpcEndpointDetail
+    createVpcEndpointDetail_id,
+    createVpcEndpointDetail_name,
+    createVpcEndpointDetail_status,
+
+    -- ** DeleteCollectionDetail
+    deleteCollectionDetail_id,
+    deleteCollectionDetail_name,
+    deleteCollectionDetail_status,
+
+    -- ** DeleteVpcEndpointDetail
+    deleteVpcEndpointDetail_id,
+    deleteVpcEndpointDetail_name,
+    deleteVpcEndpointDetail_status,
+
+    -- ** Document
+
+    -- ** SamlConfigOptions
+    samlConfigOptions_groupAttribute,
+    samlConfigOptions_sessionTimeout,
+    samlConfigOptions_userAttribute,
+    samlConfigOptions_metadata,
+
+    -- ** SecurityConfigDetail
+    securityConfigDetail_configVersion,
+    securityConfigDetail_createdDate,
+    securityConfigDetail_description,
+    securityConfigDetail_id,
+    securityConfigDetail_lastModifiedDate,
+    securityConfigDetail_samlOptions,
+    securityConfigDetail_type,
+
+    -- ** SecurityConfigStats
+    securityConfigStats_samlConfigCount,
+
+    -- ** SecurityConfigSummary
+    securityConfigSummary_configVersion,
+    securityConfigSummary_createdDate,
+    securityConfigSummary_description,
+    securityConfigSummary_id,
+    securityConfigSummary_lastModifiedDate,
+    securityConfigSummary_type,
+
+    -- ** SecurityPolicyDetail
+    securityPolicyDetail_createdDate,
+    securityPolicyDetail_description,
+    securityPolicyDetail_lastModifiedDate,
+    securityPolicyDetail_name,
+    securityPolicyDetail_policy,
+    securityPolicyDetail_policyVersion,
+    securityPolicyDetail_type,
+
+    -- ** SecurityPolicyStats
+    securityPolicyStats_encryptionPolicyCount,
+    securityPolicyStats_networkPolicyCount,
+
+    -- ** SecurityPolicySummary
+    securityPolicySummary_createdDate,
+    securityPolicySummary_description,
+    securityPolicySummary_lastModifiedDate,
+    securityPolicySummary_name,
+    securityPolicySummary_policyVersion,
+    securityPolicySummary_type,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** UpdateCollectionDetail
+    updateCollectionDetail_arn,
+    updateCollectionDetail_createdDate,
+    updateCollectionDetail_description,
+    updateCollectionDetail_id,
+    updateCollectionDetail_lastModifiedDate,
+    updateCollectionDetail_name,
+    updateCollectionDetail_status,
+    updateCollectionDetail_type,
+
+    -- ** UpdateVpcEndpointDetail
+    updateVpcEndpointDetail_id,
+    updateVpcEndpointDetail_lastModifiedDate,
+    updateVpcEndpointDetail_name,
+    updateVpcEndpointDetail_securityGroupIds,
+    updateVpcEndpointDetail_status,
+    updateVpcEndpointDetail_subnetIds,
+
+    -- ** VpcEndpointDetail
+    vpcEndpointDetail_createdDate,
+    vpcEndpointDetail_id,
+    vpcEndpointDetail_name,
+    vpcEndpointDetail_securityGroupIds,
+    vpcEndpointDetail_status,
+    vpcEndpointDetail_subnetIds,
+    vpcEndpointDetail_vpcId,
+
+    -- ** VpcEndpointErrorDetail
+    vpcEndpointErrorDetail_errorCode,
+    vpcEndpointErrorDetail_errorMessage,
+    vpcEndpointErrorDetail_id,
+
+    -- ** VpcEndpointFilters
+    vpcEndpointFilters_status,
+
+    -- ** VpcEndpointSummary
+    vpcEndpointSummary_id,
+    vpcEndpointSummary_name,
+    vpcEndpointSummary_status,
+  )
+where
+
+import Amazonka.OpenSearchServerless.BatchGetCollection
+import Amazonka.OpenSearchServerless.BatchGetVpcEndpoint
+import Amazonka.OpenSearchServerless.CreateAccessPolicy
+import Amazonka.OpenSearchServerless.CreateCollection
+import Amazonka.OpenSearchServerless.CreateSecurityConfig
+import Amazonka.OpenSearchServerless.CreateSecurityPolicy
+import Amazonka.OpenSearchServerless.CreateVpcEndpoint
+import Amazonka.OpenSearchServerless.DeleteAccessPolicy
+import Amazonka.OpenSearchServerless.DeleteCollection
+import Amazonka.OpenSearchServerless.DeleteSecurityConfig
+import Amazonka.OpenSearchServerless.DeleteSecurityPolicy
+import Amazonka.OpenSearchServerless.DeleteVpcEndpoint
+import Amazonka.OpenSearchServerless.GetAccessPolicy
+import Amazonka.OpenSearchServerless.GetAccountSettings
+import Amazonka.OpenSearchServerless.GetPoliciesStats
+import Amazonka.OpenSearchServerless.GetSecurityConfig
+import Amazonka.OpenSearchServerless.GetSecurityPolicy
+import Amazonka.OpenSearchServerless.ListAccessPolicies
+import Amazonka.OpenSearchServerless.ListCollections
+import Amazonka.OpenSearchServerless.ListSecurityConfigs
+import Amazonka.OpenSearchServerless.ListSecurityPolicies
+import Amazonka.OpenSearchServerless.ListTagsForResource
+import Amazonka.OpenSearchServerless.ListVpcEndpoints
+import Amazonka.OpenSearchServerless.TagResource
+import Amazonka.OpenSearchServerless.Types.AccessPolicyDetail
+import Amazonka.OpenSearchServerless.Types.AccessPolicyStats
+import Amazonka.OpenSearchServerless.Types.AccessPolicySummary
+import Amazonka.OpenSearchServerless.Types.AccountSettingsDetail
+import Amazonka.OpenSearchServerless.Types.CapacityLimits
+import Amazonka.OpenSearchServerless.Types.CollectionDetail
+import Amazonka.OpenSearchServerless.Types.CollectionErrorDetail
+import Amazonka.OpenSearchServerless.Types.CollectionFilters
+import Amazonka.OpenSearchServerless.Types.CollectionSummary
+import Amazonka.OpenSearchServerless.Types.CreateCollectionDetail
+import Amazonka.OpenSearchServerless.Types.CreateVpcEndpointDetail
+import Amazonka.OpenSearchServerless.Types.DeleteCollectionDetail
+import Amazonka.OpenSearchServerless.Types.DeleteVpcEndpointDetail
+import Amazonka.OpenSearchServerless.Types.Document
+import Amazonka.OpenSearchServerless.Types.SamlConfigOptions
+import Amazonka.OpenSearchServerless.Types.SecurityConfigDetail
+import Amazonka.OpenSearchServerless.Types.SecurityConfigStats
+import Amazonka.OpenSearchServerless.Types.SecurityConfigSummary
+import Amazonka.OpenSearchServerless.Types.SecurityPolicyDetail
+import Amazonka.OpenSearchServerless.Types.SecurityPolicyStats
+import Amazonka.OpenSearchServerless.Types.SecurityPolicySummary
+import Amazonka.OpenSearchServerless.Types.Tag
+import Amazonka.OpenSearchServerless.Types.UpdateCollectionDetail
+import Amazonka.OpenSearchServerless.Types.UpdateVpcEndpointDetail
+import Amazonka.OpenSearchServerless.Types.VpcEndpointDetail
+import Amazonka.OpenSearchServerless.Types.VpcEndpointErrorDetail
+import Amazonka.OpenSearchServerless.Types.VpcEndpointFilters
+import Amazonka.OpenSearchServerless.Types.VpcEndpointSummary
+import Amazonka.OpenSearchServerless.UntagResource
+import Amazonka.OpenSearchServerless.UpdateAccessPolicy
+import Amazonka.OpenSearchServerless.UpdateAccountSettings
+import Amazonka.OpenSearchServerless.UpdateCollection
+import Amazonka.OpenSearchServerless.UpdateSecurityConfig
+import Amazonka.OpenSearchServerless.UpdateSecurityPolicy
+import Amazonka.OpenSearchServerless.UpdateVpcEndpoint
diff --git a/gen/Amazonka/OpenSearchServerless/ListAccessPolicies.hs b/gen/Amazonka/OpenSearchServerless/ListAccessPolicies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/ListAccessPolicies.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.ListAccessPolicies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about a list of OpenSearch Serverless access
+-- policies.
+module Amazonka.OpenSearchServerless.ListAccessPolicies
+  ( -- * Creating a Request
+    ListAccessPolicies (..),
+    newListAccessPolicies,
+
+    -- * Request Lenses
+    listAccessPolicies_maxResults,
+    listAccessPolicies_nextToken,
+    listAccessPolicies_resource,
+    listAccessPolicies_type,
+
+    -- * Destructuring the Response
+    ListAccessPoliciesResponse (..),
+    newListAccessPoliciesResponse,
+
+    -- * Response Lenses
+    listAccessPoliciesResponse_accessPolicySummaries,
+    listAccessPoliciesResponse_nextToken,
+    listAccessPoliciesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAccessPolicies' smart constructor.
+data ListAccessPolicies = ListAccessPolicies'
+  { -- | An optional parameter that specifies the maximum number of results to
+    -- return. You can use @nextToken@ to get the next page of results. The
+    -- default is 20.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If your initial @ListAccessPolicies@ operation returns a @nextToken@,
+    -- you can include the returned @nextToken@ in subsequent
+    -- @ListAccessPolicies@ operations, which returns results in the next page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Resource filters (can be collection or indexes) that policies can apply
+    -- to.
+    resource :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The type of access policy.
+    type' :: AccessPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAccessPolicies' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAccessPolicies_maxResults' - An optional parameter that specifies the maximum number of results to
+-- return. You can use @nextToken@ to get the next page of results. The
+-- default is 20.
+--
+-- 'nextToken', 'listAccessPolicies_nextToken' - If your initial @ListAccessPolicies@ operation returns a @nextToken@,
+-- you can include the returned @nextToken@ in subsequent
+-- @ListAccessPolicies@ operations, which returns results in the next page.
+--
+-- 'resource', 'listAccessPolicies_resource' - Resource filters (can be collection or indexes) that policies can apply
+-- to.
+--
+-- 'type'', 'listAccessPolicies_type' - The type of access policy.
+newListAccessPolicies ::
+  -- | 'type''
+  AccessPolicyType ->
+  ListAccessPolicies
+newListAccessPolicies pType_ =
+  ListAccessPolicies'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resource = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | An optional parameter that specifies the maximum number of results to
+-- return. You can use @nextToken@ to get the next page of results. The
+-- default is 20.
+listAccessPolicies_maxResults :: Lens.Lens' ListAccessPolicies (Prelude.Maybe Prelude.Natural)
+listAccessPolicies_maxResults = Lens.lens (\ListAccessPolicies' {maxResults} -> maxResults) (\s@ListAccessPolicies' {} a -> s {maxResults = a} :: ListAccessPolicies)
+
+-- | If your initial @ListAccessPolicies@ operation returns a @nextToken@,
+-- you can include the returned @nextToken@ in subsequent
+-- @ListAccessPolicies@ operations, which returns results in the next page.
+listAccessPolicies_nextToken :: Lens.Lens' ListAccessPolicies (Prelude.Maybe Prelude.Text)
+listAccessPolicies_nextToken = Lens.lens (\ListAccessPolicies' {nextToken} -> nextToken) (\s@ListAccessPolicies' {} a -> s {nextToken = a} :: ListAccessPolicies)
+
+-- | Resource filters (can be collection or indexes) that policies can apply
+-- to.
+listAccessPolicies_resource :: Lens.Lens' ListAccessPolicies (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+listAccessPolicies_resource = Lens.lens (\ListAccessPolicies' {resource} -> resource) (\s@ListAccessPolicies' {} a -> s {resource = a} :: ListAccessPolicies) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of access policy.
+listAccessPolicies_type :: Lens.Lens' ListAccessPolicies AccessPolicyType
+listAccessPolicies_type = Lens.lens (\ListAccessPolicies' {type'} -> type') (\s@ListAccessPolicies' {} a -> s {type' = a} :: ListAccessPolicies)
+
+instance Core.AWSRequest ListAccessPolicies where
+  type
+    AWSResponse ListAccessPolicies =
+      ListAccessPoliciesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAccessPoliciesResponse'
+            Prelude.<$> ( x
+                            Data..?> "accessPolicySummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAccessPolicies where
+  hashWithSalt _salt ListAccessPolicies' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resource
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ListAccessPolicies where
+  rnf ListAccessPolicies' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resource
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders ListAccessPolicies where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.ListAccessPolicies" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAccessPolicies where
+  toJSON ListAccessPolicies' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("resource" Data..=) Prelude.<$> resource,
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath ListAccessPolicies where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListAccessPolicies where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAccessPoliciesResponse' smart constructor.
+data ListAccessPoliciesResponse = ListAccessPoliciesResponse'
+  { -- | Details about the requested access policies.
+    accessPolicySummaries :: Prelude.Maybe [AccessPolicySummary],
+    -- | When @nextToken@ is returned, there are more results available. The
+    -- value of @nextToken@ is a unique pagination token for each page. Make
+    -- the call again using the returned token to retrieve the next page.
+    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 'ListAccessPoliciesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessPolicySummaries', 'listAccessPoliciesResponse_accessPolicySummaries' - Details about the requested access policies.
+--
+-- 'nextToken', 'listAccessPoliciesResponse_nextToken' - When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+--
+-- 'httpStatus', 'listAccessPoliciesResponse_httpStatus' - The response's http status code.
+newListAccessPoliciesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAccessPoliciesResponse
+newListAccessPoliciesResponse pHttpStatus_ =
+  ListAccessPoliciesResponse'
+    { accessPolicySummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the requested access policies.
+listAccessPoliciesResponse_accessPolicySummaries :: Lens.Lens' ListAccessPoliciesResponse (Prelude.Maybe [AccessPolicySummary])
+listAccessPoliciesResponse_accessPolicySummaries = Lens.lens (\ListAccessPoliciesResponse' {accessPolicySummaries} -> accessPolicySummaries) (\s@ListAccessPoliciesResponse' {} a -> s {accessPolicySummaries = a} :: ListAccessPoliciesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+listAccessPoliciesResponse_nextToken :: Lens.Lens' ListAccessPoliciesResponse (Prelude.Maybe Prelude.Text)
+listAccessPoliciesResponse_nextToken = Lens.lens (\ListAccessPoliciesResponse' {nextToken} -> nextToken) (\s@ListAccessPoliciesResponse' {} a -> s {nextToken = a} :: ListAccessPoliciesResponse)
+
+-- | The response's http status code.
+listAccessPoliciesResponse_httpStatus :: Lens.Lens' ListAccessPoliciesResponse Prelude.Int
+listAccessPoliciesResponse_httpStatus = Lens.lens (\ListAccessPoliciesResponse' {httpStatus} -> httpStatus) (\s@ListAccessPoliciesResponse' {} a -> s {httpStatus = a} :: ListAccessPoliciesResponse)
+
+instance Prelude.NFData ListAccessPoliciesResponse where
+  rnf ListAccessPoliciesResponse' {..} =
+    Prelude.rnf accessPolicySummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/ListCollections.hs b/gen/Amazonka/OpenSearchServerless/ListCollections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/ListCollections.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.OpenSearchServerless.ListCollections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all OpenSearch Serverless collections. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html Creating and managing Amazon OpenSearch Serverless collections>.
+--
+-- Make sure to include an empty request body {} if you don\'t include any
+-- collection filters in the request.
+module Amazonka.OpenSearchServerless.ListCollections
+  ( -- * Creating a Request
+    ListCollections (..),
+    newListCollections,
+
+    -- * Request Lenses
+    listCollections_collectionFilters,
+    listCollections_maxResults,
+    listCollections_nextToken,
+
+    -- * Destructuring the Response
+    ListCollectionsResponse (..),
+    newListCollectionsResponse,
+
+    -- * Response Lenses
+    listCollectionsResponse_collectionSummaries,
+    listCollectionsResponse_nextToken,
+    listCollectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListCollections' smart constructor.
+data ListCollections = ListCollections'
+  { -- | List of filter names and values that you can use for requests.
+    collectionFilters :: Prelude.Maybe CollectionFilters,
+    -- | The maximum number of results to return. Default is 20. You can use
+    -- @nextToken@ to get the next page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If your initial @ListCollections@ operation returns a @nextToken@, you
+    -- can include the returned @nextToken@ in subsequent @ListCollections@
+    -- operations, which returns results in the next page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCollections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionFilters', 'listCollections_collectionFilters' - List of filter names and values that you can use for requests.
+--
+-- 'maxResults', 'listCollections_maxResults' - The maximum number of results to return. Default is 20. You can use
+-- @nextToken@ to get the next page of results.
+--
+-- 'nextToken', 'listCollections_nextToken' - If your initial @ListCollections@ operation returns a @nextToken@, you
+-- can include the returned @nextToken@ in subsequent @ListCollections@
+-- operations, which returns results in the next page.
+newListCollections ::
+  ListCollections
+newListCollections =
+  ListCollections'
+    { collectionFilters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | List of filter names and values that you can use for requests.
+listCollections_collectionFilters :: Lens.Lens' ListCollections (Prelude.Maybe CollectionFilters)
+listCollections_collectionFilters = Lens.lens (\ListCollections' {collectionFilters} -> collectionFilters) (\s@ListCollections' {} a -> s {collectionFilters = a} :: ListCollections)
+
+-- | The maximum number of results to return. Default is 20. You can use
+-- @nextToken@ to get the next page of results.
+listCollections_maxResults :: Lens.Lens' ListCollections (Prelude.Maybe Prelude.Natural)
+listCollections_maxResults = Lens.lens (\ListCollections' {maxResults} -> maxResults) (\s@ListCollections' {} a -> s {maxResults = a} :: ListCollections)
+
+-- | If your initial @ListCollections@ operation returns a @nextToken@, you
+-- can include the returned @nextToken@ in subsequent @ListCollections@
+-- operations, which returns results in the next page.
+listCollections_nextToken :: Lens.Lens' ListCollections (Prelude.Maybe Prelude.Text)
+listCollections_nextToken = Lens.lens (\ListCollections' {nextToken} -> nextToken) (\s@ListCollections' {} a -> s {nextToken = a} :: ListCollections)
+
+instance Core.AWSRequest ListCollections where
+  type
+    AWSResponse ListCollections =
+      ListCollectionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCollectionsResponse'
+            Prelude.<$> ( x
+                            Data..?> "collectionSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCollections where
+  hashWithSalt _salt ListCollections' {..} =
+    _salt
+      `Prelude.hashWithSalt` collectionFilters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListCollections where
+  rnf ListCollections' {..} =
+    Prelude.rnf collectionFilters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListCollections where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.ListCollections" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCollections where
+  toJSON ListCollections' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("collectionFilters" Data..=)
+              Prelude.<$> collectionFilters,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListCollections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListCollections where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCollectionsResponse' smart constructor.
+data ListCollectionsResponse = ListCollectionsResponse'
+  { -- | Details about each collection.
+    collectionSummaries :: Prelude.Maybe [CollectionSummary],
+    -- | When @nextToken@ is returned, there are more results available. The
+    -- value of @nextToken@ is a unique pagination token for each page. Make
+    -- the call again using the returned token to retrieve the next page.
+    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 'ListCollectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionSummaries', 'listCollectionsResponse_collectionSummaries' - Details about each collection.
+--
+-- 'nextToken', 'listCollectionsResponse_nextToken' - When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+--
+-- 'httpStatus', 'listCollectionsResponse_httpStatus' - The response's http status code.
+newListCollectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCollectionsResponse
+newListCollectionsResponse pHttpStatus_ =
+  ListCollectionsResponse'
+    { collectionSummaries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about each collection.
+listCollectionsResponse_collectionSummaries :: Lens.Lens' ListCollectionsResponse (Prelude.Maybe [CollectionSummary])
+listCollectionsResponse_collectionSummaries = Lens.lens (\ListCollectionsResponse' {collectionSummaries} -> collectionSummaries) (\s@ListCollectionsResponse' {} a -> s {collectionSummaries = a} :: ListCollectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+listCollectionsResponse_nextToken :: Lens.Lens' ListCollectionsResponse (Prelude.Maybe Prelude.Text)
+listCollectionsResponse_nextToken = Lens.lens (\ListCollectionsResponse' {nextToken} -> nextToken) (\s@ListCollectionsResponse' {} a -> s {nextToken = a} :: ListCollectionsResponse)
+
+-- | The response's http status code.
+listCollectionsResponse_httpStatus :: Lens.Lens' ListCollectionsResponse Prelude.Int
+listCollectionsResponse_httpStatus = Lens.lens (\ListCollectionsResponse' {httpStatus} -> httpStatus) (\s@ListCollectionsResponse' {} a -> s {httpStatus = a} :: ListCollectionsResponse)
+
+instance Prelude.NFData ListCollectionsResponse where
+  rnf ListCollectionsResponse' {..} =
+    Prelude.rnf collectionSummaries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/ListSecurityConfigs.hs b/gen/Amazonka/OpenSearchServerless/ListSecurityConfigs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/ListSecurityConfigs.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.ListSecurityConfigs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about configured OpenSearch Serverless security
+-- configurations. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html SAML authentication for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.ListSecurityConfigs
+  ( -- * Creating a Request
+    ListSecurityConfigs (..),
+    newListSecurityConfigs,
+
+    -- * Request Lenses
+    listSecurityConfigs_maxResults,
+    listSecurityConfigs_nextToken,
+    listSecurityConfigs_type,
+
+    -- * Destructuring the Response
+    ListSecurityConfigsResponse (..),
+    newListSecurityConfigsResponse,
+
+    -- * Response Lenses
+    listSecurityConfigsResponse_nextToken,
+    listSecurityConfigsResponse_securityConfigSummaries,
+    listSecurityConfigsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSecurityConfigs' smart constructor.
+data ListSecurityConfigs = ListSecurityConfigs'
+  { -- | An optional parameter that specifies the maximum number of results to
+    -- return. You can use @nextToken@ to get the next page of results. The
+    -- default is 20.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If your initial @ListSecurityConfigs@ operation returns a @nextToken@,
+    -- you can include the returned @nextToken@ in subsequent
+    -- @ListSecurityConfigs@ operations, which returns results in the next
+    -- page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The type of security configuration.
+    type' :: SecurityConfigType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSecurityConfigs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSecurityConfigs_maxResults' - An optional parameter that specifies the maximum number of results to
+-- return. You can use @nextToken@ to get the next page of results. The
+-- default is 20.
+--
+-- 'nextToken', 'listSecurityConfigs_nextToken' - If your initial @ListSecurityConfigs@ operation returns a @nextToken@,
+-- you can include the returned @nextToken@ in subsequent
+-- @ListSecurityConfigs@ operations, which returns results in the next
+-- page.
+--
+-- 'type'', 'listSecurityConfigs_type' - The type of security configuration.
+newListSecurityConfigs ::
+  -- | 'type''
+  SecurityConfigType ->
+  ListSecurityConfigs
+newListSecurityConfigs pType_ =
+  ListSecurityConfigs'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | An optional parameter that specifies the maximum number of results to
+-- return. You can use @nextToken@ to get the next page of results. The
+-- default is 20.
+listSecurityConfigs_maxResults :: Lens.Lens' ListSecurityConfigs (Prelude.Maybe Prelude.Natural)
+listSecurityConfigs_maxResults = Lens.lens (\ListSecurityConfigs' {maxResults} -> maxResults) (\s@ListSecurityConfigs' {} a -> s {maxResults = a} :: ListSecurityConfigs)
+
+-- | If your initial @ListSecurityConfigs@ operation returns a @nextToken@,
+-- you can include the returned @nextToken@ in subsequent
+-- @ListSecurityConfigs@ operations, which returns results in the next
+-- page.
+listSecurityConfigs_nextToken :: Lens.Lens' ListSecurityConfigs (Prelude.Maybe Prelude.Text)
+listSecurityConfigs_nextToken = Lens.lens (\ListSecurityConfigs' {nextToken} -> nextToken) (\s@ListSecurityConfigs' {} a -> s {nextToken = a} :: ListSecurityConfigs)
+
+-- | The type of security configuration.
+listSecurityConfigs_type :: Lens.Lens' ListSecurityConfigs SecurityConfigType
+listSecurityConfigs_type = Lens.lens (\ListSecurityConfigs' {type'} -> type') (\s@ListSecurityConfigs' {} a -> s {type' = a} :: ListSecurityConfigs)
+
+instance Core.AWSRequest ListSecurityConfigs where
+  type
+    AWSResponse ListSecurityConfigs =
+      ListSecurityConfigsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSecurityConfigsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "securityConfigSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSecurityConfigs where
+  hashWithSalt _salt ListSecurityConfigs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ListSecurityConfigs where
+  rnf ListSecurityConfigs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders ListSecurityConfigs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.ListSecurityConfigs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSecurityConfigs where
+  toJSON ListSecurityConfigs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath ListSecurityConfigs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSecurityConfigs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSecurityConfigsResponse' smart constructor.
+data ListSecurityConfigsResponse = ListSecurityConfigsResponse'
+  { -- | When @nextToken@ is returned, there are more results available. The
+    -- value of @nextToken@ is a unique pagination token for each page. Make
+    -- the call again using the returned token to retrieve the next page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Details about the security configurations in your account.
+    securityConfigSummaries :: Prelude.Maybe [SecurityConfigSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSecurityConfigsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSecurityConfigsResponse_nextToken' - When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+--
+-- 'securityConfigSummaries', 'listSecurityConfigsResponse_securityConfigSummaries' - Details about the security configurations in your account.
+--
+-- 'httpStatus', 'listSecurityConfigsResponse_httpStatus' - The response's http status code.
+newListSecurityConfigsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSecurityConfigsResponse
+newListSecurityConfigsResponse pHttpStatus_ =
+  ListSecurityConfigsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      securityConfigSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+listSecurityConfigsResponse_nextToken :: Lens.Lens' ListSecurityConfigsResponse (Prelude.Maybe Prelude.Text)
+listSecurityConfigsResponse_nextToken = Lens.lens (\ListSecurityConfigsResponse' {nextToken} -> nextToken) (\s@ListSecurityConfigsResponse' {} a -> s {nextToken = a} :: ListSecurityConfigsResponse)
+
+-- | Details about the security configurations in your account.
+listSecurityConfigsResponse_securityConfigSummaries :: Lens.Lens' ListSecurityConfigsResponse (Prelude.Maybe [SecurityConfigSummary])
+listSecurityConfigsResponse_securityConfigSummaries = Lens.lens (\ListSecurityConfigsResponse' {securityConfigSummaries} -> securityConfigSummaries) (\s@ListSecurityConfigsResponse' {} a -> s {securityConfigSummaries = a} :: ListSecurityConfigsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSecurityConfigsResponse_httpStatus :: Lens.Lens' ListSecurityConfigsResponse Prelude.Int
+listSecurityConfigsResponse_httpStatus = Lens.lens (\ListSecurityConfigsResponse' {httpStatus} -> httpStatus) (\s@ListSecurityConfigsResponse' {} a -> s {httpStatus = a} :: ListSecurityConfigsResponse)
+
+instance Prelude.NFData ListSecurityConfigsResponse where
+  rnf ListSecurityConfigsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf securityConfigSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/ListSecurityPolicies.hs b/gen/Amazonka/OpenSearchServerless/ListSecurityPolicies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/ListSecurityPolicies.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.ListSecurityPolicies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about configured OpenSearch Serverless security
+-- policies.
+module Amazonka.OpenSearchServerless.ListSecurityPolicies
+  ( -- * Creating a Request
+    ListSecurityPolicies (..),
+    newListSecurityPolicies,
+
+    -- * Request Lenses
+    listSecurityPolicies_maxResults,
+    listSecurityPolicies_nextToken,
+    listSecurityPolicies_resource,
+    listSecurityPolicies_type,
+
+    -- * Destructuring the Response
+    ListSecurityPoliciesResponse (..),
+    newListSecurityPoliciesResponse,
+
+    -- * Response Lenses
+    listSecurityPoliciesResponse_nextToken,
+    listSecurityPoliciesResponse_securityPolicySummaries,
+    listSecurityPoliciesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSecurityPolicies' smart constructor.
+data ListSecurityPolicies = ListSecurityPolicies'
+  { -- | An optional parameter that specifies the maximum number of results to
+    -- return. You can use @nextToken@ to get the next page of results. The
+    -- default is 20.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If your initial @ListSecurityPolicies@ operation returns a @nextToken@,
+    -- you can include the returned @nextToken@ in subsequent
+    -- @ListSecurityPolicies@ operations, which returns results in the next
+    -- page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Resource filters (can be collection or indexes) that policies can apply
+    -- to.
+    resource :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The type of policy.
+    type' :: SecurityPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSecurityPolicies' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSecurityPolicies_maxResults' - An optional parameter that specifies the maximum number of results to
+-- return. You can use @nextToken@ to get the next page of results. The
+-- default is 20.
+--
+-- 'nextToken', 'listSecurityPolicies_nextToken' - If your initial @ListSecurityPolicies@ operation returns a @nextToken@,
+-- you can include the returned @nextToken@ in subsequent
+-- @ListSecurityPolicies@ operations, which returns results in the next
+-- page.
+--
+-- 'resource', 'listSecurityPolicies_resource' - Resource filters (can be collection or indexes) that policies can apply
+-- to.
+--
+-- 'type'', 'listSecurityPolicies_type' - The type of policy.
+newListSecurityPolicies ::
+  -- | 'type''
+  SecurityPolicyType ->
+  ListSecurityPolicies
+newListSecurityPolicies pType_ =
+  ListSecurityPolicies'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resource = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | An optional parameter that specifies the maximum number of results to
+-- return. You can use @nextToken@ to get the next page of results. The
+-- default is 20.
+listSecurityPolicies_maxResults :: Lens.Lens' ListSecurityPolicies (Prelude.Maybe Prelude.Natural)
+listSecurityPolicies_maxResults = Lens.lens (\ListSecurityPolicies' {maxResults} -> maxResults) (\s@ListSecurityPolicies' {} a -> s {maxResults = a} :: ListSecurityPolicies)
+
+-- | If your initial @ListSecurityPolicies@ operation returns a @nextToken@,
+-- you can include the returned @nextToken@ in subsequent
+-- @ListSecurityPolicies@ operations, which returns results in the next
+-- page.
+listSecurityPolicies_nextToken :: Lens.Lens' ListSecurityPolicies (Prelude.Maybe Prelude.Text)
+listSecurityPolicies_nextToken = Lens.lens (\ListSecurityPolicies' {nextToken} -> nextToken) (\s@ListSecurityPolicies' {} a -> s {nextToken = a} :: ListSecurityPolicies)
+
+-- | Resource filters (can be collection or indexes) that policies can apply
+-- to.
+listSecurityPolicies_resource :: Lens.Lens' ListSecurityPolicies (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+listSecurityPolicies_resource = Lens.lens (\ListSecurityPolicies' {resource} -> resource) (\s@ListSecurityPolicies' {} a -> s {resource = a} :: ListSecurityPolicies) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of policy.
+listSecurityPolicies_type :: Lens.Lens' ListSecurityPolicies SecurityPolicyType
+listSecurityPolicies_type = Lens.lens (\ListSecurityPolicies' {type'} -> type') (\s@ListSecurityPolicies' {} a -> s {type' = a} :: ListSecurityPolicies)
+
+instance Core.AWSRequest ListSecurityPolicies where
+  type
+    AWSResponse ListSecurityPolicies =
+      ListSecurityPoliciesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSecurityPoliciesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "securityPolicySummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSecurityPolicies where
+  hashWithSalt _salt ListSecurityPolicies' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resource
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ListSecurityPolicies where
+  rnf ListSecurityPolicies' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resource
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders ListSecurityPolicies where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.ListSecurityPolicies" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListSecurityPolicies where
+  toJSON ListSecurityPolicies' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("resource" Data..=) Prelude.<$> resource,
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath ListSecurityPolicies where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSecurityPolicies where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListSecurityPoliciesResponse' smart constructor.
+data ListSecurityPoliciesResponse = ListSecurityPoliciesResponse'
+  { -- | When @nextToken@ is returned, there are more results available. The
+    -- value of @nextToken@ is a unique pagination token for each page. Make
+    -- the call again using the returned token to retrieve the next page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Details about the security policies in your account.
+    securityPolicySummaries :: Prelude.Maybe [SecurityPolicySummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSecurityPoliciesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listSecurityPoliciesResponse_nextToken' - When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+--
+-- 'securityPolicySummaries', 'listSecurityPoliciesResponse_securityPolicySummaries' - Details about the security policies in your account.
+--
+-- 'httpStatus', 'listSecurityPoliciesResponse_httpStatus' - The response's http status code.
+newListSecurityPoliciesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSecurityPoliciesResponse
+newListSecurityPoliciesResponse pHttpStatus_ =
+  ListSecurityPoliciesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      securityPolicySummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+listSecurityPoliciesResponse_nextToken :: Lens.Lens' ListSecurityPoliciesResponse (Prelude.Maybe Prelude.Text)
+listSecurityPoliciesResponse_nextToken = Lens.lens (\ListSecurityPoliciesResponse' {nextToken} -> nextToken) (\s@ListSecurityPoliciesResponse' {} a -> s {nextToken = a} :: ListSecurityPoliciesResponse)
+
+-- | Details about the security policies in your account.
+listSecurityPoliciesResponse_securityPolicySummaries :: Lens.Lens' ListSecurityPoliciesResponse (Prelude.Maybe [SecurityPolicySummary])
+listSecurityPoliciesResponse_securityPolicySummaries = Lens.lens (\ListSecurityPoliciesResponse' {securityPolicySummaries} -> securityPolicySummaries) (\s@ListSecurityPoliciesResponse' {} a -> s {securityPolicySummaries = a} :: ListSecurityPoliciesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSecurityPoliciesResponse_httpStatus :: Lens.Lens' ListSecurityPoliciesResponse Prelude.Int
+listSecurityPoliciesResponse_httpStatus = Lens.lens (\ListSecurityPoliciesResponse' {httpStatus} -> httpStatus) (\s@ListSecurityPoliciesResponse' {} a -> s {httpStatus = a} :: ListSecurityPoliciesResponse)
+
+instance Prelude.NFData ListSecurityPoliciesResponse where
+  rnf ListSecurityPoliciesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf securityPolicySummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/ListTagsForResource.hs b/gen/Amazonka/OpenSearchServerless/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/ListTagsForResource.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.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)
+--
+-- Returns the tags for an OpenSearch Serverless resource. For more
+-- information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/tag-collection.html Tagging Amazon OpenSearch Serverless collections>.
+module Amazonka.OpenSearchServerless.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.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource. The resource must be
+    -- active (not in the @DELETING@ state), and must be owned by the account
+    -- ID included in the request.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource. The resource must be
+-- active (not in the @DELETING@ state), and must be owned by the account
+-- ID included in the request.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource. The resource must be
+-- active (not in the @DELETING@ state), and must be owned by the account
+-- ID included in the request.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("resourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags associated with the resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags associated with the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags associated with the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/ListVpcEndpoints.hs b/gen/Amazonka/OpenSearchServerless/ListVpcEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/ListVpcEndpoints.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.ListVpcEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the OpenSearch Serverless-managed interface VPC endpoints
+-- associated with the current account. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html Access Amazon OpenSearch Serverless using an interface endpoint>.
+module Amazonka.OpenSearchServerless.ListVpcEndpoints
+  ( -- * Creating a Request
+    ListVpcEndpoints (..),
+    newListVpcEndpoints,
+
+    -- * Request Lenses
+    listVpcEndpoints_maxResults,
+    listVpcEndpoints_nextToken,
+    listVpcEndpoints_vpcEndpointFilters,
+
+    -- * Destructuring the Response
+    ListVpcEndpointsResponse (..),
+    newListVpcEndpointsResponse,
+
+    -- * Response Lenses
+    listVpcEndpointsResponse_nextToken,
+    listVpcEndpointsResponse_vpcEndpointSummaries,
+    listVpcEndpointsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListVpcEndpoints' smart constructor.
+data ListVpcEndpoints = ListVpcEndpoints'
+  { -- | An optional parameter that specifies the maximum number of results to
+    -- return. You can use @nextToken@ to get the next page of results. The
+    -- default is 20.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If your initial @ListVpcEndpoints@ operation returns a @nextToken@, you
+    -- can include the returned @nextToken@ in subsequent @ListVpcEndpoints@
+    -- operations, which returns results in the next page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filter the results according to the current status of the VPC endpoint.
+    -- Possible statuses are @CREATING@, @DELETING@, @UPDATING@, @ACTIVE@, and
+    -- @FAILED@.
+    vpcEndpointFilters :: Prelude.Maybe VpcEndpointFilters
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVpcEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listVpcEndpoints_maxResults' - An optional parameter that specifies the maximum number of results to
+-- return. You can use @nextToken@ to get the next page of results. The
+-- default is 20.
+--
+-- 'nextToken', 'listVpcEndpoints_nextToken' - If your initial @ListVpcEndpoints@ operation returns a @nextToken@, you
+-- can include the returned @nextToken@ in subsequent @ListVpcEndpoints@
+-- operations, which returns results in the next page.
+--
+-- 'vpcEndpointFilters', 'listVpcEndpoints_vpcEndpointFilters' - Filter the results according to the current status of the VPC endpoint.
+-- Possible statuses are @CREATING@, @DELETING@, @UPDATING@, @ACTIVE@, and
+-- @FAILED@.
+newListVpcEndpoints ::
+  ListVpcEndpoints
+newListVpcEndpoints =
+  ListVpcEndpoints'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vpcEndpointFilters = Prelude.Nothing
+    }
+
+-- | An optional parameter that specifies the maximum number of results to
+-- return. You can use @nextToken@ to get the next page of results. The
+-- default is 20.
+listVpcEndpoints_maxResults :: Lens.Lens' ListVpcEndpoints (Prelude.Maybe Prelude.Natural)
+listVpcEndpoints_maxResults = Lens.lens (\ListVpcEndpoints' {maxResults} -> maxResults) (\s@ListVpcEndpoints' {} a -> s {maxResults = a} :: ListVpcEndpoints)
+
+-- | If your initial @ListVpcEndpoints@ operation returns a @nextToken@, you
+-- can include the returned @nextToken@ in subsequent @ListVpcEndpoints@
+-- operations, which returns results in the next page.
+listVpcEndpoints_nextToken :: Lens.Lens' ListVpcEndpoints (Prelude.Maybe Prelude.Text)
+listVpcEndpoints_nextToken = Lens.lens (\ListVpcEndpoints' {nextToken} -> nextToken) (\s@ListVpcEndpoints' {} a -> s {nextToken = a} :: ListVpcEndpoints)
+
+-- | Filter the results according to the current status of the VPC endpoint.
+-- Possible statuses are @CREATING@, @DELETING@, @UPDATING@, @ACTIVE@, and
+-- @FAILED@.
+listVpcEndpoints_vpcEndpointFilters :: Lens.Lens' ListVpcEndpoints (Prelude.Maybe VpcEndpointFilters)
+listVpcEndpoints_vpcEndpointFilters = Lens.lens (\ListVpcEndpoints' {vpcEndpointFilters} -> vpcEndpointFilters) (\s@ListVpcEndpoints' {} a -> s {vpcEndpointFilters = a} :: ListVpcEndpoints)
+
+instance Core.AWSRequest ListVpcEndpoints where
+  type
+    AWSResponse ListVpcEndpoints =
+      ListVpcEndpointsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListVpcEndpointsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "vpcEndpointSummaries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListVpcEndpoints where
+  hashWithSalt _salt ListVpcEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` vpcEndpointFilters
+
+instance Prelude.NFData ListVpcEndpoints where
+  rnf ListVpcEndpoints' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcEndpointFilters
+
+instance Data.ToHeaders ListVpcEndpoints where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.ListVpcEndpoints" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListVpcEndpoints where
+  toJSON ListVpcEndpoints' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("vpcEndpointFilters" Data..=)
+              Prelude.<$> vpcEndpointFilters
+          ]
+      )
+
+instance Data.ToPath ListVpcEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListVpcEndpoints where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListVpcEndpointsResponse' smart constructor.
+data ListVpcEndpointsResponse = ListVpcEndpointsResponse'
+  { -- | When @nextToken@ is returned, there are more results available. The
+    -- value of @nextToken@ is a unique pagination token for each page. Make
+    -- the call again using the returned token to retrieve the next page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Details about each VPC endpoint, including the name and current status.
+    vpcEndpointSummaries :: Prelude.Maybe [VpcEndpointSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListVpcEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listVpcEndpointsResponse_nextToken' - When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+--
+-- 'vpcEndpointSummaries', 'listVpcEndpointsResponse_vpcEndpointSummaries' - Details about each VPC endpoint, including the name and current status.
+--
+-- 'httpStatus', 'listVpcEndpointsResponse_httpStatus' - The response's http status code.
+newListVpcEndpointsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListVpcEndpointsResponse
+newListVpcEndpointsResponse pHttpStatus_ =
+  ListVpcEndpointsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      vpcEndpointSummaries = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When @nextToken@ is returned, there are more results available. The
+-- value of @nextToken@ is a unique pagination token for each page. Make
+-- the call again using the returned token to retrieve the next page.
+listVpcEndpointsResponse_nextToken :: Lens.Lens' ListVpcEndpointsResponse (Prelude.Maybe Prelude.Text)
+listVpcEndpointsResponse_nextToken = Lens.lens (\ListVpcEndpointsResponse' {nextToken} -> nextToken) (\s@ListVpcEndpointsResponse' {} a -> s {nextToken = a} :: ListVpcEndpointsResponse)
+
+-- | Details about each VPC endpoint, including the name and current status.
+listVpcEndpointsResponse_vpcEndpointSummaries :: Lens.Lens' ListVpcEndpointsResponse (Prelude.Maybe [VpcEndpointSummary])
+listVpcEndpointsResponse_vpcEndpointSummaries = Lens.lens (\ListVpcEndpointsResponse' {vpcEndpointSummaries} -> vpcEndpointSummaries) (\s@ListVpcEndpointsResponse' {} a -> s {vpcEndpointSummaries = a} :: ListVpcEndpointsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listVpcEndpointsResponse_httpStatus :: Lens.Lens' ListVpcEndpointsResponse Prelude.Int
+listVpcEndpointsResponse_httpStatus = Lens.lens (\ListVpcEndpointsResponse' {httpStatus} -> httpStatus) (\s@ListVpcEndpointsResponse' {} a -> s {httpStatus = a} :: ListVpcEndpointsResponse)
+
+instance Prelude.NFData ListVpcEndpointsResponse where
+  rnf ListVpcEndpointsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcEndpointSummaries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/TagResource.hs b/gen/Amazonka/OpenSearchServerless/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/TagResource.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.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)
+--
+-- Associates tags with an OpenSearch Serverless resource. For more
+-- information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/tag-collection.html Tagging Amazon OpenSearch Serverless collections>.
+module Amazonka.OpenSearchServerless.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource. The resource must be
+    -- active (not in the @DELETING@ state), and must be owned by the account
+    -- ID included in the request.
+    resourceArn :: Prelude.Text,
+    -- | A list of tags (key-value pairs) to add to the resource. All tag keys in
+    -- the request must be unique.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource. The resource must be
+-- active (not in the @DELETING@ state), and must be owned by the account
+-- ID included in the request.
+--
+-- 'tags', 'tagResource_tags' - A list of tags (key-value pairs) to add to the resource. All tag keys in
+-- the request must be unique.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource. The resource must be
+-- active (not in the @DELETING@ state), and must be owned by the account
+-- ID included in the request.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | A list of tags (key-value pairs) to add to the resource. All tag keys in
+-- the request must be unique.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.TagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("resourceArn" Data..= resourceArn),
+            Prelude.Just ("tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/Types.hs b/gen/Amazonka/OpenSearchServerless/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types.hs
@@ -0,0 +1,417 @@
+{-# 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.OpenSearchServerless.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.OpenSearchServerless.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ValidationException,
+
+    -- * AccessPolicyType
+    AccessPolicyType (..),
+
+    -- * CollectionStatus
+    CollectionStatus (..),
+
+    -- * CollectionType
+    CollectionType (..),
+
+    -- * SecurityConfigType
+    SecurityConfigType (..),
+
+    -- * SecurityPolicyType
+    SecurityPolicyType (..),
+
+    -- * VpcEndpointStatus
+    VpcEndpointStatus (..),
+
+    -- * AccessPolicyDetail
+    AccessPolicyDetail (..),
+    newAccessPolicyDetail,
+    accessPolicyDetail_createdDate,
+    accessPolicyDetail_description,
+    accessPolicyDetail_lastModifiedDate,
+    accessPolicyDetail_name,
+    accessPolicyDetail_policy,
+    accessPolicyDetail_policyVersion,
+    accessPolicyDetail_type,
+
+    -- * AccessPolicyStats
+    AccessPolicyStats (..),
+    newAccessPolicyStats,
+    accessPolicyStats_dataPolicyCount,
+
+    -- * AccessPolicySummary
+    AccessPolicySummary (..),
+    newAccessPolicySummary,
+    accessPolicySummary_createdDate,
+    accessPolicySummary_description,
+    accessPolicySummary_lastModifiedDate,
+    accessPolicySummary_name,
+    accessPolicySummary_policyVersion,
+    accessPolicySummary_type,
+
+    -- * AccountSettingsDetail
+    AccountSettingsDetail (..),
+    newAccountSettingsDetail,
+    accountSettingsDetail_capacityLimits,
+
+    -- * CapacityLimits
+    CapacityLimits (..),
+    newCapacityLimits,
+    capacityLimits_maxIndexingCapacityInOCU,
+    capacityLimits_maxSearchCapacityInOCU,
+
+    -- * CollectionDetail
+    CollectionDetail (..),
+    newCollectionDetail,
+    collectionDetail_arn,
+    collectionDetail_collectionEndpoint,
+    collectionDetail_createdDate,
+    collectionDetail_dashboardEndpoint,
+    collectionDetail_description,
+    collectionDetail_id,
+    collectionDetail_kmsKeyArn,
+    collectionDetail_lastModifiedDate,
+    collectionDetail_name,
+    collectionDetail_status,
+    collectionDetail_type,
+
+    -- * CollectionErrorDetail
+    CollectionErrorDetail (..),
+    newCollectionErrorDetail,
+    collectionErrorDetail_errorCode,
+    collectionErrorDetail_errorMessage,
+    collectionErrorDetail_id,
+    collectionErrorDetail_name,
+
+    -- * CollectionFilters
+    CollectionFilters (..),
+    newCollectionFilters,
+    collectionFilters_name,
+    collectionFilters_status,
+
+    -- * CollectionSummary
+    CollectionSummary (..),
+    newCollectionSummary,
+    collectionSummary_arn,
+    collectionSummary_id,
+    collectionSummary_name,
+    collectionSummary_status,
+
+    -- * CreateCollectionDetail
+    CreateCollectionDetail (..),
+    newCreateCollectionDetail,
+    createCollectionDetail_arn,
+    createCollectionDetail_createdDate,
+    createCollectionDetail_description,
+    createCollectionDetail_id,
+    createCollectionDetail_kmsKeyArn,
+    createCollectionDetail_lastModifiedDate,
+    createCollectionDetail_name,
+    createCollectionDetail_status,
+    createCollectionDetail_type,
+
+    -- * CreateVpcEndpointDetail
+    CreateVpcEndpointDetail (..),
+    newCreateVpcEndpointDetail,
+    createVpcEndpointDetail_id,
+    createVpcEndpointDetail_name,
+    createVpcEndpointDetail_status,
+
+    -- * DeleteCollectionDetail
+    DeleteCollectionDetail (..),
+    newDeleteCollectionDetail,
+    deleteCollectionDetail_id,
+    deleteCollectionDetail_name,
+    deleteCollectionDetail_status,
+
+    -- * DeleteVpcEndpointDetail
+    DeleteVpcEndpointDetail (..),
+    newDeleteVpcEndpointDetail,
+    deleteVpcEndpointDetail_id,
+    deleteVpcEndpointDetail_name,
+    deleteVpcEndpointDetail_status,
+
+    -- * Document
+    Document (..),
+    newDocument,
+
+    -- * SamlConfigOptions
+    SamlConfigOptions (..),
+    newSamlConfigOptions,
+    samlConfigOptions_groupAttribute,
+    samlConfigOptions_sessionTimeout,
+    samlConfigOptions_userAttribute,
+    samlConfigOptions_metadata,
+
+    -- * SecurityConfigDetail
+    SecurityConfigDetail (..),
+    newSecurityConfigDetail,
+    securityConfigDetail_configVersion,
+    securityConfigDetail_createdDate,
+    securityConfigDetail_description,
+    securityConfigDetail_id,
+    securityConfigDetail_lastModifiedDate,
+    securityConfigDetail_samlOptions,
+    securityConfigDetail_type,
+
+    -- * SecurityConfigStats
+    SecurityConfigStats (..),
+    newSecurityConfigStats,
+    securityConfigStats_samlConfigCount,
+
+    -- * SecurityConfigSummary
+    SecurityConfigSummary (..),
+    newSecurityConfigSummary,
+    securityConfigSummary_configVersion,
+    securityConfigSummary_createdDate,
+    securityConfigSummary_description,
+    securityConfigSummary_id,
+    securityConfigSummary_lastModifiedDate,
+    securityConfigSummary_type,
+
+    -- * SecurityPolicyDetail
+    SecurityPolicyDetail (..),
+    newSecurityPolicyDetail,
+    securityPolicyDetail_createdDate,
+    securityPolicyDetail_description,
+    securityPolicyDetail_lastModifiedDate,
+    securityPolicyDetail_name,
+    securityPolicyDetail_policy,
+    securityPolicyDetail_policyVersion,
+    securityPolicyDetail_type,
+
+    -- * SecurityPolicyStats
+    SecurityPolicyStats (..),
+    newSecurityPolicyStats,
+    securityPolicyStats_encryptionPolicyCount,
+    securityPolicyStats_networkPolicyCount,
+
+    -- * SecurityPolicySummary
+    SecurityPolicySummary (..),
+    newSecurityPolicySummary,
+    securityPolicySummary_createdDate,
+    securityPolicySummary_description,
+    securityPolicySummary_lastModifiedDate,
+    securityPolicySummary_name,
+    securityPolicySummary_policyVersion,
+    securityPolicySummary_type,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * UpdateCollectionDetail
+    UpdateCollectionDetail (..),
+    newUpdateCollectionDetail,
+    updateCollectionDetail_arn,
+    updateCollectionDetail_createdDate,
+    updateCollectionDetail_description,
+    updateCollectionDetail_id,
+    updateCollectionDetail_lastModifiedDate,
+    updateCollectionDetail_name,
+    updateCollectionDetail_status,
+    updateCollectionDetail_type,
+
+    -- * UpdateVpcEndpointDetail
+    UpdateVpcEndpointDetail (..),
+    newUpdateVpcEndpointDetail,
+    updateVpcEndpointDetail_id,
+    updateVpcEndpointDetail_lastModifiedDate,
+    updateVpcEndpointDetail_name,
+    updateVpcEndpointDetail_securityGroupIds,
+    updateVpcEndpointDetail_status,
+    updateVpcEndpointDetail_subnetIds,
+
+    -- * VpcEndpointDetail
+    VpcEndpointDetail (..),
+    newVpcEndpointDetail,
+    vpcEndpointDetail_createdDate,
+    vpcEndpointDetail_id,
+    vpcEndpointDetail_name,
+    vpcEndpointDetail_securityGroupIds,
+    vpcEndpointDetail_status,
+    vpcEndpointDetail_subnetIds,
+    vpcEndpointDetail_vpcId,
+
+    -- * VpcEndpointErrorDetail
+    VpcEndpointErrorDetail (..),
+    newVpcEndpointErrorDetail,
+    vpcEndpointErrorDetail_errorCode,
+    vpcEndpointErrorDetail_errorMessage,
+    vpcEndpointErrorDetail_id,
+
+    -- * VpcEndpointFilters
+    VpcEndpointFilters (..),
+    newVpcEndpointFilters,
+    vpcEndpointFilters_status,
+
+    -- * VpcEndpointSummary
+    VpcEndpointSummary (..),
+    newVpcEndpointSummary,
+    vpcEndpointSummary_id,
+    vpcEndpointSummary_name,
+    vpcEndpointSummary_status,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.OpenSearchServerless.Types.AccessPolicyDetail
+import Amazonka.OpenSearchServerless.Types.AccessPolicyStats
+import Amazonka.OpenSearchServerless.Types.AccessPolicySummary
+import Amazonka.OpenSearchServerless.Types.AccessPolicyType
+import Amazonka.OpenSearchServerless.Types.AccountSettingsDetail
+import Amazonka.OpenSearchServerless.Types.CapacityLimits
+import Amazonka.OpenSearchServerless.Types.CollectionDetail
+import Amazonka.OpenSearchServerless.Types.CollectionErrorDetail
+import Amazonka.OpenSearchServerless.Types.CollectionFilters
+import Amazonka.OpenSearchServerless.Types.CollectionStatus
+import Amazonka.OpenSearchServerless.Types.CollectionSummary
+import Amazonka.OpenSearchServerless.Types.CollectionType
+import Amazonka.OpenSearchServerless.Types.CreateCollectionDetail
+import Amazonka.OpenSearchServerless.Types.CreateVpcEndpointDetail
+import Amazonka.OpenSearchServerless.Types.DeleteCollectionDetail
+import Amazonka.OpenSearchServerless.Types.DeleteVpcEndpointDetail
+import Amazonka.OpenSearchServerless.Types.Document
+import Amazonka.OpenSearchServerless.Types.SamlConfigOptions
+import Amazonka.OpenSearchServerless.Types.SecurityConfigDetail
+import Amazonka.OpenSearchServerless.Types.SecurityConfigStats
+import Amazonka.OpenSearchServerless.Types.SecurityConfigSummary
+import Amazonka.OpenSearchServerless.Types.SecurityConfigType
+import Amazonka.OpenSearchServerless.Types.SecurityPolicyDetail
+import Amazonka.OpenSearchServerless.Types.SecurityPolicyStats
+import Amazonka.OpenSearchServerless.Types.SecurityPolicySummary
+import Amazonka.OpenSearchServerless.Types.SecurityPolicyType
+import Amazonka.OpenSearchServerless.Types.Tag
+import Amazonka.OpenSearchServerless.Types.UpdateCollectionDetail
+import Amazonka.OpenSearchServerless.Types.UpdateVpcEndpointDetail
+import Amazonka.OpenSearchServerless.Types.VpcEndpointDetail
+import Amazonka.OpenSearchServerless.Types.VpcEndpointErrorDetail
+import Amazonka.OpenSearchServerless.Types.VpcEndpointFilters
+import Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+import Amazonka.OpenSearchServerless.Types.VpcEndpointSummary
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-11-01@ of the Amazon OpenSearch Service Serverless SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "OpenSearchServerless",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "aoss",
+      Core.signingName = "aoss",
+      Core.version = "2021-11-01",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error =
+        Core.parseJSONError "OpenSearchServerless",
+      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
+
+-- | When creating a collection, thrown when a collection with the same name
+-- already exists or is being created. When deleting a collection, thrown
+-- when the collection is not in the ACTIVE or FAILED state.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+
+-- | Thrown when an error internal to the service occurs while processing a
+-- request.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+
+-- | Thrown when accessing or deleting a resource that does not exist.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+
+-- | Thrown when the HTTP request contains invalid input or is missing
+-- required input.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
diff --git a/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyDetail.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.AccessPolicyDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.AccessPolicyDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.AccessPolicyType
+import Amazonka.OpenSearchServerless.Types.Document
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about an OpenSearch Serverless access policy.
+--
+-- /See:/ 'newAccessPolicyDetail' smart constructor.
+data AccessPolicyDetail = AccessPolicyDetail'
+  { -- | The date the policy was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | The description of the policy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the policy was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the policy.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The JSON policy document without any whitespaces.
+    policy :: Prelude.Maybe Document,
+    -- | The version of the policy.
+    policyVersion :: Prelude.Maybe Prelude.Text,
+    -- | The type of access policy.
+    type' :: Prelude.Maybe AccessPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessPolicyDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'accessPolicyDetail_createdDate' - The date the policy was created.
+--
+-- 'description', 'accessPolicyDetail_description' - The description of the policy.
+--
+-- 'lastModifiedDate', 'accessPolicyDetail_lastModifiedDate' - The timestamp of when the policy was last modified.
+--
+-- 'name', 'accessPolicyDetail_name' - The name of the policy.
+--
+-- 'policy', 'accessPolicyDetail_policy' - The JSON policy document without any whitespaces.
+--
+-- 'policyVersion', 'accessPolicyDetail_policyVersion' - The version of the policy.
+--
+-- 'type'', 'accessPolicyDetail_type' - The type of access policy.
+newAccessPolicyDetail ::
+  AccessPolicyDetail
+newAccessPolicyDetail =
+  AccessPolicyDetail'
+    { createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      policy = Prelude.Nothing,
+      policyVersion = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The date the policy was created.
+accessPolicyDetail_createdDate :: Lens.Lens' AccessPolicyDetail (Prelude.Maybe Prelude.Integer)
+accessPolicyDetail_createdDate = Lens.lens (\AccessPolicyDetail' {createdDate} -> createdDate) (\s@AccessPolicyDetail' {} a -> s {createdDate = a} :: AccessPolicyDetail)
+
+-- | The description of the policy.
+accessPolicyDetail_description :: Lens.Lens' AccessPolicyDetail (Prelude.Maybe Prelude.Text)
+accessPolicyDetail_description = Lens.lens (\AccessPolicyDetail' {description} -> description) (\s@AccessPolicyDetail' {} a -> s {description = a} :: AccessPolicyDetail)
+
+-- | The timestamp of when the policy was last modified.
+accessPolicyDetail_lastModifiedDate :: Lens.Lens' AccessPolicyDetail (Prelude.Maybe Prelude.Integer)
+accessPolicyDetail_lastModifiedDate = Lens.lens (\AccessPolicyDetail' {lastModifiedDate} -> lastModifiedDate) (\s@AccessPolicyDetail' {} a -> s {lastModifiedDate = a} :: AccessPolicyDetail)
+
+-- | The name of the policy.
+accessPolicyDetail_name :: Lens.Lens' AccessPolicyDetail (Prelude.Maybe Prelude.Text)
+accessPolicyDetail_name = Lens.lens (\AccessPolicyDetail' {name} -> name) (\s@AccessPolicyDetail' {} a -> s {name = a} :: AccessPolicyDetail)
+
+-- | The JSON policy document without any whitespaces.
+accessPolicyDetail_policy :: Lens.Lens' AccessPolicyDetail (Prelude.Maybe Document)
+accessPolicyDetail_policy = Lens.lens (\AccessPolicyDetail' {policy} -> policy) (\s@AccessPolicyDetail' {} a -> s {policy = a} :: AccessPolicyDetail)
+
+-- | The version of the policy.
+accessPolicyDetail_policyVersion :: Lens.Lens' AccessPolicyDetail (Prelude.Maybe Prelude.Text)
+accessPolicyDetail_policyVersion = Lens.lens (\AccessPolicyDetail' {policyVersion} -> policyVersion) (\s@AccessPolicyDetail' {} a -> s {policyVersion = a} :: AccessPolicyDetail)
+
+-- | The type of access policy.
+accessPolicyDetail_type :: Lens.Lens' AccessPolicyDetail (Prelude.Maybe AccessPolicyType)
+accessPolicyDetail_type = Lens.lens (\AccessPolicyDetail' {type'} -> type') (\s@AccessPolicyDetail' {} a -> s {type' = a} :: AccessPolicyDetail)
+
+instance Data.FromJSON AccessPolicyDetail where
+  parseJSON =
+    Data.withObject
+      "AccessPolicyDetail"
+      ( \x ->
+          AccessPolicyDetail'
+            Prelude.<$> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "policy")
+            Prelude.<*> (x Data..:? "policyVersion")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable AccessPolicyDetail where
+  hashWithSalt _salt AccessPolicyDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` policyVersion
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AccessPolicyDetail where
+  rnf AccessPolicyDetail' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf policyVersion
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyStats.hs b/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyStats.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyStats.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.AccessPolicyStats
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.AccessPolicyStats 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
+
+-- | Statistics for an OpenSearch Serverless access policy.
+--
+-- /See:/ 'newAccessPolicyStats' smart constructor.
+data AccessPolicyStats = AccessPolicyStats'
+  { -- | The number of data access policies in the current account.
+    dataPolicyCount :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessPolicyStats' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataPolicyCount', 'accessPolicyStats_dataPolicyCount' - The number of data access policies in the current account.
+newAccessPolicyStats ::
+  AccessPolicyStats
+newAccessPolicyStats =
+  AccessPolicyStats'
+    { dataPolicyCount =
+        Prelude.Nothing
+    }
+
+-- | The number of data access policies in the current account.
+accessPolicyStats_dataPolicyCount :: Lens.Lens' AccessPolicyStats (Prelude.Maybe Prelude.Integer)
+accessPolicyStats_dataPolicyCount = Lens.lens (\AccessPolicyStats' {dataPolicyCount} -> dataPolicyCount) (\s@AccessPolicyStats' {} a -> s {dataPolicyCount = a} :: AccessPolicyStats)
+
+instance Data.FromJSON AccessPolicyStats where
+  parseJSON =
+    Data.withObject
+      "AccessPolicyStats"
+      ( \x ->
+          AccessPolicyStats'
+            Prelude.<$> (x Data..:? "DataPolicyCount")
+      )
+
+instance Prelude.Hashable AccessPolicyStats where
+  hashWithSalt _salt AccessPolicyStats' {..} =
+    _salt `Prelude.hashWithSalt` dataPolicyCount
+
+instance Prelude.NFData AccessPolicyStats where
+  rnf AccessPolicyStats' {..} =
+    Prelude.rnf dataPolicyCount
diff --git a/gen/Amazonka/OpenSearchServerless/Types/AccessPolicySummary.hs b/gen/Amazonka/OpenSearchServerless/Types/AccessPolicySummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/AccessPolicySummary.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.AccessPolicySummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.AccessPolicySummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.AccessPolicyType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of the data access policy.
+--
+-- /See:/ 'newAccessPolicySummary' smart constructor.
+data AccessPolicySummary = AccessPolicySummary'
+  { -- | The Epoch time when the access policy was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | The description of the access policy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the collection was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the access policy.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The version of the policy.
+    policyVersion :: Prelude.Maybe Prelude.Text,
+    -- | The type of access policy. Currently the only available type is @data@.
+    type' :: Prelude.Maybe AccessPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessPolicySummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'accessPolicySummary_createdDate' - The Epoch time when the access policy was created.
+--
+-- 'description', 'accessPolicySummary_description' - The description of the access policy.
+--
+-- 'lastModifiedDate', 'accessPolicySummary_lastModifiedDate' - The date and time when the collection was last modified.
+--
+-- 'name', 'accessPolicySummary_name' - The name of the access policy.
+--
+-- 'policyVersion', 'accessPolicySummary_policyVersion' - The version of the policy.
+--
+-- 'type'', 'accessPolicySummary_type' - The type of access policy. Currently the only available type is @data@.
+newAccessPolicySummary ::
+  AccessPolicySummary
+newAccessPolicySummary =
+  AccessPolicySummary'
+    { createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      policyVersion = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Epoch time when the access policy was created.
+accessPolicySummary_createdDate :: Lens.Lens' AccessPolicySummary (Prelude.Maybe Prelude.Integer)
+accessPolicySummary_createdDate = Lens.lens (\AccessPolicySummary' {createdDate} -> createdDate) (\s@AccessPolicySummary' {} a -> s {createdDate = a} :: AccessPolicySummary)
+
+-- | The description of the access policy.
+accessPolicySummary_description :: Lens.Lens' AccessPolicySummary (Prelude.Maybe Prelude.Text)
+accessPolicySummary_description = Lens.lens (\AccessPolicySummary' {description} -> description) (\s@AccessPolicySummary' {} a -> s {description = a} :: AccessPolicySummary)
+
+-- | The date and time when the collection was last modified.
+accessPolicySummary_lastModifiedDate :: Lens.Lens' AccessPolicySummary (Prelude.Maybe Prelude.Integer)
+accessPolicySummary_lastModifiedDate = Lens.lens (\AccessPolicySummary' {lastModifiedDate} -> lastModifiedDate) (\s@AccessPolicySummary' {} a -> s {lastModifiedDate = a} :: AccessPolicySummary)
+
+-- | The name of the access policy.
+accessPolicySummary_name :: Lens.Lens' AccessPolicySummary (Prelude.Maybe Prelude.Text)
+accessPolicySummary_name = Lens.lens (\AccessPolicySummary' {name} -> name) (\s@AccessPolicySummary' {} a -> s {name = a} :: AccessPolicySummary)
+
+-- | The version of the policy.
+accessPolicySummary_policyVersion :: Lens.Lens' AccessPolicySummary (Prelude.Maybe Prelude.Text)
+accessPolicySummary_policyVersion = Lens.lens (\AccessPolicySummary' {policyVersion} -> policyVersion) (\s@AccessPolicySummary' {} a -> s {policyVersion = a} :: AccessPolicySummary)
+
+-- | The type of access policy. Currently the only available type is @data@.
+accessPolicySummary_type :: Lens.Lens' AccessPolicySummary (Prelude.Maybe AccessPolicyType)
+accessPolicySummary_type = Lens.lens (\AccessPolicySummary' {type'} -> type') (\s@AccessPolicySummary' {} a -> s {type' = a} :: AccessPolicySummary)
+
+instance Data.FromJSON AccessPolicySummary where
+  parseJSON =
+    Data.withObject
+      "AccessPolicySummary"
+      ( \x ->
+          AccessPolicySummary'
+            Prelude.<$> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "policyVersion")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable AccessPolicySummary where
+  hashWithSalt _salt AccessPolicySummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` policyVersion
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData AccessPolicySummary where
+  rnf AccessPolicySummary' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf policyVersion
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyType.hs b/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/AccessPolicyType.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.OpenSearchServerless.Types.AccessPolicyType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.AccessPolicyType
+  ( AccessPolicyType
+      ( ..,
+        AccessPolicyType_Data
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AccessPolicyType = AccessPolicyType'
+  { fromAccessPolicyType ::
+      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 AccessPolicyType_Data :: AccessPolicyType
+pattern AccessPolicyType_Data = AccessPolicyType' "data"
+
+{-# COMPLETE
+  AccessPolicyType_Data,
+  AccessPolicyType'
+  #-}
diff --git a/gen/Amazonka/OpenSearchServerless/Types/AccountSettingsDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/AccountSettingsDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/AccountSettingsDetail.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.AccountSettingsDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.AccountSettingsDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.CapacityLimits
+import qualified Amazonka.Prelude as Prelude
+
+-- | OpenSearch Serverless-related information for the current account.
+--
+-- /See:/ 'newAccountSettingsDetail' smart constructor.
+data AccountSettingsDetail = AccountSettingsDetail'
+  { capacityLimits :: Prelude.Maybe CapacityLimits
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountSettingsDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityLimits', 'accountSettingsDetail_capacityLimits' - Undocumented member.
+newAccountSettingsDetail ::
+  AccountSettingsDetail
+newAccountSettingsDetail =
+  AccountSettingsDetail'
+    { capacityLimits =
+        Prelude.Nothing
+    }
+
+-- | Undocumented member.
+accountSettingsDetail_capacityLimits :: Lens.Lens' AccountSettingsDetail (Prelude.Maybe CapacityLimits)
+accountSettingsDetail_capacityLimits = Lens.lens (\AccountSettingsDetail' {capacityLimits} -> capacityLimits) (\s@AccountSettingsDetail' {} a -> s {capacityLimits = a} :: AccountSettingsDetail)
+
+instance Data.FromJSON AccountSettingsDetail where
+  parseJSON =
+    Data.withObject
+      "AccountSettingsDetail"
+      ( \x ->
+          AccountSettingsDetail'
+            Prelude.<$> (x Data..:? "capacityLimits")
+      )
+
+instance Prelude.Hashable AccountSettingsDetail where
+  hashWithSalt _salt AccountSettingsDetail' {..} =
+    _salt `Prelude.hashWithSalt` capacityLimits
+
+instance Prelude.NFData AccountSettingsDetail where
+  rnf AccountSettingsDetail' {..} =
+    Prelude.rnf capacityLimits
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CapacityLimits.hs b/gen/Amazonka/OpenSearchServerless/Types/CapacityLimits.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CapacityLimits.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.CapacityLimits
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CapacityLimits 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 maximum capacity limits for all OpenSearch Serverless collections,
+-- in OpenSearch Compute Units (OCUs). These limits are used to scale your
+-- collections based on the current workload. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-scaling Autoscaling>.
+--
+-- /See:/ 'newCapacityLimits' smart constructor.
+data CapacityLimits = CapacityLimits'
+  { -- | The maximum indexing capacity for collections.
+    maxIndexingCapacityInOCU :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum search capacity for collections.
+    maxSearchCapacityInOCU :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityLimits' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxIndexingCapacityInOCU', 'capacityLimits_maxIndexingCapacityInOCU' - The maximum indexing capacity for collections.
+--
+-- 'maxSearchCapacityInOCU', 'capacityLimits_maxSearchCapacityInOCU' - The maximum search capacity for collections.
+newCapacityLimits ::
+  CapacityLimits
+newCapacityLimits =
+  CapacityLimits'
+    { maxIndexingCapacityInOCU =
+        Prelude.Nothing,
+      maxSearchCapacityInOCU = Prelude.Nothing
+    }
+
+-- | The maximum indexing capacity for collections.
+capacityLimits_maxIndexingCapacityInOCU :: Lens.Lens' CapacityLimits (Prelude.Maybe Prelude.Natural)
+capacityLimits_maxIndexingCapacityInOCU = Lens.lens (\CapacityLimits' {maxIndexingCapacityInOCU} -> maxIndexingCapacityInOCU) (\s@CapacityLimits' {} a -> s {maxIndexingCapacityInOCU = a} :: CapacityLimits)
+
+-- | The maximum search capacity for collections.
+capacityLimits_maxSearchCapacityInOCU :: Lens.Lens' CapacityLimits (Prelude.Maybe Prelude.Natural)
+capacityLimits_maxSearchCapacityInOCU = Lens.lens (\CapacityLimits' {maxSearchCapacityInOCU} -> maxSearchCapacityInOCU) (\s@CapacityLimits' {} a -> s {maxSearchCapacityInOCU = a} :: CapacityLimits)
+
+instance Data.FromJSON CapacityLimits where
+  parseJSON =
+    Data.withObject
+      "CapacityLimits"
+      ( \x ->
+          CapacityLimits'
+            Prelude.<$> (x Data..:? "maxIndexingCapacityInOCU")
+            Prelude.<*> (x Data..:? "maxSearchCapacityInOCU")
+      )
+
+instance Prelude.Hashable CapacityLimits where
+  hashWithSalt _salt CapacityLimits' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxIndexingCapacityInOCU
+      `Prelude.hashWithSalt` maxSearchCapacityInOCU
+
+instance Prelude.NFData CapacityLimits where
+  rnf CapacityLimits' {..} =
+    Prelude.rnf maxIndexingCapacityInOCU
+      `Prelude.seq` Prelude.rnf maxSearchCapacityInOCU
+
+instance Data.ToJSON CapacityLimits where
+  toJSON CapacityLimits' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxIndexingCapacityInOCU" Data..=)
+              Prelude.<$> maxIndexingCapacityInOCU,
+            ("maxSearchCapacityInOCU" Data..=)
+              Prelude.<$> maxSearchCapacityInOCU
+          ]
+      )
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CollectionDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/CollectionDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CollectionDetail.hs
@@ -0,0 +1,201 @@
+{-# 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.OpenSearchServerless.Types.CollectionDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CollectionDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.CollectionStatus
+import Amazonka.OpenSearchServerless.Types.CollectionType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about each OpenSearch Serverless collection, including the
+-- collection endpoint and the OpenSearch Dashboards endpoint.
+--
+-- /See:/ 'newCollectionDetail' smart constructor.
+data CollectionDetail = CollectionDetail'
+  { -- | The Amazon Resource Name (ARN) of the collection.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Collection-specific endpoint used to submit index, search, and data
+    -- upload requests to an OpenSearch Serverless collection.
+    collectionEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The Epoch time when the collection was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | Collection-specific endpoint used to access OpenSearch Dashboards.
+    dashboardEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | A description of the collection.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the collection.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the Amazon Web Services KMS key used to encrypt the
+    -- collection.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the collection was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the collection.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the collection.
+    status :: Prelude.Maybe CollectionStatus,
+    -- | The type of collection.
+    type' :: Prelude.Maybe CollectionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CollectionDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'collectionDetail_arn' - The Amazon Resource Name (ARN) of the collection.
+--
+-- 'collectionEndpoint', 'collectionDetail_collectionEndpoint' - Collection-specific endpoint used to submit index, search, and data
+-- upload requests to an OpenSearch Serverless collection.
+--
+-- 'createdDate', 'collectionDetail_createdDate' - The Epoch time when the collection was created.
+--
+-- 'dashboardEndpoint', 'collectionDetail_dashboardEndpoint' - Collection-specific endpoint used to access OpenSearch Dashboards.
+--
+-- 'description', 'collectionDetail_description' - A description of the collection.
+--
+-- 'id', 'collectionDetail_id' - A unique identifier for the collection.
+--
+-- 'kmsKeyArn', 'collectionDetail_kmsKeyArn' - The ARN of the Amazon Web Services KMS key used to encrypt the
+-- collection.
+--
+-- 'lastModifiedDate', 'collectionDetail_lastModifiedDate' - The date and time when the collection was last modified.
+--
+-- 'name', 'collectionDetail_name' - The name of the collection.
+--
+-- 'status', 'collectionDetail_status' - The current status of the collection.
+--
+-- 'type'', 'collectionDetail_type' - The type of collection.
+newCollectionDetail ::
+  CollectionDetail
+newCollectionDetail =
+  CollectionDetail'
+    { arn = Prelude.Nothing,
+      collectionEndpoint = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      dashboardEndpoint = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      kmsKeyArn = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the collection.
+collectionDetail_arn :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Text)
+collectionDetail_arn = Lens.lens (\CollectionDetail' {arn} -> arn) (\s@CollectionDetail' {} a -> s {arn = a} :: CollectionDetail)
+
+-- | Collection-specific endpoint used to submit index, search, and data
+-- upload requests to an OpenSearch Serverless collection.
+collectionDetail_collectionEndpoint :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Text)
+collectionDetail_collectionEndpoint = Lens.lens (\CollectionDetail' {collectionEndpoint} -> collectionEndpoint) (\s@CollectionDetail' {} a -> s {collectionEndpoint = a} :: CollectionDetail)
+
+-- | The Epoch time when the collection was created.
+collectionDetail_createdDate :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Integer)
+collectionDetail_createdDate = Lens.lens (\CollectionDetail' {createdDate} -> createdDate) (\s@CollectionDetail' {} a -> s {createdDate = a} :: CollectionDetail)
+
+-- | Collection-specific endpoint used to access OpenSearch Dashboards.
+collectionDetail_dashboardEndpoint :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Text)
+collectionDetail_dashboardEndpoint = Lens.lens (\CollectionDetail' {dashboardEndpoint} -> dashboardEndpoint) (\s@CollectionDetail' {} a -> s {dashboardEndpoint = a} :: CollectionDetail)
+
+-- | A description of the collection.
+collectionDetail_description :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Text)
+collectionDetail_description = Lens.lens (\CollectionDetail' {description} -> description) (\s@CollectionDetail' {} a -> s {description = a} :: CollectionDetail)
+
+-- | A unique identifier for the collection.
+collectionDetail_id :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Text)
+collectionDetail_id = Lens.lens (\CollectionDetail' {id} -> id) (\s@CollectionDetail' {} a -> s {id = a} :: CollectionDetail)
+
+-- | The ARN of the Amazon Web Services KMS key used to encrypt the
+-- collection.
+collectionDetail_kmsKeyArn :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Text)
+collectionDetail_kmsKeyArn = Lens.lens (\CollectionDetail' {kmsKeyArn} -> kmsKeyArn) (\s@CollectionDetail' {} a -> s {kmsKeyArn = a} :: CollectionDetail)
+
+-- | The date and time when the collection was last modified.
+collectionDetail_lastModifiedDate :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Integer)
+collectionDetail_lastModifiedDate = Lens.lens (\CollectionDetail' {lastModifiedDate} -> lastModifiedDate) (\s@CollectionDetail' {} a -> s {lastModifiedDate = a} :: CollectionDetail)
+
+-- | The name of the collection.
+collectionDetail_name :: Lens.Lens' CollectionDetail (Prelude.Maybe Prelude.Text)
+collectionDetail_name = Lens.lens (\CollectionDetail' {name} -> name) (\s@CollectionDetail' {} a -> s {name = a} :: CollectionDetail)
+
+-- | The current status of the collection.
+collectionDetail_status :: Lens.Lens' CollectionDetail (Prelude.Maybe CollectionStatus)
+collectionDetail_status = Lens.lens (\CollectionDetail' {status} -> status) (\s@CollectionDetail' {} a -> s {status = a} :: CollectionDetail)
+
+-- | The type of collection.
+collectionDetail_type :: Lens.Lens' CollectionDetail (Prelude.Maybe CollectionType)
+collectionDetail_type = Lens.lens (\CollectionDetail' {type'} -> type') (\s@CollectionDetail' {} a -> s {type' = a} :: CollectionDetail)
+
+instance Data.FromJSON CollectionDetail where
+  parseJSON =
+    Data.withObject
+      "CollectionDetail"
+      ( \x ->
+          CollectionDetail'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "collectionEndpoint")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "dashboardEndpoint")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "kmsKeyArn")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable CollectionDetail where
+  hashWithSalt _salt CollectionDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` collectionEndpoint
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` dashboardEndpoint
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CollectionDetail where
+  rnf CollectionDetail' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf collectionEndpoint
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf dashboardEndpoint
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CollectionErrorDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/CollectionErrorDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CollectionErrorDetail.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.OpenSearchServerless.Types.CollectionErrorDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CollectionErrorDetail 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
+
+-- | Error information for an OpenSearch Serverless request.
+--
+-- /See:/ 'newCollectionErrorDetail' smart constructor.
+data CollectionErrorDetail = CollectionErrorDetail'
+  { -- | The error code for the request. For example, @NOT_FOUND@.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | A description of the error. For example,
+    -- @The specified Collection is not found.@
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | If the request contains collection IDs, the response includes the IDs
+    -- provided in the request.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | If the request contains collection names, the response includes the
+    -- names provided in the request.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CollectionErrorDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'collectionErrorDetail_errorCode' - The error code for the request. For example, @NOT_FOUND@.
+--
+-- 'errorMessage', 'collectionErrorDetail_errorMessage' - A description of the error. For example,
+-- @The specified Collection is not found.@
+--
+-- 'id', 'collectionErrorDetail_id' - If the request contains collection IDs, the response includes the IDs
+-- provided in the request.
+--
+-- 'name', 'collectionErrorDetail_name' - If the request contains collection names, the response includes the
+-- names provided in the request.
+newCollectionErrorDetail ::
+  CollectionErrorDetail
+newCollectionErrorDetail =
+  CollectionErrorDetail'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The error code for the request. For example, @NOT_FOUND@.
+collectionErrorDetail_errorCode :: Lens.Lens' CollectionErrorDetail (Prelude.Maybe Prelude.Text)
+collectionErrorDetail_errorCode = Lens.lens (\CollectionErrorDetail' {errorCode} -> errorCode) (\s@CollectionErrorDetail' {} a -> s {errorCode = a} :: CollectionErrorDetail)
+
+-- | A description of the error. For example,
+-- @The specified Collection is not found.@
+collectionErrorDetail_errorMessage :: Lens.Lens' CollectionErrorDetail (Prelude.Maybe Prelude.Text)
+collectionErrorDetail_errorMessage = Lens.lens (\CollectionErrorDetail' {errorMessage} -> errorMessage) (\s@CollectionErrorDetail' {} a -> s {errorMessage = a} :: CollectionErrorDetail)
+
+-- | If the request contains collection IDs, the response includes the IDs
+-- provided in the request.
+collectionErrorDetail_id :: Lens.Lens' CollectionErrorDetail (Prelude.Maybe Prelude.Text)
+collectionErrorDetail_id = Lens.lens (\CollectionErrorDetail' {id} -> id) (\s@CollectionErrorDetail' {} a -> s {id = a} :: CollectionErrorDetail)
+
+-- | If the request contains collection names, the response includes the
+-- names provided in the request.
+collectionErrorDetail_name :: Lens.Lens' CollectionErrorDetail (Prelude.Maybe Prelude.Text)
+collectionErrorDetail_name = Lens.lens (\CollectionErrorDetail' {name} -> name) (\s@CollectionErrorDetail' {} a -> s {name = a} :: CollectionErrorDetail)
+
+instance Data.FromJSON CollectionErrorDetail where
+  parseJSON =
+    Data.withObject
+      "CollectionErrorDetail"
+      ( \x ->
+          CollectionErrorDetail'
+            Prelude.<$> (x Data..:? "errorCode")
+            Prelude.<*> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+      )
+
+instance Prelude.Hashable CollectionErrorDetail where
+  hashWithSalt _salt CollectionErrorDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CollectionErrorDetail where
+  rnf CollectionErrorDetail' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CollectionFilters.hs b/gen/Amazonka/OpenSearchServerless/Types/CollectionFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CollectionFilters.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.OpenSearchServerless.Types.CollectionFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CollectionFilters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.CollectionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | List of filter keys that you can use for LIST, UPDATE, and DELETE
+-- requests to OpenSearch Serverless collections.
+--
+-- /See:/ 'newCollectionFilters' smart constructor.
+data CollectionFilters = CollectionFilters'
+  { -- | The name of the collection.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the collection.
+    status :: Prelude.Maybe CollectionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CollectionFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'collectionFilters_name' - The name of the collection.
+--
+-- 'status', 'collectionFilters_status' - The current status of the collection.
+newCollectionFilters ::
+  CollectionFilters
+newCollectionFilters =
+  CollectionFilters'
+    { name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The name of the collection.
+collectionFilters_name :: Lens.Lens' CollectionFilters (Prelude.Maybe Prelude.Text)
+collectionFilters_name = Lens.lens (\CollectionFilters' {name} -> name) (\s@CollectionFilters' {} a -> s {name = a} :: CollectionFilters)
+
+-- | The current status of the collection.
+collectionFilters_status :: Lens.Lens' CollectionFilters (Prelude.Maybe CollectionStatus)
+collectionFilters_status = Lens.lens (\CollectionFilters' {status} -> status) (\s@CollectionFilters' {} a -> s {status = a} :: CollectionFilters)
+
+instance Prelude.Hashable CollectionFilters where
+  hashWithSalt _salt CollectionFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData CollectionFilters where
+  rnf CollectionFilters' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf status
+
+instance Data.ToJSON CollectionFilters where
+  toJSON CollectionFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("status" Data..=) Prelude.<$> status
+          ]
+      )
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CollectionStatus.hs b/gen/Amazonka/OpenSearchServerless/Types/CollectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CollectionStatus.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.CollectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CollectionStatus
+  ( CollectionStatus
+      ( ..,
+        CollectionStatus_ACTIVE,
+        CollectionStatus_CREATING,
+        CollectionStatus_DELETING,
+        CollectionStatus_FAILED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CollectionStatus = CollectionStatus'
+  { fromCollectionStatus ::
+      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 CollectionStatus_ACTIVE :: CollectionStatus
+pattern CollectionStatus_ACTIVE = CollectionStatus' "ACTIVE"
+
+pattern CollectionStatus_CREATING :: CollectionStatus
+pattern CollectionStatus_CREATING = CollectionStatus' "CREATING"
+
+pattern CollectionStatus_DELETING :: CollectionStatus
+pattern CollectionStatus_DELETING = CollectionStatus' "DELETING"
+
+pattern CollectionStatus_FAILED :: CollectionStatus
+pattern CollectionStatus_FAILED = CollectionStatus' "FAILED"
+
+{-# COMPLETE
+  CollectionStatus_ACTIVE,
+  CollectionStatus_CREATING,
+  CollectionStatus_DELETING,
+  CollectionStatus_FAILED,
+  CollectionStatus'
+  #-}
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CollectionSummary.hs b/gen/Amazonka/OpenSearchServerless/Types/CollectionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CollectionSummary.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.CollectionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CollectionSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.CollectionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about each OpenSearch Serverless collection.
+--
+-- /See:/ 'newCollectionSummary' smart constructor.
+data CollectionSummary = CollectionSummary'
+  { -- | The Amazon Resource Name (ARN) of the collection.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the collection.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the collection.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the collection.
+    status :: Prelude.Maybe CollectionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CollectionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'collectionSummary_arn' - The Amazon Resource Name (ARN) of the collection.
+--
+-- 'id', 'collectionSummary_id' - The unique identifier of the collection.
+--
+-- 'name', 'collectionSummary_name' - The name of the collection.
+--
+-- 'status', 'collectionSummary_status' - The current status of the collection.
+newCollectionSummary ::
+  CollectionSummary
+newCollectionSummary =
+  CollectionSummary'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the collection.
+collectionSummary_arn :: Lens.Lens' CollectionSummary (Prelude.Maybe Prelude.Text)
+collectionSummary_arn = Lens.lens (\CollectionSummary' {arn} -> arn) (\s@CollectionSummary' {} a -> s {arn = a} :: CollectionSummary)
+
+-- | The unique identifier of the collection.
+collectionSummary_id :: Lens.Lens' CollectionSummary (Prelude.Maybe Prelude.Text)
+collectionSummary_id = Lens.lens (\CollectionSummary' {id} -> id) (\s@CollectionSummary' {} a -> s {id = a} :: CollectionSummary)
+
+-- | The name of the collection.
+collectionSummary_name :: Lens.Lens' CollectionSummary (Prelude.Maybe Prelude.Text)
+collectionSummary_name = Lens.lens (\CollectionSummary' {name} -> name) (\s@CollectionSummary' {} a -> s {name = a} :: CollectionSummary)
+
+-- | The current status of the collection.
+collectionSummary_status :: Lens.Lens' CollectionSummary (Prelude.Maybe CollectionStatus)
+collectionSummary_status = Lens.lens (\CollectionSummary' {status} -> status) (\s@CollectionSummary' {} a -> s {status = a} :: CollectionSummary)
+
+instance Data.FromJSON CollectionSummary where
+  parseJSON =
+    Data.withObject
+      "CollectionSummary"
+      ( \x ->
+          CollectionSummary'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable CollectionSummary where
+  hashWithSalt _salt CollectionSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData CollectionSummary where
+  rnf CollectionSummary' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CollectionType.hs b/gen/Amazonka/OpenSearchServerless/Types/CollectionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CollectionType.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.OpenSearchServerless.Types.CollectionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CollectionType
+  ( CollectionType
+      ( ..,
+        CollectionType_SEARCH,
+        CollectionType_TIMESERIES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CollectionType = CollectionType'
+  { fromCollectionType ::
+      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 CollectionType_SEARCH :: CollectionType
+pattern CollectionType_SEARCH = CollectionType' "SEARCH"
+
+pattern CollectionType_TIMESERIES :: CollectionType
+pattern CollectionType_TIMESERIES = CollectionType' "TIMESERIES"
+
+{-# COMPLETE
+  CollectionType_SEARCH,
+  CollectionType_TIMESERIES,
+  CollectionType'
+  #-}
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CreateCollectionDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/CreateCollectionDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CreateCollectionDetail.hs
@@ -0,0 +1,173 @@
+{-# 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.OpenSearchServerless.Types.CreateCollectionDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CreateCollectionDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.CollectionStatus
+import Amazonka.OpenSearchServerless.Types.CollectionType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the created OpenSearch Serverless collection.
+--
+-- /See:/ 'newCreateCollectionDetail' smart constructor.
+data CreateCollectionDetail = CreateCollectionDetail'
+  { -- | The Amazon Resource Name (ARN) of the collection.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The Epoch time when the collection was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | A description of the collection.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the collection.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the KMS key with which to encrypt the
+    -- collection.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the collection was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the collection.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the collection.
+    status :: Prelude.Maybe CollectionStatus,
+    -- | The type of collection.
+    type' :: Prelude.Maybe CollectionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCollectionDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createCollectionDetail_arn' - The Amazon Resource Name (ARN) of the collection.
+--
+-- 'createdDate', 'createCollectionDetail_createdDate' - The Epoch time when the collection was created.
+--
+-- 'description', 'createCollectionDetail_description' - A description of the collection.
+--
+-- 'id', 'createCollectionDetail_id' - The unique identifier of the collection.
+--
+-- 'kmsKeyArn', 'createCollectionDetail_kmsKeyArn' - The Amazon Resource Name (ARN) of the KMS key with which to encrypt the
+-- collection.
+--
+-- 'lastModifiedDate', 'createCollectionDetail_lastModifiedDate' - The date and time when the collection was last modified.
+--
+-- 'name', 'createCollectionDetail_name' - The name of the collection.
+--
+-- 'status', 'createCollectionDetail_status' - The current status of the collection.
+--
+-- 'type'', 'createCollectionDetail_type' - The type of collection.
+newCreateCollectionDetail ::
+  CreateCollectionDetail
+newCreateCollectionDetail =
+  CreateCollectionDetail'
+    { arn = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      kmsKeyArn = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the collection.
+createCollectionDetail_arn :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe Prelude.Text)
+createCollectionDetail_arn = Lens.lens (\CreateCollectionDetail' {arn} -> arn) (\s@CreateCollectionDetail' {} a -> s {arn = a} :: CreateCollectionDetail)
+
+-- | The Epoch time when the collection was created.
+createCollectionDetail_createdDate :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe Prelude.Integer)
+createCollectionDetail_createdDate = Lens.lens (\CreateCollectionDetail' {createdDate} -> createdDate) (\s@CreateCollectionDetail' {} a -> s {createdDate = a} :: CreateCollectionDetail)
+
+-- | A description of the collection.
+createCollectionDetail_description :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe Prelude.Text)
+createCollectionDetail_description = Lens.lens (\CreateCollectionDetail' {description} -> description) (\s@CreateCollectionDetail' {} a -> s {description = a} :: CreateCollectionDetail)
+
+-- | The unique identifier of the collection.
+createCollectionDetail_id :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe Prelude.Text)
+createCollectionDetail_id = Lens.lens (\CreateCollectionDetail' {id} -> id) (\s@CreateCollectionDetail' {} a -> s {id = a} :: CreateCollectionDetail)
+
+-- | The Amazon Resource Name (ARN) of the KMS key with which to encrypt the
+-- collection.
+createCollectionDetail_kmsKeyArn :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe Prelude.Text)
+createCollectionDetail_kmsKeyArn = Lens.lens (\CreateCollectionDetail' {kmsKeyArn} -> kmsKeyArn) (\s@CreateCollectionDetail' {} a -> s {kmsKeyArn = a} :: CreateCollectionDetail)
+
+-- | The date and time when the collection was last modified.
+createCollectionDetail_lastModifiedDate :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe Prelude.Integer)
+createCollectionDetail_lastModifiedDate = Lens.lens (\CreateCollectionDetail' {lastModifiedDate} -> lastModifiedDate) (\s@CreateCollectionDetail' {} a -> s {lastModifiedDate = a} :: CreateCollectionDetail)
+
+-- | The name of the collection.
+createCollectionDetail_name :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe Prelude.Text)
+createCollectionDetail_name = Lens.lens (\CreateCollectionDetail' {name} -> name) (\s@CreateCollectionDetail' {} a -> s {name = a} :: CreateCollectionDetail)
+
+-- | The current status of the collection.
+createCollectionDetail_status :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe CollectionStatus)
+createCollectionDetail_status = Lens.lens (\CreateCollectionDetail' {status} -> status) (\s@CreateCollectionDetail' {} a -> s {status = a} :: CreateCollectionDetail)
+
+-- | The type of collection.
+createCollectionDetail_type :: Lens.Lens' CreateCollectionDetail (Prelude.Maybe CollectionType)
+createCollectionDetail_type = Lens.lens (\CreateCollectionDetail' {type'} -> type') (\s@CreateCollectionDetail' {} a -> s {type' = a} :: CreateCollectionDetail)
+
+instance Data.FromJSON CreateCollectionDetail where
+  parseJSON =
+    Data.withObject
+      "CreateCollectionDetail"
+      ( \x ->
+          CreateCollectionDetail'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "kmsKeyArn")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable CreateCollectionDetail where
+  hashWithSalt _salt CreateCollectionDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateCollectionDetail where
+  rnf CreateCollectionDetail' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/CreateVpcEndpointDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/CreateVpcEndpointDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/CreateVpcEndpointDetail.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.CreateVpcEndpointDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.CreateVpcEndpointDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Creation details for an OpenSearch Serverless-managed interface
+-- endpoint. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html Access Amazon OpenSearch Serverless using an interface endpoint>.
+--
+-- /See:/ 'newCreateVpcEndpointDetail' smart constructor.
+data CreateVpcEndpointDetail = CreateVpcEndpointDetail'
+  { -- | The unique identifier of the endpoint.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the endpoint.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status in the endpoint creation process.
+    status :: Prelude.Maybe VpcEndpointStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpointDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'createVpcEndpointDetail_id' - The unique identifier of the endpoint.
+--
+-- 'name', 'createVpcEndpointDetail_name' - The name of the endpoint.
+--
+-- 'status', 'createVpcEndpointDetail_status' - The current status in the endpoint creation process.
+newCreateVpcEndpointDetail ::
+  CreateVpcEndpointDetail
+newCreateVpcEndpointDetail =
+  CreateVpcEndpointDetail'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The unique identifier of the endpoint.
+createVpcEndpointDetail_id :: Lens.Lens' CreateVpcEndpointDetail (Prelude.Maybe Prelude.Text)
+createVpcEndpointDetail_id = Lens.lens (\CreateVpcEndpointDetail' {id} -> id) (\s@CreateVpcEndpointDetail' {} a -> s {id = a} :: CreateVpcEndpointDetail)
+
+-- | The name of the endpoint.
+createVpcEndpointDetail_name :: Lens.Lens' CreateVpcEndpointDetail (Prelude.Maybe Prelude.Text)
+createVpcEndpointDetail_name = Lens.lens (\CreateVpcEndpointDetail' {name} -> name) (\s@CreateVpcEndpointDetail' {} a -> s {name = a} :: CreateVpcEndpointDetail)
+
+-- | The current status in the endpoint creation process.
+createVpcEndpointDetail_status :: Lens.Lens' CreateVpcEndpointDetail (Prelude.Maybe VpcEndpointStatus)
+createVpcEndpointDetail_status = Lens.lens (\CreateVpcEndpointDetail' {status} -> status) (\s@CreateVpcEndpointDetail' {} a -> s {status = a} :: CreateVpcEndpointDetail)
+
+instance Data.FromJSON CreateVpcEndpointDetail where
+  parseJSON =
+    Data.withObject
+      "CreateVpcEndpointDetail"
+      ( \x ->
+          CreateVpcEndpointDetail'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable CreateVpcEndpointDetail where
+  hashWithSalt _salt CreateVpcEndpointDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData CreateVpcEndpointDetail where
+  rnf CreateVpcEndpointDetail' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/OpenSearchServerless/Types/DeleteCollectionDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/DeleteCollectionDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/DeleteCollectionDetail.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.DeleteCollectionDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.DeleteCollectionDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.CollectionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a deleted OpenSearch Serverless collection.
+--
+-- /See:/ 'newDeleteCollectionDetail' smart constructor.
+data DeleteCollectionDetail = DeleteCollectionDetail'
+  { -- | The unique identifier of the collection.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the collection.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the collection.
+    status :: Prelude.Maybe CollectionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCollectionDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteCollectionDetail_id' - The unique identifier of the collection.
+--
+-- 'name', 'deleteCollectionDetail_name' - The name of the collection.
+--
+-- 'status', 'deleteCollectionDetail_status' - The current status of the collection.
+newDeleteCollectionDetail ::
+  DeleteCollectionDetail
+newDeleteCollectionDetail =
+  DeleteCollectionDetail'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The unique identifier of the collection.
+deleteCollectionDetail_id :: Lens.Lens' DeleteCollectionDetail (Prelude.Maybe Prelude.Text)
+deleteCollectionDetail_id = Lens.lens (\DeleteCollectionDetail' {id} -> id) (\s@DeleteCollectionDetail' {} a -> s {id = a} :: DeleteCollectionDetail)
+
+-- | The name of the collection.
+deleteCollectionDetail_name :: Lens.Lens' DeleteCollectionDetail (Prelude.Maybe Prelude.Text)
+deleteCollectionDetail_name = Lens.lens (\DeleteCollectionDetail' {name} -> name) (\s@DeleteCollectionDetail' {} a -> s {name = a} :: DeleteCollectionDetail)
+
+-- | The current status of the collection.
+deleteCollectionDetail_status :: Lens.Lens' DeleteCollectionDetail (Prelude.Maybe CollectionStatus)
+deleteCollectionDetail_status = Lens.lens (\DeleteCollectionDetail' {status} -> status) (\s@DeleteCollectionDetail' {} a -> s {status = a} :: DeleteCollectionDetail)
+
+instance Data.FromJSON DeleteCollectionDetail where
+  parseJSON =
+    Data.withObject
+      "DeleteCollectionDetail"
+      ( \x ->
+          DeleteCollectionDetail'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable DeleteCollectionDetail where
+  hashWithSalt _salt DeleteCollectionDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DeleteCollectionDetail where
+  rnf DeleteCollectionDetail' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/OpenSearchServerless/Types/DeleteVpcEndpointDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/DeleteVpcEndpointDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/DeleteVpcEndpointDetail.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.DeleteVpcEndpointDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.DeleteVpcEndpointDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Deletion details for an OpenSearch Serverless-managed interface
+-- endpoint.
+--
+-- /See:/ 'newDeleteVpcEndpointDetail' smart constructor.
+data DeleteVpcEndpointDetail = DeleteVpcEndpointDetail'
+  { -- | The unique identifier of the endpoint.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the endpoint.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the endpoint deletion process.
+    status :: Prelude.Maybe VpcEndpointStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpointDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'deleteVpcEndpointDetail_id' - The unique identifier of the endpoint.
+--
+-- 'name', 'deleteVpcEndpointDetail_name' - The name of the endpoint.
+--
+-- 'status', 'deleteVpcEndpointDetail_status' - The current status of the endpoint deletion process.
+newDeleteVpcEndpointDetail ::
+  DeleteVpcEndpointDetail
+newDeleteVpcEndpointDetail =
+  DeleteVpcEndpointDetail'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The unique identifier of the endpoint.
+deleteVpcEndpointDetail_id :: Lens.Lens' DeleteVpcEndpointDetail (Prelude.Maybe Prelude.Text)
+deleteVpcEndpointDetail_id = Lens.lens (\DeleteVpcEndpointDetail' {id} -> id) (\s@DeleteVpcEndpointDetail' {} a -> s {id = a} :: DeleteVpcEndpointDetail)
+
+-- | The name of the endpoint.
+deleteVpcEndpointDetail_name :: Lens.Lens' DeleteVpcEndpointDetail (Prelude.Maybe Prelude.Text)
+deleteVpcEndpointDetail_name = Lens.lens (\DeleteVpcEndpointDetail' {name} -> name) (\s@DeleteVpcEndpointDetail' {} a -> s {name = a} :: DeleteVpcEndpointDetail)
+
+-- | The current status of the endpoint deletion process.
+deleteVpcEndpointDetail_status :: Lens.Lens' DeleteVpcEndpointDetail (Prelude.Maybe VpcEndpointStatus)
+deleteVpcEndpointDetail_status = Lens.lens (\DeleteVpcEndpointDetail' {status} -> status) (\s@DeleteVpcEndpointDetail' {} a -> s {status = a} :: DeleteVpcEndpointDetail)
+
+instance Data.FromJSON DeleteVpcEndpointDetail where
+  parseJSON =
+    Data.withObject
+      "DeleteVpcEndpointDetail"
+      ( \x ->
+          DeleteVpcEndpointDetail'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable DeleteVpcEndpointDetail where
+  hashWithSalt _salt DeleteVpcEndpointDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DeleteVpcEndpointDetail where
+  rnf DeleteVpcEndpointDetail' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/OpenSearchServerless/Types/Document.hs b/gen/Amazonka/OpenSearchServerless/Types/Document.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/Document.hs
@@ -0,0 +1,52 @@
+{-# 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.OpenSearchServerless.Types.Document
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.Document 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
+
+-- | /See:/ 'newDocument' smart constructor.
+data Document = Document'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Document' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDocument ::
+  Document
+newDocument = Document'
+
+instance Data.FromJSON Document where
+  parseJSON =
+    Data.withObject
+      "Document"
+      (\x -> Prelude.pure Document')
+
+instance Prelude.Hashable Document where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData Document where
+  rnf _ = ()
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SamlConfigOptions.hs b/gen/Amazonka/OpenSearchServerless/Types/SamlConfigOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SamlConfigOptions.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.OpenSearchServerless.Types.SamlConfigOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SamlConfigOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes SAML options for an OpenSearch Serverless security
+-- configuration in the form of a key-value map.
+--
+-- /See:/ 'newSamlConfigOptions' smart constructor.
+data SamlConfigOptions = SamlConfigOptions'
+  { -- | The group attribute for this SAML integration.
+    groupAttribute :: Prelude.Maybe Prelude.Text,
+    -- | The session timeout, in minutes. Minimum is 15 minutes and maximum is
+    -- 1440 minutes (24 hours or 1 day). Default is 60 minutes.
+    sessionTimeout :: Prelude.Maybe Prelude.Natural,
+    -- | A user attribute for this SAML integration.
+    userAttribute :: Prelude.Maybe Prelude.Text,
+    -- | The XML IdP metadata file generated from your identity provider.
+    metadata :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SamlConfigOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupAttribute', 'samlConfigOptions_groupAttribute' - The group attribute for this SAML integration.
+--
+-- 'sessionTimeout', 'samlConfigOptions_sessionTimeout' - The session timeout, in minutes. Minimum is 15 minutes and maximum is
+-- 1440 minutes (24 hours or 1 day). Default is 60 minutes.
+--
+-- 'userAttribute', 'samlConfigOptions_userAttribute' - A user attribute for this SAML integration.
+--
+-- 'metadata', 'samlConfigOptions_metadata' - The XML IdP metadata file generated from your identity provider.
+newSamlConfigOptions ::
+  -- | 'metadata'
+  Prelude.Text ->
+  SamlConfigOptions
+newSamlConfigOptions pMetadata_ =
+  SamlConfigOptions'
+    { groupAttribute =
+        Prelude.Nothing,
+      sessionTimeout = Prelude.Nothing,
+      userAttribute = Prelude.Nothing,
+      metadata = pMetadata_
+    }
+
+-- | The group attribute for this SAML integration.
+samlConfigOptions_groupAttribute :: Lens.Lens' SamlConfigOptions (Prelude.Maybe Prelude.Text)
+samlConfigOptions_groupAttribute = Lens.lens (\SamlConfigOptions' {groupAttribute} -> groupAttribute) (\s@SamlConfigOptions' {} a -> s {groupAttribute = a} :: SamlConfigOptions)
+
+-- | The session timeout, in minutes. Minimum is 15 minutes and maximum is
+-- 1440 minutes (24 hours or 1 day). Default is 60 minutes.
+samlConfigOptions_sessionTimeout :: Lens.Lens' SamlConfigOptions (Prelude.Maybe Prelude.Natural)
+samlConfigOptions_sessionTimeout = Lens.lens (\SamlConfigOptions' {sessionTimeout} -> sessionTimeout) (\s@SamlConfigOptions' {} a -> s {sessionTimeout = a} :: SamlConfigOptions)
+
+-- | A user attribute for this SAML integration.
+samlConfigOptions_userAttribute :: Lens.Lens' SamlConfigOptions (Prelude.Maybe Prelude.Text)
+samlConfigOptions_userAttribute = Lens.lens (\SamlConfigOptions' {userAttribute} -> userAttribute) (\s@SamlConfigOptions' {} a -> s {userAttribute = a} :: SamlConfigOptions)
+
+-- | The XML IdP metadata file generated from your identity provider.
+samlConfigOptions_metadata :: Lens.Lens' SamlConfigOptions Prelude.Text
+samlConfigOptions_metadata = Lens.lens (\SamlConfigOptions' {metadata} -> metadata) (\s@SamlConfigOptions' {} a -> s {metadata = a} :: SamlConfigOptions)
+
+instance Data.FromJSON SamlConfigOptions where
+  parseJSON =
+    Data.withObject
+      "SamlConfigOptions"
+      ( \x ->
+          SamlConfigOptions'
+            Prelude.<$> (x Data..:? "groupAttribute")
+            Prelude.<*> (x Data..:? "sessionTimeout")
+            Prelude.<*> (x Data..:? "userAttribute")
+            Prelude.<*> (x Data..: "metadata")
+      )
+
+instance Prelude.Hashable SamlConfigOptions where
+  hashWithSalt _salt SamlConfigOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupAttribute
+      `Prelude.hashWithSalt` sessionTimeout
+      `Prelude.hashWithSalt` userAttribute
+      `Prelude.hashWithSalt` metadata
+
+instance Prelude.NFData SamlConfigOptions where
+  rnf SamlConfigOptions' {..} =
+    Prelude.rnf groupAttribute
+      `Prelude.seq` Prelude.rnf sessionTimeout
+      `Prelude.seq` Prelude.rnf userAttribute
+      `Prelude.seq` Prelude.rnf metadata
+
+instance Data.ToJSON SamlConfigOptions where
+  toJSON SamlConfigOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("groupAttribute" Data..=)
+              Prelude.<$> groupAttribute,
+            ("sessionTimeout" Data..=)
+              Prelude.<$> sessionTimeout,
+            ("userAttribute" Data..=) Prelude.<$> userAttribute,
+            Prelude.Just ("metadata" Data..= metadata)
+          ]
+      )
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigDetail.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.SecurityConfigDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SecurityConfigDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.SamlConfigOptions
+import Amazonka.OpenSearchServerless.Types.SecurityConfigType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about a security configuration for OpenSearch Serverless.
+--
+-- /See:/ 'newSecurityConfigDetail' smart constructor.
+data SecurityConfigDetail = SecurityConfigDetail'
+  { -- | The version of the security configuration.
+    configVersion :: Prelude.Maybe Prelude.Text,
+    -- | The date the configuration was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | The description of the security configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the security configuration.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the configuration was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | SAML options for the security configuration in the form of a key-value
+    -- map.
+    samlOptions :: Prelude.Maybe SamlConfigOptions,
+    -- | The type of security configuration.
+    type' :: Prelude.Maybe SecurityConfigType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityConfigDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configVersion', 'securityConfigDetail_configVersion' - The version of the security configuration.
+--
+-- 'createdDate', 'securityConfigDetail_createdDate' - The date the configuration was created.
+--
+-- 'description', 'securityConfigDetail_description' - The description of the security configuration.
+--
+-- 'id', 'securityConfigDetail_id' - The unique identifier of the security configuration.
+--
+-- 'lastModifiedDate', 'securityConfigDetail_lastModifiedDate' - The timestamp of when the configuration was last modified.
+--
+-- 'samlOptions', 'securityConfigDetail_samlOptions' - SAML options for the security configuration in the form of a key-value
+-- map.
+--
+-- 'type'', 'securityConfigDetail_type' - The type of security configuration.
+newSecurityConfigDetail ::
+  SecurityConfigDetail
+newSecurityConfigDetail =
+  SecurityConfigDetail'
+    { configVersion =
+        Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      samlOptions = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The version of the security configuration.
+securityConfigDetail_configVersion :: Lens.Lens' SecurityConfigDetail (Prelude.Maybe Prelude.Text)
+securityConfigDetail_configVersion = Lens.lens (\SecurityConfigDetail' {configVersion} -> configVersion) (\s@SecurityConfigDetail' {} a -> s {configVersion = a} :: SecurityConfigDetail)
+
+-- | The date the configuration was created.
+securityConfigDetail_createdDate :: Lens.Lens' SecurityConfigDetail (Prelude.Maybe Prelude.Integer)
+securityConfigDetail_createdDate = Lens.lens (\SecurityConfigDetail' {createdDate} -> createdDate) (\s@SecurityConfigDetail' {} a -> s {createdDate = a} :: SecurityConfigDetail)
+
+-- | The description of the security configuration.
+securityConfigDetail_description :: Lens.Lens' SecurityConfigDetail (Prelude.Maybe Prelude.Text)
+securityConfigDetail_description = Lens.lens (\SecurityConfigDetail' {description} -> description) (\s@SecurityConfigDetail' {} a -> s {description = a} :: SecurityConfigDetail)
+
+-- | The unique identifier of the security configuration.
+securityConfigDetail_id :: Lens.Lens' SecurityConfigDetail (Prelude.Maybe Prelude.Text)
+securityConfigDetail_id = Lens.lens (\SecurityConfigDetail' {id} -> id) (\s@SecurityConfigDetail' {} a -> s {id = a} :: SecurityConfigDetail)
+
+-- | The timestamp of when the configuration was last modified.
+securityConfigDetail_lastModifiedDate :: Lens.Lens' SecurityConfigDetail (Prelude.Maybe Prelude.Integer)
+securityConfigDetail_lastModifiedDate = Lens.lens (\SecurityConfigDetail' {lastModifiedDate} -> lastModifiedDate) (\s@SecurityConfigDetail' {} a -> s {lastModifiedDate = a} :: SecurityConfigDetail)
+
+-- | SAML options for the security configuration in the form of a key-value
+-- map.
+securityConfigDetail_samlOptions :: Lens.Lens' SecurityConfigDetail (Prelude.Maybe SamlConfigOptions)
+securityConfigDetail_samlOptions = Lens.lens (\SecurityConfigDetail' {samlOptions} -> samlOptions) (\s@SecurityConfigDetail' {} a -> s {samlOptions = a} :: SecurityConfigDetail)
+
+-- | The type of security configuration.
+securityConfigDetail_type :: Lens.Lens' SecurityConfigDetail (Prelude.Maybe SecurityConfigType)
+securityConfigDetail_type = Lens.lens (\SecurityConfigDetail' {type'} -> type') (\s@SecurityConfigDetail' {} a -> s {type' = a} :: SecurityConfigDetail)
+
+instance Data.FromJSON SecurityConfigDetail where
+  parseJSON =
+    Data.withObject
+      "SecurityConfigDetail"
+      ( \x ->
+          SecurityConfigDetail'
+            Prelude.<$> (x Data..:? "configVersion")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "samlOptions")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable SecurityConfigDetail where
+  hashWithSalt _salt SecurityConfigDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` configVersion
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` samlOptions
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SecurityConfigDetail where
+  rnf SecurityConfigDetail' {..} =
+    Prelude.rnf configVersion
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf samlOptions
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigStats.hs b/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigStats.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigStats.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.SecurityConfigStats
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SecurityConfigStats 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
+
+-- | Statistics for an OpenSearch Serverless security configuration.
+--
+-- /See:/ 'newSecurityConfigStats' smart constructor.
+data SecurityConfigStats = SecurityConfigStats'
+  { -- | The number of security configurations in the current account.
+    samlConfigCount :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityConfigStats' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'samlConfigCount', 'securityConfigStats_samlConfigCount' - The number of security configurations in the current account.
+newSecurityConfigStats ::
+  SecurityConfigStats
+newSecurityConfigStats =
+  SecurityConfigStats'
+    { samlConfigCount =
+        Prelude.Nothing
+    }
+
+-- | The number of security configurations in the current account.
+securityConfigStats_samlConfigCount :: Lens.Lens' SecurityConfigStats (Prelude.Maybe Prelude.Integer)
+securityConfigStats_samlConfigCount = Lens.lens (\SecurityConfigStats' {samlConfigCount} -> samlConfigCount) (\s@SecurityConfigStats' {} a -> s {samlConfigCount = a} :: SecurityConfigStats)
+
+instance Data.FromJSON SecurityConfigStats where
+  parseJSON =
+    Data.withObject
+      "SecurityConfigStats"
+      ( \x ->
+          SecurityConfigStats'
+            Prelude.<$> (x Data..:? "SamlConfigCount")
+      )
+
+instance Prelude.Hashable SecurityConfigStats where
+  hashWithSalt _salt SecurityConfigStats' {..} =
+    _salt `Prelude.hashWithSalt` samlConfigCount
+
+instance Prelude.NFData SecurityConfigStats where
+  rnf SecurityConfigStats' {..} =
+    Prelude.rnf samlConfigCount
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigSummary.hs b/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigSummary.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.OpenSearchServerless.Types.SecurityConfigSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SecurityConfigSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.SecurityConfigType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of a security configuration for OpenSearch Serverless.
+--
+-- /See:/ 'newSecurityConfigSummary' smart constructor.
+data SecurityConfigSummary = SecurityConfigSummary'
+  { -- | The version of the security configuration.
+    configVersion :: Prelude.Maybe Prelude.Text,
+    -- | The Epoch time when the security configuration was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | The description of the security configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the security configuration.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the configuration was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The type of security configuration.
+    type' :: Prelude.Maybe SecurityConfigType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityConfigSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configVersion', 'securityConfigSummary_configVersion' - The version of the security configuration.
+--
+-- 'createdDate', 'securityConfigSummary_createdDate' - The Epoch time when the security configuration was created.
+--
+-- 'description', 'securityConfigSummary_description' - The description of the security configuration.
+--
+-- 'id', 'securityConfigSummary_id' - The unique identifier of the security configuration.
+--
+-- 'lastModifiedDate', 'securityConfigSummary_lastModifiedDate' - The timestamp of when the configuration was last modified.
+--
+-- 'type'', 'securityConfigSummary_type' - The type of security configuration.
+newSecurityConfigSummary ::
+  SecurityConfigSummary
+newSecurityConfigSummary =
+  SecurityConfigSummary'
+    { configVersion =
+        Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The version of the security configuration.
+securityConfigSummary_configVersion :: Lens.Lens' SecurityConfigSummary (Prelude.Maybe Prelude.Text)
+securityConfigSummary_configVersion = Lens.lens (\SecurityConfigSummary' {configVersion} -> configVersion) (\s@SecurityConfigSummary' {} a -> s {configVersion = a} :: SecurityConfigSummary)
+
+-- | The Epoch time when the security configuration was created.
+securityConfigSummary_createdDate :: Lens.Lens' SecurityConfigSummary (Prelude.Maybe Prelude.Integer)
+securityConfigSummary_createdDate = Lens.lens (\SecurityConfigSummary' {createdDate} -> createdDate) (\s@SecurityConfigSummary' {} a -> s {createdDate = a} :: SecurityConfigSummary)
+
+-- | The description of the security configuration.
+securityConfigSummary_description :: Lens.Lens' SecurityConfigSummary (Prelude.Maybe Prelude.Text)
+securityConfigSummary_description = Lens.lens (\SecurityConfigSummary' {description} -> description) (\s@SecurityConfigSummary' {} a -> s {description = a} :: SecurityConfigSummary)
+
+-- | The unique identifier of the security configuration.
+securityConfigSummary_id :: Lens.Lens' SecurityConfigSummary (Prelude.Maybe Prelude.Text)
+securityConfigSummary_id = Lens.lens (\SecurityConfigSummary' {id} -> id) (\s@SecurityConfigSummary' {} a -> s {id = a} :: SecurityConfigSummary)
+
+-- | The timestamp of when the configuration was last modified.
+securityConfigSummary_lastModifiedDate :: Lens.Lens' SecurityConfigSummary (Prelude.Maybe Prelude.Integer)
+securityConfigSummary_lastModifiedDate = Lens.lens (\SecurityConfigSummary' {lastModifiedDate} -> lastModifiedDate) (\s@SecurityConfigSummary' {} a -> s {lastModifiedDate = a} :: SecurityConfigSummary)
+
+-- | The type of security configuration.
+securityConfigSummary_type :: Lens.Lens' SecurityConfigSummary (Prelude.Maybe SecurityConfigType)
+securityConfigSummary_type = Lens.lens (\SecurityConfigSummary' {type'} -> type') (\s@SecurityConfigSummary' {} a -> s {type' = a} :: SecurityConfigSummary)
+
+instance Data.FromJSON SecurityConfigSummary where
+  parseJSON =
+    Data.withObject
+      "SecurityConfigSummary"
+      ( \x ->
+          SecurityConfigSummary'
+            Prelude.<$> (x Data..:? "configVersion")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable SecurityConfigSummary where
+  hashWithSalt _salt SecurityConfigSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` configVersion
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SecurityConfigSummary where
+  rnf SecurityConfigSummary' {..} =
+    Prelude.rnf configVersion
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigType.hs b/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SecurityConfigType.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.OpenSearchServerless.Types.SecurityConfigType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SecurityConfigType
+  ( SecurityConfigType
+      ( ..,
+        SecurityConfigType_Saml
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SecurityConfigType = SecurityConfigType'
+  { fromSecurityConfigType ::
+      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 SecurityConfigType_Saml :: SecurityConfigType
+pattern SecurityConfigType_Saml = SecurityConfigType' "saml"
+
+{-# COMPLETE
+  SecurityConfigType_Saml,
+  SecurityConfigType'
+  #-}
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyDetail.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.SecurityPolicyDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SecurityPolicyDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.Document
+import Amazonka.OpenSearchServerless.Types.SecurityPolicyType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about an OpenSearch Serverless security policy.
+--
+-- /See:/ 'newSecurityPolicyDetail' smart constructor.
+data SecurityPolicyDetail = SecurityPolicyDetail'
+  { -- | The date the policy was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | The description of the security policy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the policy was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the policy.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The JSON policy document without any whitespaces.
+    policy :: Prelude.Maybe Document,
+    -- | The version of the policy.
+    policyVersion :: Prelude.Maybe Prelude.Text,
+    -- | The type of security policy.
+    type' :: Prelude.Maybe SecurityPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityPolicyDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'securityPolicyDetail_createdDate' - The date the policy was created.
+--
+-- 'description', 'securityPolicyDetail_description' - The description of the security policy.
+--
+-- 'lastModifiedDate', 'securityPolicyDetail_lastModifiedDate' - The timestamp of when the policy was last modified.
+--
+-- 'name', 'securityPolicyDetail_name' - The name of the policy.
+--
+-- 'policy', 'securityPolicyDetail_policy' - The JSON policy document without any whitespaces.
+--
+-- 'policyVersion', 'securityPolicyDetail_policyVersion' - The version of the policy.
+--
+-- 'type'', 'securityPolicyDetail_type' - The type of security policy.
+newSecurityPolicyDetail ::
+  SecurityPolicyDetail
+newSecurityPolicyDetail =
+  SecurityPolicyDetail'
+    { createdDate =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      policy = Prelude.Nothing,
+      policyVersion = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The date the policy was created.
+securityPolicyDetail_createdDate :: Lens.Lens' SecurityPolicyDetail (Prelude.Maybe Prelude.Integer)
+securityPolicyDetail_createdDate = Lens.lens (\SecurityPolicyDetail' {createdDate} -> createdDate) (\s@SecurityPolicyDetail' {} a -> s {createdDate = a} :: SecurityPolicyDetail)
+
+-- | The description of the security policy.
+securityPolicyDetail_description :: Lens.Lens' SecurityPolicyDetail (Prelude.Maybe Prelude.Text)
+securityPolicyDetail_description = Lens.lens (\SecurityPolicyDetail' {description} -> description) (\s@SecurityPolicyDetail' {} a -> s {description = a} :: SecurityPolicyDetail)
+
+-- | The timestamp of when the policy was last modified.
+securityPolicyDetail_lastModifiedDate :: Lens.Lens' SecurityPolicyDetail (Prelude.Maybe Prelude.Integer)
+securityPolicyDetail_lastModifiedDate = Lens.lens (\SecurityPolicyDetail' {lastModifiedDate} -> lastModifiedDate) (\s@SecurityPolicyDetail' {} a -> s {lastModifiedDate = a} :: SecurityPolicyDetail)
+
+-- | The name of the policy.
+securityPolicyDetail_name :: Lens.Lens' SecurityPolicyDetail (Prelude.Maybe Prelude.Text)
+securityPolicyDetail_name = Lens.lens (\SecurityPolicyDetail' {name} -> name) (\s@SecurityPolicyDetail' {} a -> s {name = a} :: SecurityPolicyDetail)
+
+-- | The JSON policy document without any whitespaces.
+securityPolicyDetail_policy :: Lens.Lens' SecurityPolicyDetail (Prelude.Maybe Document)
+securityPolicyDetail_policy = Lens.lens (\SecurityPolicyDetail' {policy} -> policy) (\s@SecurityPolicyDetail' {} a -> s {policy = a} :: SecurityPolicyDetail)
+
+-- | The version of the policy.
+securityPolicyDetail_policyVersion :: Lens.Lens' SecurityPolicyDetail (Prelude.Maybe Prelude.Text)
+securityPolicyDetail_policyVersion = Lens.lens (\SecurityPolicyDetail' {policyVersion} -> policyVersion) (\s@SecurityPolicyDetail' {} a -> s {policyVersion = a} :: SecurityPolicyDetail)
+
+-- | The type of security policy.
+securityPolicyDetail_type :: Lens.Lens' SecurityPolicyDetail (Prelude.Maybe SecurityPolicyType)
+securityPolicyDetail_type = Lens.lens (\SecurityPolicyDetail' {type'} -> type') (\s@SecurityPolicyDetail' {} a -> s {type' = a} :: SecurityPolicyDetail)
+
+instance Data.FromJSON SecurityPolicyDetail where
+  parseJSON =
+    Data.withObject
+      "SecurityPolicyDetail"
+      ( \x ->
+          SecurityPolicyDetail'
+            Prelude.<$> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "policy")
+            Prelude.<*> (x Data..:? "policyVersion")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable SecurityPolicyDetail where
+  hashWithSalt _salt SecurityPolicyDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` policyVersion
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SecurityPolicyDetail where
+  rnf SecurityPolicyDetail' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf policyVersion
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyStats.hs b/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyStats.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyStats.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.SecurityPolicyStats
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SecurityPolicyStats 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
+
+-- | Statistics for an OpenSearch Serverless security policy.
+--
+-- /See:/ 'newSecurityPolicyStats' smart constructor.
+data SecurityPolicyStats = SecurityPolicyStats'
+  { -- | The number of encryption policies in the current account.
+    encryptionPolicyCount :: Prelude.Maybe Prelude.Integer,
+    -- | The number of network policies in the current account.
+    networkPolicyCount :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityPolicyStats' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encryptionPolicyCount', 'securityPolicyStats_encryptionPolicyCount' - The number of encryption policies in the current account.
+--
+-- 'networkPolicyCount', 'securityPolicyStats_networkPolicyCount' - The number of network policies in the current account.
+newSecurityPolicyStats ::
+  SecurityPolicyStats
+newSecurityPolicyStats =
+  SecurityPolicyStats'
+    { encryptionPolicyCount =
+        Prelude.Nothing,
+      networkPolicyCount = Prelude.Nothing
+    }
+
+-- | The number of encryption policies in the current account.
+securityPolicyStats_encryptionPolicyCount :: Lens.Lens' SecurityPolicyStats (Prelude.Maybe Prelude.Integer)
+securityPolicyStats_encryptionPolicyCount = Lens.lens (\SecurityPolicyStats' {encryptionPolicyCount} -> encryptionPolicyCount) (\s@SecurityPolicyStats' {} a -> s {encryptionPolicyCount = a} :: SecurityPolicyStats)
+
+-- | The number of network policies in the current account.
+securityPolicyStats_networkPolicyCount :: Lens.Lens' SecurityPolicyStats (Prelude.Maybe Prelude.Integer)
+securityPolicyStats_networkPolicyCount = Lens.lens (\SecurityPolicyStats' {networkPolicyCount} -> networkPolicyCount) (\s@SecurityPolicyStats' {} a -> s {networkPolicyCount = a} :: SecurityPolicyStats)
+
+instance Data.FromJSON SecurityPolicyStats where
+  parseJSON =
+    Data.withObject
+      "SecurityPolicyStats"
+      ( \x ->
+          SecurityPolicyStats'
+            Prelude.<$> (x Data..:? "EncryptionPolicyCount")
+            Prelude.<*> (x Data..:? "NetworkPolicyCount")
+      )
+
+instance Prelude.Hashable SecurityPolicyStats where
+  hashWithSalt _salt SecurityPolicyStats' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionPolicyCount
+      `Prelude.hashWithSalt` networkPolicyCount
+
+instance Prelude.NFData SecurityPolicyStats where
+  rnf SecurityPolicyStats' {..} =
+    Prelude.rnf encryptionPolicyCount
+      `Prelude.seq` Prelude.rnf networkPolicyCount
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicySummary.hs b/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicySummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicySummary.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.OpenSearchServerless.Types.SecurityPolicySummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SecurityPolicySummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.SecurityPolicyType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of a security policy for OpenSearch Serverless.
+--
+-- /See:/ 'newSecurityPolicySummary' smart constructor.
+data SecurityPolicySummary = SecurityPolicySummary'
+  { -- | The date the policy was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | The description of the security policy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the policy was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the policy.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The version of the policy.
+    policyVersion :: Prelude.Maybe Prelude.Text,
+    -- | The type of security policy.
+    type' :: Prelude.Maybe SecurityPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityPolicySummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'securityPolicySummary_createdDate' - The date the policy was created.
+--
+-- 'description', 'securityPolicySummary_description' - The description of the security policy.
+--
+-- 'lastModifiedDate', 'securityPolicySummary_lastModifiedDate' - The timestamp of when the policy was last modified.
+--
+-- 'name', 'securityPolicySummary_name' - The name of the policy.
+--
+-- 'policyVersion', 'securityPolicySummary_policyVersion' - The version of the policy.
+--
+-- 'type'', 'securityPolicySummary_type' - The type of security policy.
+newSecurityPolicySummary ::
+  SecurityPolicySummary
+newSecurityPolicySummary =
+  SecurityPolicySummary'
+    { createdDate =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      policyVersion = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The date the policy was created.
+securityPolicySummary_createdDate :: Lens.Lens' SecurityPolicySummary (Prelude.Maybe Prelude.Integer)
+securityPolicySummary_createdDate = Lens.lens (\SecurityPolicySummary' {createdDate} -> createdDate) (\s@SecurityPolicySummary' {} a -> s {createdDate = a} :: SecurityPolicySummary)
+
+-- | The description of the security policy.
+securityPolicySummary_description :: Lens.Lens' SecurityPolicySummary (Prelude.Maybe Prelude.Text)
+securityPolicySummary_description = Lens.lens (\SecurityPolicySummary' {description} -> description) (\s@SecurityPolicySummary' {} a -> s {description = a} :: SecurityPolicySummary)
+
+-- | The timestamp of when the policy was last modified.
+securityPolicySummary_lastModifiedDate :: Lens.Lens' SecurityPolicySummary (Prelude.Maybe Prelude.Integer)
+securityPolicySummary_lastModifiedDate = Lens.lens (\SecurityPolicySummary' {lastModifiedDate} -> lastModifiedDate) (\s@SecurityPolicySummary' {} a -> s {lastModifiedDate = a} :: SecurityPolicySummary)
+
+-- | The name of the policy.
+securityPolicySummary_name :: Lens.Lens' SecurityPolicySummary (Prelude.Maybe Prelude.Text)
+securityPolicySummary_name = Lens.lens (\SecurityPolicySummary' {name} -> name) (\s@SecurityPolicySummary' {} a -> s {name = a} :: SecurityPolicySummary)
+
+-- | The version of the policy.
+securityPolicySummary_policyVersion :: Lens.Lens' SecurityPolicySummary (Prelude.Maybe Prelude.Text)
+securityPolicySummary_policyVersion = Lens.lens (\SecurityPolicySummary' {policyVersion} -> policyVersion) (\s@SecurityPolicySummary' {} a -> s {policyVersion = a} :: SecurityPolicySummary)
+
+-- | The type of security policy.
+securityPolicySummary_type :: Lens.Lens' SecurityPolicySummary (Prelude.Maybe SecurityPolicyType)
+securityPolicySummary_type = Lens.lens (\SecurityPolicySummary' {type'} -> type') (\s@SecurityPolicySummary' {} a -> s {type' = a} :: SecurityPolicySummary)
+
+instance Data.FromJSON SecurityPolicySummary where
+  parseJSON =
+    Data.withObject
+      "SecurityPolicySummary"
+      ( \x ->
+          SecurityPolicySummary'
+            Prelude.<$> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "policyVersion")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable SecurityPolicySummary where
+  hashWithSalt _salt SecurityPolicySummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` policyVersion
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SecurityPolicySummary where
+  rnf SecurityPolicySummary' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf policyVersion
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyType.hs b/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/SecurityPolicyType.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.OpenSearchServerless.Types.SecurityPolicyType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.SecurityPolicyType
+  ( SecurityPolicyType
+      ( ..,
+        SecurityPolicyType_Encryption,
+        SecurityPolicyType_Network
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SecurityPolicyType = SecurityPolicyType'
+  { fromSecurityPolicyType ::
+      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 SecurityPolicyType_Encryption :: SecurityPolicyType
+pattern SecurityPolicyType_Encryption = SecurityPolicyType' "encryption"
+
+pattern SecurityPolicyType_Network :: SecurityPolicyType
+pattern SecurityPolicyType_Network = SecurityPolicyType' "network"
+
+{-# COMPLETE
+  SecurityPolicyType_Encryption,
+  SecurityPolicyType_Network,
+  SecurityPolicyType'
+  #-}
diff --git a/gen/Amazonka/OpenSearchServerless/Types/Tag.hs b/gen/Amazonka/OpenSearchServerless/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/Tag.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A map of key-value pairs associated to an OpenSearch Serverless
+-- resource.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The key to use in the tag.
+    key :: Prelude.Text,
+    -- | The value of the tag.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The key to use in the tag.
+--
+-- 'value', 'tag_value' - The value of the tag.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The key to use in the tag.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The value of the tag.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "key")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("key" Data..= key),
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/OpenSearchServerless/Types/UpdateCollectionDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/UpdateCollectionDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/UpdateCollectionDetail.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.UpdateCollectionDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.UpdateCollectionDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.CollectionStatus
+import Amazonka.OpenSearchServerless.Types.CollectionType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about an updated OpenSearch Serverless collection.
+--
+-- /See:/ 'newUpdateCollectionDetail' smart constructor.
+data UpdateCollectionDetail = UpdateCollectionDetail'
+  { -- | The Amazon Resource Name (ARN) of the collection.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the collection was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | The description of the collection.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the collection.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the collection was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the collection.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the collection.
+    status :: Prelude.Maybe CollectionStatus,
+    -- | The collection type.
+    type' :: Prelude.Maybe CollectionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCollectionDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateCollectionDetail_arn' - The Amazon Resource Name (ARN) of the collection.
+--
+-- 'createdDate', 'updateCollectionDetail_createdDate' - The date and time when the collection was created.
+--
+-- 'description', 'updateCollectionDetail_description' - The description of the collection.
+--
+-- 'id', 'updateCollectionDetail_id' - The unique identifier of the collection.
+--
+-- 'lastModifiedDate', 'updateCollectionDetail_lastModifiedDate' - The date and time when the collection was last modified.
+--
+-- 'name', 'updateCollectionDetail_name' - The name of the collection.
+--
+-- 'status', 'updateCollectionDetail_status' - The current status of the collection.
+--
+-- 'type'', 'updateCollectionDetail_type' - The collection type.
+newUpdateCollectionDetail ::
+  UpdateCollectionDetail
+newUpdateCollectionDetail =
+  UpdateCollectionDetail'
+    { arn = Prelude.Nothing,
+      createdDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the collection.
+updateCollectionDetail_arn :: Lens.Lens' UpdateCollectionDetail (Prelude.Maybe Prelude.Text)
+updateCollectionDetail_arn = Lens.lens (\UpdateCollectionDetail' {arn} -> arn) (\s@UpdateCollectionDetail' {} a -> s {arn = a} :: UpdateCollectionDetail)
+
+-- | The date and time when the collection was created.
+updateCollectionDetail_createdDate :: Lens.Lens' UpdateCollectionDetail (Prelude.Maybe Prelude.Integer)
+updateCollectionDetail_createdDate = Lens.lens (\UpdateCollectionDetail' {createdDate} -> createdDate) (\s@UpdateCollectionDetail' {} a -> s {createdDate = a} :: UpdateCollectionDetail)
+
+-- | The description of the collection.
+updateCollectionDetail_description :: Lens.Lens' UpdateCollectionDetail (Prelude.Maybe Prelude.Text)
+updateCollectionDetail_description = Lens.lens (\UpdateCollectionDetail' {description} -> description) (\s@UpdateCollectionDetail' {} a -> s {description = a} :: UpdateCollectionDetail)
+
+-- | The unique identifier of the collection.
+updateCollectionDetail_id :: Lens.Lens' UpdateCollectionDetail (Prelude.Maybe Prelude.Text)
+updateCollectionDetail_id = Lens.lens (\UpdateCollectionDetail' {id} -> id) (\s@UpdateCollectionDetail' {} a -> s {id = a} :: UpdateCollectionDetail)
+
+-- | The date and time when the collection was last modified.
+updateCollectionDetail_lastModifiedDate :: Lens.Lens' UpdateCollectionDetail (Prelude.Maybe Prelude.Integer)
+updateCollectionDetail_lastModifiedDate = Lens.lens (\UpdateCollectionDetail' {lastModifiedDate} -> lastModifiedDate) (\s@UpdateCollectionDetail' {} a -> s {lastModifiedDate = a} :: UpdateCollectionDetail)
+
+-- | The name of the collection.
+updateCollectionDetail_name :: Lens.Lens' UpdateCollectionDetail (Prelude.Maybe Prelude.Text)
+updateCollectionDetail_name = Lens.lens (\UpdateCollectionDetail' {name} -> name) (\s@UpdateCollectionDetail' {} a -> s {name = a} :: UpdateCollectionDetail)
+
+-- | The current status of the collection.
+updateCollectionDetail_status :: Lens.Lens' UpdateCollectionDetail (Prelude.Maybe CollectionStatus)
+updateCollectionDetail_status = Lens.lens (\UpdateCollectionDetail' {status} -> status) (\s@UpdateCollectionDetail' {} a -> s {status = a} :: UpdateCollectionDetail)
+
+-- | The collection type.
+updateCollectionDetail_type :: Lens.Lens' UpdateCollectionDetail (Prelude.Maybe CollectionType)
+updateCollectionDetail_type = Lens.lens (\UpdateCollectionDetail' {type'} -> type') (\s@UpdateCollectionDetail' {} a -> s {type' = a} :: UpdateCollectionDetail)
+
+instance Data.FromJSON UpdateCollectionDetail where
+  parseJSON =
+    Data.withObject
+      "UpdateCollectionDetail"
+      ( \x ->
+          UpdateCollectionDetail'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable UpdateCollectionDetail where
+  hashWithSalt _salt UpdateCollectionDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData UpdateCollectionDetail where
+  rnf UpdateCollectionDetail' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/OpenSearchServerless/Types/UpdateVpcEndpointDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/UpdateVpcEndpointDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/UpdateVpcEndpointDetail.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.UpdateVpcEndpointDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.UpdateVpcEndpointDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Update details for an OpenSearch Serverless-managed interface endpoint.
+--
+-- /See:/ 'newUpdateVpcEndpointDetail' smart constructor.
+data UpdateVpcEndpointDetail = UpdateVpcEndpointDetail'
+  { -- | The unique identifier of the endpoint.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of when the endpoint was last modified.
+    lastModifiedDate :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the endpoint.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifiers of the security groups that define the ports,
+    -- protocols, and sources for inbound traffic that you are authorizing into
+    -- your endpoint.
+    securityGroupIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The current status of the endpoint update process.
+    status :: Prelude.Maybe VpcEndpointStatus,
+    -- | The ID of the subnets from which you access OpenSearch Serverless.
+    subnetIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVpcEndpointDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'updateVpcEndpointDetail_id' - The unique identifier of the endpoint.
+--
+-- 'lastModifiedDate', 'updateVpcEndpointDetail_lastModifiedDate' - The timestamp of when the endpoint was last modified.
+--
+-- 'name', 'updateVpcEndpointDetail_name' - The name of the endpoint.
+--
+-- 'securityGroupIds', 'updateVpcEndpointDetail_securityGroupIds' - The unique identifiers of the security groups that define the ports,
+-- protocols, and sources for inbound traffic that you are authorizing into
+-- your endpoint.
+--
+-- 'status', 'updateVpcEndpointDetail_status' - The current status of the endpoint update process.
+--
+-- 'subnetIds', 'updateVpcEndpointDetail_subnetIds' - The ID of the subnets from which you access OpenSearch Serverless.
+newUpdateVpcEndpointDetail ::
+  UpdateVpcEndpointDetail
+newUpdateVpcEndpointDetail =
+  UpdateVpcEndpointDetail'
+    { id = Prelude.Nothing,
+      lastModifiedDate = Prelude.Nothing,
+      name = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      status = Prelude.Nothing,
+      subnetIds = Prelude.Nothing
+    }
+
+-- | The unique identifier of the endpoint.
+updateVpcEndpointDetail_id :: Lens.Lens' UpdateVpcEndpointDetail (Prelude.Maybe Prelude.Text)
+updateVpcEndpointDetail_id = Lens.lens (\UpdateVpcEndpointDetail' {id} -> id) (\s@UpdateVpcEndpointDetail' {} a -> s {id = a} :: UpdateVpcEndpointDetail)
+
+-- | The timestamp of when the endpoint was last modified.
+updateVpcEndpointDetail_lastModifiedDate :: Lens.Lens' UpdateVpcEndpointDetail (Prelude.Maybe Prelude.Integer)
+updateVpcEndpointDetail_lastModifiedDate = Lens.lens (\UpdateVpcEndpointDetail' {lastModifiedDate} -> lastModifiedDate) (\s@UpdateVpcEndpointDetail' {} a -> s {lastModifiedDate = a} :: UpdateVpcEndpointDetail)
+
+-- | The name of the endpoint.
+updateVpcEndpointDetail_name :: Lens.Lens' UpdateVpcEndpointDetail (Prelude.Maybe Prelude.Text)
+updateVpcEndpointDetail_name = Lens.lens (\UpdateVpcEndpointDetail' {name} -> name) (\s@UpdateVpcEndpointDetail' {} a -> s {name = a} :: UpdateVpcEndpointDetail)
+
+-- | The unique identifiers of the security groups that define the ports,
+-- protocols, and sources for inbound traffic that you are authorizing into
+-- your endpoint.
+updateVpcEndpointDetail_securityGroupIds :: Lens.Lens' UpdateVpcEndpointDetail (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateVpcEndpointDetail_securityGroupIds = Lens.lens (\UpdateVpcEndpointDetail' {securityGroupIds} -> securityGroupIds) (\s@UpdateVpcEndpointDetail' {} a -> s {securityGroupIds = a} :: UpdateVpcEndpointDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current status of the endpoint update process.
+updateVpcEndpointDetail_status :: Lens.Lens' UpdateVpcEndpointDetail (Prelude.Maybe VpcEndpointStatus)
+updateVpcEndpointDetail_status = Lens.lens (\UpdateVpcEndpointDetail' {status} -> status) (\s@UpdateVpcEndpointDetail' {} a -> s {status = a} :: UpdateVpcEndpointDetail)
+
+-- | The ID of the subnets from which you access OpenSearch Serverless.
+updateVpcEndpointDetail_subnetIds :: Lens.Lens' UpdateVpcEndpointDetail (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateVpcEndpointDetail_subnetIds = Lens.lens (\UpdateVpcEndpointDetail' {subnetIds} -> subnetIds) (\s@UpdateVpcEndpointDetail' {} a -> s {subnetIds = a} :: UpdateVpcEndpointDetail) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON UpdateVpcEndpointDetail where
+  parseJSON =
+    Data.withObject
+      "UpdateVpcEndpointDetail"
+      ( \x ->
+          UpdateVpcEndpointDetail'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lastModifiedDate")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "securityGroupIds")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "subnetIds")
+      )
+
+instance Prelude.Hashable UpdateVpcEndpointDetail where
+  hashWithSalt _salt UpdateVpcEndpointDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lastModifiedDate
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` subnetIds
+
+instance Prelude.NFData UpdateVpcEndpointDetail where
+  rnf UpdateVpcEndpointDetail' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lastModifiedDate
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf subnetIds
diff --git a/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointDetail.hs
@@ -0,0 +1,151 @@
+{-# 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.OpenSearchServerless.Types.VpcEndpointDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.VpcEndpointDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about an OpenSearch Serverless-managed interface endpoint.
+--
+-- /See:/ 'newVpcEndpointDetail' smart constructor.
+data VpcEndpointDetail = VpcEndpointDetail'
+  { -- | The date the endpoint was created.
+    createdDate :: Prelude.Maybe Prelude.Integer,
+    -- | The unique identifier of the endpoint.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the endpoint.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifiers of the security groups that define the ports,
+    -- protocols, and sources for inbound traffic that you are authorizing into
+    -- your endpoint.
+    securityGroupIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The current status of the endpoint.
+    status :: Prelude.Maybe VpcEndpointStatus,
+    -- | The ID of the subnets from which you access OpenSearch Serverless.
+    subnetIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ID of the VPC from which you access OpenSearch Serverless
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcEndpointDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'vpcEndpointDetail_createdDate' - The date the endpoint was created.
+--
+-- 'id', 'vpcEndpointDetail_id' - The unique identifier of the endpoint.
+--
+-- 'name', 'vpcEndpointDetail_name' - The name of the endpoint.
+--
+-- 'securityGroupIds', 'vpcEndpointDetail_securityGroupIds' - The unique identifiers of the security groups that define the ports,
+-- protocols, and sources for inbound traffic that you are authorizing into
+-- your endpoint.
+--
+-- 'status', 'vpcEndpointDetail_status' - The current status of the endpoint.
+--
+-- 'subnetIds', 'vpcEndpointDetail_subnetIds' - The ID of the subnets from which you access OpenSearch Serverless.
+--
+-- 'vpcId', 'vpcEndpointDetail_vpcId' - The ID of the VPC from which you access OpenSearch Serverless
+newVpcEndpointDetail ::
+  VpcEndpointDetail
+newVpcEndpointDetail =
+  VpcEndpointDetail'
+    { createdDate = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      status = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The date the endpoint was created.
+vpcEndpointDetail_createdDate :: Lens.Lens' VpcEndpointDetail (Prelude.Maybe Prelude.Integer)
+vpcEndpointDetail_createdDate = Lens.lens (\VpcEndpointDetail' {createdDate} -> createdDate) (\s@VpcEndpointDetail' {} a -> s {createdDate = a} :: VpcEndpointDetail)
+
+-- | The unique identifier of the endpoint.
+vpcEndpointDetail_id :: Lens.Lens' VpcEndpointDetail (Prelude.Maybe Prelude.Text)
+vpcEndpointDetail_id = Lens.lens (\VpcEndpointDetail' {id} -> id) (\s@VpcEndpointDetail' {} a -> s {id = a} :: VpcEndpointDetail)
+
+-- | The name of the endpoint.
+vpcEndpointDetail_name :: Lens.Lens' VpcEndpointDetail (Prelude.Maybe Prelude.Text)
+vpcEndpointDetail_name = Lens.lens (\VpcEndpointDetail' {name} -> name) (\s@VpcEndpointDetail' {} a -> s {name = a} :: VpcEndpointDetail)
+
+-- | The unique identifiers of the security groups that define the ports,
+-- protocols, and sources for inbound traffic that you are authorizing into
+-- your endpoint.
+vpcEndpointDetail_securityGroupIds :: Lens.Lens' VpcEndpointDetail (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+vpcEndpointDetail_securityGroupIds = Lens.lens (\VpcEndpointDetail' {securityGroupIds} -> securityGroupIds) (\s@VpcEndpointDetail' {} a -> s {securityGroupIds = a} :: VpcEndpointDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current status of the endpoint.
+vpcEndpointDetail_status :: Lens.Lens' VpcEndpointDetail (Prelude.Maybe VpcEndpointStatus)
+vpcEndpointDetail_status = Lens.lens (\VpcEndpointDetail' {status} -> status) (\s@VpcEndpointDetail' {} a -> s {status = a} :: VpcEndpointDetail)
+
+-- | The ID of the subnets from which you access OpenSearch Serverless.
+vpcEndpointDetail_subnetIds :: Lens.Lens' VpcEndpointDetail (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+vpcEndpointDetail_subnetIds = Lens.lens (\VpcEndpointDetail' {subnetIds} -> subnetIds) (\s@VpcEndpointDetail' {} a -> s {subnetIds = a} :: VpcEndpointDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC from which you access OpenSearch Serverless
+vpcEndpointDetail_vpcId :: Lens.Lens' VpcEndpointDetail (Prelude.Maybe Prelude.Text)
+vpcEndpointDetail_vpcId = Lens.lens (\VpcEndpointDetail' {vpcId} -> vpcId) (\s@VpcEndpointDetail' {} a -> s {vpcId = a} :: VpcEndpointDetail)
+
+instance Data.FromJSON VpcEndpointDetail where
+  parseJSON =
+    Data.withObject
+      "VpcEndpointDetail"
+      ( \x ->
+          VpcEndpointDetail'
+            Prelude.<$> (x Data..:? "createdDate")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "securityGroupIds")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "subnetIds")
+            Prelude.<*> (x Data..:? "vpcId")
+      )
+
+instance Prelude.Hashable VpcEndpointDetail where
+  hashWithSalt _salt VpcEndpointDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData VpcEndpointDetail where
+  rnf VpcEndpointDetail' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointErrorDetail.hs b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointErrorDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointErrorDetail.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.VpcEndpointErrorDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.VpcEndpointErrorDetail 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
+
+-- | Error information for a failed @BatchGetVpcEndpoint@ request.
+--
+-- /See:/ 'newVpcEndpointErrorDetail' smart constructor.
+data VpcEndpointErrorDetail = VpcEndpointErrorDetail'
+  { -- | The error code for the failed request.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | An error message describing the reason for the failure.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the VPC endpoint.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcEndpointErrorDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'vpcEndpointErrorDetail_errorCode' - The error code for the failed request.
+--
+-- 'errorMessage', 'vpcEndpointErrorDetail_errorMessage' - An error message describing the reason for the failure.
+--
+-- 'id', 'vpcEndpointErrorDetail_id' - The unique identifier of the VPC endpoint.
+newVpcEndpointErrorDetail ::
+  VpcEndpointErrorDetail
+newVpcEndpointErrorDetail =
+  VpcEndpointErrorDetail'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | The error code for the failed request.
+vpcEndpointErrorDetail_errorCode :: Lens.Lens' VpcEndpointErrorDetail (Prelude.Maybe Prelude.Text)
+vpcEndpointErrorDetail_errorCode = Lens.lens (\VpcEndpointErrorDetail' {errorCode} -> errorCode) (\s@VpcEndpointErrorDetail' {} a -> s {errorCode = a} :: VpcEndpointErrorDetail)
+
+-- | An error message describing the reason for the failure.
+vpcEndpointErrorDetail_errorMessage :: Lens.Lens' VpcEndpointErrorDetail (Prelude.Maybe Prelude.Text)
+vpcEndpointErrorDetail_errorMessage = Lens.lens (\VpcEndpointErrorDetail' {errorMessage} -> errorMessage) (\s@VpcEndpointErrorDetail' {} a -> s {errorMessage = a} :: VpcEndpointErrorDetail)
+
+-- | The unique identifier of the VPC endpoint.
+vpcEndpointErrorDetail_id :: Lens.Lens' VpcEndpointErrorDetail (Prelude.Maybe Prelude.Text)
+vpcEndpointErrorDetail_id = Lens.lens (\VpcEndpointErrorDetail' {id} -> id) (\s@VpcEndpointErrorDetail' {} a -> s {id = a} :: VpcEndpointErrorDetail)
+
+instance Data.FromJSON VpcEndpointErrorDetail where
+  parseJSON =
+    Data.withObject
+      "VpcEndpointErrorDetail"
+      ( \x ->
+          VpcEndpointErrorDetail'
+            Prelude.<$> (x Data..:? "errorCode")
+            Prelude.<*> (x Data..:? "errorMessage")
+            Prelude.<*> (x Data..:? "id")
+      )
+
+instance Prelude.Hashable VpcEndpointErrorDetail where
+  hashWithSalt _salt VpcEndpointErrorDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData VpcEndpointErrorDetail where
+  rnf VpcEndpointErrorDetail' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointFilters.hs b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointFilters.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.VpcEndpointFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.VpcEndpointFilters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Filter the results of a @ListVpcEndpoints@ request.
+--
+-- /See:/ 'newVpcEndpointFilters' smart constructor.
+data VpcEndpointFilters = VpcEndpointFilters'
+  { -- | The current status of the endpoint.
+    status :: Prelude.Maybe VpcEndpointStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcEndpointFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'vpcEndpointFilters_status' - The current status of the endpoint.
+newVpcEndpointFilters ::
+  VpcEndpointFilters
+newVpcEndpointFilters =
+  VpcEndpointFilters' {status = Prelude.Nothing}
+
+-- | The current status of the endpoint.
+vpcEndpointFilters_status :: Lens.Lens' VpcEndpointFilters (Prelude.Maybe VpcEndpointStatus)
+vpcEndpointFilters_status = Lens.lens (\VpcEndpointFilters' {status} -> status) (\s@VpcEndpointFilters' {} a -> s {status = a} :: VpcEndpointFilters)
+
+instance Prelude.Hashable VpcEndpointFilters where
+  hashWithSalt _salt VpcEndpointFilters' {..} =
+    _salt `Prelude.hashWithSalt` status
+
+instance Prelude.NFData VpcEndpointFilters where
+  rnf VpcEndpointFilters' {..} = Prelude.rnf status
+
+instance Data.ToJSON VpcEndpointFilters where
+  toJSON VpcEndpointFilters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("status" Data..=) Prelude.<$> status]
+      )
diff --git a/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointStatus.hs b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointStatus.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+  ( VpcEndpointStatus
+      ( ..,
+        VpcEndpointStatus_ACTIVE,
+        VpcEndpointStatus_DELETING,
+        VpcEndpointStatus_FAILED,
+        VpcEndpointStatus_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcEndpointStatus = VpcEndpointStatus'
+  { fromVpcEndpointStatus ::
+      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 VpcEndpointStatus_ACTIVE :: VpcEndpointStatus
+pattern VpcEndpointStatus_ACTIVE = VpcEndpointStatus' "ACTIVE"
+
+pattern VpcEndpointStatus_DELETING :: VpcEndpointStatus
+pattern VpcEndpointStatus_DELETING = VpcEndpointStatus' "DELETING"
+
+pattern VpcEndpointStatus_FAILED :: VpcEndpointStatus
+pattern VpcEndpointStatus_FAILED = VpcEndpointStatus' "FAILED"
+
+pattern VpcEndpointStatus_PENDING :: VpcEndpointStatus
+pattern VpcEndpointStatus_PENDING = VpcEndpointStatus' "PENDING"
+
+{-# COMPLETE
+  VpcEndpointStatus_ACTIVE,
+  VpcEndpointStatus_DELETING,
+  VpcEndpointStatus_FAILED,
+  VpcEndpointStatus_PENDING,
+  VpcEndpointStatus'
+  #-}
diff --git a/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointSummary.hs b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/Types/VpcEndpointSummary.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.Types.VpcEndpointSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.OpenSearchServerless.Types.VpcEndpointSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types.VpcEndpointStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The VPC endpoint object.
+--
+-- /See:/ 'newVpcEndpointSummary' smart constructor.
+data VpcEndpointSummary = VpcEndpointSummary'
+  { -- | The unique identifier of the endpoint.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the endpoint.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the endpoint.
+    status :: Prelude.Maybe VpcEndpointStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcEndpointSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'vpcEndpointSummary_id' - The unique identifier of the endpoint.
+--
+-- 'name', 'vpcEndpointSummary_name' - The name of the endpoint.
+--
+-- 'status', 'vpcEndpointSummary_status' - The current status of the endpoint.
+newVpcEndpointSummary ::
+  VpcEndpointSummary
+newVpcEndpointSummary =
+  VpcEndpointSummary'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The unique identifier of the endpoint.
+vpcEndpointSummary_id :: Lens.Lens' VpcEndpointSummary (Prelude.Maybe Prelude.Text)
+vpcEndpointSummary_id = Lens.lens (\VpcEndpointSummary' {id} -> id) (\s@VpcEndpointSummary' {} a -> s {id = a} :: VpcEndpointSummary)
+
+-- | The name of the endpoint.
+vpcEndpointSummary_name :: Lens.Lens' VpcEndpointSummary (Prelude.Maybe Prelude.Text)
+vpcEndpointSummary_name = Lens.lens (\VpcEndpointSummary' {name} -> name) (\s@VpcEndpointSummary' {} a -> s {name = a} :: VpcEndpointSummary)
+
+-- | The current status of the endpoint.
+vpcEndpointSummary_status :: Lens.Lens' VpcEndpointSummary (Prelude.Maybe VpcEndpointStatus)
+vpcEndpointSummary_status = Lens.lens (\VpcEndpointSummary' {status} -> status) (\s@VpcEndpointSummary' {} a -> s {status = a} :: VpcEndpointSummary)
+
+instance Data.FromJSON VpcEndpointSummary where
+  parseJSON =
+    Data.withObject
+      "VpcEndpointSummary"
+      ( \x ->
+          VpcEndpointSummary'
+            Prelude.<$> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable VpcEndpointSummary where
+  hashWithSalt _salt VpcEndpointSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData VpcEndpointSummary where
+  rnf VpcEndpointSummary' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/OpenSearchServerless/UntagResource.hs b/gen/Amazonka/OpenSearchServerless/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/UntagResource.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a tag or set of tags from an OpenSearch Serverless resource. For
+-- more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/tag-collection.html Tagging Amazon OpenSearch Serverless collections>.
+module Amazonka.OpenSearchServerless.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource to remove tags from. The
+    -- resource must be active (not in the @DELETING@ state), and must be owned
+    -- by the account ID included in the request.
+    resourceArn :: Prelude.Text,
+    -- | The tag or set of tags to remove from the resource. All tag keys in the
+    -- request must be unique.
+    tagKeys :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource to remove tags from. The
+-- resource must be active (not in the @DELETING@ state), and must be owned
+-- by the account ID included in the request.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag or set of tags to remove from the resource. All tag keys in the
+-- request must be unique.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource to remove tags from. The
+-- resource must be active (not in the @DELETING@ state), and must be owned
+-- by the account ID included in the request.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag or set of tags to remove from the resource. All tag keys in the
+-- request must be unique.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("resourceArn" Data..= resourceArn),
+            Prelude.Just ("tagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/UpdateAccessPolicy.hs b/gen/Amazonka/OpenSearchServerless/UpdateAccessPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/UpdateAccessPolicy.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.UpdateAccessPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an OpenSearch Serverless access policy. For more information,
+-- see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html Data access control for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.UpdateAccessPolicy
+  ( -- * Creating a Request
+    UpdateAccessPolicy (..),
+    newUpdateAccessPolicy,
+
+    -- * Request Lenses
+    updateAccessPolicy_clientToken,
+    updateAccessPolicy_description,
+    updateAccessPolicy_policy,
+    updateAccessPolicy_name,
+    updateAccessPolicy_policyVersion,
+    updateAccessPolicy_type,
+
+    -- * Destructuring the Response
+    UpdateAccessPolicyResponse (..),
+    newUpdateAccessPolicyResponse,
+
+    -- * Response Lenses
+    updateAccessPolicyResponse_accessPolicyDetail,
+    updateAccessPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAccessPolicy' smart constructor.
+data UpdateAccessPolicy = UpdateAccessPolicy'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the policy. Typically used to store information about
+    -- the permissions defined in the policy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The JSON policy document to use as the content for the policy.
+    policy :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy.
+    name :: Prelude.Text,
+    -- | The version of the policy being updated.
+    policyVersion :: Prelude.Text,
+    -- | The type of policy.
+    type' :: AccessPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAccessPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateAccessPolicy_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'description', 'updateAccessPolicy_description' - A description of the policy. Typically used to store information about
+-- the permissions defined in the policy.
+--
+-- 'policy', 'updateAccessPolicy_policy' - The JSON policy document to use as the content for the policy.
+--
+-- 'name', 'updateAccessPolicy_name' - The name of the policy.
+--
+-- 'policyVersion', 'updateAccessPolicy_policyVersion' - The version of the policy being updated.
+--
+-- 'type'', 'updateAccessPolicy_type' - The type of policy.
+newUpdateAccessPolicy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'policyVersion'
+  Prelude.Text ->
+  -- | 'type''
+  AccessPolicyType ->
+  UpdateAccessPolicy
+newUpdateAccessPolicy pName_ pPolicyVersion_ pType_ =
+  UpdateAccessPolicy'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      policy = Prelude.Nothing,
+      name = pName_,
+      policyVersion = pPolicyVersion_,
+      type' = pType_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+updateAccessPolicy_clientToken :: Lens.Lens' UpdateAccessPolicy (Prelude.Maybe Prelude.Text)
+updateAccessPolicy_clientToken = Lens.lens (\UpdateAccessPolicy' {clientToken} -> clientToken) (\s@UpdateAccessPolicy' {} a -> s {clientToken = a} :: UpdateAccessPolicy)
+
+-- | A description of the policy. Typically used to store information about
+-- the permissions defined in the policy.
+updateAccessPolicy_description :: Lens.Lens' UpdateAccessPolicy (Prelude.Maybe Prelude.Text)
+updateAccessPolicy_description = Lens.lens (\UpdateAccessPolicy' {description} -> description) (\s@UpdateAccessPolicy' {} a -> s {description = a} :: UpdateAccessPolicy)
+
+-- | The JSON policy document to use as the content for the policy.
+updateAccessPolicy_policy :: Lens.Lens' UpdateAccessPolicy (Prelude.Maybe Prelude.Text)
+updateAccessPolicy_policy = Lens.lens (\UpdateAccessPolicy' {policy} -> policy) (\s@UpdateAccessPolicy' {} a -> s {policy = a} :: UpdateAccessPolicy)
+
+-- | The name of the policy.
+updateAccessPolicy_name :: Lens.Lens' UpdateAccessPolicy Prelude.Text
+updateAccessPolicy_name = Lens.lens (\UpdateAccessPolicy' {name} -> name) (\s@UpdateAccessPolicy' {} a -> s {name = a} :: UpdateAccessPolicy)
+
+-- | The version of the policy being updated.
+updateAccessPolicy_policyVersion :: Lens.Lens' UpdateAccessPolicy Prelude.Text
+updateAccessPolicy_policyVersion = Lens.lens (\UpdateAccessPolicy' {policyVersion} -> policyVersion) (\s@UpdateAccessPolicy' {} a -> s {policyVersion = a} :: UpdateAccessPolicy)
+
+-- | The type of policy.
+updateAccessPolicy_type :: Lens.Lens' UpdateAccessPolicy AccessPolicyType
+updateAccessPolicy_type = Lens.lens (\UpdateAccessPolicy' {type'} -> type') (\s@UpdateAccessPolicy' {} a -> s {type' = a} :: UpdateAccessPolicy)
+
+instance Core.AWSRequest UpdateAccessPolicy where
+  type
+    AWSResponse UpdateAccessPolicy =
+      UpdateAccessPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAccessPolicyResponse'
+            Prelude.<$> (x Data..?> "accessPolicyDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAccessPolicy where
+  hashWithSalt _salt UpdateAccessPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` policyVersion
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData UpdateAccessPolicy where
+  rnf UpdateAccessPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf policyVersion
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders UpdateAccessPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.UpdateAccessPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAccessPolicy where
+  toJSON UpdateAccessPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("policy" Data..=) Prelude.<$> policy,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("policyVersion" Data..= policyVersion),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath UpdateAccessPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateAccessPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAccessPolicyResponse' smart constructor.
+data UpdateAccessPolicyResponse = UpdateAccessPolicyResponse'
+  { -- | Details about the updated access policy.
+    accessPolicyDetail :: Prelude.Maybe AccessPolicyDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAccessPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessPolicyDetail', 'updateAccessPolicyResponse_accessPolicyDetail' - Details about the updated access policy.
+--
+-- 'httpStatus', 'updateAccessPolicyResponse_httpStatus' - The response's http status code.
+newUpdateAccessPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAccessPolicyResponse
+newUpdateAccessPolicyResponse pHttpStatus_ =
+  UpdateAccessPolicyResponse'
+    { accessPolicyDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the updated access policy.
+updateAccessPolicyResponse_accessPolicyDetail :: Lens.Lens' UpdateAccessPolicyResponse (Prelude.Maybe AccessPolicyDetail)
+updateAccessPolicyResponse_accessPolicyDetail = Lens.lens (\UpdateAccessPolicyResponse' {accessPolicyDetail} -> accessPolicyDetail) (\s@UpdateAccessPolicyResponse' {} a -> s {accessPolicyDetail = a} :: UpdateAccessPolicyResponse)
+
+-- | The response's http status code.
+updateAccessPolicyResponse_httpStatus :: Lens.Lens' UpdateAccessPolicyResponse Prelude.Int
+updateAccessPolicyResponse_httpStatus = Lens.lens (\UpdateAccessPolicyResponse' {httpStatus} -> httpStatus) (\s@UpdateAccessPolicyResponse' {} a -> s {httpStatus = a} :: UpdateAccessPolicyResponse)
+
+instance Prelude.NFData UpdateAccessPolicyResponse where
+  rnf UpdateAccessPolicyResponse' {..} =
+    Prelude.rnf accessPolicyDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/UpdateAccountSettings.hs b/gen/Amazonka/OpenSearchServerless/UpdateAccountSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/UpdateAccountSettings.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.UpdateAccountSettings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Update the OpenSearch Serverless settings for the current Amazon Web
+-- Services account. For more information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-scaling Autoscaling>.
+module Amazonka.OpenSearchServerless.UpdateAccountSettings
+  ( -- * Creating a Request
+    UpdateAccountSettings (..),
+    newUpdateAccountSettings,
+
+    -- * Request Lenses
+    updateAccountSettings_capacityLimits,
+
+    -- * Destructuring the Response
+    UpdateAccountSettingsResponse (..),
+    newUpdateAccountSettingsResponse,
+
+    -- * Response Lenses
+    updateAccountSettingsResponse_accountSettingsDetail,
+    updateAccountSettingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateAccountSettings' smart constructor.
+data UpdateAccountSettings = UpdateAccountSettings'
+  { capacityLimits :: Prelude.Maybe CapacityLimits
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAccountSettings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityLimits', 'updateAccountSettings_capacityLimits' - Undocumented member.
+newUpdateAccountSettings ::
+  UpdateAccountSettings
+newUpdateAccountSettings =
+  UpdateAccountSettings'
+    { capacityLimits =
+        Prelude.Nothing
+    }
+
+-- | Undocumented member.
+updateAccountSettings_capacityLimits :: Lens.Lens' UpdateAccountSettings (Prelude.Maybe CapacityLimits)
+updateAccountSettings_capacityLimits = Lens.lens (\UpdateAccountSettings' {capacityLimits} -> capacityLimits) (\s@UpdateAccountSettings' {} a -> s {capacityLimits = a} :: UpdateAccountSettings)
+
+instance Core.AWSRequest UpdateAccountSettings where
+  type
+    AWSResponse UpdateAccountSettings =
+      UpdateAccountSettingsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAccountSettingsResponse'
+            Prelude.<$> (x Data..?> "accountSettingsDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateAccountSettings where
+  hashWithSalt _salt UpdateAccountSettings' {..} =
+    _salt `Prelude.hashWithSalt` capacityLimits
+
+instance Prelude.NFData UpdateAccountSettings where
+  rnf UpdateAccountSettings' {..} =
+    Prelude.rnf capacityLimits
+
+instance Data.ToHeaders UpdateAccountSettings where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.UpdateAccountSettings" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateAccountSettings where
+  toJSON UpdateAccountSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("capacityLimits" Data..=)
+              Prelude.<$> capacityLimits
+          ]
+      )
+
+instance Data.ToPath UpdateAccountSettings where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateAccountSettings where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAccountSettingsResponse' smart constructor.
+data UpdateAccountSettingsResponse = UpdateAccountSettingsResponse'
+  { -- | OpenSearch Serverless-related settings for the current Amazon Web
+    -- Services account.
+    accountSettingsDetail :: Prelude.Maybe AccountSettingsDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAccountSettingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountSettingsDetail', 'updateAccountSettingsResponse_accountSettingsDetail' - OpenSearch Serverless-related settings for the current Amazon Web
+-- Services account.
+--
+-- 'httpStatus', 'updateAccountSettingsResponse_httpStatus' - The response's http status code.
+newUpdateAccountSettingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAccountSettingsResponse
+newUpdateAccountSettingsResponse pHttpStatus_ =
+  UpdateAccountSettingsResponse'
+    { accountSettingsDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | OpenSearch Serverless-related settings for the current Amazon Web
+-- Services account.
+updateAccountSettingsResponse_accountSettingsDetail :: Lens.Lens' UpdateAccountSettingsResponse (Prelude.Maybe AccountSettingsDetail)
+updateAccountSettingsResponse_accountSettingsDetail = Lens.lens (\UpdateAccountSettingsResponse' {accountSettingsDetail} -> accountSettingsDetail) (\s@UpdateAccountSettingsResponse' {} a -> s {accountSettingsDetail = a} :: UpdateAccountSettingsResponse)
+
+-- | The response's http status code.
+updateAccountSettingsResponse_httpStatus :: Lens.Lens' UpdateAccountSettingsResponse Prelude.Int
+updateAccountSettingsResponse_httpStatus = Lens.lens (\UpdateAccountSettingsResponse' {httpStatus} -> httpStatus) (\s@UpdateAccountSettingsResponse' {} a -> s {httpStatus = a} :: UpdateAccountSettingsResponse)
+
+instance Prelude.NFData UpdateAccountSettingsResponse where
+  rnf UpdateAccountSettingsResponse' {..} =
+    Prelude.rnf accountSettingsDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/UpdateCollection.hs b/gen/Amazonka/OpenSearchServerless/UpdateCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/UpdateCollection.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.UpdateCollection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an OpenSearch Serverless collection.
+module Amazonka.OpenSearchServerless.UpdateCollection
+  ( -- * Creating a Request
+    UpdateCollection (..),
+    newUpdateCollection,
+
+    -- * Request Lenses
+    updateCollection_clientToken,
+    updateCollection_description,
+    updateCollection_id,
+
+    -- * Destructuring the Response
+    UpdateCollectionResponse (..),
+    newUpdateCollectionResponse,
+
+    -- * Response Lenses
+    updateCollectionResponse_updateCollectionDetail,
+    updateCollectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateCollection' smart constructor.
+data UpdateCollection = UpdateCollection'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the collection.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier of the collection.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCollection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateCollection_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'description', 'updateCollection_description' - A description of the collection.
+--
+-- 'id', 'updateCollection_id' - The unique identifier of the collection.
+newUpdateCollection ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateCollection
+newUpdateCollection pId_ =
+  UpdateCollection'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+updateCollection_clientToken :: Lens.Lens' UpdateCollection (Prelude.Maybe Prelude.Text)
+updateCollection_clientToken = Lens.lens (\UpdateCollection' {clientToken} -> clientToken) (\s@UpdateCollection' {} a -> s {clientToken = a} :: UpdateCollection)
+
+-- | A description of the collection.
+updateCollection_description :: Lens.Lens' UpdateCollection (Prelude.Maybe Prelude.Text)
+updateCollection_description = Lens.lens (\UpdateCollection' {description} -> description) (\s@UpdateCollection' {} a -> s {description = a} :: UpdateCollection)
+
+-- | The unique identifier of the collection.
+updateCollection_id :: Lens.Lens' UpdateCollection Prelude.Text
+updateCollection_id = Lens.lens (\UpdateCollection' {id} -> id) (\s@UpdateCollection' {} a -> s {id = a} :: UpdateCollection)
+
+instance Core.AWSRequest UpdateCollection where
+  type
+    AWSResponse UpdateCollection =
+      UpdateCollectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateCollectionResponse'
+            Prelude.<$> (x Data..?> "updateCollectionDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateCollection where
+  hashWithSalt _salt UpdateCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateCollection where
+  rnf UpdateCollection' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.UpdateCollection" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCollection where
+  toJSON UpdateCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateCollection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateCollectionResponse' smart constructor.
+data UpdateCollectionResponse = UpdateCollectionResponse'
+  { -- | Details about the updated collection.
+    updateCollectionDetail :: Prelude.Maybe UpdateCollectionDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCollectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'updateCollectionDetail', 'updateCollectionResponse_updateCollectionDetail' - Details about the updated collection.
+--
+-- 'httpStatus', 'updateCollectionResponse_httpStatus' - The response's http status code.
+newUpdateCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateCollectionResponse
+newUpdateCollectionResponse pHttpStatus_ =
+  UpdateCollectionResponse'
+    { updateCollectionDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the updated collection.
+updateCollectionResponse_updateCollectionDetail :: Lens.Lens' UpdateCollectionResponse (Prelude.Maybe UpdateCollectionDetail)
+updateCollectionResponse_updateCollectionDetail = Lens.lens (\UpdateCollectionResponse' {updateCollectionDetail} -> updateCollectionDetail) (\s@UpdateCollectionResponse' {} a -> s {updateCollectionDetail = a} :: UpdateCollectionResponse)
+
+-- | The response's http status code.
+updateCollectionResponse_httpStatus :: Lens.Lens' UpdateCollectionResponse Prelude.Int
+updateCollectionResponse_httpStatus = Lens.lens (\UpdateCollectionResponse' {httpStatus} -> httpStatus) (\s@UpdateCollectionResponse' {} a -> s {httpStatus = a} :: UpdateCollectionResponse)
+
+instance Prelude.NFData UpdateCollectionResponse where
+  rnf UpdateCollectionResponse' {..} =
+    Prelude.rnf updateCollectionDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/UpdateSecurityConfig.hs b/gen/Amazonka/OpenSearchServerless/UpdateSecurityConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/UpdateSecurityConfig.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.UpdateSecurityConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a security configuration for OpenSearch Serverless. For more
+-- information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-saml.html SAML authentication for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.UpdateSecurityConfig
+  ( -- * Creating a Request
+    UpdateSecurityConfig (..),
+    newUpdateSecurityConfig,
+
+    -- * Request Lenses
+    updateSecurityConfig_clientToken,
+    updateSecurityConfig_description,
+    updateSecurityConfig_samlOptions,
+    updateSecurityConfig_configVersion,
+    updateSecurityConfig_id,
+
+    -- * Destructuring the Response
+    UpdateSecurityConfigResponse (..),
+    newUpdateSecurityConfigResponse,
+
+    -- * Response Lenses
+    updateSecurityConfigResponse_securityConfigDetail,
+    updateSecurityConfigResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSecurityConfig' smart constructor.
+data UpdateSecurityConfig = UpdateSecurityConfig'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the security configuration.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | SAML options in in the form of a key-value map.
+    samlOptions :: Prelude.Maybe SamlConfigOptions,
+    -- | The version of the security configuration to be updated. You can find
+    -- the most recent version of a security configuration using the
+    -- @GetSecurityPolicy@ command.
+    configVersion :: Prelude.Text,
+    -- | The security configuration identifier. For SAML the ID will be
+    -- @saml\/\<accountId>\/\<idpProviderName>@. For example,
+    -- @saml\/123456789123\/OKTADev@.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSecurityConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateSecurityConfig_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'description', 'updateSecurityConfig_description' - A description of the security configuration.
+--
+-- 'samlOptions', 'updateSecurityConfig_samlOptions' - SAML options in in the form of a key-value map.
+--
+-- 'configVersion', 'updateSecurityConfig_configVersion' - The version of the security configuration to be updated. You can find
+-- the most recent version of a security configuration using the
+-- @GetSecurityPolicy@ command.
+--
+-- 'id', 'updateSecurityConfig_id' - The security configuration identifier. For SAML the ID will be
+-- @saml\/\<accountId>\/\<idpProviderName>@. For example,
+-- @saml\/123456789123\/OKTADev@.
+newUpdateSecurityConfig ::
+  -- | 'configVersion'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  UpdateSecurityConfig
+newUpdateSecurityConfig pConfigVersion_ pId_ =
+  UpdateSecurityConfig'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      samlOptions = Prelude.Nothing,
+      configVersion = pConfigVersion_,
+      id = pId_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+updateSecurityConfig_clientToken :: Lens.Lens' UpdateSecurityConfig (Prelude.Maybe Prelude.Text)
+updateSecurityConfig_clientToken = Lens.lens (\UpdateSecurityConfig' {clientToken} -> clientToken) (\s@UpdateSecurityConfig' {} a -> s {clientToken = a} :: UpdateSecurityConfig)
+
+-- | A description of the security configuration.
+updateSecurityConfig_description :: Lens.Lens' UpdateSecurityConfig (Prelude.Maybe Prelude.Text)
+updateSecurityConfig_description = Lens.lens (\UpdateSecurityConfig' {description} -> description) (\s@UpdateSecurityConfig' {} a -> s {description = a} :: UpdateSecurityConfig)
+
+-- | SAML options in in the form of a key-value map.
+updateSecurityConfig_samlOptions :: Lens.Lens' UpdateSecurityConfig (Prelude.Maybe SamlConfigOptions)
+updateSecurityConfig_samlOptions = Lens.lens (\UpdateSecurityConfig' {samlOptions} -> samlOptions) (\s@UpdateSecurityConfig' {} a -> s {samlOptions = a} :: UpdateSecurityConfig)
+
+-- | The version of the security configuration to be updated. You can find
+-- the most recent version of a security configuration using the
+-- @GetSecurityPolicy@ command.
+updateSecurityConfig_configVersion :: Lens.Lens' UpdateSecurityConfig Prelude.Text
+updateSecurityConfig_configVersion = Lens.lens (\UpdateSecurityConfig' {configVersion} -> configVersion) (\s@UpdateSecurityConfig' {} a -> s {configVersion = a} :: UpdateSecurityConfig)
+
+-- | The security configuration identifier. For SAML the ID will be
+-- @saml\/\<accountId>\/\<idpProviderName>@. For example,
+-- @saml\/123456789123\/OKTADev@.
+updateSecurityConfig_id :: Lens.Lens' UpdateSecurityConfig Prelude.Text
+updateSecurityConfig_id = Lens.lens (\UpdateSecurityConfig' {id} -> id) (\s@UpdateSecurityConfig' {} a -> s {id = a} :: UpdateSecurityConfig)
+
+instance Core.AWSRequest UpdateSecurityConfig where
+  type
+    AWSResponse UpdateSecurityConfig =
+      UpdateSecurityConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSecurityConfigResponse'
+            Prelude.<$> (x Data..?> "securityConfigDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateSecurityConfig where
+  hashWithSalt _salt UpdateSecurityConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` samlOptions
+      `Prelude.hashWithSalt` configVersion
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateSecurityConfig where
+  rnf UpdateSecurityConfig' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf samlOptions
+      `Prelude.seq` Prelude.rnf configVersion
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateSecurityConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.UpdateSecurityConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSecurityConfig where
+  toJSON UpdateSecurityConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("samlOptions" Data..=) Prelude.<$> samlOptions,
+            Prelude.Just ("configVersion" Data..= configVersion),
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateSecurityConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateSecurityConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSecurityConfigResponse' smart constructor.
+data UpdateSecurityConfigResponse = UpdateSecurityConfigResponse'
+  { -- | Details about the updated security configuration.
+    securityConfigDetail :: Prelude.Maybe SecurityConfigDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSecurityConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityConfigDetail', 'updateSecurityConfigResponse_securityConfigDetail' - Details about the updated security configuration.
+--
+-- 'httpStatus', 'updateSecurityConfigResponse_httpStatus' - The response's http status code.
+newUpdateSecurityConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSecurityConfigResponse
+newUpdateSecurityConfigResponse pHttpStatus_ =
+  UpdateSecurityConfigResponse'
+    { securityConfigDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the updated security configuration.
+updateSecurityConfigResponse_securityConfigDetail :: Lens.Lens' UpdateSecurityConfigResponse (Prelude.Maybe SecurityConfigDetail)
+updateSecurityConfigResponse_securityConfigDetail = Lens.lens (\UpdateSecurityConfigResponse' {securityConfigDetail} -> securityConfigDetail) (\s@UpdateSecurityConfigResponse' {} a -> s {securityConfigDetail = a} :: UpdateSecurityConfigResponse)
+
+-- | The response's http status code.
+updateSecurityConfigResponse_httpStatus :: Lens.Lens' UpdateSecurityConfigResponse Prelude.Int
+updateSecurityConfigResponse_httpStatus = Lens.lens (\UpdateSecurityConfigResponse' {httpStatus} -> httpStatus) (\s@UpdateSecurityConfigResponse' {} a -> s {httpStatus = a} :: UpdateSecurityConfigResponse)
+
+instance Prelude.NFData UpdateSecurityConfigResponse where
+  rnf UpdateSecurityConfigResponse' {..} =
+    Prelude.rnf securityConfigDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/UpdateSecurityPolicy.hs b/gen/Amazonka/OpenSearchServerless/UpdateSecurityPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/UpdateSecurityPolicy.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.OpenSearchServerless.UpdateSecurityPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an OpenSearch Serverless security policy. For more information,
+-- see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-network.html Network access for Amazon OpenSearch Serverless>
+-- and
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-encryption.html Encryption at rest for Amazon OpenSearch Serverless>.
+module Amazonka.OpenSearchServerless.UpdateSecurityPolicy
+  ( -- * Creating a Request
+    UpdateSecurityPolicy (..),
+    newUpdateSecurityPolicy,
+
+    -- * Request Lenses
+    updateSecurityPolicy_clientToken,
+    updateSecurityPolicy_description,
+    updateSecurityPolicy_policy,
+    updateSecurityPolicy_name,
+    updateSecurityPolicy_policyVersion,
+    updateSecurityPolicy_type,
+
+    -- * Destructuring the Response
+    UpdateSecurityPolicyResponse (..),
+    newUpdateSecurityPolicyResponse,
+
+    -- * Response Lenses
+    updateSecurityPolicyResponse_securityPolicyDetail,
+    updateSecurityPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSecurityPolicy' smart constructor.
+data UpdateSecurityPolicy = UpdateSecurityPolicy'
+  { -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the policy. Typically used to store information about
+    -- the permissions defined in the policy.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The JSON policy document to use as the content for the new policy.
+    policy :: Prelude.Maybe Prelude.Text,
+    -- | The name of the policy.
+    name :: Prelude.Text,
+    -- | The version of the policy being updated.
+    policyVersion :: Prelude.Text,
+    -- | The type of access policy.
+    type' :: SecurityPolicyType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSecurityPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateSecurityPolicy_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'description', 'updateSecurityPolicy_description' - A description of the policy. Typically used to store information about
+-- the permissions defined in the policy.
+--
+-- 'policy', 'updateSecurityPolicy_policy' - The JSON policy document to use as the content for the new policy.
+--
+-- 'name', 'updateSecurityPolicy_name' - The name of the policy.
+--
+-- 'policyVersion', 'updateSecurityPolicy_policyVersion' - The version of the policy being updated.
+--
+-- 'type'', 'updateSecurityPolicy_type' - The type of access policy.
+newUpdateSecurityPolicy ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'policyVersion'
+  Prelude.Text ->
+  -- | 'type''
+  SecurityPolicyType ->
+  UpdateSecurityPolicy
+newUpdateSecurityPolicy pName_ pPolicyVersion_ pType_ =
+  UpdateSecurityPolicy'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      policy = Prelude.Nothing,
+      name = pName_,
+      policyVersion = pPolicyVersion_,
+      type' = pType_
+    }
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+updateSecurityPolicy_clientToken :: Lens.Lens' UpdateSecurityPolicy (Prelude.Maybe Prelude.Text)
+updateSecurityPolicy_clientToken = Lens.lens (\UpdateSecurityPolicy' {clientToken} -> clientToken) (\s@UpdateSecurityPolicy' {} a -> s {clientToken = a} :: UpdateSecurityPolicy)
+
+-- | A description of the policy. Typically used to store information about
+-- the permissions defined in the policy.
+updateSecurityPolicy_description :: Lens.Lens' UpdateSecurityPolicy (Prelude.Maybe Prelude.Text)
+updateSecurityPolicy_description = Lens.lens (\UpdateSecurityPolicy' {description} -> description) (\s@UpdateSecurityPolicy' {} a -> s {description = a} :: UpdateSecurityPolicy)
+
+-- | The JSON policy document to use as the content for the new policy.
+updateSecurityPolicy_policy :: Lens.Lens' UpdateSecurityPolicy (Prelude.Maybe Prelude.Text)
+updateSecurityPolicy_policy = Lens.lens (\UpdateSecurityPolicy' {policy} -> policy) (\s@UpdateSecurityPolicy' {} a -> s {policy = a} :: UpdateSecurityPolicy)
+
+-- | The name of the policy.
+updateSecurityPolicy_name :: Lens.Lens' UpdateSecurityPolicy Prelude.Text
+updateSecurityPolicy_name = Lens.lens (\UpdateSecurityPolicy' {name} -> name) (\s@UpdateSecurityPolicy' {} a -> s {name = a} :: UpdateSecurityPolicy)
+
+-- | The version of the policy being updated.
+updateSecurityPolicy_policyVersion :: Lens.Lens' UpdateSecurityPolicy Prelude.Text
+updateSecurityPolicy_policyVersion = Lens.lens (\UpdateSecurityPolicy' {policyVersion} -> policyVersion) (\s@UpdateSecurityPolicy' {} a -> s {policyVersion = a} :: UpdateSecurityPolicy)
+
+-- | The type of access policy.
+updateSecurityPolicy_type :: Lens.Lens' UpdateSecurityPolicy SecurityPolicyType
+updateSecurityPolicy_type = Lens.lens (\UpdateSecurityPolicy' {type'} -> type') (\s@UpdateSecurityPolicy' {} a -> s {type' = a} :: UpdateSecurityPolicy)
+
+instance Core.AWSRequest UpdateSecurityPolicy where
+  type
+    AWSResponse UpdateSecurityPolicy =
+      UpdateSecurityPolicyResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateSecurityPolicyResponse'
+            Prelude.<$> (x Data..?> "securityPolicyDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateSecurityPolicy where
+  hashWithSalt _salt UpdateSecurityPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` policy
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` policyVersion
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData UpdateSecurityPolicy where
+  rnf UpdateSecurityPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf policy
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf policyVersion
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders UpdateSecurityPolicy where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.UpdateSecurityPolicy" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateSecurityPolicy where
+  toJSON UpdateSecurityPolicy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("policy" Data..=) Prelude.<$> policy,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("policyVersion" Data..= policyVersion),
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
+
+instance Data.ToPath UpdateSecurityPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateSecurityPolicy where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateSecurityPolicyResponse' smart constructor.
+data UpdateSecurityPolicyResponse = UpdateSecurityPolicyResponse'
+  { -- | Details about the updated security policy.
+    securityPolicyDetail :: Prelude.Maybe SecurityPolicyDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSecurityPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityPolicyDetail', 'updateSecurityPolicyResponse_securityPolicyDetail' - Details about the updated security policy.
+--
+-- 'httpStatus', 'updateSecurityPolicyResponse_httpStatus' - The response's http status code.
+newUpdateSecurityPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSecurityPolicyResponse
+newUpdateSecurityPolicyResponse pHttpStatus_ =
+  UpdateSecurityPolicyResponse'
+    { securityPolicyDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the updated security policy.
+updateSecurityPolicyResponse_securityPolicyDetail :: Lens.Lens' UpdateSecurityPolicyResponse (Prelude.Maybe SecurityPolicyDetail)
+updateSecurityPolicyResponse_securityPolicyDetail = Lens.lens (\UpdateSecurityPolicyResponse' {securityPolicyDetail} -> securityPolicyDetail) (\s@UpdateSecurityPolicyResponse' {} a -> s {securityPolicyDetail = a} :: UpdateSecurityPolicyResponse)
+
+-- | The response's http status code.
+updateSecurityPolicyResponse_httpStatus :: Lens.Lens' UpdateSecurityPolicyResponse Prelude.Int
+updateSecurityPolicyResponse_httpStatus = Lens.lens (\UpdateSecurityPolicyResponse' {httpStatus} -> httpStatus) (\s@UpdateSecurityPolicyResponse' {} a -> s {httpStatus = a} :: UpdateSecurityPolicyResponse)
+
+instance Prelude.NFData UpdateSecurityPolicyResponse where
+  rnf UpdateSecurityPolicyResponse' {..} =
+    Prelude.rnf securityPolicyDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/UpdateVpcEndpoint.hs b/gen/Amazonka/OpenSearchServerless/UpdateVpcEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/UpdateVpcEndpoint.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.OpenSearchServerless.UpdateVpcEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an OpenSearch Serverless-managed interface endpoint. For more
+-- information, see
+-- <https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-vpc.html Access Amazon OpenSearch Serverless using an interface endpoint>.
+module Amazonka.OpenSearchServerless.UpdateVpcEndpoint
+  ( -- * Creating a Request
+    UpdateVpcEndpoint (..),
+    newUpdateVpcEndpoint,
+
+    -- * Request Lenses
+    updateVpcEndpoint_addSecurityGroupIds,
+    updateVpcEndpoint_addSubnetIds,
+    updateVpcEndpoint_clientToken,
+    updateVpcEndpoint_removeSecurityGroupIds,
+    updateVpcEndpoint_removeSubnetIds,
+    updateVpcEndpoint_id,
+
+    -- * Destructuring the Response
+    UpdateVpcEndpointResponse (..),
+    newUpdateVpcEndpointResponse,
+
+    -- * Response Lenses
+    updateVpcEndpointResponse_updateVpcEndpointDetail,
+    updateVpcEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateVpcEndpoint' smart constructor.
+data UpdateVpcEndpoint = UpdateVpcEndpoint'
+  { -- | The unique identifiers of the security groups to add to the endpoint.
+    -- Security groups define the ports, protocols, and sources for inbound
+    -- traffic that you are authorizing into your endpoint.
+    addSecurityGroupIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The ID of one or more subnets to add to the endpoint.
+    addSubnetIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Unique, case-sensitive identifier to ensure idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifiers of the security groups to remove from the
+    -- endpoint.
+    removeSecurityGroupIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The unique identifiers of the subnets to remove from the endpoint.
+    removeSubnetIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The unique identifier of the interface endpoint to update.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVpcEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addSecurityGroupIds', 'updateVpcEndpoint_addSecurityGroupIds' - The unique identifiers of the security groups to add to the endpoint.
+-- Security groups define the ports, protocols, and sources for inbound
+-- traffic that you are authorizing into your endpoint.
+--
+-- 'addSubnetIds', 'updateVpcEndpoint_addSubnetIds' - The ID of one or more subnets to add to the endpoint.
+--
+-- 'clientToken', 'updateVpcEndpoint_clientToken' - Unique, case-sensitive identifier to ensure idempotency of the request.
+--
+-- 'removeSecurityGroupIds', 'updateVpcEndpoint_removeSecurityGroupIds' - The unique identifiers of the security groups to remove from the
+-- endpoint.
+--
+-- 'removeSubnetIds', 'updateVpcEndpoint_removeSubnetIds' - The unique identifiers of the subnets to remove from the endpoint.
+--
+-- 'id', 'updateVpcEndpoint_id' - The unique identifier of the interface endpoint to update.
+newUpdateVpcEndpoint ::
+  -- | 'id'
+  Prelude.Text ->
+  UpdateVpcEndpoint
+newUpdateVpcEndpoint pId_ =
+  UpdateVpcEndpoint'
+    { addSecurityGroupIds =
+        Prelude.Nothing,
+      addSubnetIds = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      removeSecurityGroupIds = Prelude.Nothing,
+      removeSubnetIds = Prelude.Nothing,
+      id = pId_
+    }
+
+-- | The unique identifiers of the security groups to add to the endpoint.
+-- Security groups define the ports, protocols, and sources for inbound
+-- traffic that you are authorizing into your endpoint.
+updateVpcEndpoint_addSecurityGroupIds :: Lens.Lens' UpdateVpcEndpoint (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateVpcEndpoint_addSecurityGroupIds = Lens.lens (\UpdateVpcEndpoint' {addSecurityGroupIds} -> addSecurityGroupIds) (\s@UpdateVpcEndpoint' {} a -> s {addSecurityGroupIds = a} :: UpdateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of one or more subnets to add to the endpoint.
+updateVpcEndpoint_addSubnetIds :: Lens.Lens' UpdateVpcEndpoint (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateVpcEndpoint_addSubnetIds = Lens.lens (\UpdateVpcEndpoint' {addSubnetIds} -> addSubnetIds) (\s@UpdateVpcEndpoint' {} a -> s {addSubnetIds = a} :: UpdateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | Unique, case-sensitive identifier to ensure idempotency of the request.
+updateVpcEndpoint_clientToken :: Lens.Lens' UpdateVpcEndpoint (Prelude.Maybe Prelude.Text)
+updateVpcEndpoint_clientToken = Lens.lens (\UpdateVpcEndpoint' {clientToken} -> clientToken) (\s@UpdateVpcEndpoint' {} a -> s {clientToken = a} :: UpdateVpcEndpoint)
+
+-- | The unique identifiers of the security groups to remove from the
+-- endpoint.
+updateVpcEndpoint_removeSecurityGroupIds :: Lens.Lens' UpdateVpcEndpoint (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateVpcEndpoint_removeSecurityGroupIds = Lens.lens (\UpdateVpcEndpoint' {removeSecurityGroupIds} -> removeSecurityGroupIds) (\s@UpdateVpcEndpoint' {} a -> s {removeSecurityGroupIds = a} :: UpdateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifiers of the subnets to remove from the endpoint.
+updateVpcEndpoint_removeSubnetIds :: Lens.Lens' UpdateVpcEndpoint (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateVpcEndpoint_removeSubnetIds = Lens.lens (\UpdateVpcEndpoint' {removeSubnetIds} -> removeSubnetIds) (\s@UpdateVpcEndpoint' {} a -> s {removeSubnetIds = a} :: UpdateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique identifier of the interface endpoint to update.
+updateVpcEndpoint_id :: Lens.Lens' UpdateVpcEndpoint Prelude.Text
+updateVpcEndpoint_id = Lens.lens (\UpdateVpcEndpoint' {id} -> id) (\s@UpdateVpcEndpoint' {} a -> s {id = a} :: UpdateVpcEndpoint)
+
+instance Core.AWSRequest UpdateVpcEndpoint where
+  type
+    AWSResponse UpdateVpcEndpoint =
+      UpdateVpcEndpointResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateVpcEndpointResponse'
+            Prelude.<$> (x Data..?> "UpdateVpcEndpointDetail")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateVpcEndpoint where
+  hashWithSalt _salt UpdateVpcEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` addSecurityGroupIds
+      `Prelude.hashWithSalt` addSubnetIds
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` removeSecurityGroupIds
+      `Prelude.hashWithSalt` removeSubnetIds
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData UpdateVpcEndpoint where
+  rnf UpdateVpcEndpoint' {..} =
+    Prelude.rnf addSecurityGroupIds
+      `Prelude.seq` Prelude.rnf addSubnetIds
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf removeSecurityGroupIds
+      `Prelude.seq` Prelude.rnf removeSubnetIds
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders UpdateVpcEndpoint where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "OpenSearchServerless.UpdateVpcEndpoint" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.0" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateVpcEndpoint where
+  toJSON UpdateVpcEndpoint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("addSecurityGroupIds" Data..=)
+              Prelude.<$> addSecurityGroupIds,
+            ("addSubnetIds" Data..=) Prelude.<$> addSubnetIds,
+            ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("removeSecurityGroupIds" Data..=)
+              Prelude.<$> removeSecurityGroupIds,
+            ("removeSubnetIds" Data..=)
+              Prelude.<$> removeSubnetIds,
+            Prelude.Just ("id" Data..= id)
+          ]
+      )
+
+instance Data.ToPath UpdateVpcEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateVpcEndpoint where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateVpcEndpointResponse' smart constructor.
+data UpdateVpcEndpointResponse = UpdateVpcEndpointResponse'
+  { -- | Details about the updated VPC endpoint.
+    updateVpcEndpointDetail :: Prelude.Maybe UpdateVpcEndpointDetail,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateVpcEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'updateVpcEndpointDetail', 'updateVpcEndpointResponse_updateVpcEndpointDetail' - Details about the updated VPC endpoint.
+--
+-- 'httpStatus', 'updateVpcEndpointResponse_httpStatus' - The response's http status code.
+newUpdateVpcEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateVpcEndpointResponse
+newUpdateVpcEndpointResponse pHttpStatus_ =
+  UpdateVpcEndpointResponse'
+    { updateVpcEndpointDetail =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the updated VPC endpoint.
+updateVpcEndpointResponse_updateVpcEndpointDetail :: Lens.Lens' UpdateVpcEndpointResponse (Prelude.Maybe UpdateVpcEndpointDetail)
+updateVpcEndpointResponse_updateVpcEndpointDetail = Lens.lens (\UpdateVpcEndpointResponse' {updateVpcEndpointDetail} -> updateVpcEndpointDetail) (\s@UpdateVpcEndpointResponse' {} a -> s {updateVpcEndpointDetail = a} :: UpdateVpcEndpointResponse)
+
+-- | The response's http status code.
+updateVpcEndpointResponse_httpStatus :: Lens.Lens' UpdateVpcEndpointResponse Prelude.Int
+updateVpcEndpointResponse_httpStatus = Lens.lens (\UpdateVpcEndpointResponse' {httpStatus} -> httpStatus) (\s@UpdateVpcEndpointResponse' {} a -> s {httpStatus = a} :: UpdateVpcEndpointResponse)
+
+instance Prelude.NFData UpdateVpcEndpointResponse where
+  rnf UpdateVpcEndpointResponse' {..} =
+    Prelude.rnf updateVpcEndpointDetail
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/OpenSearchServerless/Waiters.hs b/gen/Amazonka/OpenSearchServerless/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/OpenSearchServerless/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.OpenSearchServerless.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.OpenSearchServerless.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.OpenSearchServerless.Lens
+import Amazonka.OpenSearchServerless.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.OpenSearchServerless
+import Test.Amazonka.OpenSearchServerless.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "OpenSearchServerless"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/OpenSearchServerless.hs b/test/Test/Amazonka/Gen/OpenSearchServerless.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/OpenSearchServerless.hs
@@ -0,0 +1,658 @@
+{-# 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.OpenSearchServerless
+-- Copyright   : (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.OpenSearchServerless where
+
+import Amazonka.OpenSearchServerless
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.OpenSearchServerless.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestBatchGetCollection $
+--             newBatchGetCollection
+--
+--         , requestBatchGetVpcEndpoint $
+--             newBatchGetVpcEndpoint
+--
+--         , requestCreateAccessPolicy $
+--             newCreateAccessPolicy
+--
+--         , requestCreateCollection $
+--             newCreateCollection
+--
+--         , requestCreateSecurityConfig $
+--             newCreateSecurityConfig
+--
+--         , requestCreateSecurityPolicy $
+--             newCreateSecurityPolicy
+--
+--         , requestCreateVpcEndpoint $
+--             newCreateVpcEndpoint
+--
+--         , requestDeleteAccessPolicy $
+--             newDeleteAccessPolicy
+--
+--         , requestDeleteCollection $
+--             newDeleteCollection
+--
+--         , requestDeleteSecurityConfig $
+--             newDeleteSecurityConfig
+--
+--         , requestDeleteSecurityPolicy $
+--             newDeleteSecurityPolicy
+--
+--         , requestDeleteVpcEndpoint $
+--             newDeleteVpcEndpoint
+--
+--         , requestGetAccessPolicy $
+--             newGetAccessPolicy
+--
+--         , requestGetAccountSettings $
+--             newGetAccountSettings
+--
+--         , requestGetPoliciesStats $
+--             newGetPoliciesStats
+--
+--         , requestGetSecurityConfig $
+--             newGetSecurityConfig
+--
+--         , requestGetSecurityPolicy $
+--             newGetSecurityPolicy
+--
+--         , requestListAccessPolicies $
+--             newListAccessPolicies
+--
+--         , requestListCollections $
+--             newListCollections
+--
+--         , requestListSecurityConfigs $
+--             newListSecurityConfigs
+--
+--         , requestListSecurityPolicies $
+--             newListSecurityPolicies
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListVpcEndpoints $
+--             newListVpcEndpoints
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateAccessPolicy $
+--             newUpdateAccessPolicy
+--
+--         , requestUpdateAccountSettings $
+--             newUpdateAccountSettings
+--
+--         , requestUpdateCollection $
+--             newUpdateCollection
+--
+--         , requestUpdateSecurityConfig $
+--             newUpdateSecurityConfig
+--
+--         , requestUpdateSecurityPolicy $
+--             newUpdateSecurityPolicy
+--
+--         , requestUpdateVpcEndpoint $
+--             newUpdateVpcEndpoint
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchGetCollection $
+--             newBatchGetCollectionResponse
+--
+--         , responseBatchGetVpcEndpoint $
+--             newBatchGetVpcEndpointResponse
+--
+--         , responseCreateAccessPolicy $
+--             newCreateAccessPolicyResponse
+--
+--         , responseCreateCollection $
+--             newCreateCollectionResponse
+--
+--         , responseCreateSecurityConfig $
+--             newCreateSecurityConfigResponse
+--
+--         , responseCreateSecurityPolicy $
+--             newCreateSecurityPolicyResponse
+--
+--         , responseCreateVpcEndpoint $
+--             newCreateVpcEndpointResponse
+--
+--         , responseDeleteAccessPolicy $
+--             newDeleteAccessPolicyResponse
+--
+--         , responseDeleteCollection $
+--             newDeleteCollectionResponse
+--
+--         , responseDeleteSecurityConfig $
+--             newDeleteSecurityConfigResponse
+--
+--         , responseDeleteSecurityPolicy $
+--             newDeleteSecurityPolicyResponse
+--
+--         , responseDeleteVpcEndpoint $
+--             newDeleteVpcEndpointResponse
+--
+--         , responseGetAccessPolicy $
+--             newGetAccessPolicyResponse
+--
+--         , responseGetAccountSettings $
+--             newGetAccountSettingsResponse
+--
+--         , responseGetPoliciesStats $
+--             newGetPoliciesStatsResponse
+--
+--         , responseGetSecurityConfig $
+--             newGetSecurityConfigResponse
+--
+--         , responseGetSecurityPolicy $
+--             newGetSecurityPolicyResponse
+--
+--         , responseListAccessPolicies $
+--             newListAccessPoliciesResponse
+--
+--         , responseListCollections $
+--             newListCollectionsResponse
+--
+--         , responseListSecurityConfigs $
+--             newListSecurityConfigsResponse
+--
+--         , responseListSecurityPolicies $
+--             newListSecurityPoliciesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListVpcEndpoints $
+--             newListVpcEndpointsResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateAccessPolicy $
+--             newUpdateAccessPolicyResponse
+--
+--         , responseUpdateAccountSettings $
+--             newUpdateAccountSettingsResponse
+--
+--         , responseUpdateCollection $
+--             newUpdateCollectionResponse
+--
+--         , responseUpdateSecurityConfig $
+--             newUpdateSecurityConfigResponse
+--
+--         , responseUpdateSecurityPolicy $
+--             newUpdateSecurityPolicyResponse
+--
+--         , responseUpdateVpcEndpoint $
+--             newUpdateVpcEndpointResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchGetCollection :: BatchGetCollection -> TestTree
+requestBatchGetCollection =
+  req
+    "BatchGetCollection"
+    "fixture/BatchGetCollection.yaml"
+
+requestBatchGetVpcEndpoint :: BatchGetVpcEndpoint -> TestTree
+requestBatchGetVpcEndpoint =
+  req
+    "BatchGetVpcEndpoint"
+    "fixture/BatchGetVpcEndpoint.yaml"
+
+requestCreateAccessPolicy :: CreateAccessPolicy -> TestTree
+requestCreateAccessPolicy =
+  req
+    "CreateAccessPolicy"
+    "fixture/CreateAccessPolicy.yaml"
+
+requestCreateCollection :: CreateCollection -> TestTree
+requestCreateCollection =
+  req
+    "CreateCollection"
+    "fixture/CreateCollection.yaml"
+
+requestCreateSecurityConfig :: CreateSecurityConfig -> TestTree
+requestCreateSecurityConfig =
+  req
+    "CreateSecurityConfig"
+    "fixture/CreateSecurityConfig.yaml"
+
+requestCreateSecurityPolicy :: CreateSecurityPolicy -> TestTree
+requestCreateSecurityPolicy =
+  req
+    "CreateSecurityPolicy"
+    "fixture/CreateSecurityPolicy.yaml"
+
+requestCreateVpcEndpoint :: CreateVpcEndpoint -> TestTree
+requestCreateVpcEndpoint =
+  req
+    "CreateVpcEndpoint"
+    "fixture/CreateVpcEndpoint.yaml"
+
+requestDeleteAccessPolicy :: DeleteAccessPolicy -> TestTree
+requestDeleteAccessPolicy =
+  req
+    "DeleteAccessPolicy"
+    "fixture/DeleteAccessPolicy.yaml"
+
+requestDeleteCollection :: DeleteCollection -> TestTree
+requestDeleteCollection =
+  req
+    "DeleteCollection"
+    "fixture/DeleteCollection.yaml"
+
+requestDeleteSecurityConfig :: DeleteSecurityConfig -> TestTree
+requestDeleteSecurityConfig =
+  req
+    "DeleteSecurityConfig"
+    "fixture/DeleteSecurityConfig.yaml"
+
+requestDeleteSecurityPolicy :: DeleteSecurityPolicy -> TestTree
+requestDeleteSecurityPolicy =
+  req
+    "DeleteSecurityPolicy"
+    "fixture/DeleteSecurityPolicy.yaml"
+
+requestDeleteVpcEndpoint :: DeleteVpcEndpoint -> TestTree
+requestDeleteVpcEndpoint =
+  req
+    "DeleteVpcEndpoint"
+    "fixture/DeleteVpcEndpoint.yaml"
+
+requestGetAccessPolicy :: GetAccessPolicy -> TestTree
+requestGetAccessPolicy =
+  req
+    "GetAccessPolicy"
+    "fixture/GetAccessPolicy.yaml"
+
+requestGetAccountSettings :: GetAccountSettings -> TestTree
+requestGetAccountSettings =
+  req
+    "GetAccountSettings"
+    "fixture/GetAccountSettings.yaml"
+
+requestGetPoliciesStats :: GetPoliciesStats -> TestTree
+requestGetPoliciesStats =
+  req
+    "GetPoliciesStats"
+    "fixture/GetPoliciesStats.yaml"
+
+requestGetSecurityConfig :: GetSecurityConfig -> TestTree
+requestGetSecurityConfig =
+  req
+    "GetSecurityConfig"
+    "fixture/GetSecurityConfig.yaml"
+
+requestGetSecurityPolicy :: GetSecurityPolicy -> TestTree
+requestGetSecurityPolicy =
+  req
+    "GetSecurityPolicy"
+    "fixture/GetSecurityPolicy.yaml"
+
+requestListAccessPolicies :: ListAccessPolicies -> TestTree
+requestListAccessPolicies =
+  req
+    "ListAccessPolicies"
+    "fixture/ListAccessPolicies.yaml"
+
+requestListCollections :: ListCollections -> TestTree
+requestListCollections =
+  req
+    "ListCollections"
+    "fixture/ListCollections.yaml"
+
+requestListSecurityConfigs :: ListSecurityConfigs -> TestTree
+requestListSecurityConfigs =
+  req
+    "ListSecurityConfigs"
+    "fixture/ListSecurityConfigs.yaml"
+
+requestListSecurityPolicies :: ListSecurityPolicies -> TestTree
+requestListSecurityPolicies =
+  req
+    "ListSecurityPolicies"
+    "fixture/ListSecurityPolicies.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListVpcEndpoints :: ListVpcEndpoints -> TestTree
+requestListVpcEndpoints =
+  req
+    "ListVpcEndpoints"
+    "fixture/ListVpcEndpoints.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateAccessPolicy :: UpdateAccessPolicy -> TestTree
+requestUpdateAccessPolicy =
+  req
+    "UpdateAccessPolicy"
+    "fixture/UpdateAccessPolicy.yaml"
+
+requestUpdateAccountSettings :: UpdateAccountSettings -> TestTree
+requestUpdateAccountSettings =
+  req
+    "UpdateAccountSettings"
+    "fixture/UpdateAccountSettings.yaml"
+
+requestUpdateCollection :: UpdateCollection -> TestTree
+requestUpdateCollection =
+  req
+    "UpdateCollection"
+    "fixture/UpdateCollection.yaml"
+
+requestUpdateSecurityConfig :: UpdateSecurityConfig -> TestTree
+requestUpdateSecurityConfig =
+  req
+    "UpdateSecurityConfig"
+    "fixture/UpdateSecurityConfig.yaml"
+
+requestUpdateSecurityPolicy :: UpdateSecurityPolicy -> TestTree
+requestUpdateSecurityPolicy =
+  req
+    "UpdateSecurityPolicy"
+    "fixture/UpdateSecurityPolicy.yaml"
+
+requestUpdateVpcEndpoint :: UpdateVpcEndpoint -> TestTree
+requestUpdateVpcEndpoint =
+  req
+    "UpdateVpcEndpoint"
+    "fixture/UpdateVpcEndpoint.yaml"
+
+-- Responses
+
+responseBatchGetCollection :: BatchGetCollectionResponse -> TestTree
+responseBatchGetCollection =
+  res
+    "BatchGetCollectionResponse"
+    "fixture/BatchGetCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchGetCollection)
+
+responseBatchGetVpcEndpoint :: BatchGetVpcEndpointResponse -> TestTree
+responseBatchGetVpcEndpoint =
+  res
+    "BatchGetVpcEndpointResponse"
+    "fixture/BatchGetVpcEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchGetVpcEndpoint)
+
+responseCreateAccessPolicy :: CreateAccessPolicyResponse -> TestTree
+responseCreateAccessPolicy =
+  res
+    "CreateAccessPolicyResponse"
+    "fixture/CreateAccessPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAccessPolicy)
+
+responseCreateCollection :: CreateCollectionResponse -> TestTree
+responseCreateCollection =
+  res
+    "CreateCollectionResponse"
+    "fixture/CreateCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCollection)
+
+responseCreateSecurityConfig :: CreateSecurityConfigResponse -> TestTree
+responseCreateSecurityConfig =
+  res
+    "CreateSecurityConfigResponse"
+    "fixture/CreateSecurityConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSecurityConfig)
+
+responseCreateSecurityPolicy :: CreateSecurityPolicyResponse -> TestTree
+responseCreateSecurityPolicy =
+  res
+    "CreateSecurityPolicyResponse"
+    "fixture/CreateSecurityPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSecurityPolicy)
+
+responseCreateVpcEndpoint :: CreateVpcEndpointResponse -> TestTree
+responseCreateVpcEndpoint =
+  res
+    "CreateVpcEndpointResponse"
+    "fixture/CreateVpcEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpcEndpoint)
+
+responseDeleteAccessPolicy :: DeleteAccessPolicyResponse -> TestTree
+responseDeleteAccessPolicy =
+  res
+    "DeleteAccessPolicyResponse"
+    "fixture/DeleteAccessPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAccessPolicy)
+
+responseDeleteCollection :: DeleteCollectionResponse -> TestTree
+responseDeleteCollection =
+  res
+    "DeleteCollectionResponse"
+    "fixture/DeleteCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCollection)
+
+responseDeleteSecurityConfig :: DeleteSecurityConfigResponse -> TestTree
+responseDeleteSecurityConfig =
+  res
+    "DeleteSecurityConfigResponse"
+    "fixture/DeleteSecurityConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSecurityConfig)
+
+responseDeleteSecurityPolicy :: DeleteSecurityPolicyResponse -> TestTree
+responseDeleteSecurityPolicy =
+  res
+    "DeleteSecurityPolicyResponse"
+    "fixture/DeleteSecurityPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSecurityPolicy)
+
+responseDeleteVpcEndpoint :: DeleteVpcEndpointResponse -> TestTree
+responseDeleteVpcEndpoint =
+  res
+    "DeleteVpcEndpointResponse"
+    "fixture/DeleteVpcEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpcEndpoint)
+
+responseGetAccessPolicy :: GetAccessPolicyResponse -> TestTree
+responseGetAccessPolicy =
+  res
+    "GetAccessPolicyResponse"
+    "fixture/GetAccessPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAccessPolicy)
+
+responseGetAccountSettings :: GetAccountSettingsResponse -> TestTree
+responseGetAccountSettings =
+  res
+    "GetAccountSettingsResponse"
+    "fixture/GetAccountSettingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAccountSettings)
+
+responseGetPoliciesStats :: GetPoliciesStatsResponse -> TestTree
+responseGetPoliciesStats =
+  res
+    "GetPoliciesStatsResponse"
+    "fixture/GetPoliciesStatsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPoliciesStats)
+
+responseGetSecurityConfig :: GetSecurityConfigResponse -> TestTree
+responseGetSecurityConfig =
+  res
+    "GetSecurityConfigResponse"
+    "fixture/GetSecurityConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSecurityConfig)
+
+responseGetSecurityPolicy :: GetSecurityPolicyResponse -> TestTree
+responseGetSecurityPolicy =
+  res
+    "GetSecurityPolicyResponse"
+    "fixture/GetSecurityPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSecurityPolicy)
+
+responseListAccessPolicies :: ListAccessPoliciesResponse -> TestTree
+responseListAccessPolicies =
+  res
+    "ListAccessPoliciesResponse"
+    "fixture/ListAccessPoliciesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAccessPolicies)
+
+responseListCollections :: ListCollectionsResponse -> TestTree
+responseListCollections =
+  res
+    "ListCollectionsResponse"
+    "fixture/ListCollectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCollections)
+
+responseListSecurityConfigs :: ListSecurityConfigsResponse -> TestTree
+responseListSecurityConfigs =
+  res
+    "ListSecurityConfigsResponse"
+    "fixture/ListSecurityConfigsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSecurityConfigs)
+
+responseListSecurityPolicies :: ListSecurityPoliciesResponse -> TestTree
+responseListSecurityPolicies =
+  res
+    "ListSecurityPoliciesResponse"
+    "fixture/ListSecurityPoliciesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSecurityPolicies)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListVpcEndpoints :: ListVpcEndpointsResponse -> TestTree
+responseListVpcEndpoints =
+  res
+    "ListVpcEndpointsResponse"
+    "fixture/ListVpcEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListVpcEndpoints)
+
+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)
+
+responseUpdateAccessPolicy :: UpdateAccessPolicyResponse -> TestTree
+responseUpdateAccessPolicy =
+  res
+    "UpdateAccessPolicyResponse"
+    "fixture/UpdateAccessPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAccessPolicy)
+
+responseUpdateAccountSettings :: UpdateAccountSettingsResponse -> TestTree
+responseUpdateAccountSettings =
+  res
+    "UpdateAccountSettingsResponse"
+    "fixture/UpdateAccountSettingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateAccountSettings)
+
+responseUpdateCollection :: UpdateCollectionResponse -> TestTree
+responseUpdateCollection =
+  res
+    "UpdateCollectionResponse"
+    "fixture/UpdateCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCollection)
+
+responseUpdateSecurityConfig :: UpdateSecurityConfigResponse -> TestTree
+responseUpdateSecurityConfig =
+  res
+    "UpdateSecurityConfigResponse"
+    "fixture/UpdateSecurityConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSecurityConfig)
+
+responseUpdateSecurityPolicy :: UpdateSecurityPolicyResponse -> TestTree
+responseUpdateSecurityPolicy =
+  res
+    "UpdateSecurityPolicyResponse"
+    "fixture/UpdateSecurityPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSecurityPolicy)
+
+responseUpdateVpcEndpoint :: UpdateVpcEndpointResponse -> TestTree
+responseUpdateVpcEndpoint =
+  res
+    "UpdateVpcEndpointResponse"
+    "fixture/UpdateVpcEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateVpcEndpoint)
diff --git a/test/Test/Amazonka/OpenSearchServerless.hs b/test/Test/Amazonka/OpenSearchServerless.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/OpenSearchServerless.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.OpenSearchServerless
+-- Copyright   : (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.OpenSearchServerless
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/OpenSearchServerless/Internal.hs b/test/Test/Amazonka/OpenSearchServerless/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/OpenSearchServerless/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.OpenSearchServerless.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.OpenSearchServerless.Internal where
