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 Location Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2020-11-19@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-location)
+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.Location](http://hackage.haskell.org/package/amazonka-location/docs/Amazonka-Location.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-location` 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-location.cabal b/amazonka-location.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-location.cabal
@@ -0,0 +1,188 @@
+cabal-version:      2.2
+name:               amazonka-location
+version:            2.0
+synopsis:           Amazon Location Service SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2020-11-19@ 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.Location.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.Location" 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-location
+
+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.Location
+    Amazonka.Location.AssociateTrackerConsumer
+    Amazonka.Location.BatchDeleteDevicePositionHistory
+    Amazonka.Location.BatchDeleteGeofence
+    Amazonka.Location.BatchEvaluateGeofences
+    Amazonka.Location.BatchGetDevicePosition
+    Amazonka.Location.BatchPutGeofence
+    Amazonka.Location.BatchUpdateDevicePosition
+    Amazonka.Location.CalculateRoute
+    Amazonka.Location.CalculateRouteMatrix
+    Amazonka.Location.CreateGeofenceCollection
+    Amazonka.Location.CreateMap
+    Amazonka.Location.CreatePlaceIndex
+    Amazonka.Location.CreateRouteCalculator
+    Amazonka.Location.CreateTracker
+    Amazonka.Location.DeleteGeofenceCollection
+    Amazonka.Location.DeleteMap
+    Amazonka.Location.DeletePlaceIndex
+    Amazonka.Location.DeleteRouteCalculator
+    Amazonka.Location.DeleteTracker
+    Amazonka.Location.DescribeGeofenceCollection
+    Amazonka.Location.DescribeMap
+    Amazonka.Location.DescribePlaceIndex
+    Amazonka.Location.DescribeRouteCalculator
+    Amazonka.Location.DescribeTracker
+    Amazonka.Location.DisassociateTrackerConsumer
+    Amazonka.Location.GetDevicePosition
+    Amazonka.Location.GetDevicePositionHistory
+    Amazonka.Location.GetGeofence
+    Amazonka.Location.GetMapGlyphs
+    Amazonka.Location.GetMapSprites
+    Amazonka.Location.GetMapStyleDescriptor
+    Amazonka.Location.GetMapTile
+    Amazonka.Location.GetPlace
+    Amazonka.Location.Lens
+    Amazonka.Location.ListDevicePositions
+    Amazonka.Location.ListGeofenceCollections
+    Amazonka.Location.ListGeofences
+    Amazonka.Location.ListMaps
+    Amazonka.Location.ListPlaceIndexes
+    Amazonka.Location.ListRouteCalculators
+    Amazonka.Location.ListTagsForResource
+    Amazonka.Location.ListTrackerConsumers
+    Amazonka.Location.ListTrackers
+    Amazonka.Location.PutGeofence
+    Amazonka.Location.SearchPlaceIndexForPosition
+    Amazonka.Location.SearchPlaceIndexForSuggestions
+    Amazonka.Location.SearchPlaceIndexForText
+    Amazonka.Location.TagResource
+    Amazonka.Location.Types
+    Amazonka.Location.Types.BatchDeleteDevicePositionHistoryError
+    Amazonka.Location.Types.BatchDeleteGeofenceError
+    Amazonka.Location.Types.BatchEvaluateGeofencesError
+    Amazonka.Location.Types.BatchGetDevicePositionError
+    Amazonka.Location.Types.BatchItemError
+    Amazonka.Location.Types.BatchItemErrorCode
+    Amazonka.Location.Types.BatchPutGeofenceError
+    Amazonka.Location.Types.BatchPutGeofenceRequestEntry
+    Amazonka.Location.Types.BatchPutGeofenceSuccess
+    Amazonka.Location.Types.BatchUpdateDevicePositionError
+    Amazonka.Location.Types.CalculateRouteCarModeOptions
+    Amazonka.Location.Types.CalculateRouteMatrixSummary
+    Amazonka.Location.Types.CalculateRouteSummary
+    Amazonka.Location.Types.CalculateRouteTruckModeOptions
+    Amazonka.Location.Types.Circle
+    Amazonka.Location.Types.DataSourceConfiguration
+    Amazonka.Location.Types.DevicePosition
+    Amazonka.Location.Types.DevicePositionUpdate
+    Amazonka.Location.Types.DimensionUnit
+    Amazonka.Location.Types.DistanceUnit
+    Amazonka.Location.Types.GeofenceGeometry
+    Amazonka.Location.Types.IntendedUse
+    Amazonka.Location.Types.Leg
+    Amazonka.Location.Types.LegGeometry
+    Amazonka.Location.Types.ListDevicePositionsResponseEntry
+    Amazonka.Location.Types.ListGeofenceCollectionsResponseEntry
+    Amazonka.Location.Types.ListGeofenceResponseEntry
+    Amazonka.Location.Types.ListMapsResponseEntry
+    Amazonka.Location.Types.ListPlaceIndexesResponseEntry
+    Amazonka.Location.Types.ListRouteCalculatorsResponseEntry
+    Amazonka.Location.Types.ListTrackersResponseEntry
+    Amazonka.Location.Types.MapConfiguration
+    Amazonka.Location.Types.Place
+    Amazonka.Location.Types.PlaceGeometry
+    Amazonka.Location.Types.PositionalAccuracy
+    Amazonka.Location.Types.PositionFiltering
+    Amazonka.Location.Types.PricingPlan
+    Amazonka.Location.Types.RouteMatrixEntry
+    Amazonka.Location.Types.RouteMatrixEntryError
+    Amazonka.Location.Types.RouteMatrixErrorCode
+    Amazonka.Location.Types.SearchForPositionResult
+    Amazonka.Location.Types.SearchForSuggestionsResult
+    Amazonka.Location.Types.SearchForTextResult
+    Amazonka.Location.Types.SearchPlaceIndexForPositionSummary
+    Amazonka.Location.Types.SearchPlaceIndexForSuggestionsSummary
+    Amazonka.Location.Types.SearchPlaceIndexForTextSummary
+    Amazonka.Location.Types.Step
+    Amazonka.Location.Types.TimeZone
+    Amazonka.Location.Types.TravelMode
+    Amazonka.Location.Types.TruckDimensions
+    Amazonka.Location.Types.TruckWeight
+    Amazonka.Location.Types.VehicleWeightUnit
+    Amazonka.Location.UntagResource
+    Amazonka.Location.UpdateGeofenceCollection
+    Amazonka.Location.UpdateMap
+    Amazonka.Location.UpdatePlaceIndex
+    Amazonka.Location.UpdateRouteCalculator
+    Amazonka.Location.UpdateTracker
+    Amazonka.Location.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-location-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.Location
+    Test.Amazonka.Location
+    Test.Amazonka.Location.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-location
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateTrackerConsumer.yaml b/fixture/AssociateTrackerConsumer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTrackerConsumer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/AssociateTrackerConsumerResponse.proto b/fixture/AssociateTrackerConsumerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTrackerConsumerResponse.proto
diff --git a/fixture/BatchDeleteDevicePositionHistory.yaml b/fixture/BatchDeleteDevicePositionHistory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteDevicePositionHistory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/BatchDeleteDevicePositionHistoryResponse.proto b/fixture/BatchDeleteDevicePositionHistoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteDevicePositionHistoryResponse.proto
diff --git a/fixture/BatchDeleteGeofence.yaml b/fixture/BatchDeleteGeofence.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteGeofence.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/BatchDeleteGeofenceResponse.proto b/fixture/BatchDeleteGeofenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteGeofenceResponse.proto
diff --git a/fixture/BatchEvaluateGeofences.yaml b/fixture/BatchEvaluateGeofences.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchEvaluateGeofences.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/BatchEvaluateGeofencesResponse.proto b/fixture/BatchEvaluateGeofencesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchEvaluateGeofencesResponse.proto
diff --git a/fixture/BatchGetDevicePosition.yaml b/fixture/BatchGetDevicePosition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetDevicePosition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/BatchGetDevicePositionResponse.proto b/fixture/BatchGetDevicePositionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetDevicePositionResponse.proto
diff --git a/fixture/BatchPutGeofence.yaml b/fixture/BatchPutGeofence.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchPutGeofence.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/BatchPutGeofenceResponse.proto b/fixture/BatchPutGeofenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchPutGeofenceResponse.proto
diff --git a/fixture/BatchUpdateDevicePosition.yaml b/fixture/BatchUpdateDevicePosition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchUpdateDevicePosition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/BatchUpdateDevicePositionResponse.proto b/fixture/BatchUpdateDevicePositionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchUpdateDevicePositionResponse.proto
diff --git a/fixture/CalculateRoute.yaml b/fixture/CalculateRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CalculateRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/CalculateRouteMatrix.yaml b/fixture/CalculateRouteMatrix.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CalculateRouteMatrix.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/CalculateRouteMatrixResponse.proto b/fixture/CalculateRouteMatrixResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CalculateRouteMatrixResponse.proto
diff --git a/fixture/CalculateRouteResponse.proto b/fixture/CalculateRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CalculateRouteResponse.proto
diff --git a/fixture/CreateGeofenceCollection.yaml b/fixture/CreateGeofenceCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGeofenceCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/CreateGeofenceCollectionResponse.proto b/fixture/CreateGeofenceCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGeofenceCollectionResponse.proto
diff --git a/fixture/CreateMap.yaml b/fixture/CreateMap.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMap.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/CreateMapResponse.proto b/fixture/CreateMapResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMapResponse.proto
diff --git a/fixture/CreatePlaceIndex.yaml b/fixture/CreatePlaceIndex.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePlaceIndex.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/CreatePlaceIndexResponse.proto b/fixture/CreatePlaceIndexResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePlaceIndexResponse.proto
diff --git a/fixture/CreateRouteCalculator.yaml b/fixture/CreateRouteCalculator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRouteCalculator.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/CreateRouteCalculatorResponse.proto b/fixture/CreateRouteCalculatorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRouteCalculatorResponse.proto
diff --git a/fixture/CreateTracker.yaml b/fixture/CreateTracker.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTracker.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/CreateTrackerResponse.proto b/fixture/CreateTrackerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrackerResponse.proto
diff --git a/fixture/DeleteGeofenceCollection.yaml b/fixture/DeleteGeofenceCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteGeofenceCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DeleteGeofenceCollectionResponse.proto b/fixture/DeleteGeofenceCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteGeofenceCollectionResponse.proto
diff --git a/fixture/DeleteMap.yaml b/fixture/DeleteMap.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMap.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DeleteMapResponse.proto b/fixture/DeleteMapResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMapResponse.proto
diff --git a/fixture/DeletePlaceIndex.yaml b/fixture/DeletePlaceIndex.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePlaceIndex.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DeletePlaceIndexResponse.proto b/fixture/DeletePlaceIndexResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePlaceIndexResponse.proto
diff --git a/fixture/DeleteRouteCalculator.yaml b/fixture/DeleteRouteCalculator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteCalculator.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DeleteRouteCalculatorResponse.proto b/fixture/DeleteRouteCalculatorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteRouteCalculatorResponse.proto
diff --git a/fixture/DeleteTracker.yaml b/fixture/DeleteTracker.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTracker.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DeleteTrackerResponse.proto b/fixture/DeleteTrackerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrackerResponse.proto
diff --git a/fixture/DescribeGeofenceCollection.yaml b/fixture/DescribeGeofenceCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeGeofenceCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DescribeGeofenceCollectionResponse.proto b/fixture/DescribeGeofenceCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeGeofenceCollectionResponse.proto
diff --git a/fixture/DescribeMap.yaml b/fixture/DescribeMap.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeMap.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DescribeMapResponse.proto b/fixture/DescribeMapResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeMapResponse.proto
diff --git a/fixture/DescribePlaceIndex.yaml b/fixture/DescribePlaceIndex.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePlaceIndex.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DescribePlaceIndexResponse.proto b/fixture/DescribePlaceIndexResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePlaceIndexResponse.proto
diff --git a/fixture/DescribeRouteCalculator.yaml b/fixture/DescribeRouteCalculator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRouteCalculator.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DescribeRouteCalculatorResponse.proto b/fixture/DescribeRouteCalculatorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRouteCalculatorResponse.proto
diff --git a/fixture/DescribeTracker.yaml b/fixture/DescribeTracker.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTracker.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DescribeTrackerResponse.proto b/fixture/DescribeTrackerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrackerResponse.proto
diff --git a/fixture/DisassociateTrackerConsumer.yaml b/fixture/DisassociateTrackerConsumer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTrackerConsumer.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/DisassociateTrackerConsumerResponse.proto b/fixture/DisassociateTrackerConsumerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTrackerConsumerResponse.proto
diff --git a/fixture/GetDevicePosition.yaml b/fixture/GetDevicePosition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDevicePosition.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/GetDevicePositionHistory.yaml b/fixture/GetDevicePositionHistory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDevicePositionHistory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/GetDevicePositionHistoryResponse.proto b/fixture/GetDevicePositionHistoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDevicePositionHistoryResponse.proto
diff --git a/fixture/GetDevicePositionResponse.proto b/fixture/GetDevicePositionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDevicePositionResponse.proto
diff --git a/fixture/GetGeofence.yaml b/fixture/GetGeofence.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGeofence.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/GetGeofenceResponse.proto b/fixture/GetGeofenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGeofenceResponse.proto
diff --git a/fixture/GetMapGlyphs.yaml b/fixture/GetMapGlyphs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapGlyphs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/GetMapGlyphsResponse.proto b/fixture/GetMapGlyphsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapGlyphsResponse.proto
diff --git a/fixture/GetMapSprites.yaml b/fixture/GetMapSprites.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapSprites.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/GetMapSpritesResponse.proto b/fixture/GetMapSpritesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapSpritesResponse.proto
diff --git a/fixture/GetMapStyleDescriptor.yaml b/fixture/GetMapStyleDescriptor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapStyleDescriptor.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/GetMapStyleDescriptorResponse.proto b/fixture/GetMapStyleDescriptorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapStyleDescriptorResponse.proto
diff --git a/fixture/GetMapTile.yaml b/fixture/GetMapTile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapTile.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/GetMapTileResponse.proto b/fixture/GetMapTileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapTileResponse.proto
diff --git a/fixture/GetPlace.yaml b/fixture/GetPlace.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPlace.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/GetPlaceResponse.proto b/fixture/GetPlaceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPlaceResponse.proto
diff --git a/fixture/ListDevicePositions.yaml b/fixture/ListDevicePositions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDevicePositions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListDevicePositionsResponse.proto b/fixture/ListDevicePositionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDevicePositionsResponse.proto
diff --git a/fixture/ListGeofenceCollections.yaml b/fixture/ListGeofenceCollections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListGeofenceCollections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListGeofenceCollectionsResponse.proto b/fixture/ListGeofenceCollectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListGeofenceCollectionsResponse.proto
diff --git a/fixture/ListGeofences.yaml b/fixture/ListGeofences.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListGeofences.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListGeofencesResponse.proto b/fixture/ListGeofencesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListGeofencesResponse.proto
diff --git a/fixture/ListMaps.yaml b/fixture/ListMaps.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMaps.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListMapsResponse.proto b/fixture/ListMapsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMapsResponse.proto
diff --git a/fixture/ListPlaceIndexes.yaml b/fixture/ListPlaceIndexes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPlaceIndexes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListPlaceIndexesResponse.proto b/fixture/ListPlaceIndexesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPlaceIndexesResponse.proto
diff --git a/fixture/ListRouteCalculators.yaml b/fixture/ListRouteCalculators.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListRouteCalculators.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListRouteCalculatorsResponse.proto b/fixture/ListRouteCalculatorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListRouteCalculatorsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListTrackerConsumers.yaml b/fixture/ListTrackerConsumers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrackerConsumers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListTrackerConsumersResponse.proto b/fixture/ListTrackerConsumersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrackerConsumersResponse.proto
diff --git a/fixture/ListTrackers.yaml b/fixture/ListTrackers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrackers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/ListTrackersResponse.proto b/fixture/ListTrackersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTrackersResponse.proto
diff --git a/fixture/PutGeofence.yaml b/fixture/PutGeofence.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutGeofence.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/PutGeofenceResponse.proto b/fixture/PutGeofenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutGeofenceResponse.proto
diff --git a/fixture/SearchPlaceIndexForPosition.yaml b/fixture/SearchPlaceIndexForPosition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchPlaceIndexForPosition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/SearchPlaceIndexForPositionResponse.proto b/fixture/SearchPlaceIndexForPositionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchPlaceIndexForPositionResponse.proto
diff --git a/fixture/SearchPlaceIndexForSuggestions.yaml b/fixture/SearchPlaceIndexForSuggestions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchPlaceIndexForSuggestions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/SearchPlaceIndexForSuggestionsResponse.proto b/fixture/SearchPlaceIndexForSuggestionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchPlaceIndexForSuggestionsResponse.proto
diff --git a/fixture/SearchPlaceIndexForText.yaml b/fixture/SearchPlaceIndexForText.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchPlaceIndexForText.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/SearchPlaceIndexForTextResponse.proto b/fixture/SearchPlaceIndexForTextResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchPlaceIndexForTextResponse.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/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/UpdateGeofenceCollection.yaml b/fixture/UpdateGeofenceCollection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGeofenceCollection.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/UpdateGeofenceCollectionResponse.proto b/fixture/UpdateGeofenceCollectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGeofenceCollectionResponse.proto
diff --git a/fixture/UpdateMap.yaml b/fixture/UpdateMap.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMap.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/UpdateMapResponse.proto b/fixture/UpdateMapResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateMapResponse.proto
diff --git a/fixture/UpdatePlaceIndex.yaml b/fixture/UpdatePlaceIndex.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePlaceIndex.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/UpdatePlaceIndexResponse.proto b/fixture/UpdatePlaceIndexResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePlaceIndexResponse.proto
diff --git a/fixture/UpdateRouteCalculator.yaml b/fixture/UpdateRouteCalculator.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRouteCalculator.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/UpdateRouteCalculatorResponse.proto b/fixture/UpdateRouteCalculatorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateRouteCalculatorResponse.proto
diff --git a/fixture/UpdateTracker.yaml b/fixture/UpdateTracker.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTracker.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/geo/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  geo.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/UpdateTrackerResponse.proto b/fixture/UpdateTrackerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTrackerResponse.proto
diff --git a/gen/Amazonka/Location.hs b/gen/Amazonka/Location.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location.hs
@@ -0,0 +1,653 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Location
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2020-11-19@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- \"Suite of geospatial services including Maps, Places, Routes, Tracking,
+-- and Geofencing\"
+module Amazonka.Location
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateTrackerConsumer
+    AssociateTrackerConsumer (AssociateTrackerConsumer'),
+    newAssociateTrackerConsumer,
+    AssociateTrackerConsumerResponse (AssociateTrackerConsumerResponse'),
+    newAssociateTrackerConsumerResponse,
+
+    -- ** BatchDeleteDevicePositionHistory
+    BatchDeleteDevicePositionHistory (BatchDeleteDevicePositionHistory'),
+    newBatchDeleteDevicePositionHistory,
+    BatchDeleteDevicePositionHistoryResponse (BatchDeleteDevicePositionHistoryResponse'),
+    newBatchDeleteDevicePositionHistoryResponse,
+
+    -- ** BatchDeleteGeofence
+    BatchDeleteGeofence (BatchDeleteGeofence'),
+    newBatchDeleteGeofence,
+    BatchDeleteGeofenceResponse (BatchDeleteGeofenceResponse'),
+    newBatchDeleteGeofenceResponse,
+
+    -- ** BatchEvaluateGeofences
+    BatchEvaluateGeofences (BatchEvaluateGeofences'),
+    newBatchEvaluateGeofences,
+    BatchEvaluateGeofencesResponse (BatchEvaluateGeofencesResponse'),
+    newBatchEvaluateGeofencesResponse,
+
+    -- ** BatchGetDevicePosition
+    BatchGetDevicePosition (BatchGetDevicePosition'),
+    newBatchGetDevicePosition,
+    BatchGetDevicePositionResponse (BatchGetDevicePositionResponse'),
+    newBatchGetDevicePositionResponse,
+
+    -- ** BatchPutGeofence
+    BatchPutGeofence (BatchPutGeofence'),
+    newBatchPutGeofence,
+    BatchPutGeofenceResponse (BatchPutGeofenceResponse'),
+    newBatchPutGeofenceResponse,
+
+    -- ** BatchUpdateDevicePosition
+    BatchUpdateDevicePosition (BatchUpdateDevicePosition'),
+    newBatchUpdateDevicePosition,
+    BatchUpdateDevicePositionResponse (BatchUpdateDevicePositionResponse'),
+    newBatchUpdateDevicePositionResponse,
+
+    -- ** CalculateRoute
+    CalculateRoute (CalculateRoute'),
+    newCalculateRoute,
+    CalculateRouteResponse (CalculateRouteResponse'),
+    newCalculateRouteResponse,
+
+    -- ** CalculateRouteMatrix
+    CalculateRouteMatrix (CalculateRouteMatrix'),
+    newCalculateRouteMatrix,
+    CalculateRouteMatrixResponse (CalculateRouteMatrixResponse'),
+    newCalculateRouteMatrixResponse,
+
+    -- ** CreateGeofenceCollection
+    CreateGeofenceCollection (CreateGeofenceCollection'),
+    newCreateGeofenceCollection,
+    CreateGeofenceCollectionResponse (CreateGeofenceCollectionResponse'),
+    newCreateGeofenceCollectionResponse,
+
+    -- ** CreateMap
+    CreateMap (CreateMap'),
+    newCreateMap,
+    CreateMapResponse (CreateMapResponse'),
+    newCreateMapResponse,
+
+    -- ** CreatePlaceIndex
+    CreatePlaceIndex (CreatePlaceIndex'),
+    newCreatePlaceIndex,
+    CreatePlaceIndexResponse (CreatePlaceIndexResponse'),
+    newCreatePlaceIndexResponse,
+
+    -- ** CreateRouteCalculator
+    CreateRouteCalculator (CreateRouteCalculator'),
+    newCreateRouteCalculator,
+    CreateRouteCalculatorResponse (CreateRouteCalculatorResponse'),
+    newCreateRouteCalculatorResponse,
+
+    -- ** CreateTracker
+    CreateTracker (CreateTracker'),
+    newCreateTracker,
+    CreateTrackerResponse (CreateTrackerResponse'),
+    newCreateTrackerResponse,
+
+    -- ** DeleteGeofenceCollection
+    DeleteGeofenceCollection (DeleteGeofenceCollection'),
+    newDeleteGeofenceCollection,
+    DeleteGeofenceCollectionResponse (DeleteGeofenceCollectionResponse'),
+    newDeleteGeofenceCollectionResponse,
+
+    -- ** DeleteMap
+    DeleteMap (DeleteMap'),
+    newDeleteMap,
+    DeleteMapResponse (DeleteMapResponse'),
+    newDeleteMapResponse,
+
+    -- ** DeletePlaceIndex
+    DeletePlaceIndex (DeletePlaceIndex'),
+    newDeletePlaceIndex,
+    DeletePlaceIndexResponse (DeletePlaceIndexResponse'),
+    newDeletePlaceIndexResponse,
+
+    -- ** DeleteRouteCalculator
+    DeleteRouteCalculator (DeleteRouteCalculator'),
+    newDeleteRouteCalculator,
+    DeleteRouteCalculatorResponse (DeleteRouteCalculatorResponse'),
+    newDeleteRouteCalculatorResponse,
+
+    -- ** DeleteTracker
+    DeleteTracker (DeleteTracker'),
+    newDeleteTracker,
+    DeleteTrackerResponse (DeleteTrackerResponse'),
+    newDeleteTrackerResponse,
+
+    -- ** DescribeGeofenceCollection
+    DescribeGeofenceCollection (DescribeGeofenceCollection'),
+    newDescribeGeofenceCollection,
+    DescribeGeofenceCollectionResponse (DescribeGeofenceCollectionResponse'),
+    newDescribeGeofenceCollectionResponse,
+
+    -- ** DescribeMap
+    DescribeMap (DescribeMap'),
+    newDescribeMap,
+    DescribeMapResponse (DescribeMapResponse'),
+    newDescribeMapResponse,
+
+    -- ** DescribePlaceIndex
+    DescribePlaceIndex (DescribePlaceIndex'),
+    newDescribePlaceIndex,
+    DescribePlaceIndexResponse (DescribePlaceIndexResponse'),
+    newDescribePlaceIndexResponse,
+
+    -- ** DescribeRouteCalculator
+    DescribeRouteCalculator (DescribeRouteCalculator'),
+    newDescribeRouteCalculator,
+    DescribeRouteCalculatorResponse (DescribeRouteCalculatorResponse'),
+    newDescribeRouteCalculatorResponse,
+
+    -- ** DescribeTracker
+    DescribeTracker (DescribeTracker'),
+    newDescribeTracker,
+    DescribeTrackerResponse (DescribeTrackerResponse'),
+    newDescribeTrackerResponse,
+
+    -- ** DisassociateTrackerConsumer
+    DisassociateTrackerConsumer (DisassociateTrackerConsumer'),
+    newDisassociateTrackerConsumer,
+    DisassociateTrackerConsumerResponse (DisassociateTrackerConsumerResponse'),
+    newDisassociateTrackerConsumerResponse,
+
+    -- ** GetDevicePosition
+    GetDevicePosition (GetDevicePosition'),
+    newGetDevicePosition,
+    GetDevicePositionResponse (GetDevicePositionResponse'),
+    newGetDevicePositionResponse,
+
+    -- ** GetDevicePositionHistory (Paginated)
+    GetDevicePositionHistory (GetDevicePositionHistory'),
+    newGetDevicePositionHistory,
+    GetDevicePositionHistoryResponse (GetDevicePositionHistoryResponse'),
+    newGetDevicePositionHistoryResponse,
+
+    -- ** GetGeofence
+    GetGeofence (GetGeofence'),
+    newGetGeofence,
+    GetGeofenceResponse (GetGeofenceResponse'),
+    newGetGeofenceResponse,
+
+    -- ** GetMapGlyphs
+    GetMapGlyphs (GetMapGlyphs'),
+    newGetMapGlyphs,
+    GetMapGlyphsResponse (GetMapGlyphsResponse'),
+    newGetMapGlyphsResponse,
+
+    -- ** GetMapSprites
+    GetMapSprites (GetMapSprites'),
+    newGetMapSprites,
+    GetMapSpritesResponse (GetMapSpritesResponse'),
+    newGetMapSpritesResponse,
+
+    -- ** GetMapStyleDescriptor
+    GetMapStyleDescriptor (GetMapStyleDescriptor'),
+    newGetMapStyleDescriptor,
+    GetMapStyleDescriptorResponse (GetMapStyleDescriptorResponse'),
+    newGetMapStyleDescriptorResponse,
+
+    -- ** GetMapTile
+    GetMapTile (GetMapTile'),
+    newGetMapTile,
+    GetMapTileResponse (GetMapTileResponse'),
+    newGetMapTileResponse,
+
+    -- ** GetPlace
+    GetPlace (GetPlace'),
+    newGetPlace,
+    GetPlaceResponse (GetPlaceResponse'),
+    newGetPlaceResponse,
+
+    -- ** ListDevicePositions (Paginated)
+    ListDevicePositions (ListDevicePositions'),
+    newListDevicePositions,
+    ListDevicePositionsResponse (ListDevicePositionsResponse'),
+    newListDevicePositionsResponse,
+
+    -- ** ListGeofenceCollections (Paginated)
+    ListGeofenceCollections (ListGeofenceCollections'),
+    newListGeofenceCollections,
+    ListGeofenceCollectionsResponse (ListGeofenceCollectionsResponse'),
+    newListGeofenceCollectionsResponse,
+
+    -- ** ListGeofences (Paginated)
+    ListGeofences (ListGeofences'),
+    newListGeofences,
+    ListGeofencesResponse (ListGeofencesResponse'),
+    newListGeofencesResponse,
+
+    -- ** ListMaps (Paginated)
+    ListMaps (ListMaps'),
+    newListMaps,
+    ListMapsResponse (ListMapsResponse'),
+    newListMapsResponse,
+
+    -- ** ListPlaceIndexes (Paginated)
+    ListPlaceIndexes (ListPlaceIndexes'),
+    newListPlaceIndexes,
+    ListPlaceIndexesResponse (ListPlaceIndexesResponse'),
+    newListPlaceIndexesResponse,
+
+    -- ** ListRouteCalculators (Paginated)
+    ListRouteCalculators (ListRouteCalculators'),
+    newListRouteCalculators,
+    ListRouteCalculatorsResponse (ListRouteCalculatorsResponse'),
+    newListRouteCalculatorsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListTrackerConsumers (Paginated)
+    ListTrackerConsumers (ListTrackerConsumers'),
+    newListTrackerConsumers,
+    ListTrackerConsumersResponse (ListTrackerConsumersResponse'),
+    newListTrackerConsumersResponse,
+
+    -- ** ListTrackers (Paginated)
+    ListTrackers (ListTrackers'),
+    newListTrackers,
+    ListTrackersResponse (ListTrackersResponse'),
+    newListTrackersResponse,
+
+    -- ** PutGeofence
+    PutGeofence (PutGeofence'),
+    newPutGeofence,
+    PutGeofenceResponse (PutGeofenceResponse'),
+    newPutGeofenceResponse,
+
+    -- ** SearchPlaceIndexForPosition
+    SearchPlaceIndexForPosition (SearchPlaceIndexForPosition'),
+    newSearchPlaceIndexForPosition,
+    SearchPlaceIndexForPositionResponse (SearchPlaceIndexForPositionResponse'),
+    newSearchPlaceIndexForPositionResponse,
+
+    -- ** SearchPlaceIndexForSuggestions
+    SearchPlaceIndexForSuggestions (SearchPlaceIndexForSuggestions'),
+    newSearchPlaceIndexForSuggestions,
+    SearchPlaceIndexForSuggestionsResponse (SearchPlaceIndexForSuggestionsResponse'),
+    newSearchPlaceIndexForSuggestionsResponse,
+
+    -- ** SearchPlaceIndexForText
+    SearchPlaceIndexForText (SearchPlaceIndexForText'),
+    newSearchPlaceIndexForText,
+    SearchPlaceIndexForTextResponse (SearchPlaceIndexForTextResponse'),
+    newSearchPlaceIndexForTextResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateGeofenceCollection
+    UpdateGeofenceCollection (UpdateGeofenceCollection'),
+    newUpdateGeofenceCollection,
+    UpdateGeofenceCollectionResponse (UpdateGeofenceCollectionResponse'),
+    newUpdateGeofenceCollectionResponse,
+
+    -- ** UpdateMap
+    UpdateMap (UpdateMap'),
+    newUpdateMap,
+    UpdateMapResponse (UpdateMapResponse'),
+    newUpdateMapResponse,
+
+    -- ** UpdatePlaceIndex
+    UpdatePlaceIndex (UpdatePlaceIndex'),
+    newUpdatePlaceIndex,
+    UpdatePlaceIndexResponse (UpdatePlaceIndexResponse'),
+    newUpdatePlaceIndexResponse,
+
+    -- ** UpdateRouteCalculator
+    UpdateRouteCalculator (UpdateRouteCalculator'),
+    newUpdateRouteCalculator,
+    UpdateRouteCalculatorResponse (UpdateRouteCalculatorResponse'),
+    newUpdateRouteCalculatorResponse,
+
+    -- ** UpdateTracker
+    UpdateTracker (UpdateTracker'),
+    newUpdateTracker,
+    UpdateTrackerResponse (UpdateTrackerResponse'),
+    newUpdateTrackerResponse,
+
+    -- * Types
+
+    -- ** BatchItemErrorCode
+    BatchItemErrorCode (..),
+
+    -- ** DimensionUnit
+    DimensionUnit (..),
+
+    -- ** DistanceUnit
+    DistanceUnit (..),
+
+    -- ** IntendedUse
+    IntendedUse (..),
+
+    -- ** PositionFiltering
+    PositionFiltering (..),
+
+    -- ** PricingPlan
+    PricingPlan (..),
+
+    -- ** RouteMatrixErrorCode
+    RouteMatrixErrorCode (..),
+
+    -- ** TravelMode
+    TravelMode (..),
+
+    -- ** VehicleWeightUnit
+    VehicleWeightUnit (..),
+
+    -- ** BatchDeleteDevicePositionHistoryError
+    BatchDeleteDevicePositionHistoryError (BatchDeleteDevicePositionHistoryError'),
+    newBatchDeleteDevicePositionHistoryError,
+
+    -- ** BatchDeleteGeofenceError
+    BatchDeleteGeofenceError (BatchDeleteGeofenceError'),
+    newBatchDeleteGeofenceError,
+
+    -- ** BatchEvaluateGeofencesError
+    BatchEvaluateGeofencesError (BatchEvaluateGeofencesError'),
+    newBatchEvaluateGeofencesError,
+
+    -- ** BatchGetDevicePositionError
+    BatchGetDevicePositionError (BatchGetDevicePositionError'),
+    newBatchGetDevicePositionError,
+
+    -- ** BatchItemError
+    BatchItemError (BatchItemError'),
+    newBatchItemError,
+
+    -- ** BatchPutGeofenceError
+    BatchPutGeofenceError (BatchPutGeofenceError'),
+    newBatchPutGeofenceError,
+
+    -- ** BatchPutGeofenceRequestEntry
+    BatchPutGeofenceRequestEntry (BatchPutGeofenceRequestEntry'),
+    newBatchPutGeofenceRequestEntry,
+
+    -- ** BatchPutGeofenceSuccess
+    BatchPutGeofenceSuccess (BatchPutGeofenceSuccess'),
+    newBatchPutGeofenceSuccess,
+
+    -- ** BatchUpdateDevicePositionError
+    BatchUpdateDevicePositionError (BatchUpdateDevicePositionError'),
+    newBatchUpdateDevicePositionError,
+
+    -- ** CalculateRouteCarModeOptions
+    CalculateRouteCarModeOptions (CalculateRouteCarModeOptions'),
+    newCalculateRouteCarModeOptions,
+
+    -- ** CalculateRouteMatrixSummary
+    CalculateRouteMatrixSummary (CalculateRouteMatrixSummary'),
+    newCalculateRouteMatrixSummary,
+
+    -- ** CalculateRouteSummary
+    CalculateRouteSummary (CalculateRouteSummary'),
+    newCalculateRouteSummary,
+
+    -- ** CalculateRouteTruckModeOptions
+    CalculateRouteTruckModeOptions (CalculateRouteTruckModeOptions'),
+    newCalculateRouteTruckModeOptions,
+
+    -- ** Circle
+    Circle (Circle'),
+    newCircle,
+
+    -- ** DataSourceConfiguration
+    DataSourceConfiguration (DataSourceConfiguration'),
+    newDataSourceConfiguration,
+
+    -- ** DevicePosition
+    DevicePosition (DevicePosition'),
+    newDevicePosition,
+
+    -- ** DevicePositionUpdate
+    DevicePositionUpdate (DevicePositionUpdate'),
+    newDevicePositionUpdate,
+
+    -- ** GeofenceGeometry
+    GeofenceGeometry (GeofenceGeometry'),
+    newGeofenceGeometry,
+
+    -- ** Leg
+    Leg (Leg'),
+    newLeg,
+
+    -- ** LegGeometry
+    LegGeometry (LegGeometry'),
+    newLegGeometry,
+
+    -- ** ListDevicePositionsResponseEntry
+    ListDevicePositionsResponseEntry (ListDevicePositionsResponseEntry'),
+    newListDevicePositionsResponseEntry,
+
+    -- ** ListGeofenceCollectionsResponseEntry
+    ListGeofenceCollectionsResponseEntry (ListGeofenceCollectionsResponseEntry'),
+    newListGeofenceCollectionsResponseEntry,
+
+    -- ** ListGeofenceResponseEntry
+    ListGeofenceResponseEntry (ListGeofenceResponseEntry'),
+    newListGeofenceResponseEntry,
+
+    -- ** ListMapsResponseEntry
+    ListMapsResponseEntry (ListMapsResponseEntry'),
+    newListMapsResponseEntry,
+
+    -- ** ListPlaceIndexesResponseEntry
+    ListPlaceIndexesResponseEntry (ListPlaceIndexesResponseEntry'),
+    newListPlaceIndexesResponseEntry,
+
+    -- ** ListRouteCalculatorsResponseEntry
+    ListRouteCalculatorsResponseEntry (ListRouteCalculatorsResponseEntry'),
+    newListRouteCalculatorsResponseEntry,
+
+    -- ** ListTrackersResponseEntry
+    ListTrackersResponseEntry (ListTrackersResponseEntry'),
+    newListTrackersResponseEntry,
+
+    -- ** MapConfiguration
+    MapConfiguration (MapConfiguration'),
+    newMapConfiguration,
+
+    -- ** Place
+    Place (Place'),
+    newPlace,
+
+    -- ** PlaceGeometry
+    PlaceGeometry (PlaceGeometry'),
+    newPlaceGeometry,
+
+    -- ** PositionalAccuracy
+    PositionalAccuracy (PositionalAccuracy'),
+    newPositionalAccuracy,
+
+    -- ** RouteMatrixEntry
+    RouteMatrixEntry (RouteMatrixEntry'),
+    newRouteMatrixEntry,
+
+    -- ** RouteMatrixEntryError
+    RouteMatrixEntryError (RouteMatrixEntryError'),
+    newRouteMatrixEntryError,
+
+    -- ** SearchForPositionResult
+    SearchForPositionResult (SearchForPositionResult'),
+    newSearchForPositionResult,
+
+    -- ** SearchForSuggestionsResult
+    SearchForSuggestionsResult (SearchForSuggestionsResult'),
+    newSearchForSuggestionsResult,
+
+    -- ** SearchForTextResult
+    SearchForTextResult (SearchForTextResult'),
+    newSearchForTextResult,
+
+    -- ** SearchPlaceIndexForPositionSummary
+    SearchPlaceIndexForPositionSummary (SearchPlaceIndexForPositionSummary'),
+    newSearchPlaceIndexForPositionSummary,
+
+    -- ** SearchPlaceIndexForSuggestionsSummary
+    SearchPlaceIndexForSuggestionsSummary (SearchPlaceIndexForSuggestionsSummary'),
+    newSearchPlaceIndexForSuggestionsSummary,
+
+    -- ** SearchPlaceIndexForTextSummary
+    SearchPlaceIndexForTextSummary (SearchPlaceIndexForTextSummary'),
+    newSearchPlaceIndexForTextSummary,
+
+    -- ** Step
+    Step (Step'),
+    newStep,
+
+    -- ** TimeZone
+    TimeZone (TimeZone'),
+    newTimeZone,
+
+    -- ** TruckDimensions
+    TruckDimensions (TruckDimensions'),
+    newTruckDimensions,
+
+    -- ** TruckWeight
+    TruckWeight (TruckWeight'),
+    newTruckWeight,
+  )
+where
+
+import Amazonka.Location.AssociateTrackerConsumer
+import Amazonka.Location.BatchDeleteDevicePositionHistory
+import Amazonka.Location.BatchDeleteGeofence
+import Amazonka.Location.BatchEvaluateGeofences
+import Amazonka.Location.BatchGetDevicePosition
+import Amazonka.Location.BatchPutGeofence
+import Amazonka.Location.BatchUpdateDevicePosition
+import Amazonka.Location.CalculateRoute
+import Amazonka.Location.CalculateRouteMatrix
+import Amazonka.Location.CreateGeofenceCollection
+import Amazonka.Location.CreateMap
+import Amazonka.Location.CreatePlaceIndex
+import Amazonka.Location.CreateRouteCalculator
+import Amazonka.Location.CreateTracker
+import Amazonka.Location.DeleteGeofenceCollection
+import Amazonka.Location.DeleteMap
+import Amazonka.Location.DeletePlaceIndex
+import Amazonka.Location.DeleteRouteCalculator
+import Amazonka.Location.DeleteTracker
+import Amazonka.Location.DescribeGeofenceCollection
+import Amazonka.Location.DescribeMap
+import Amazonka.Location.DescribePlaceIndex
+import Amazonka.Location.DescribeRouteCalculator
+import Amazonka.Location.DescribeTracker
+import Amazonka.Location.DisassociateTrackerConsumer
+import Amazonka.Location.GetDevicePosition
+import Amazonka.Location.GetDevicePositionHistory
+import Amazonka.Location.GetGeofence
+import Amazonka.Location.GetMapGlyphs
+import Amazonka.Location.GetMapSprites
+import Amazonka.Location.GetMapStyleDescriptor
+import Amazonka.Location.GetMapTile
+import Amazonka.Location.GetPlace
+import Amazonka.Location.Lens
+import Amazonka.Location.ListDevicePositions
+import Amazonka.Location.ListGeofenceCollections
+import Amazonka.Location.ListGeofences
+import Amazonka.Location.ListMaps
+import Amazonka.Location.ListPlaceIndexes
+import Amazonka.Location.ListRouteCalculators
+import Amazonka.Location.ListTagsForResource
+import Amazonka.Location.ListTrackerConsumers
+import Amazonka.Location.ListTrackers
+import Amazonka.Location.PutGeofence
+import Amazonka.Location.SearchPlaceIndexForPosition
+import Amazonka.Location.SearchPlaceIndexForSuggestions
+import Amazonka.Location.SearchPlaceIndexForText
+import Amazonka.Location.TagResource
+import Amazonka.Location.Types
+import Amazonka.Location.UntagResource
+import Amazonka.Location.UpdateGeofenceCollection
+import Amazonka.Location.UpdateMap
+import Amazonka.Location.UpdatePlaceIndex
+import Amazonka.Location.UpdateRouteCalculator
+import Amazonka.Location.UpdateTracker
+import Amazonka.Location.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 'Location'.
+
+-- $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/Location/AssociateTrackerConsumer.hs b/gen/Amazonka/Location/AssociateTrackerConsumer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/AssociateTrackerConsumer.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.AssociateTrackerConsumer
+-- 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 association between a geofence collection and a tracker
+-- resource. This allows the tracker resource to communicate location data
+-- to the linked geofence collection.
+--
+-- You can associate up to five geofence collections to each tracker
+-- resource.
+--
+-- Currently not supported — Cross-account configurations, such as creating
+-- associations between a tracker resource in one account and a geofence
+-- collection in another account.
+module Amazonka.Location.AssociateTrackerConsumer
+  ( -- * Creating a Request
+    AssociateTrackerConsumer (..),
+    newAssociateTrackerConsumer,
+
+    -- * Request Lenses
+    associateTrackerConsumer_consumerArn,
+    associateTrackerConsumer_trackerName,
+
+    -- * Destructuring the Response
+    AssociateTrackerConsumerResponse (..),
+    newAssociateTrackerConsumerResponse,
+
+    -- * Response Lenses
+    associateTrackerConsumerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateTrackerConsumer' smart constructor.
+data AssociateTrackerConsumer = AssociateTrackerConsumer'
+  { -- | The Amazon Resource Name (ARN) for the geofence collection to be
+    -- associated to tracker resource. Used when you need to specify a resource
+    -- across all AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollectionConsumer@
+    consumerArn :: Prelude.Text,
+    -- | The name of the tracker resource to be associated with a geofence
+    -- collection.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTrackerConsumer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'consumerArn', 'associateTrackerConsumer_consumerArn' - The Amazon Resource Name (ARN) for the geofence collection to be
+-- associated to tracker resource. Used when you need to specify a resource
+-- across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollectionConsumer@
+--
+-- 'trackerName', 'associateTrackerConsumer_trackerName' - The name of the tracker resource to be associated with a geofence
+-- collection.
+newAssociateTrackerConsumer ::
+  -- | 'consumerArn'
+  Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  AssociateTrackerConsumer
+newAssociateTrackerConsumer
+  pConsumerArn_
+  pTrackerName_ =
+    AssociateTrackerConsumer'
+      { consumerArn =
+          pConsumerArn_,
+        trackerName = pTrackerName_
+      }
+
+-- | The Amazon Resource Name (ARN) for the geofence collection to be
+-- associated to tracker resource. Used when you need to specify a resource
+-- across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollectionConsumer@
+associateTrackerConsumer_consumerArn :: Lens.Lens' AssociateTrackerConsumer Prelude.Text
+associateTrackerConsumer_consumerArn = Lens.lens (\AssociateTrackerConsumer' {consumerArn} -> consumerArn) (\s@AssociateTrackerConsumer' {} a -> s {consumerArn = a} :: AssociateTrackerConsumer)
+
+-- | The name of the tracker resource to be associated with a geofence
+-- collection.
+associateTrackerConsumer_trackerName :: Lens.Lens' AssociateTrackerConsumer Prelude.Text
+associateTrackerConsumer_trackerName = Lens.lens (\AssociateTrackerConsumer' {trackerName} -> trackerName) (\s@AssociateTrackerConsumer' {} a -> s {trackerName = a} :: AssociateTrackerConsumer)
+
+instance Core.AWSRequest AssociateTrackerConsumer where
+  type
+    AWSResponse AssociateTrackerConsumer =
+      AssociateTrackerConsumerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateTrackerConsumerResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateTrackerConsumer where
+  hashWithSalt _salt AssociateTrackerConsumer' {..} =
+    _salt
+      `Prelude.hashWithSalt` consumerArn
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData AssociateTrackerConsumer where
+  rnf AssociateTrackerConsumer' {..} =
+    Prelude.rnf consumerArn
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders AssociateTrackerConsumer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateTrackerConsumer where
+  toJSON AssociateTrackerConsumer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ConsumerArn" Data..= consumerArn)]
+      )
+
+instance Data.ToPath AssociateTrackerConsumer where
+  toPath AssociateTrackerConsumer' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/consumers"
+      ]
+
+instance Data.ToQuery AssociateTrackerConsumer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateTrackerConsumerResponse' smart constructor.
+data AssociateTrackerConsumerResponse = AssociateTrackerConsumerResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTrackerConsumerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'associateTrackerConsumerResponse_httpStatus' - The response's http status code.
+newAssociateTrackerConsumerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateTrackerConsumerResponse
+newAssociateTrackerConsumerResponse pHttpStatus_ =
+  AssociateTrackerConsumerResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+associateTrackerConsumerResponse_httpStatus :: Lens.Lens' AssociateTrackerConsumerResponse Prelude.Int
+associateTrackerConsumerResponse_httpStatus = Lens.lens (\AssociateTrackerConsumerResponse' {httpStatus} -> httpStatus) (\s@AssociateTrackerConsumerResponse' {} a -> s {httpStatus = a} :: AssociateTrackerConsumerResponse)
+
+instance
+  Prelude.NFData
+    AssociateTrackerConsumerResponse
+  where
+  rnf AssociateTrackerConsumerResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/BatchDeleteDevicePositionHistory.hs b/gen/Amazonka/Location/BatchDeleteDevicePositionHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/BatchDeleteDevicePositionHistory.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.BatchDeleteDevicePositionHistory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the position history of one or more devices from a tracker
+-- resource.
+module Amazonka.Location.BatchDeleteDevicePositionHistory
+  ( -- * Creating a Request
+    BatchDeleteDevicePositionHistory (..),
+    newBatchDeleteDevicePositionHistory,
+
+    -- * Request Lenses
+    batchDeleteDevicePositionHistory_deviceIds,
+    batchDeleteDevicePositionHistory_trackerName,
+
+    -- * Destructuring the Response
+    BatchDeleteDevicePositionHistoryResponse (..),
+    newBatchDeleteDevicePositionHistoryResponse,
+
+    -- * Response Lenses
+    batchDeleteDevicePositionHistoryResponse_httpStatus,
+    batchDeleteDevicePositionHistoryResponse_errors,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchDeleteDevicePositionHistory' smart constructor.
+data BatchDeleteDevicePositionHistory = BatchDeleteDevicePositionHistory'
+  { -- | Devices whose position history you want to delete.
+    --
+    -- -   For example, for two devices: @“DeviceIds” : [DeviceId1,DeviceId2]@
+    deviceIds :: Prelude.NonEmpty Prelude.Text,
+    -- | The name of the tracker resource to delete the device position history
+    -- from.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteDevicePositionHistory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceIds', 'batchDeleteDevicePositionHistory_deviceIds' - Devices whose position history you want to delete.
+--
+-- -   For example, for two devices: @“DeviceIds” : [DeviceId1,DeviceId2]@
+--
+-- 'trackerName', 'batchDeleteDevicePositionHistory_trackerName' - The name of the tracker resource to delete the device position history
+-- from.
+newBatchDeleteDevicePositionHistory ::
+  -- | 'deviceIds'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  BatchDeleteDevicePositionHistory
+newBatchDeleteDevicePositionHistory
+  pDeviceIds_
+  pTrackerName_ =
+    BatchDeleteDevicePositionHistory'
+      { deviceIds =
+          Lens.coerced Lens.# pDeviceIds_,
+        trackerName = pTrackerName_
+      }
+
+-- | Devices whose position history you want to delete.
+--
+-- -   For example, for two devices: @“DeviceIds” : [DeviceId1,DeviceId2]@
+batchDeleteDevicePositionHistory_deviceIds :: Lens.Lens' BatchDeleteDevicePositionHistory (Prelude.NonEmpty Prelude.Text)
+batchDeleteDevicePositionHistory_deviceIds = Lens.lens (\BatchDeleteDevicePositionHistory' {deviceIds} -> deviceIds) (\s@BatchDeleteDevicePositionHistory' {} a -> s {deviceIds = a} :: BatchDeleteDevicePositionHistory) Prelude.. Lens.coerced
+
+-- | The name of the tracker resource to delete the device position history
+-- from.
+batchDeleteDevicePositionHistory_trackerName :: Lens.Lens' BatchDeleteDevicePositionHistory Prelude.Text
+batchDeleteDevicePositionHistory_trackerName = Lens.lens (\BatchDeleteDevicePositionHistory' {trackerName} -> trackerName) (\s@BatchDeleteDevicePositionHistory' {} a -> s {trackerName = a} :: BatchDeleteDevicePositionHistory)
+
+instance
+  Core.AWSRequest
+    BatchDeleteDevicePositionHistory
+  where
+  type
+    AWSResponse BatchDeleteDevicePositionHistory =
+      BatchDeleteDevicePositionHistoryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchDeleteDevicePositionHistoryResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+      )
+
+instance
+  Prelude.Hashable
+    BatchDeleteDevicePositionHistory
+  where
+  hashWithSalt
+    _salt
+    BatchDeleteDevicePositionHistory' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceIds
+        `Prelude.hashWithSalt` trackerName
+
+instance
+  Prelude.NFData
+    BatchDeleteDevicePositionHistory
+  where
+  rnf BatchDeleteDevicePositionHistory' {..} =
+    Prelude.rnf deviceIds
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance
+  Data.ToHeaders
+    BatchDeleteDevicePositionHistory
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchDeleteDevicePositionHistory where
+  toJSON BatchDeleteDevicePositionHistory' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("DeviceIds" Data..= deviceIds)]
+      )
+
+instance Data.ToPath BatchDeleteDevicePositionHistory where
+  toPath BatchDeleteDevicePositionHistory' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/delete-positions"
+      ]
+
+instance
+  Data.ToQuery
+    BatchDeleteDevicePositionHistory
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchDeleteDevicePositionHistoryResponse' smart constructor.
+data BatchDeleteDevicePositionHistoryResponse = BatchDeleteDevicePositionHistoryResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains error details for each device history that failed to delete.
+    errors :: [BatchDeleteDevicePositionHistoryError]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteDevicePositionHistoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchDeleteDevicePositionHistoryResponse_httpStatus' - The response's http status code.
+--
+-- 'errors', 'batchDeleteDevicePositionHistoryResponse_errors' - Contains error details for each device history that failed to delete.
+newBatchDeleteDevicePositionHistoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchDeleteDevicePositionHistoryResponse
+newBatchDeleteDevicePositionHistoryResponse
+  pHttpStatus_ =
+    BatchDeleteDevicePositionHistoryResponse'
+      { httpStatus =
+          pHttpStatus_,
+        errors = Prelude.mempty
+      }
+
+-- | The response's http status code.
+batchDeleteDevicePositionHistoryResponse_httpStatus :: Lens.Lens' BatchDeleteDevicePositionHistoryResponse Prelude.Int
+batchDeleteDevicePositionHistoryResponse_httpStatus = Lens.lens (\BatchDeleteDevicePositionHistoryResponse' {httpStatus} -> httpStatus) (\s@BatchDeleteDevicePositionHistoryResponse' {} a -> s {httpStatus = a} :: BatchDeleteDevicePositionHistoryResponse)
+
+-- | Contains error details for each device history that failed to delete.
+batchDeleteDevicePositionHistoryResponse_errors :: Lens.Lens' BatchDeleteDevicePositionHistoryResponse [BatchDeleteDevicePositionHistoryError]
+batchDeleteDevicePositionHistoryResponse_errors = Lens.lens (\BatchDeleteDevicePositionHistoryResponse' {errors} -> errors) (\s@BatchDeleteDevicePositionHistoryResponse' {} a -> s {errors = a} :: BatchDeleteDevicePositionHistoryResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    BatchDeleteDevicePositionHistoryResponse
+  where
+  rnf BatchDeleteDevicePositionHistoryResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf errors
diff --git a/gen/Amazonka/Location/BatchDeleteGeofence.hs b/gen/Amazonka/Location/BatchDeleteGeofence.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/BatchDeleteGeofence.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.Location.BatchDeleteGeofence
+-- 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 batch of geofences from a geofence collection.
+--
+-- This operation deletes the resource permanently.
+module Amazonka.Location.BatchDeleteGeofence
+  ( -- * Creating a Request
+    BatchDeleteGeofence (..),
+    newBatchDeleteGeofence,
+
+    -- * Request Lenses
+    batchDeleteGeofence_collectionName,
+    batchDeleteGeofence_geofenceIds,
+
+    -- * Destructuring the Response
+    BatchDeleteGeofenceResponse (..),
+    newBatchDeleteGeofenceResponse,
+
+    -- * Response Lenses
+    batchDeleteGeofenceResponse_httpStatus,
+    batchDeleteGeofenceResponse_errors,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchDeleteGeofence' smart constructor.
+data BatchDeleteGeofence = BatchDeleteGeofence'
+  { -- | The geofence collection storing the geofences to be deleted.
+    collectionName :: Prelude.Text,
+    -- | The batch of geofences to be deleted.
+    geofenceIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteGeofence' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionName', 'batchDeleteGeofence_collectionName' - The geofence collection storing the geofences to be deleted.
+--
+-- 'geofenceIds', 'batchDeleteGeofence_geofenceIds' - The batch of geofences to be deleted.
+newBatchDeleteGeofence ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'geofenceIds'
+  Prelude.NonEmpty Prelude.Text ->
+  BatchDeleteGeofence
+newBatchDeleteGeofence pCollectionName_ pGeofenceIds_ =
+  BatchDeleteGeofence'
+    { collectionName =
+        pCollectionName_,
+      geofenceIds = Lens.coerced Lens.# pGeofenceIds_
+    }
+
+-- | The geofence collection storing the geofences to be deleted.
+batchDeleteGeofence_collectionName :: Lens.Lens' BatchDeleteGeofence Prelude.Text
+batchDeleteGeofence_collectionName = Lens.lens (\BatchDeleteGeofence' {collectionName} -> collectionName) (\s@BatchDeleteGeofence' {} a -> s {collectionName = a} :: BatchDeleteGeofence)
+
+-- | The batch of geofences to be deleted.
+batchDeleteGeofence_geofenceIds :: Lens.Lens' BatchDeleteGeofence (Prelude.NonEmpty Prelude.Text)
+batchDeleteGeofence_geofenceIds = Lens.lens (\BatchDeleteGeofence' {geofenceIds} -> geofenceIds) (\s@BatchDeleteGeofence' {} a -> s {geofenceIds = a} :: BatchDeleteGeofence) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchDeleteGeofence where
+  type
+    AWSResponse BatchDeleteGeofence =
+      BatchDeleteGeofenceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchDeleteGeofenceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable BatchDeleteGeofence where
+  hashWithSalt _salt BatchDeleteGeofence' {..} =
+    _salt
+      `Prelude.hashWithSalt` collectionName
+      `Prelude.hashWithSalt` geofenceIds
+
+instance Prelude.NFData BatchDeleteGeofence where
+  rnf BatchDeleteGeofence' {..} =
+    Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf geofenceIds
+
+instance Data.ToHeaders BatchDeleteGeofence where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchDeleteGeofence where
+  toJSON BatchDeleteGeofence' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("GeofenceIds" Data..= geofenceIds)]
+      )
+
+instance Data.ToPath BatchDeleteGeofence where
+  toPath BatchDeleteGeofence' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName,
+        "/delete-geofences"
+      ]
+
+instance Data.ToQuery BatchDeleteGeofence where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchDeleteGeofenceResponse' smart constructor.
+data BatchDeleteGeofenceResponse = BatchDeleteGeofenceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains error details for each geofence that failed to delete.
+    errors :: [BatchDeleteGeofenceError]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteGeofenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchDeleteGeofenceResponse_httpStatus' - The response's http status code.
+--
+-- 'errors', 'batchDeleteGeofenceResponse_errors' - Contains error details for each geofence that failed to delete.
+newBatchDeleteGeofenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchDeleteGeofenceResponse
+newBatchDeleteGeofenceResponse pHttpStatus_ =
+  BatchDeleteGeofenceResponse'
+    { httpStatus =
+        pHttpStatus_,
+      errors = Prelude.mempty
+    }
+
+-- | The response's http status code.
+batchDeleteGeofenceResponse_httpStatus :: Lens.Lens' BatchDeleteGeofenceResponse Prelude.Int
+batchDeleteGeofenceResponse_httpStatus = Lens.lens (\BatchDeleteGeofenceResponse' {httpStatus} -> httpStatus) (\s@BatchDeleteGeofenceResponse' {} a -> s {httpStatus = a} :: BatchDeleteGeofenceResponse)
+
+-- | Contains error details for each geofence that failed to delete.
+batchDeleteGeofenceResponse_errors :: Lens.Lens' BatchDeleteGeofenceResponse [BatchDeleteGeofenceError]
+batchDeleteGeofenceResponse_errors = Lens.lens (\BatchDeleteGeofenceResponse' {errors} -> errors) (\s@BatchDeleteGeofenceResponse' {} a -> s {errors = a} :: BatchDeleteGeofenceResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData BatchDeleteGeofenceResponse where
+  rnf BatchDeleteGeofenceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf errors
diff --git a/gen/Amazonka/Location/BatchEvaluateGeofences.hs b/gen/Amazonka/Location/BatchEvaluateGeofences.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/BatchEvaluateGeofences.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.BatchEvaluateGeofences
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Evaluates device positions against the geofence geometries from a given
+-- geofence collection.
+--
+-- This operation always returns an empty response because geofences are
+-- asynchronously evaluated. The evaluation determines if the device has
+-- entered or exited a geofenced area, and then publishes one of the
+-- following events to Amazon EventBridge:
+--
+-- -   @ENTER@ if Amazon Location determines that the tracked device has
+--     entered a geofenced area.
+--
+-- -   @EXIT@ if Amazon Location determines that the tracked device has
+--     exited a geofenced area.
+--
+-- The last geofence that a device was observed within is tracked for 30
+-- days after the most recent device position update.
+--
+-- Geofence evaluation uses the given device position. It does not account
+-- for the optional @Accuracy@ of a @DevicePositionUpdate@.
+--
+-- The @DeviceID@ is used as a string to represent the device. You do not
+-- need to have a @Tracker@ associated with the @DeviceID@.
+module Amazonka.Location.BatchEvaluateGeofences
+  ( -- * Creating a Request
+    BatchEvaluateGeofences (..),
+    newBatchEvaluateGeofences,
+
+    -- * Request Lenses
+    batchEvaluateGeofences_collectionName,
+    batchEvaluateGeofences_devicePositionUpdates,
+
+    -- * Destructuring the Response
+    BatchEvaluateGeofencesResponse (..),
+    newBatchEvaluateGeofencesResponse,
+
+    -- * Response Lenses
+    batchEvaluateGeofencesResponse_httpStatus,
+    batchEvaluateGeofencesResponse_errors,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchEvaluateGeofences' smart constructor.
+data BatchEvaluateGeofences = BatchEvaluateGeofences'
+  { -- | The geofence collection used in evaluating the position of devices
+    -- against its geofences.
+    collectionName :: Prelude.Text,
+    -- | Contains device details for each device to be evaluated against the
+    -- given geofence collection.
+    devicePositionUpdates :: Prelude.NonEmpty DevicePositionUpdate
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchEvaluateGeofences' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionName', 'batchEvaluateGeofences_collectionName' - The geofence collection used in evaluating the position of devices
+-- against its geofences.
+--
+-- 'devicePositionUpdates', 'batchEvaluateGeofences_devicePositionUpdates' - Contains device details for each device to be evaluated against the
+-- given geofence collection.
+newBatchEvaluateGeofences ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'devicePositionUpdates'
+  Prelude.NonEmpty DevicePositionUpdate ->
+  BatchEvaluateGeofences
+newBatchEvaluateGeofences
+  pCollectionName_
+  pDevicePositionUpdates_ =
+    BatchEvaluateGeofences'
+      { collectionName =
+          pCollectionName_,
+        devicePositionUpdates =
+          Lens.coerced Lens.# pDevicePositionUpdates_
+      }
+
+-- | The geofence collection used in evaluating the position of devices
+-- against its geofences.
+batchEvaluateGeofences_collectionName :: Lens.Lens' BatchEvaluateGeofences Prelude.Text
+batchEvaluateGeofences_collectionName = Lens.lens (\BatchEvaluateGeofences' {collectionName} -> collectionName) (\s@BatchEvaluateGeofences' {} a -> s {collectionName = a} :: BatchEvaluateGeofences)
+
+-- | Contains device details for each device to be evaluated against the
+-- given geofence collection.
+batchEvaluateGeofences_devicePositionUpdates :: Lens.Lens' BatchEvaluateGeofences (Prelude.NonEmpty DevicePositionUpdate)
+batchEvaluateGeofences_devicePositionUpdates = Lens.lens (\BatchEvaluateGeofences' {devicePositionUpdates} -> devicePositionUpdates) (\s@BatchEvaluateGeofences' {} a -> s {devicePositionUpdates = a} :: BatchEvaluateGeofences) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchEvaluateGeofences where
+  type
+    AWSResponse BatchEvaluateGeofences =
+      BatchEvaluateGeofencesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchEvaluateGeofencesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable BatchEvaluateGeofences where
+  hashWithSalt _salt BatchEvaluateGeofences' {..} =
+    _salt
+      `Prelude.hashWithSalt` collectionName
+      `Prelude.hashWithSalt` devicePositionUpdates
+
+instance Prelude.NFData BatchEvaluateGeofences where
+  rnf BatchEvaluateGeofences' {..} =
+    Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf devicePositionUpdates
+
+instance Data.ToHeaders BatchEvaluateGeofences where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchEvaluateGeofences where
+  toJSON BatchEvaluateGeofences' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "DevicePositionUpdates"
+                  Data..= devicePositionUpdates
+              )
+          ]
+      )
+
+instance Data.ToPath BatchEvaluateGeofences where
+  toPath BatchEvaluateGeofences' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName,
+        "/positions"
+      ]
+
+instance Data.ToQuery BatchEvaluateGeofences where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchEvaluateGeofencesResponse' smart constructor.
+data BatchEvaluateGeofencesResponse = BatchEvaluateGeofencesResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains error details for each device that failed to evaluate its
+    -- position against the given geofence collection.
+    errors :: [BatchEvaluateGeofencesError]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchEvaluateGeofencesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchEvaluateGeofencesResponse_httpStatus' - The response's http status code.
+--
+-- 'errors', 'batchEvaluateGeofencesResponse_errors' - Contains error details for each device that failed to evaluate its
+-- position against the given geofence collection.
+newBatchEvaluateGeofencesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchEvaluateGeofencesResponse
+newBatchEvaluateGeofencesResponse pHttpStatus_ =
+  BatchEvaluateGeofencesResponse'
+    { httpStatus =
+        pHttpStatus_,
+      errors = Prelude.mempty
+    }
+
+-- | The response's http status code.
+batchEvaluateGeofencesResponse_httpStatus :: Lens.Lens' BatchEvaluateGeofencesResponse Prelude.Int
+batchEvaluateGeofencesResponse_httpStatus = Lens.lens (\BatchEvaluateGeofencesResponse' {httpStatus} -> httpStatus) (\s@BatchEvaluateGeofencesResponse' {} a -> s {httpStatus = a} :: BatchEvaluateGeofencesResponse)
+
+-- | Contains error details for each device that failed to evaluate its
+-- position against the given geofence collection.
+batchEvaluateGeofencesResponse_errors :: Lens.Lens' BatchEvaluateGeofencesResponse [BatchEvaluateGeofencesError]
+batchEvaluateGeofencesResponse_errors = Lens.lens (\BatchEvaluateGeofencesResponse' {errors} -> errors) (\s@BatchEvaluateGeofencesResponse' {} a -> s {errors = a} :: BatchEvaluateGeofencesResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    BatchEvaluateGeofencesResponse
+  where
+  rnf BatchEvaluateGeofencesResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf errors
diff --git a/gen/Amazonka/Location/BatchGetDevicePosition.hs b/gen/Amazonka/Location/BatchGetDevicePosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/BatchGetDevicePosition.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.BatchGetDevicePosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the latest device positions for requested devices.
+module Amazonka.Location.BatchGetDevicePosition
+  ( -- * Creating a Request
+    BatchGetDevicePosition (..),
+    newBatchGetDevicePosition,
+
+    -- * Request Lenses
+    batchGetDevicePosition_deviceIds,
+    batchGetDevicePosition_trackerName,
+
+    -- * Destructuring the Response
+    BatchGetDevicePositionResponse (..),
+    newBatchGetDevicePositionResponse,
+
+    -- * Response Lenses
+    batchGetDevicePositionResponse_httpStatus,
+    batchGetDevicePositionResponse_devicePositions,
+    batchGetDevicePositionResponse_errors,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchGetDevicePosition' smart constructor.
+data BatchGetDevicePosition = BatchGetDevicePosition'
+  { -- | Devices whose position you want to retrieve.
+    --
+    -- -   For example, for two devices:
+    --     @device-ids=DeviceId1&device-ids=DeviceId2@
+    deviceIds :: Prelude.NonEmpty Prelude.Text,
+    -- | The tracker resource retrieving the device position.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetDevicePosition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceIds', 'batchGetDevicePosition_deviceIds' - Devices whose position you want to retrieve.
+--
+-- -   For example, for two devices:
+--     @device-ids=DeviceId1&device-ids=DeviceId2@
+--
+-- 'trackerName', 'batchGetDevicePosition_trackerName' - The tracker resource retrieving the device position.
+newBatchGetDevicePosition ::
+  -- | 'deviceIds'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  BatchGetDevicePosition
+newBatchGetDevicePosition pDeviceIds_ pTrackerName_ =
+  BatchGetDevicePosition'
+    { deviceIds =
+        Lens.coerced Lens.# pDeviceIds_,
+      trackerName = pTrackerName_
+    }
+
+-- | Devices whose position you want to retrieve.
+--
+-- -   For example, for two devices:
+--     @device-ids=DeviceId1&device-ids=DeviceId2@
+batchGetDevicePosition_deviceIds :: Lens.Lens' BatchGetDevicePosition (Prelude.NonEmpty Prelude.Text)
+batchGetDevicePosition_deviceIds = Lens.lens (\BatchGetDevicePosition' {deviceIds} -> deviceIds) (\s@BatchGetDevicePosition' {} a -> s {deviceIds = a} :: BatchGetDevicePosition) Prelude.. Lens.coerced
+
+-- | The tracker resource retrieving the device position.
+batchGetDevicePosition_trackerName :: Lens.Lens' BatchGetDevicePosition Prelude.Text
+batchGetDevicePosition_trackerName = Lens.lens (\BatchGetDevicePosition' {trackerName} -> trackerName) (\s@BatchGetDevicePosition' {} a -> s {trackerName = a} :: BatchGetDevicePosition)
+
+instance Core.AWSRequest BatchGetDevicePosition where
+  type
+    AWSResponse BatchGetDevicePosition =
+      BatchGetDevicePositionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchGetDevicePositionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "DevicePositions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable BatchGetDevicePosition where
+  hashWithSalt _salt BatchGetDevicePosition' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceIds
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData BatchGetDevicePosition where
+  rnf BatchGetDevicePosition' {..} =
+    Prelude.rnf deviceIds
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders BatchGetDevicePosition where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchGetDevicePosition where
+  toJSON BatchGetDevicePosition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("DeviceIds" Data..= deviceIds)]
+      )
+
+instance Data.ToPath BatchGetDevicePosition where
+  toPath BatchGetDevicePosition' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/get-positions"
+      ]
+
+instance Data.ToQuery BatchGetDevicePosition where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchGetDevicePositionResponse' smart constructor.
+data BatchGetDevicePositionResponse = BatchGetDevicePositionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains device position details such as the device ID, position, and
+    -- timestamps for when the position was received and sampled.
+    devicePositions :: [DevicePosition],
+    -- | Contains error details for each device that failed to send its position
+    -- to the tracker resource.
+    errors :: [BatchGetDevicePositionError]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetDevicePositionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchGetDevicePositionResponse_httpStatus' - The response's http status code.
+--
+-- 'devicePositions', 'batchGetDevicePositionResponse_devicePositions' - Contains device position details such as the device ID, position, and
+-- timestamps for when the position was received and sampled.
+--
+-- 'errors', 'batchGetDevicePositionResponse_errors' - Contains error details for each device that failed to send its position
+-- to the tracker resource.
+newBatchGetDevicePositionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchGetDevicePositionResponse
+newBatchGetDevicePositionResponse pHttpStatus_ =
+  BatchGetDevicePositionResponse'
+    { httpStatus =
+        pHttpStatus_,
+      devicePositions = Prelude.mempty,
+      errors = Prelude.mempty
+    }
+
+-- | The response's http status code.
+batchGetDevicePositionResponse_httpStatus :: Lens.Lens' BatchGetDevicePositionResponse Prelude.Int
+batchGetDevicePositionResponse_httpStatus = Lens.lens (\BatchGetDevicePositionResponse' {httpStatus} -> httpStatus) (\s@BatchGetDevicePositionResponse' {} a -> s {httpStatus = a} :: BatchGetDevicePositionResponse)
+
+-- | Contains device position details such as the device ID, position, and
+-- timestamps for when the position was received and sampled.
+batchGetDevicePositionResponse_devicePositions :: Lens.Lens' BatchGetDevicePositionResponse [DevicePosition]
+batchGetDevicePositionResponse_devicePositions = Lens.lens (\BatchGetDevicePositionResponse' {devicePositions} -> devicePositions) (\s@BatchGetDevicePositionResponse' {} a -> s {devicePositions = a} :: BatchGetDevicePositionResponse) Prelude.. Lens.coerced
+
+-- | Contains error details for each device that failed to send its position
+-- to the tracker resource.
+batchGetDevicePositionResponse_errors :: Lens.Lens' BatchGetDevicePositionResponse [BatchGetDevicePositionError]
+batchGetDevicePositionResponse_errors = Lens.lens (\BatchGetDevicePositionResponse' {errors} -> errors) (\s@BatchGetDevicePositionResponse' {} a -> s {errors = a} :: BatchGetDevicePositionResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    BatchGetDevicePositionResponse
+  where
+  rnf BatchGetDevicePositionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf devicePositions
+      `Prelude.seq` Prelude.rnf errors
diff --git a/gen/Amazonka/Location/BatchPutGeofence.hs b/gen/Amazonka/Location/BatchPutGeofence.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/BatchPutGeofence.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.BatchPutGeofence
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A batch request for storing geofence geometries into a given geofence
+-- collection, or updates the geometry of an existing geofence if a
+-- geofence ID is included in the request.
+module Amazonka.Location.BatchPutGeofence
+  ( -- * Creating a Request
+    BatchPutGeofence (..),
+    newBatchPutGeofence,
+
+    -- * Request Lenses
+    batchPutGeofence_collectionName,
+    batchPutGeofence_entries,
+
+    -- * Destructuring the Response
+    BatchPutGeofenceResponse (..),
+    newBatchPutGeofenceResponse,
+
+    -- * Response Lenses
+    batchPutGeofenceResponse_httpStatus,
+    batchPutGeofenceResponse_errors,
+    batchPutGeofenceResponse_successes,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchPutGeofence' smart constructor.
+data BatchPutGeofence = BatchPutGeofence'
+  { -- | The geofence collection storing the geofences.
+    collectionName :: Prelude.Text,
+    -- | The batch of geofences to be stored in a geofence collection.
+    entries :: Prelude.NonEmpty BatchPutGeofenceRequestEntry
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutGeofence' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionName', 'batchPutGeofence_collectionName' - The geofence collection storing the geofences.
+--
+-- 'entries', 'batchPutGeofence_entries' - The batch of geofences to be stored in a geofence collection.
+newBatchPutGeofence ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'entries'
+  Prelude.NonEmpty BatchPutGeofenceRequestEntry ->
+  BatchPutGeofence
+newBatchPutGeofence pCollectionName_ pEntries_ =
+  BatchPutGeofence'
+    { collectionName =
+        pCollectionName_,
+      entries = Lens.coerced Lens.# pEntries_
+    }
+
+-- | The geofence collection storing the geofences.
+batchPutGeofence_collectionName :: Lens.Lens' BatchPutGeofence Prelude.Text
+batchPutGeofence_collectionName = Lens.lens (\BatchPutGeofence' {collectionName} -> collectionName) (\s@BatchPutGeofence' {} a -> s {collectionName = a} :: BatchPutGeofence)
+
+-- | The batch of geofences to be stored in a geofence collection.
+batchPutGeofence_entries :: Lens.Lens' BatchPutGeofence (Prelude.NonEmpty BatchPutGeofenceRequestEntry)
+batchPutGeofence_entries = Lens.lens (\BatchPutGeofence' {entries} -> entries) (\s@BatchPutGeofence' {} a -> s {entries = a} :: BatchPutGeofence) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchPutGeofence where
+  type
+    AWSResponse BatchPutGeofence =
+      BatchPutGeofenceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchPutGeofenceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "Successes" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable BatchPutGeofence where
+  hashWithSalt _salt BatchPutGeofence' {..} =
+    _salt
+      `Prelude.hashWithSalt` collectionName
+      `Prelude.hashWithSalt` entries
+
+instance Prelude.NFData BatchPutGeofence where
+  rnf BatchPutGeofence' {..} =
+    Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf entries
+
+instance Data.ToHeaders BatchPutGeofence where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchPutGeofence where
+  toJSON BatchPutGeofence' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Entries" Data..= entries)]
+      )
+
+instance Data.ToPath BatchPutGeofence where
+  toPath BatchPutGeofence' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName,
+        "/put-geofences"
+      ]
+
+instance Data.ToQuery BatchPutGeofence where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchPutGeofenceResponse' smart constructor.
+data BatchPutGeofenceResponse = BatchPutGeofenceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains additional error details for each geofence that failed to be
+    -- stored in a geofence collection.
+    errors :: [BatchPutGeofenceError],
+    -- | Contains each geofence that was successfully stored in a geofence
+    -- collection.
+    successes :: [BatchPutGeofenceSuccess]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutGeofenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchPutGeofenceResponse_httpStatus' - The response's http status code.
+--
+-- 'errors', 'batchPutGeofenceResponse_errors' - Contains additional error details for each geofence that failed to be
+-- stored in a geofence collection.
+--
+-- 'successes', 'batchPutGeofenceResponse_successes' - Contains each geofence that was successfully stored in a geofence
+-- collection.
+newBatchPutGeofenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchPutGeofenceResponse
+newBatchPutGeofenceResponse pHttpStatus_ =
+  BatchPutGeofenceResponse'
+    { httpStatus =
+        pHttpStatus_,
+      errors = Prelude.mempty,
+      successes = Prelude.mempty
+    }
+
+-- | The response's http status code.
+batchPutGeofenceResponse_httpStatus :: Lens.Lens' BatchPutGeofenceResponse Prelude.Int
+batchPutGeofenceResponse_httpStatus = Lens.lens (\BatchPutGeofenceResponse' {httpStatus} -> httpStatus) (\s@BatchPutGeofenceResponse' {} a -> s {httpStatus = a} :: BatchPutGeofenceResponse)
+
+-- | Contains additional error details for each geofence that failed to be
+-- stored in a geofence collection.
+batchPutGeofenceResponse_errors :: Lens.Lens' BatchPutGeofenceResponse [BatchPutGeofenceError]
+batchPutGeofenceResponse_errors = Lens.lens (\BatchPutGeofenceResponse' {errors} -> errors) (\s@BatchPutGeofenceResponse' {} a -> s {errors = a} :: BatchPutGeofenceResponse) Prelude.. Lens.coerced
+
+-- | Contains each geofence that was successfully stored in a geofence
+-- collection.
+batchPutGeofenceResponse_successes :: Lens.Lens' BatchPutGeofenceResponse [BatchPutGeofenceSuccess]
+batchPutGeofenceResponse_successes = Lens.lens (\BatchPutGeofenceResponse' {successes} -> successes) (\s@BatchPutGeofenceResponse' {} a -> s {successes = a} :: BatchPutGeofenceResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData BatchPutGeofenceResponse where
+  rnf BatchPutGeofenceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf successes
diff --git a/gen/Amazonka/Location/BatchUpdateDevicePosition.hs b/gen/Amazonka/Location/BatchUpdateDevicePosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/BatchUpdateDevicePosition.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.BatchUpdateDevicePosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Uploads position update data for one or more devices to a tracker
+-- resource. Amazon Location uses the data when it reports the last known
+-- device position and position history. Amazon Location retains location
+-- data for 30 days.
+--
+-- Position updates are handled based on the @PositionFiltering@ property
+-- of the tracker. When @PositionFiltering@ is set to @TimeBased@, updates
+-- are evaluated against linked geofence collections, and location data is
+-- stored at a maximum of one position per 30 second interval. If your
+-- update frequency is more often than every 30 seconds, only one update
+-- per 30 seconds is stored for each unique device ID.
+--
+-- When @PositionFiltering@ is set to @DistanceBased@ filtering, location
+-- data is stored and evaluated against linked geofence collections only if
+-- the device has moved more than 30 m (98.4 ft).
+--
+-- When @PositionFiltering@ is set to @AccuracyBased@ filtering, location
+-- data is stored and evaluated against linked geofence collections only if
+-- the device has moved more than the measured accuracy. For example, if
+-- two consecutive updates from a device have a horizontal accuracy of 5 m
+-- and 10 m, the second update is neither stored or evaluated if the device
+-- has moved less than 15 m. If @PositionFiltering@ is set to
+-- @AccuracyBased@ filtering, Amazon Location uses the default value
+-- @{ \"Horizontal\": 0}@ when accuracy is not provided on a
+-- @DevicePositionUpdate@.
+module Amazonka.Location.BatchUpdateDevicePosition
+  ( -- * Creating a Request
+    BatchUpdateDevicePosition (..),
+    newBatchUpdateDevicePosition,
+
+    -- * Request Lenses
+    batchUpdateDevicePosition_trackerName,
+    batchUpdateDevicePosition_updates,
+
+    -- * Destructuring the Response
+    BatchUpdateDevicePositionResponse (..),
+    newBatchUpdateDevicePositionResponse,
+
+    -- * Response Lenses
+    batchUpdateDevicePositionResponse_httpStatus,
+    batchUpdateDevicePositionResponse_errors,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchUpdateDevicePosition' smart constructor.
+data BatchUpdateDevicePosition = BatchUpdateDevicePosition'
+  { -- | The name of the tracker resource to update.
+    trackerName :: Prelude.Text,
+    -- | Contains the position update details for each device.
+    updates :: Prelude.NonEmpty DevicePositionUpdate
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateDevicePosition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trackerName', 'batchUpdateDevicePosition_trackerName' - The name of the tracker resource to update.
+--
+-- 'updates', 'batchUpdateDevicePosition_updates' - Contains the position update details for each device.
+newBatchUpdateDevicePosition ::
+  -- | 'trackerName'
+  Prelude.Text ->
+  -- | 'updates'
+  Prelude.NonEmpty DevicePositionUpdate ->
+  BatchUpdateDevicePosition
+newBatchUpdateDevicePosition pTrackerName_ pUpdates_ =
+  BatchUpdateDevicePosition'
+    { trackerName =
+        pTrackerName_,
+      updates = Lens.coerced Lens.# pUpdates_
+    }
+
+-- | The name of the tracker resource to update.
+batchUpdateDevicePosition_trackerName :: Lens.Lens' BatchUpdateDevicePosition Prelude.Text
+batchUpdateDevicePosition_trackerName = Lens.lens (\BatchUpdateDevicePosition' {trackerName} -> trackerName) (\s@BatchUpdateDevicePosition' {} a -> s {trackerName = a} :: BatchUpdateDevicePosition)
+
+-- | Contains the position update details for each device.
+batchUpdateDevicePosition_updates :: Lens.Lens' BatchUpdateDevicePosition (Prelude.NonEmpty DevicePositionUpdate)
+batchUpdateDevicePosition_updates = Lens.lens (\BatchUpdateDevicePosition' {updates} -> updates) (\s@BatchUpdateDevicePosition' {} a -> s {updates = a} :: BatchUpdateDevicePosition) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchUpdateDevicePosition where
+  type
+    AWSResponse BatchUpdateDevicePosition =
+      BatchUpdateDevicePositionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchUpdateDevicePositionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Errors" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable BatchUpdateDevicePosition where
+  hashWithSalt _salt BatchUpdateDevicePosition' {..} =
+    _salt
+      `Prelude.hashWithSalt` trackerName
+      `Prelude.hashWithSalt` updates
+
+instance Prelude.NFData BatchUpdateDevicePosition where
+  rnf BatchUpdateDevicePosition' {..} =
+    Prelude.rnf trackerName
+      `Prelude.seq` Prelude.rnf updates
+
+instance Data.ToHeaders BatchUpdateDevicePosition where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchUpdateDevicePosition where
+  toJSON BatchUpdateDevicePosition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Updates" Data..= updates)]
+      )
+
+instance Data.ToPath BatchUpdateDevicePosition where
+  toPath BatchUpdateDevicePosition' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/positions"
+      ]
+
+instance Data.ToQuery BatchUpdateDevicePosition where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchUpdateDevicePositionResponse' smart constructor.
+data BatchUpdateDevicePositionResponse = BatchUpdateDevicePositionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains error details for each device that failed to update its
+    -- position.
+    errors :: [BatchUpdateDevicePositionError]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateDevicePositionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'batchUpdateDevicePositionResponse_httpStatus' - The response's http status code.
+--
+-- 'errors', 'batchUpdateDevicePositionResponse_errors' - Contains error details for each device that failed to update its
+-- position.
+newBatchUpdateDevicePositionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchUpdateDevicePositionResponse
+newBatchUpdateDevicePositionResponse pHttpStatus_ =
+  BatchUpdateDevicePositionResponse'
+    { httpStatus =
+        pHttpStatus_,
+      errors = Prelude.mempty
+    }
+
+-- | The response's http status code.
+batchUpdateDevicePositionResponse_httpStatus :: Lens.Lens' BatchUpdateDevicePositionResponse Prelude.Int
+batchUpdateDevicePositionResponse_httpStatus = Lens.lens (\BatchUpdateDevicePositionResponse' {httpStatus} -> httpStatus) (\s@BatchUpdateDevicePositionResponse' {} a -> s {httpStatus = a} :: BatchUpdateDevicePositionResponse)
+
+-- | Contains error details for each device that failed to update its
+-- position.
+batchUpdateDevicePositionResponse_errors :: Lens.Lens' BatchUpdateDevicePositionResponse [BatchUpdateDevicePositionError]
+batchUpdateDevicePositionResponse_errors = Lens.lens (\BatchUpdateDevicePositionResponse' {errors} -> errors) (\s@BatchUpdateDevicePositionResponse' {} a -> s {errors = a} :: BatchUpdateDevicePositionResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    BatchUpdateDevicePositionResponse
+  where
+  rnf BatchUpdateDevicePositionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf errors
diff --git a/gen/Amazonka/Location/CalculateRoute.hs b/gen/Amazonka/Location/CalculateRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/CalculateRoute.hs
@@ -0,0 +1,675 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.CalculateRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- <https://docs.aws.amazon.com/location/latest/developerguide/calculate-route.html Calculates a route>
+-- given the following required parameters: @DeparturePosition@ and
+-- @DestinationPosition@. Requires that you first
+-- <https://docs.aws.amazon.com/location-routes/latest/APIReference/API_CreateRouteCalculator.html create a route calculator resource>.
+--
+-- By default, a request that doesn\'t specify a departure time uses the
+-- best time of day to travel with the best traffic conditions when
+-- calculating the route.
+--
+-- Additional options include:
+--
+-- -   <https://docs.aws.amazon.com/location/latest/developerguide/departure-time.html Specifying a departure time>
+--     using either @DepartureTime@ or @DepartNow@. This calculates a route
+--     based on predictive traffic data at the given time.
+--
+--     You can\'t specify both @DepartureTime@ and @DepartNow@ in a single
+--     request. Specifying both parameters returns a validation error.
+--
+-- -   <https://docs.aws.amazon.com/location/latest/developerguide/travel-mode.html Specifying a travel mode>
+--     using TravelMode sets the transportation mode used to calculate the
+--     routes. This also lets you specify additional route preferences in
+--     @CarModeOptions@ if traveling by @Car@, or @TruckModeOptions@ if
+--     traveling by @Truck@.
+--
+--     If you specify @walking@ for the travel mode and your data provider
+--     is Esri, the start and destination must be within 40km.
+module Amazonka.Location.CalculateRoute
+  ( -- * Creating a Request
+    CalculateRoute (..),
+    newCalculateRoute,
+
+    -- * Request Lenses
+    calculateRoute_carModeOptions,
+    calculateRoute_departNow,
+    calculateRoute_departureTime,
+    calculateRoute_distanceUnit,
+    calculateRoute_includeLegGeometry,
+    calculateRoute_travelMode,
+    calculateRoute_truckModeOptions,
+    calculateRoute_waypointPositions,
+    calculateRoute_calculatorName,
+    calculateRoute_departurePosition,
+    calculateRoute_destinationPosition,
+
+    -- * Destructuring the Response
+    CalculateRouteResponse (..),
+    newCalculateRouteResponse,
+
+    -- * Response Lenses
+    calculateRouteResponse_httpStatus,
+    calculateRouteResponse_legs,
+    calculateRouteResponse_summary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCalculateRoute' smart constructor.
+data CalculateRoute = CalculateRoute'
+  { -- | Specifies route preferences when traveling by @Car@, such as avoiding
+    -- routes that use ferries or tolls.
+    --
+    -- Requirements: @TravelMode@ must be specified as @Car@.
+    carModeOptions :: Prelude.Maybe CalculateRouteCarModeOptions,
+    -- | Sets the time of departure as the current time. Uses the current time to
+    -- calculate a route. Otherwise, the best time of day to travel with the
+    -- best traffic conditions is used to calculate the route.
+    --
+    -- Default Value: @false@
+    --
+    -- Valid Values: @false@ | @true@
+    departNow :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies the desired time of departure. Uses the given time to
+    -- calculate the route. Otherwise, the best time of day to travel with the
+    -- best traffic conditions is used to calculate the route.
+    --
+    -- Setting a departure time in the past returns a @400 ValidationException@
+    -- error.
+    --
+    -- -   In <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    --     format: @YYYY-MM-DDThh:mm:ss.sssZ@. For example,
+    --     @2020–07-2T12:15:20.000Z+01:00@
+    departureTime :: Prelude.Maybe Data.ISO8601,
+    -- | Set the unit system to specify the distance.
+    --
+    -- Default Value: @Kilometers@
+    distanceUnit :: Prelude.Maybe DistanceUnit,
+    -- | Set to include the geometry details in the result for each path between
+    -- a pair of positions.
+    --
+    -- Default Value: @false@
+    --
+    -- Valid Values: @false@ | @true@
+    includeLegGeometry :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies the mode of transport when calculating a route. Used in
+    -- estimating the speed of travel and road compatibility. You can choose
+    -- @Car@, @Truck@, or @Walking@ as options for the @TravelMode@.
+    --
+    -- The @TravelMode@ you specify also determines how you specify route
+    -- preferences:
+    --
+    -- -   If traveling by @Car@ use the @CarModeOptions@ parameter.
+    --
+    -- -   If traveling by @Truck@ use the @TruckModeOptions@ parameter.
+    --
+    -- Default Value: @Car@
+    travelMode :: Prelude.Maybe TravelMode,
+    -- | Specifies route preferences when traveling by @Truck@, such as avoiding
+    -- routes that use ferries or tolls, and truck specifications to consider
+    -- when choosing an optimal road.
+    --
+    -- Requirements: @TravelMode@ must be specified as @Truck@.
+    truckModeOptions :: Prelude.Maybe CalculateRouteTruckModeOptions,
+    -- | Specifies an ordered list of up to 23 intermediate positions to include
+    -- along a route between the departure position and destination position.
+    --
+    -- -   For example, from the @DeparturePosition@ @[-123.115, 49.285]@, the
+    --     route follows the order that the waypoint positions are given
+    --     @[[-122.757, 49.0021],[-122.349, 47.620]]@
+    --
+    -- If you specify a waypoint position that\'s not located on a road, Amazon
+    -- Location
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+    --
+    -- Specifying more than 23 waypoints returns a @400 ValidationException@
+    -- error.
+    --
+    -- If Esri is the provider for your route calculator, specifying a route
+    -- that is longer than 400 km returns a @400 RoutesValidationException@
+    -- error.
+    --
+    -- Valid Values: @[-180 to 180,-90 to 90]@
+    waypointPositions :: Prelude.Maybe [Data.Sensitive (Prelude.NonEmpty Prelude.Double)],
+    -- | The name of the route calculator resource that you want to use to
+    -- calculate the route.
+    calculatorName :: Prelude.Text,
+    -- | The start position for the route. Defined in
+    -- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 World Geodetic System (WGS 84)>
+    -- format: @[longitude, latitude]@.
+    --
+    -- -   For example, @[-123.115, 49.285]@
+    --
+    -- If you specify a departure that\'s not located on a road, Amazon
+    -- Location
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+    -- If Esri is the provider for your route calculator, specifying a route
+    -- that is longer than 400 km returns a @400 RoutesValidationException@
+    -- error.
+    --
+    -- Valid Values: @[-180 to 180,-90 to 90]@
+    departurePosition :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | The finish position for the route. Defined in
+    -- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 World Geodetic System (WGS 84)>
+    -- format: @[longitude, latitude]@.
+    --
+    -- -   For example, @[-122.339, 47.615]@
+    --
+    -- If you specify a destination that\'s not located on a road, Amazon
+    -- Location
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+    --
+    -- Valid Values: @[-180 to 180,-90 to 90]@
+    destinationPosition :: Data.Sensitive (Prelude.NonEmpty Prelude.Double)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CalculateRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carModeOptions', 'calculateRoute_carModeOptions' - Specifies route preferences when traveling by @Car@, such as avoiding
+-- routes that use ferries or tolls.
+--
+-- Requirements: @TravelMode@ must be specified as @Car@.
+--
+-- 'departNow', 'calculateRoute_departNow' - Sets the time of departure as the current time. Uses the current time to
+-- calculate a route. Otherwise, the best time of day to travel with the
+-- best traffic conditions is used to calculate the route.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+--
+-- 'departureTime', 'calculateRoute_departureTime' - Specifies the desired time of departure. Uses the given time to
+-- calculate the route. Otherwise, the best time of day to travel with the
+-- best traffic conditions is used to calculate the route.
+--
+-- Setting a departure time in the past returns a @400 ValidationException@
+-- error.
+--
+-- -   In <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+--     format: @YYYY-MM-DDThh:mm:ss.sssZ@. For example,
+--     @2020–07-2T12:15:20.000Z+01:00@
+--
+-- 'distanceUnit', 'calculateRoute_distanceUnit' - Set the unit system to specify the distance.
+--
+-- Default Value: @Kilometers@
+--
+-- 'includeLegGeometry', 'calculateRoute_includeLegGeometry' - Set to include the geometry details in the result for each path between
+-- a pair of positions.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+--
+-- 'travelMode', 'calculateRoute_travelMode' - Specifies the mode of transport when calculating a route. Used in
+-- estimating the speed of travel and road compatibility. You can choose
+-- @Car@, @Truck@, or @Walking@ as options for the @TravelMode@.
+--
+-- The @TravelMode@ you specify also determines how you specify route
+-- preferences:
+--
+-- -   If traveling by @Car@ use the @CarModeOptions@ parameter.
+--
+-- -   If traveling by @Truck@ use the @TruckModeOptions@ parameter.
+--
+-- Default Value: @Car@
+--
+-- 'truckModeOptions', 'calculateRoute_truckModeOptions' - Specifies route preferences when traveling by @Truck@, such as avoiding
+-- routes that use ferries or tolls, and truck specifications to consider
+-- when choosing an optimal road.
+--
+-- Requirements: @TravelMode@ must be specified as @Truck@.
+--
+-- 'waypointPositions', 'calculateRoute_waypointPositions' - Specifies an ordered list of up to 23 intermediate positions to include
+-- along a route between the departure position and destination position.
+--
+-- -   For example, from the @DeparturePosition@ @[-123.115, 49.285]@, the
+--     route follows the order that the waypoint positions are given
+--     @[[-122.757, 49.0021],[-122.349, 47.620]]@
+--
+-- If you specify a waypoint position that\'s not located on a road, Amazon
+-- Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+--
+-- Specifying more than 23 waypoints returns a @400 ValidationException@
+-- error.
+--
+-- If Esri is the provider for your route calculator, specifying a route
+-- that is longer than 400 km returns a @400 RoutesValidationException@
+-- error.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+--
+-- 'calculatorName', 'calculateRoute_calculatorName' - The name of the route calculator resource that you want to use to
+-- calculate the route.
+--
+-- 'departurePosition', 'calculateRoute_departurePosition' - The start position for the route. Defined in
+-- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 World Geodetic System (WGS 84)>
+-- format: @[longitude, latitude]@.
+--
+-- -   For example, @[-123.115, 49.285]@
+--
+-- If you specify a departure that\'s not located on a road, Amazon
+-- Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+-- If Esri is the provider for your route calculator, specifying a route
+-- that is longer than 400 km returns a @400 RoutesValidationException@
+-- error.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+--
+-- 'destinationPosition', 'calculateRoute_destinationPosition' - The finish position for the route. Defined in
+-- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 World Geodetic System (WGS 84)>
+-- format: @[longitude, latitude]@.
+--
+-- -   For example, @[-122.339, 47.615]@
+--
+-- If you specify a destination that\'s not located on a road, Amazon
+-- Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+newCalculateRoute ::
+  -- | 'calculatorName'
+  Prelude.Text ->
+  -- | 'departurePosition'
+  Prelude.NonEmpty Prelude.Double ->
+  -- | 'destinationPosition'
+  Prelude.NonEmpty Prelude.Double ->
+  CalculateRoute
+newCalculateRoute
+  pCalculatorName_
+  pDeparturePosition_
+  pDestinationPosition_ =
+    CalculateRoute'
+      { carModeOptions = Prelude.Nothing,
+        departNow = Prelude.Nothing,
+        departureTime = Prelude.Nothing,
+        distanceUnit = Prelude.Nothing,
+        includeLegGeometry = Prelude.Nothing,
+        travelMode = Prelude.Nothing,
+        truckModeOptions = Prelude.Nothing,
+        waypointPositions = Prelude.Nothing,
+        calculatorName = pCalculatorName_,
+        departurePosition =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pDeparturePosition_,
+        destinationPosition =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pDestinationPosition_
+      }
+
+-- | Specifies route preferences when traveling by @Car@, such as avoiding
+-- routes that use ferries or tolls.
+--
+-- Requirements: @TravelMode@ must be specified as @Car@.
+calculateRoute_carModeOptions :: Lens.Lens' CalculateRoute (Prelude.Maybe CalculateRouteCarModeOptions)
+calculateRoute_carModeOptions = Lens.lens (\CalculateRoute' {carModeOptions} -> carModeOptions) (\s@CalculateRoute' {} a -> s {carModeOptions = a} :: CalculateRoute)
+
+-- | Sets the time of departure as the current time. Uses the current time to
+-- calculate a route. Otherwise, the best time of day to travel with the
+-- best traffic conditions is used to calculate the route.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+calculateRoute_departNow :: Lens.Lens' CalculateRoute (Prelude.Maybe Prelude.Bool)
+calculateRoute_departNow = Lens.lens (\CalculateRoute' {departNow} -> departNow) (\s@CalculateRoute' {} a -> s {departNow = a} :: CalculateRoute)
+
+-- | Specifies the desired time of departure. Uses the given time to
+-- calculate the route. Otherwise, the best time of day to travel with the
+-- best traffic conditions is used to calculate the route.
+--
+-- Setting a departure time in the past returns a @400 ValidationException@
+-- error.
+--
+-- -   In <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+--     format: @YYYY-MM-DDThh:mm:ss.sssZ@. For example,
+--     @2020–07-2T12:15:20.000Z+01:00@
+calculateRoute_departureTime :: Lens.Lens' CalculateRoute (Prelude.Maybe Prelude.UTCTime)
+calculateRoute_departureTime = Lens.lens (\CalculateRoute' {departureTime} -> departureTime) (\s@CalculateRoute' {} a -> s {departureTime = a} :: CalculateRoute) Prelude.. Lens.mapping Data._Time
+
+-- | Set the unit system to specify the distance.
+--
+-- Default Value: @Kilometers@
+calculateRoute_distanceUnit :: Lens.Lens' CalculateRoute (Prelude.Maybe DistanceUnit)
+calculateRoute_distanceUnit = Lens.lens (\CalculateRoute' {distanceUnit} -> distanceUnit) (\s@CalculateRoute' {} a -> s {distanceUnit = a} :: CalculateRoute)
+
+-- | Set to include the geometry details in the result for each path between
+-- a pair of positions.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+calculateRoute_includeLegGeometry :: Lens.Lens' CalculateRoute (Prelude.Maybe Prelude.Bool)
+calculateRoute_includeLegGeometry = Lens.lens (\CalculateRoute' {includeLegGeometry} -> includeLegGeometry) (\s@CalculateRoute' {} a -> s {includeLegGeometry = a} :: CalculateRoute)
+
+-- | Specifies the mode of transport when calculating a route. Used in
+-- estimating the speed of travel and road compatibility. You can choose
+-- @Car@, @Truck@, or @Walking@ as options for the @TravelMode@.
+--
+-- The @TravelMode@ you specify also determines how you specify route
+-- preferences:
+--
+-- -   If traveling by @Car@ use the @CarModeOptions@ parameter.
+--
+-- -   If traveling by @Truck@ use the @TruckModeOptions@ parameter.
+--
+-- Default Value: @Car@
+calculateRoute_travelMode :: Lens.Lens' CalculateRoute (Prelude.Maybe TravelMode)
+calculateRoute_travelMode = Lens.lens (\CalculateRoute' {travelMode} -> travelMode) (\s@CalculateRoute' {} a -> s {travelMode = a} :: CalculateRoute)
+
+-- | Specifies route preferences when traveling by @Truck@, such as avoiding
+-- routes that use ferries or tolls, and truck specifications to consider
+-- when choosing an optimal road.
+--
+-- Requirements: @TravelMode@ must be specified as @Truck@.
+calculateRoute_truckModeOptions :: Lens.Lens' CalculateRoute (Prelude.Maybe CalculateRouteTruckModeOptions)
+calculateRoute_truckModeOptions = Lens.lens (\CalculateRoute' {truckModeOptions} -> truckModeOptions) (\s@CalculateRoute' {} a -> s {truckModeOptions = a} :: CalculateRoute)
+
+-- | Specifies an ordered list of up to 23 intermediate positions to include
+-- along a route between the departure position and destination position.
+--
+-- -   For example, from the @DeparturePosition@ @[-123.115, 49.285]@, the
+--     route follows the order that the waypoint positions are given
+--     @[[-122.757, 49.0021],[-122.349, 47.620]]@
+--
+-- If you specify a waypoint position that\'s not located on a road, Amazon
+-- Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+--
+-- Specifying more than 23 waypoints returns a @400 ValidationException@
+-- error.
+--
+-- If Esri is the provider for your route calculator, specifying a route
+-- that is longer than 400 km returns a @400 RoutesValidationException@
+-- error.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+calculateRoute_waypointPositions :: Lens.Lens' CalculateRoute (Prelude.Maybe [Prelude.NonEmpty Prelude.Double])
+calculateRoute_waypointPositions = Lens.lens (\CalculateRoute' {waypointPositions} -> waypointPositions) (\s@CalculateRoute' {} a -> s {waypointPositions = a} :: CalculateRoute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the route calculator resource that you want to use to
+-- calculate the route.
+calculateRoute_calculatorName :: Lens.Lens' CalculateRoute Prelude.Text
+calculateRoute_calculatorName = Lens.lens (\CalculateRoute' {calculatorName} -> calculatorName) (\s@CalculateRoute' {} a -> s {calculatorName = a} :: CalculateRoute)
+
+-- | The start position for the route. Defined in
+-- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 World Geodetic System (WGS 84)>
+-- format: @[longitude, latitude]@.
+--
+-- -   For example, @[-123.115, 49.285]@
+--
+-- If you specify a departure that\'s not located on a road, Amazon
+-- Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+-- If Esri is the provider for your route calculator, specifying a route
+-- that is longer than 400 km returns a @400 RoutesValidationException@
+-- error.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+calculateRoute_departurePosition :: Lens.Lens' CalculateRoute (Prelude.NonEmpty Prelude.Double)
+calculateRoute_departurePosition = Lens.lens (\CalculateRoute' {departurePosition} -> departurePosition) (\s@CalculateRoute' {} a -> s {departurePosition = a} :: CalculateRoute) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The finish position for the route. Defined in
+-- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 World Geodetic System (WGS 84)>
+-- format: @[longitude, latitude]@.
+--
+-- -   For example, @[-122.339, 47.615]@
+--
+-- If you specify a destination that\'s not located on a road, Amazon
+-- Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+calculateRoute_destinationPosition :: Lens.Lens' CalculateRoute (Prelude.NonEmpty Prelude.Double)
+calculateRoute_destinationPosition = Lens.lens (\CalculateRoute' {destinationPosition} -> destinationPosition) (\s@CalculateRoute' {} a -> s {destinationPosition = a} :: CalculateRoute) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest CalculateRoute where
+  type
+    AWSResponse CalculateRoute =
+      CalculateRouteResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CalculateRouteResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Legs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "Summary")
+      )
+
+instance Prelude.Hashable CalculateRoute where
+  hashWithSalt _salt CalculateRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` carModeOptions
+      `Prelude.hashWithSalt` departNow
+      `Prelude.hashWithSalt` departureTime
+      `Prelude.hashWithSalt` distanceUnit
+      `Prelude.hashWithSalt` includeLegGeometry
+      `Prelude.hashWithSalt` travelMode
+      `Prelude.hashWithSalt` truckModeOptions
+      `Prelude.hashWithSalt` waypointPositions
+      `Prelude.hashWithSalt` calculatorName
+      `Prelude.hashWithSalt` departurePosition
+      `Prelude.hashWithSalt` destinationPosition
+
+instance Prelude.NFData CalculateRoute where
+  rnf CalculateRoute' {..} =
+    Prelude.rnf carModeOptions
+      `Prelude.seq` Prelude.rnf departNow
+      `Prelude.seq` Prelude.rnf departureTime
+      `Prelude.seq` Prelude.rnf distanceUnit
+      `Prelude.seq` Prelude.rnf includeLegGeometry
+      `Prelude.seq` Prelude.rnf travelMode
+      `Prelude.seq` Prelude.rnf truckModeOptions
+      `Prelude.seq` Prelude.rnf waypointPositions
+      `Prelude.seq` Prelude.rnf calculatorName
+      `Prelude.seq` Prelude.rnf departurePosition
+      `Prelude.seq` Prelude.rnf destinationPosition
+
+instance Data.ToHeaders CalculateRoute where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CalculateRoute where
+  toJSON CalculateRoute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CarModeOptions" Data..=)
+              Prelude.<$> carModeOptions,
+            ("DepartNow" Data..=) Prelude.<$> departNow,
+            ("DepartureTime" Data..=) Prelude.<$> departureTime,
+            ("DistanceUnit" Data..=) Prelude.<$> distanceUnit,
+            ("IncludeLegGeometry" Data..=)
+              Prelude.<$> includeLegGeometry,
+            ("TravelMode" Data..=) Prelude.<$> travelMode,
+            ("TruckModeOptions" Data..=)
+              Prelude.<$> truckModeOptions,
+            ("WaypointPositions" Data..=)
+              Prelude.<$> waypointPositions,
+            Prelude.Just
+              ("DeparturePosition" Data..= departurePosition),
+            Prelude.Just
+              ("DestinationPosition" Data..= destinationPosition)
+          ]
+      )
+
+instance Data.ToPath CalculateRoute where
+  toPath CalculateRoute' {..} =
+    Prelude.mconcat
+      [ "/routes/v0/calculators/",
+        Data.toBS calculatorName,
+        "/calculate/route"
+      ]
+
+instance Data.ToQuery CalculateRoute where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Returns the result of the route calculation. Metadata includes legs and
+-- route summary.
+--
+-- /See:/ 'newCalculateRouteResponse' smart constructor.
+data CalculateRouteResponse = CalculateRouteResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains details about each path between a pair of positions included
+    -- along a route such as: @StartPosition@, @EndPosition@, @Distance@,
+    -- @DurationSeconds@, @Geometry@, and @Steps@. The number of legs returned
+    -- corresponds to one fewer than the total number of positions in the
+    -- request.
+    --
+    -- For example, a route with a departure position and destination position
+    -- returns one leg with the positions
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html snapped to a nearby road>:
+    --
+    -- -   The @StartPosition@ is the departure position.
+    --
+    -- -   The @EndPosition@ is the destination position.
+    --
+    -- A route with a waypoint between the departure and destination position
+    -- returns two legs with the positions snapped to a nearby road:
+    --
+    -- -   Leg 1: The @StartPosition@ is the departure position . The
+    --     @EndPosition@ is the waypoint positon.
+    --
+    -- -   Leg 2: The @StartPosition@ is the waypoint position. The
+    --     @EndPosition@ is the destination position.
+    legs :: [Leg],
+    -- | Contains information about the whole route, such as: @RouteBBox@,
+    -- @DataSource@, @Distance@, @DistanceUnit@, and @DurationSeconds@.
+    summary :: CalculateRouteSummary
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CalculateRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'calculateRouteResponse_httpStatus' - The response's http status code.
+--
+-- 'legs', 'calculateRouteResponse_legs' - Contains details about each path between a pair of positions included
+-- along a route such as: @StartPosition@, @EndPosition@, @Distance@,
+-- @DurationSeconds@, @Geometry@, and @Steps@. The number of legs returned
+-- corresponds to one fewer than the total number of positions in the
+-- request.
+--
+-- For example, a route with a departure position and destination position
+-- returns one leg with the positions
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html snapped to a nearby road>:
+--
+-- -   The @StartPosition@ is the departure position.
+--
+-- -   The @EndPosition@ is the destination position.
+--
+-- A route with a waypoint between the departure and destination position
+-- returns two legs with the positions snapped to a nearby road:
+--
+-- -   Leg 1: The @StartPosition@ is the departure position . The
+--     @EndPosition@ is the waypoint positon.
+--
+-- -   Leg 2: The @StartPosition@ is the waypoint position. The
+--     @EndPosition@ is the destination position.
+--
+-- 'summary', 'calculateRouteResponse_summary' - Contains information about the whole route, such as: @RouteBBox@,
+-- @DataSource@, @Distance@, @DistanceUnit@, and @DurationSeconds@.
+newCalculateRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'summary'
+  CalculateRouteSummary ->
+  CalculateRouteResponse
+newCalculateRouteResponse pHttpStatus_ pSummary_ =
+  CalculateRouteResponse'
+    { httpStatus = pHttpStatus_,
+      legs = Prelude.mempty,
+      summary = pSummary_
+    }
+
+-- | The response's http status code.
+calculateRouteResponse_httpStatus :: Lens.Lens' CalculateRouteResponse Prelude.Int
+calculateRouteResponse_httpStatus = Lens.lens (\CalculateRouteResponse' {httpStatus} -> httpStatus) (\s@CalculateRouteResponse' {} a -> s {httpStatus = a} :: CalculateRouteResponse)
+
+-- | Contains details about each path between a pair of positions included
+-- along a route such as: @StartPosition@, @EndPosition@, @Distance@,
+-- @DurationSeconds@, @Geometry@, and @Steps@. The number of legs returned
+-- corresponds to one fewer than the total number of positions in the
+-- request.
+--
+-- For example, a route with a departure position and destination position
+-- returns one leg with the positions
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html snapped to a nearby road>:
+--
+-- -   The @StartPosition@ is the departure position.
+--
+-- -   The @EndPosition@ is the destination position.
+--
+-- A route with a waypoint between the departure and destination position
+-- returns two legs with the positions snapped to a nearby road:
+--
+-- -   Leg 1: The @StartPosition@ is the departure position . The
+--     @EndPosition@ is the waypoint positon.
+--
+-- -   Leg 2: The @StartPosition@ is the waypoint position. The
+--     @EndPosition@ is the destination position.
+calculateRouteResponse_legs :: Lens.Lens' CalculateRouteResponse [Leg]
+calculateRouteResponse_legs = Lens.lens (\CalculateRouteResponse' {legs} -> legs) (\s@CalculateRouteResponse' {} a -> s {legs = a} :: CalculateRouteResponse) Prelude.. Lens.coerced
+
+-- | Contains information about the whole route, such as: @RouteBBox@,
+-- @DataSource@, @Distance@, @DistanceUnit@, and @DurationSeconds@.
+calculateRouteResponse_summary :: Lens.Lens' CalculateRouteResponse CalculateRouteSummary
+calculateRouteResponse_summary = Lens.lens (\CalculateRouteResponse' {summary} -> summary) (\s@CalculateRouteResponse' {} a -> s {summary = a} :: CalculateRouteResponse)
+
+instance Prelude.NFData CalculateRouteResponse where
+  rnf CalculateRouteResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf legs
+      `Prelude.seq` Prelude.rnf summary
diff --git a/gen/Amazonka/Location/CalculateRouteMatrix.hs b/gen/Amazonka/Location/CalculateRouteMatrix.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/CalculateRouteMatrix.hs
@@ -0,0 +1,603 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.CalculateRouteMatrix
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- <https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html Calculates a route matrix>
+-- given the following required parameters: @DeparturePositions@ and
+-- @DestinationPositions@. @CalculateRouteMatrix@ calculates routes and
+-- returns the travel time and travel distance from each departure position
+-- to each destination position in the request. For example, given
+-- departure positions A and B, and destination positions X and Y,
+-- @CalculateRouteMatrix@ will return time and distance for routes from A
+-- to X, A to Y, B to X, and B to Y (in that order). The number of results
+-- returned (and routes calculated) will be the number of
+-- @DeparturePositions@ times the number of @DestinationPositions@.
+--
+-- Your account is charged for each route calculated, not the number of
+-- requests.
+--
+-- Requires that you first
+-- <https://docs.aws.amazon.com/location-routes/latest/APIReference/API_CreateRouteCalculator.html create a route calculator resource>.
+--
+-- By default, a request that doesn\'t specify a departure time uses the
+-- best time of day to travel with the best traffic conditions when
+-- calculating routes.
+--
+-- Additional options include:
+--
+-- -   <https://docs.aws.amazon.com/location/latest/developerguide/departure-time.html Specifying a departure time>
+--     using either @DepartureTime@ or @DepartNow@. This calculates routes
+--     based on predictive traffic data at the given time.
+--
+--     You can\'t specify both @DepartureTime@ and @DepartNow@ in a single
+--     request. Specifying both parameters returns a validation error.
+--
+-- -   <https://docs.aws.amazon.com/location/latest/developerguide/travel-mode.html Specifying a travel mode>
+--     using TravelMode sets the transportation mode used to calculate the
+--     routes. This also lets you specify additional route preferences in
+--     @CarModeOptions@ if traveling by @Car@, or @TruckModeOptions@ if
+--     traveling by @Truck@.
+module Amazonka.Location.CalculateRouteMatrix
+  ( -- * Creating a Request
+    CalculateRouteMatrix (..),
+    newCalculateRouteMatrix,
+
+    -- * Request Lenses
+    calculateRouteMatrix_carModeOptions,
+    calculateRouteMatrix_departNow,
+    calculateRouteMatrix_departureTime,
+    calculateRouteMatrix_distanceUnit,
+    calculateRouteMatrix_travelMode,
+    calculateRouteMatrix_truckModeOptions,
+    calculateRouteMatrix_calculatorName,
+    calculateRouteMatrix_departurePositions,
+    calculateRouteMatrix_destinationPositions,
+
+    -- * Destructuring the Response
+    CalculateRouteMatrixResponse (..),
+    newCalculateRouteMatrixResponse,
+
+    -- * Response Lenses
+    calculateRouteMatrixResponse_snappedDeparturePositions,
+    calculateRouteMatrixResponse_snappedDestinationPositions,
+    calculateRouteMatrixResponse_httpStatus,
+    calculateRouteMatrixResponse_routeMatrix,
+    calculateRouteMatrixResponse_summary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCalculateRouteMatrix' smart constructor.
+data CalculateRouteMatrix = CalculateRouteMatrix'
+  { -- | Specifies route preferences when traveling by @Car@, such as avoiding
+    -- routes that use ferries or tolls.
+    --
+    -- Requirements: @TravelMode@ must be specified as @Car@.
+    carModeOptions :: Prelude.Maybe CalculateRouteCarModeOptions,
+    -- | Sets the time of departure as the current time. Uses the current time to
+    -- calculate the route matrix. You can\'t set both @DepartureTime@ and
+    -- @DepartNow@. If neither is set, the best time of day to travel with the
+    -- best traffic conditions is used to calculate the route matrix.
+    --
+    -- Default Value: @false@
+    --
+    -- Valid Values: @false@ | @true@
+    departNow :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies the desired time of departure. Uses the given time to
+    -- calculate the route matrix. You can\'t set both @DepartureTime@ and
+    -- @DepartNow@. If neither is set, the best time of day to travel with the
+    -- best traffic conditions is used to calculate the route matrix.
+    --
+    -- Setting a departure time in the past returns a @400 ValidationException@
+    -- error.
+    --
+    -- -   In <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    --     format: @YYYY-MM-DDThh:mm:ss.sssZ@. For example,
+    --     @2020–07-2T12:15:20.000Z+01:00@
+    departureTime :: Prelude.Maybe Data.ISO8601,
+    -- | Set the unit system to specify the distance.
+    --
+    -- Default Value: @Kilometers@
+    distanceUnit :: Prelude.Maybe DistanceUnit,
+    -- | Specifies the mode of transport when calculating a route. Used in
+    -- estimating the speed of travel and road compatibility.
+    --
+    -- The @TravelMode@ you specify also determines how you specify route
+    -- preferences:
+    --
+    -- -   If traveling by @Car@ use the @CarModeOptions@ parameter.
+    --
+    -- -   If traveling by @Truck@ use the @TruckModeOptions@ parameter.
+    --
+    -- Default Value: @Car@
+    travelMode :: Prelude.Maybe TravelMode,
+    -- | Specifies route preferences when traveling by @Truck@, such as avoiding
+    -- routes that use ferries or tolls, and truck specifications to consider
+    -- when choosing an optimal road.
+    --
+    -- Requirements: @TravelMode@ must be specified as @Truck@.
+    truckModeOptions :: Prelude.Maybe CalculateRouteTruckModeOptions,
+    -- | The name of the route calculator resource that you want to use to
+    -- calculate the route matrix.
+    calculatorName :: Prelude.Text,
+    -- | The list of departure (origin) positions for the route matrix. An array
+    -- of points, each of which is itself a 2-value array defined in
+    -- <https://earth-info.nga.mil/GandG/wgs84/index.html WGS 84> format:
+    -- @[longitude, latitude]@. For example, @[-123.115, 49.285]@.
+    --
+    -- Depending on the data provider selected in the route calculator resource
+    -- there may be additional restrictions on the inputs you can choose. See
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html#matrix-routing-position-limits Position restrictions>
+    -- in the /Amazon Location Service Developer Guide/.
+    --
+    -- For route calculators that use Esri as the data provider, if you specify
+    -- a departure that\'s not located on a road, Amazon Location
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+    -- The snapped value is available in the result in
+    -- @SnappedDeparturePositions@.
+    --
+    -- Valid Values: @[-180 to 180,-90 to 90]@
+    departurePositions :: Prelude.NonEmpty (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | The list of destination positions for the route matrix. An array of
+    -- points, each of which is itself a 2-value array defined in
+    -- <https://earth-info.nga.mil/GandG/wgs84/index.html WGS 84> format:
+    -- @[longitude, latitude]@. For example, @[-122.339, 47.615]@
+    --
+    -- Depending on the data provider selected in the route calculator resource
+    -- there may be additional restrictions on the inputs you can choose. See
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html#matrix-routing-position-limits Position restrictions>
+    -- in the /Amazon Location Service Developer Guide/.
+    --
+    -- For route calculators that use Esri as the data provider, if you specify
+    -- a destination that\'s not located on a road, Amazon Location
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+    -- The snapped value is available in the result in
+    -- @SnappedDestinationPositions@.
+    --
+    -- Valid Values: @[-180 to 180,-90 to 90]@
+    destinationPositions :: Prelude.NonEmpty (Data.Sensitive (Prelude.NonEmpty Prelude.Double))
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CalculateRouteMatrix' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carModeOptions', 'calculateRouteMatrix_carModeOptions' - Specifies route preferences when traveling by @Car@, such as avoiding
+-- routes that use ferries or tolls.
+--
+-- Requirements: @TravelMode@ must be specified as @Car@.
+--
+-- 'departNow', 'calculateRouteMatrix_departNow' - Sets the time of departure as the current time. Uses the current time to
+-- calculate the route matrix. You can\'t set both @DepartureTime@ and
+-- @DepartNow@. If neither is set, the best time of day to travel with the
+-- best traffic conditions is used to calculate the route matrix.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+--
+-- 'departureTime', 'calculateRouteMatrix_departureTime' - Specifies the desired time of departure. Uses the given time to
+-- calculate the route matrix. You can\'t set both @DepartureTime@ and
+-- @DepartNow@. If neither is set, the best time of day to travel with the
+-- best traffic conditions is used to calculate the route matrix.
+--
+-- Setting a departure time in the past returns a @400 ValidationException@
+-- error.
+--
+-- -   In <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+--     format: @YYYY-MM-DDThh:mm:ss.sssZ@. For example,
+--     @2020–07-2T12:15:20.000Z+01:00@
+--
+-- 'distanceUnit', 'calculateRouteMatrix_distanceUnit' - Set the unit system to specify the distance.
+--
+-- Default Value: @Kilometers@
+--
+-- 'travelMode', 'calculateRouteMatrix_travelMode' - Specifies the mode of transport when calculating a route. Used in
+-- estimating the speed of travel and road compatibility.
+--
+-- The @TravelMode@ you specify also determines how you specify route
+-- preferences:
+--
+-- -   If traveling by @Car@ use the @CarModeOptions@ parameter.
+--
+-- -   If traveling by @Truck@ use the @TruckModeOptions@ parameter.
+--
+-- Default Value: @Car@
+--
+-- 'truckModeOptions', 'calculateRouteMatrix_truckModeOptions' - Specifies route preferences when traveling by @Truck@, such as avoiding
+-- routes that use ferries or tolls, and truck specifications to consider
+-- when choosing an optimal road.
+--
+-- Requirements: @TravelMode@ must be specified as @Truck@.
+--
+-- 'calculatorName', 'calculateRouteMatrix_calculatorName' - The name of the route calculator resource that you want to use to
+-- calculate the route matrix.
+--
+-- 'departurePositions', 'calculateRouteMatrix_departurePositions' - The list of departure (origin) positions for the route matrix. An array
+-- of points, each of which is itself a 2-value array defined in
+-- <https://earth-info.nga.mil/GandG/wgs84/index.html WGS 84> format:
+-- @[longitude, latitude]@. For example, @[-123.115, 49.285]@.
+--
+-- Depending on the data provider selected in the route calculator resource
+-- there may be additional restrictions on the inputs you can choose. See
+-- <https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html#matrix-routing-position-limits Position restrictions>
+-- in the /Amazon Location Service Developer Guide/.
+--
+-- For route calculators that use Esri as the data provider, if you specify
+-- a departure that\'s not located on a road, Amazon Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+-- The snapped value is available in the result in
+-- @SnappedDeparturePositions@.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+--
+-- 'destinationPositions', 'calculateRouteMatrix_destinationPositions' - The list of destination positions for the route matrix. An array of
+-- points, each of which is itself a 2-value array defined in
+-- <https://earth-info.nga.mil/GandG/wgs84/index.html WGS 84> format:
+-- @[longitude, latitude]@. For example, @[-122.339, 47.615]@
+--
+-- Depending on the data provider selected in the route calculator resource
+-- there may be additional restrictions on the inputs you can choose. See
+-- <https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html#matrix-routing-position-limits Position restrictions>
+-- in the /Amazon Location Service Developer Guide/.
+--
+-- For route calculators that use Esri as the data provider, if you specify
+-- a destination that\'s not located on a road, Amazon Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+-- The snapped value is available in the result in
+-- @SnappedDestinationPositions@.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+newCalculateRouteMatrix ::
+  -- | 'calculatorName'
+  Prelude.Text ->
+  -- | 'departurePositions'
+  Prelude.NonEmpty (Prelude.NonEmpty Prelude.Double) ->
+  -- | 'destinationPositions'
+  Prelude.NonEmpty (Prelude.NonEmpty Prelude.Double) ->
+  CalculateRouteMatrix
+newCalculateRouteMatrix
+  pCalculatorName_
+  pDeparturePositions_
+  pDestinationPositions_ =
+    CalculateRouteMatrix'
+      { carModeOptions =
+          Prelude.Nothing,
+        departNow = Prelude.Nothing,
+        departureTime = Prelude.Nothing,
+        distanceUnit = Prelude.Nothing,
+        travelMode = Prelude.Nothing,
+        truckModeOptions = Prelude.Nothing,
+        calculatorName = pCalculatorName_,
+        departurePositions =
+          Lens.coerced Lens.# pDeparturePositions_,
+        destinationPositions =
+          Lens.coerced Lens.# pDestinationPositions_
+      }
+
+-- | Specifies route preferences when traveling by @Car@, such as avoiding
+-- routes that use ferries or tolls.
+--
+-- Requirements: @TravelMode@ must be specified as @Car@.
+calculateRouteMatrix_carModeOptions :: Lens.Lens' CalculateRouteMatrix (Prelude.Maybe CalculateRouteCarModeOptions)
+calculateRouteMatrix_carModeOptions = Lens.lens (\CalculateRouteMatrix' {carModeOptions} -> carModeOptions) (\s@CalculateRouteMatrix' {} a -> s {carModeOptions = a} :: CalculateRouteMatrix)
+
+-- | Sets the time of departure as the current time. Uses the current time to
+-- calculate the route matrix. You can\'t set both @DepartureTime@ and
+-- @DepartNow@. If neither is set, the best time of day to travel with the
+-- best traffic conditions is used to calculate the route matrix.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+calculateRouteMatrix_departNow :: Lens.Lens' CalculateRouteMatrix (Prelude.Maybe Prelude.Bool)
+calculateRouteMatrix_departNow = Lens.lens (\CalculateRouteMatrix' {departNow} -> departNow) (\s@CalculateRouteMatrix' {} a -> s {departNow = a} :: CalculateRouteMatrix)
+
+-- | Specifies the desired time of departure. Uses the given time to
+-- calculate the route matrix. You can\'t set both @DepartureTime@ and
+-- @DepartNow@. If neither is set, the best time of day to travel with the
+-- best traffic conditions is used to calculate the route matrix.
+--
+-- Setting a departure time in the past returns a @400 ValidationException@
+-- error.
+--
+-- -   In <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+--     format: @YYYY-MM-DDThh:mm:ss.sssZ@. For example,
+--     @2020–07-2T12:15:20.000Z+01:00@
+calculateRouteMatrix_departureTime :: Lens.Lens' CalculateRouteMatrix (Prelude.Maybe Prelude.UTCTime)
+calculateRouteMatrix_departureTime = Lens.lens (\CalculateRouteMatrix' {departureTime} -> departureTime) (\s@CalculateRouteMatrix' {} a -> s {departureTime = a} :: CalculateRouteMatrix) Prelude.. Lens.mapping Data._Time
+
+-- | Set the unit system to specify the distance.
+--
+-- Default Value: @Kilometers@
+calculateRouteMatrix_distanceUnit :: Lens.Lens' CalculateRouteMatrix (Prelude.Maybe DistanceUnit)
+calculateRouteMatrix_distanceUnit = Lens.lens (\CalculateRouteMatrix' {distanceUnit} -> distanceUnit) (\s@CalculateRouteMatrix' {} a -> s {distanceUnit = a} :: CalculateRouteMatrix)
+
+-- | Specifies the mode of transport when calculating a route. Used in
+-- estimating the speed of travel and road compatibility.
+--
+-- The @TravelMode@ you specify also determines how you specify route
+-- preferences:
+--
+-- -   If traveling by @Car@ use the @CarModeOptions@ parameter.
+--
+-- -   If traveling by @Truck@ use the @TruckModeOptions@ parameter.
+--
+-- Default Value: @Car@
+calculateRouteMatrix_travelMode :: Lens.Lens' CalculateRouteMatrix (Prelude.Maybe TravelMode)
+calculateRouteMatrix_travelMode = Lens.lens (\CalculateRouteMatrix' {travelMode} -> travelMode) (\s@CalculateRouteMatrix' {} a -> s {travelMode = a} :: CalculateRouteMatrix)
+
+-- | Specifies route preferences when traveling by @Truck@, such as avoiding
+-- routes that use ferries or tolls, and truck specifications to consider
+-- when choosing an optimal road.
+--
+-- Requirements: @TravelMode@ must be specified as @Truck@.
+calculateRouteMatrix_truckModeOptions :: Lens.Lens' CalculateRouteMatrix (Prelude.Maybe CalculateRouteTruckModeOptions)
+calculateRouteMatrix_truckModeOptions = Lens.lens (\CalculateRouteMatrix' {truckModeOptions} -> truckModeOptions) (\s@CalculateRouteMatrix' {} a -> s {truckModeOptions = a} :: CalculateRouteMatrix)
+
+-- | The name of the route calculator resource that you want to use to
+-- calculate the route matrix.
+calculateRouteMatrix_calculatorName :: Lens.Lens' CalculateRouteMatrix Prelude.Text
+calculateRouteMatrix_calculatorName = Lens.lens (\CalculateRouteMatrix' {calculatorName} -> calculatorName) (\s@CalculateRouteMatrix' {} a -> s {calculatorName = a} :: CalculateRouteMatrix)
+
+-- | The list of departure (origin) positions for the route matrix. An array
+-- of points, each of which is itself a 2-value array defined in
+-- <https://earth-info.nga.mil/GandG/wgs84/index.html WGS 84> format:
+-- @[longitude, latitude]@. For example, @[-123.115, 49.285]@.
+--
+-- Depending on the data provider selected in the route calculator resource
+-- there may be additional restrictions on the inputs you can choose. See
+-- <https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html#matrix-routing-position-limits Position restrictions>
+-- in the /Amazon Location Service Developer Guide/.
+--
+-- For route calculators that use Esri as the data provider, if you specify
+-- a departure that\'s not located on a road, Amazon Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+-- The snapped value is available in the result in
+-- @SnappedDeparturePositions@.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+calculateRouteMatrix_departurePositions :: Lens.Lens' CalculateRouteMatrix (Prelude.NonEmpty (Prelude.NonEmpty Prelude.Double))
+calculateRouteMatrix_departurePositions = Lens.lens (\CalculateRouteMatrix' {departurePositions} -> departurePositions) (\s@CalculateRouteMatrix' {} a -> s {departurePositions = a} :: CalculateRouteMatrix) Prelude.. Lens.coerced
+
+-- | The list of destination positions for the route matrix. An array of
+-- points, each of which is itself a 2-value array defined in
+-- <https://earth-info.nga.mil/GandG/wgs84/index.html WGS 84> format:
+-- @[longitude, latitude]@. For example, @[-122.339, 47.615]@
+--
+-- Depending on the data provider selected in the route calculator resource
+-- there may be additional restrictions on the inputs you can choose. See
+-- <https://docs.aws.amazon.com/location/latest/developerguide/calculate-route-matrix.html#matrix-routing-position-limits Position restrictions>
+-- in the /Amazon Location Service Developer Guide/.
+--
+-- For route calculators that use Esri as the data provider, if you specify
+-- a destination that\'s not located on a road, Amazon Location
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html moves the position to the nearest road>.
+-- The snapped value is available in the result in
+-- @SnappedDestinationPositions@.
+--
+-- Valid Values: @[-180 to 180,-90 to 90]@
+calculateRouteMatrix_destinationPositions :: Lens.Lens' CalculateRouteMatrix (Prelude.NonEmpty (Prelude.NonEmpty Prelude.Double))
+calculateRouteMatrix_destinationPositions = Lens.lens (\CalculateRouteMatrix' {destinationPositions} -> destinationPositions) (\s@CalculateRouteMatrix' {} a -> s {destinationPositions = a} :: CalculateRouteMatrix) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CalculateRouteMatrix where
+  type
+    AWSResponse CalculateRouteMatrix =
+      CalculateRouteMatrixResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CalculateRouteMatrixResponse'
+            Prelude.<$> (x Data..?> "SnappedDeparturePositions")
+            Prelude.<*> (x Data..?> "SnappedDestinationPositions")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "RouteMatrix" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "Summary")
+      )
+
+instance Prelude.Hashable CalculateRouteMatrix where
+  hashWithSalt _salt CalculateRouteMatrix' {..} =
+    _salt
+      `Prelude.hashWithSalt` carModeOptions
+      `Prelude.hashWithSalt` departNow
+      `Prelude.hashWithSalt` departureTime
+      `Prelude.hashWithSalt` distanceUnit
+      `Prelude.hashWithSalt` travelMode
+      `Prelude.hashWithSalt` truckModeOptions
+      `Prelude.hashWithSalt` calculatorName
+      `Prelude.hashWithSalt` departurePositions
+      `Prelude.hashWithSalt` destinationPositions
+
+instance Prelude.NFData CalculateRouteMatrix where
+  rnf CalculateRouteMatrix' {..} =
+    Prelude.rnf carModeOptions
+      `Prelude.seq` Prelude.rnf departNow
+      `Prelude.seq` Prelude.rnf departureTime
+      `Prelude.seq` Prelude.rnf distanceUnit
+      `Prelude.seq` Prelude.rnf travelMode
+      `Prelude.seq` Prelude.rnf truckModeOptions
+      `Prelude.seq` Prelude.rnf calculatorName
+      `Prelude.seq` Prelude.rnf departurePositions
+      `Prelude.seq` Prelude.rnf destinationPositions
+
+instance Data.ToHeaders CalculateRouteMatrix where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CalculateRouteMatrix where
+  toJSON CalculateRouteMatrix' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CarModeOptions" Data..=)
+              Prelude.<$> carModeOptions,
+            ("DepartNow" Data..=) Prelude.<$> departNow,
+            ("DepartureTime" Data..=) Prelude.<$> departureTime,
+            ("DistanceUnit" Data..=) Prelude.<$> distanceUnit,
+            ("TravelMode" Data..=) Prelude.<$> travelMode,
+            ("TruckModeOptions" Data..=)
+              Prelude.<$> truckModeOptions,
+            Prelude.Just
+              ("DeparturePositions" Data..= departurePositions),
+            Prelude.Just
+              ( "DestinationPositions"
+                  Data..= destinationPositions
+              )
+          ]
+      )
+
+instance Data.ToPath CalculateRouteMatrix where
+  toPath CalculateRouteMatrix' {..} =
+    Prelude.mconcat
+      [ "/routes/v0/calculators/",
+        Data.toBS calculatorName,
+        "/calculate/route-matrix"
+      ]
+
+instance Data.ToQuery CalculateRouteMatrix where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | Returns the result of the route matrix calculation.
+--
+-- /See:/ 'newCalculateRouteMatrixResponse' smart constructor.
+data CalculateRouteMatrixResponse = CalculateRouteMatrixResponse'
+  { -- | For routes calculated using an Esri route calculator resource, departure
+    -- positions are snapped to the closest road. For Esri route calculator
+    -- resources, this returns the list of departure\/origin positions used for
+    -- calculation of the @RouteMatrix@.
+    snappedDeparturePositions :: Prelude.Maybe (Prelude.NonEmpty (Data.Sensitive (Prelude.NonEmpty Prelude.Double))),
+    -- | The list of destination positions for the route matrix used for
+    -- calculation of the @RouteMatrix@.
+    snappedDestinationPositions :: Prelude.Maybe (Prelude.NonEmpty (Data.Sensitive (Prelude.NonEmpty Prelude.Double))),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The calculated route matrix containing the results for all pairs of
+    -- @DeparturePositions@ to @DestinationPositions@. Each row corresponds to
+    -- one entry in @DeparturePositions@. Each entry in the row corresponds to
+    -- the route from that entry in @DeparturePositions@ to an entry in
+    -- @DestinationPositions@.
+    routeMatrix :: [[RouteMatrixEntry]],
+    -- | Contains information about the route matrix, @DataSource@,
+    -- @DistanceUnit@, @RouteCount@ and @ErrorCount@.
+    summary :: CalculateRouteMatrixSummary
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CalculateRouteMatrixResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snappedDeparturePositions', 'calculateRouteMatrixResponse_snappedDeparturePositions' - For routes calculated using an Esri route calculator resource, departure
+-- positions are snapped to the closest road. For Esri route calculator
+-- resources, this returns the list of departure\/origin positions used for
+-- calculation of the @RouteMatrix@.
+--
+-- 'snappedDestinationPositions', 'calculateRouteMatrixResponse_snappedDestinationPositions' - The list of destination positions for the route matrix used for
+-- calculation of the @RouteMatrix@.
+--
+-- 'httpStatus', 'calculateRouteMatrixResponse_httpStatus' - The response's http status code.
+--
+-- 'routeMatrix', 'calculateRouteMatrixResponse_routeMatrix' - The calculated route matrix containing the results for all pairs of
+-- @DeparturePositions@ to @DestinationPositions@. Each row corresponds to
+-- one entry in @DeparturePositions@. Each entry in the row corresponds to
+-- the route from that entry in @DeparturePositions@ to an entry in
+-- @DestinationPositions@.
+--
+-- 'summary', 'calculateRouteMatrixResponse_summary' - Contains information about the route matrix, @DataSource@,
+-- @DistanceUnit@, @RouteCount@ and @ErrorCount@.
+newCalculateRouteMatrixResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'summary'
+  CalculateRouteMatrixSummary ->
+  CalculateRouteMatrixResponse
+newCalculateRouteMatrixResponse
+  pHttpStatus_
+  pSummary_ =
+    CalculateRouteMatrixResponse'
+      { snappedDeparturePositions =
+          Prelude.Nothing,
+        snappedDestinationPositions = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        routeMatrix = Prelude.mempty,
+        summary = pSummary_
+      }
+
+-- | For routes calculated using an Esri route calculator resource, departure
+-- positions are snapped to the closest road. For Esri route calculator
+-- resources, this returns the list of departure\/origin positions used for
+-- calculation of the @RouteMatrix@.
+calculateRouteMatrixResponse_snappedDeparturePositions :: Lens.Lens' CalculateRouteMatrixResponse (Prelude.Maybe (Prelude.NonEmpty (Prelude.NonEmpty Prelude.Double)))
+calculateRouteMatrixResponse_snappedDeparturePositions = Lens.lens (\CalculateRouteMatrixResponse' {snappedDeparturePositions} -> snappedDeparturePositions) (\s@CalculateRouteMatrixResponse' {} a -> s {snappedDeparturePositions = a} :: CalculateRouteMatrixResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The list of destination positions for the route matrix used for
+-- calculation of the @RouteMatrix@.
+calculateRouteMatrixResponse_snappedDestinationPositions :: Lens.Lens' CalculateRouteMatrixResponse (Prelude.Maybe (Prelude.NonEmpty (Prelude.NonEmpty Prelude.Double)))
+calculateRouteMatrixResponse_snappedDestinationPositions = Lens.lens (\CalculateRouteMatrixResponse' {snappedDestinationPositions} -> snappedDestinationPositions) (\s@CalculateRouteMatrixResponse' {} a -> s {snappedDestinationPositions = a} :: CalculateRouteMatrixResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+calculateRouteMatrixResponse_httpStatus :: Lens.Lens' CalculateRouteMatrixResponse Prelude.Int
+calculateRouteMatrixResponse_httpStatus = Lens.lens (\CalculateRouteMatrixResponse' {httpStatus} -> httpStatus) (\s@CalculateRouteMatrixResponse' {} a -> s {httpStatus = a} :: CalculateRouteMatrixResponse)
+
+-- | The calculated route matrix containing the results for all pairs of
+-- @DeparturePositions@ to @DestinationPositions@. Each row corresponds to
+-- one entry in @DeparturePositions@. Each entry in the row corresponds to
+-- the route from that entry in @DeparturePositions@ to an entry in
+-- @DestinationPositions@.
+calculateRouteMatrixResponse_routeMatrix :: Lens.Lens' CalculateRouteMatrixResponse [[RouteMatrixEntry]]
+calculateRouteMatrixResponse_routeMatrix = Lens.lens (\CalculateRouteMatrixResponse' {routeMatrix} -> routeMatrix) (\s@CalculateRouteMatrixResponse' {} a -> s {routeMatrix = a} :: CalculateRouteMatrixResponse) Prelude.. Lens.coerced
+
+-- | Contains information about the route matrix, @DataSource@,
+-- @DistanceUnit@, @RouteCount@ and @ErrorCount@.
+calculateRouteMatrixResponse_summary :: Lens.Lens' CalculateRouteMatrixResponse CalculateRouteMatrixSummary
+calculateRouteMatrixResponse_summary = Lens.lens (\CalculateRouteMatrixResponse' {summary} -> summary) (\s@CalculateRouteMatrixResponse' {} a -> s {summary = a} :: CalculateRouteMatrixResponse)
+
+instance Prelude.NFData CalculateRouteMatrixResponse where
+  rnf CalculateRouteMatrixResponse' {..} =
+    Prelude.rnf snappedDeparturePositions
+      `Prelude.seq` Prelude.rnf snappedDestinationPositions
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf routeMatrix
+      `Prelude.seq` Prelude.rnf summary
diff --git a/gen/Amazonka/Location/CreateGeofenceCollection.hs b/gen/Amazonka/Location/CreateGeofenceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/CreateGeofenceCollection.hs
@@ -0,0 +1,386 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.CreateGeofenceCollection
+-- 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 geofence collection, which manages and stores geofences.
+module Amazonka.Location.CreateGeofenceCollection
+  ( -- * Creating a Request
+    CreateGeofenceCollection (..),
+    newCreateGeofenceCollection,
+
+    -- * Request Lenses
+    createGeofenceCollection_description,
+    createGeofenceCollection_kmsKeyId,
+    createGeofenceCollection_pricingPlan,
+    createGeofenceCollection_pricingPlanDataSource,
+    createGeofenceCollection_tags,
+    createGeofenceCollection_collectionName,
+
+    -- * Destructuring the Response
+    CreateGeofenceCollectionResponse (..),
+    newCreateGeofenceCollectionResponse,
+
+    -- * Response Lenses
+    createGeofenceCollectionResponse_httpStatus,
+    createGeofenceCollectionResponse_collectionArn,
+    createGeofenceCollectionResponse_collectionName,
+    createGeofenceCollectionResponse_createTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateGeofenceCollection' smart constructor.
+data CreateGeofenceCollection = CreateGeofenceCollection'
+  { -- | An optional description for the geofence collection.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A key identifier for an
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
+    -- Enter a key ID, key ARN, alias name, or alias ARN.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | This parameter is no longer used.
+    pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
+    -- | Applies one or more tags to the geofence collection. A tag is a
+    -- key-value pair helps manage, identify, search, and filter your resources
+    -- by labelling them.
+    --
+    -- Format: @\"key\" : \"value\"@
+    --
+    -- Restrictions:
+    --
+    -- -   Maximum 50 tags per resource
+    --
+    -- -   Each resource tag must be unique with a maximum of one value.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8
+    --
+    -- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Cannot use \"aws:\" as a prefix for a key.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A custom name for the geofence collection.
+    --
+    -- Requirements:
+    --
+    -- -   Contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens (-),
+    --     periods (.), and underscores (_).
+    --
+    -- -   Must be a unique geofence collection name.
+    --
+    -- -   No spaces allowed. For example, @ExampleGeofenceCollection@.
+    collectionName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateGeofenceCollection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createGeofenceCollection_description' - An optional description for the geofence collection.
+--
+-- 'kmsKeyId', 'createGeofenceCollection_kmsKeyId' - A key identifier for an
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
+-- Enter a key ID, key ARN, alias name, or alias ARN.
+--
+-- 'pricingPlan', 'createGeofenceCollection_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'pricingPlanDataSource', 'createGeofenceCollection_pricingPlanDataSource' - This parameter is no longer used.
+--
+-- 'tags', 'createGeofenceCollection_tags' - Applies one or more tags to the geofence collection. A tag is a
+-- key-value pair helps manage, identify, search, and filter your resources
+-- by labelling them.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource
+--
+-- -   Each resource tag must be unique with a maximum of one value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+--
+-- 'collectionName', 'createGeofenceCollection_collectionName' - A custom name for the geofence collection.
+--
+-- Requirements:
+--
+-- -   Contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens (-),
+--     periods (.), and underscores (_).
+--
+-- -   Must be a unique geofence collection name.
+--
+-- -   No spaces allowed. For example, @ExampleGeofenceCollection@.
+newCreateGeofenceCollection ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  CreateGeofenceCollection
+newCreateGeofenceCollection pCollectionName_ =
+  CreateGeofenceCollection'
+    { description =
+        Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      pricingPlanDataSource = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      collectionName = pCollectionName_
+    }
+
+-- | An optional description for the geofence collection.
+createGeofenceCollection_description :: Lens.Lens' CreateGeofenceCollection (Prelude.Maybe Prelude.Text)
+createGeofenceCollection_description = Lens.lens (\CreateGeofenceCollection' {description} -> description) (\s@CreateGeofenceCollection' {} a -> s {description = a} :: CreateGeofenceCollection)
+
+-- | A key identifier for an
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
+-- Enter a key ID, key ARN, alias name, or alias ARN.
+createGeofenceCollection_kmsKeyId :: Lens.Lens' CreateGeofenceCollection (Prelude.Maybe Prelude.Text)
+createGeofenceCollection_kmsKeyId = Lens.lens (\CreateGeofenceCollection' {kmsKeyId} -> kmsKeyId) (\s@CreateGeofenceCollection' {} a -> s {kmsKeyId = a} :: CreateGeofenceCollection)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+createGeofenceCollection_pricingPlan :: Lens.Lens' CreateGeofenceCollection (Prelude.Maybe PricingPlan)
+createGeofenceCollection_pricingPlan = Lens.lens (\CreateGeofenceCollection' {pricingPlan} -> pricingPlan) (\s@CreateGeofenceCollection' {} a -> s {pricingPlan = a} :: CreateGeofenceCollection)
+
+-- | This parameter is no longer used.
+createGeofenceCollection_pricingPlanDataSource :: Lens.Lens' CreateGeofenceCollection (Prelude.Maybe Prelude.Text)
+createGeofenceCollection_pricingPlanDataSource = Lens.lens (\CreateGeofenceCollection' {pricingPlanDataSource} -> pricingPlanDataSource) (\s@CreateGeofenceCollection' {} a -> s {pricingPlanDataSource = a} :: CreateGeofenceCollection)
+
+-- | Applies one or more tags to the geofence collection. A tag is a
+-- key-value pair helps manage, identify, search, and filter your resources
+-- by labelling them.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource
+--
+-- -   Each resource tag must be unique with a maximum of one value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+createGeofenceCollection_tags :: Lens.Lens' CreateGeofenceCollection (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createGeofenceCollection_tags = Lens.lens (\CreateGeofenceCollection' {tags} -> tags) (\s@CreateGeofenceCollection' {} a -> s {tags = a} :: CreateGeofenceCollection) Prelude.. Lens.mapping Lens.coerced
+
+-- | A custom name for the geofence collection.
+--
+-- Requirements:
+--
+-- -   Contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens (-),
+--     periods (.), and underscores (_).
+--
+-- -   Must be a unique geofence collection name.
+--
+-- -   No spaces allowed. For example, @ExampleGeofenceCollection@.
+createGeofenceCollection_collectionName :: Lens.Lens' CreateGeofenceCollection Prelude.Text
+createGeofenceCollection_collectionName = Lens.lens (\CreateGeofenceCollection' {collectionName} -> collectionName) (\s@CreateGeofenceCollection' {} a -> s {collectionName = a} :: CreateGeofenceCollection)
+
+instance Core.AWSRequest CreateGeofenceCollection where
+  type
+    AWSResponse CreateGeofenceCollection =
+      CreateGeofenceCollectionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateGeofenceCollectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CollectionArn")
+            Prelude.<*> (x Data..:> "CollectionName")
+            Prelude.<*> (x Data..:> "CreateTime")
+      )
+
+instance Prelude.Hashable CreateGeofenceCollection where
+  hashWithSalt _salt CreateGeofenceCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` pricingPlanDataSource
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` collectionName
+
+instance Prelude.NFData CreateGeofenceCollection where
+  rnf CreateGeofenceCollection' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf pricingPlanDataSource
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf collectionName
+
+instance Data.ToHeaders CreateGeofenceCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateGeofenceCollection where
+  toJSON CreateGeofenceCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("KmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan,
+            ("PricingPlanDataSource" Data..=)
+              Prelude.<$> pricingPlanDataSource,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("CollectionName" Data..= collectionName)
+          ]
+      )
+
+instance Data.ToPath CreateGeofenceCollection where
+  toPath = Prelude.const "/geofencing/v0/collections"
+
+instance Data.ToQuery CreateGeofenceCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateGeofenceCollectionResponse' smart constructor.
+data CreateGeofenceCollectionResponse = CreateGeofenceCollectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) for the geofence collection resource.
+    -- Used when you need to specify a resource across all AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+    collectionArn :: Prelude.Text,
+    -- | The name for the geofence collection.
+    collectionName :: Prelude.Text,
+    -- | The timestamp for when the geofence collection was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    createTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateGeofenceCollectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createGeofenceCollectionResponse_httpStatus' - The response's http status code.
+--
+-- 'collectionArn', 'createGeofenceCollectionResponse_collectionArn' - The Amazon Resource Name (ARN) for the geofence collection resource.
+-- Used when you need to specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+--
+-- 'collectionName', 'createGeofenceCollectionResponse_collectionName' - The name for the geofence collection.
+--
+-- 'createTime', 'createGeofenceCollectionResponse_createTime' - The timestamp for when the geofence collection was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newCreateGeofenceCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'collectionArn'
+  Prelude.Text ->
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  CreateGeofenceCollectionResponse
+newCreateGeofenceCollectionResponse
+  pHttpStatus_
+  pCollectionArn_
+  pCollectionName_
+  pCreateTime_ =
+    CreateGeofenceCollectionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        collectionArn = pCollectionArn_,
+        collectionName = pCollectionName_,
+        createTime =
+          Data._Time Lens.# pCreateTime_
+      }
+
+-- | The response's http status code.
+createGeofenceCollectionResponse_httpStatus :: Lens.Lens' CreateGeofenceCollectionResponse Prelude.Int
+createGeofenceCollectionResponse_httpStatus = Lens.lens (\CreateGeofenceCollectionResponse' {httpStatus} -> httpStatus) (\s@CreateGeofenceCollectionResponse' {} a -> s {httpStatus = a} :: CreateGeofenceCollectionResponse)
+
+-- | The Amazon Resource Name (ARN) for the geofence collection resource.
+-- Used when you need to specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+createGeofenceCollectionResponse_collectionArn :: Lens.Lens' CreateGeofenceCollectionResponse Prelude.Text
+createGeofenceCollectionResponse_collectionArn = Lens.lens (\CreateGeofenceCollectionResponse' {collectionArn} -> collectionArn) (\s@CreateGeofenceCollectionResponse' {} a -> s {collectionArn = a} :: CreateGeofenceCollectionResponse)
+
+-- | The name for the geofence collection.
+createGeofenceCollectionResponse_collectionName :: Lens.Lens' CreateGeofenceCollectionResponse Prelude.Text
+createGeofenceCollectionResponse_collectionName = Lens.lens (\CreateGeofenceCollectionResponse' {collectionName} -> collectionName) (\s@CreateGeofenceCollectionResponse' {} a -> s {collectionName = a} :: CreateGeofenceCollectionResponse)
+
+-- | The timestamp for when the geofence collection was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+createGeofenceCollectionResponse_createTime :: Lens.Lens' CreateGeofenceCollectionResponse Prelude.UTCTime
+createGeofenceCollectionResponse_createTime = Lens.lens (\CreateGeofenceCollectionResponse' {createTime} -> createTime) (\s@CreateGeofenceCollectionResponse' {} a -> s {createTime = a} :: CreateGeofenceCollectionResponse) Prelude.. Data._Time
+
+instance
+  Prelude.NFData
+    CreateGeofenceCollectionResponse
+  where
+  rnf CreateGeofenceCollectionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf collectionArn
+      `Prelude.seq` Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf createTime
diff --git a/gen/Amazonka/Location/CreateMap.hs b/gen/Amazonka/Location/CreateMap.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/CreateMap.hs
@@ -0,0 +1,369 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.CreateMap
+-- 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 map resource in your AWS account, which provides map tiles of
+-- different styles sourced from global location data providers.
+--
+-- If your application is tracking or routing assets you use in your
+-- business, such as delivery vehicles or employees, you may only use HERE
+-- as your geolocation provider. See section 82 of the
+-- <http://aws.amazon.com/service-terms AWS service terms> for more
+-- details.
+module Amazonka.Location.CreateMap
+  ( -- * Creating a Request
+    CreateMap (..),
+    newCreateMap,
+
+    -- * Request Lenses
+    createMap_description,
+    createMap_pricingPlan,
+    createMap_tags,
+    createMap_configuration,
+    createMap_mapName,
+
+    -- * Destructuring the Response
+    CreateMapResponse (..),
+    newCreateMapResponse,
+
+    -- * Response Lenses
+    createMapResponse_httpStatus,
+    createMapResponse_createTime,
+    createMapResponse_mapArn,
+    createMapResponse_mapName,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateMap' smart constructor.
+data CreateMap = CreateMap'
+  { -- | An optional description for the map resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | Applies one or more tags to the map resource. A tag is a key-value pair
+    -- helps manage, identify, search, and filter your resources by labelling
+    -- them.
+    --
+    -- Format: @\"key\" : \"value\"@
+    --
+    -- Restrictions:
+    --
+    -- -   Maximum 50 tags per resource
+    --
+    -- -   Each resource tag must be unique with a maximum of one value.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8
+    --
+    -- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Cannot use \"aws:\" as a prefix for a key.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Specifies the @MapConfiguration@, including the map style, for the map
+    -- resource that you create. The map style defines the look of maps and the
+    -- data provider for your map resource.
+    configuration :: MapConfiguration,
+    -- | The name for the map resource.
+    --
+    -- Requirements:
+    --
+    -- -   Must contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens
+    --     (-), periods (.), and underscores (_).
+    --
+    -- -   Must be a unique map resource name.
+    --
+    -- -   No spaces allowed. For example, @ExampleMap@.
+    mapName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMap' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createMap_description' - An optional description for the map resource.
+--
+-- 'pricingPlan', 'createMap_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'tags', 'createMap_tags' - Applies one or more tags to the map resource. A tag is a key-value pair
+-- helps manage, identify, search, and filter your resources by labelling
+-- them.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource
+--
+-- -   Each resource tag must be unique with a maximum of one value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+--
+-- 'configuration', 'createMap_configuration' - Specifies the @MapConfiguration@, including the map style, for the map
+-- resource that you create. The map style defines the look of maps and the
+-- data provider for your map resource.
+--
+-- 'mapName', 'createMap_mapName' - The name for the map resource.
+--
+-- Requirements:
+--
+-- -   Must contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens
+--     (-), periods (.), and underscores (_).
+--
+-- -   Must be a unique map resource name.
+--
+-- -   No spaces allowed. For example, @ExampleMap@.
+newCreateMap ::
+  -- | 'configuration'
+  MapConfiguration ->
+  -- | 'mapName'
+  Prelude.Text ->
+  CreateMap
+newCreateMap pConfiguration_ pMapName_ =
+  CreateMap'
+    { description = Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      configuration = pConfiguration_,
+      mapName = pMapName_
+    }
+
+-- | An optional description for the map resource.
+createMap_description :: Lens.Lens' CreateMap (Prelude.Maybe Prelude.Text)
+createMap_description = Lens.lens (\CreateMap' {description} -> description) (\s@CreateMap' {} a -> s {description = a} :: CreateMap)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+createMap_pricingPlan :: Lens.Lens' CreateMap (Prelude.Maybe PricingPlan)
+createMap_pricingPlan = Lens.lens (\CreateMap' {pricingPlan} -> pricingPlan) (\s@CreateMap' {} a -> s {pricingPlan = a} :: CreateMap)
+
+-- | Applies one or more tags to the map resource. A tag is a key-value pair
+-- helps manage, identify, search, and filter your resources by labelling
+-- them.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource
+--
+-- -   Each resource tag must be unique with a maximum of one value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+createMap_tags :: Lens.Lens' CreateMap (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createMap_tags = Lens.lens (\CreateMap' {tags} -> tags) (\s@CreateMap' {} a -> s {tags = a} :: CreateMap) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the @MapConfiguration@, including the map style, for the map
+-- resource that you create. The map style defines the look of maps and the
+-- data provider for your map resource.
+createMap_configuration :: Lens.Lens' CreateMap MapConfiguration
+createMap_configuration = Lens.lens (\CreateMap' {configuration} -> configuration) (\s@CreateMap' {} a -> s {configuration = a} :: CreateMap)
+
+-- | The name for the map resource.
+--
+-- Requirements:
+--
+-- -   Must contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens
+--     (-), periods (.), and underscores (_).
+--
+-- -   Must be a unique map resource name.
+--
+-- -   No spaces allowed. For example, @ExampleMap@.
+createMap_mapName :: Lens.Lens' CreateMap Prelude.Text
+createMap_mapName = Lens.lens (\CreateMap' {mapName} -> mapName) (\s@CreateMap' {} a -> s {mapName = a} :: CreateMap)
+
+instance Core.AWSRequest CreateMap where
+  type AWSResponse CreateMap = CreateMapResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateMapResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "MapArn")
+            Prelude.<*> (x Data..:> "MapName")
+      )
+
+instance Prelude.Hashable CreateMap where
+  hashWithSalt _salt CreateMap' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` mapName
+
+instance Prelude.NFData CreateMap where
+  rnf CreateMap' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf mapName
+
+instance Data.ToHeaders CreateMap where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateMap where
+  toJSON CreateMap' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Configuration" Data..= configuration),
+            Prelude.Just ("MapName" Data..= mapName)
+          ]
+      )
+
+instance Data.ToPath CreateMap where
+  toPath = Prelude.const "/maps/v0/maps"
+
+instance Data.ToQuery CreateMap where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateMapResponse' smart constructor.
+data CreateMapResponse = CreateMapResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The timestamp for when the map resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) for the map resource. Used to specify a
+    -- resource across all AWS.
+    --
+    -- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+    mapArn :: Prelude.Text,
+    -- | The name of the map resource.
+    mapName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMapResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createMapResponse_httpStatus' - The response's http status code.
+--
+-- 'createTime', 'createMapResponse_createTime' - The timestamp for when the map resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'mapArn', 'createMapResponse_mapArn' - The Amazon Resource Name (ARN) for the map resource. Used to specify a
+-- resource across all AWS.
+--
+-- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+--
+-- 'mapName', 'createMapResponse_mapName' - The name of the map resource.
+newCreateMapResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'mapArn'
+  Prelude.Text ->
+  -- | 'mapName'
+  Prelude.Text ->
+  CreateMapResponse
+newCreateMapResponse
+  pHttpStatus_
+  pCreateTime_
+  pMapArn_
+  pMapName_ =
+    CreateMapResponse'
+      { httpStatus = pHttpStatus_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        mapArn = pMapArn_,
+        mapName = pMapName_
+      }
+
+-- | The response's http status code.
+createMapResponse_httpStatus :: Lens.Lens' CreateMapResponse Prelude.Int
+createMapResponse_httpStatus = Lens.lens (\CreateMapResponse' {httpStatus} -> httpStatus) (\s@CreateMapResponse' {} a -> s {httpStatus = a} :: CreateMapResponse)
+
+-- | The timestamp for when the map resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+createMapResponse_createTime :: Lens.Lens' CreateMapResponse Prelude.UTCTime
+createMapResponse_createTime = Lens.lens (\CreateMapResponse' {createTime} -> createTime) (\s@CreateMapResponse' {} a -> s {createTime = a} :: CreateMapResponse) Prelude.. Data._Time
+
+-- | The Amazon Resource Name (ARN) for the map resource. Used to specify a
+-- resource across all AWS.
+--
+-- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+createMapResponse_mapArn :: Lens.Lens' CreateMapResponse Prelude.Text
+createMapResponse_mapArn = Lens.lens (\CreateMapResponse' {mapArn} -> mapArn) (\s@CreateMapResponse' {} a -> s {mapArn = a} :: CreateMapResponse)
+
+-- | The name of the map resource.
+createMapResponse_mapName :: Lens.Lens' CreateMapResponse Prelude.Text
+createMapResponse_mapName = Lens.lens (\CreateMapResponse' {mapName} -> mapName) (\s@CreateMapResponse' {} a -> s {mapName = a} :: CreateMapResponse)
+
+instance Prelude.NFData CreateMapResponse where
+  rnf CreateMapResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf mapArn
+      `Prelude.seq` Prelude.rnf mapName
diff --git a/gen/Amazonka/Location/CreatePlaceIndex.hs b/gen/Amazonka/Location/CreatePlaceIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/CreatePlaceIndex.hs
@@ -0,0 +1,468 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.CreatePlaceIndex
+-- 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 place index resource in your AWS account. Use a place index
+-- resource to geocode addresses and other text queries by using the
+-- @SearchPlaceIndexForText@ operation, and reverse geocode coordinates by
+-- using the @SearchPlaceIndexForPosition@ operation, and enable
+-- autosuggestions by using the @SearchPlaceIndexForSuggestions@ operation.
+--
+-- If your application is tracking or routing assets you use in your
+-- business, such as delivery vehicles or employees, you may only use HERE
+-- as your geolocation provider. See section 82 of the
+-- <http://aws.amazon.com/service-terms AWS service terms> for more
+-- details.
+module Amazonka.Location.CreatePlaceIndex
+  ( -- * Creating a Request
+    CreatePlaceIndex (..),
+    newCreatePlaceIndex,
+
+    -- * Request Lenses
+    createPlaceIndex_dataSourceConfiguration,
+    createPlaceIndex_description,
+    createPlaceIndex_pricingPlan,
+    createPlaceIndex_tags,
+    createPlaceIndex_dataSource,
+    createPlaceIndex_indexName,
+
+    -- * Destructuring the Response
+    CreatePlaceIndexResponse (..),
+    newCreatePlaceIndexResponse,
+
+    -- * Response Lenses
+    createPlaceIndexResponse_httpStatus,
+    createPlaceIndexResponse_createTime,
+    createPlaceIndexResponse_indexArn,
+    createPlaceIndexResponse_indexName,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreatePlaceIndex' smart constructor.
+data CreatePlaceIndex = CreatePlaceIndex'
+  { -- | Specifies the data storage option requesting Places.
+    dataSourceConfiguration :: Prelude.Maybe DataSourceConfiguration,
+    -- | The optional description for the place index resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | Applies one or more tags to the place index resource. A tag is a
+    -- key-value pair that helps you manage, identify, search, and filter your
+    -- resources.
+    --
+    -- Format: @\"key\" : \"value\"@
+    --
+    -- Restrictions:
+    --
+    -- -   Maximum 50 tags per resource.
+    --
+    -- -   Each tag key must be unique and must have exactly one associated
+    --     value.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8.
+    --
+    -- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+    --     characters: + - = . _ : \/ \@
+    --
+    -- -   Cannot use \"aws:\" as a prefix for a key.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Specifies the geospatial data provider for the new place index.
+    --
+    -- This field is case-sensitive. Enter the valid values as shown. For
+    -- example, entering @HERE@ returns an error.
+    --
+    -- Valid values include:
+    --
+    -- -   @Esri@ – For additional information about
+    --     <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>\'s
+    --     coverage in your region of interest, see
+    --     <https://developers.arcgis.com/rest/geocode/api-reference/geocode-coverage.htm Esri details on geocoding coverage>.
+    --
+    -- -   @Here@ – For additional information about
+    --     <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>\'
+    --     coverage in your region of interest, see
+    --     <https://developer.here.com/documentation/geocoder/dev_guide/topics/coverage-geocoder.html HERE details on goecoding coverage>.
+    --
+    --     If you specify HERE Technologies (@Here@) as the data provider, you
+    --     may not
+    --     <https://docs.aws.amazon.com/location-places/latest/APIReference/API_DataSourceConfiguration.html store results>
+    --     for locations in Japan. For more information, see the
+    --     <https://aws.amazon.com/service-terms/ AWS Service Terms> for Amazon
+    --     Location Service.
+    --
+    -- For additional information , see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Data providers>
+    -- on the /Amazon Location Service Developer Guide/.
+    dataSource :: Prelude.Text,
+    -- | The name of the place index resource.
+    --
+    -- Requirements:
+    --
+    -- -   Contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens (-),
+    --     periods (.), and underscores (_).
+    --
+    -- -   Must be a unique place index resource name.
+    --
+    -- -   No spaces allowed. For example, @ExamplePlaceIndex@.
+    indexName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePlaceIndex' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceConfiguration', 'createPlaceIndex_dataSourceConfiguration' - Specifies the data storage option requesting Places.
+--
+-- 'description', 'createPlaceIndex_description' - The optional description for the place index resource.
+--
+-- 'pricingPlan', 'createPlaceIndex_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'tags', 'createPlaceIndex_tags' - Applies one or more tags to the place index resource. A tag is a
+-- key-value pair that helps you manage, identify, search, and filter your
+-- resources.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource.
+--
+-- -   Each tag key must be unique and must have exactly one associated
+--     value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+--
+-- 'dataSource', 'createPlaceIndex_dataSource' - Specifies the geospatial data provider for the new place index.
+--
+-- This field is case-sensitive. Enter the valid values as shown. For
+-- example, entering @HERE@ returns an error.
+--
+-- Valid values include:
+--
+-- -   @Esri@ – For additional information about
+--     <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>\'s
+--     coverage in your region of interest, see
+--     <https://developers.arcgis.com/rest/geocode/api-reference/geocode-coverage.htm Esri details on geocoding coverage>.
+--
+-- -   @Here@ – For additional information about
+--     <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>\'
+--     coverage in your region of interest, see
+--     <https://developer.here.com/documentation/geocoder/dev_guide/topics/coverage-geocoder.html HERE details on goecoding coverage>.
+--
+--     If you specify HERE Technologies (@Here@) as the data provider, you
+--     may not
+--     <https://docs.aws.amazon.com/location-places/latest/APIReference/API_DataSourceConfiguration.html store results>
+--     for locations in Japan. For more information, see the
+--     <https://aws.amazon.com/service-terms/ AWS Service Terms> for Amazon
+--     Location Service.
+--
+-- For additional information , see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Data providers>
+-- on the /Amazon Location Service Developer Guide/.
+--
+-- 'indexName', 'createPlaceIndex_indexName' - The name of the place index resource.
+--
+-- Requirements:
+--
+-- -   Contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens (-),
+--     periods (.), and underscores (_).
+--
+-- -   Must be a unique place index resource name.
+--
+-- -   No spaces allowed. For example, @ExamplePlaceIndex@.
+newCreatePlaceIndex ::
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'indexName'
+  Prelude.Text ->
+  CreatePlaceIndex
+newCreatePlaceIndex pDataSource_ pIndexName_ =
+  CreatePlaceIndex'
+    { dataSourceConfiguration =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      dataSource = pDataSource_,
+      indexName = pIndexName_
+    }
+
+-- | Specifies the data storage option requesting Places.
+createPlaceIndex_dataSourceConfiguration :: Lens.Lens' CreatePlaceIndex (Prelude.Maybe DataSourceConfiguration)
+createPlaceIndex_dataSourceConfiguration = Lens.lens (\CreatePlaceIndex' {dataSourceConfiguration} -> dataSourceConfiguration) (\s@CreatePlaceIndex' {} a -> s {dataSourceConfiguration = a} :: CreatePlaceIndex)
+
+-- | The optional description for the place index resource.
+createPlaceIndex_description :: Lens.Lens' CreatePlaceIndex (Prelude.Maybe Prelude.Text)
+createPlaceIndex_description = Lens.lens (\CreatePlaceIndex' {description} -> description) (\s@CreatePlaceIndex' {} a -> s {description = a} :: CreatePlaceIndex)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+createPlaceIndex_pricingPlan :: Lens.Lens' CreatePlaceIndex (Prelude.Maybe PricingPlan)
+createPlaceIndex_pricingPlan = Lens.lens (\CreatePlaceIndex' {pricingPlan} -> pricingPlan) (\s@CreatePlaceIndex' {} a -> s {pricingPlan = a} :: CreatePlaceIndex)
+
+-- | Applies one or more tags to the place index resource. A tag is a
+-- key-value pair that helps you manage, identify, search, and filter your
+-- resources.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource.
+--
+-- -   Each tag key must be unique and must have exactly one associated
+--     value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+createPlaceIndex_tags :: Lens.Lens' CreatePlaceIndex (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createPlaceIndex_tags = Lens.lens (\CreatePlaceIndex' {tags} -> tags) (\s@CreatePlaceIndex' {} a -> s {tags = a} :: CreatePlaceIndex) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the geospatial data provider for the new place index.
+--
+-- This field is case-sensitive. Enter the valid values as shown. For
+-- example, entering @HERE@ returns an error.
+--
+-- Valid values include:
+--
+-- -   @Esri@ – For additional information about
+--     <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>\'s
+--     coverage in your region of interest, see
+--     <https://developers.arcgis.com/rest/geocode/api-reference/geocode-coverage.htm Esri details on geocoding coverage>.
+--
+-- -   @Here@ – For additional information about
+--     <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>\'
+--     coverage in your region of interest, see
+--     <https://developer.here.com/documentation/geocoder/dev_guide/topics/coverage-geocoder.html HERE details on goecoding coverage>.
+--
+--     If you specify HERE Technologies (@Here@) as the data provider, you
+--     may not
+--     <https://docs.aws.amazon.com/location-places/latest/APIReference/API_DataSourceConfiguration.html store results>
+--     for locations in Japan. For more information, see the
+--     <https://aws.amazon.com/service-terms/ AWS Service Terms> for Amazon
+--     Location Service.
+--
+-- For additional information , see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Data providers>
+-- on the /Amazon Location Service Developer Guide/.
+createPlaceIndex_dataSource :: Lens.Lens' CreatePlaceIndex Prelude.Text
+createPlaceIndex_dataSource = Lens.lens (\CreatePlaceIndex' {dataSource} -> dataSource) (\s@CreatePlaceIndex' {} a -> s {dataSource = a} :: CreatePlaceIndex)
+
+-- | The name of the place index resource.
+--
+-- Requirements:
+--
+-- -   Contain only alphanumeric characters (A–Z, a–z, 0–9), hyphens (-),
+--     periods (.), and underscores (_).
+--
+-- -   Must be a unique place index resource name.
+--
+-- -   No spaces allowed. For example, @ExamplePlaceIndex@.
+createPlaceIndex_indexName :: Lens.Lens' CreatePlaceIndex Prelude.Text
+createPlaceIndex_indexName = Lens.lens (\CreatePlaceIndex' {indexName} -> indexName) (\s@CreatePlaceIndex' {} a -> s {indexName = a} :: CreatePlaceIndex)
+
+instance Core.AWSRequest CreatePlaceIndex where
+  type
+    AWSResponse CreatePlaceIndex =
+      CreatePlaceIndexResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreatePlaceIndexResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "IndexArn")
+            Prelude.<*> (x Data..:> "IndexName")
+      )
+
+instance Prelude.Hashable CreatePlaceIndex where
+  hashWithSalt _salt CreatePlaceIndex' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceConfiguration
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` indexName
+
+instance Prelude.NFData CreatePlaceIndex where
+  rnf CreatePlaceIndex' {..} =
+    Prelude.rnf dataSourceConfiguration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf indexName
+
+instance Data.ToHeaders CreatePlaceIndex where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreatePlaceIndex where
+  toJSON CreatePlaceIndex' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceConfiguration" Data..=)
+              Prelude.<$> dataSourceConfiguration,
+            ("Description" Data..=) Prelude.<$> description,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("DataSource" Data..= dataSource),
+            Prelude.Just ("IndexName" Data..= indexName)
+          ]
+      )
+
+instance Data.ToPath CreatePlaceIndex where
+  toPath = Prelude.const "/places/v0/indexes"
+
+instance Data.ToQuery CreatePlaceIndex where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreatePlaceIndexResponse' smart constructor.
+data CreatePlaceIndexResponse = CreatePlaceIndexResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The timestamp for when the place index resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) for the place index resource. Used to
+    -- specify a resource across AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:place-index\/ExamplePlaceIndex@
+    indexArn :: Prelude.Text,
+    -- | The name for the place index resource.
+    indexName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePlaceIndexResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createPlaceIndexResponse_httpStatus' - The response's http status code.
+--
+-- 'createTime', 'createPlaceIndexResponse_createTime' - The timestamp for when the place index resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'indexArn', 'createPlaceIndexResponse_indexArn' - The Amazon Resource Name (ARN) for the place index resource. Used to
+-- specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:place-index\/ExamplePlaceIndex@
+--
+-- 'indexName', 'createPlaceIndexResponse_indexName' - The name for the place index resource.
+newCreatePlaceIndexResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'indexArn'
+  Prelude.Text ->
+  -- | 'indexName'
+  Prelude.Text ->
+  CreatePlaceIndexResponse
+newCreatePlaceIndexResponse
+  pHttpStatus_
+  pCreateTime_
+  pIndexArn_
+  pIndexName_ =
+    CreatePlaceIndexResponse'
+      { httpStatus =
+          pHttpStatus_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        indexArn = pIndexArn_,
+        indexName = pIndexName_
+      }
+
+-- | The response's http status code.
+createPlaceIndexResponse_httpStatus :: Lens.Lens' CreatePlaceIndexResponse Prelude.Int
+createPlaceIndexResponse_httpStatus = Lens.lens (\CreatePlaceIndexResponse' {httpStatus} -> httpStatus) (\s@CreatePlaceIndexResponse' {} a -> s {httpStatus = a} :: CreatePlaceIndexResponse)
+
+-- | The timestamp for when the place index resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+createPlaceIndexResponse_createTime :: Lens.Lens' CreatePlaceIndexResponse Prelude.UTCTime
+createPlaceIndexResponse_createTime = Lens.lens (\CreatePlaceIndexResponse' {createTime} -> createTime) (\s@CreatePlaceIndexResponse' {} a -> s {createTime = a} :: CreatePlaceIndexResponse) Prelude.. Data._Time
+
+-- | The Amazon Resource Name (ARN) for the place index resource. Used to
+-- specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:place-index\/ExamplePlaceIndex@
+createPlaceIndexResponse_indexArn :: Lens.Lens' CreatePlaceIndexResponse Prelude.Text
+createPlaceIndexResponse_indexArn = Lens.lens (\CreatePlaceIndexResponse' {indexArn} -> indexArn) (\s@CreatePlaceIndexResponse' {} a -> s {indexArn = a} :: CreatePlaceIndexResponse)
+
+-- | The name for the place index resource.
+createPlaceIndexResponse_indexName :: Lens.Lens' CreatePlaceIndexResponse Prelude.Text
+createPlaceIndexResponse_indexName = Lens.lens (\CreatePlaceIndexResponse' {indexName} -> indexName) (\s@CreatePlaceIndexResponse' {} a -> s {indexName = a} :: CreatePlaceIndexResponse)
+
+instance Prelude.NFData CreatePlaceIndexResponse where
+  rnf CreatePlaceIndexResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf indexArn
+      `Prelude.seq` Prelude.rnf indexName
diff --git a/gen/Amazonka/Location/CreateRouteCalculator.hs b/gen/Amazonka/Location/CreateRouteCalculator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/CreateRouteCalculator.hs
@@ -0,0 +1,463 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.CreateRouteCalculator
+-- 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 route calculator resource in your AWS account.
+--
+-- You can send requests to a route calculator resource to estimate travel
+-- time, distance, and get directions. A route calculator sources traffic
+-- and road network data from your chosen data provider.
+--
+-- If your application is tracking or routing assets you use in your
+-- business, such as delivery vehicles or employees, you may only use HERE
+-- as your geolocation provider. See section 82 of the
+-- <http://aws.amazon.com/service-terms AWS service terms> for more
+-- details.
+module Amazonka.Location.CreateRouteCalculator
+  ( -- * Creating a Request
+    CreateRouteCalculator (..),
+    newCreateRouteCalculator,
+
+    -- * Request Lenses
+    createRouteCalculator_description,
+    createRouteCalculator_pricingPlan,
+    createRouteCalculator_tags,
+    createRouteCalculator_calculatorName,
+    createRouteCalculator_dataSource,
+
+    -- * Destructuring the Response
+    CreateRouteCalculatorResponse (..),
+    newCreateRouteCalculatorResponse,
+
+    -- * Response Lenses
+    createRouteCalculatorResponse_httpStatus,
+    createRouteCalculatorResponse_calculatorArn,
+    createRouteCalculatorResponse_calculatorName,
+    createRouteCalculatorResponse_createTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRouteCalculator' smart constructor.
+data CreateRouteCalculator = CreateRouteCalculator'
+  { -- | The optional description for the route calculator resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | Applies one or more tags to the route calculator resource. A tag is a
+    -- key-value pair helps manage, identify, search, and filter your resources
+    -- by labelling them.
+    --
+    -- -   For example: { @\"tag1\" : \"value1\"@, @\"tag2\" : \"value2\"@}
+    --
+    -- Format: @\"key\" : \"value\"@
+    --
+    -- Restrictions:
+    --
+    -- -   Maximum 50 tags per resource
+    --
+    -- -   Each resource tag must be unique with a maximum of one value.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8
+    --
+    -- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Cannot use \"aws:\" as a prefix for a key.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the route calculator resource.
+    --
+    -- Requirements:
+    --
+    -- -   Can use alphanumeric characters (A–Z, a–z, 0–9) , hyphens (-),
+    --     periods (.), and underscores (_).
+    --
+    -- -   Must be a unique Route calculator resource name.
+    --
+    -- -   No spaces allowed. For example, @ExampleRouteCalculator@.
+    calculatorName :: Prelude.Text,
+    -- | Specifies the data provider of traffic and road network data.
+    --
+    -- This field is case-sensitive. Enter the valid values as shown. For
+    -- example, entering @HERE@ returns an error. Route calculators that use
+    -- Esri as a data source only calculate routes that are shorter than 400
+    -- km.
+    --
+    -- Valid values include:
+    --
+    -- -   @Esri@ – For additional information about
+    --     <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>\'s
+    --     coverage in your region of interest, see
+    --     <https://doc.arcgis.com/en/arcgis-online/reference/network-coverage.htm Esri details on street networks and traffic coverage>.
+    --
+    -- -   @Here@ – For additional information about
+    --     <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>\'
+    --     coverage in your region of interest, see
+    --     <https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/car-routing.html HERE car routing coverage>
+    --     and
+    --     <https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/truck-routing.html HERE truck routing coverage>.
+    --
+    -- For additional information , see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Data providers>
+    -- on the /Amazon Location Service Developer Guide/.
+    dataSource :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRouteCalculator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createRouteCalculator_description' - The optional description for the route calculator resource.
+--
+-- 'pricingPlan', 'createRouteCalculator_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'tags', 'createRouteCalculator_tags' - Applies one or more tags to the route calculator resource. A tag is a
+-- key-value pair helps manage, identify, search, and filter your resources
+-- by labelling them.
+--
+-- -   For example: { @\"tag1\" : \"value1\"@, @\"tag2\" : \"value2\"@}
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource
+--
+-- -   Each resource tag must be unique with a maximum of one value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+--
+-- 'calculatorName', 'createRouteCalculator_calculatorName' - The name of the route calculator resource.
+--
+-- Requirements:
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9) , hyphens (-),
+--     periods (.), and underscores (_).
+--
+-- -   Must be a unique Route calculator resource name.
+--
+-- -   No spaces allowed. For example, @ExampleRouteCalculator@.
+--
+-- 'dataSource', 'createRouteCalculator_dataSource' - Specifies the data provider of traffic and road network data.
+--
+-- This field is case-sensitive. Enter the valid values as shown. For
+-- example, entering @HERE@ returns an error. Route calculators that use
+-- Esri as a data source only calculate routes that are shorter than 400
+-- km.
+--
+-- Valid values include:
+--
+-- -   @Esri@ – For additional information about
+--     <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>\'s
+--     coverage in your region of interest, see
+--     <https://doc.arcgis.com/en/arcgis-online/reference/network-coverage.htm Esri details on street networks and traffic coverage>.
+--
+-- -   @Here@ – For additional information about
+--     <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>\'
+--     coverage in your region of interest, see
+--     <https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/car-routing.html HERE car routing coverage>
+--     and
+--     <https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/truck-routing.html HERE truck routing coverage>.
+--
+-- For additional information , see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Data providers>
+-- on the /Amazon Location Service Developer Guide/.
+newCreateRouteCalculator ::
+  -- | 'calculatorName'
+  Prelude.Text ->
+  -- | 'dataSource'
+  Prelude.Text ->
+  CreateRouteCalculator
+newCreateRouteCalculator
+  pCalculatorName_
+  pDataSource_ =
+    CreateRouteCalculator'
+      { description =
+          Prelude.Nothing,
+        pricingPlan = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        calculatorName = pCalculatorName_,
+        dataSource = pDataSource_
+      }
+
+-- | The optional description for the route calculator resource.
+createRouteCalculator_description :: Lens.Lens' CreateRouteCalculator (Prelude.Maybe Prelude.Text)
+createRouteCalculator_description = Lens.lens (\CreateRouteCalculator' {description} -> description) (\s@CreateRouteCalculator' {} a -> s {description = a} :: CreateRouteCalculator)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+createRouteCalculator_pricingPlan :: Lens.Lens' CreateRouteCalculator (Prelude.Maybe PricingPlan)
+createRouteCalculator_pricingPlan = Lens.lens (\CreateRouteCalculator' {pricingPlan} -> pricingPlan) (\s@CreateRouteCalculator' {} a -> s {pricingPlan = a} :: CreateRouteCalculator)
+
+-- | Applies one or more tags to the route calculator resource. A tag is a
+-- key-value pair helps manage, identify, search, and filter your resources
+-- by labelling them.
+--
+-- -   For example: { @\"tag1\" : \"value1\"@, @\"tag2\" : \"value2\"@}
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource
+--
+-- -   Each resource tag must be unique with a maximum of one value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+createRouteCalculator_tags :: Lens.Lens' CreateRouteCalculator (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createRouteCalculator_tags = Lens.lens (\CreateRouteCalculator' {tags} -> tags) (\s@CreateRouteCalculator' {} a -> s {tags = a} :: CreateRouteCalculator) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the route calculator resource.
+--
+-- Requirements:
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9) , hyphens (-),
+--     periods (.), and underscores (_).
+--
+-- -   Must be a unique Route calculator resource name.
+--
+-- -   No spaces allowed. For example, @ExampleRouteCalculator@.
+createRouteCalculator_calculatorName :: Lens.Lens' CreateRouteCalculator Prelude.Text
+createRouteCalculator_calculatorName = Lens.lens (\CreateRouteCalculator' {calculatorName} -> calculatorName) (\s@CreateRouteCalculator' {} a -> s {calculatorName = a} :: CreateRouteCalculator)
+
+-- | Specifies the data provider of traffic and road network data.
+--
+-- This field is case-sensitive. Enter the valid values as shown. For
+-- example, entering @HERE@ returns an error. Route calculators that use
+-- Esri as a data source only calculate routes that are shorter than 400
+-- km.
+--
+-- Valid values include:
+--
+-- -   @Esri@ – For additional information about
+--     <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>\'s
+--     coverage in your region of interest, see
+--     <https://doc.arcgis.com/en/arcgis-online/reference/network-coverage.htm Esri details on street networks and traffic coverage>.
+--
+-- -   @Here@ – For additional information about
+--     <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>\'
+--     coverage in your region of interest, see
+--     <https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/car-routing.html HERE car routing coverage>
+--     and
+--     <https://developer.here.com/documentation/routing-api/dev_guide/topics/coverage/truck-routing.html HERE truck routing coverage>.
+--
+-- For additional information , see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Data providers>
+-- on the /Amazon Location Service Developer Guide/.
+createRouteCalculator_dataSource :: Lens.Lens' CreateRouteCalculator Prelude.Text
+createRouteCalculator_dataSource = Lens.lens (\CreateRouteCalculator' {dataSource} -> dataSource) (\s@CreateRouteCalculator' {} a -> s {dataSource = a} :: CreateRouteCalculator)
+
+instance Core.AWSRequest CreateRouteCalculator where
+  type
+    AWSResponse CreateRouteCalculator =
+      CreateRouteCalculatorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateRouteCalculatorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CalculatorArn")
+            Prelude.<*> (x Data..:> "CalculatorName")
+            Prelude.<*> (x Data..:> "CreateTime")
+      )
+
+instance Prelude.Hashable CreateRouteCalculator where
+  hashWithSalt _salt CreateRouteCalculator' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` calculatorName
+      `Prelude.hashWithSalt` dataSource
+
+instance Prelude.NFData CreateRouteCalculator where
+  rnf CreateRouteCalculator' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf calculatorName
+      `Prelude.seq` Prelude.rnf dataSource
+
+instance Data.ToHeaders CreateRouteCalculator where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateRouteCalculator where
+  toJSON CreateRouteCalculator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("CalculatorName" Data..= calculatorName),
+            Prelude.Just ("DataSource" Data..= dataSource)
+          ]
+      )
+
+instance Data.ToPath CreateRouteCalculator where
+  toPath = Prelude.const "/routes/v0/calculators"
+
+instance Data.ToQuery CreateRouteCalculator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateRouteCalculatorResponse' smart constructor.
+data CreateRouteCalculatorResponse = CreateRouteCalculatorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) for the route calculator resource. Use
+    -- the ARN when you specify a resource across all AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:route-calculator\/ExampleCalculator@
+    calculatorArn :: Prelude.Text,
+    -- | The name of the route calculator resource.
+    --
+    -- -   For example, @ExampleRouteCalculator@.
+    calculatorName :: Prelude.Text,
+    -- | The timestamp when the route calculator resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    --
+    -- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+    createTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRouteCalculatorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createRouteCalculatorResponse_httpStatus' - The response's http status code.
+--
+-- 'calculatorArn', 'createRouteCalculatorResponse_calculatorArn' - The Amazon Resource Name (ARN) for the route calculator resource. Use
+-- the ARN when you specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:route-calculator\/ExampleCalculator@
+--
+-- 'calculatorName', 'createRouteCalculatorResponse_calculatorName' - The name of the route calculator resource.
+--
+-- -   For example, @ExampleRouteCalculator@.
+--
+-- 'createTime', 'createRouteCalculatorResponse_createTime' - The timestamp when the route calculator resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+newCreateRouteCalculatorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'calculatorArn'
+  Prelude.Text ->
+  -- | 'calculatorName'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  CreateRouteCalculatorResponse
+newCreateRouteCalculatorResponse
+  pHttpStatus_
+  pCalculatorArn_
+  pCalculatorName_
+  pCreateTime_ =
+    CreateRouteCalculatorResponse'
+      { httpStatus =
+          pHttpStatus_,
+        calculatorArn = pCalculatorArn_,
+        calculatorName = pCalculatorName_,
+        createTime = Data._Time Lens.# pCreateTime_
+      }
+
+-- | The response's http status code.
+createRouteCalculatorResponse_httpStatus :: Lens.Lens' CreateRouteCalculatorResponse Prelude.Int
+createRouteCalculatorResponse_httpStatus = Lens.lens (\CreateRouteCalculatorResponse' {httpStatus} -> httpStatus) (\s@CreateRouteCalculatorResponse' {} a -> s {httpStatus = a} :: CreateRouteCalculatorResponse)
+
+-- | The Amazon Resource Name (ARN) for the route calculator resource. Use
+-- the ARN when you specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:route-calculator\/ExampleCalculator@
+createRouteCalculatorResponse_calculatorArn :: Lens.Lens' CreateRouteCalculatorResponse Prelude.Text
+createRouteCalculatorResponse_calculatorArn = Lens.lens (\CreateRouteCalculatorResponse' {calculatorArn} -> calculatorArn) (\s@CreateRouteCalculatorResponse' {} a -> s {calculatorArn = a} :: CreateRouteCalculatorResponse)
+
+-- | The name of the route calculator resource.
+--
+-- -   For example, @ExampleRouteCalculator@.
+createRouteCalculatorResponse_calculatorName :: Lens.Lens' CreateRouteCalculatorResponse Prelude.Text
+createRouteCalculatorResponse_calculatorName = Lens.lens (\CreateRouteCalculatorResponse' {calculatorName} -> calculatorName) (\s@CreateRouteCalculatorResponse' {} a -> s {calculatorName = a} :: CreateRouteCalculatorResponse)
+
+-- | The timestamp when the route calculator resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+createRouteCalculatorResponse_createTime :: Lens.Lens' CreateRouteCalculatorResponse Prelude.UTCTime
+createRouteCalculatorResponse_createTime = Lens.lens (\CreateRouteCalculatorResponse' {createTime} -> createTime) (\s@CreateRouteCalculatorResponse' {} a -> s {createTime = a} :: CreateRouteCalculatorResponse) Prelude.. Data._Time
+
+instance Prelude.NFData CreateRouteCalculatorResponse where
+  rnf CreateRouteCalculatorResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf calculatorArn
+      `Prelude.seq` Prelude.rnf calculatorName
+      `Prelude.seq` Prelude.rnf createTime
diff --git a/gen/Amazonka/Location/CreateTracker.hs b/gen/Amazonka/Location/CreateTracker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/CreateTracker.hs
@@ -0,0 +1,478 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.CreateTracker
+-- 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 tracker resource in your AWS account, which lets you retrieve
+-- current and historical location of devices.
+module Amazonka.Location.CreateTracker
+  ( -- * Creating a Request
+    CreateTracker (..),
+    newCreateTracker,
+
+    -- * Request Lenses
+    createTracker_description,
+    createTracker_kmsKeyId,
+    createTracker_positionFiltering,
+    createTracker_pricingPlan,
+    createTracker_pricingPlanDataSource,
+    createTracker_tags,
+    createTracker_trackerName,
+
+    -- * Destructuring the Response
+    CreateTrackerResponse (..),
+    newCreateTrackerResponse,
+
+    -- * Response Lenses
+    createTrackerResponse_httpStatus,
+    createTrackerResponse_createTime,
+    createTrackerResponse_trackerArn,
+    createTrackerResponse_trackerName,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTracker' smart constructor.
+data CreateTracker = CreateTracker'
+  { -- | An optional description for the tracker resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A key identifier for an
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
+    -- Enter a key ID, key ARN, alias name, or alias ARN.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the position filtering for the tracker resource.
+    --
+    -- Valid values:
+    --
+    -- -   @TimeBased@ - Location updates are evaluated against linked geofence
+    --     collections, but not every location update is stored. If your update
+    --     frequency is more often than 30 seconds, only one update per 30
+    --     seconds is stored for each unique device ID.
+    --
+    -- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
+    --     location updates are ignored. Location updates within this area are
+    --     neither evaluated against linked geofence collections, nor stored.
+    --     This helps control costs by reducing the number of geofence
+    --     evaluations and historical device positions to paginate through.
+    --     Distance-based filtering can also reduce the effects of GPS noise
+    --     when displaying device trajectories on a map.
+    --
+    -- -   @AccuracyBased@ - If the device has moved less than the measured
+    --     accuracy, location updates are ignored. For example, if two
+    --     consecutive updates from a device have a horizontal accuracy of 5 m
+    --     and 10 m, the second update is ignored if the device has moved less
+    --     than 15 m. Ignored location updates are neither evaluated against
+    --     linked geofence collections, nor stored. This can reduce the effects
+    --     of GPS noise when displaying device trajectories on a map, and can
+    --     help control your costs by reducing the number of geofence
+    --     evaluations.
+    --
+    -- This field is optional. If not specified, the default value is
+    -- @TimeBased@.
+    positionFiltering :: Prelude.Maybe PositionFiltering,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | This parameter is no longer used.
+    pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
+    -- | Applies one or more tags to the tracker resource. A tag is a key-value
+    -- pair helps manage, identify, search, and filter your resources by
+    -- labelling them.
+    --
+    -- Format: @\"key\" : \"value\"@
+    --
+    -- Restrictions:
+    --
+    -- -   Maximum 50 tags per resource
+    --
+    -- -   Each resource tag must be unique with a maximum of one value.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8
+    --
+    -- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Cannot use \"aws:\" as a prefix for a key.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name for the tracker resource.
+    --
+    -- Requirements:
+    --
+    -- -   Contain only alphanumeric characters (A-Z, a-z, 0-9) , hyphens (-),
+    --     periods (.), and underscores (_).
+    --
+    -- -   Must be a unique tracker resource name.
+    --
+    -- -   No spaces allowed. For example, @ExampleTracker@.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTracker' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createTracker_description' - An optional description for the tracker resource.
+--
+-- 'kmsKeyId', 'createTracker_kmsKeyId' - A key identifier for an
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
+-- Enter a key ID, key ARN, alias name, or alias ARN.
+--
+-- 'positionFiltering', 'createTracker_positionFiltering' - Specifies the position filtering for the tracker resource.
+--
+-- Valid values:
+--
+-- -   @TimeBased@ - Location updates are evaluated against linked geofence
+--     collections, but not every location update is stored. If your update
+--     frequency is more often than 30 seconds, only one update per 30
+--     seconds is stored for each unique device ID.
+--
+-- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
+--     location updates are ignored. Location updates within this area are
+--     neither evaluated against linked geofence collections, nor stored.
+--     This helps control costs by reducing the number of geofence
+--     evaluations and historical device positions to paginate through.
+--     Distance-based filtering can also reduce the effects of GPS noise
+--     when displaying device trajectories on a map.
+--
+-- -   @AccuracyBased@ - If the device has moved less than the measured
+--     accuracy, location updates are ignored. For example, if two
+--     consecutive updates from a device have a horizontal accuracy of 5 m
+--     and 10 m, the second update is ignored if the device has moved less
+--     than 15 m. Ignored location updates are neither evaluated against
+--     linked geofence collections, nor stored. This can reduce the effects
+--     of GPS noise when displaying device trajectories on a map, and can
+--     help control your costs by reducing the number of geofence
+--     evaluations.
+--
+-- This field is optional. If not specified, the default value is
+-- @TimeBased@.
+--
+-- 'pricingPlan', 'createTracker_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'pricingPlanDataSource', 'createTracker_pricingPlanDataSource' - This parameter is no longer used.
+--
+-- 'tags', 'createTracker_tags' - Applies one or more tags to the tracker resource. A tag is a key-value
+-- pair helps manage, identify, search, and filter your resources by
+-- labelling them.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource
+--
+-- -   Each resource tag must be unique with a maximum of one value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+--
+-- 'trackerName', 'createTracker_trackerName' - The name for the tracker resource.
+--
+-- Requirements:
+--
+-- -   Contain only alphanumeric characters (A-Z, a-z, 0-9) , hyphens (-),
+--     periods (.), and underscores (_).
+--
+-- -   Must be a unique tracker resource name.
+--
+-- -   No spaces allowed. For example, @ExampleTracker@.
+newCreateTracker ::
+  -- | 'trackerName'
+  Prelude.Text ->
+  CreateTracker
+newCreateTracker pTrackerName_ =
+  CreateTracker'
+    { description = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      positionFiltering = Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      pricingPlanDataSource = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trackerName = pTrackerName_
+    }
+
+-- | An optional description for the tracker resource.
+createTracker_description :: Lens.Lens' CreateTracker (Prelude.Maybe Prelude.Text)
+createTracker_description = Lens.lens (\CreateTracker' {description} -> description) (\s@CreateTracker' {} a -> s {description = a} :: CreateTracker)
+
+-- | A key identifier for an
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>.
+-- Enter a key ID, key ARN, alias name, or alias ARN.
+createTracker_kmsKeyId :: Lens.Lens' CreateTracker (Prelude.Maybe Prelude.Text)
+createTracker_kmsKeyId = Lens.lens (\CreateTracker' {kmsKeyId} -> kmsKeyId) (\s@CreateTracker' {} a -> s {kmsKeyId = a} :: CreateTracker)
+
+-- | Specifies the position filtering for the tracker resource.
+--
+-- Valid values:
+--
+-- -   @TimeBased@ - Location updates are evaluated against linked geofence
+--     collections, but not every location update is stored. If your update
+--     frequency is more often than 30 seconds, only one update per 30
+--     seconds is stored for each unique device ID.
+--
+-- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
+--     location updates are ignored. Location updates within this area are
+--     neither evaluated against linked geofence collections, nor stored.
+--     This helps control costs by reducing the number of geofence
+--     evaluations and historical device positions to paginate through.
+--     Distance-based filtering can also reduce the effects of GPS noise
+--     when displaying device trajectories on a map.
+--
+-- -   @AccuracyBased@ - If the device has moved less than the measured
+--     accuracy, location updates are ignored. For example, if two
+--     consecutive updates from a device have a horizontal accuracy of 5 m
+--     and 10 m, the second update is ignored if the device has moved less
+--     than 15 m. Ignored location updates are neither evaluated against
+--     linked geofence collections, nor stored. This can reduce the effects
+--     of GPS noise when displaying device trajectories on a map, and can
+--     help control your costs by reducing the number of geofence
+--     evaluations.
+--
+-- This field is optional. If not specified, the default value is
+-- @TimeBased@.
+createTracker_positionFiltering :: Lens.Lens' CreateTracker (Prelude.Maybe PositionFiltering)
+createTracker_positionFiltering = Lens.lens (\CreateTracker' {positionFiltering} -> positionFiltering) (\s@CreateTracker' {} a -> s {positionFiltering = a} :: CreateTracker)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+createTracker_pricingPlan :: Lens.Lens' CreateTracker (Prelude.Maybe PricingPlan)
+createTracker_pricingPlan = Lens.lens (\CreateTracker' {pricingPlan} -> pricingPlan) (\s@CreateTracker' {} a -> s {pricingPlan = a} :: CreateTracker)
+
+-- | This parameter is no longer used.
+createTracker_pricingPlanDataSource :: Lens.Lens' CreateTracker (Prelude.Maybe Prelude.Text)
+createTracker_pricingPlanDataSource = Lens.lens (\CreateTracker' {pricingPlanDataSource} -> pricingPlanDataSource) (\s@CreateTracker' {} a -> s {pricingPlanDataSource = a} :: CreateTracker)
+
+-- | Applies one or more tags to the tracker resource. A tag is a key-value
+-- pair helps manage, identify, search, and filter your resources by
+-- labelling them.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource
+--
+-- -   Each resource tag must be unique with a maximum of one value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+createTracker_tags :: Lens.Lens' CreateTracker (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createTracker_tags = Lens.lens (\CreateTracker' {tags} -> tags) (\s@CreateTracker' {} a -> s {tags = a} :: CreateTracker) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the tracker resource.
+--
+-- Requirements:
+--
+-- -   Contain only alphanumeric characters (A-Z, a-z, 0-9) , hyphens (-),
+--     periods (.), and underscores (_).
+--
+-- -   Must be a unique tracker resource name.
+--
+-- -   No spaces allowed. For example, @ExampleTracker@.
+createTracker_trackerName :: Lens.Lens' CreateTracker Prelude.Text
+createTracker_trackerName = Lens.lens (\CreateTracker' {trackerName} -> trackerName) (\s@CreateTracker' {} a -> s {trackerName = a} :: CreateTracker)
+
+instance Core.AWSRequest CreateTracker where
+  type
+    AWSResponse CreateTracker =
+      CreateTrackerResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateTrackerResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "TrackerArn")
+            Prelude.<*> (x Data..:> "TrackerName")
+      )
+
+instance Prelude.Hashable CreateTracker where
+  hashWithSalt _salt CreateTracker' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` positionFiltering
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` pricingPlanDataSource
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData CreateTracker where
+  rnf CreateTracker' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf positionFiltering
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf pricingPlanDataSource
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders CreateTracker where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateTracker where
+  toJSON CreateTracker' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("KmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("PositionFiltering" Data..=)
+              Prelude.<$> positionFiltering,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan,
+            ("PricingPlanDataSource" Data..=)
+              Prelude.<$> pricingPlanDataSource,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("TrackerName" Data..= trackerName)
+          ]
+      )
+
+instance Data.ToPath CreateTracker where
+  toPath = Prelude.const "/tracking/v0/trackers"
+
+instance Data.ToQuery CreateTracker where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateTrackerResponse' smart constructor.
+data CreateTrackerResponse = CreateTrackerResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The timestamp for when the tracker resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) for the tracker resource. Used when you
+    -- need to specify a resource across all AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+    trackerArn :: Prelude.Text,
+    -- | The name of the tracker resource.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrackerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createTrackerResponse_httpStatus' - The response's http status code.
+--
+-- 'createTime', 'createTrackerResponse_createTime' - The timestamp for when the tracker resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'trackerArn', 'createTrackerResponse_trackerArn' - The Amazon Resource Name (ARN) for the tracker resource. Used when you
+-- need to specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+--
+-- 'trackerName', 'createTrackerResponse_trackerName' - The name of the tracker resource.
+newCreateTrackerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'trackerArn'
+  Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  CreateTrackerResponse
+newCreateTrackerResponse
+  pHttpStatus_
+  pCreateTime_
+  pTrackerArn_
+  pTrackerName_ =
+    CreateTrackerResponse'
+      { httpStatus = pHttpStatus_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        trackerArn = pTrackerArn_,
+        trackerName = pTrackerName_
+      }
+
+-- | The response's http status code.
+createTrackerResponse_httpStatus :: Lens.Lens' CreateTrackerResponse Prelude.Int
+createTrackerResponse_httpStatus = Lens.lens (\CreateTrackerResponse' {httpStatus} -> httpStatus) (\s@CreateTrackerResponse' {} a -> s {httpStatus = a} :: CreateTrackerResponse)
+
+-- | The timestamp for when the tracker resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+createTrackerResponse_createTime :: Lens.Lens' CreateTrackerResponse Prelude.UTCTime
+createTrackerResponse_createTime = Lens.lens (\CreateTrackerResponse' {createTime} -> createTime) (\s@CreateTrackerResponse' {} a -> s {createTime = a} :: CreateTrackerResponse) Prelude.. Data._Time
+
+-- | The Amazon Resource Name (ARN) for the tracker resource. Used when you
+-- need to specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+createTrackerResponse_trackerArn :: Lens.Lens' CreateTrackerResponse Prelude.Text
+createTrackerResponse_trackerArn = Lens.lens (\CreateTrackerResponse' {trackerArn} -> trackerArn) (\s@CreateTrackerResponse' {} a -> s {trackerArn = a} :: CreateTrackerResponse)
+
+-- | The name of the tracker resource.
+createTrackerResponse_trackerName :: Lens.Lens' CreateTrackerResponse Prelude.Text
+createTrackerResponse_trackerName = Lens.lens (\CreateTrackerResponse' {trackerName} -> trackerName) (\s@CreateTrackerResponse' {} a -> s {trackerName = a} :: CreateTrackerResponse)
+
+instance Prelude.NFData CreateTrackerResponse where
+  rnf CreateTrackerResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf trackerArn
+      `Prelude.seq` Prelude.rnf trackerName
diff --git a/gen/Amazonka/Location/DeleteGeofenceCollection.hs b/gen/Amazonka/Location/DeleteGeofenceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DeleteGeofenceCollection.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DeleteGeofenceCollection
+-- 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 geofence collection from your AWS account.
+--
+-- This operation deletes the resource permanently. If the geofence
+-- collection is the target of a tracker resource, the devices will no
+-- longer be monitored.
+module Amazonka.Location.DeleteGeofenceCollection
+  ( -- * Creating a Request
+    DeleteGeofenceCollection (..),
+    newDeleteGeofenceCollection,
+
+    -- * Request Lenses
+    deleteGeofenceCollection_collectionName,
+
+    -- * Destructuring the Response
+    DeleteGeofenceCollectionResponse (..),
+    newDeleteGeofenceCollectionResponse,
+
+    -- * Response Lenses
+    deleteGeofenceCollectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteGeofenceCollection' smart constructor.
+data DeleteGeofenceCollection = DeleteGeofenceCollection'
+  { -- | The name of the geofence collection to be deleted.
+    collectionName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteGeofenceCollection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionName', 'deleteGeofenceCollection_collectionName' - The name of the geofence collection to be deleted.
+newDeleteGeofenceCollection ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  DeleteGeofenceCollection
+newDeleteGeofenceCollection pCollectionName_ =
+  DeleteGeofenceCollection'
+    { collectionName =
+        pCollectionName_
+    }
+
+-- | The name of the geofence collection to be deleted.
+deleteGeofenceCollection_collectionName :: Lens.Lens' DeleteGeofenceCollection Prelude.Text
+deleteGeofenceCollection_collectionName = Lens.lens (\DeleteGeofenceCollection' {collectionName} -> collectionName) (\s@DeleteGeofenceCollection' {} a -> s {collectionName = a} :: DeleteGeofenceCollection)
+
+instance Core.AWSRequest DeleteGeofenceCollection where
+  type
+    AWSResponse DeleteGeofenceCollection =
+      DeleteGeofenceCollectionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteGeofenceCollectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteGeofenceCollection where
+  hashWithSalt _salt DeleteGeofenceCollection' {..} =
+    _salt `Prelude.hashWithSalt` collectionName
+
+instance Prelude.NFData DeleteGeofenceCollection where
+  rnf DeleteGeofenceCollection' {..} =
+    Prelude.rnf collectionName
+
+instance Data.ToHeaders DeleteGeofenceCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteGeofenceCollection where
+  toPath DeleteGeofenceCollection' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName
+      ]
+
+instance Data.ToQuery DeleteGeofenceCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteGeofenceCollectionResponse' smart constructor.
+data DeleteGeofenceCollectionResponse = DeleteGeofenceCollectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteGeofenceCollectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteGeofenceCollectionResponse_httpStatus' - The response's http status code.
+newDeleteGeofenceCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteGeofenceCollectionResponse
+newDeleteGeofenceCollectionResponse pHttpStatus_ =
+  DeleteGeofenceCollectionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteGeofenceCollectionResponse_httpStatus :: Lens.Lens' DeleteGeofenceCollectionResponse Prelude.Int
+deleteGeofenceCollectionResponse_httpStatus = Lens.lens (\DeleteGeofenceCollectionResponse' {httpStatus} -> httpStatus) (\s@DeleteGeofenceCollectionResponse' {} a -> s {httpStatus = a} :: DeleteGeofenceCollectionResponse)
+
+instance
+  Prelude.NFData
+    DeleteGeofenceCollectionResponse
+  where
+  rnf DeleteGeofenceCollectionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/DeleteMap.hs b/gen/Amazonka/Location/DeleteMap.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DeleteMap.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DeleteMap
+-- 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 map resource from your AWS account.
+--
+-- This operation deletes the resource permanently. If the map is being
+-- used in an application, the map may not render.
+module Amazonka.Location.DeleteMap
+  ( -- * Creating a Request
+    DeleteMap (..),
+    newDeleteMap,
+
+    -- * Request Lenses
+    deleteMap_mapName,
+
+    -- * Destructuring the Response
+    DeleteMapResponse (..),
+    newDeleteMapResponse,
+
+    -- * Response Lenses
+    deleteMapResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteMap' smart constructor.
+data DeleteMap = DeleteMap'
+  { -- | The name of the map resource to be deleted.
+    mapName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMap' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mapName', 'deleteMap_mapName' - The name of the map resource to be deleted.
+newDeleteMap ::
+  -- | 'mapName'
+  Prelude.Text ->
+  DeleteMap
+newDeleteMap pMapName_ =
+  DeleteMap' {mapName = pMapName_}
+
+-- | The name of the map resource to be deleted.
+deleteMap_mapName :: Lens.Lens' DeleteMap Prelude.Text
+deleteMap_mapName = Lens.lens (\DeleteMap' {mapName} -> mapName) (\s@DeleteMap' {} a -> s {mapName = a} :: DeleteMap)
+
+instance Core.AWSRequest DeleteMap where
+  type AWSResponse DeleteMap = DeleteMapResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteMapResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteMap where
+  hashWithSalt _salt DeleteMap' {..} =
+    _salt `Prelude.hashWithSalt` mapName
+
+instance Prelude.NFData DeleteMap where
+  rnf DeleteMap' {..} = Prelude.rnf mapName
+
+instance Data.ToHeaders DeleteMap where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteMap where
+  toPath DeleteMap' {..} =
+    Prelude.mconcat
+      ["/maps/v0/maps/", Data.toBS mapName]
+
+instance Data.ToQuery DeleteMap where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteMapResponse' smart constructor.
+data DeleteMapResponse = DeleteMapResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMapResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteMapResponse_httpStatus' - The response's http status code.
+newDeleteMapResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteMapResponse
+newDeleteMapResponse pHttpStatus_ =
+  DeleteMapResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteMapResponse_httpStatus :: Lens.Lens' DeleteMapResponse Prelude.Int
+deleteMapResponse_httpStatus = Lens.lens (\DeleteMapResponse' {httpStatus} -> httpStatus) (\s@DeleteMapResponse' {} a -> s {httpStatus = a} :: DeleteMapResponse)
+
+instance Prelude.NFData DeleteMapResponse where
+  rnf DeleteMapResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/DeletePlaceIndex.hs b/gen/Amazonka/Location/DeletePlaceIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DeletePlaceIndex.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DeletePlaceIndex
+-- 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 place index resource from your AWS account.
+--
+-- This operation deletes the resource permanently.
+module Amazonka.Location.DeletePlaceIndex
+  ( -- * Creating a Request
+    DeletePlaceIndex (..),
+    newDeletePlaceIndex,
+
+    -- * Request Lenses
+    deletePlaceIndex_indexName,
+
+    -- * Destructuring the Response
+    DeletePlaceIndexResponse (..),
+    newDeletePlaceIndexResponse,
+
+    -- * Response Lenses
+    deletePlaceIndexResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePlaceIndex' smart constructor.
+data DeletePlaceIndex = DeletePlaceIndex'
+  { -- | The name of the place index resource to be deleted.
+    indexName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePlaceIndex' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexName', 'deletePlaceIndex_indexName' - The name of the place index resource to be deleted.
+newDeletePlaceIndex ::
+  -- | 'indexName'
+  Prelude.Text ->
+  DeletePlaceIndex
+newDeletePlaceIndex pIndexName_ =
+  DeletePlaceIndex' {indexName = pIndexName_}
+
+-- | The name of the place index resource to be deleted.
+deletePlaceIndex_indexName :: Lens.Lens' DeletePlaceIndex Prelude.Text
+deletePlaceIndex_indexName = Lens.lens (\DeletePlaceIndex' {indexName} -> indexName) (\s@DeletePlaceIndex' {} a -> s {indexName = a} :: DeletePlaceIndex)
+
+instance Core.AWSRequest DeletePlaceIndex where
+  type
+    AWSResponse DeletePlaceIndex =
+      DeletePlaceIndexResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeletePlaceIndexResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeletePlaceIndex where
+  hashWithSalt _salt DeletePlaceIndex' {..} =
+    _salt `Prelude.hashWithSalt` indexName
+
+instance Prelude.NFData DeletePlaceIndex where
+  rnf DeletePlaceIndex' {..} = Prelude.rnf indexName
+
+instance Data.ToHeaders DeletePlaceIndex where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeletePlaceIndex where
+  toPath DeletePlaceIndex' {..} =
+    Prelude.mconcat
+      ["/places/v0/indexes/", Data.toBS indexName]
+
+instance Data.ToQuery DeletePlaceIndex where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeletePlaceIndexResponse' smart constructor.
+data DeletePlaceIndexResponse = DeletePlaceIndexResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePlaceIndexResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deletePlaceIndexResponse_httpStatus' - The response's http status code.
+newDeletePlaceIndexResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeletePlaceIndexResponse
+newDeletePlaceIndexResponse pHttpStatus_ =
+  DeletePlaceIndexResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deletePlaceIndexResponse_httpStatus :: Lens.Lens' DeletePlaceIndexResponse Prelude.Int
+deletePlaceIndexResponse_httpStatus = Lens.lens (\DeletePlaceIndexResponse' {httpStatus} -> httpStatus) (\s@DeletePlaceIndexResponse' {} a -> s {httpStatus = a} :: DeletePlaceIndexResponse)
+
+instance Prelude.NFData DeletePlaceIndexResponse where
+  rnf DeletePlaceIndexResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/DeleteRouteCalculator.hs b/gen/Amazonka/Location/DeleteRouteCalculator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DeleteRouteCalculator.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DeleteRouteCalculator
+-- 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 route calculator resource from your AWS account.
+--
+-- This operation deletes the resource permanently.
+module Amazonka.Location.DeleteRouteCalculator
+  ( -- * Creating a Request
+    DeleteRouteCalculator (..),
+    newDeleteRouteCalculator,
+
+    -- * Request Lenses
+    deleteRouteCalculator_calculatorName,
+
+    -- * Destructuring the Response
+    DeleteRouteCalculatorResponse (..),
+    newDeleteRouteCalculatorResponse,
+
+    -- * Response Lenses
+    deleteRouteCalculatorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRouteCalculator' smart constructor.
+data DeleteRouteCalculator = DeleteRouteCalculator'
+  { -- | The name of the route calculator resource to be deleted.
+    calculatorName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteCalculator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'calculatorName', 'deleteRouteCalculator_calculatorName' - The name of the route calculator resource to be deleted.
+newDeleteRouteCalculator ::
+  -- | 'calculatorName'
+  Prelude.Text ->
+  DeleteRouteCalculator
+newDeleteRouteCalculator pCalculatorName_ =
+  DeleteRouteCalculator'
+    { calculatorName =
+        pCalculatorName_
+    }
+
+-- | The name of the route calculator resource to be deleted.
+deleteRouteCalculator_calculatorName :: Lens.Lens' DeleteRouteCalculator Prelude.Text
+deleteRouteCalculator_calculatorName = Lens.lens (\DeleteRouteCalculator' {calculatorName} -> calculatorName) (\s@DeleteRouteCalculator' {} a -> s {calculatorName = a} :: DeleteRouteCalculator)
+
+instance Core.AWSRequest DeleteRouteCalculator where
+  type
+    AWSResponse DeleteRouteCalculator =
+      DeleteRouteCalculatorResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteRouteCalculatorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteRouteCalculator where
+  hashWithSalt _salt DeleteRouteCalculator' {..} =
+    _salt `Prelude.hashWithSalt` calculatorName
+
+instance Prelude.NFData DeleteRouteCalculator where
+  rnf DeleteRouteCalculator' {..} =
+    Prelude.rnf calculatorName
+
+instance Data.ToHeaders DeleteRouteCalculator where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteRouteCalculator where
+  toPath DeleteRouteCalculator' {..} =
+    Prelude.mconcat
+      ["/routes/v0/calculators/", Data.toBS calculatorName]
+
+instance Data.ToQuery DeleteRouteCalculator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteRouteCalculatorResponse' smart constructor.
+data DeleteRouteCalculatorResponse = DeleteRouteCalculatorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteCalculatorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteRouteCalculatorResponse_httpStatus' - The response's http status code.
+newDeleteRouteCalculatorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteRouteCalculatorResponse
+newDeleteRouteCalculatorResponse pHttpStatus_ =
+  DeleteRouteCalculatorResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteRouteCalculatorResponse_httpStatus :: Lens.Lens' DeleteRouteCalculatorResponse Prelude.Int
+deleteRouteCalculatorResponse_httpStatus = Lens.lens (\DeleteRouteCalculatorResponse' {httpStatus} -> httpStatus) (\s@DeleteRouteCalculatorResponse' {} a -> s {httpStatus = a} :: DeleteRouteCalculatorResponse)
+
+instance Prelude.NFData DeleteRouteCalculatorResponse where
+  rnf DeleteRouteCalculatorResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/DeleteTracker.hs b/gen/Amazonka/Location/DeleteTracker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DeleteTracker.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.Location.DeleteTracker
+-- 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 tracker resource from your AWS account.
+--
+-- This operation deletes the resource permanently. If the tracker resource
+-- is in use, you may encounter an error. Make sure that the target
+-- resource isn\'t a dependency for your applications.
+module Amazonka.Location.DeleteTracker
+  ( -- * Creating a Request
+    DeleteTracker (..),
+    newDeleteTracker,
+
+    -- * Request Lenses
+    deleteTracker_trackerName,
+
+    -- * Destructuring the Response
+    DeleteTrackerResponse (..),
+    newDeleteTrackerResponse,
+
+    -- * Response Lenses
+    deleteTrackerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTracker' smart constructor.
+data DeleteTracker = DeleteTracker'
+  { -- | The name of the tracker resource to be deleted.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTracker' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trackerName', 'deleteTracker_trackerName' - The name of the tracker resource to be deleted.
+newDeleteTracker ::
+  -- | 'trackerName'
+  Prelude.Text ->
+  DeleteTracker
+newDeleteTracker pTrackerName_ =
+  DeleteTracker' {trackerName = pTrackerName_}
+
+-- | The name of the tracker resource to be deleted.
+deleteTracker_trackerName :: Lens.Lens' DeleteTracker Prelude.Text
+deleteTracker_trackerName = Lens.lens (\DeleteTracker' {trackerName} -> trackerName) (\s@DeleteTracker' {} a -> s {trackerName = a} :: DeleteTracker)
+
+instance Core.AWSRequest DeleteTracker where
+  type
+    AWSResponse DeleteTracker =
+      DeleteTrackerResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteTrackerResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTracker where
+  hashWithSalt _salt DeleteTracker' {..} =
+    _salt `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData DeleteTracker where
+  rnf DeleteTracker' {..} = Prelude.rnf trackerName
+
+instance Data.ToHeaders DeleteTracker where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteTracker where
+  toPath DeleteTracker' {..} =
+    Prelude.mconcat
+      ["/tracking/v0/trackers/", Data.toBS trackerName]
+
+instance Data.ToQuery DeleteTracker where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteTrackerResponse' smart constructor.
+data DeleteTrackerResponse = DeleteTrackerResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrackerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteTrackerResponse_httpStatus' - The response's http status code.
+newDeleteTrackerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTrackerResponse
+newDeleteTrackerResponse pHttpStatus_ =
+  DeleteTrackerResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteTrackerResponse_httpStatus :: Lens.Lens' DeleteTrackerResponse Prelude.Int
+deleteTrackerResponse_httpStatus = Lens.lens (\DeleteTrackerResponse' {httpStatus} -> httpStatus) (\s@DeleteTrackerResponse' {} a -> s {httpStatus = a} :: DeleteTrackerResponse)
+
+instance Prelude.NFData DeleteTrackerResponse where
+  rnf DeleteTrackerResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/DescribeGeofenceCollection.hs b/gen/Amazonka/Location/DescribeGeofenceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DescribeGeofenceCollection.hs
@@ -0,0 +1,312 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DescribeGeofenceCollection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the geofence collection details.
+module Amazonka.Location.DescribeGeofenceCollection
+  ( -- * Creating a Request
+    DescribeGeofenceCollection (..),
+    newDescribeGeofenceCollection,
+
+    -- * Request Lenses
+    describeGeofenceCollection_collectionName,
+
+    -- * Destructuring the Response
+    DescribeGeofenceCollectionResponse (..),
+    newDescribeGeofenceCollectionResponse,
+
+    -- * Response Lenses
+    describeGeofenceCollectionResponse_kmsKeyId,
+    describeGeofenceCollectionResponse_pricingPlan,
+    describeGeofenceCollectionResponse_pricingPlanDataSource,
+    describeGeofenceCollectionResponse_tags,
+    describeGeofenceCollectionResponse_httpStatus,
+    describeGeofenceCollectionResponse_collectionArn,
+    describeGeofenceCollectionResponse_collectionName,
+    describeGeofenceCollectionResponse_createTime,
+    describeGeofenceCollectionResponse_description,
+    describeGeofenceCollectionResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeGeofenceCollection' smart constructor.
+data DescribeGeofenceCollection = DescribeGeofenceCollection'
+  { -- | The name of the geofence collection.
+    collectionName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeGeofenceCollection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionName', 'describeGeofenceCollection_collectionName' - The name of the geofence collection.
+newDescribeGeofenceCollection ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  DescribeGeofenceCollection
+newDescribeGeofenceCollection pCollectionName_ =
+  DescribeGeofenceCollection'
+    { collectionName =
+        pCollectionName_
+    }
+
+-- | The name of the geofence collection.
+describeGeofenceCollection_collectionName :: Lens.Lens' DescribeGeofenceCollection Prelude.Text
+describeGeofenceCollection_collectionName = Lens.lens (\DescribeGeofenceCollection' {collectionName} -> collectionName) (\s@DescribeGeofenceCollection' {} a -> s {collectionName = a} :: DescribeGeofenceCollection)
+
+instance Core.AWSRequest DescribeGeofenceCollection where
+  type
+    AWSResponse DescribeGeofenceCollection =
+      DescribeGeofenceCollectionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeGeofenceCollectionResponse'
+            Prelude.<$> (x Data..?> "KmsKeyId")
+            Prelude.<*> (x Data..?> "PricingPlan")
+            Prelude.<*> (x Data..?> "PricingPlanDataSource")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CollectionArn")
+            Prelude.<*> (x Data..:> "CollectionName")
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "Description")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable DescribeGeofenceCollection where
+  hashWithSalt _salt DescribeGeofenceCollection' {..} =
+    _salt `Prelude.hashWithSalt` collectionName
+
+instance Prelude.NFData DescribeGeofenceCollection where
+  rnf DescribeGeofenceCollection' {..} =
+    Prelude.rnf collectionName
+
+instance Data.ToHeaders DescribeGeofenceCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeGeofenceCollection where
+  toPath DescribeGeofenceCollection' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName
+      ]
+
+instance Data.ToQuery DescribeGeofenceCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeGeofenceCollectionResponse' smart constructor.
+data DescribeGeofenceCollectionResponse = DescribeGeofenceCollectionResponse'
+  { -- | A key identifier for an
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>
+    -- assigned to the Amazon Location resource
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | No longer used. Always returns an empty string.
+    pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
+    -- | Displays the key, value pairs of tags associated with this resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) for the geofence collection resource.
+    -- Used when you need to specify a resource across all AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+    collectionArn :: Prelude.Text,
+    -- | The name of the geofence collection.
+    collectionName :: Prelude.Text,
+    -- | The timestamp for when the geofence resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    createTime :: Data.ISO8601,
+    -- | The optional description for the geofence collection.
+    description :: Prelude.Text,
+    -- | The timestamp for when the geofence collection was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeGeofenceCollectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyId', 'describeGeofenceCollectionResponse_kmsKeyId' - A key identifier for an
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>
+-- assigned to the Amazon Location resource
+--
+-- 'pricingPlan', 'describeGeofenceCollectionResponse_pricingPlan' - No longer used. Always returns @RequestBasedUsage@.
+--
+-- 'pricingPlanDataSource', 'describeGeofenceCollectionResponse_pricingPlanDataSource' - No longer used. Always returns an empty string.
+--
+-- 'tags', 'describeGeofenceCollectionResponse_tags' - Displays the key, value pairs of tags associated with this resource.
+--
+-- 'httpStatus', 'describeGeofenceCollectionResponse_httpStatus' - The response's http status code.
+--
+-- 'collectionArn', 'describeGeofenceCollectionResponse_collectionArn' - The Amazon Resource Name (ARN) for the geofence collection resource.
+-- Used when you need to specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+--
+-- 'collectionName', 'describeGeofenceCollectionResponse_collectionName' - The name of the geofence collection.
+--
+-- 'createTime', 'describeGeofenceCollectionResponse_createTime' - The timestamp for when the geofence resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+--
+-- 'description', 'describeGeofenceCollectionResponse_description' - The optional description for the geofence collection.
+--
+-- 'updateTime', 'describeGeofenceCollectionResponse_updateTime' - The timestamp for when the geofence collection was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newDescribeGeofenceCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'collectionArn'
+  Prelude.Text ->
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  DescribeGeofenceCollectionResponse
+newDescribeGeofenceCollectionResponse
+  pHttpStatus_
+  pCollectionArn_
+  pCollectionName_
+  pCreateTime_
+  pDescription_
+  pUpdateTime_ =
+    DescribeGeofenceCollectionResponse'
+      { kmsKeyId =
+          Prelude.Nothing,
+        pricingPlan = Prelude.Nothing,
+        pricingPlanDataSource = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        collectionArn = pCollectionArn_,
+        collectionName = pCollectionName_,
+        createTime =
+          Data._Time Lens.# pCreateTime_,
+        description = pDescription_,
+        updateTime =
+          Data._Time Lens.# pUpdateTime_
+      }
+
+-- | A key identifier for an
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>
+-- assigned to the Amazon Location resource
+describeGeofenceCollectionResponse_kmsKeyId :: Lens.Lens' DescribeGeofenceCollectionResponse (Prelude.Maybe Prelude.Text)
+describeGeofenceCollectionResponse_kmsKeyId = Lens.lens (\DescribeGeofenceCollectionResponse' {kmsKeyId} -> kmsKeyId) (\s@DescribeGeofenceCollectionResponse' {} a -> s {kmsKeyId = a} :: DescribeGeofenceCollectionResponse)
+
+-- | No longer used. Always returns @RequestBasedUsage@.
+describeGeofenceCollectionResponse_pricingPlan :: Lens.Lens' DescribeGeofenceCollectionResponse (Prelude.Maybe PricingPlan)
+describeGeofenceCollectionResponse_pricingPlan = Lens.lens (\DescribeGeofenceCollectionResponse' {pricingPlan} -> pricingPlan) (\s@DescribeGeofenceCollectionResponse' {} a -> s {pricingPlan = a} :: DescribeGeofenceCollectionResponse)
+
+-- | No longer used. Always returns an empty string.
+describeGeofenceCollectionResponse_pricingPlanDataSource :: Lens.Lens' DescribeGeofenceCollectionResponse (Prelude.Maybe Prelude.Text)
+describeGeofenceCollectionResponse_pricingPlanDataSource = Lens.lens (\DescribeGeofenceCollectionResponse' {pricingPlanDataSource} -> pricingPlanDataSource) (\s@DescribeGeofenceCollectionResponse' {} a -> s {pricingPlanDataSource = a} :: DescribeGeofenceCollectionResponse)
+
+-- | Displays the key, value pairs of tags associated with this resource.
+describeGeofenceCollectionResponse_tags :: Lens.Lens' DescribeGeofenceCollectionResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeGeofenceCollectionResponse_tags = Lens.lens (\DescribeGeofenceCollectionResponse' {tags} -> tags) (\s@DescribeGeofenceCollectionResponse' {} a -> s {tags = a} :: DescribeGeofenceCollectionResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeGeofenceCollectionResponse_httpStatus :: Lens.Lens' DescribeGeofenceCollectionResponse Prelude.Int
+describeGeofenceCollectionResponse_httpStatus = Lens.lens (\DescribeGeofenceCollectionResponse' {httpStatus} -> httpStatus) (\s@DescribeGeofenceCollectionResponse' {} a -> s {httpStatus = a} :: DescribeGeofenceCollectionResponse)
+
+-- | The Amazon Resource Name (ARN) for the geofence collection resource.
+-- Used when you need to specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+describeGeofenceCollectionResponse_collectionArn :: Lens.Lens' DescribeGeofenceCollectionResponse Prelude.Text
+describeGeofenceCollectionResponse_collectionArn = Lens.lens (\DescribeGeofenceCollectionResponse' {collectionArn} -> collectionArn) (\s@DescribeGeofenceCollectionResponse' {} a -> s {collectionArn = a} :: DescribeGeofenceCollectionResponse)
+
+-- | The name of the geofence collection.
+describeGeofenceCollectionResponse_collectionName :: Lens.Lens' DescribeGeofenceCollectionResponse Prelude.Text
+describeGeofenceCollectionResponse_collectionName = Lens.lens (\DescribeGeofenceCollectionResponse' {collectionName} -> collectionName) (\s@DescribeGeofenceCollectionResponse' {} a -> s {collectionName = a} :: DescribeGeofenceCollectionResponse)
+
+-- | The timestamp for when the geofence resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+describeGeofenceCollectionResponse_createTime :: Lens.Lens' DescribeGeofenceCollectionResponse Prelude.UTCTime
+describeGeofenceCollectionResponse_createTime = Lens.lens (\DescribeGeofenceCollectionResponse' {createTime} -> createTime) (\s@DescribeGeofenceCollectionResponse' {} a -> s {createTime = a} :: DescribeGeofenceCollectionResponse) Prelude.. Data._Time
+
+-- | The optional description for the geofence collection.
+describeGeofenceCollectionResponse_description :: Lens.Lens' DescribeGeofenceCollectionResponse Prelude.Text
+describeGeofenceCollectionResponse_description = Lens.lens (\DescribeGeofenceCollectionResponse' {description} -> description) (\s@DescribeGeofenceCollectionResponse' {} a -> s {description = a} :: DescribeGeofenceCollectionResponse)
+
+-- | The timestamp for when the geofence collection was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+describeGeofenceCollectionResponse_updateTime :: Lens.Lens' DescribeGeofenceCollectionResponse Prelude.UTCTime
+describeGeofenceCollectionResponse_updateTime = Lens.lens (\DescribeGeofenceCollectionResponse' {updateTime} -> updateTime) (\s@DescribeGeofenceCollectionResponse' {} a -> s {updateTime = a} :: DescribeGeofenceCollectionResponse) Prelude.. Data._Time
+
+instance
+  Prelude.NFData
+    DescribeGeofenceCollectionResponse
+  where
+  rnf DescribeGeofenceCollectionResponse' {..} =
+    Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf pricingPlanDataSource
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf collectionArn
+      `Prelude.seq` Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/DescribeMap.hs b/gen/Amazonka/Location/DescribeMap.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DescribeMap.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DescribeMap
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the map resource details.
+module Amazonka.Location.DescribeMap
+  ( -- * Creating a Request
+    DescribeMap (..),
+    newDescribeMap,
+
+    -- * Request Lenses
+    describeMap_mapName,
+
+    -- * Destructuring the Response
+    DescribeMapResponse (..),
+    newDescribeMapResponse,
+
+    -- * Response Lenses
+    describeMapResponse_pricingPlan,
+    describeMapResponse_tags,
+    describeMapResponse_httpStatus,
+    describeMapResponse_configuration,
+    describeMapResponse_createTime,
+    describeMapResponse_dataSource,
+    describeMapResponse_description,
+    describeMapResponse_mapArn,
+    describeMapResponse_mapName,
+    describeMapResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeMap' smart constructor.
+data DescribeMap = DescribeMap'
+  { -- | The name of the map resource.
+    mapName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMap' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mapName', 'describeMap_mapName' - The name of the map resource.
+newDescribeMap ::
+  -- | 'mapName'
+  Prelude.Text ->
+  DescribeMap
+newDescribeMap pMapName_ =
+  DescribeMap' {mapName = pMapName_}
+
+-- | The name of the map resource.
+describeMap_mapName :: Lens.Lens' DescribeMap Prelude.Text
+describeMap_mapName = Lens.lens (\DescribeMap' {mapName} -> mapName) (\s@DescribeMap' {} a -> s {mapName = a} :: DescribeMap)
+
+instance Core.AWSRequest DescribeMap where
+  type AWSResponse DescribeMap = DescribeMapResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeMapResponse'
+            Prelude.<$> (x Data..?> "PricingPlan")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Configuration")
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "DataSource")
+            Prelude.<*> (x Data..:> "Description")
+            Prelude.<*> (x Data..:> "MapArn")
+            Prelude.<*> (x Data..:> "MapName")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable DescribeMap where
+  hashWithSalt _salt DescribeMap' {..} =
+    _salt `Prelude.hashWithSalt` mapName
+
+instance Prelude.NFData DescribeMap where
+  rnf DescribeMap' {..} = Prelude.rnf mapName
+
+instance Data.ToHeaders DescribeMap where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeMap where
+  toPath DescribeMap' {..} =
+    Prelude.mconcat
+      ["/maps/v0/maps/", Data.toBS mapName]
+
+instance Data.ToQuery DescribeMap where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeMapResponse' smart constructor.
+data DescribeMapResponse = DescribeMapResponse'
+  { -- | No longer used. Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | Tags associated with the map resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Specifies the map tile style selected from a partner data provider.
+    configuration :: MapConfiguration,
+    -- | The timestamp for when the map resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | Specifies the data provider for the associated map tiles.
+    dataSource :: Prelude.Text,
+    -- | The optional description for the map resource.
+    description :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the map resource. Used to specify a
+    -- resource across all AWS.
+    --
+    -- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+    mapArn :: Prelude.Text,
+    -- | The map style selected from an available provider.
+    mapName :: Prelude.Text,
+    -- | The timestamp for when the map resource was last update in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMapResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pricingPlan', 'describeMapResponse_pricingPlan' - No longer used. Always returns @RequestBasedUsage@.
+--
+-- 'tags', 'describeMapResponse_tags' - Tags associated with the map resource.
+--
+-- 'httpStatus', 'describeMapResponse_httpStatus' - The response's http status code.
+--
+-- 'configuration', 'describeMapResponse_configuration' - Specifies the map tile style selected from a partner data provider.
+--
+-- 'createTime', 'describeMapResponse_createTime' - The timestamp for when the map resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'dataSource', 'describeMapResponse_dataSource' - Specifies the data provider for the associated map tiles.
+--
+-- 'description', 'describeMapResponse_description' - The optional description for the map resource.
+--
+-- 'mapArn', 'describeMapResponse_mapArn' - The Amazon Resource Name (ARN) for the map resource. Used to specify a
+-- resource across all AWS.
+--
+-- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+--
+-- 'mapName', 'describeMapResponse_mapName' - The map style selected from an available provider.
+--
+-- 'updateTime', 'describeMapResponse_updateTime' - The timestamp for when the map resource was last update in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newDescribeMapResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'configuration'
+  MapConfiguration ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'mapArn'
+  Prelude.Text ->
+  -- | 'mapName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  DescribeMapResponse
+newDescribeMapResponse
+  pHttpStatus_
+  pConfiguration_
+  pCreateTime_
+  pDataSource_
+  pDescription_
+  pMapArn_
+  pMapName_
+  pUpdateTime_ =
+    DescribeMapResponse'
+      { pricingPlan = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        configuration = pConfiguration_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        dataSource = pDataSource_,
+        description = pDescription_,
+        mapArn = pMapArn_,
+        mapName = pMapName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | No longer used. Always returns @RequestBasedUsage@.
+describeMapResponse_pricingPlan :: Lens.Lens' DescribeMapResponse (Prelude.Maybe PricingPlan)
+describeMapResponse_pricingPlan = Lens.lens (\DescribeMapResponse' {pricingPlan} -> pricingPlan) (\s@DescribeMapResponse' {} a -> s {pricingPlan = a} :: DescribeMapResponse)
+
+-- | Tags associated with the map resource.
+describeMapResponse_tags :: Lens.Lens' DescribeMapResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeMapResponse_tags = Lens.lens (\DescribeMapResponse' {tags} -> tags) (\s@DescribeMapResponse' {} a -> s {tags = a} :: DescribeMapResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeMapResponse_httpStatus :: Lens.Lens' DescribeMapResponse Prelude.Int
+describeMapResponse_httpStatus = Lens.lens (\DescribeMapResponse' {httpStatus} -> httpStatus) (\s@DescribeMapResponse' {} a -> s {httpStatus = a} :: DescribeMapResponse)
+
+-- | Specifies the map tile style selected from a partner data provider.
+describeMapResponse_configuration :: Lens.Lens' DescribeMapResponse MapConfiguration
+describeMapResponse_configuration = Lens.lens (\DescribeMapResponse' {configuration} -> configuration) (\s@DescribeMapResponse' {} a -> s {configuration = a} :: DescribeMapResponse)
+
+-- | The timestamp for when the map resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+describeMapResponse_createTime :: Lens.Lens' DescribeMapResponse Prelude.UTCTime
+describeMapResponse_createTime = Lens.lens (\DescribeMapResponse' {createTime} -> createTime) (\s@DescribeMapResponse' {} a -> s {createTime = a} :: DescribeMapResponse) Prelude.. Data._Time
+
+-- | Specifies the data provider for the associated map tiles.
+describeMapResponse_dataSource :: Lens.Lens' DescribeMapResponse Prelude.Text
+describeMapResponse_dataSource = Lens.lens (\DescribeMapResponse' {dataSource} -> dataSource) (\s@DescribeMapResponse' {} a -> s {dataSource = a} :: DescribeMapResponse)
+
+-- | The optional description for the map resource.
+describeMapResponse_description :: Lens.Lens' DescribeMapResponse Prelude.Text
+describeMapResponse_description = Lens.lens (\DescribeMapResponse' {description} -> description) (\s@DescribeMapResponse' {} a -> s {description = a} :: DescribeMapResponse)
+
+-- | The Amazon Resource Name (ARN) for the map resource. Used to specify a
+-- resource across all AWS.
+--
+-- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+describeMapResponse_mapArn :: Lens.Lens' DescribeMapResponse Prelude.Text
+describeMapResponse_mapArn = Lens.lens (\DescribeMapResponse' {mapArn} -> mapArn) (\s@DescribeMapResponse' {} a -> s {mapArn = a} :: DescribeMapResponse)
+
+-- | The map style selected from an available provider.
+describeMapResponse_mapName :: Lens.Lens' DescribeMapResponse Prelude.Text
+describeMapResponse_mapName = Lens.lens (\DescribeMapResponse' {mapName} -> mapName) (\s@DescribeMapResponse' {} a -> s {mapName = a} :: DescribeMapResponse)
+
+-- | The timestamp for when the map resource was last update in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+describeMapResponse_updateTime :: Lens.Lens' DescribeMapResponse Prelude.UTCTime
+describeMapResponse_updateTime = Lens.lens (\DescribeMapResponse' {updateTime} -> updateTime) (\s@DescribeMapResponse' {} a -> s {updateTime = a} :: DescribeMapResponse) Prelude.. Data._Time
+
+instance Prelude.NFData DescribeMapResponse where
+  rnf DescribeMapResponse' {..} =
+    Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf mapArn
+      `Prelude.seq` Prelude.rnf mapName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/DescribePlaceIndex.hs b/gen/Amazonka/Location/DescribePlaceIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DescribePlaceIndex.hs
@@ -0,0 +1,326 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DescribePlaceIndex
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the place index resource details.
+module Amazonka.Location.DescribePlaceIndex
+  ( -- * Creating a Request
+    DescribePlaceIndex (..),
+    newDescribePlaceIndex,
+
+    -- * Request Lenses
+    describePlaceIndex_indexName,
+
+    -- * Destructuring the Response
+    DescribePlaceIndexResponse (..),
+    newDescribePlaceIndexResponse,
+
+    -- * Response Lenses
+    describePlaceIndexResponse_pricingPlan,
+    describePlaceIndexResponse_tags,
+    describePlaceIndexResponse_httpStatus,
+    describePlaceIndexResponse_createTime,
+    describePlaceIndexResponse_dataSource,
+    describePlaceIndexResponse_dataSourceConfiguration,
+    describePlaceIndexResponse_description,
+    describePlaceIndexResponse_indexArn,
+    describePlaceIndexResponse_indexName,
+    describePlaceIndexResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePlaceIndex' smart constructor.
+data DescribePlaceIndex = DescribePlaceIndex'
+  { -- | The name of the place index resource.
+    indexName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePlaceIndex' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'indexName', 'describePlaceIndex_indexName' - The name of the place index resource.
+newDescribePlaceIndex ::
+  -- | 'indexName'
+  Prelude.Text ->
+  DescribePlaceIndex
+newDescribePlaceIndex pIndexName_ =
+  DescribePlaceIndex' {indexName = pIndexName_}
+
+-- | The name of the place index resource.
+describePlaceIndex_indexName :: Lens.Lens' DescribePlaceIndex Prelude.Text
+describePlaceIndex_indexName = Lens.lens (\DescribePlaceIndex' {indexName} -> indexName) (\s@DescribePlaceIndex' {} a -> s {indexName = a} :: DescribePlaceIndex)
+
+instance Core.AWSRequest DescribePlaceIndex where
+  type
+    AWSResponse DescribePlaceIndex =
+      DescribePlaceIndexResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePlaceIndexResponse'
+            Prelude.<$> (x Data..?> "PricingPlan")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "DataSource")
+            Prelude.<*> (x Data..:> "DataSourceConfiguration")
+            Prelude.<*> (x Data..:> "Description")
+            Prelude.<*> (x Data..:> "IndexArn")
+            Prelude.<*> (x Data..:> "IndexName")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable DescribePlaceIndex where
+  hashWithSalt _salt DescribePlaceIndex' {..} =
+    _salt `Prelude.hashWithSalt` indexName
+
+instance Prelude.NFData DescribePlaceIndex where
+  rnf DescribePlaceIndex' {..} = Prelude.rnf indexName
+
+instance Data.ToHeaders DescribePlaceIndex where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribePlaceIndex where
+  toPath DescribePlaceIndex' {..} =
+    Prelude.mconcat
+      ["/places/v0/indexes/", Data.toBS indexName]
+
+instance Data.ToQuery DescribePlaceIndex where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribePlaceIndexResponse' smart constructor.
+data DescribePlaceIndexResponse = DescribePlaceIndexResponse'
+  { -- | No longer used. Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | Tags associated with place index resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The timestamp for when the place index resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | The data provider of geospatial data. Values can be one of the
+    -- following:
+    --
+    -- -   @Esri@
+    --
+    -- -   @Here@
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The specified data storage option for requesting Places.
+    dataSourceConfiguration :: DataSourceConfiguration,
+    -- | The optional description for the place index resource.
+    description :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the place index resource. Used to
+    -- specify a resource across AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:place-index\/ExamplePlaceIndex@
+    indexArn :: Prelude.Text,
+    -- | The name of the place index resource being described.
+    indexName :: Prelude.Text,
+    -- | The timestamp for when the place index resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePlaceIndexResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pricingPlan', 'describePlaceIndexResponse_pricingPlan' - No longer used. Always returns @RequestBasedUsage@.
+--
+-- 'tags', 'describePlaceIndexResponse_tags' - Tags associated with place index resource.
+--
+-- 'httpStatus', 'describePlaceIndexResponse_httpStatus' - The response's http status code.
+--
+-- 'createTime', 'describePlaceIndexResponse_createTime' - The timestamp for when the place index resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'dataSource', 'describePlaceIndexResponse_dataSource' - The data provider of geospatial data. Values can be one of the
+-- following:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'dataSourceConfiguration', 'describePlaceIndexResponse_dataSourceConfiguration' - The specified data storage option for requesting Places.
+--
+-- 'description', 'describePlaceIndexResponse_description' - The optional description for the place index resource.
+--
+-- 'indexArn', 'describePlaceIndexResponse_indexArn' - The Amazon Resource Name (ARN) for the place index resource. Used to
+-- specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:place-index\/ExamplePlaceIndex@
+--
+-- 'indexName', 'describePlaceIndexResponse_indexName' - The name of the place index resource being described.
+--
+-- 'updateTime', 'describePlaceIndexResponse_updateTime' - The timestamp for when the place index resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newDescribePlaceIndexResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'dataSourceConfiguration'
+  DataSourceConfiguration ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'indexArn'
+  Prelude.Text ->
+  -- | 'indexName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  DescribePlaceIndexResponse
+newDescribePlaceIndexResponse
+  pHttpStatus_
+  pCreateTime_
+  pDataSource_
+  pDataSourceConfiguration_
+  pDescription_
+  pIndexArn_
+  pIndexName_
+  pUpdateTime_ =
+    DescribePlaceIndexResponse'
+      { pricingPlan =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        dataSource = pDataSource_,
+        dataSourceConfiguration =
+          pDataSourceConfiguration_,
+        description = pDescription_,
+        indexArn = pIndexArn_,
+        indexName = pIndexName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | No longer used. Always returns @RequestBasedUsage@.
+describePlaceIndexResponse_pricingPlan :: Lens.Lens' DescribePlaceIndexResponse (Prelude.Maybe PricingPlan)
+describePlaceIndexResponse_pricingPlan = Lens.lens (\DescribePlaceIndexResponse' {pricingPlan} -> pricingPlan) (\s@DescribePlaceIndexResponse' {} a -> s {pricingPlan = a} :: DescribePlaceIndexResponse)
+
+-- | Tags associated with place index resource.
+describePlaceIndexResponse_tags :: Lens.Lens' DescribePlaceIndexResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describePlaceIndexResponse_tags = Lens.lens (\DescribePlaceIndexResponse' {tags} -> tags) (\s@DescribePlaceIndexResponse' {} a -> s {tags = a} :: DescribePlaceIndexResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describePlaceIndexResponse_httpStatus :: Lens.Lens' DescribePlaceIndexResponse Prelude.Int
+describePlaceIndexResponse_httpStatus = Lens.lens (\DescribePlaceIndexResponse' {httpStatus} -> httpStatus) (\s@DescribePlaceIndexResponse' {} a -> s {httpStatus = a} :: DescribePlaceIndexResponse)
+
+-- | The timestamp for when the place index resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+describePlaceIndexResponse_createTime :: Lens.Lens' DescribePlaceIndexResponse Prelude.UTCTime
+describePlaceIndexResponse_createTime = Lens.lens (\DescribePlaceIndexResponse' {createTime} -> createTime) (\s@DescribePlaceIndexResponse' {} a -> s {createTime = a} :: DescribePlaceIndexResponse) Prelude.. Data._Time
+
+-- | The data provider of geospatial data. Values can be one of the
+-- following:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+describePlaceIndexResponse_dataSource :: Lens.Lens' DescribePlaceIndexResponse Prelude.Text
+describePlaceIndexResponse_dataSource = Lens.lens (\DescribePlaceIndexResponse' {dataSource} -> dataSource) (\s@DescribePlaceIndexResponse' {} a -> s {dataSource = a} :: DescribePlaceIndexResponse)
+
+-- | The specified data storage option for requesting Places.
+describePlaceIndexResponse_dataSourceConfiguration :: Lens.Lens' DescribePlaceIndexResponse DataSourceConfiguration
+describePlaceIndexResponse_dataSourceConfiguration = Lens.lens (\DescribePlaceIndexResponse' {dataSourceConfiguration} -> dataSourceConfiguration) (\s@DescribePlaceIndexResponse' {} a -> s {dataSourceConfiguration = a} :: DescribePlaceIndexResponse)
+
+-- | The optional description for the place index resource.
+describePlaceIndexResponse_description :: Lens.Lens' DescribePlaceIndexResponse Prelude.Text
+describePlaceIndexResponse_description = Lens.lens (\DescribePlaceIndexResponse' {description} -> description) (\s@DescribePlaceIndexResponse' {} a -> s {description = a} :: DescribePlaceIndexResponse)
+
+-- | The Amazon Resource Name (ARN) for the place index resource. Used to
+-- specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:place-index\/ExamplePlaceIndex@
+describePlaceIndexResponse_indexArn :: Lens.Lens' DescribePlaceIndexResponse Prelude.Text
+describePlaceIndexResponse_indexArn = Lens.lens (\DescribePlaceIndexResponse' {indexArn} -> indexArn) (\s@DescribePlaceIndexResponse' {} a -> s {indexArn = a} :: DescribePlaceIndexResponse)
+
+-- | The name of the place index resource being described.
+describePlaceIndexResponse_indexName :: Lens.Lens' DescribePlaceIndexResponse Prelude.Text
+describePlaceIndexResponse_indexName = Lens.lens (\DescribePlaceIndexResponse' {indexName} -> indexName) (\s@DescribePlaceIndexResponse' {} a -> s {indexName = a} :: DescribePlaceIndexResponse)
+
+-- | The timestamp for when the place index resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+describePlaceIndexResponse_updateTime :: Lens.Lens' DescribePlaceIndexResponse Prelude.UTCTime
+describePlaceIndexResponse_updateTime = Lens.lens (\DescribePlaceIndexResponse' {updateTime} -> updateTime) (\s@DescribePlaceIndexResponse' {} a -> s {updateTime = a} :: DescribePlaceIndexResponse) Prelude.. Data._Time
+
+instance Prelude.NFData DescribePlaceIndexResponse where
+  rnf DescribePlaceIndexResponse' {..} =
+    Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf dataSourceConfiguration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf indexArn
+      `Prelude.seq` Prelude.rnf indexName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/DescribeRouteCalculator.hs b/gen/Amazonka/Location/DescribeRouteCalculator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DescribeRouteCalculator.hs
@@ -0,0 +1,331 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DescribeRouteCalculator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the route calculator resource details.
+module Amazonka.Location.DescribeRouteCalculator
+  ( -- * Creating a Request
+    DescribeRouteCalculator (..),
+    newDescribeRouteCalculator,
+
+    -- * Request Lenses
+    describeRouteCalculator_calculatorName,
+
+    -- * Destructuring the Response
+    DescribeRouteCalculatorResponse (..),
+    newDescribeRouteCalculatorResponse,
+
+    -- * Response Lenses
+    describeRouteCalculatorResponse_pricingPlan,
+    describeRouteCalculatorResponse_tags,
+    describeRouteCalculatorResponse_httpStatus,
+    describeRouteCalculatorResponse_calculatorArn,
+    describeRouteCalculatorResponse_calculatorName,
+    describeRouteCalculatorResponse_createTime,
+    describeRouteCalculatorResponse_dataSource,
+    describeRouteCalculatorResponse_description,
+    describeRouteCalculatorResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRouteCalculator' smart constructor.
+data DescribeRouteCalculator = DescribeRouteCalculator'
+  { -- | The name of the route calculator resource.
+    calculatorName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRouteCalculator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'calculatorName', 'describeRouteCalculator_calculatorName' - The name of the route calculator resource.
+newDescribeRouteCalculator ::
+  -- | 'calculatorName'
+  Prelude.Text ->
+  DescribeRouteCalculator
+newDescribeRouteCalculator pCalculatorName_ =
+  DescribeRouteCalculator'
+    { calculatorName =
+        pCalculatorName_
+    }
+
+-- | The name of the route calculator resource.
+describeRouteCalculator_calculatorName :: Lens.Lens' DescribeRouteCalculator Prelude.Text
+describeRouteCalculator_calculatorName = Lens.lens (\DescribeRouteCalculator' {calculatorName} -> calculatorName) (\s@DescribeRouteCalculator' {} a -> s {calculatorName = a} :: DescribeRouteCalculator)
+
+instance Core.AWSRequest DescribeRouteCalculator where
+  type
+    AWSResponse DescribeRouteCalculator =
+      DescribeRouteCalculatorResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeRouteCalculatorResponse'
+            Prelude.<$> (x Data..?> "PricingPlan")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CalculatorArn")
+            Prelude.<*> (x Data..:> "CalculatorName")
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "DataSource")
+            Prelude.<*> (x Data..:> "Description")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable DescribeRouteCalculator where
+  hashWithSalt _salt DescribeRouteCalculator' {..} =
+    _salt `Prelude.hashWithSalt` calculatorName
+
+instance Prelude.NFData DescribeRouteCalculator where
+  rnf DescribeRouteCalculator' {..} =
+    Prelude.rnf calculatorName
+
+instance Data.ToHeaders DescribeRouteCalculator where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeRouteCalculator where
+  toPath DescribeRouteCalculator' {..} =
+    Prelude.mconcat
+      ["/routes/v0/calculators/", Data.toBS calculatorName]
+
+instance Data.ToQuery DescribeRouteCalculator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeRouteCalculatorResponse' smart constructor.
+data DescribeRouteCalculatorResponse = DescribeRouteCalculatorResponse'
+  { -- | Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | Tags associated with route calculator resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) for the Route calculator resource. Use
+    -- the ARN when you specify a resource across AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:route-calculator\/ExampleCalculator@
+    calculatorArn :: Prelude.Text,
+    -- | The name of the route calculator resource being described.
+    calculatorName :: Prelude.Text,
+    -- | The timestamp when the route calculator resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    --
+    -- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+    createTime :: Data.ISO8601,
+    -- | The data provider of traffic and road network data. Indicates one of the
+    -- available providers:
+    --
+    -- -   @Esri@
+    --
+    -- -   @Here@
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The optional description of the route calculator resource.
+    description :: Prelude.Text,
+    -- | The timestamp when the route calculator resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    --
+    -- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRouteCalculatorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pricingPlan', 'describeRouteCalculatorResponse_pricingPlan' - Always returns @RequestBasedUsage@.
+--
+-- 'tags', 'describeRouteCalculatorResponse_tags' - Tags associated with route calculator resource.
+--
+-- 'httpStatus', 'describeRouteCalculatorResponse_httpStatus' - The response's http status code.
+--
+-- 'calculatorArn', 'describeRouteCalculatorResponse_calculatorArn' - The Amazon Resource Name (ARN) for the Route calculator resource. Use
+-- the ARN when you specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:route-calculator\/ExampleCalculator@
+--
+-- 'calculatorName', 'describeRouteCalculatorResponse_calculatorName' - The name of the route calculator resource being described.
+--
+-- 'createTime', 'describeRouteCalculatorResponse_createTime' - The timestamp when the route calculator resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+--
+-- 'dataSource', 'describeRouteCalculatorResponse_dataSource' - The data provider of traffic and road network data. Indicates one of the
+-- available providers:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'description', 'describeRouteCalculatorResponse_description' - The optional description of the route calculator resource.
+--
+-- 'updateTime', 'describeRouteCalculatorResponse_updateTime' - The timestamp when the route calculator resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+newDescribeRouteCalculatorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'calculatorArn'
+  Prelude.Text ->
+  -- | 'calculatorName'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  DescribeRouteCalculatorResponse
+newDescribeRouteCalculatorResponse
+  pHttpStatus_
+  pCalculatorArn_
+  pCalculatorName_
+  pCreateTime_
+  pDataSource_
+  pDescription_
+  pUpdateTime_ =
+    DescribeRouteCalculatorResponse'
+      { pricingPlan =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        calculatorArn = pCalculatorArn_,
+        calculatorName = pCalculatorName_,
+        createTime =
+          Data._Time Lens.# pCreateTime_,
+        dataSource = pDataSource_,
+        description = pDescription_,
+        updateTime =
+          Data._Time Lens.# pUpdateTime_
+      }
+
+-- | Always returns @RequestBasedUsage@.
+describeRouteCalculatorResponse_pricingPlan :: Lens.Lens' DescribeRouteCalculatorResponse (Prelude.Maybe PricingPlan)
+describeRouteCalculatorResponse_pricingPlan = Lens.lens (\DescribeRouteCalculatorResponse' {pricingPlan} -> pricingPlan) (\s@DescribeRouteCalculatorResponse' {} a -> s {pricingPlan = a} :: DescribeRouteCalculatorResponse)
+
+-- | Tags associated with route calculator resource.
+describeRouteCalculatorResponse_tags :: Lens.Lens' DescribeRouteCalculatorResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeRouteCalculatorResponse_tags = Lens.lens (\DescribeRouteCalculatorResponse' {tags} -> tags) (\s@DescribeRouteCalculatorResponse' {} a -> s {tags = a} :: DescribeRouteCalculatorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeRouteCalculatorResponse_httpStatus :: Lens.Lens' DescribeRouteCalculatorResponse Prelude.Int
+describeRouteCalculatorResponse_httpStatus = Lens.lens (\DescribeRouteCalculatorResponse' {httpStatus} -> httpStatus) (\s@DescribeRouteCalculatorResponse' {} a -> s {httpStatus = a} :: DescribeRouteCalculatorResponse)
+
+-- | The Amazon Resource Name (ARN) for the Route calculator resource. Use
+-- the ARN when you specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:route-calculator\/ExampleCalculator@
+describeRouteCalculatorResponse_calculatorArn :: Lens.Lens' DescribeRouteCalculatorResponse Prelude.Text
+describeRouteCalculatorResponse_calculatorArn = Lens.lens (\DescribeRouteCalculatorResponse' {calculatorArn} -> calculatorArn) (\s@DescribeRouteCalculatorResponse' {} a -> s {calculatorArn = a} :: DescribeRouteCalculatorResponse)
+
+-- | The name of the route calculator resource being described.
+describeRouteCalculatorResponse_calculatorName :: Lens.Lens' DescribeRouteCalculatorResponse Prelude.Text
+describeRouteCalculatorResponse_calculatorName = Lens.lens (\DescribeRouteCalculatorResponse' {calculatorName} -> calculatorName) (\s@DescribeRouteCalculatorResponse' {} a -> s {calculatorName = a} :: DescribeRouteCalculatorResponse)
+
+-- | The timestamp when the route calculator resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+describeRouteCalculatorResponse_createTime :: Lens.Lens' DescribeRouteCalculatorResponse Prelude.UTCTime
+describeRouteCalculatorResponse_createTime = Lens.lens (\DescribeRouteCalculatorResponse' {createTime} -> createTime) (\s@DescribeRouteCalculatorResponse' {} a -> s {createTime = a} :: DescribeRouteCalculatorResponse) Prelude.. Data._Time
+
+-- | The data provider of traffic and road network data. Indicates one of the
+-- available providers:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+describeRouteCalculatorResponse_dataSource :: Lens.Lens' DescribeRouteCalculatorResponse Prelude.Text
+describeRouteCalculatorResponse_dataSource = Lens.lens (\DescribeRouteCalculatorResponse' {dataSource} -> dataSource) (\s@DescribeRouteCalculatorResponse' {} a -> s {dataSource = a} :: DescribeRouteCalculatorResponse)
+
+-- | The optional description of the route calculator resource.
+describeRouteCalculatorResponse_description :: Lens.Lens' DescribeRouteCalculatorResponse Prelude.Text
+describeRouteCalculatorResponse_description = Lens.lens (\DescribeRouteCalculatorResponse' {description} -> description) (\s@DescribeRouteCalculatorResponse' {} a -> s {description = a} :: DescribeRouteCalculatorResponse)
+
+-- | The timestamp when the route calculator resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+describeRouteCalculatorResponse_updateTime :: Lens.Lens' DescribeRouteCalculatorResponse Prelude.UTCTime
+describeRouteCalculatorResponse_updateTime = Lens.lens (\DescribeRouteCalculatorResponse' {updateTime} -> updateTime) (\s@DescribeRouteCalculatorResponse' {} a -> s {updateTime = a} :: DescribeRouteCalculatorResponse) Prelude.. Data._Time
+
+instance
+  Prelude.NFData
+    DescribeRouteCalculatorResponse
+  where
+  rnf DescribeRouteCalculatorResponse' {..} =
+    Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf calculatorArn
+      `Prelude.seq` Prelude.rnf calculatorName
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/DescribeTracker.hs b/gen/Amazonka/Location/DescribeTracker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DescribeTracker.hs
@@ -0,0 +1,313 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DescribeTracker
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the tracker resource details.
+module Amazonka.Location.DescribeTracker
+  ( -- * Creating a Request
+    DescribeTracker (..),
+    newDescribeTracker,
+
+    -- * Request Lenses
+    describeTracker_trackerName,
+
+    -- * Destructuring the Response
+    DescribeTrackerResponse (..),
+    newDescribeTrackerResponse,
+
+    -- * Response Lenses
+    describeTrackerResponse_kmsKeyId,
+    describeTrackerResponse_positionFiltering,
+    describeTrackerResponse_pricingPlan,
+    describeTrackerResponse_pricingPlanDataSource,
+    describeTrackerResponse_tags,
+    describeTrackerResponse_httpStatus,
+    describeTrackerResponse_createTime,
+    describeTrackerResponse_description,
+    describeTrackerResponse_trackerArn,
+    describeTrackerResponse_trackerName,
+    describeTrackerResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTracker' smart constructor.
+data DescribeTracker = DescribeTracker'
+  { -- | The name of the tracker resource.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTracker' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trackerName', 'describeTracker_trackerName' - The name of the tracker resource.
+newDescribeTracker ::
+  -- | 'trackerName'
+  Prelude.Text ->
+  DescribeTracker
+newDescribeTracker pTrackerName_ =
+  DescribeTracker' {trackerName = pTrackerName_}
+
+-- | The name of the tracker resource.
+describeTracker_trackerName :: Lens.Lens' DescribeTracker Prelude.Text
+describeTracker_trackerName = Lens.lens (\DescribeTracker' {trackerName} -> trackerName) (\s@DescribeTracker' {} a -> s {trackerName = a} :: DescribeTracker)
+
+instance Core.AWSRequest DescribeTracker where
+  type
+    AWSResponse DescribeTracker =
+      DescribeTrackerResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeTrackerResponse'
+            Prelude.<$> (x Data..?> "KmsKeyId")
+            Prelude.<*> (x Data..?> "PositionFiltering")
+            Prelude.<*> (x Data..?> "PricingPlan")
+            Prelude.<*> (x Data..?> "PricingPlanDataSource")
+            Prelude.<*> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "Description")
+            Prelude.<*> (x Data..:> "TrackerArn")
+            Prelude.<*> (x Data..:> "TrackerName")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable DescribeTracker where
+  hashWithSalt _salt DescribeTracker' {..} =
+    _salt `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData DescribeTracker where
+  rnf DescribeTracker' {..} = Prelude.rnf trackerName
+
+instance Data.ToHeaders DescribeTracker where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeTracker where
+  toPath DescribeTracker' {..} =
+    Prelude.mconcat
+      ["/tracking/v0/trackers/", Data.toBS trackerName]
+
+instance Data.ToQuery DescribeTracker where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeTrackerResponse' smart constructor.
+data DescribeTrackerResponse = DescribeTrackerResponse'
+  { -- | A key identifier for an
+    -- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>
+    -- assigned to the Amazon Location resource.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The position filtering method of the tracker resource.
+    positionFiltering :: Prelude.Maybe PositionFiltering,
+    -- | Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | No longer used. Always returns an empty string.
+    pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
+    -- | The tags associated with the tracker resource.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The timestamp for when the tracker resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | The optional description for the tracker resource.
+    description :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the tracker resource. Used when you
+    -- need to specify a resource across all AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+    trackerArn :: Prelude.Text,
+    -- | The name of the tracker resource.
+    trackerName :: Prelude.Text,
+    -- | The timestamp for when the tracker resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrackerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyId', 'describeTrackerResponse_kmsKeyId' - A key identifier for an
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>
+-- assigned to the Amazon Location resource.
+--
+-- 'positionFiltering', 'describeTrackerResponse_positionFiltering' - The position filtering method of the tracker resource.
+--
+-- 'pricingPlan', 'describeTrackerResponse_pricingPlan' - Always returns @RequestBasedUsage@.
+--
+-- 'pricingPlanDataSource', 'describeTrackerResponse_pricingPlanDataSource' - No longer used. Always returns an empty string.
+--
+-- 'tags', 'describeTrackerResponse_tags' - The tags associated with the tracker resource.
+--
+-- 'httpStatus', 'describeTrackerResponse_httpStatus' - The response's http status code.
+--
+-- 'createTime', 'describeTrackerResponse_createTime' - The timestamp for when the tracker resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'description', 'describeTrackerResponse_description' - The optional description for the tracker resource.
+--
+-- 'trackerArn', 'describeTrackerResponse_trackerArn' - The Amazon Resource Name (ARN) for the tracker resource. Used when you
+-- need to specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+--
+-- 'trackerName', 'describeTrackerResponse_trackerName' - The name of the tracker resource.
+--
+-- 'updateTime', 'describeTrackerResponse_updateTime' - The timestamp for when the tracker resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newDescribeTrackerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'trackerArn'
+  Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  DescribeTrackerResponse
+newDescribeTrackerResponse
+  pHttpStatus_
+  pCreateTime_
+  pDescription_
+  pTrackerArn_
+  pTrackerName_
+  pUpdateTime_ =
+    DescribeTrackerResponse'
+      { kmsKeyId =
+          Prelude.Nothing,
+        positionFiltering = Prelude.Nothing,
+        pricingPlan = Prelude.Nothing,
+        pricingPlanDataSource = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        description = pDescription_,
+        trackerArn = pTrackerArn_,
+        trackerName = pTrackerName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | A key identifier for an
+-- <https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html AWS KMS customer managed key>
+-- assigned to the Amazon Location resource.
+describeTrackerResponse_kmsKeyId :: Lens.Lens' DescribeTrackerResponse (Prelude.Maybe Prelude.Text)
+describeTrackerResponse_kmsKeyId = Lens.lens (\DescribeTrackerResponse' {kmsKeyId} -> kmsKeyId) (\s@DescribeTrackerResponse' {} a -> s {kmsKeyId = a} :: DescribeTrackerResponse)
+
+-- | The position filtering method of the tracker resource.
+describeTrackerResponse_positionFiltering :: Lens.Lens' DescribeTrackerResponse (Prelude.Maybe PositionFiltering)
+describeTrackerResponse_positionFiltering = Lens.lens (\DescribeTrackerResponse' {positionFiltering} -> positionFiltering) (\s@DescribeTrackerResponse' {} a -> s {positionFiltering = a} :: DescribeTrackerResponse)
+
+-- | Always returns @RequestBasedUsage@.
+describeTrackerResponse_pricingPlan :: Lens.Lens' DescribeTrackerResponse (Prelude.Maybe PricingPlan)
+describeTrackerResponse_pricingPlan = Lens.lens (\DescribeTrackerResponse' {pricingPlan} -> pricingPlan) (\s@DescribeTrackerResponse' {} a -> s {pricingPlan = a} :: DescribeTrackerResponse)
+
+-- | No longer used. Always returns an empty string.
+describeTrackerResponse_pricingPlanDataSource :: Lens.Lens' DescribeTrackerResponse (Prelude.Maybe Prelude.Text)
+describeTrackerResponse_pricingPlanDataSource = Lens.lens (\DescribeTrackerResponse' {pricingPlanDataSource} -> pricingPlanDataSource) (\s@DescribeTrackerResponse' {} a -> s {pricingPlanDataSource = a} :: DescribeTrackerResponse)
+
+-- | The tags associated with the tracker resource.
+describeTrackerResponse_tags :: Lens.Lens' DescribeTrackerResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeTrackerResponse_tags = Lens.lens (\DescribeTrackerResponse' {tags} -> tags) (\s@DescribeTrackerResponse' {} a -> s {tags = a} :: DescribeTrackerResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTrackerResponse_httpStatus :: Lens.Lens' DescribeTrackerResponse Prelude.Int
+describeTrackerResponse_httpStatus = Lens.lens (\DescribeTrackerResponse' {httpStatus} -> httpStatus) (\s@DescribeTrackerResponse' {} a -> s {httpStatus = a} :: DescribeTrackerResponse)
+
+-- | The timestamp for when the tracker resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+describeTrackerResponse_createTime :: Lens.Lens' DescribeTrackerResponse Prelude.UTCTime
+describeTrackerResponse_createTime = Lens.lens (\DescribeTrackerResponse' {createTime} -> createTime) (\s@DescribeTrackerResponse' {} a -> s {createTime = a} :: DescribeTrackerResponse) Prelude.. Data._Time
+
+-- | The optional description for the tracker resource.
+describeTrackerResponse_description :: Lens.Lens' DescribeTrackerResponse Prelude.Text
+describeTrackerResponse_description = Lens.lens (\DescribeTrackerResponse' {description} -> description) (\s@DescribeTrackerResponse' {} a -> s {description = a} :: DescribeTrackerResponse)
+
+-- | The Amazon Resource Name (ARN) for the tracker resource. Used when you
+-- need to specify a resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+describeTrackerResponse_trackerArn :: Lens.Lens' DescribeTrackerResponse Prelude.Text
+describeTrackerResponse_trackerArn = Lens.lens (\DescribeTrackerResponse' {trackerArn} -> trackerArn) (\s@DescribeTrackerResponse' {} a -> s {trackerArn = a} :: DescribeTrackerResponse)
+
+-- | The name of the tracker resource.
+describeTrackerResponse_trackerName :: Lens.Lens' DescribeTrackerResponse Prelude.Text
+describeTrackerResponse_trackerName = Lens.lens (\DescribeTrackerResponse' {trackerName} -> trackerName) (\s@DescribeTrackerResponse' {} a -> s {trackerName = a} :: DescribeTrackerResponse)
+
+-- | The timestamp for when the tracker resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+describeTrackerResponse_updateTime :: Lens.Lens' DescribeTrackerResponse Prelude.UTCTime
+describeTrackerResponse_updateTime = Lens.lens (\DescribeTrackerResponse' {updateTime} -> updateTime) (\s@DescribeTrackerResponse' {} a -> s {updateTime = a} :: DescribeTrackerResponse) Prelude.. Data._Time
+
+instance Prelude.NFData DescribeTrackerResponse where
+  rnf DescribeTrackerResponse' {..} =
+    Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf positionFiltering
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf pricingPlanDataSource
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf trackerArn
+      `Prelude.seq` Prelude.rnf trackerName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/DisassociateTrackerConsumer.hs b/gen/Amazonka/Location/DisassociateTrackerConsumer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/DisassociateTrackerConsumer.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.DisassociateTrackerConsumer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the association between a tracker resource and a geofence
+-- collection.
+--
+-- Once you unlink a tracker resource from a geofence collection, the
+-- tracker positions will no longer be automatically evaluated against
+-- geofences.
+module Amazonka.Location.DisassociateTrackerConsumer
+  ( -- * Creating a Request
+    DisassociateTrackerConsumer (..),
+    newDisassociateTrackerConsumer,
+
+    -- * Request Lenses
+    disassociateTrackerConsumer_consumerArn,
+    disassociateTrackerConsumer_trackerName,
+
+    -- * Destructuring the Response
+    DisassociateTrackerConsumerResponse (..),
+    newDisassociateTrackerConsumerResponse,
+
+    -- * Response Lenses
+    disassociateTrackerConsumerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateTrackerConsumer' smart constructor.
+data DisassociateTrackerConsumer = DisassociateTrackerConsumer'
+  { -- | The Amazon Resource Name (ARN) for the geofence collection to be
+    -- disassociated from the tracker resource. Used when you need to specify a
+    -- resource across all AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollectionConsumer@
+    consumerArn :: Prelude.Text,
+    -- | The name of the tracker resource to be dissociated from the consumer.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTrackerConsumer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'consumerArn', 'disassociateTrackerConsumer_consumerArn' - The Amazon Resource Name (ARN) for the geofence collection to be
+-- disassociated from the tracker resource. Used when you need to specify a
+-- resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollectionConsumer@
+--
+-- 'trackerName', 'disassociateTrackerConsumer_trackerName' - The name of the tracker resource to be dissociated from the consumer.
+newDisassociateTrackerConsumer ::
+  -- | 'consumerArn'
+  Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  DisassociateTrackerConsumer
+newDisassociateTrackerConsumer
+  pConsumerArn_
+  pTrackerName_ =
+    DisassociateTrackerConsumer'
+      { consumerArn =
+          pConsumerArn_,
+        trackerName = pTrackerName_
+      }
+
+-- | The Amazon Resource Name (ARN) for the geofence collection to be
+-- disassociated from the tracker resource. Used when you need to specify a
+-- resource across all AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollectionConsumer@
+disassociateTrackerConsumer_consumerArn :: Lens.Lens' DisassociateTrackerConsumer Prelude.Text
+disassociateTrackerConsumer_consumerArn = Lens.lens (\DisassociateTrackerConsumer' {consumerArn} -> consumerArn) (\s@DisassociateTrackerConsumer' {} a -> s {consumerArn = a} :: DisassociateTrackerConsumer)
+
+-- | The name of the tracker resource to be dissociated from the consumer.
+disassociateTrackerConsumer_trackerName :: Lens.Lens' DisassociateTrackerConsumer Prelude.Text
+disassociateTrackerConsumer_trackerName = Lens.lens (\DisassociateTrackerConsumer' {trackerName} -> trackerName) (\s@DisassociateTrackerConsumer' {} a -> s {trackerName = a} :: DisassociateTrackerConsumer)
+
+instance Core.AWSRequest DisassociateTrackerConsumer where
+  type
+    AWSResponse DisassociateTrackerConsumer =
+      DisassociateTrackerConsumerResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateTrackerConsumerResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateTrackerConsumer where
+  hashWithSalt _salt DisassociateTrackerConsumer' {..} =
+    _salt
+      `Prelude.hashWithSalt` consumerArn
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData DisassociateTrackerConsumer where
+  rnf DisassociateTrackerConsumer' {..} =
+    Prelude.rnf consumerArn
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders DisassociateTrackerConsumer where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DisassociateTrackerConsumer where
+  toPath DisassociateTrackerConsumer' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/consumers/",
+        Data.toBS consumerArn
+      ]
+
+instance Data.ToQuery DisassociateTrackerConsumer where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateTrackerConsumerResponse' smart constructor.
+data DisassociateTrackerConsumerResponse = DisassociateTrackerConsumerResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTrackerConsumerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateTrackerConsumerResponse_httpStatus' - The response's http status code.
+newDisassociateTrackerConsumerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateTrackerConsumerResponse
+newDisassociateTrackerConsumerResponse pHttpStatus_ =
+  DisassociateTrackerConsumerResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateTrackerConsumerResponse_httpStatus :: Lens.Lens' DisassociateTrackerConsumerResponse Prelude.Int
+disassociateTrackerConsumerResponse_httpStatus = Lens.lens (\DisassociateTrackerConsumerResponse' {httpStatus} -> httpStatus) (\s@DisassociateTrackerConsumerResponse' {} a -> s {httpStatus = a} :: DisassociateTrackerConsumerResponse)
+
+instance
+  Prelude.NFData
+    DisassociateTrackerConsumerResponse
+  where
+  rnf DisassociateTrackerConsumerResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/GetDevicePosition.hs b/gen/Amazonka/Location/GetDevicePosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/GetDevicePosition.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.GetDevicePosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a device\'s most recent position according to its sample time.
+--
+-- Device positions are deleted after 30 days.
+module Amazonka.Location.GetDevicePosition
+  ( -- * Creating a Request
+    GetDevicePosition (..),
+    newGetDevicePosition,
+
+    -- * Request Lenses
+    getDevicePosition_deviceId,
+    getDevicePosition_trackerName,
+
+    -- * Destructuring the Response
+    GetDevicePositionResponse (..),
+    newGetDevicePositionResponse,
+
+    -- * Response Lenses
+    getDevicePositionResponse_accuracy,
+    getDevicePositionResponse_deviceId,
+    getDevicePositionResponse_positionProperties,
+    getDevicePositionResponse_httpStatus,
+    getDevicePositionResponse_position,
+    getDevicePositionResponse_receivedTime,
+    getDevicePositionResponse_sampleTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDevicePosition' smart constructor.
+data GetDevicePosition = GetDevicePosition'
+  { -- | The device whose position you want to retrieve.
+    deviceId :: Prelude.Text,
+    -- | The tracker resource receiving the position update.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDevicePosition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceId', 'getDevicePosition_deviceId' - The device whose position you want to retrieve.
+--
+-- 'trackerName', 'getDevicePosition_trackerName' - The tracker resource receiving the position update.
+newGetDevicePosition ::
+  -- | 'deviceId'
+  Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  GetDevicePosition
+newGetDevicePosition pDeviceId_ pTrackerName_ =
+  GetDevicePosition'
+    { deviceId = pDeviceId_,
+      trackerName = pTrackerName_
+    }
+
+-- | The device whose position you want to retrieve.
+getDevicePosition_deviceId :: Lens.Lens' GetDevicePosition Prelude.Text
+getDevicePosition_deviceId = Lens.lens (\GetDevicePosition' {deviceId} -> deviceId) (\s@GetDevicePosition' {} a -> s {deviceId = a} :: GetDevicePosition)
+
+-- | The tracker resource receiving the position update.
+getDevicePosition_trackerName :: Lens.Lens' GetDevicePosition Prelude.Text
+getDevicePosition_trackerName = Lens.lens (\GetDevicePosition' {trackerName} -> trackerName) (\s@GetDevicePosition' {} a -> s {trackerName = a} :: GetDevicePosition)
+
+instance Core.AWSRequest GetDevicePosition where
+  type
+    AWSResponse GetDevicePosition =
+      GetDevicePositionResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDevicePositionResponse'
+            Prelude.<$> (x Data..?> "Accuracy")
+            Prelude.<*> (x Data..?> "DeviceId")
+            Prelude.<*> ( x
+                            Data..?> "PositionProperties"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Position")
+            Prelude.<*> (x Data..:> "ReceivedTime")
+            Prelude.<*> (x Data..:> "SampleTime")
+      )
+
+instance Prelude.Hashable GetDevicePosition where
+  hashWithSalt _salt GetDevicePosition' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData GetDevicePosition where
+  rnf GetDevicePosition' {..} =
+    Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders GetDevicePosition where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetDevicePosition where
+  toPath GetDevicePosition' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/devices/",
+        Data.toBS deviceId,
+        "/positions/latest"
+      ]
+
+instance Data.ToQuery GetDevicePosition where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDevicePositionResponse' smart constructor.
+data GetDevicePositionResponse = GetDevicePositionResponse'
+  { -- | The accuracy of the device position.
+    accuracy :: Prelude.Maybe PositionalAccuracy,
+    -- | The device whose position you retrieved.
+    deviceId :: Prelude.Maybe Prelude.Text,
+    -- | The properties associated with the position.
+    positionProperties :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The last known device position.
+    position :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | The timestamp for when the tracker resource received the device position
+    -- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    receivedTime :: Data.ISO8601,
+    -- | The timestamp at which the device\'s position was determined. Uses
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    sampleTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDevicePositionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accuracy', 'getDevicePositionResponse_accuracy' - The accuracy of the device position.
+--
+-- 'deviceId', 'getDevicePositionResponse_deviceId' - The device whose position you retrieved.
+--
+-- 'positionProperties', 'getDevicePositionResponse_positionProperties' - The properties associated with the position.
+--
+-- 'httpStatus', 'getDevicePositionResponse_httpStatus' - The response's http status code.
+--
+-- 'position', 'getDevicePositionResponse_position' - The last known device position.
+--
+-- 'receivedTime', 'getDevicePositionResponse_receivedTime' - The timestamp for when the tracker resource received the device position
+-- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'sampleTime', 'getDevicePositionResponse_sampleTime' - The timestamp at which the device\'s position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newGetDevicePositionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'position'
+  Prelude.NonEmpty Prelude.Double ->
+  -- | 'receivedTime'
+  Prelude.UTCTime ->
+  -- | 'sampleTime'
+  Prelude.UTCTime ->
+  GetDevicePositionResponse
+newGetDevicePositionResponse
+  pHttpStatus_
+  pPosition_
+  pReceivedTime_
+  pSampleTime_ =
+    GetDevicePositionResponse'
+      { accuracy =
+          Prelude.Nothing,
+        deviceId = Prelude.Nothing,
+        positionProperties = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        position =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pPosition_,
+        receivedTime = Data._Time Lens.# pReceivedTime_,
+        sampleTime = Data._Time Lens.# pSampleTime_
+      }
+
+-- | The accuracy of the device position.
+getDevicePositionResponse_accuracy :: Lens.Lens' GetDevicePositionResponse (Prelude.Maybe PositionalAccuracy)
+getDevicePositionResponse_accuracy = Lens.lens (\GetDevicePositionResponse' {accuracy} -> accuracy) (\s@GetDevicePositionResponse' {} a -> s {accuracy = a} :: GetDevicePositionResponse)
+
+-- | The device whose position you retrieved.
+getDevicePositionResponse_deviceId :: Lens.Lens' GetDevicePositionResponse (Prelude.Maybe Prelude.Text)
+getDevicePositionResponse_deviceId = Lens.lens (\GetDevicePositionResponse' {deviceId} -> deviceId) (\s@GetDevicePositionResponse' {} a -> s {deviceId = a} :: GetDevicePositionResponse)
+
+-- | The properties associated with the position.
+getDevicePositionResponse_positionProperties :: Lens.Lens' GetDevicePositionResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getDevicePositionResponse_positionProperties = Lens.lens (\GetDevicePositionResponse' {positionProperties} -> positionProperties) (\s@GetDevicePositionResponse' {} a -> s {positionProperties = a} :: GetDevicePositionResponse) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The response's http status code.
+getDevicePositionResponse_httpStatus :: Lens.Lens' GetDevicePositionResponse Prelude.Int
+getDevicePositionResponse_httpStatus = Lens.lens (\GetDevicePositionResponse' {httpStatus} -> httpStatus) (\s@GetDevicePositionResponse' {} a -> s {httpStatus = a} :: GetDevicePositionResponse)
+
+-- | The last known device position.
+getDevicePositionResponse_position :: Lens.Lens' GetDevicePositionResponse (Prelude.NonEmpty Prelude.Double)
+getDevicePositionResponse_position = Lens.lens (\GetDevicePositionResponse' {position} -> position) (\s@GetDevicePositionResponse' {} a -> s {position = a} :: GetDevicePositionResponse) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The timestamp for when the tracker resource received the device position
+-- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+getDevicePositionResponse_receivedTime :: Lens.Lens' GetDevicePositionResponse Prelude.UTCTime
+getDevicePositionResponse_receivedTime = Lens.lens (\GetDevicePositionResponse' {receivedTime} -> receivedTime) (\s@GetDevicePositionResponse' {} a -> s {receivedTime = a} :: GetDevicePositionResponse) Prelude.. Data._Time
+
+-- | The timestamp at which the device\'s position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+getDevicePositionResponse_sampleTime :: Lens.Lens' GetDevicePositionResponse Prelude.UTCTime
+getDevicePositionResponse_sampleTime = Lens.lens (\GetDevicePositionResponse' {sampleTime} -> sampleTime) (\s@GetDevicePositionResponse' {} a -> s {sampleTime = a} :: GetDevicePositionResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetDevicePositionResponse where
+  rnf GetDevicePositionResponse' {..} =
+    Prelude.rnf accuracy
+      `Prelude.seq` Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf positionProperties
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf receivedTime
+      `Prelude.seq` Prelude.rnf sampleTime
diff --git a/gen/Amazonka/Location/GetDevicePositionHistory.hs b/gen/Amazonka/Location/GetDevicePositionHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/GetDevicePositionHistory.hs
@@ -0,0 +1,363 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.GetDevicePositionHistory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the device position history from a tracker resource within a
+-- specified range of time.
+--
+-- Device positions are deleted after 30 days.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.GetDevicePositionHistory
+  ( -- * Creating a Request
+    GetDevicePositionHistory (..),
+    newGetDevicePositionHistory,
+
+    -- * Request Lenses
+    getDevicePositionHistory_endTimeExclusive,
+    getDevicePositionHistory_maxResults,
+    getDevicePositionHistory_nextToken,
+    getDevicePositionHistory_startTimeInclusive,
+    getDevicePositionHistory_deviceId,
+    getDevicePositionHistory_trackerName,
+
+    -- * Destructuring the Response
+    GetDevicePositionHistoryResponse (..),
+    newGetDevicePositionHistoryResponse,
+
+    -- * Response Lenses
+    getDevicePositionHistoryResponse_nextToken,
+    getDevicePositionHistoryResponse_httpStatus,
+    getDevicePositionHistoryResponse_devicePositions,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDevicePositionHistory' smart constructor.
+data GetDevicePositionHistory = GetDevicePositionHistory'
+  { -- | Specify the end time for the position history in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@. By default, the value will be the
+    -- time that the request is made.
+    --
+    -- Requirement:
+    --
+    -- -   The time specified for @EndTimeExclusive@ must be after the time for
+    --     @StartTimeInclusive@.
+    endTimeExclusive :: Prelude.Maybe Data.ISO8601,
+    -- | An optional limit for the number of device positions returned in a
+    -- single call.
+    --
+    -- Default value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Specify the start time for the position history in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@. By default, the value will be 24
+    -- hours prior to the time that the request is made.
+    --
+    -- Requirement:
+    --
+    -- -   The time specified for @StartTimeInclusive@ must be before
+    --     @EndTimeExclusive@.
+    startTimeInclusive :: Prelude.Maybe Data.ISO8601,
+    -- | The device whose position history you want to retrieve.
+    deviceId :: Prelude.Text,
+    -- | The tracker resource receiving the request for the device position
+    -- history.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDevicePositionHistory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTimeExclusive', 'getDevicePositionHistory_endTimeExclusive' - Specify the end time for the position history in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@. By default, the value will be the
+-- time that the request is made.
+--
+-- Requirement:
+--
+-- -   The time specified for @EndTimeExclusive@ must be after the time for
+--     @StartTimeInclusive@.
+--
+-- 'maxResults', 'getDevicePositionHistory_maxResults' - An optional limit for the number of device positions returned in a
+-- single call.
+--
+-- Default value: @100@
+--
+-- 'nextToken', 'getDevicePositionHistory_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+--
+-- 'startTimeInclusive', 'getDevicePositionHistory_startTimeInclusive' - Specify the start time for the position history in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@. By default, the value will be 24
+-- hours prior to the time that the request is made.
+--
+-- Requirement:
+--
+-- -   The time specified for @StartTimeInclusive@ must be before
+--     @EndTimeExclusive@.
+--
+-- 'deviceId', 'getDevicePositionHistory_deviceId' - The device whose position history you want to retrieve.
+--
+-- 'trackerName', 'getDevicePositionHistory_trackerName' - The tracker resource receiving the request for the device position
+-- history.
+newGetDevicePositionHistory ::
+  -- | 'deviceId'
+  Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  GetDevicePositionHistory
+newGetDevicePositionHistory pDeviceId_ pTrackerName_ =
+  GetDevicePositionHistory'
+    { endTimeExclusive =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startTimeInclusive = Prelude.Nothing,
+      deviceId = pDeviceId_,
+      trackerName = pTrackerName_
+    }
+
+-- | Specify the end time for the position history in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@. By default, the value will be the
+-- time that the request is made.
+--
+-- Requirement:
+--
+-- -   The time specified for @EndTimeExclusive@ must be after the time for
+--     @StartTimeInclusive@.
+getDevicePositionHistory_endTimeExclusive :: Lens.Lens' GetDevicePositionHistory (Prelude.Maybe Prelude.UTCTime)
+getDevicePositionHistory_endTimeExclusive = Lens.lens (\GetDevicePositionHistory' {endTimeExclusive} -> endTimeExclusive) (\s@GetDevicePositionHistory' {} a -> s {endTimeExclusive = a} :: GetDevicePositionHistory) Prelude.. Lens.mapping Data._Time
+
+-- | An optional limit for the number of device positions returned in a
+-- single call.
+--
+-- Default value: @100@
+getDevicePositionHistory_maxResults :: Lens.Lens' GetDevicePositionHistory (Prelude.Maybe Prelude.Natural)
+getDevicePositionHistory_maxResults = Lens.lens (\GetDevicePositionHistory' {maxResults} -> maxResults) (\s@GetDevicePositionHistory' {} a -> s {maxResults = a} :: GetDevicePositionHistory)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+getDevicePositionHistory_nextToken :: Lens.Lens' GetDevicePositionHistory (Prelude.Maybe Prelude.Text)
+getDevicePositionHistory_nextToken = Lens.lens (\GetDevicePositionHistory' {nextToken} -> nextToken) (\s@GetDevicePositionHistory' {} a -> s {nextToken = a} :: GetDevicePositionHistory)
+
+-- | Specify the start time for the position history in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@. By default, the value will be 24
+-- hours prior to the time that the request is made.
+--
+-- Requirement:
+--
+-- -   The time specified for @StartTimeInclusive@ must be before
+--     @EndTimeExclusive@.
+getDevicePositionHistory_startTimeInclusive :: Lens.Lens' GetDevicePositionHistory (Prelude.Maybe Prelude.UTCTime)
+getDevicePositionHistory_startTimeInclusive = Lens.lens (\GetDevicePositionHistory' {startTimeInclusive} -> startTimeInclusive) (\s@GetDevicePositionHistory' {} a -> s {startTimeInclusive = a} :: GetDevicePositionHistory) Prelude.. Lens.mapping Data._Time
+
+-- | The device whose position history you want to retrieve.
+getDevicePositionHistory_deviceId :: Lens.Lens' GetDevicePositionHistory Prelude.Text
+getDevicePositionHistory_deviceId = Lens.lens (\GetDevicePositionHistory' {deviceId} -> deviceId) (\s@GetDevicePositionHistory' {} a -> s {deviceId = a} :: GetDevicePositionHistory)
+
+-- | The tracker resource receiving the request for the device position
+-- history.
+getDevicePositionHistory_trackerName :: Lens.Lens' GetDevicePositionHistory Prelude.Text
+getDevicePositionHistory_trackerName = Lens.lens (\GetDevicePositionHistory' {trackerName} -> trackerName) (\s@GetDevicePositionHistory' {} a -> s {trackerName = a} :: GetDevicePositionHistory)
+
+instance Core.AWSPager GetDevicePositionHistory where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getDevicePositionHistoryResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. getDevicePositionHistoryResponse_devicePositions
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getDevicePositionHistory_nextToken
+          Lens..~ rs
+          Lens.^? getDevicePositionHistoryResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetDevicePositionHistory where
+  type
+    AWSResponse GetDevicePositionHistory =
+      GetDevicePositionHistoryResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetDevicePositionHistoryResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> ( x
+                            Data..?> "DevicePositions"
+                            Core..!@ Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable GetDevicePositionHistory where
+  hashWithSalt _salt GetDevicePositionHistory' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTimeExclusive
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startTimeInclusive
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData GetDevicePositionHistory where
+  rnf GetDevicePositionHistory' {..} =
+    Prelude.rnf endTimeExclusive
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startTimeInclusive
+      `Prelude.seq` Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders GetDevicePositionHistory where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetDevicePositionHistory where
+  toJSON GetDevicePositionHistory' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EndTimeExclusive" Data..=)
+              Prelude.<$> endTimeExclusive,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("StartTimeInclusive" Data..=)
+              Prelude.<$> startTimeInclusive
+          ]
+      )
+
+instance Data.ToPath GetDevicePositionHistory where
+  toPath GetDevicePositionHistory' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/devices/",
+        Data.toBS deviceId,
+        "/list-positions"
+      ]
+
+instance Data.ToQuery GetDevicePositionHistory where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetDevicePositionHistoryResponse' smart constructor.
+data GetDevicePositionHistoryResponse = GetDevicePositionHistoryResponse'
+  { -- | A pagination token indicating there are additional pages available. You
+    -- can use the token in a following request to fetch the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains the position history details for the requested device.
+    devicePositions :: [DevicePosition]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDevicePositionHistoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getDevicePositionHistoryResponse_nextToken' - A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+--
+-- 'httpStatus', 'getDevicePositionHistoryResponse_httpStatus' - The response's http status code.
+--
+-- 'devicePositions', 'getDevicePositionHistoryResponse_devicePositions' - Contains the position history details for the requested device.
+newGetDevicePositionHistoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDevicePositionHistoryResponse
+newGetDevicePositionHistoryResponse pHttpStatus_ =
+  GetDevicePositionHistoryResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      devicePositions = Prelude.mempty
+    }
+
+-- | A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+getDevicePositionHistoryResponse_nextToken :: Lens.Lens' GetDevicePositionHistoryResponse (Prelude.Maybe Prelude.Text)
+getDevicePositionHistoryResponse_nextToken = Lens.lens (\GetDevicePositionHistoryResponse' {nextToken} -> nextToken) (\s@GetDevicePositionHistoryResponse' {} a -> s {nextToken = a} :: GetDevicePositionHistoryResponse)
+
+-- | The response's http status code.
+getDevicePositionHistoryResponse_httpStatus :: Lens.Lens' GetDevicePositionHistoryResponse Prelude.Int
+getDevicePositionHistoryResponse_httpStatus = Lens.lens (\GetDevicePositionHistoryResponse' {httpStatus} -> httpStatus) (\s@GetDevicePositionHistoryResponse' {} a -> s {httpStatus = a} :: GetDevicePositionHistoryResponse)
+
+-- | Contains the position history details for the requested device.
+getDevicePositionHistoryResponse_devicePositions :: Lens.Lens' GetDevicePositionHistoryResponse [DevicePosition]
+getDevicePositionHistoryResponse_devicePositions = Lens.lens (\GetDevicePositionHistoryResponse' {devicePositions} -> devicePositions) (\s@GetDevicePositionHistoryResponse' {} a -> s {devicePositions = a} :: GetDevicePositionHistoryResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    GetDevicePositionHistoryResponse
+  where
+  rnf GetDevicePositionHistoryResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf devicePositions
diff --git a/gen/Amazonka/Location/GetGeofence.hs b/gen/Amazonka/Location/GetGeofence.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/GetGeofence.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.GetGeofence
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the geofence details from a geofence collection.
+module Amazonka.Location.GetGeofence
+  ( -- * Creating a Request
+    GetGeofence (..),
+    newGetGeofence,
+
+    -- * Request Lenses
+    getGeofence_collectionName,
+    getGeofence_geofenceId,
+
+    -- * Destructuring the Response
+    GetGeofenceResponse (..),
+    newGetGeofenceResponse,
+
+    -- * Response Lenses
+    getGeofenceResponse_httpStatus,
+    getGeofenceResponse_createTime,
+    getGeofenceResponse_geofenceId,
+    getGeofenceResponse_geometry,
+    getGeofenceResponse_status,
+    getGeofenceResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetGeofence' smart constructor.
+data GetGeofence = GetGeofence'
+  { -- | The geofence collection storing the target geofence.
+    collectionName :: Prelude.Text,
+    -- | The geofence you\'re retrieving details for.
+    geofenceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGeofence' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionName', 'getGeofence_collectionName' - The geofence collection storing the target geofence.
+--
+-- 'geofenceId', 'getGeofence_geofenceId' - The geofence you\'re retrieving details for.
+newGetGeofence ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'geofenceId'
+  Prelude.Text ->
+  GetGeofence
+newGetGeofence pCollectionName_ pGeofenceId_ =
+  GetGeofence'
+    { collectionName = pCollectionName_,
+      geofenceId = pGeofenceId_
+    }
+
+-- | The geofence collection storing the target geofence.
+getGeofence_collectionName :: Lens.Lens' GetGeofence Prelude.Text
+getGeofence_collectionName = Lens.lens (\GetGeofence' {collectionName} -> collectionName) (\s@GetGeofence' {} a -> s {collectionName = a} :: GetGeofence)
+
+-- | The geofence you\'re retrieving details for.
+getGeofence_geofenceId :: Lens.Lens' GetGeofence Prelude.Text
+getGeofence_geofenceId = Lens.lens (\GetGeofence' {geofenceId} -> geofenceId) (\s@GetGeofence' {} a -> s {geofenceId = a} :: GetGeofence)
+
+instance Core.AWSRequest GetGeofence where
+  type AWSResponse GetGeofence = GetGeofenceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetGeofenceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "GeofenceId")
+            Prelude.<*> (x Data..:> "Geometry")
+            Prelude.<*> (x Data..:> "Status")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable GetGeofence where
+  hashWithSalt _salt GetGeofence' {..} =
+    _salt
+      `Prelude.hashWithSalt` collectionName
+      `Prelude.hashWithSalt` geofenceId
+
+instance Prelude.NFData GetGeofence where
+  rnf GetGeofence' {..} =
+    Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf geofenceId
+
+instance Data.ToHeaders GetGeofence where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetGeofence where
+  toPath GetGeofence' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName,
+        "/geofences/",
+        Data.toBS geofenceId
+      ]
+
+instance Data.ToQuery GetGeofence where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetGeofenceResponse' smart constructor.
+data GetGeofenceResponse = GetGeofenceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The timestamp for when the geofence collection was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    createTime :: Data.ISO8601,
+    -- | The geofence identifier.
+    geofenceId :: Prelude.Text,
+    -- | Contains the geofence geometry details describing a polygon or a circle.
+    geometry :: GeofenceGeometry,
+    -- | Identifies the state of the geofence. A geofence will hold one of the
+    -- following states:
+    --
+    -- -   @ACTIVE@ — The geofence has been indexed by the system.
+    --
+    -- -   @PENDING@ — The geofence is being processed by the system.
+    --
+    -- -   @FAILED@ — The geofence failed to be indexed by the system.
+    --
+    -- -   @DELETED@ — The geofence has been deleted from the system index.
+    --
+    -- -   @DELETING@ — The geofence is being deleted from the system index.
+    status :: Prelude.Text,
+    -- | The timestamp for when the geofence collection was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGeofenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getGeofenceResponse_httpStatus' - The response's http status code.
+--
+-- 'createTime', 'getGeofenceResponse_createTime' - The timestamp for when the geofence collection was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+--
+-- 'geofenceId', 'getGeofenceResponse_geofenceId' - The geofence identifier.
+--
+-- 'geometry', 'getGeofenceResponse_geometry' - Contains the geofence geometry details describing a polygon or a circle.
+--
+-- 'status', 'getGeofenceResponse_status' - Identifies the state of the geofence. A geofence will hold one of the
+-- following states:
+--
+-- -   @ACTIVE@ — The geofence has been indexed by the system.
+--
+-- -   @PENDING@ — The geofence is being processed by the system.
+--
+-- -   @FAILED@ — The geofence failed to be indexed by the system.
+--
+-- -   @DELETED@ — The geofence has been deleted from the system index.
+--
+-- -   @DELETING@ — The geofence is being deleted from the system index.
+--
+-- 'updateTime', 'getGeofenceResponse_updateTime' - The timestamp for when the geofence collection was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newGetGeofenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'geofenceId'
+  Prelude.Text ->
+  -- | 'geometry'
+  GeofenceGeometry ->
+  -- | 'status'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  GetGeofenceResponse
+newGetGeofenceResponse
+  pHttpStatus_
+  pCreateTime_
+  pGeofenceId_
+  pGeometry_
+  pStatus_
+  pUpdateTime_ =
+    GetGeofenceResponse'
+      { httpStatus = pHttpStatus_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        geofenceId = pGeofenceId_,
+        geometry = pGeometry_,
+        status = pStatus_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The response's http status code.
+getGeofenceResponse_httpStatus :: Lens.Lens' GetGeofenceResponse Prelude.Int
+getGeofenceResponse_httpStatus = Lens.lens (\GetGeofenceResponse' {httpStatus} -> httpStatus) (\s@GetGeofenceResponse' {} a -> s {httpStatus = a} :: GetGeofenceResponse)
+
+-- | The timestamp for when the geofence collection was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+getGeofenceResponse_createTime :: Lens.Lens' GetGeofenceResponse Prelude.UTCTime
+getGeofenceResponse_createTime = Lens.lens (\GetGeofenceResponse' {createTime} -> createTime) (\s@GetGeofenceResponse' {} a -> s {createTime = a} :: GetGeofenceResponse) Prelude.. Data._Time
+
+-- | The geofence identifier.
+getGeofenceResponse_geofenceId :: Lens.Lens' GetGeofenceResponse Prelude.Text
+getGeofenceResponse_geofenceId = Lens.lens (\GetGeofenceResponse' {geofenceId} -> geofenceId) (\s@GetGeofenceResponse' {} a -> s {geofenceId = a} :: GetGeofenceResponse)
+
+-- | Contains the geofence geometry details describing a polygon or a circle.
+getGeofenceResponse_geometry :: Lens.Lens' GetGeofenceResponse GeofenceGeometry
+getGeofenceResponse_geometry = Lens.lens (\GetGeofenceResponse' {geometry} -> geometry) (\s@GetGeofenceResponse' {} a -> s {geometry = a} :: GetGeofenceResponse)
+
+-- | Identifies the state of the geofence. A geofence will hold one of the
+-- following states:
+--
+-- -   @ACTIVE@ — The geofence has been indexed by the system.
+--
+-- -   @PENDING@ — The geofence is being processed by the system.
+--
+-- -   @FAILED@ — The geofence failed to be indexed by the system.
+--
+-- -   @DELETED@ — The geofence has been deleted from the system index.
+--
+-- -   @DELETING@ — The geofence is being deleted from the system index.
+getGeofenceResponse_status :: Lens.Lens' GetGeofenceResponse Prelude.Text
+getGeofenceResponse_status = Lens.lens (\GetGeofenceResponse' {status} -> status) (\s@GetGeofenceResponse' {} a -> s {status = a} :: GetGeofenceResponse)
+
+-- | The timestamp for when the geofence collection was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+getGeofenceResponse_updateTime :: Lens.Lens' GetGeofenceResponse Prelude.UTCTime
+getGeofenceResponse_updateTime = Lens.lens (\GetGeofenceResponse' {updateTime} -> updateTime) (\s@GetGeofenceResponse' {} a -> s {updateTime = a} :: GetGeofenceResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetGeofenceResponse where
+  rnf GetGeofenceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf geofenceId
+      `Prelude.seq` Prelude.rnf geometry
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/GetMapGlyphs.hs b/gen/Amazonka/Location/GetMapGlyphs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/GetMapGlyphs.hs
@@ -0,0 +1,356 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.GetMapGlyphs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves glyphs used to display labels on a map.
+module Amazonka.Location.GetMapGlyphs
+  ( -- * Creating a Request
+    GetMapGlyphs (..),
+    newGetMapGlyphs,
+
+    -- * Request Lenses
+    getMapGlyphs_fontStack,
+    getMapGlyphs_fontUnicodeRange,
+    getMapGlyphs_mapName,
+
+    -- * Destructuring the Response
+    GetMapGlyphsResponse (..),
+    newGetMapGlyphsResponse,
+
+    -- * Response Lenses
+    getMapGlyphsResponse_blob,
+    getMapGlyphsResponse_contentType,
+    getMapGlyphsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMapGlyphs' smart constructor.
+data GetMapGlyphs = GetMapGlyphs'
+  { -- | A comma-separated list of fonts to load glyphs from in order of
+    -- preference. For example, @Noto Sans Regular, Arial Unicode@.
+    --
+    -- Valid fonts stacks for
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>
+    -- styles:
+    --
+    -- -   VectorEsriDarkGrayCanvas – @Ubuntu Medium Italic@ | @Ubuntu Medium@
+    --     | @Ubuntu Italic@ | @Ubuntu Regular@ | @Ubuntu Bold@
+    --
+    -- -   VectorEsriLightGrayCanvas – @Ubuntu Italic@ | @Ubuntu Regular@ |
+    --     @Ubuntu Light@ | @Ubuntu Bold@
+    --
+    -- -   VectorEsriTopographic – @Noto Sans Italic@ | @Noto Sans Regular@ |
+    --     @Noto Sans Bold@ | @Noto Serif Regular@ |
+    --     @Roboto Condensed Light Italic@
+    --
+    -- -   VectorEsriStreets – @Arial Regular@ | @Arial Italic@ | @Arial Bold@
+    --
+    -- -   VectorEsriNavigation – @Arial Regular@ | @Arial Italic@ |
+    --     @Arial Bold@
+    --
+    -- Valid font stacks for
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>
+    -- styles:
+    --
+    -- -   VectorHereContrast – @Fira GO Regular@ | @Fira GO Bold@
+    --
+    -- -   VectorHereExplore, VectorHereExploreTruck,
+    --     HybridHereExploreSatellite – @Fira GO Italic@ | @Fira GO Map@ |
+    --     @Fira GO Map Bold@ | @Noto Sans CJK JP Bold@ |
+    --     @Noto Sans CJK JP Light@ | @Noto Sans CJK JP Regular@
+    --
+    -- Valid font stacks for
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html Open Data (Preview)>
+    -- styles:
+    --
+    -- -   VectorOpenDataStandardLight –
+    --     @Amazon Ember Regular,Noto Sans Regular@ |
+    --     @Amazon Ember Bold,Noto Sans Bold@ |
+    --     @Amazon Ember Medium,Noto Sans Medium@ |
+    --     @Amazon Ember Regular Italic,Noto Sans Italic@ |
+    --     @Amazon Ember Condensed RC Regular,Noto Sans Regular@ |
+    --     @Amazon Ember Condensed RC Bold,Noto Sans Bold@
+    --
+    -- The fonts used by @VectorOpenDataStandardLight@ are combined fonts that
+    -- use @Amazon Ember@ for most glyphs but @Noto Sans@ for glyphs
+    -- unsupported by @Amazon Ember@.
+    fontStack :: Prelude.Text,
+    -- | A Unicode range of characters to download glyphs for. Each response will
+    -- contain 256 characters. For example, 0–255 includes all characters from
+    -- range @U+0000@ to @00FF@. Must be aligned to multiples of 256.
+    fontUnicodeRange :: Prelude.Text,
+    -- | The map resource associated with the glyph ﬁle.
+    mapName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMapGlyphs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fontStack', 'getMapGlyphs_fontStack' - A comma-separated list of fonts to load glyphs from in order of
+-- preference. For example, @Noto Sans Regular, Arial Unicode@.
+--
+-- Valid fonts stacks for
+-- <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>
+-- styles:
+--
+-- -   VectorEsriDarkGrayCanvas – @Ubuntu Medium Italic@ | @Ubuntu Medium@
+--     | @Ubuntu Italic@ | @Ubuntu Regular@ | @Ubuntu Bold@
+--
+-- -   VectorEsriLightGrayCanvas – @Ubuntu Italic@ | @Ubuntu Regular@ |
+--     @Ubuntu Light@ | @Ubuntu Bold@
+--
+-- -   VectorEsriTopographic – @Noto Sans Italic@ | @Noto Sans Regular@ |
+--     @Noto Sans Bold@ | @Noto Serif Regular@ |
+--     @Roboto Condensed Light Italic@
+--
+-- -   VectorEsriStreets – @Arial Regular@ | @Arial Italic@ | @Arial Bold@
+--
+-- -   VectorEsriNavigation – @Arial Regular@ | @Arial Italic@ |
+--     @Arial Bold@
+--
+-- Valid font stacks for
+-- <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>
+-- styles:
+--
+-- -   VectorHereContrast – @Fira GO Regular@ | @Fira GO Bold@
+--
+-- -   VectorHereExplore, VectorHereExploreTruck,
+--     HybridHereExploreSatellite – @Fira GO Italic@ | @Fira GO Map@ |
+--     @Fira GO Map Bold@ | @Noto Sans CJK JP Bold@ |
+--     @Noto Sans CJK JP Light@ | @Noto Sans CJK JP Regular@
+--
+-- Valid font stacks for
+-- <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html Open Data (Preview)>
+-- styles:
+--
+-- -   VectorOpenDataStandardLight –
+--     @Amazon Ember Regular,Noto Sans Regular@ |
+--     @Amazon Ember Bold,Noto Sans Bold@ |
+--     @Amazon Ember Medium,Noto Sans Medium@ |
+--     @Amazon Ember Regular Italic,Noto Sans Italic@ |
+--     @Amazon Ember Condensed RC Regular,Noto Sans Regular@ |
+--     @Amazon Ember Condensed RC Bold,Noto Sans Bold@
+--
+-- The fonts used by @VectorOpenDataStandardLight@ are combined fonts that
+-- use @Amazon Ember@ for most glyphs but @Noto Sans@ for glyphs
+-- unsupported by @Amazon Ember@.
+--
+-- 'fontUnicodeRange', 'getMapGlyphs_fontUnicodeRange' - A Unicode range of characters to download glyphs for. Each response will
+-- contain 256 characters. For example, 0–255 includes all characters from
+-- range @U+0000@ to @00FF@. Must be aligned to multiples of 256.
+--
+-- 'mapName', 'getMapGlyphs_mapName' - The map resource associated with the glyph ﬁle.
+newGetMapGlyphs ::
+  -- | 'fontStack'
+  Prelude.Text ->
+  -- | 'fontUnicodeRange'
+  Prelude.Text ->
+  -- | 'mapName'
+  Prelude.Text ->
+  GetMapGlyphs
+newGetMapGlyphs
+  pFontStack_
+  pFontUnicodeRange_
+  pMapName_ =
+    GetMapGlyphs'
+      { fontStack = pFontStack_,
+        fontUnicodeRange = pFontUnicodeRange_,
+        mapName = pMapName_
+      }
+
+-- | A comma-separated list of fonts to load glyphs from in order of
+-- preference. For example, @Noto Sans Regular, Arial Unicode@.
+--
+-- Valid fonts stacks for
+-- <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri>
+-- styles:
+--
+-- -   VectorEsriDarkGrayCanvas – @Ubuntu Medium Italic@ | @Ubuntu Medium@
+--     | @Ubuntu Italic@ | @Ubuntu Regular@ | @Ubuntu Bold@
+--
+-- -   VectorEsriLightGrayCanvas – @Ubuntu Italic@ | @Ubuntu Regular@ |
+--     @Ubuntu Light@ | @Ubuntu Bold@
+--
+-- -   VectorEsriTopographic – @Noto Sans Italic@ | @Noto Sans Regular@ |
+--     @Noto Sans Bold@ | @Noto Serif Regular@ |
+--     @Roboto Condensed Light Italic@
+--
+-- -   VectorEsriStreets – @Arial Regular@ | @Arial Italic@ | @Arial Bold@
+--
+-- -   VectorEsriNavigation – @Arial Regular@ | @Arial Italic@ |
+--     @Arial Bold@
+--
+-- Valid font stacks for
+-- <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies>
+-- styles:
+--
+-- -   VectorHereContrast – @Fira GO Regular@ | @Fira GO Bold@
+--
+-- -   VectorHereExplore, VectorHereExploreTruck,
+--     HybridHereExploreSatellite – @Fira GO Italic@ | @Fira GO Map@ |
+--     @Fira GO Map Bold@ | @Noto Sans CJK JP Bold@ |
+--     @Noto Sans CJK JP Light@ | @Noto Sans CJK JP Regular@
+--
+-- Valid font stacks for
+-- <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html Open Data (Preview)>
+-- styles:
+--
+-- -   VectorOpenDataStandardLight –
+--     @Amazon Ember Regular,Noto Sans Regular@ |
+--     @Amazon Ember Bold,Noto Sans Bold@ |
+--     @Amazon Ember Medium,Noto Sans Medium@ |
+--     @Amazon Ember Regular Italic,Noto Sans Italic@ |
+--     @Amazon Ember Condensed RC Regular,Noto Sans Regular@ |
+--     @Amazon Ember Condensed RC Bold,Noto Sans Bold@
+--
+-- The fonts used by @VectorOpenDataStandardLight@ are combined fonts that
+-- use @Amazon Ember@ for most glyphs but @Noto Sans@ for glyphs
+-- unsupported by @Amazon Ember@.
+getMapGlyphs_fontStack :: Lens.Lens' GetMapGlyphs Prelude.Text
+getMapGlyphs_fontStack = Lens.lens (\GetMapGlyphs' {fontStack} -> fontStack) (\s@GetMapGlyphs' {} a -> s {fontStack = a} :: GetMapGlyphs)
+
+-- | A Unicode range of characters to download glyphs for. Each response will
+-- contain 256 characters. For example, 0–255 includes all characters from
+-- range @U+0000@ to @00FF@. Must be aligned to multiples of 256.
+getMapGlyphs_fontUnicodeRange :: Lens.Lens' GetMapGlyphs Prelude.Text
+getMapGlyphs_fontUnicodeRange = Lens.lens (\GetMapGlyphs' {fontUnicodeRange} -> fontUnicodeRange) (\s@GetMapGlyphs' {} a -> s {fontUnicodeRange = a} :: GetMapGlyphs)
+
+-- | The map resource associated with the glyph ﬁle.
+getMapGlyphs_mapName :: Lens.Lens' GetMapGlyphs Prelude.Text
+getMapGlyphs_mapName = Lens.lens (\GetMapGlyphs' {mapName} -> mapName) (\s@GetMapGlyphs' {} a -> s {mapName = a} :: GetMapGlyphs)
+
+instance Core.AWSRequest GetMapGlyphs where
+  type AWSResponse GetMapGlyphs = GetMapGlyphsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          GetMapGlyphsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (h Data..#? "Content-Type")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMapGlyphs where
+  hashWithSalt _salt GetMapGlyphs' {..} =
+    _salt
+      `Prelude.hashWithSalt` fontStack
+      `Prelude.hashWithSalt` fontUnicodeRange
+      `Prelude.hashWithSalt` mapName
+
+instance Prelude.NFData GetMapGlyphs where
+  rnf GetMapGlyphs' {..} =
+    Prelude.rnf fontStack
+      `Prelude.seq` Prelude.rnf fontUnicodeRange
+      `Prelude.seq` Prelude.rnf mapName
+
+instance Data.ToHeaders GetMapGlyphs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMapGlyphs where
+  toPath GetMapGlyphs' {..} =
+    Prelude.mconcat
+      [ "/maps/v0/maps/",
+        Data.toBS mapName,
+        "/glyphs/",
+        Data.toBS fontStack,
+        "/",
+        Data.toBS fontUnicodeRange
+      ]
+
+instance Data.ToQuery GetMapGlyphs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMapGlyphsResponse' smart constructor.
+data GetMapGlyphsResponse = GetMapGlyphsResponse'
+  { -- | The blob\'s content type.
+    blob :: Prelude.Maybe Prelude.ByteString,
+    -- | The map glyph content type. For example, @application\/octet-stream@.
+    contentType :: 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 'GetMapGlyphsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blob', 'getMapGlyphsResponse_blob' - The blob\'s content type.
+--
+-- 'contentType', 'getMapGlyphsResponse_contentType' - The map glyph content type. For example, @application\/octet-stream@.
+--
+-- 'httpStatus', 'getMapGlyphsResponse_httpStatus' - The response's http status code.
+newGetMapGlyphsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMapGlyphsResponse
+newGetMapGlyphsResponse pHttpStatus_ =
+  GetMapGlyphsResponse'
+    { blob = Prelude.Nothing,
+      contentType = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The blob\'s content type.
+getMapGlyphsResponse_blob :: Lens.Lens' GetMapGlyphsResponse (Prelude.Maybe Prelude.ByteString)
+getMapGlyphsResponse_blob = Lens.lens (\GetMapGlyphsResponse' {blob} -> blob) (\s@GetMapGlyphsResponse' {} a -> s {blob = a} :: GetMapGlyphsResponse)
+
+-- | The map glyph content type. For example, @application\/octet-stream@.
+getMapGlyphsResponse_contentType :: Lens.Lens' GetMapGlyphsResponse (Prelude.Maybe Prelude.Text)
+getMapGlyphsResponse_contentType = Lens.lens (\GetMapGlyphsResponse' {contentType} -> contentType) (\s@GetMapGlyphsResponse' {} a -> s {contentType = a} :: GetMapGlyphsResponse)
+
+-- | The response's http status code.
+getMapGlyphsResponse_httpStatus :: Lens.Lens' GetMapGlyphsResponse Prelude.Int
+getMapGlyphsResponse_httpStatus = Lens.lens (\GetMapGlyphsResponse' {httpStatus} -> httpStatus) (\s@GetMapGlyphsResponse' {} a -> s {httpStatus = a} :: GetMapGlyphsResponse)
+
+instance Prelude.NFData GetMapGlyphsResponse where
+  rnf GetMapGlyphsResponse' {..} =
+    Prelude.rnf blob
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/GetMapSprites.hs b/gen/Amazonka/Location/GetMapSprites.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/GetMapSprites.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.Location.GetMapSprites
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the sprite sheet corresponding to a map resource. The sprite
+-- sheet is a PNG image paired with a JSON document describing the offsets
+-- of individual icons that will be displayed on a rendered map.
+module Amazonka.Location.GetMapSprites
+  ( -- * Creating a Request
+    GetMapSprites (..),
+    newGetMapSprites,
+
+    -- * Request Lenses
+    getMapSprites_fileName,
+    getMapSprites_mapName,
+
+    -- * Destructuring the Response
+    GetMapSpritesResponse (..),
+    newGetMapSpritesResponse,
+
+    -- * Response Lenses
+    getMapSpritesResponse_blob,
+    getMapSpritesResponse_contentType,
+    getMapSpritesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMapSprites' smart constructor.
+data GetMapSprites = GetMapSprites'
+  { -- | The name of the sprite ﬁle. Use the following ﬁle names for the sprite
+    -- sheet:
+    --
+    -- -   @sprites.png@
+    --
+    -- -   @sprites\@2x.png@ for high pixel density displays
+    --
+    -- For the JSON document containing image offsets. Use the following ﬁle
+    -- names:
+    --
+    -- -   @sprites.json@
+    --
+    -- -   @sprites\@2x.json@ for high pixel density displays
+    fileName :: Prelude.Text,
+    -- | The map resource associated with the sprite ﬁle.
+    mapName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMapSprites' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileName', 'getMapSprites_fileName' - The name of the sprite ﬁle. Use the following ﬁle names for the sprite
+-- sheet:
+--
+-- -   @sprites.png@
+--
+-- -   @sprites\@2x.png@ for high pixel density displays
+--
+-- For the JSON document containing image offsets. Use the following ﬁle
+-- names:
+--
+-- -   @sprites.json@
+--
+-- -   @sprites\@2x.json@ for high pixel density displays
+--
+-- 'mapName', 'getMapSprites_mapName' - The map resource associated with the sprite ﬁle.
+newGetMapSprites ::
+  -- | 'fileName'
+  Prelude.Text ->
+  -- | 'mapName'
+  Prelude.Text ->
+  GetMapSprites
+newGetMapSprites pFileName_ pMapName_ =
+  GetMapSprites'
+    { fileName = pFileName_,
+      mapName = pMapName_
+    }
+
+-- | The name of the sprite ﬁle. Use the following ﬁle names for the sprite
+-- sheet:
+--
+-- -   @sprites.png@
+--
+-- -   @sprites\@2x.png@ for high pixel density displays
+--
+-- For the JSON document containing image offsets. Use the following ﬁle
+-- names:
+--
+-- -   @sprites.json@
+--
+-- -   @sprites\@2x.json@ for high pixel density displays
+getMapSprites_fileName :: Lens.Lens' GetMapSprites Prelude.Text
+getMapSprites_fileName = Lens.lens (\GetMapSprites' {fileName} -> fileName) (\s@GetMapSprites' {} a -> s {fileName = a} :: GetMapSprites)
+
+-- | The map resource associated with the sprite ﬁle.
+getMapSprites_mapName :: Lens.Lens' GetMapSprites Prelude.Text
+getMapSprites_mapName = Lens.lens (\GetMapSprites' {mapName} -> mapName) (\s@GetMapSprites' {} a -> s {mapName = a} :: GetMapSprites)
+
+instance Core.AWSRequest GetMapSprites where
+  type
+    AWSResponse GetMapSprites =
+      GetMapSpritesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          GetMapSpritesResponse'
+            Prelude.<$> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (h Data..#? "Content-Type")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMapSprites where
+  hashWithSalt _salt GetMapSprites' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileName
+      `Prelude.hashWithSalt` mapName
+
+instance Prelude.NFData GetMapSprites where
+  rnf GetMapSprites' {..} =
+    Prelude.rnf fileName
+      `Prelude.seq` Prelude.rnf mapName
+
+instance Data.ToHeaders GetMapSprites where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMapSprites where
+  toPath GetMapSprites' {..} =
+    Prelude.mconcat
+      [ "/maps/v0/maps/",
+        Data.toBS mapName,
+        "/sprites/",
+        Data.toBS fileName
+      ]
+
+instance Data.ToQuery GetMapSprites where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMapSpritesResponse' smart constructor.
+data GetMapSpritesResponse = GetMapSpritesResponse'
+  { -- | Contains the body of the sprite sheet or JSON offset ﬁle.
+    blob :: Prelude.Maybe Prelude.ByteString,
+    -- | The content type of the sprite sheet and offsets. For example, the
+    -- sprite sheet content type is @image\/png@, and the sprite offset JSON
+    -- document is @application\/json@.
+    contentType :: 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 'GetMapSpritesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blob', 'getMapSpritesResponse_blob' - Contains the body of the sprite sheet or JSON offset ﬁle.
+--
+-- 'contentType', 'getMapSpritesResponse_contentType' - The content type of the sprite sheet and offsets. For example, the
+-- sprite sheet content type is @image\/png@, and the sprite offset JSON
+-- document is @application\/json@.
+--
+-- 'httpStatus', 'getMapSpritesResponse_httpStatus' - The response's http status code.
+newGetMapSpritesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMapSpritesResponse
+newGetMapSpritesResponse pHttpStatus_ =
+  GetMapSpritesResponse'
+    { blob = Prelude.Nothing,
+      contentType = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains the body of the sprite sheet or JSON offset ﬁle.
+getMapSpritesResponse_blob :: Lens.Lens' GetMapSpritesResponse (Prelude.Maybe Prelude.ByteString)
+getMapSpritesResponse_blob = Lens.lens (\GetMapSpritesResponse' {blob} -> blob) (\s@GetMapSpritesResponse' {} a -> s {blob = a} :: GetMapSpritesResponse)
+
+-- | The content type of the sprite sheet and offsets. For example, the
+-- sprite sheet content type is @image\/png@, and the sprite offset JSON
+-- document is @application\/json@.
+getMapSpritesResponse_contentType :: Lens.Lens' GetMapSpritesResponse (Prelude.Maybe Prelude.Text)
+getMapSpritesResponse_contentType = Lens.lens (\GetMapSpritesResponse' {contentType} -> contentType) (\s@GetMapSpritesResponse' {} a -> s {contentType = a} :: GetMapSpritesResponse)
+
+-- | The response's http status code.
+getMapSpritesResponse_httpStatus :: Lens.Lens' GetMapSpritesResponse Prelude.Int
+getMapSpritesResponse_httpStatus = Lens.lens (\GetMapSpritesResponse' {httpStatus} -> httpStatus) (\s@GetMapSpritesResponse' {} a -> s {httpStatus = a} :: GetMapSpritesResponse)
+
+instance Prelude.NFData GetMapSpritesResponse where
+  rnf GetMapSpritesResponse' {..} =
+    Prelude.rnf blob
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/GetMapStyleDescriptor.hs b/gen/Amazonka/Location/GetMapStyleDescriptor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/GetMapStyleDescriptor.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.Location.GetMapStyleDescriptor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the map style descriptor from a map resource.
+--
+-- The style descriptor contains speciﬁcations on how features render on a
+-- map. For example, what data to display, what order to display the data
+-- in, and the style for the data. Style descriptors follow the Mapbox
+-- Style Specification.
+module Amazonka.Location.GetMapStyleDescriptor
+  ( -- * Creating a Request
+    GetMapStyleDescriptor (..),
+    newGetMapStyleDescriptor,
+
+    -- * Request Lenses
+    getMapStyleDescriptor_mapName,
+
+    -- * Destructuring the Response
+    GetMapStyleDescriptorResponse (..),
+    newGetMapStyleDescriptorResponse,
+
+    -- * Response Lenses
+    getMapStyleDescriptorResponse_blob,
+    getMapStyleDescriptorResponse_contentType,
+    getMapStyleDescriptorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMapStyleDescriptor' smart constructor.
+data GetMapStyleDescriptor = GetMapStyleDescriptor'
+  { -- | The map resource to retrieve the style descriptor from.
+    mapName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMapStyleDescriptor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mapName', 'getMapStyleDescriptor_mapName' - The map resource to retrieve the style descriptor from.
+newGetMapStyleDescriptor ::
+  -- | 'mapName'
+  Prelude.Text ->
+  GetMapStyleDescriptor
+newGetMapStyleDescriptor pMapName_ =
+  GetMapStyleDescriptor' {mapName = pMapName_}
+
+-- | The map resource to retrieve the style descriptor from.
+getMapStyleDescriptor_mapName :: Lens.Lens' GetMapStyleDescriptor Prelude.Text
+getMapStyleDescriptor_mapName = Lens.lens (\GetMapStyleDescriptor' {mapName} -> mapName) (\s@GetMapStyleDescriptor' {} a -> s {mapName = a} :: GetMapStyleDescriptor)
+
+instance Core.AWSRequest GetMapStyleDescriptor where
+  type
+    AWSResponse GetMapStyleDescriptor =
+      GetMapStyleDescriptorResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          GetMapStyleDescriptorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (h Data..#? "Content-Type")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMapStyleDescriptor where
+  hashWithSalt _salt GetMapStyleDescriptor' {..} =
+    _salt `Prelude.hashWithSalt` mapName
+
+instance Prelude.NFData GetMapStyleDescriptor where
+  rnf GetMapStyleDescriptor' {..} = Prelude.rnf mapName
+
+instance Data.ToHeaders GetMapStyleDescriptor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMapStyleDescriptor where
+  toPath GetMapStyleDescriptor' {..} =
+    Prelude.mconcat
+      [ "/maps/v0/maps/",
+        Data.toBS mapName,
+        "/style-descriptor"
+      ]
+
+instance Data.ToQuery GetMapStyleDescriptor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMapStyleDescriptorResponse' smart constructor.
+data GetMapStyleDescriptorResponse = GetMapStyleDescriptorResponse'
+  { -- | Contains the body of the style descriptor.
+    blob :: Prelude.Maybe Prelude.ByteString,
+    -- | The style descriptor\'s content type. For example, @application\/json@.
+    contentType :: 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 'GetMapStyleDescriptorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blob', 'getMapStyleDescriptorResponse_blob' - Contains the body of the style descriptor.
+--
+-- 'contentType', 'getMapStyleDescriptorResponse_contentType' - The style descriptor\'s content type. For example, @application\/json@.
+--
+-- 'httpStatus', 'getMapStyleDescriptorResponse_httpStatus' - The response's http status code.
+newGetMapStyleDescriptorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMapStyleDescriptorResponse
+newGetMapStyleDescriptorResponse pHttpStatus_ =
+  GetMapStyleDescriptorResponse'
+    { blob =
+        Prelude.Nothing,
+      contentType = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains the body of the style descriptor.
+getMapStyleDescriptorResponse_blob :: Lens.Lens' GetMapStyleDescriptorResponse (Prelude.Maybe Prelude.ByteString)
+getMapStyleDescriptorResponse_blob = Lens.lens (\GetMapStyleDescriptorResponse' {blob} -> blob) (\s@GetMapStyleDescriptorResponse' {} a -> s {blob = a} :: GetMapStyleDescriptorResponse)
+
+-- | The style descriptor\'s content type. For example, @application\/json@.
+getMapStyleDescriptorResponse_contentType :: Lens.Lens' GetMapStyleDescriptorResponse (Prelude.Maybe Prelude.Text)
+getMapStyleDescriptorResponse_contentType = Lens.lens (\GetMapStyleDescriptorResponse' {contentType} -> contentType) (\s@GetMapStyleDescriptorResponse' {} a -> s {contentType = a} :: GetMapStyleDescriptorResponse)
+
+-- | The response's http status code.
+getMapStyleDescriptorResponse_httpStatus :: Lens.Lens' GetMapStyleDescriptorResponse Prelude.Int
+getMapStyleDescriptorResponse_httpStatus = Lens.lens (\GetMapStyleDescriptorResponse' {httpStatus} -> httpStatus) (\s@GetMapStyleDescriptorResponse' {} a -> s {httpStatus = a} :: GetMapStyleDescriptorResponse)
+
+instance Prelude.NFData GetMapStyleDescriptorResponse where
+  rnf GetMapStyleDescriptorResponse' {..} =
+    Prelude.rnf blob
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/GetMapTile.hs b/gen/Amazonka/Location/GetMapTile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/GetMapTile.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.GetMapTile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a vector data tile from the map resource. Map tiles are used
+-- by clients to render a map. they\'re addressed using a grid arrangement
+-- with an X coordinate, Y coordinate, and Z (zoom) level.
+--
+-- The origin (0, 0) is the top left of the map. Increasing the zoom level
+-- by 1 doubles both the X and Y dimensions, so a tile containing data for
+-- the entire world at (0\/0\/0) will be split into 4 tiles at zoom 1
+-- (1\/0\/0, 1\/0\/1, 1\/1\/0, 1\/1\/1).
+module Amazonka.Location.GetMapTile
+  ( -- * Creating a Request
+    GetMapTile (..),
+    newGetMapTile,
+
+    -- * Request Lenses
+    getMapTile_mapName,
+    getMapTile_x,
+    getMapTile_y,
+    getMapTile_z,
+
+    -- * Destructuring the Response
+    GetMapTileResponse (..),
+    newGetMapTileResponse,
+
+    -- * Response Lenses
+    getMapTileResponse_blob,
+    getMapTileResponse_contentType,
+    getMapTileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMapTile' smart constructor.
+data GetMapTile = GetMapTile'
+  { -- | The map resource to retrieve the map tiles from.
+    mapName :: Prelude.Text,
+    -- | The X axis value for the map tile.
+    x :: Prelude.Text,
+    -- | The Y axis value for the map tile.
+    y :: Prelude.Text,
+    -- | The zoom value for the map tile.
+    z :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMapTile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'mapName', 'getMapTile_mapName' - The map resource to retrieve the map tiles from.
+--
+-- 'x', 'getMapTile_x' - The X axis value for the map tile.
+--
+-- 'y', 'getMapTile_y' - The Y axis value for the map tile.
+--
+-- 'z', 'getMapTile_z' - The zoom value for the map tile.
+newGetMapTile ::
+  -- | 'mapName'
+  Prelude.Text ->
+  -- | 'x'
+  Prelude.Text ->
+  -- | 'y'
+  Prelude.Text ->
+  -- | 'z'
+  Prelude.Text ->
+  GetMapTile
+newGetMapTile pMapName_ pX_ pY_ pZ_ =
+  GetMapTile'
+    { mapName = pMapName_,
+      x = pX_,
+      y = pY_,
+      z = pZ_
+    }
+
+-- | The map resource to retrieve the map tiles from.
+getMapTile_mapName :: Lens.Lens' GetMapTile Prelude.Text
+getMapTile_mapName = Lens.lens (\GetMapTile' {mapName} -> mapName) (\s@GetMapTile' {} a -> s {mapName = a} :: GetMapTile)
+
+-- | The X axis value for the map tile.
+getMapTile_x :: Lens.Lens' GetMapTile Prelude.Text
+getMapTile_x = Lens.lens (\GetMapTile' {x} -> x) (\s@GetMapTile' {} a -> s {x = a} :: GetMapTile)
+
+-- | The Y axis value for the map tile.
+getMapTile_y :: Lens.Lens' GetMapTile Prelude.Text
+getMapTile_y = Lens.lens (\GetMapTile' {y} -> y) (\s@GetMapTile' {} a -> s {y = a} :: GetMapTile)
+
+-- | The zoom value for the map tile.
+getMapTile_z :: Lens.Lens' GetMapTile Prelude.Text
+getMapTile_z = Lens.lens (\GetMapTile' {z} -> z) (\s@GetMapTile' {} a -> s {z = a} :: GetMapTile)
+
+instance Core.AWSRequest GetMapTile where
+  type AWSResponse GetMapTile = GetMapTileResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveBytes
+      ( \s h x ->
+          GetMapTileResponse'
+            Prelude.<$> (Prelude.pure (Prelude.Just (Prelude.coerce x)))
+            Prelude.<*> (h Data..#? "Content-Type")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetMapTile where
+  hashWithSalt _salt GetMapTile' {..} =
+    _salt
+      `Prelude.hashWithSalt` mapName
+      `Prelude.hashWithSalt` x
+      `Prelude.hashWithSalt` y
+      `Prelude.hashWithSalt` z
+
+instance Prelude.NFData GetMapTile where
+  rnf GetMapTile' {..} =
+    Prelude.rnf mapName
+      `Prelude.seq` Prelude.rnf x
+      `Prelude.seq` Prelude.rnf y
+      `Prelude.seq` Prelude.rnf z
+
+instance Data.ToHeaders GetMapTile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMapTile where
+  toPath GetMapTile' {..} =
+    Prelude.mconcat
+      [ "/maps/v0/maps/",
+        Data.toBS mapName,
+        "/tiles/",
+        Data.toBS z,
+        "/",
+        Data.toBS x,
+        "/",
+        Data.toBS y
+      ]
+
+instance Data.ToQuery GetMapTile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMapTileResponse' smart constructor.
+data GetMapTileResponse = GetMapTileResponse'
+  { -- | Contains Mapbox Vector Tile (MVT) data.
+    blob :: Prelude.Maybe Prelude.ByteString,
+    -- | The map tile\'s content type. For example,
+    -- @application\/vnd.mapbox-vector-tile@.
+    contentType :: 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 'GetMapTileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blob', 'getMapTileResponse_blob' - Contains Mapbox Vector Tile (MVT) data.
+--
+-- 'contentType', 'getMapTileResponse_contentType' - The map tile\'s content type. For example,
+-- @application\/vnd.mapbox-vector-tile@.
+--
+-- 'httpStatus', 'getMapTileResponse_httpStatus' - The response's http status code.
+newGetMapTileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMapTileResponse
+newGetMapTileResponse pHttpStatus_ =
+  GetMapTileResponse'
+    { blob = Prelude.Nothing,
+      contentType = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Contains Mapbox Vector Tile (MVT) data.
+getMapTileResponse_blob :: Lens.Lens' GetMapTileResponse (Prelude.Maybe Prelude.ByteString)
+getMapTileResponse_blob = Lens.lens (\GetMapTileResponse' {blob} -> blob) (\s@GetMapTileResponse' {} a -> s {blob = a} :: GetMapTileResponse)
+
+-- | The map tile\'s content type. For example,
+-- @application\/vnd.mapbox-vector-tile@.
+getMapTileResponse_contentType :: Lens.Lens' GetMapTileResponse (Prelude.Maybe Prelude.Text)
+getMapTileResponse_contentType = Lens.lens (\GetMapTileResponse' {contentType} -> contentType) (\s@GetMapTileResponse' {} a -> s {contentType = a} :: GetMapTileResponse)
+
+-- | The response's http status code.
+getMapTileResponse_httpStatus :: Lens.Lens' GetMapTileResponse Prelude.Int
+getMapTileResponse_httpStatus = Lens.lens (\GetMapTileResponse' {httpStatus} -> httpStatus) (\s@GetMapTileResponse' {} a -> s {httpStatus = a} :: GetMapTileResponse)
+
+instance Prelude.NFData GetMapTileResponse where
+  rnf GetMapTileResponse' {..} =
+    Prelude.rnf blob
+      `Prelude.seq` Prelude.rnf contentType
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/GetPlace.hs b/gen/Amazonka/Location/GetPlace.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/GetPlace.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.GetPlace
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Finds a place by its unique ID. A @PlaceId@ is returned by other search
+-- operations.
+--
+-- A PlaceId is valid only if all of the following are the same in the
+-- original search request and the call to @GetPlace@.
+--
+-- -   Customer AWS account
+--
+-- -   AWS Region
+--
+-- -   Data provider specified in the place index resource
+module Amazonka.Location.GetPlace
+  ( -- * Creating a Request
+    GetPlace (..),
+    newGetPlace,
+
+    -- * Request Lenses
+    getPlace_language,
+    getPlace_indexName,
+    getPlace_placeId,
+
+    -- * Destructuring the Response
+    GetPlaceResponse (..),
+    newGetPlaceResponse,
+
+    -- * Response Lenses
+    getPlaceResponse_httpStatus,
+    getPlaceResponse_place,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPlace' smart constructor.
+data GetPlace = GetPlace'
+  { -- | The preferred language used to return results. The value must be a valid
+    -- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+    -- @en@ for English.
+    --
+    -- This setting affects the languages used in the results, but not the
+    -- results themselves. If no language is specified, or not supported for a
+    -- particular result, the partner automatically chooses a language for the
+    -- result.
+    --
+    -- For an example, we\'ll use the Greek language. You search for a location
+    -- around Athens, Greece, with the @language@ parameter set to @en@. The
+    -- @city@ in the results will most likely be returned as @Athens@.
+    --
+    -- If you set the @language@ parameter to @el@, for Greek, then the @city@
+    -- in the results will more likely be returned as @Αθήνα@.
+    --
+    -- If the data provider does not have a value for Greek, the result will be
+    -- in a language that the provider does support.
+    language :: Prelude.Maybe Prelude.Text,
+    -- | The name of the place index resource that you want to use for the
+    -- search.
+    indexName :: Prelude.Text,
+    -- | The identifier of the place to find.
+    placeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPlace' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'language', 'getPlace_language' - The preferred language used to return results. The value must be a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- This setting affects the languages used in the results, but not the
+-- results themselves. If no language is specified, or not supported for a
+-- particular result, the partner automatically chooses a language for the
+-- result.
+--
+-- For an example, we\'ll use the Greek language. You search for a location
+-- around Athens, Greece, with the @language@ parameter set to @en@. The
+-- @city@ in the results will most likely be returned as @Athens@.
+--
+-- If you set the @language@ parameter to @el@, for Greek, then the @city@
+-- in the results will more likely be returned as @Αθήνα@.
+--
+-- If the data provider does not have a value for Greek, the result will be
+-- in a language that the provider does support.
+--
+-- 'indexName', 'getPlace_indexName' - The name of the place index resource that you want to use for the
+-- search.
+--
+-- 'placeId', 'getPlace_placeId' - The identifier of the place to find.
+newGetPlace ::
+  -- | 'indexName'
+  Prelude.Text ->
+  -- | 'placeId'
+  Prelude.Text ->
+  GetPlace
+newGetPlace pIndexName_ pPlaceId_ =
+  GetPlace'
+    { language = Prelude.Nothing,
+      indexName = pIndexName_,
+      placeId = pPlaceId_
+    }
+
+-- | The preferred language used to return results. The value must be a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- This setting affects the languages used in the results, but not the
+-- results themselves. If no language is specified, or not supported for a
+-- particular result, the partner automatically chooses a language for the
+-- result.
+--
+-- For an example, we\'ll use the Greek language. You search for a location
+-- around Athens, Greece, with the @language@ parameter set to @en@. The
+-- @city@ in the results will most likely be returned as @Athens@.
+--
+-- If you set the @language@ parameter to @el@, for Greek, then the @city@
+-- in the results will more likely be returned as @Αθήνα@.
+--
+-- If the data provider does not have a value for Greek, the result will be
+-- in a language that the provider does support.
+getPlace_language :: Lens.Lens' GetPlace (Prelude.Maybe Prelude.Text)
+getPlace_language = Lens.lens (\GetPlace' {language} -> language) (\s@GetPlace' {} a -> s {language = a} :: GetPlace)
+
+-- | The name of the place index resource that you want to use for the
+-- search.
+getPlace_indexName :: Lens.Lens' GetPlace Prelude.Text
+getPlace_indexName = Lens.lens (\GetPlace' {indexName} -> indexName) (\s@GetPlace' {} a -> s {indexName = a} :: GetPlace)
+
+-- | The identifier of the place to find.
+getPlace_placeId :: Lens.Lens' GetPlace Prelude.Text
+getPlace_placeId = Lens.lens (\GetPlace' {placeId} -> placeId) (\s@GetPlace' {} a -> s {placeId = a} :: GetPlace)
+
+instance Core.AWSRequest GetPlace where
+  type AWSResponse GetPlace = GetPlaceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetPlaceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "Place")
+      )
+
+instance Prelude.Hashable GetPlace where
+  hashWithSalt _salt GetPlace' {..} =
+    _salt
+      `Prelude.hashWithSalt` language
+      `Prelude.hashWithSalt` indexName
+      `Prelude.hashWithSalt` placeId
+
+instance Prelude.NFData GetPlace where
+  rnf GetPlace' {..} =
+    Prelude.rnf language
+      `Prelude.seq` Prelude.rnf indexName
+      `Prelude.seq` Prelude.rnf placeId
+
+instance Data.ToHeaders GetPlace where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetPlace where
+  toPath GetPlace' {..} =
+    Prelude.mconcat
+      [ "/places/v0/indexes/",
+        Data.toBS indexName,
+        "/places/",
+        Data.toBS placeId
+      ]
+
+instance Data.ToQuery GetPlace where
+  toQuery GetPlace' {..} =
+    Prelude.mconcat ["language" Data.=: language]
+
+-- | /See:/ 'newGetPlaceResponse' smart constructor.
+data GetPlaceResponse = GetPlaceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Details about the result, such as its address and position.
+    place :: Place
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPlaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getPlaceResponse_httpStatus' - The response's http status code.
+--
+-- 'place', 'getPlaceResponse_place' - Details about the result, such as its address and position.
+newGetPlaceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'place'
+  Place ->
+  GetPlaceResponse
+newGetPlaceResponse pHttpStatus_ pPlace_ =
+  GetPlaceResponse'
+    { httpStatus = pHttpStatus_,
+      place = pPlace_
+    }
+
+-- | The response's http status code.
+getPlaceResponse_httpStatus :: Lens.Lens' GetPlaceResponse Prelude.Int
+getPlaceResponse_httpStatus = Lens.lens (\GetPlaceResponse' {httpStatus} -> httpStatus) (\s@GetPlaceResponse' {} a -> s {httpStatus = a} :: GetPlaceResponse)
+
+-- | Details about the result, such as its address and position.
+getPlaceResponse_place :: Lens.Lens' GetPlaceResponse Place
+getPlaceResponse_place = Lens.lens (\GetPlaceResponse' {place} -> place) (\s@GetPlaceResponse' {} a -> s {place = a} :: GetPlaceResponse)
+
+instance Prelude.NFData GetPlaceResponse where
+  rnf GetPlaceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf place
diff --git a/gen/Amazonka/Location/Lens.hs b/gen/Amazonka/Location/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Lens.hs
@@ -0,0 +1,822 @@
+{-# 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.Location.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.Location.Lens
+  ( -- * Operations
+
+    -- ** AssociateTrackerConsumer
+    associateTrackerConsumer_consumerArn,
+    associateTrackerConsumer_trackerName,
+    associateTrackerConsumerResponse_httpStatus,
+
+    -- ** BatchDeleteDevicePositionHistory
+    batchDeleteDevicePositionHistory_deviceIds,
+    batchDeleteDevicePositionHistory_trackerName,
+    batchDeleteDevicePositionHistoryResponse_httpStatus,
+    batchDeleteDevicePositionHistoryResponse_errors,
+
+    -- ** BatchDeleteGeofence
+    batchDeleteGeofence_collectionName,
+    batchDeleteGeofence_geofenceIds,
+    batchDeleteGeofenceResponse_httpStatus,
+    batchDeleteGeofenceResponse_errors,
+
+    -- ** BatchEvaluateGeofences
+    batchEvaluateGeofences_collectionName,
+    batchEvaluateGeofences_devicePositionUpdates,
+    batchEvaluateGeofencesResponse_httpStatus,
+    batchEvaluateGeofencesResponse_errors,
+
+    -- ** BatchGetDevicePosition
+    batchGetDevicePosition_deviceIds,
+    batchGetDevicePosition_trackerName,
+    batchGetDevicePositionResponse_httpStatus,
+    batchGetDevicePositionResponse_devicePositions,
+    batchGetDevicePositionResponse_errors,
+
+    -- ** BatchPutGeofence
+    batchPutGeofence_collectionName,
+    batchPutGeofence_entries,
+    batchPutGeofenceResponse_httpStatus,
+    batchPutGeofenceResponse_errors,
+    batchPutGeofenceResponse_successes,
+
+    -- ** BatchUpdateDevicePosition
+    batchUpdateDevicePosition_trackerName,
+    batchUpdateDevicePosition_updates,
+    batchUpdateDevicePositionResponse_httpStatus,
+    batchUpdateDevicePositionResponse_errors,
+
+    -- ** CalculateRoute
+    calculateRoute_carModeOptions,
+    calculateRoute_departNow,
+    calculateRoute_departureTime,
+    calculateRoute_distanceUnit,
+    calculateRoute_includeLegGeometry,
+    calculateRoute_travelMode,
+    calculateRoute_truckModeOptions,
+    calculateRoute_waypointPositions,
+    calculateRoute_calculatorName,
+    calculateRoute_departurePosition,
+    calculateRoute_destinationPosition,
+    calculateRouteResponse_httpStatus,
+    calculateRouteResponse_legs,
+    calculateRouteResponse_summary,
+
+    -- ** CalculateRouteMatrix
+    calculateRouteMatrix_carModeOptions,
+    calculateRouteMatrix_departNow,
+    calculateRouteMatrix_departureTime,
+    calculateRouteMatrix_distanceUnit,
+    calculateRouteMatrix_travelMode,
+    calculateRouteMatrix_truckModeOptions,
+    calculateRouteMatrix_calculatorName,
+    calculateRouteMatrix_departurePositions,
+    calculateRouteMatrix_destinationPositions,
+    calculateRouteMatrixResponse_snappedDeparturePositions,
+    calculateRouteMatrixResponse_snappedDestinationPositions,
+    calculateRouteMatrixResponse_httpStatus,
+    calculateRouteMatrixResponse_routeMatrix,
+    calculateRouteMatrixResponse_summary,
+
+    -- ** CreateGeofenceCollection
+    createGeofenceCollection_description,
+    createGeofenceCollection_kmsKeyId,
+    createGeofenceCollection_pricingPlan,
+    createGeofenceCollection_pricingPlanDataSource,
+    createGeofenceCollection_tags,
+    createGeofenceCollection_collectionName,
+    createGeofenceCollectionResponse_httpStatus,
+    createGeofenceCollectionResponse_collectionArn,
+    createGeofenceCollectionResponse_collectionName,
+    createGeofenceCollectionResponse_createTime,
+
+    -- ** CreateMap
+    createMap_description,
+    createMap_pricingPlan,
+    createMap_tags,
+    createMap_configuration,
+    createMap_mapName,
+    createMapResponse_httpStatus,
+    createMapResponse_createTime,
+    createMapResponse_mapArn,
+    createMapResponse_mapName,
+
+    -- ** CreatePlaceIndex
+    createPlaceIndex_dataSourceConfiguration,
+    createPlaceIndex_description,
+    createPlaceIndex_pricingPlan,
+    createPlaceIndex_tags,
+    createPlaceIndex_dataSource,
+    createPlaceIndex_indexName,
+    createPlaceIndexResponse_httpStatus,
+    createPlaceIndexResponse_createTime,
+    createPlaceIndexResponse_indexArn,
+    createPlaceIndexResponse_indexName,
+
+    -- ** CreateRouteCalculator
+    createRouteCalculator_description,
+    createRouteCalculator_pricingPlan,
+    createRouteCalculator_tags,
+    createRouteCalculator_calculatorName,
+    createRouteCalculator_dataSource,
+    createRouteCalculatorResponse_httpStatus,
+    createRouteCalculatorResponse_calculatorArn,
+    createRouteCalculatorResponse_calculatorName,
+    createRouteCalculatorResponse_createTime,
+
+    -- ** CreateTracker
+    createTracker_description,
+    createTracker_kmsKeyId,
+    createTracker_positionFiltering,
+    createTracker_pricingPlan,
+    createTracker_pricingPlanDataSource,
+    createTracker_tags,
+    createTracker_trackerName,
+    createTrackerResponse_httpStatus,
+    createTrackerResponse_createTime,
+    createTrackerResponse_trackerArn,
+    createTrackerResponse_trackerName,
+
+    -- ** DeleteGeofenceCollection
+    deleteGeofenceCollection_collectionName,
+    deleteGeofenceCollectionResponse_httpStatus,
+
+    -- ** DeleteMap
+    deleteMap_mapName,
+    deleteMapResponse_httpStatus,
+
+    -- ** DeletePlaceIndex
+    deletePlaceIndex_indexName,
+    deletePlaceIndexResponse_httpStatus,
+
+    -- ** DeleteRouteCalculator
+    deleteRouteCalculator_calculatorName,
+    deleteRouteCalculatorResponse_httpStatus,
+
+    -- ** DeleteTracker
+    deleteTracker_trackerName,
+    deleteTrackerResponse_httpStatus,
+
+    -- ** DescribeGeofenceCollection
+    describeGeofenceCollection_collectionName,
+    describeGeofenceCollectionResponse_kmsKeyId,
+    describeGeofenceCollectionResponse_pricingPlan,
+    describeGeofenceCollectionResponse_pricingPlanDataSource,
+    describeGeofenceCollectionResponse_tags,
+    describeGeofenceCollectionResponse_httpStatus,
+    describeGeofenceCollectionResponse_collectionArn,
+    describeGeofenceCollectionResponse_collectionName,
+    describeGeofenceCollectionResponse_createTime,
+    describeGeofenceCollectionResponse_description,
+    describeGeofenceCollectionResponse_updateTime,
+
+    -- ** DescribeMap
+    describeMap_mapName,
+    describeMapResponse_pricingPlan,
+    describeMapResponse_tags,
+    describeMapResponse_httpStatus,
+    describeMapResponse_configuration,
+    describeMapResponse_createTime,
+    describeMapResponse_dataSource,
+    describeMapResponse_description,
+    describeMapResponse_mapArn,
+    describeMapResponse_mapName,
+    describeMapResponse_updateTime,
+
+    -- ** DescribePlaceIndex
+    describePlaceIndex_indexName,
+    describePlaceIndexResponse_pricingPlan,
+    describePlaceIndexResponse_tags,
+    describePlaceIndexResponse_httpStatus,
+    describePlaceIndexResponse_createTime,
+    describePlaceIndexResponse_dataSource,
+    describePlaceIndexResponse_dataSourceConfiguration,
+    describePlaceIndexResponse_description,
+    describePlaceIndexResponse_indexArn,
+    describePlaceIndexResponse_indexName,
+    describePlaceIndexResponse_updateTime,
+
+    -- ** DescribeRouteCalculator
+    describeRouteCalculator_calculatorName,
+    describeRouteCalculatorResponse_pricingPlan,
+    describeRouteCalculatorResponse_tags,
+    describeRouteCalculatorResponse_httpStatus,
+    describeRouteCalculatorResponse_calculatorArn,
+    describeRouteCalculatorResponse_calculatorName,
+    describeRouteCalculatorResponse_createTime,
+    describeRouteCalculatorResponse_dataSource,
+    describeRouteCalculatorResponse_description,
+    describeRouteCalculatorResponse_updateTime,
+
+    -- ** DescribeTracker
+    describeTracker_trackerName,
+    describeTrackerResponse_kmsKeyId,
+    describeTrackerResponse_positionFiltering,
+    describeTrackerResponse_pricingPlan,
+    describeTrackerResponse_pricingPlanDataSource,
+    describeTrackerResponse_tags,
+    describeTrackerResponse_httpStatus,
+    describeTrackerResponse_createTime,
+    describeTrackerResponse_description,
+    describeTrackerResponse_trackerArn,
+    describeTrackerResponse_trackerName,
+    describeTrackerResponse_updateTime,
+
+    -- ** DisassociateTrackerConsumer
+    disassociateTrackerConsumer_consumerArn,
+    disassociateTrackerConsumer_trackerName,
+    disassociateTrackerConsumerResponse_httpStatus,
+
+    -- ** GetDevicePosition
+    getDevicePosition_deviceId,
+    getDevicePosition_trackerName,
+    getDevicePositionResponse_accuracy,
+    getDevicePositionResponse_deviceId,
+    getDevicePositionResponse_positionProperties,
+    getDevicePositionResponse_httpStatus,
+    getDevicePositionResponse_position,
+    getDevicePositionResponse_receivedTime,
+    getDevicePositionResponse_sampleTime,
+
+    -- ** GetDevicePositionHistory
+    getDevicePositionHistory_endTimeExclusive,
+    getDevicePositionHistory_maxResults,
+    getDevicePositionHistory_nextToken,
+    getDevicePositionHistory_startTimeInclusive,
+    getDevicePositionHistory_deviceId,
+    getDevicePositionHistory_trackerName,
+    getDevicePositionHistoryResponse_nextToken,
+    getDevicePositionHistoryResponse_httpStatus,
+    getDevicePositionHistoryResponse_devicePositions,
+
+    -- ** GetGeofence
+    getGeofence_collectionName,
+    getGeofence_geofenceId,
+    getGeofenceResponse_httpStatus,
+    getGeofenceResponse_createTime,
+    getGeofenceResponse_geofenceId,
+    getGeofenceResponse_geometry,
+    getGeofenceResponse_status,
+    getGeofenceResponse_updateTime,
+
+    -- ** GetMapGlyphs
+    getMapGlyphs_fontStack,
+    getMapGlyphs_fontUnicodeRange,
+    getMapGlyphs_mapName,
+    getMapGlyphsResponse_blob,
+    getMapGlyphsResponse_contentType,
+    getMapGlyphsResponse_httpStatus,
+
+    -- ** GetMapSprites
+    getMapSprites_fileName,
+    getMapSprites_mapName,
+    getMapSpritesResponse_blob,
+    getMapSpritesResponse_contentType,
+    getMapSpritesResponse_httpStatus,
+
+    -- ** GetMapStyleDescriptor
+    getMapStyleDescriptor_mapName,
+    getMapStyleDescriptorResponse_blob,
+    getMapStyleDescriptorResponse_contentType,
+    getMapStyleDescriptorResponse_httpStatus,
+
+    -- ** GetMapTile
+    getMapTile_mapName,
+    getMapTile_x,
+    getMapTile_y,
+    getMapTile_z,
+    getMapTileResponse_blob,
+    getMapTileResponse_contentType,
+    getMapTileResponse_httpStatus,
+
+    -- ** GetPlace
+    getPlace_language,
+    getPlace_indexName,
+    getPlace_placeId,
+    getPlaceResponse_httpStatus,
+    getPlaceResponse_place,
+
+    -- ** ListDevicePositions
+    listDevicePositions_maxResults,
+    listDevicePositions_nextToken,
+    listDevicePositions_trackerName,
+    listDevicePositionsResponse_nextToken,
+    listDevicePositionsResponse_httpStatus,
+    listDevicePositionsResponse_entries,
+
+    -- ** ListGeofenceCollections
+    listGeofenceCollections_maxResults,
+    listGeofenceCollections_nextToken,
+    listGeofenceCollectionsResponse_nextToken,
+    listGeofenceCollectionsResponse_httpStatus,
+    listGeofenceCollectionsResponse_entries,
+
+    -- ** ListGeofences
+    listGeofences_maxResults,
+    listGeofences_nextToken,
+    listGeofences_collectionName,
+    listGeofencesResponse_nextToken,
+    listGeofencesResponse_httpStatus,
+    listGeofencesResponse_entries,
+
+    -- ** ListMaps
+    listMaps_maxResults,
+    listMaps_nextToken,
+    listMapsResponse_nextToken,
+    listMapsResponse_httpStatus,
+    listMapsResponse_entries,
+
+    -- ** ListPlaceIndexes
+    listPlaceIndexes_maxResults,
+    listPlaceIndexes_nextToken,
+    listPlaceIndexesResponse_nextToken,
+    listPlaceIndexesResponse_httpStatus,
+    listPlaceIndexesResponse_entries,
+
+    -- ** ListRouteCalculators
+    listRouteCalculators_maxResults,
+    listRouteCalculators_nextToken,
+    listRouteCalculatorsResponse_nextToken,
+    listRouteCalculatorsResponse_httpStatus,
+    listRouteCalculatorsResponse_entries,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListTrackerConsumers
+    listTrackerConsumers_maxResults,
+    listTrackerConsumers_nextToken,
+    listTrackerConsumers_trackerName,
+    listTrackerConsumersResponse_nextToken,
+    listTrackerConsumersResponse_httpStatus,
+    listTrackerConsumersResponse_consumerArns,
+
+    -- ** ListTrackers
+    listTrackers_maxResults,
+    listTrackers_nextToken,
+    listTrackersResponse_nextToken,
+    listTrackersResponse_httpStatus,
+    listTrackersResponse_entries,
+
+    -- ** PutGeofence
+    putGeofence_collectionName,
+    putGeofence_geofenceId,
+    putGeofence_geometry,
+    putGeofenceResponse_httpStatus,
+    putGeofenceResponse_createTime,
+    putGeofenceResponse_geofenceId,
+    putGeofenceResponse_updateTime,
+
+    -- ** SearchPlaceIndexForPosition
+    searchPlaceIndexForPosition_language,
+    searchPlaceIndexForPosition_maxResults,
+    searchPlaceIndexForPosition_indexName,
+    searchPlaceIndexForPosition_position,
+    searchPlaceIndexForPositionResponse_httpStatus,
+    searchPlaceIndexForPositionResponse_results,
+    searchPlaceIndexForPositionResponse_summary,
+
+    -- ** SearchPlaceIndexForSuggestions
+    searchPlaceIndexForSuggestions_biasPosition,
+    searchPlaceIndexForSuggestions_filterBBox,
+    searchPlaceIndexForSuggestions_filterCountries,
+    searchPlaceIndexForSuggestions_language,
+    searchPlaceIndexForSuggestions_maxResults,
+    searchPlaceIndexForSuggestions_indexName,
+    searchPlaceIndexForSuggestions_text,
+    searchPlaceIndexForSuggestionsResponse_httpStatus,
+    searchPlaceIndexForSuggestionsResponse_results,
+    searchPlaceIndexForSuggestionsResponse_summary,
+
+    -- ** SearchPlaceIndexForText
+    searchPlaceIndexForText_biasPosition,
+    searchPlaceIndexForText_filterBBox,
+    searchPlaceIndexForText_filterCountries,
+    searchPlaceIndexForText_language,
+    searchPlaceIndexForText_maxResults,
+    searchPlaceIndexForText_indexName,
+    searchPlaceIndexForText_text,
+    searchPlaceIndexForTextResponse_httpStatus,
+    searchPlaceIndexForTextResponse_results,
+    searchPlaceIndexForTextResponse_summary,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateGeofenceCollection
+    updateGeofenceCollection_description,
+    updateGeofenceCollection_pricingPlan,
+    updateGeofenceCollection_pricingPlanDataSource,
+    updateGeofenceCollection_collectionName,
+    updateGeofenceCollectionResponse_httpStatus,
+    updateGeofenceCollectionResponse_collectionArn,
+    updateGeofenceCollectionResponse_collectionName,
+    updateGeofenceCollectionResponse_updateTime,
+
+    -- ** UpdateMap
+    updateMap_description,
+    updateMap_pricingPlan,
+    updateMap_mapName,
+    updateMapResponse_httpStatus,
+    updateMapResponse_mapArn,
+    updateMapResponse_mapName,
+    updateMapResponse_updateTime,
+
+    -- ** UpdatePlaceIndex
+    updatePlaceIndex_dataSourceConfiguration,
+    updatePlaceIndex_description,
+    updatePlaceIndex_pricingPlan,
+    updatePlaceIndex_indexName,
+    updatePlaceIndexResponse_httpStatus,
+    updatePlaceIndexResponse_indexArn,
+    updatePlaceIndexResponse_indexName,
+    updatePlaceIndexResponse_updateTime,
+
+    -- ** UpdateRouteCalculator
+    updateRouteCalculator_description,
+    updateRouteCalculator_pricingPlan,
+    updateRouteCalculator_calculatorName,
+    updateRouteCalculatorResponse_httpStatus,
+    updateRouteCalculatorResponse_calculatorArn,
+    updateRouteCalculatorResponse_calculatorName,
+    updateRouteCalculatorResponse_updateTime,
+
+    -- ** UpdateTracker
+    updateTracker_description,
+    updateTracker_positionFiltering,
+    updateTracker_pricingPlan,
+    updateTracker_pricingPlanDataSource,
+    updateTracker_trackerName,
+    updateTrackerResponse_httpStatus,
+    updateTrackerResponse_trackerArn,
+    updateTrackerResponse_trackerName,
+    updateTrackerResponse_updateTime,
+
+    -- * Types
+
+    -- ** BatchDeleteDevicePositionHistoryError
+    batchDeleteDevicePositionHistoryError_deviceId,
+    batchDeleteDevicePositionHistoryError_error,
+
+    -- ** BatchDeleteGeofenceError
+    batchDeleteGeofenceError_error,
+    batchDeleteGeofenceError_geofenceId,
+
+    -- ** BatchEvaluateGeofencesError
+    batchEvaluateGeofencesError_deviceId,
+    batchEvaluateGeofencesError_error,
+    batchEvaluateGeofencesError_sampleTime,
+
+    -- ** BatchGetDevicePositionError
+    batchGetDevicePositionError_deviceId,
+    batchGetDevicePositionError_error,
+
+    -- ** BatchItemError
+    batchItemError_code,
+    batchItemError_message,
+
+    -- ** BatchPutGeofenceError
+    batchPutGeofenceError_error,
+    batchPutGeofenceError_geofenceId,
+
+    -- ** BatchPutGeofenceRequestEntry
+    batchPutGeofenceRequestEntry_geofenceId,
+    batchPutGeofenceRequestEntry_geometry,
+
+    -- ** BatchPutGeofenceSuccess
+    batchPutGeofenceSuccess_createTime,
+    batchPutGeofenceSuccess_geofenceId,
+    batchPutGeofenceSuccess_updateTime,
+
+    -- ** BatchUpdateDevicePositionError
+    batchUpdateDevicePositionError_deviceId,
+    batchUpdateDevicePositionError_error,
+    batchUpdateDevicePositionError_sampleTime,
+
+    -- ** CalculateRouteCarModeOptions
+    calculateRouteCarModeOptions_avoidFerries,
+    calculateRouteCarModeOptions_avoidTolls,
+
+    -- ** CalculateRouteMatrixSummary
+    calculateRouteMatrixSummary_dataSource,
+    calculateRouteMatrixSummary_distanceUnit,
+    calculateRouteMatrixSummary_errorCount,
+    calculateRouteMatrixSummary_routeCount,
+
+    -- ** CalculateRouteSummary
+    calculateRouteSummary_dataSource,
+    calculateRouteSummary_distance,
+    calculateRouteSummary_distanceUnit,
+    calculateRouteSummary_durationSeconds,
+    calculateRouteSummary_routeBBox,
+
+    -- ** CalculateRouteTruckModeOptions
+    calculateRouteTruckModeOptions_avoidFerries,
+    calculateRouteTruckModeOptions_avoidTolls,
+    calculateRouteTruckModeOptions_dimensions,
+    calculateRouteTruckModeOptions_weight,
+
+    -- ** Circle
+    circle_center,
+    circle_radius,
+
+    -- ** DataSourceConfiguration
+    dataSourceConfiguration_intendedUse,
+
+    -- ** DevicePosition
+    devicePosition_accuracy,
+    devicePosition_deviceId,
+    devicePosition_positionProperties,
+    devicePosition_position,
+    devicePosition_receivedTime,
+    devicePosition_sampleTime,
+
+    -- ** DevicePositionUpdate
+    devicePositionUpdate_accuracy,
+    devicePositionUpdate_positionProperties,
+    devicePositionUpdate_deviceId,
+    devicePositionUpdate_position,
+    devicePositionUpdate_sampleTime,
+
+    -- ** GeofenceGeometry
+    geofenceGeometry_circle,
+    geofenceGeometry_polygon,
+
+    -- ** Leg
+    leg_geometry,
+    leg_distance,
+    leg_durationSeconds,
+    leg_endPosition,
+    leg_startPosition,
+    leg_steps,
+
+    -- ** LegGeometry
+    legGeometry_lineString,
+
+    -- ** ListDevicePositionsResponseEntry
+    listDevicePositionsResponseEntry_accuracy,
+    listDevicePositionsResponseEntry_positionProperties,
+    listDevicePositionsResponseEntry_deviceId,
+    listDevicePositionsResponseEntry_position,
+    listDevicePositionsResponseEntry_sampleTime,
+
+    -- ** ListGeofenceCollectionsResponseEntry
+    listGeofenceCollectionsResponseEntry_pricingPlan,
+    listGeofenceCollectionsResponseEntry_pricingPlanDataSource,
+    listGeofenceCollectionsResponseEntry_collectionName,
+    listGeofenceCollectionsResponseEntry_createTime,
+    listGeofenceCollectionsResponseEntry_description,
+    listGeofenceCollectionsResponseEntry_updateTime,
+
+    -- ** ListGeofenceResponseEntry
+    listGeofenceResponseEntry_createTime,
+    listGeofenceResponseEntry_geofenceId,
+    listGeofenceResponseEntry_geometry,
+    listGeofenceResponseEntry_status,
+    listGeofenceResponseEntry_updateTime,
+
+    -- ** ListMapsResponseEntry
+    listMapsResponseEntry_pricingPlan,
+    listMapsResponseEntry_createTime,
+    listMapsResponseEntry_dataSource,
+    listMapsResponseEntry_description,
+    listMapsResponseEntry_mapName,
+    listMapsResponseEntry_updateTime,
+
+    -- ** ListPlaceIndexesResponseEntry
+    listPlaceIndexesResponseEntry_pricingPlan,
+    listPlaceIndexesResponseEntry_createTime,
+    listPlaceIndexesResponseEntry_dataSource,
+    listPlaceIndexesResponseEntry_description,
+    listPlaceIndexesResponseEntry_indexName,
+    listPlaceIndexesResponseEntry_updateTime,
+
+    -- ** ListRouteCalculatorsResponseEntry
+    listRouteCalculatorsResponseEntry_pricingPlan,
+    listRouteCalculatorsResponseEntry_calculatorName,
+    listRouteCalculatorsResponseEntry_createTime,
+    listRouteCalculatorsResponseEntry_dataSource,
+    listRouteCalculatorsResponseEntry_description,
+    listRouteCalculatorsResponseEntry_updateTime,
+
+    -- ** ListTrackersResponseEntry
+    listTrackersResponseEntry_pricingPlan,
+    listTrackersResponseEntry_pricingPlanDataSource,
+    listTrackersResponseEntry_createTime,
+    listTrackersResponseEntry_description,
+    listTrackersResponseEntry_trackerName,
+    listTrackersResponseEntry_updateTime,
+
+    -- ** MapConfiguration
+    mapConfiguration_style,
+
+    -- ** Place
+    place_addressNumber,
+    place_country,
+    place_interpolated,
+    place_label,
+    place_municipality,
+    place_neighborhood,
+    place_postalCode,
+    place_region,
+    place_street,
+    place_subRegion,
+    place_timeZone,
+    place_unitNumber,
+    place_unitType,
+    place_geometry,
+
+    -- ** PlaceGeometry
+    placeGeometry_point,
+
+    -- ** PositionalAccuracy
+    positionalAccuracy_horizontal,
+
+    -- ** RouteMatrixEntry
+    routeMatrixEntry_distance,
+    routeMatrixEntry_durationSeconds,
+    routeMatrixEntry_error,
+
+    -- ** RouteMatrixEntryError
+    routeMatrixEntryError_message,
+    routeMatrixEntryError_code,
+
+    -- ** SearchForPositionResult
+    searchForPositionResult_placeId,
+    searchForPositionResult_distance,
+    searchForPositionResult_place,
+
+    -- ** SearchForSuggestionsResult
+    searchForSuggestionsResult_placeId,
+    searchForSuggestionsResult_text,
+
+    -- ** SearchForTextResult
+    searchForTextResult_distance,
+    searchForTextResult_placeId,
+    searchForTextResult_relevance,
+    searchForTextResult_place,
+
+    -- ** SearchPlaceIndexForPositionSummary
+    searchPlaceIndexForPositionSummary_language,
+    searchPlaceIndexForPositionSummary_maxResults,
+    searchPlaceIndexForPositionSummary_dataSource,
+    searchPlaceIndexForPositionSummary_position,
+
+    -- ** SearchPlaceIndexForSuggestionsSummary
+    searchPlaceIndexForSuggestionsSummary_biasPosition,
+    searchPlaceIndexForSuggestionsSummary_filterBBox,
+    searchPlaceIndexForSuggestionsSummary_filterCountries,
+    searchPlaceIndexForSuggestionsSummary_language,
+    searchPlaceIndexForSuggestionsSummary_maxResults,
+    searchPlaceIndexForSuggestionsSummary_dataSource,
+    searchPlaceIndexForSuggestionsSummary_text,
+
+    -- ** SearchPlaceIndexForTextSummary
+    searchPlaceIndexForTextSummary_biasPosition,
+    searchPlaceIndexForTextSummary_filterBBox,
+    searchPlaceIndexForTextSummary_filterCountries,
+    searchPlaceIndexForTextSummary_language,
+    searchPlaceIndexForTextSummary_maxResults,
+    searchPlaceIndexForTextSummary_resultBBox,
+    searchPlaceIndexForTextSummary_dataSource,
+    searchPlaceIndexForTextSummary_text,
+
+    -- ** Step
+    step_geometryOffset,
+    step_distance,
+    step_durationSeconds,
+    step_endPosition,
+    step_startPosition,
+
+    -- ** TimeZone
+    timeZone_offset,
+    timeZone_name,
+
+    -- ** TruckDimensions
+    truckDimensions_height,
+    truckDimensions_length,
+    truckDimensions_unit,
+    truckDimensions_width,
+
+    -- ** TruckWeight
+    truckWeight_total,
+    truckWeight_unit,
+  )
+where
+
+import Amazonka.Location.AssociateTrackerConsumer
+import Amazonka.Location.BatchDeleteDevicePositionHistory
+import Amazonka.Location.BatchDeleteGeofence
+import Amazonka.Location.BatchEvaluateGeofences
+import Amazonka.Location.BatchGetDevicePosition
+import Amazonka.Location.BatchPutGeofence
+import Amazonka.Location.BatchUpdateDevicePosition
+import Amazonka.Location.CalculateRoute
+import Amazonka.Location.CalculateRouteMatrix
+import Amazonka.Location.CreateGeofenceCollection
+import Amazonka.Location.CreateMap
+import Amazonka.Location.CreatePlaceIndex
+import Amazonka.Location.CreateRouteCalculator
+import Amazonka.Location.CreateTracker
+import Amazonka.Location.DeleteGeofenceCollection
+import Amazonka.Location.DeleteMap
+import Amazonka.Location.DeletePlaceIndex
+import Amazonka.Location.DeleteRouteCalculator
+import Amazonka.Location.DeleteTracker
+import Amazonka.Location.DescribeGeofenceCollection
+import Amazonka.Location.DescribeMap
+import Amazonka.Location.DescribePlaceIndex
+import Amazonka.Location.DescribeRouteCalculator
+import Amazonka.Location.DescribeTracker
+import Amazonka.Location.DisassociateTrackerConsumer
+import Amazonka.Location.GetDevicePosition
+import Amazonka.Location.GetDevicePositionHistory
+import Amazonka.Location.GetGeofence
+import Amazonka.Location.GetMapGlyphs
+import Amazonka.Location.GetMapSprites
+import Amazonka.Location.GetMapStyleDescriptor
+import Amazonka.Location.GetMapTile
+import Amazonka.Location.GetPlace
+import Amazonka.Location.ListDevicePositions
+import Amazonka.Location.ListGeofenceCollections
+import Amazonka.Location.ListGeofences
+import Amazonka.Location.ListMaps
+import Amazonka.Location.ListPlaceIndexes
+import Amazonka.Location.ListRouteCalculators
+import Amazonka.Location.ListTagsForResource
+import Amazonka.Location.ListTrackerConsumers
+import Amazonka.Location.ListTrackers
+import Amazonka.Location.PutGeofence
+import Amazonka.Location.SearchPlaceIndexForPosition
+import Amazonka.Location.SearchPlaceIndexForSuggestions
+import Amazonka.Location.SearchPlaceIndexForText
+import Amazonka.Location.TagResource
+import Amazonka.Location.Types.BatchDeleteDevicePositionHistoryError
+import Amazonka.Location.Types.BatchDeleteGeofenceError
+import Amazonka.Location.Types.BatchEvaluateGeofencesError
+import Amazonka.Location.Types.BatchGetDevicePositionError
+import Amazonka.Location.Types.BatchItemError
+import Amazonka.Location.Types.BatchPutGeofenceError
+import Amazonka.Location.Types.BatchPutGeofenceRequestEntry
+import Amazonka.Location.Types.BatchPutGeofenceSuccess
+import Amazonka.Location.Types.BatchUpdateDevicePositionError
+import Amazonka.Location.Types.CalculateRouteCarModeOptions
+import Amazonka.Location.Types.CalculateRouteMatrixSummary
+import Amazonka.Location.Types.CalculateRouteSummary
+import Amazonka.Location.Types.CalculateRouteTruckModeOptions
+import Amazonka.Location.Types.Circle
+import Amazonka.Location.Types.DataSourceConfiguration
+import Amazonka.Location.Types.DevicePosition
+import Amazonka.Location.Types.DevicePositionUpdate
+import Amazonka.Location.Types.GeofenceGeometry
+import Amazonka.Location.Types.Leg
+import Amazonka.Location.Types.LegGeometry
+import Amazonka.Location.Types.ListDevicePositionsResponseEntry
+import Amazonka.Location.Types.ListGeofenceCollectionsResponseEntry
+import Amazonka.Location.Types.ListGeofenceResponseEntry
+import Amazonka.Location.Types.ListMapsResponseEntry
+import Amazonka.Location.Types.ListPlaceIndexesResponseEntry
+import Amazonka.Location.Types.ListRouteCalculatorsResponseEntry
+import Amazonka.Location.Types.ListTrackersResponseEntry
+import Amazonka.Location.Types.MapConfiguration
+import Amazonka.Location.Types.Place
+import Amazonka.Location.Types.PlaceGeometry
+import Amazonka.Location.Types.PositionalAccuracy
+import Amazonka.Location.Types.RouteMatrixEntry
+import Amazonka.Location.Types.RouteMatrixEntryError
+import Amazonka.Location.Types.SearchForPositionResult
+import Amazonka.Location.Types.SearchForSuggestionsResult
+import Amazonka.Location.Types.SearchForTextResult
+import Amazonka.Location.Types.SearchPlaceIndexForPositionSummary
+import Amazonka.Location.Types.SearchPlaceIndexForSuggestionsSummary
+import Amazonka.Location.Types.SearchPlaceIndexForTextSummary
+import Amazonka.Location.Types.Step
+import Amazonka.Location.Types.TimeZone
+import Amazonka.Location.Types.TruckDimensions
+import Amazonka.Location.Types.TruckWeight
+import Amazonka.Location.UntagResource
+import Amazonka.Location.UpdateGeofenceCollection
+import Amazonka.Location.UpdateMap
+import Amazonka.Location.UpdatePlaceIndex
+import Amazonka.Location.UpdateRouteCalculator
+import Amazonka.Location.UpdateTracker
diff --git a/gen/Amazonka/Location/ListDevicePositions.hs b/gen/Amazonka/Location/ListDevicePositions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListDevicePositions.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.ListDevicePositions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A batch request to retrieve all device positions.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.ListDevicePositions
+  ( -- * Creating a Request
+    ListDevicePositions (..),
+    newListDevicePositions,
+
+    -- * Request Lenses
+    listDevicePositions_maxResults,
+    listDevicePositions_nextToken,
+    listDevicePositions_trackerName,
+
+    -- * Destructuring the Response
+    ListDevicePositionsResponse (..),
+    newListDevicePositionsResponse,
+
+    -- * Response Lenses
+    listDevicePositionsResponse_nextToken,
+    listDevicePositionsResponse_httpStatus,
+    listDevicePositionsResponse_entries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDevicePositions' smart constructor.
+data ListDevicePositions = ListDevicePositions'
+  { -- | An optional limit for the number of entries returned in a single call.
+    --
+    -- Default value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The tracker resource containing the requested devices.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDevicePositions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDevicePositions_maxResults' - An optional limit for the number of entries returned in a single call.
+--
+-- Default value: @100@
+--
+-- 'nextToken', 'listDevicePositions_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+--
+-- 'trackerName', 'listDevicePositions_trackerName' - The tracker resource containing the requested devices.
+newListDevicePositions ::
+  -- | 'trackerName'
+  Prelude.Text ->
+  ListDevicePositions
+newListDevicePositions pTrackerName_ =
+  ListDevicePositions'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      trackerName = pTrackerName_
+    }
+
+-- | An optional limit for the number of entries returned in a single call.
+--
+-- Default value: @100@
+listDevicePositions_maxResults :: Lens.Lens' ListDevicePositions (Prelude.Maybe Prelude.Natural)
+listDevicePositions_maxResults = Lens.lens (\ListDevicePositions' {maxResults} -> maxResults) (\s@ListDevicePositions' {} a -> s {maxResults = a} :: ListDevicePositions)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+listDevicePositions_nextToken :: Lens.Lens' ListDevicePositions (Prelude.Maybe Prelude.Text)
+listDevicePositions_nextToken = Lens.lens (\ListDevicePositions' {nextToken} -> nextToken) (\s@ListDevicePositions' {} a -> s {nextToken = a} :: ListDevicePositions)
+
+-- | The tracker resource containing the requested devices.
+listDevicePositions_trackerName :: Lens.Lens' ListDevicePositions Prelude.Text
+listDevicePositions_trackerName = Lens.lens (\ListDevicePositions' {trackerName} -> trackerName) (\s@ListDevicePositions' {} a -> s {trackerName = a} :: ListDevicePositions)
+
+instance Core.AWSPager ListDevicePositions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDevicePositionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listDevicePositionsResponse_entries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDevicePositions_nextToken
+          Lens..~ rs
+          Lens.^? listDevicePositionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDevicePositions where
+  type
+    AWSResponse ListDevicePositions =
+      ListDevicePositionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDevicePositionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListDevicePositions where
+  hashWithSalt _salt ListDevicePositions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData ListDevicePositions where
+  rnf ListDevicePositions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders ListDevicePositions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDevicePositions where
+  toJSON ListDevicePositions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListDevicePositions where
+  toPath ListDevicePositions' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/list-positions"
+      ]
+
+instance Data.ToQuery ListDevicePositions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDevicePositionsResponse' smart constructor.
+data ListDevicePositionsResponse = ListDevicePositionsResponse'
+  { -- | A pagination token indicating there are additional pages available. You
+    -- can use the token in a following request to fetch the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains details about each device\'s last known position. These details
+    -- includes the device ID, the time when the position was sampled on the
+    -- device, the time that the service received the update, and the most
+    -- recent coordinates.
+    entries :: [ListDevicePositionsResponseEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDevicePositionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listDevicePositionsResponse_nextToken' - A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+--
+-- 'httpStatus', 'listDevicePositionsResponse_httpStatus' - The response's http status code.
+--
+-- 'entries', 'listDevicePositionsResponse_entries' - Contains details about each device\'s last known position. These details
+-- includes the device ID, the time when the position was sampled on the
+-- device, the time that the service received the update, and the most
+-- recent coordinates.
+newListDevicePositionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDevicePositionsResponse
+newListDevicePositionsResponse pHttpStatus_ =
+  ListDevicePositionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entries = Prelude.mempty
+    }
+
+-- | A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+listDevicePositionsResponse_nextToken :: Lens.Lens' ListDevicePositionsResponse (Prelude.Maybe Prelude.Text)
+listDevicePositionsResponse_nextToken = Lens.lens (\ListDevicePositionsResponse' {nextToken} -> nextToken) (\s@ListDevicePositionsResponse' {} a -> s {nextToken = a} :: ListDevicePositionsResponse)
+
+-- | The response's http status code.
+listDevicePositionsResponse_httpStatus :: Lens.Lens' ListDevicePositionsResponse Prelude.Int
+listDevicePositionsResponse_httpStatus = Lens.lens (\ListDevicePositionsResponse' {httpStatus} -> httpStatus) (\s@ListDevicePositionsResponse' {} a -> s {httpStatus = a} :: ListDevicePositionsResponse)
+
+-- | Contains details about each device\'s last known position. These details
+-- includes the device ID, the time when the position was sampled on the
+-- device, the time that the service received the update, and the most
+-- recent coordinates.
+listDevicePositionsResponse_entries :: Lens.Lens' ListDevicePositionsResponse [ListDevicePositionsResponseEntry]
+listDevicePositionsResponse_entries = Lens.lens (\ListDevicePositionsResponse' {entries} -> entries) (\s@ListDevicePositionsResponse' {} a -> s {entries = a} :: ListDevicePositionsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListDevicePositionsResponse where
+  rnf ListDevicePositionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entries
diff --git a/gen/Amazonka/Location/ListGeofenceCollections.hs b/gen/Amazonka/Location/ListGeofenceCollections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListGeofenceCollections.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.Location.ListGeofenceCollections
+-- 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 geofence collections in your AWS account.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.ListGeofenceCollections
+  ( -- * Creating a Request
+    ListGeofenceCollections (..),
+    newListGeofenceCollections,
+
+    -- * Request Lenses
+    listGeofenceCollections_maxResults,
+    listGeofenceCollections_nextToken,
+
+    -- * Destructuring the Response
+    ListGeofenceCollectionsResponse (..),
+    newListGeofenceCollectionsResponse,
+
+    -- * Response Lenses
+    listGeofenceCollectionsResponse_nextToken,
+    listGeofenceCollectionsResponse_httpStatus,
+    listGeofenceCollectionsResponse_entries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListGeofenceCollections' smart constructor.
+data ListGeofenceCollections = ListGeofenceCollections'
+  { -- | An optional limit for the number of resources returned in a single call.
+    --
+    -- Default value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGeofenceCollections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listGeofenceCollections_maxResults' - An optional limit for the number of resources returned in a single call.
+--
+-- Default value: @100@
+--
+-- 'nextToken', 'listGeofenceCollections_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+newListGeofenceCollections ::
+  ListGeofenceCollections
+newListGeofenceCollections =
+  ListGeofenceCollections'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An optional limit for the number of resources returned in a single call.
+--
+-- Default value: @100@
+listGeofenceCollections_maxResults :: Lens.Lens' ListGeofenceCollections (Prelude.Maybe Prelude.Natural)
+listGeofenceCollections_maxResults = Lens.lens (\ListGeofenceCollections' {maxResults} -> maxResults) (\s@ListGeofenceCollections' {} a -> s {maxResults = a} :: ListGeofenceCollections)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+listGeofenceCollections_nextToken :: Lens.Lens' ListGeofenceCollections (Prelude.Maybe Prelude.Text)
+listGeofenceCollections_nextToken = Lens.lens (\ListGeofenceCollections' {nextToken} -> nextToken) (\s@ListGeofenceCollections' {} a -> s {nextToken = a} :: ListGeofenceCollections)
+
+instance Core.AWSPager ListGeofenceCollections where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listGeofenceCollectionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listGeofenceCollectionsResponse_entries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listGeofenceCollections_nextToken
+          Lens..~ rs
+          Lens.^? listGeofenceCollectionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListGeofenceCollections where
+  type
+    AWSResponse ListGeofenceCollections =
+      ListGeofenceCollectionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListGeofenceCollectionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListGeofenceCollections where
+  hashWithSalt _salt ListGeofenceCollections' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListGeofenceCollections where
+  rnf ListGeofenceCollections' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListGeofenceCollections where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListGeofenceCollections where
+  toJSON ListGeofenceCollections' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListGeofenceCollections where
+  toPath =
+    Prelude.const "/geofencing/v0/list-collections"
+
+instance Data.ToQuery ListGeofenceCollections where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListGeofenceCollectionsResponse' smart constructor.
+data ListGeofenceCollectionsResponse = ListGeofenceCollectionsResponse'
+  { -- | A pagination token indicating there are additional pages available. You
+    -- can use the token in a following request to fetch the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Lists the geofence collections that exist in your AWS account.
+    entries :: [ListGeofenceCollectionsResponseEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGeofenceCollectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listGeofenceCollectionsResponse_nextToken' - A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+--
+-- 'httpStatus', 'listGeofenceCollectionsResponse_httpStatus' - The response's http status code.
+--
+-- 'entries', 'listGeofenceCollectionsResponse_entries' - Lists the geofence collections that exist in your AWS account.
+newListGeofenceCollectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListGeofenceCollectionsResponse
+newListGeofenceCollectionsResponse pHttpStatus_ =
+  ListGeofenceCollectionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entries = Prelude.mempty
+    }
+
+-- | A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+listGeofenceCollectionsResponse_nextToken :: Lens.Lens' ListGeofenceCollectionsResponse (Prelude.Maybe Prelude.Text)
+listGeofenceCollectionsResponse_nextToken = Lens.lens (\ListGeofenceCollectionsResponse' {nextToken} -> nextToken) (\s@ListGeofenceCollectionsResponse' {} a -> s {nextToken = a} :: ListGeofenceCollectionsResponse)
+
+-- | The response's http status code.
+listGeofenceCollectionsResponse_httpStatus :: Lens.Lens' ListGeofenceCollectionsResponse Prelude.Int
+listGeofenceCollectionsResponse_httpStatus = Lens.lens (\ListGeofenceCollectionsResponse' {httpStatus} -> httpStatus) (\s@ListGeofenceCollectionsResponse' {} a -> s {httpStatus = a} :: ListGeofenceCollectionsResponse)
+
+-- | Lists the geofence collections that exist in your AWS account.
+listGeofenceCollectionsResponse_entries :: Lens.Lens' ListGeofenceCollectionsResponse [ListGeofenceCollectionsResponseEntry]
+listGeofenceCollectionsResponse_entries = Lens.lens (\ListGeofenceCollectionsResponse' {entries} -> entries) (\s@ListGeofenceCollectionsResponse' {} a -> s {entries = a} :: ListGeofenceCollectionsResponse) Prelude.. Lens.coerced
+
+instance
+  Prelude.NFData
+    ListGeofenceCollectionsResponse
+  where
+  rnf ListGeofenceCollectionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entries
diff --git a/gen/Amazonka/Location/ListGeofences.hs b/gen/Amazonka/Location/ListGeofences.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListGeofences.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.Location.ListGeofences
+-- 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 geofences stored in a given geofence collection.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.ListGeofences
+  ( -- * Creating a Request
+    ListGeofences (..),
+    newListGeofences,
+
+    -- * Request Lenses
+    listGeofences_maxResults,
+    listGeofences_nextToken,
+    listGeofences_collectionName,
+
+    -- * Destructuring the Response
+    ListGeofencesResponse (..),
+    newListGeofencesResponse,
+
+    -- * Response Lenses
+    listGeofencesResponse_nextToken,
+    listGeofencesResponse_httpStatus,
+    listGeofencesResponse_entries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListGeofences' smart constructor.
+data ListGeofences = ListGeofences'
+  { -- | An optional limit for the number of geofences returned in a single call.
+    --
+    -- Default value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the geofence collection storing the list of geofences.
+    collectionName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGeofences' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listGeofences_maxResults' - An optional limit for the number of geofences returned in a single call.
+--
+-- Default value: @100@
+--
+-- 'nextToken', 'listGeofences_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+--
+-- 'collectionName', 'listGeofences_collectionName' - The name of the geofence collection storing the list of geofences.
+newListGeofences ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  ListGeofences
+newListGeofences pCollectionName_ =
+  ListGeofences'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      collectionName = pCollectionName_
+    }
+
+-- | An optional limit for the number of geofences returned in a single call.
+--
+-- Default value: @100@
+listGeofences_maxResults :: Lens.Lens' ListGeofences (Prelude.Maybe Prelude.Natural)
+listGeofences_maxResults = Lens.lens (\ListGeofences' {maxResults} -> maxResults) (\s@ListGeofences' {} a -> s {maxResults = a} :: ListGeofences)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+listGeofences_nextToken :: Lens.Lens' ListGeofences (Prelude.Maybe Prelude.Text)
+listGeofences_nextToken = Lens.lens (\ListGeofences' {nextToken} -> nextToken) (\s@ListGeofences' {} a -> s {nextToken = a} :: ListGeofences)
+
+-- | The name of the geofence collection storing the list of geofences.
+listGeofences_collectionName :: Lens.Lens' ListGeofences Prelude.Text
+listGeofences_collectionName = Lens.lens (\ListGeofences' {collectionName} -> collectionName) (\s@ListGeofences' {} a -> s {collectionName = a} :: ListGeofences)
+
+instance Core.AWSPager ListGeofences where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listGeofencesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listGeofencesResponse_entries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listGeofences_nextToken
+          Lens..~ rs
+          Lens.^? listGeofencesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListGeofences where
+  type
+    AWSResponse ListGeofences =
+      ListGeofencesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListGeofencesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListGeofences where
+  hashWithSalt _salt ListGeofences' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` collectionName
+
+instance Prelude.NFData ListGeofences where
+  rnf ListGeofences' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf collectionName
+
+instance Data.ToHeaders ListGeofences where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListGeofences where
+  toJSON ListGeofences' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListGeofences where
+  toPath ListGeofences' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName,
+        "/list-geofences"
+      ]
+
+instance Data.ToQuery ListGeofences where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListGeofencesResponse' smart constructor.
+data ListGeofencesResponse = ListGeofencesResponse'
+  { -- | A pagination token indicating there are additional pages available. You
+    -- can use the token in a following request to fetch the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains a list of geofences stored in the geofence collection.
+    entries :: [ListGeofenceResponseEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGeofencesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listGeofencesResponse_nextToken' - A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+--
+-- 'httpStatus', 'listGeofencesResponse_httpStatus' - The response's http status code.
+--
+-- 'entries', 'listGeofencesResponse_entries' - Contains a list of geofences stored in the geofence collection.
+newListGeofencesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListGeofencesResponse
+newListGeofencesResponse pHttpStatus_ =
+  ListGeofencesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entries = Prelude.mempty
+    }
+
+-- | A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+listGeofencesResponse_nextToken :: Lens.Lens' ListGeofencesResponse (Prelude.Maybe Prelude.Text)
+listGeofencesResponse_nextToken = Lens.lens (\ListGeofencesResponse' {nextToken} -> nextToken) (\s@ListGeofencesResponse' {} a -> s {nextToken = a} :: ListGeofencesResponse)
+
+-- | The response's http status code.
+listGeofencesResponse_httpStatus :: Lens.Lens' ListGeofencesResponse Prelude.Int
+listGeofencesResponse_httpStatus = Lens.lens (\ListGeofencesResponse' {httpStatus} -> httpStatus) (\s@ListGeofencesResponse' {} a -> s {httpStatus = a} :: ListGeofencesResponse)
+
+-- | Contains a list of geofences stored in the geofence collection.
+listGeofencesResponse_entries :: Lens.Lens' ListGeofencesResponse [ListGeofenceResponseEntry]
+listGeofencesResponse_entries = Lens.lens (\ListGeofencesResponse' {entries} -> entries) (\s@ListGeofencesResponse' {} a -> s {entries = a} :: ListGeofencesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListGeofencesResponse where
+  rnf ListGeofencesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entries
diff --git a/gen/Amazonka/Location/ListMaps.hs b/gen/Amazonka/Location/ListMaps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListMaps.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.Location.ListMaps
+-- 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 map resources in your AWS account.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.ListMaps
+  ( -- * Creating a Request
+    ListMaps (..),
+    newListMaps,
+
+    -- * Request Lenses
+    listMaps_maxResults,
+    listMaps_nextToken,
+
+    -- * Destructuring the Response
+    ListMapsResponse (..),
+    newListMapsResponse,
+
+    -- * Response Lenses
+    listMapsResponse_nextToken,
+    listMapsResponse_httpStatus,
+    listMapsResponse_entries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMaps' smart constructor.
+data ListMaps = ListMaps'
+  { -- | An optional limit for the number of resources returned in a single call.
+    --
+    -- Default value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMaps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listMaps_maxResults' - An optional limit for the number of resources returned in a single call.
+--
+-- Default value: @100@
+--
+-- 'nextToken', 'listMaps_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+newListMaps ::
+  ListMaps
+newListMaps =
+  ListMaps'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An optional limit for the number of resources returned in a single call.
+--
+-- Default value: @100@
+listMaps_maxResults :: Lens.Lens' ListMaps (Prelude.Maybe Prelude.Natural)
+listMaps_maxResults = Lens.lens (\ListMaps' {maxResults} -> maxResults) (\s@ListMaps' {} a -> s {maxResults = a} :: ListMaps)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+listMaps_nextToken :: Lens.Lens' ListMaps (Prelude.Maybe Prelude.Text)
+listMaps_nextToken = Lens.lens (\ListMaps' {nextToken} -> nextToken) (\s@ListMaps' {} a -> s {nextToken = a} :: ListMaps)
+
+instance Core.AWSPager ListMaps where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listMapsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listMapsResponse_entries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listMaps_nextToken
+          Lens..~ rs
+          Lens.^? listMapsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListMaps where
+  type AWSResponse ListMaps = ListMapsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMapsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListMaps where
+  hashWithSalt _salt ListMaps' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListMaps where
+  rnf ListMaps' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListMaps where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListMaps where
+  toJSON ListMaps' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListMaps where
+  toPath = Prelude.const "/maps/v0/list-maps"
+
+instance Data.ToQuery ListMaps where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListMapsResponse' smart constructor.
+data ListMapsResponse = ListMapsResponse'
+  { -- | A pagination token indicating there are additional pages available. You
+    -- can use the token in a following request to fetch the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains a list of maps in your AWS account
+    entries :: [ListMapsResponseEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMapsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listMapsResponse_nextToken' - A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+--
+-- 'httpStatus', 'listMapsResponse_httpStatus' - The response's http status code.
+--
+-- 'entries', 'listMapsResponse_entries' - Contains a list of maps in your AWS account
+newListMapsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMapsResponse
+newListMapsResponse pHttpStatus_ =
+  ListMapsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entries = Prelude.mempty
+    }
+
+-- | A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+listMapsResponse_nextToken :: Lens.Lens' ListMapsResponse (Prelude.Maybe Prelude.Text)
+listMapsResponse_nextToken = Lens.lens (\ListMapsResponse' {nextToken} -> nextToken) (\s@ListMapsResponse' {} a -> s {nextToken = a} :: ListMapsResponse)
+
+-- | The response's http status code.
+listMapsResponse_httpStatus :: Lens.Lens' ListMapsResponse Prelude.Int
+listMapsResponse_httpStatus = Lens.lens (\ListMapsResponse' {httpStatus} -> httpStatus) (\s@ListMapsResponse' {} a -> s {httpStatus = a} :: ListMapsResponse)
+
+-- | Contains a list of maps in your AWS account
+listMapsResponse_entries :: Lens.Lens' ListMapsResponse [ListMapsResponseEntry]
+listMapsResponse_entries = Lens.lens (\ListMapsResponse' {entries} -> entries) (\s@ListMapsResponse' {} a -> s {entries = a} :: ListMapsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListMapsResponse where
+  rnf ListMapsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entries
diff --git a/gen/Amazonka/Location/ListPlaceIndexes.hs b/gen/Amazonka/Location/ListPlaceIndexes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListPlaceIndexes.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.Location.ListPlaceIndexes
+-- 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 place index resources in your AWS account.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.ListPlaceIndexes
+  ( -- * Creating a Request
+    ListPlaceIndexes (..),
+    newListPlaceIndexes,
+
+    -- * Request Lenses
+    listPlaceIndexes_maxResults,
+    listPlaceIndexes_nextToken,
+
+    -- * Destructuring the Response
+    ListPlaceIndexesResponse (..),
+    newListPlaceIndexesResponse,
+
+    -- * Response Lenses
+    listPlaceIndexesResponse_nextToken,
+    listPlaceIndexesResponse_httpStatus,
+    listPlaceIndexesResponse_entries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPlaceIndexes' smart constructor.
+data ListPlaceIndexes = ListPlaceIndexes'
+  { -- | An optional limit for the maximum number of results returned in a single
+    -- call.
+    --
+    -- Default value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPlaceIndexes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listPlaceIndexes_maxResults' - An optional limit for the maximum number of results returned in a single
+-- call.
+--
+-- Default value: @100@
+--
+-- 'nextToken', 'listPlaceIndexes_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+newListPlaceIndexes ::
+  ListPlaceIndexes
+newListPlaceIndexes =
+  ListPlaceIndexes'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An optional limit for the maximum number of results returned in a single
+-- call.
+--
+-- Default value: @100@
+listPlaceIndexes_maxResults :: Lens.Lens' ListPlaceIndexes (Prelude.Maybe Prelude.Natural)
+listPlaceIndexes_maxResults = Lens.lens (\ListPlaceIndexes' {maxResults} -> maxResults) (\s@ListPlaceIndexes' {} a -> s {maxResults = a} :: ListPlaceIndexes)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+listPlaceIndexes_nextToken :: Lens.Lens' ListPlaceIndexes (Prelude.Maybe Prelude.Text)
+listPlaceIndexes_nextToken = Lens.lens (\ListPlaceIndexes' {nextToken} -> nextToken) (\s@ListPlaceIndexes' {} a -> s {nextToken = a} :: ListPlaceIndexes)
+
+instance Core.AWSPager ListPlaceIndexes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPlaceIndexesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listPlaceIndexesResponse_entries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPlaceIndexes_nextToken
+          Lens..~ rs
+          Lens.^? listPlaceIndexesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPlaceIndexes where
+  type
+    AWSResponse ListPlaceIndexes =
+      ListPlaceIndexesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPlaceIndexesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListPlaceIndexes where
+  hashWithSalt _salt ListPlaceIndexes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListPlaceIndexes where
+  rnf ListPlaceIndexes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListPlaceIndexes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPlaceIndexes where
+  toJSON ListPlaceIndexes' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListPlaceIndexes where
+  toPath = Prelude.const "/places/v0/list-indexes"
+
+instance Data.ToQuery ListPlaceIndexes where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListPlaceIndexesResponse' smart constructor.
+data ListPlaceIndexesResponse = ListPlaceIndexesResponse'
+  { -- | A pagination token indicating that there are additional pages available.
+    -- You can use the token in a new request to fetch the next page of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Lists the place index resources that exist in your AWS account
+    entries :: [ListPlaceIndexesResponseEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPlaceIndexesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listPlaceIndexesResponse_nextToken' - A pagination token indicating that there are additional pages available.
+-- You can use the token in a new request to fetch the next page of
+-- results.
+--
+-- 'httpStatus', 'listPlaceIndexesResponse_httpStatus' - The response's http status code.
+--
+-- 'entries', 'listPlaceIndexesResponse_entries' - Lists the place index resources that exist in your AWS account
+newListPlaceIndexesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPlaceIndexesResponse
+newListPlaceIndexesResponse pHttpStatus_ =
+  ListPlaceIndexesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entries = Prelude.mempty
+    }
+
+-- | A pagination token indicating that there are additional pages available.
+-- You can use the token in a new request to fetch the next page of
+-- results.
+listPlaceIndexesResponse_nextToken :: Lens.Lens' ListPlaceIndexesResponse (Prelude.Maybe Prelude.Text)
+listPlaceIndexesResponse_nextToken = Lens.lens (\ListPlaceIndexesResponse' {nextToken} -> nextToken) (\s@ListPlaceIndexesResponse' {} a -> s {nextToken = a} :: ListPlaceIndexesResponse)
+
+-- | The response's http status code.
+listPlaceIndexesResponse_httpStatus :: Lens.Lens' ListPlaceIndexesResponse Prelude.Int
+listPlaceIndexesResponse_httpStatus = Lens.lens (\ListPlaceIndexesResponse' {httpStatus} -> httpStatus) (\s@ListPlaceIndexesResponse' {} a -> s {httpStatus = a} :: ListPlaceIndexesResponse)
+
+-- | Lists the place index resources that exist in your AWS account
+listPlaceIndexesResponse_entries :: Lens.Lens' ListPlaceIndexesResponse [ListPlaceIndexesResponseEntry]
+listPlaceIndexesResponse_entries = Lens.lens (\ListPlaceIndexesResponse' {entries} -> entries) (\s@ListPlaceIndexesResponse' {} a -> s {entries = a} :: ListPlaceIndexesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListPlaceIndexesResponse where
+  rnf ListPlaceIndexesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entries
diff --git a/gen/Amazonka/Location/ListRouteCalculators.hs b/gen/Amazonka/Location/ListRouteCalculators.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListRouteCalculators.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.ListRouteCalculators
+-- 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 route calculator resources in your AWS account.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.ListRouteCalculators
+  ( -- * Creating a Request
+    ListRouteCalculators (..),
+    newListRouteCalculators,
+
+    -- * Request Lenses
+    listRouteCalculators_maxResults,
+    listRouteCalculators_nextToken,
+
+    -- * Destructuring the Response
+    ListRouteCalculatorsResponse (..),
+    newListRouteCalculatorsResponse,
+
+    -- * Response Lenses
+    listRouteCalculatorsResponse_nextToken,
+    listRouteCalculatorsResponse_httpStatus,
+    listRouteCalculatorsResponse_entries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListRouteCalculators' smart constructor.
+data ListRouteCalculators = ListRouteCalculators'
+  { -- | An optional maximum number of results returned in a single call.
+    --
+    -- Default Value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default Value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRouteCalculators' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listRouteCalculators_maxResults' - An optional maximum number of results returned in a single call.
+--
+-- Default Value: @100@
+--
+-- 'nextToken', 'listRouteCalculators_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default Value: @null@
+newListRouteCalculators ::
+  ListRouteCalculators
+newListRouteCalculators =
+  ListRouteCalculators'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An optional maximum number of results returned in a single call.
+--
+-- Default Value: @100@
+listRouteCalculators_maxResults :: Lens.Lens' ListRouteCalculators (Prelude.Maybe Prelude.Natural)
+listRouteCalculators_maxResults = Lens.lens (\ListRouteCalculators' {maxResults} -> maxResults) (\s@ListRouteCalculators' {} a -> s {maxResults = a} :: ListRouteCalculators)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default Value: @null@
+listRouteCalculators_nextToken :: Lens.Lens' ListRouteCalculators (Prelude.Maybe Prelude.Text)
+listRouteCalculators_nextToken = Lens.lens (\ListRouteCalculators' {nextToken} -> nextToken) (\s@ListRouteCalculators' {} a -> s {nextToken = a} :: ListRouteCalculators)
+
+instance Core.AWSPager ListRouteCalculators where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listRouteCalculatorsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listRouteCalculatorsResponse_entries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listRouteCalculators_nextToken
+          Lens..~ rs
+          Lens.^? listRouteCalculatorsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListRouteCalculators where
+  type
+    AWSResponse ListRouteCalculators =
+      ListRouteCalculatorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListRouteCalculatorsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListRouteCalculators where
+  hashWithSalt _salt ListRouteCalculators' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListRouteCalculators where
+  rnf ListRouteCalculators' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListRouteCalculators where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListRouteCalculators where
+  toJSON ListRouteCalculators' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListRouteCalculators where
+  toPath = Prelude.const "/routes/v0/list-calculators"
+
+instance Data.ToQuery ListRouteCalculators where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListRouteCalculatorsResponse' smart constructor.
+data ListRouteCalculatorsResponse = ListRouteCalculatorsResponse'
+  { -- | A pagination token indicating there are additional pages available. You
+    -- can use the token in a subsequent request to fetch the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Lists the route calculator resources that exist in your AWS account
+    entries :: [ListRouteCalculatorsResponseEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRouteCalculatorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listRouteCalculatorsResponse_nextToken' - A pagination token indicating there are additional pages available. You
+-- can use the token in a subsequent request to fetch the next set of
+-- results.
+--
+-- 'httpStatus', 'listRouteCalculatorsResponse_httpStatus' - The response's http status code.
+--
+-- 'entries', 'listRouteCalculatorsResponse_entries' - Lists the route calculator resources that exist in your AWS account
+newListRouteCalculatorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListRouteCalculatorsResponse
+newListRouteCalculatorsResponse pHttpStatus_ =
+  ListRouteCalculatorsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entries = Prelude.mempty
+    }
+
+-- | A pagination token indicating there are additional pages available. You
+-- can use the token in a subsequent request to fetch the next set of
+-- results.
+listRouteCalculatorsResponse_nextToken :: Lens.Lens' ListRouteCalculatorsResponse (Prelude.Maybe Prelude.Text)
+listRouteCalculatorsResponse_nextToken = Lens.lens (\ListRouteCalculatorsResponse' {nextToken} -> nextToken) (\s@ListRouteCalculatorsResponse' {} a -> s {nextToken = a} :: ListRouteCalculatorsResponse)
+
+-- | The response's http status code.
+listRouteCalculatorsResponse_httpStatus :: Lens.Lens' ListRouteCalculatorsResponse Prelude.Int
+listRouteCalculatorsResponse_httpStatus = Lens.lens (\ListRouteCalculatorsResponse' {httpStatus} -> httpStatus) (\s@ListRouteCalculatorsResponse' {} a -> s {httpStatus = a} :: ListRouteCalculatorsResponse)
+
+-- | Lists the route calculator resources that exist in your AWS account
+listRouteCalculatorsResponse_entries :: Lens.Lens' ListRouteCalculatorsResponse [ListRouteCalculatorsResponseEntry]
+listRouteCalculatorsResponse_entries = Lens.lens (\ListRouteCalculatorsResponse' {entries} -> entries) (\s@ListRouteCalculatorsResponse' {} a -> s {entries = a} :: ListRouteCalculatorsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListRouteCalculatorsResponse where
+  rnf ListRouteCalculatorsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entries
diff --git a/gen/Amazonka/Location/ListTagsForResource.hs b/gen/Amazonka/Location/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListTagsForResource.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.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 a list of tags that are applied to the specified Amazon Location
+-- resource.
+module Amazonka.Location.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.Location.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 whose tags you want to
+    -- retrieve.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+    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 whose tags you want to
+-- retrieve.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource whose tags you want to
+-- retrieve.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | Tags that have been applied to the specified resource. Tags are mapped
+    -- from the tag key to the tag value: @\"TagKey\" : \"TagValue\"@.
+    --
+    -- -   Format example: @{\"tag1\" : \"value1\", \"tag2\" : \"value2\"} @
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - Tags that have been applied to the specified resource. Tags are mapped
+-- from the tag key to the tag value: @\"TagKey\" : \"TagValue\"@.
+--
+-- -   Format example: @{\"tag1\" : \"value1\", \"tag2\" : \"value2\"} @
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Tags that have been applied to the specified resource. Tags are mapped
+-- from the tag key to the tag value: @\"TagKey\" : \"TagValue\"@.
+--
+-- -   Format example: @{\"tag1\" : \"value1\", \"tag2\" : \"value2\"} @
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Location/ListTrackerConsumers.hs b/gen/Amazonka/Location/ListTrackerConsumers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListTrackerConsumers.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.ListTrackerConsumers
+-- 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 geofence collections currently associated to the given tracker
+-- resource.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.ListTrackerConsumers
+  ( -- * Creating a Request
+    ListTrackerConsumers (..),
+    newListTrackerConsumers,
+
+    -- * Request Lenses
+    listTrackerConsumers_maxResults,
+    listTrackerConsumers_nextToken,
+    listTrackerConsumers_trackerName,
+
+    -- * Destructuring the Response
+    ListTrackerConsumersResponse (..),
+    newListTrackerConsumersResponse,
+
+    -- * Response Lenses
+    listTrackerConsumersResponse_nextToken,
+    listTrackerConsumersResponse_httpStatus,
+    listTrackerConsumersResponse_consumerArns,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTrackerConsumers' smart constructor.
+data ListTrackerConsumers = ListTrackerConsumers'
+  { -- | An optional limit for the number of resources returned in a single call.
+    --
+    -- Default value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The tracker resource whose associated geofence collections you want to
+    -- list.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTrackerConsumers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTrackerConsumers_maxResults' - An optional limit for the number of resources returned in a single call.
+--
+-- Default value: @100@
+--
+-- 'nextToken', 'listTrackerConsumers_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+--
+-- 'trackerName', 'listTrackerConsumers_trackerName' - The tracker resource whose associated geofence collections you want to
+-- list.
+newListTrackerConsumers ::
+  -- | 'trackerName'
+  Prelude.Text ->
+  ListTrackerConsumers
+newListTrackerConsumers pTrackerName_ =
+  ListTrackerConsumers'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      trackerName = pTrackerName_
+    }
+
+-- | An optional limit for the number of resources returned in a single call.
+--
+-- Default value: @100@
+listTrackerConsumers_maxResults :: Lens.Lens' ListTrackerConsumers (Prelude.Maybe Prelude.Natural)
+listTrackerConsumers_maxResults = Lens.lens (\ListTrackerConsumers' {maxResults} -> maxResults) (\s@ListTrackerConsumers' {} a -> s {maxResults = a} :: ListTrackerConsumers)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+listTrackerConsumers_nextToken :: Lens.Lens' ListTrackerConsumers (Prelude.Maybe Prelude.Text)
+listTrackerConsumers_nextToken = Lens.lens (\ListTrackerConsumers' {nextToken} -> nextToken) (\s@ListTrackerConsumers' {} a -> s {nextToken = a} :: ListTrackerConsumers)
+
+-- | The tracker resource whose associated geofence collections you want to
+-- list.
+listTrackerConsumers_trackerName :: Lens.Lens' ListTrackerConsumers Prelude.Text
+listTrackerConsumers_trackerName = Lens.lens (\ListTrackerConsumers' {trackerName} -> trackerName) (\s@ListTrackerConsumers' {} a -> s {trackerName = a} :: ListTrackerConsumers)
+
+instance Core.AWSPager ListTrackerConsumers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTrackerConsumersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^. listTrackerConsumersResponse_consumerArns
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTrackerConsumers_nextToken
+          Lens..~ rs
+          Lens.^? listTrackerConsumersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTrackerConsumers where
+  type
+    AWSResponse ListTrackerConsumers =
+      ListTrackerConsumersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTrackerConsumersResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "ConsumerArns" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListTrackerConsumers where
+  hashWithSalt _salt ListTrackerConsumers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData ListTrackerConsumers where
+  rnf ListTrackerConsumers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders ListTrackerConsumers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTrackerConsumers where
+  toJSON ListTrackerConsumers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListTrackerConsumers where
+  toPath ListTrackerConsumers' {..} =
+    Prelude.mconcat
+      [ "/tracking/v0/trackers/",
+        Data.toBS trackerName,
+        "/list-consumers"
+      ]
+
+instance Data.ToQuery ListTrackerConsumers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTrackerConsumersResponse' smart constructor.
+data ListTrackerConsumersResponse = ListTrackerConsumersResponse'
+  { -- | A pagination token indicating there are additional pages available. You
+    -- can use the token in a following request to fetch the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains the list of geofence collection ARNs associated to the tracker
+    -- resource.
+    consumerArns :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTrackerConsumersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTrackerConsumersResponse_nextToken' - A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+--
+-- 'httpStatus', 'listTrackerConsumersResponse_httpStatus' - The response's http status code.
+--
+-- 'consumerArns', 'listTrackerConsumersResponse_consumerArns' - Contains the list of geofence collection ARNs associated to the tracker
+-- resource.
+newListTrackerConsumersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTrackerConsumersResponse
+newListTrackerConsumersResponse pHttpStatus_ =
+  ListTrackerConsumersResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      consumerArns = Prelude.mempty
+    }
+
+-- | A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+listTrackerConsumersResponse_nextToken :: Lens.Lens' ListTrackerConsumersResponse (Prelude.Maybe Prelude.Text)
+listTrackerConsumersResponse_nextToken = Lens.lens (\ListTrackerConsumersResponse' {nextToken} -> nextToken) (\s@ListTrackerConsumersResponse' {} a -> s {nextToken = a} :: ListTrackerConsumersResponse)
+
+-- | The response's http status code.
+listTrackerConsumersResponse_httpStatus :: Lens.Lens' ListTrackerConsumersResponse Prelude.Int
+listTrackerConsumersResponse_httpStatus = Lens.lens (\ListTrackerConsumersResponse' {httpStatus} -> httpStatus) (\s@ListTrackerConsumersResponse' {} a -> s {httpStatus = a} :: ListTrackerConsumersResponse)
+
+-- | Contains the list of geofence collection ARNs associated to the tracker
+-- resource.
+listTrackerConsumersResponse_consumerArns :: Lens.Lens' ListTrackerConsumersResponse [Prelude.Text]
+listTrackerConsumersResponse_consumerArns = Lens.lens (\ListTrackerConsumersResponse' {consumerArns} -> consumerArns) (\s@ListTrackerConsumersResponse' {} a -> s {consumerArns = a} :: ListTrackerConsumersResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListTrackerConsumersResponse where
+  rnf ListTrackerConsumersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf consumerArns
diff --git a/gen/Amazonka/Location/ListTrackers.hs b/gen/Amazonka/Location/ListTrackers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/ListTrackers.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.Location.ListTrackers
+-- 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 tracker resources in your AWS account.
+--
+-- This operation returns paginated results.
+module Amazonka.Location.ListTrackers
+  ( -- * Creating a Request
+    ListTrackers (..),
+    newListTrackers,
+
+    -- * Request Lenses
+    listTrackers_maxResults,
+    listTrackers_nextToken,
+
+    -- * Destructuring the Response
+    ListTrackersResponse (..),
+    newListTrackersResponse,
+
+    -- * Response Lenses
+    listTrackersResponse_nextToken,
+    listTrackersResponse_httpStatus,
+    listTrackersResponse_entries,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTrackers' smart constructor.
+data ListTrackers = ListTrackers'
+  { -- | An optional limit for the number of resources returned in a single call.
+    --
+    -- Default value: @100@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token specifying which page of results to return in the
+    -- response. If no token is provided, the default page is the first page.
+    --
+    -- Default value: @null@
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTrackers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTrackers_maxResults' - An optional limit for the number of resources returned in a single call.
+--
+-- Default value: @100@
+--
+-- 'nextToken', 'listTrackers_nextToken' - The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+newListTrackers ::
+  ListTrackers
+newListTrackers =
+  ListTrackers'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An optional limit for the number of resources returned in a single call.
+--
+-- Default value: @100@
+listTrackers_maxResults :: Lens.Lens' ListTrackers (Prelude.Maybe Prelude.Natural)
+listTrackers_maxResults = Lens.lens (\ListTrackers' {maxResults} -> maxResults) (\s@ListTrackers' {} a -> s {maxResults = a} :: ListTrackers)
+
+-- | The pagination token specifying which page of results to return in the
+-- response. If no token is provided, the default page is the first page.
+--
+-- Default value: @null@
+listTrackers_nextToken :: Lens.Lens' ListTrackers (Prelude.Maybe Prelude.Text)
+listTrackers_nextToken = Lens.lens (\ListTrackers' {nextToken} -> nextToken) (\s@ListTrackers' {} a -> s {nextToken = a} :: ListTrackers)
+
+instance Core.AWSPager ListTrackers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listTrackersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listTrackersResponse_entries) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listTrackers_nextToken
+          Lens..~ rs
+          Lens.^? listTrackersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListTrackers where
+  type AWSResponse ListTrackers = ListTrackersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTrackersResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Entries" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListTrackers where
+  hashWithSalt _salt ListTrackers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListTrackers where
+  rnf ListTrackers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListTrackers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTrackers where
+  toJSON ListTrackers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListTrackers where
+  toPath = Prelude.const "/tracking/v0/list-trackers"
+
+instance Data.ToQuery ListTrackers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTrackersResponse' smart constructor.
+data ListTrackersResponse = ListTrackersResponse'
+  { -- | A pagination token indicating there are additional pages available. You
+    -- can use the token in a following request to fetch the next set of
+    -- results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Contains tracker resources in your AWS account. Details include tracker
+    -- name, description and timestamps for when the tracker was created and
+    -- last updated.
+    entries :: [ListTrackersResponseEntry]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTrackersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listTrackersResponse_nextToken' - A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+--
+-- 'httpStatus', 'listTrackersResponse_httpStatus' - The response's http status code.
+--
+-- 'entries', 'listTrackersResponse_entries' - Contains tracker resources in your AWS account. Details include tracker
+-- name, description and timestamps for when the tracker was created and
+-- last updated.
+newListTrackersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTrackersResponse
+newListTrackersResponse pHttpStatus_ =
+  ListTrackersResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entries = Prelude.mempty
+    }
+
+-- | A pagination token indicating there are additional pages available. You
+-- can use the token in a following request to fetch the next set of
+-- results.
+listTrackersResponse_nextToken :: Lens.Lens' ListTrackersResponse (Prelude.Maybe Prelude.Text)
+listTrackersResponse_nextToken = Lens.lens (\ListTrackersResponse' {nextToken} -> nextToken) (\s@ListTrackersResponse' {} a -> s {nextToken = a} :: ListTrackersResponse)
+
+-- | The response's http status code.
+listTrackersResponse_httpStatus :: Lens.Lens' ListTrackersResponse Prelude.Int
+listTrackersResponse_httpStatus = Lens.lens (\ListTrackersResponse' {httpStatus} -> httpStatus) (\s@ListTrackersResponse' {} a -> s {httpStatus = a} :: ListTrackersResponse)
+
+-- | Contains tracker resources in your AWS account. Details include tracker
+-- name, description and timestamps for when the tracker was created and
+-- last updated.
+listTrackersResponse_entries :: Lens.Lens' ListTrackersResponse [ListTrackersResponseEntry]
+listTrackersResponse_entries = Lens.lens (\ListTrackersResponse' {entries} -> entries) (\s@ListTrackersResponse' {} a -> s {entries = a} :: ListTrackersResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListTrackersResponse where
+  rnf ListTrackersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entries
diff --git a/gen/Amazonka/Location/PutGeofence.hs b/gen/Amazonka/Location/PutGeofence.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/PutGeofence.hs
@@ -0,0 +1,268 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.PutGeofence
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stores a geofence geometry in a given geofence collection, or updates
+-- the geometry of an existing geofence if a geofence ID is included in the
+-- request.
+module Amazonka.Location.PutGeofence
+  ( -- * Creating a Request
+    PutGeofence (..),
+    newPutGeofence,
+
+    -- * Request Lenses
+    putGeofence_collectionName,
+    putGeofence_geofenceId,
+    putGeofence_geometry,
+
+    -- * Destructuring the Response
+    PutGeofenceResponse (..),
+    newPutGeofenceResponse,
+
+    -- * Response Lenses
+    putGeofenceResponse_httpStatus,
+    putGeofenceResponse_createTime,
+    putGeofenceResponse_geofenceId,
+    putGeofenceResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutGeofence' smart constructor.
+data PutGeofence = PutGeofence'
+  { -- | The geofence collection to store the geofence in.
+    collectionName :: Prelude.Text,
+    -- | An identifier for the geofence. For example, @ExampleGeofence-1@.
+    geofenceId :: Prelude.Text,
+    -- | Contains the details to specify the position of the geofence. Can be
+    -- either a polygon or a circle. Including both will return a validation
+    -- error.
+    --
+    -- Each
+    -- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
+    -- can have a maximum of 1,000 vertices.
+    geometry :: GeofenceGeometry
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutGeofence' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'collectionName', 'putGeofence_collectionName' - The geofence collection to store the geofence in.
+--
+-- 'geofenceId', 'putGeofence_geofenceId' - An identifier for the geofence. For example, @ExampleGeofence-1@.
+--
+-- 'geometry', 'putGeofence_geometry' - Contains the details to specify the position of the geofence. Can be
+-- either a polygon or a circle. Including both will return a validation
+-- error.
+--
+-- Each
+-- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
+-- can have a maximum of 1,000 vertices.
+newPutGeofence ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'geofenceId'
+  Prelude.Text ->
+  -- | 'geometry'
+  GeofenceGeometry ->
+  PutGeofence
+newPutGeofence
+  pCollectionName_
+  pGeofenceId_
+  pGeometry_ =
+    PutGeofence'
+      { collectionName = pCollectionName_,
+        geofenceId = pGeofenceId_,
+        geometry = pGeometry_
+      }
+
+-- | The geofence collection to store the geofence in.
+putGeofence_collectionName :: Lens.Lens' PutGeofence Prelude.Text
+putGeofence_collectionName = Lens.lens (\PutGeofence' {collectionName} -> collectionName) (\s@PutGeofence' {} a -> s {collectionName = a} :: PutGeofence)
+
+-- | An identifier for the geofence. For example, @ExampleGeofence-1@.
+putGeofence_geofenceId :: Lens.Lens' PutGeofence Prelude.Text
+putGeofence_geofenceId = Lens.lens (\PutGeofence' {geofenceId} -> geofenceId) (\s@PutGeofence' {} a -> s {geofenceId = a} :: PutGeofence)
+
+-- | Contains the details to specify the position of the geofence. Can be
+-- either a polygon or a circle. Including both will return a validation
+-- error.
+--
+-- Each
+-- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
+-- can have a maximum of 1,000 vertices.
+putGeofence_geometry :: Lens.Lens' PutGeofence GeofenceGeometry
+putGeofence_geometry = Lens.lens (\PutGeofence' {geometry} -> geometry) (\s@PutGeofence' {} a -> s {geometry = a} :: PutGeofence)
+
+instance Core.AWSRequest PutGeofence where
+  type AWSResponse PutGeofence = PutGeofenceResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutGeofenceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CreateTime")
+            Prelude.<*> (x Data..:> "GeofenceId")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable PutGeofence where
+  hashWithSalt _salt PutGeofence' {..} =
+    _salt
+      `Prelude.hashWithSalt` collectionName
+      `Prelude.hashWithSalt` geofenceId
+      `Prelude.hashWithSalt` geometry
+
+instance Prelude.NFData PutGeofence where
+  rnf PutGeofence' {..} =
+    Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf geofenceId
+      `Prelude.seq` Prelude.rnf geometry
+
+instance Data.ToHeaders PutGeofence where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutGeofence where
+  toJSON PutGeofence' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Geometry" Data..= geometry)]
+      )
+
+instance Data.ToPath PutGeofence where
+  toPath PutGeofence' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName,
+        "/geofences/",
+        Data.toBS geofenceId
+      ]
+
+instance Data.ToQuery PutGeofence where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutGeofenceResponse' smart constructor.
+data PutGeofenceResponse = PutGeofenceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The timestamp for when the geofence was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    createTime :: Data.ISO8601,
+    -- | The geofence identifier entered in the request.
+    geofenceId :: Prelude.Text,
+    -- | The timestamp for when the geofence was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutGeofenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putGeofenceResponse_httpStatus' - The response's http status code.
+--
+-- 'createTime', 'putGeofenceResponse_createTime' - The timestamp for when the geofence was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+--
+-- 'geofenceId', 'putGeofenceResponse_geofenceId' - The geofence identifier entered in the request.
+--
+-- 'updateTime', 'putGeofenceResponse_updateTime' - The timestamp for when the geofence was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newPutGeofenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'geofenceId'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  PutGeofenceResponse
+newPutGeofenceResponse
+  pHttpStatus_
+  pCreateTime_
+  pGeofenceId_
+  pUpdateTime_ =
+    PutGeofenceResponse'
+      { httpStatus = pHttpStatus_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        geofenceId = pGeofenceId_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The response's http status code.
+putGeofenceResponse_httpStatus :: Lens.Lens' PutGeofenceResponse Prelude.Int
+putGeofenceResponse_httpStatus = Lens.lens (\PutGeofenceResponse' {httpStatus} -> httpStatus) (\s@PutGeofenceResponse' {} a -> s {httpStatus = a} :: PutGeofenceResponse)
+
+-- | The timestamp for when the geofence was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+putGeofenceResponse_createTime :: Lens.Lens' PutGeofenceResponse Prelude.UTCTime
+putGeofenceResponse_createTime = Lens.lens (\PutGeofenceResponse' {createTime} -> createTime) (\s@PutGeofenceResponse' {} a -> s {createTime = a} :: PutGeofenceResponse) Prelude.. Data._Time
+
+-- | The geofence identifier entered in the request.
+putGeofenceResponse_geofenceId :: Lens.Lens' PutGeofenceResponse Prelude.Text
+putGeofenceResponse_geofenceId = Lens.lens (\PutGeofenceResponse' {geofenceId} -> geofenceId) (\s@PutGeofenceResponse' {} a -> s {geofenceId = a} :: PutGeofenceResponse)
+
+-- | The timestamp for when the geofence was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+putGeofenceResponse_updateTime :: Lens.Lens' PutGeofenceResponse Prelude.UTCTime
+putGeofenceResponse_updateTime = Lens.lens (\PutGeofenceResponse' {updateTime} -> updateTime) (\s@PutGeofenceResponse' {} a -> s {updateTime = a} :: PutGeofenceResponse) Prelude.. Data._Time
+
+instance Prelude.NFData PutGeofenceResponse where
+  rnf PutGeofenceResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf geofenceId
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/SearchPlaceIndexForPosition.hs b/gen/Amazonka/Location/SearchPlaceIndexForPosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/SearchPlaceIndexForPosition.hs
@@ -0,0 +1,329 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.SearchPlaceIndexForPosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Reverse geocodes a given coordinate and returns a legible address.
+-- Allows you to search for Places or points of interest near a given
+-- position.
+module Amazonka.Location.SearchPlaceIndexForPosition
+  ( -- * Creating a Request
+    SearchPlaceIndexForPosition (..),
+    newSearchPlaceIndexForPosition,
+
+    -- * Request Lenses
+    searchPlaceIndexForPosition_language,
+    searchPlaceIndexForPosition_maxResults,
+    searchPlaceIndexForPosition_indexName,
+    searchPlaceIndexForPosition_position,
+
+    -- * Destructuring the Response
+    SearchPlaceIndexForPositionResponse (..),
+    newSearchPlaceIndexForPositionResponse,
+
+    -- * Response Lenses
+    searchPlaceIndexForPositionResponse_httpStatus,
+    searchPlaceIndexForPositionResponse_results,
+    searchPlaceIndexForPositionResponse_summary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchPlaceIndexForPosition' smart constructor.
+data SearchPlaceIndexForPosition = SearchPlaceIndexForPosition'
+  { -- | The preferred language used to return results. The value must be a valid
+    -- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+    -- @en@ for English.
+    --
+    -- This setting affects the languages used in the results, but not the
+    -- results themselves. If no language is specified, or not supported for a
+    -- particular result, the partner automatically chooses a language for the
+    -- result.
+    --
+    -- For an example, we\'ll use the Greek language. You search for a location
+    -- around Athens, Greece, with the @language@ parameter set to @en@. The
+    -- @city@ in the results will most likely be returned as @Athens@.
+    --
+    -- If you set the @language@ parameter to @el@, for Greek, then the @city@
+    -- in the results will more likely be returned as @Αθήνα@.
+    --
+    -- If the data provider does not have a value for Greek, the result will be
+    -- in a language that the provider does support.
+    language :: Prelude.Maybe Prelude.Text,
+    -- | An optional parameter. The maximum number of results returned per
+    -- request.
+    --
+    -- Default value: @50@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the place index resource you want to use for the search.
+    indexName :: Prelude.Text,
+    -- | Specifies the longitude and latitude of the position to query.
+    --
+    -- This parameter must contain a pair of numbers. The first number
+    -- represents the X coordinate, or longitude; the second number represents
+    -- the Y coordinate, or latitude.
+    --
+    -- For example, @[-123.1174, 49.2847]@ represents a position with longitude
+    -- @-123.1174@ and latitude @49.2847@.
+    position :: Data.Sensitive (Prelude.NonEmpty Prelude.Double)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForPosition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'language', 'searchPlaceIndexForPosition_language' - The preferred language used to return results. The value must be a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- This setting affects the languages used in the results, but not the
+-- results themselves. If no language is specified, or not supported for a
+-- particular result, the partner automatically chooses a language for the
+-- result.
+--
+-- For an example, we\'ll use the Greek language. You search for a location
+-- around Athens, Greece, with the @language@ parameter set to @en@. The
+-- @city@ in the results will most likely be returned as @Athens@.
+--
+-- If you set the @language@ parameter to @el@, for Greek, then the @city@
+-- in the results will more likely be returned as @Αθήνα@.
+--
+-- If the data provider does not have a value for Greek, the result will be
+-- in a language that the provider does support.
+--
+-- 'maxResults', 'searchPlaceIndexForPosition_maxResults' - An optional parameter. The maximum number of results returned per
+-- request.
+--
+-- Default value: @50@
+--
+-- 'indexName', 'searchPlaceIndexForPosition_indexName' - The name of the place index resource you want to use for the search.
+--
+-- 'position', 'searchPlaceIndexForPosition_position' - Specifies the longitude and latitude of the position to query.
+--
+-- This parameter must contain a pair of numbers. The first number
+-- represents the X coordinate, or longitude; the second number represents
+-- the Y coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents a position with longitude
+-- @-123.1174@ and latitude @49.2847@.
+newSearchPlaceIndexForPosition ::
+  -- | 'indexName'
+  Prelude.Text ->
+  -- | 'position'
+  Prelude.NonEmpty Prelude.Double ->
+  SearchPlaceIndexForPosition
+newSearchPlaceIndexForPosition pIndexName_ pPosition_ =
+  SearchPlaceIndexForPosition'
+    { language =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      indexName = pIndexName_,
+      position =
+        Data._Sensitive
+          Prelude.. Lens.coerced
+          Lens.# pPosition_
+    }
+
+-- | The preferred language used to return results. The value must be a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- This setting affects the languages used in the results, but not the
+-- results themselves. If no language is specified, or not supported for a
+-- particular result, the partner automatically chooses a language for the
+-- result.
+--
+-- For an example, we\'ll use the Greek language. You search for a location
+-- around Athens, Greece, with the @language@ parameter set to @en@. The
+-- @city@ in the results will most likely be returned as @Athens@.
+--
+-- If you set the @language@ parameter to @el@, for Greek, then the @city@
+-- in the results will more likely be returned as @Αθήνα@.
+--
+-- If the data provider does not have a value for Greek, the result will be
+-- in a language that the provider does support.
+searchPlaceIndexForPosition_language :: Lens.Lens' SearchPlaceIndexForPosition (Prelude.Maybe Prelude.Text)
+searchPlaceIndexForPosition_language = Lens.lens (\SearchPlaceIndexForPosition' {language} -> language) (\s@SearchPlaceIndexForPosition' {} a -> s {language = a} :: SearchPlaceIndexForPosition)
+
+-- | An optional parameter. The maximum number of results returned per
+-- request.
+--
+-- Default value: @50@
+searchPlaceIndexForPosition_maxResults :: Lens.Lens' SearchPlaceIndexForPosition (Prelude.Maybe Prelude.Natural)
+searchPlaceIndexForPosition_maxResults = Lens.lens (\SearchPlaceIndexForPosition' {maxResults} -> maxResults) (\s@SearchPlaceIndexForPosition' {} a -> s {maxResults = a} :: SearchPlaceIndexForPosition)
+
+-- | The name of the place index resource you want to use for the search.
+searchPlaceIndexForPosition_indexName :: Lens.Lens' SearchPlaceIndexForPosition Prelude.Text
+searchPlaceIndexForPosition_indexName = Lens.lens (\SearchPlaceIndexForPosition' {indexName} -> indexName) (\s@SearchPlaceIndexForPosition' {} a -> s {indexName = a} :: SearchPlaceIndexForPosition)
+
+-- | Specifies the longitude and latitude of the position to query.
+--
+-- This parameter must contain a pair of numbers. The first number
+-- represents the X coordinate, or longitude; the second number represents
+-- the Y coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents a position with longitude
+-- @-123.1174@ and latitude @49.2847@.
+searchPlaceIndexForPosition_position :: Lens.Lens' SearchPlaceIndexForPosition (Prelude.NonEmpty Prelude.Double)
+searchPlaceIndexForPosition_position = Lens.lens (\SearchPlaceIndexForPosition' {position} -> position) (\s@SearchPlaceIndexForPosition' {} a -> s {position = a} :: SearchPlaceIndexForPosition) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest SearchPlaceIndexForPosition where
+  type
+    AWSResponse SearchPlaceIndexForPosition =
+      SearchPlaceIndexForPositionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchPlaceIndexForPositionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Results" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "Summary")
+      )
+
+instance Prelude.Hashable SearchPlaceIndexForPosition where
+  hashWithSalt _salt SearchPlaceIndexForPosition' {..} =
+    _salt
+      `Prelude.hashWithSalt` language
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` indexName
+      `Prelude.hashWithSalt` position
+
+instance Prelude.NFData SearchPlaceIndexForPosition where
+  rnf SearchPlaceIndexForPosition' {..} =
+    Prelude.rnf language
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf indexName
+      `Prelude.seq` Prelude.rnf position
+
+instance Data.ToHeaders SearchPlaceIndexForPosition where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchPlaceIndexForPosition where
+  toJSON SearchPlaceIndexForPosition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Language" Data..=) Prelude.<$> language,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            Prelude.Just ("Position" Data..= position)
+          ]
+      )
+
+instance Data.ToPath SearchPlaceIndexForPosition where
+  toPath SearchPlaceIndexForPosition' {..} =
+    Prelude.mconcat
+      [ "/places/v0/indexes/",
+        Data.toBS indexName,
+        "/search/position"
+      ]
+
+instance Data.ToQuery SearchPlaceIndexForPosition where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchPlaceIndexForPositionResponse' smart constructor.
+data SearchPlaceIndexForPositionResponse = SearchPlaceIndexForPositionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Returns a list of Places closest to the specified position. Each result
+    -- contains additional information about the Places returned.
+    results :: [SearchForPositionResult],
+    -- | Contains a summary of the request. Echoes the input values for
+    -- @Position@, @Language@, @MaxResults@, and the @DataSource@ of the place
+    -- index.
+    summary :: SearchPlaceIndexForPositionSummary
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForPositionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchPlaceIndexForPositionResponse_httpStatus' - The response's http status code.
+--
+-- 'results', 'searchPlaceIndexForPositionResponse_results' - Returns a list of Places closest to the specified position. Each result
+-- contains additional information about the Places returned.
+--
+-- 'summary', 'searchPlaceIndexForPositionResponse_summary' - Contains a summary of the request. Echoes the input values for
+-- @Position@, @Language@, @MaxResults@, and the @DataSource@ of the place
+-- index.
+newSearchPlaceIndexForPositionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'summary'
+  SearchPlaceIndexForPositionSummary ->
+  SearchPlaceIndexForPositionResponse
+newSearchPlaceIndexForPositionResponse
+  pHttpStatus_
+  pSummary_ =
+    SearchPlaceIndexForPositionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        results = Prelude.mempty,
+        summary = pSummary_
+      }
+
+-- | The response's http status code.
+searchPlaceIndexForPositionResponse_httpStatus :: Lens.Lens' SearchPlaceIndexForPositionResponse Prelude.Int
+searchPlaceIndexForPositionResponse_httpStatus = Lens.lens (\SearchPlaceIndexForPositionResponse' {httpStatus} -> httpStatus) (\s@SearchPlaceIndexForPositionResponse' {} a -> s {httpStatus = a} :: SearchPlaceIndexForPositionResponse)
+
+-- | Returns a list of Places closest to the specified position. Each result
+-- contains additional information about the Places returned.
+searchPlaceIndexForPositionResponse_results :: Lens.Lens' SearchPlaceIndexForPositionResponse [SearchForPositionResult]
+searchPlaceIndexForPositionResponse_results = Lens.lens (\SearchPlaceIndexForPositionResponse' {results} -> results) (\s@SearchPlaceIndexForPositionResponse' {} a -> s {results = a} :: SearchPlaceIndexForPositionResponse) Prelude.. Lens.coerced
+
+-- | Contains a summary of the request. Echoes the input values for
+-- @Position@, @Language@, @MaxResults@, and the @DataSource@ of the place
+-- index.
+searchPlaceIndexForPositionResponse_summary :: Lens.Lens' SearchPlaceIndexForPositionResponse SearchPlaceIndexForPositionSummary
+searchPlaceIndexForPositionResponse_summary = Lens.lens (\SearchPlaceIndexForPositionResponse' {summary} -> summary) (\s@SearchPlaceIndexForPositionResponse' {} a -> s {summary = a} :: SearchPlaceIndexForPositionResponse)
+
+instance
+  Prelude.NFData
+    SearchPlaceIndexForPositionResponse
+  where
+  rnf SearchPlaceIndexForPositionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf results
+      `Prelude.seq` Prelude.rnf summary
diff --git a/gen/Amazonka/Location/SearchPlaceIndexForSuggestions.hs b/gen/Amazonka/Location/SearchPlaceIndexForSuggestions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/SearchPlaceIndexForSuggestions.hs
@@ -0,0 +1,466 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.SearchPlaceIndexForSuggestions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates suggestions for addresses and points of interest based on
+-- partial or misspelled free-form text. This operation is also known as
+-- autocomplete, autosuggest, or fuzzy matching.
+--
+-- Optional parameters let you narrow your search results by bounding box
+-- or country, or bias your search toward a specific position on the globe.
+--
+-- You can search for suggested place names near a specified position by
+-- using @BiasPosition@, or filter results within a bounding box by using
+-- @FilterBBox@. These parameters are mutually exclusive; using both
+-- @BiasPosition@ and @FilterBBox@ in the same command returns an error.
+module Amazonka.Location.SearchPlaceIndexForSuggestions
+  ( -- * Creating a Request
+    SearchPlaceIndexForSuggestions (..),
+    newSearchPlaceIndexForSuggestions,
+
+    -- * Request Lenses
+    searchPlaceIndexForSuggestions_biasPosition,
+    searchPlaceIndexForSuggestions_filterBBox,
+    searchPlaceIndexForSuggestions_filterCountries,
+    searchPlaceIndexForSuggestions_language,
+    searchPlaceIndexForSuggestions_maxResults,
+    searchPlaceIndexForSuggestions_indexName,
+    searchPlaceIndexForSuggestions_text,
+
+    -- * Destructuring the Response
+    SearchPlaceIndexForSuggestionsResponse (..),
+    newSearchPlaceIndexForSuggestionsResponse,
+
+    -- * Response Lenses
+    searchPlaceIndexForSuggestionsResponse_httpStatus,
+    searchPlaceIndexForSuggestionsResponse_results,
+    searchPlaceIndexForSuggestionsResponse_summary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchPlaceIndexForSuggestions' smart constructor.
+data SearchPlaceIndexForSuggestions = SearchPlaceIndexForSuggestions'
+  { -- | An optional parameter that indicates a preference for place suggestions
+    -- that are closer to a specified position.
+    --
+    -- If provided, this parameter must contain a pair of numbers. The first
+    -- number represents the X coordinate, or longitude; the second number
+    -- represents the Y coordinate, or latitude.
+    --
+    -- For example, @[-123.1174, 49.2847]@ represents the position with
+    -- longitude @-123.1174@ and latitude @49.2847@.
+    --
+    -- @BiasPosition@ and @FilterBBox@ are mutually exclusive. Specifying both
+    -- options results in an error.
+    biasPosition :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | An optional parameter that limits the search results by returning only
+    -- suggestions within a specified bounding box.
+    --
+    -- If provided, this parameter must contain a total of four consecutive
+    -- numbers in two pairs. The first pair of numbers represents the X and Y
+    -- coordinates (longitude and latitude, respectively) of the southwest
+    -- corner of the bounding box; the second pair of numbers represents the X
+    -- and Y coordinates (longitude and latitude, respectively) of the
+    -- northeast corner of the bounding box.
+    --
+    -- For example, @[-12.7935, -37.4835, -12.0684, -36.9542]@ represents a
+    -- bounding box where the southwest corner has longitude @-12.7935@ and
+    -- latitude @-37.4835@, and the northeast corner has longitude @-12.0684@
+    -- and latitude @-36.9542@.
+    --
+    -- @FilterBBox@ and @BiasPosition@ are mutually exclusive. Specifying both
+    -- options results in an error.
+    filterBBox :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | An optional parameter that limits the search results by returning only
+    -- suggestions within the provided list of countries.
+    --
+    -- -   Use the <https://www.iso.org/iso-3166-country-codes.html ISO 3166>
+    --     3-digit country code. For example, Australia uses three upper-case
+    --     characters: @AUS@.
+    filterCountries :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The preferred language used to return results. The value must be a valid
+    -- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+    -- @en@ for English.
+    --
+    -- This setting affects the languages used in the results. If no language
+    -- is specified, or not supported for a particular result, the partner
+    -- automatically chooses a language for the result.
+    --
+    -- For an example, we\'ll use the Greek language. You search for
+    -- @Athens, Gr@ to get suggestions with the @language@ parameter set to
+    -- @en@. The results found will most likely be returned as
+    -- @Athens, Greece@.
+    --
+    -- If you set the @language@ parameter to @el@, for Greek, then the result
+    -- found will more likely be returned as @Αθήνα, Ελλάδα@.
+    --
+    -- If the data provider does not have a value for Greek, the result will be
+    -- in a language that the provider does support.
+    language :: Prelude.Maybe Prelude.Text,
+    -- | An optional parameter. The maximum number of results returned per
+    -- request.
+    --
+    -- The default: @5@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the place index resource you want to use for the search.
+    indexName :: Prelude.Text,
+    -- | The free-form partial text to use to generate place suggestions. For
+    -- example, @eiffel tow@.
+    text :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForSuggestions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'biasPosition', 'searchPlaceIndexForSuggestions_biasPosition' - An optional parameter that indicates a preference for place suggestions
+-- that are closer to a specified position.
+--
+-- If provided, this parameter must contain a pair of numbers. The first
+-- number represents the X coordinate, or longitude; the second number
+-- represents the Y coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents the position with
+-- longitude @-123.1174@ and latitude @49.2847@.
+--
+-- @BiasPosition@ and @FilterBBox@ are mutually exclusive. Specifying both
+-- options results in an error.
+--
+-- 'filterBBox', 'searchPlaceIndexForSuggestions_filterBBox' - An optional parameter that limits the search results by returning only
+-- suggestions within a specified bounding box.
+--
+-- If provided, this parameter must contain a total of four consecutive
+-- numbers in two pairs. The first pair of numbers represents the X and Y
+-- coordinates (longitude and latitude, respectively) of the southwest
+-- corner of the bounding box; the second pair of numbers represents the X
+-- and Y coordinates (longitude and latitude, respectively) of the
+-- northeast corner of the bounding box.
+--
+-- For example, @[-12.7935, -37.4835, -12.0684, -36.9542]@ represents a
+-- bounding box where the southwest corner has longitude @-12.7935@ and
+-- latitude @-37.4835@, and the northeast corner has longitude @-12.0684@
+-- and latitude @-36.9542@.
+--
+-- @FilterBBox@ and @BiasPosition@ are mutually exclusive. Specifying both
+-- options results in an error.
+--
+-- 'filterCountries', 'searchPlaceIndexForSuggestions_filterCountries' - An optional parameter that limits the search results by returning only
+-- suggestions within the provided list of countries.
+--
+-- -   Use the <https://www.iso.org/iso-3166-country-codes.html ISO 3166>
+--     3-digit country code. For example, Australia uses three upper-case
+--     characters: @AUS@.
+--
+-- 'language', 'searchPlaceIndexForSuggestions_language' - The preferred language used to return results. The value must be a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- This setting affects the languages used in the results. If no language
+-- is specified, or not supported for a particular result, the partner
+-- automatically chooses a language for the result.
+--
+-- For an example, we\'ll use the Greek language. You search for
+-- @Athens, Gr@ to get suggestions with the @language@ parameter set to
+-- @en@. The results found will most likely be returned as
+-- @Athens, Greece@.
+--
+-- If you set the @language@ parameter to @el@, for Greek, then the result
+-- found will more likely be returned as @Αθήνα, Ελλάδα@.
+--
+-- If the data provider does not have a value for Greek, the result will be
+-- in a language that the provider does support.
+--
+-- 'maxResults', 'searchPlaceIndexForSuggestions_maxResults' - An optional parameter. The maximum number of results returned per
+-- request.
+--
+-- The default: @5@
+--
+-- 'indexName', 'searchPlaceIndexForSuggestions_indexName' - The name of the place index resource you want to use for the search.
+--
+-- 'text', 'searchPlaceIndexForSuggestions_text' - The free-form partial text to use to generate place suggestions. For
+-- example, @eiffel tow@.
+newSearchPlaceIndexForSuggestions ::
+  -- | 'indexName'
+  Prelude.Text ->
+  -- | 'text'
+  Prelude.Text ->
+  SearchPlaceIndexForSuggestions
+newSearchPlaceIndexForSuggestions pIndexName_ pText_ =
+  SearchPlaceIndexForSuggestions'
+    { biasPosition =
+        Prelude.Nothing,
+      filterBBox = Prelude.Nothing,
+      filterCountries = Prelude.Nothing,
+      language = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      indexName = pIndexName_,
+      text = Data._Sensitive Lens.# pText_
+    }
+
+-- | An optional parameter that indicates a preference for place suggestions
+-- that are closer to a specified position.
+--
+-- If provided, this parameter must contain a pair of numbers. The first
+-- number represents the X coordinate, or longitude; the second number
+-- represents the Y coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents the position with
+-- longitude @-123.1174@ and latitude @49.2847@.
+--
+-- @BiasPosition@ and @FilterBBox@ are mutually exclusive. Specifying both
+-- options results in an error.
+searchPlaceIndexForSuggestions_biasPosition :: Lens.Lens' SearchPlaceIndexForSuggestions (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForSuggestions_biasPosition = Lens.lens (\SearchPlaceIndexForSuggestions' {biasPosition} -> biasPosition) (\s@SearchPlaceIndexForSuggestions' {} a -> s {biasPosition = a} :: SearchPlaceIndexForSuggestions) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | An optional parameter that limits the search results by returning only
+-- suggestions within a specified bounding box.
+--
+-- If provided, this parameter must contain a total of four consecutive
+-- numbers in two pairs. The first pair of numbers represents the X and Y
+-- coordinates (longitude and latitude, respectively) of the southwest
+-- corner of the bounding box; the second pair of numbers represents the X
+-- and Y coordinates (longitude and latitude, respectively) of the
+-- northeast corner of the bounding box.
+--
+-- For example, @[-12.7935, -37.4835, -12.0684, -36.9542]@ represents a
+-- bounding box where the southwest corner has longitude @-12.7935@ and
+-- latitude @-37.4835@, and the northeast corner has longitude @-12.0684@
+-- and latitude @-36.9542@.
+--
+-- @FilterBBox@ and @BiasPosition@ are mutually exclusive. Specifying both
+-- options results in an error.
+searchPlaceIndexForSuggestions_filterBBox :: Lens.Lens' SearchPlaceIndexForSuggestions (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForSuggestions_filterBBox = Lens.lens (\SearchPlaceIndexForSuggestions' {filterBBox} -> filterBBox) (\s@SearchPlaceIndexForSuggestions' {} a -> s {filterBBox = a} :: SearchPlaceIndexForSuggestions) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | An optional parameter that limits the search results by returning only
+-- suggestions within the provided list of countries.
+--
+-- -   Use the <https://www.iso.org/iso-3166-country-codes.html ISO 3166>
+--     3-digit country code. For example, Australia uses three upper-case
+--     characters: @AUS@.
+searchPlaceIndexForSuggestions_filterCountries :: Lens.Lens' SearchPlaceIndexForSuggestions (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+searchPlaceIndexForSuggestions_filterCountries = Lens.lens (\SearchPlaceIndexForSuggestions' {filterCountries} -> filterCountries) (\s@SearchPlaceIndexForSuggestions' {} a -> s {filterCountries = a} :: SearchPlaceIndexForSuggestions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The preferred language used to return results. The value must be a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- This setting affects the languages used in the results. If no language
+-- is specified, or not supported for a particular result, the partner
+-- automatically chooses a language for the result.
+--
+-- For an example, we\'ll use the Greek language. You search for
+-- @Athens, Gr@ to get suggestions with the @language@ parameter set to
+-- @en@. The results found will most likely be returned as
+-- @Athens, Greece@.
+--
+-- If you set the @language@ parameter to @el@, for Greek, then the result
+-- found will more likely be returned as @Αθήνα, Ελλάδα@.
+--
+-- If the data provider does not have a value for Greek, the result will be
+-- in a language that the provider does support.
+searchPlaceIndexForSuggestions_language :: Lens.Lens' SearchPlaceIndexForSuggestions (Prelude.Maybe Prelude.Text)
+searchPlaceIndexForSuggestions_language = Lens.lens (\SearchPlaceIndexForSuggestions' {language} -> language) (\s@SearchPlaceIndexForSuggestions' {} a -> s {language = a} :: SearchPlaceIndexForSuggestions)
+
+-- | An optional parameter. The maximum number of results returned per
+-- request.
+--
+-- The default: @5@
+searchPlaceIndexForSuggestions_maxResults :: Lens.Lens' SearchPlaceIndexForSuggestions (Prelude.Maybe Prelude.Natural)
+searchPlaceIndexForSuggestions_maxResults = Lens.lens (\SearchPlaceIndexForSuggestions' {maxResults} -> maxResults) (\s@SearchPlaceIndexForSuggestions' {} a -> s {maxResults = a} :: SearchPlaceIndexForSuggestions)
+
+-- | The name of the place index resource you want to use for the search.
+searchPlaceIndexForSuggestions_indexName :: Lens.Lens' SearchPlaceIndexForSuggestions Prelude.Text
+searchPlaceIndexForSuggestions_indexName = Lens.lens (\SearchPlaceIndexForSuggestions' {indexName} -> indexName) (\s@SearchPlaceIndexForSuggestions' {} a -> s {indexName = a} :: SearchPlaceIndexForSuggestions)
+
+-- | The free-form partial text to use to generate place suggestions. For
+-- example, @eiffel tow@.
+searchPlaceIndexForSuggestions_text :: Lens.Lens' SearchPlaceIndexForSuggestions Prelude.Text
+searchPlaceIndexForSuggestions_text = Lens.lens (\SearchPlaceIndexForSuggestions' {text} -> text) (\s@SearchPlaceIndexForSuggestions' {} a -> s {text = a} :: SearchPlaceIndexForSuggestions) Prelude.. Data._Sensitive
+
+instance
+  Core.AWSRequest
+    SearchPlaceIndexForSuggestions
+  where
+  type
+    AWSResponse SearchPlaceIndexForSuggestions =
+      SearchPlaceIndexForSuggestionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchPlaceIndexForSuggestionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Results" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "Summary")
+      )
+
+instance
+  Prelude.Hashable
+    SearchPlaceIndexForSuggestions
+  where
+  hashWithSalt
+    _salt
+    SearchPlaceIndexForSuggestions' {..} =
+      _salt
+        `Prelude.hashWithSalt` biasPosition
+        `Prelude.hashWithSalt` filterBBox
+        `Prelude.hashWithSalt` filterCountries
+        `Prelude.hashWithSalt` language
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` indexName
+        `Prelude.hashWithSalt` text
+
+instance
+  Prelude.NFData
+    SearchPlaceIndexForSuggestions
+  where
+  rnf SearchPlaceIndexForSuggestions' {..} =
+    Prelude.rnf biasPosition
+      `Prelude.seq` Prelude.rnf filterBBox
+      `Prelude.seq` Prelude.rnf filterCountries
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf indexName
+      `Prelude.seq` Prelude.rnf text
+
+instance
+  Data.ToHeaders
+    SearchPlaceIndexForSuggestions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchPlaceIndexForSuggestions where
+  toJSON SearchPlaceIndexForSuggestions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BiasPosition" Data..=) Prelude.<$> biasPosition,
+            ("FilterBBox" Data..=) Prelude.<$> filterBBox,
+            ("FilterCountries" Data..=)
+              Prelude.<$> filterCountries,
+            ("Language" Data..=) Prelude.<$> language,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            Prelude.Just ("Text" Data..= text)
+          ]
+      )
+
+instance Data.ToPath SearchPlaceIndexForSuggestions where
+  toPath SearchPlaceIndexForSuggestions' {..} =
+    Prelude.mconcat
+      [ "/places/v0/indexes/",
+        Data.toBS indexName,
+        "/search/suggestions"
+      ]
+
+instance Data.ToQuery SearchPlaceIndexForSuggestions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchPlaceIndexForSuggestionsResponse' smart constructor.
+data SearchPlaceIndexForSuggestionsResponse = SearchPlaceIndexForSuggestionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of place suggestions that best match the search text.
+    results :: [SearchForSuggestionsResult],
+    -- | Contains a summary of the request. Echoes the input values for
+    -- @BiasPosition@, @FilterBBox@, @FilterCountries@, @Language@,
+    -- @MaxResults@, and @Text@. Also includes the @DataSource@ of the place
+    -- index.
+    summary :: SearchPlaceIndexForSuggestionsSummary
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForSuggestionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchPlaceIndexForSuggestionsResponse_httpStatus' - The response's http status code.
+--
+-- 'results', 'searchPlaceIndexForSuggestionsResponse_results' - A list of place suggestions that best match the search text.
+--
+-- 'summary', 'searchPlaceIndexForSuggestionsResponse_summary' - Contains a summary of the request. Echoes the input values for
+-- @BiasPosition@, @FilterBBox@, @FilterCountries@, @Language@,
+-- @MaxResults@, and @Text@. Also includes the @DataSource@ of the place
+-- index.
+newSearchPlaceIndexForSuggestionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'summary'
+  SearchPlaceIndexForSuggestionsSummary ->
+  SearchPlaceIndexForSuggestionsResponse
+newSearchPlaceIndexForSuggestionsResponse
+  pHttpStatus_
+  pSummary_ =
+    SearchPlaceIndexForSuggestionsResponse'
+      { httpStatus =
+          pHttpStatus_,
+        results = Prelude.mempty,
+        summary = pSummary_
+      }
+
+-- | The response's http status code.
+searchPlaceIndexForSuggestionsResponse_httpStatus :: Lens.Lens' SearchPlaceIndexForSuggestionsResponse Prelude.Int
+searchPlaceIndexForSuggestionsResponse_httpStatus = Lens.lens (\SearchPlaceIndexForSuggestionsResponse' {httpStatus} -> httpStatus) (\s@SearchPlaceIndexForSuggestionsResponse' {} a -> s {httpStatus = a} :: SearchPlaceIndexForSuggestionsResponse)
+
+-- | A list of place suggestions that best match the search text.
+searchPlaceIndexForSuggestionsResponse_results :: Lens.Lens' SearchPlaceIndexForSuggestionsResponse [SearchForSuggestionsResult]
+searchPlaceIndexForSuggestionsResponse_results = Lens.lens (\SearchPlaceIndexForSuggestionsResponse' {results} -> results) (\s@SearchPlaceIndexForSuggestionsResponse' {} a -> s {results = a} :: SearchPlaceIndexForSuggestionsResponse) Prelude.. Lens.coerced
+
+-- | Contains a summary of the request. Echoes the input values for
+-- @BiasPosition@, @FilterBBox@, @FilterCountries@, @Language@,
+-- @MaxResults@, and @Text@. Also includes the @DataSource@ of the place
+-- index.
+searchPlaceIndexForSuggestionsResponse_summary :: Lens.Lens' SearchPlaceIndexForSuggestionsResponse SearchPlaceIndexForSuggestionsSummary
+searchPlaceIndexForSuggestionsResponse_summary = Lens.lens (\SearchPlaceIndexForSuggestionsResponse' {summary} -> summary) (\s@SearchPlaceIndexForSuggestionsResponse' {} a -> s {summary = a} :: SearchPlaceIndexForSuggestionsResponse)
+
+instance
+  Prelude.NFData
+    SearchPlaceIndexForSuggestionsResponse
+  where
+  rnf SearchPlaceIndexForSuggestionsResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf results
+      `Prelude.seq` Prelude.rnf summary
diff --git a/gen/Amazonka/Location/SearchPlaceIndexForText.hs b/gen/Amazonka/Location/SearchPlaceIndexForText.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/SearchPlaceIndexForText.hs
@@ -0,0 +1,470 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.SearchPlaceIndexForText
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Geocodes free-form text, such as an address, name, city, or region to
+-- allow you to search for Places or points of interest.
+--
+-- Optional parameters let you narrow your search results by bounding box
+-- or country, or bias your search toward a specific position on the globe.
+--
+-- You can search for places near a given position using @BiasPosition@, or
+-- filter results within a bounding box using @FilterBBox@. Providing both
+-- parameters simultaneously returns an error.
+--
+-- Search results are returned in order of highest to lowest relevance.
+module Amazonka.Location.SearchPlaceIndexForText
+  ( -- * Creating a Request
+    SearchPlaceIndexForText (..),
+    newSearchPlaceIndexForText,
+
+    -- * Request Lenses
+    searchPlaceIndexForText_biasPosition,
+    searchPlaceIndexForText_filterBBox,
+    searchPlaceIndexForText_filterCountries,
+    searchPlaceIndexForText_language,
+    searchPlaceIndexForText_maxResults,
+    searchPlaceIndexForText_indexName,
+    searchPlaceIndexForText_text,
+
+    -- * Destructuring the Response
+    SearchPlaceIndexForTextResponse (..),
+    newSearchPlaceIndexForTextResponse,
+
+    -- * Response Lenses
+    searchPlaceIndexForTextResponse_httpStatus,
+    searchPlaceIndexForTextResponse_results,
+    searchPlaceIndexForTextResponse_summary,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchPlaceIndexForText' smart constructor.
+data SearchPlaceIndexForText = SearchPlaceIndexForText'
+  { -- | An optional parameter that indicates a preference for places that are
+    -- closer to a specified position.
+    --
+    -- If provided, this parameter must contain a pair of numbers. The first
+    -- number represents the X coordinate, or longitude; the second number
+    -- represents the Y coordinate, or latitude.
+    --
+    -- For example, @[-123.1174, 49.2847]@ represents the position with
+    -- longitude @-123.1174@ and latitude @49.2847@.
+    --
+    -- @BiasPosition@ and @FilterBBox@ are mutually exclusive. Specifying both
+    -- options results in an error.
+    biasPosition :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | An optional parameter that limits the search results by returning only
+    -- places that are within the provided bounding box.
+    --
+    -- If provided, this parameter must contain a total of four consecutive
+    -- numbers in two pairs. The first pair of numbers represents the X and Y
+    -- coordinates (longitude and latitude, respectively) of the southwest
+    -- corner of the bounding box; the second pair of numbers represents the X
+    -- and Y coordinates (longitude and latitude, respectively) of the
+    -- northeast corner of the bounding box.
+    --
+    -- For example, @[-12.7935, -37.4835, -12.0684, -36.9542]@ represents a
+    -- bounding box where the southwest corner has longitude @-12.7935@ and
+    -- latitude @-37.4835@, and the northeast corner has longitude @-12.0684@
+    -- and latitude @-36.9542@.
+    --
+    -- @FilterBBox@ and @BiasPosition@ are mutually exclusive. Specifying both
+    -- options results in an error.
+    filterBBox :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | An optional parameter that limits the search results by returning only
+    -- places that are in a specified list of countries.
+    --
+    -- -   Valid values include
+    --     <https://www.iso.org/iso-3166-country-codes.html ISO 3166> 3-digit
+    --     country codes. For example, Australia uses three upper-case
+    --     characters: @AUS@.
+    filterCountries :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The preferred language used to return results. The value must be a valid
+    -- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+    -- @en@ for English.
+    --
+    -- This setting affects the languages used in the results, but not the
+    -- results themselves. If no language is specified, or not supported for a
+    -- particular result, the partner automatically chooses a language for the
+    -- result.
+    --
+    -- For an example, we\'ll use the Greek language. You search for
+    -- @Athens, Greece@, with the @language@ parameter set to @en@. The result
+    -- found will most likely be returned as @Athens@.
+    --
+    -- If you set the @language@ parameter to @el@, for Greek, then the result
+    -- found will more likely be returned as @Αθήνα@.
+    --
+    -- If the data provider does not have a value for Greek, the result will be
+    -- in a language that the provider does support.
+    language :: Prelude.Maybe Prelude.Text,
+    -- | An optional parameter. The maximum number of results returned per
+    -- request.
+    --
+    -- The default: @50@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The name of the place index resource you want to use for the search.
+    indexName :: Prelude.Text,
+    -- | The address, name, city, or region to be used in the search in free-form
+    -- text format. For example, @123 Any Street@.
+    text :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForText' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'biasPosition', 'searchPlaceIndexForText_biasPosition' - An optional parameter that indicates a preference for places that are
+-- closer to a specified position.
+--
+-- If provided, this parameter must contain a pair of numbers. The first
+-- number represents the X coordinate, or longitude; the second number
+-- represents the Y coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents the position with
+-- longitude @-123.1174@ and latitude @49.2847@.
+--
+-- @BiasPosition@ and @FilterBBox@ are mutually exclusive. Specifying both
+-- options results in an error.
+--
+-- 'filterBBox', 'searchPlaceIndexForText_filterBBox' - An optional parameter that limits the search results by returning only
+-- places that are within the provided bounding box.
+--
+-- If provided, this parameter must contain a total of four consecutive
+-- numbers in two pairs. The first pair of numbers represents the X and Y
+-- coordinates (longitude and latitude, respectively) of the southwest
+-- corner of the bounding box; the second pair of numbers represents the X
+-- and Y coordinates (longitude and latitude, respectively) of the
+-- northeast corner of the bounding box.
+--
+-- For example, @[-12.7935, -37.4835, -12.0684, -36.9542]@ represents a
+-- bounding box where the southwest corner has longitude @-12.7935@ and
+-- latitude @-37.4835@, and the northeast corner has longitude @-12.0684@
+-- and latitude @-36.9542@.
+--
+-- @FilterBBox@ and @BiasPosition@ are mutually exclusive. Specifying both
+-- options results in an error.
+--
+-- 'filterCountries', 'searchPlaceIndexForText_filterCountries' - An optional parameter that limits the search results by returning only
+-- places that are in a specified list of countries.
+--
+-- -   Valid values include
+--     <https://www.iso.org/iso-3166-country-codes.html ISO 3166> 3-digit
+--     country codes. For example, Australia uses three upper-case
+--     characters: @AUS@.
+--
+-- 'language', 'searchPlaceIndexForText_language' - The preferred language used to return results. The value must be a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- This setting affects the languages used in the results, but not the
+-- results themselves. If no language is specified, or not supported for a
+-- particular result, the partner automatically chooses a language for the
+-- result.
+--
+-- For an example, we\'ll use the Greek language. You search for
+-- @Athens, Greece@, with the @language@ parameter set to @en@. The result
+-- found will most likely be returned as @Athens@.
+--
+-- If you set the @language@ parameter to @el@, for Greek, then the result
+-- found will more likely be returned as @Αθήνα@.
+--
+-- If the data provider does not have a value for Greek, the result will be
+-- in a language that the provider does support.
+--
+-- 'maxResults', 'searchPlaceIndexForText_maxResults' - An optional parameter. The maximum number of results returned per
+-- request.
+--
+-- The default: @50@
+--
+-- 'indexName', 'searchPlaceIndexForText_indexName' - The name of the place index resource you want to use for the search.
+--
+-- 'text', 'searchPlaceIndexForText_text' - The address, name, city, or region to be used in the search in free-form
+-- text format. For example, @123 Any Street@.
+newSearchPlaceIndexForText ::
+  -- | 'indexName'
+  Prelude.Text ->
+  -- | 'text'
+  Prelude.Text ->
+  SearchPlaceIndexForText
+newSearchPlaceIndexForText pIndexName_ pText_ =
+  SearchPlaceIndexForText'
+    { biasPosition =
+        Prelude.Nothing,
+      filterBBox = Prelude.Nothing,
+      filterCountries = Prelude.Nothing,
+      language = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      indexName = pIndexName_,
+      text = Data._Sensitive Lens.# pText_
+    }
+
+-- | An optional parameter that indicates a preference for places that are
+-- closer to a specified position.
+--
+-- If provided, this parameter must contain a pair of numbers. The first
+-- number represents the X coordinate, or longitude; the second number
+-- represents the Y coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents the position with
+-- longitude @-123.1174@ and latitude @49.2847@.
+--
+-- @BiasPosition@ and @FilterBBox@ are mutually exclusive. Specifying both
+-- options results in an error.
+searchPlaceIndexForText_biasPosition :: Lens.Lens' SearchPlaceIndexForText (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForText_biasPosition = Lens.lens (\SearchPlaceIndexForText' {biasPosition} -> biasPosition) (\s@SearchPlaceIndexForText' {} a -> s {biasPosition = a} :: SearchPlaceIndexForText) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | An optional parameter that limits the search results by returning only
+-- places that are within the provided bounding box.
+--
+-- If provided, this parameter must contain a total of four consecutive
+-- numbers in two pairs. The first pair of numbers represents the X and Y
+-- coordinates (longitude and latitude, respectively) of the southwest
+-- corner of the bounding box; the second pair of numbers represents the X
+-- and Y coordinates (longitude and latitude, respectively) of the
+-- northeast corner of the bounding box.
+--
+-- For example, @[-12.7935, -37.4835, -12.0684, -36.9542]@ represents a
+-- bounding box where the southwest corner has longitude @-12.7935@ and
+-- latitude @-37.4835@, and the northeast corner has longitude @-12.0684@
+-- and latitude @-36.9542@.
+--
+-- @FilterBBox@ and @BiasPosition@ are mutually exclusive. Specifying both
+-- options results in an error.
+searchPlaceIndexForText_filterBBox :: Lens.Lens' SearchPlaceIndexForText (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForText_filterBBox = Lens.lens (\SearchPlaceIndexForText' {filterBBox} -> filterBBox) (\s@SearchPlaceIndexForText' {} a -> s {filterBBox = a} :: SearchPlaceIndexForText) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | An optional parameter that limits the search results by returning only
+-- places that are in a specified list of countries.
+--
+-- -   Valid values include
+--     <https://www.iso.org/iso-3166-country-codes.html ISO 3166> 3-digit
+--     country codes. For example, Australia uses three upper-case
+--     characters: @AUS@.
+searchPlaceIndexForText_filterCountries :: Lens.Lens' SearchPlaceIndexForText (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+searchPlaceIndexForText_filterCountries = Lens.lens (\SearchPlaceIndexForText' {filterCountries} -> filterCountries) (\s@SearchPlaceIndexForText' {} a -> s {filterCountries = a} :: SearchPlaceIndexForText) Prelude.. Lens.mapping Lens.coerced
+
+-- | The preferred language used to return results. The value must be a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- This setting affects the languages used in the results, but not the
+-- results themselves. If no language is specified, or not supported for a
+-- particular result, the partner automatically chooses a language for the
+-- result.
+--
+-- For an example, we\'ll use the Greek language. You search for
+-- @Athens, Greece@, with the @language@ parameter set to @en@. The result
+-- found will most likely be returned as @Athens@.
+--
+-- If you set the @language@ parameter to @el@, for Greek, then the result
+-- found will more likely be returned as @Αθήνα@.
+--
+-- If the data provider does not have a value for Greek, the result will be
+-- in a language that the provider does support.
+searchPlaceIndexForText_language :: Lens.Lens' SearchPlaceIndexForText (Prelude.Maybe Prelude.Text)
+searchPlaceIndexForText_language = Lens.lens (\SearchPlaceIndexForText' {language} -> language) (\s@SearchPlaceIndexForText' {} a -> s {language = a} :: SearchPlaceIndexForText)
+
+-- | An optional parameter. The maximum number of results returned per
+-- request.
+--
+-- The default: @50@
+searchPlaceIndexForText_maxResults :: Lens.Lens' SearchPlaceIndexForText (Prelude.Maybe Prelude.Natural)
+searchPlaceIndexForText_maxResults = Lens.lens (\SearchPlaceIndexForText' {maxResults} -> maxResults) (\s@SearchPlaceIndexForText' {} a -> s {maxResults = a} :: SearchPlaceIndexForText)
+
+-- | The name of the place index resource you want to use for the search.
+searchPlaceIndexForText_indexName :: Lens.Lens' SearchPlaceIndexForText Prelude.Text
+searchPlaceIndexForText_indexName = Lens.lens (\SearchPlaceIndexForText' {indexName} -> indexName) (\s@SearchPlaceIndexForText' {} a -> s {indexName = a} :: SearchPlaceIndexForText)
+
+-- | The address, name, city, or region to be used in the search in free-form
+-- text format. For example, @123 Any Street@.
+searchPlaceIndexForText_text :: Lens.Lens' SearchPlaceIndexForText Prelude.Text
+searchPlaceIndexForText_text = Lens.lens (\SearchPlaceIndexForText' {text} -> text) (\s@SearchPlaceIndexForText' {} a -> s {text = a} :: SearchPlaceIndexForText) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest SearchPlaceIndexForText where
+  type
+    AWSResponse SearchPlaceIndexForText =
+      SearchPlaceIndexForTextResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          SearchPlaceIndexForTextResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "Results" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..:> "Summary")
+      )
+
+instance Prelude.Hashable SearchPlaceIndexForText where
+  hashWithSalt _salt SearchPlaceIndexForText' {..} =
+    _salt
+      `Prelude.hashWithSalt` biasPosition
+      `Prelude.hashWithSalt` filterBBox
+      `Prelude.hashWithSalt` filterCountries
+      `Prelude.hashWithSalt` language
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` indexName
+      `Prelude.hashWithSalt` text
+
+instance Prelude.NFData SearchPlaceIndexForText where
+  rnf SearchPlaceIndexForText' {..} =
+    Prelude.rnf biasPosition
+      `Prelude.seq` Prelude.rnf filterBBox
+      `Prelude.seq` Prelude.rnf filterCountries
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf indexName
+      `Prelude.seq` Prelude.rnf text
+
+instance Data.ToHeaders SearchPlaceIndexForText where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON SearchPlaceIndexForText where
+  toJSON SearchPlaceIndexForText' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BiasPosition" Data..=) Prelude.<$> biasPosition,
+            ("FilterBBox" Data..=) Prelude.<$> filterBBox,
+            ("FilterCountries" Data..=)
+              Prelude.<$> filterCountries,
+            ("Language" Data..=) Prelude.<$> language,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            Prelude.Just ("Text" Data..= text)
+          ]
+      )
+
+instance Data.ToPath SearchPlaceIndexForText where
+  toPath SearchPlaceIndexForText' {..} =
+    Prelude.mconcat
+      [ "/places/v0/indexes/",
+        Data.toBS indexName,
+        "/search/text"
+      ]
+
+instance Data.ToQuery SearchPlaceIndexForText where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newSearchPlaceIndexForTextResponse' smart constructor.
+data SearchPlaceIndexForTextResponse = SearchPlaceIndexForTextResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | A list of Places matching the input text. Each result contains
+    -- additional information about the specific point of interest.
+    --
+    -- Not all response properties are included with all responses. Some
+    -- properties may only be returned by specific data partners.
+    results :: [SearchForTextResult],
+    -- | Contains a summary of the request. Echoes the input values for
+    -- @BiasPosition@, @FilterBBox@, @FilterCountries@, @Language@,
+    -- @MaxResults@, and @Text@. Also includes the @DataSource@ of the place
+    -- index and the bounding box, @ResultBBox@, which surrounds the search
+    -- results.
+    summary :: SearchPlaceIndexForTextSummary
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForTextResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'searchPlaceIndexForTextResponse_httpStatus' - The response's http status code.
+--
+-- 'results', 'searchPlaceIndexForTextResponse_results' - A list of Places matching the input text. Each result contains
+-- additional information about the specific point of interest.
+--
+-- Not all response properties are included with all responses. Some
+-- properties may only be returned by specific data partners.
+--
+-- 'summary', 'searchPlaceIndexForTextResponse_summary' - Contains a summary of the request. Echoes the input values for
+-- @BiasPosition@, @FilterBBox@, @FilterCountries@, @Language@,
+-- @MaxResults@, and @Text@. Also includes the @DataSource@ of the place
+-- index and the bounding box, @ResultBBox@, which surrounds the search
+-- results.
+newSearchPlaceIndexForTextResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'summary'
+  SearchPlaceIndexForTextSummary ->
+  SearchPlaceIndexForTextResponse
+newSearchPlaceIndexForTextResponse
+  pHttpStatus_
+  pSummary_ =
+    SearchPlaceIndexForTextResponse'
+      { httpStatus =
+          pHttpStatus_,
+        results = Prelude.mempty,
+        summary = pSummary_
+      }
+
+-- | The response's http status code.
+searchPlaceIndexForTextResponse_httpStatus :: Lens.Lens' SearchPlaceIndexForTextResponse Prelude.Int
+searchPlaceIndexForTextResponse_httpStatus = Lens.lens (\SearchPlaceIndexForTextResponse' {httpStatus} -> httpStatus) (\s@SearchPlaceIndexForTextResponse' {} a -> s {httpStatus = a} :: SearchPlaceIndexForTextResponse)
+
+-- | A list of Places matching the input text. Each result contains
+-- additional information about the specific point of interest.
+--
+-- Not all response properties are included with all responses. Some
+-- properties may only be returned by specific data partners.
+searchPlaceIndexForTextResponse_results :: Lens.Lens' SearchPlaceIndexForTextResponse [SearchForTextResult]
+searchPlaceIndexForTextResponse_results = Lens.lens (\SearchPlaceIndexForTextResponse' {results} -> results) (\s@SearchPlaceIndexForTextResponse' {} a -> s {results = a} :: SearchPlaceIndexForTextResponse) Prelude.. Lens.coerced
+
+-- | Contains a summary of the request. Echoes the input values for
+-- @BiasPosition@, @FilterBBox@, @FilterCountries@, @Language@,
+-- @MaxResults@, and @Text@. Also includes the @DataSource@ of the place
+-- index and the bounding box, @ResultBBox@, which surrounds the search
+-- results.
+searchPlaceIndexForTextResponse_summary :: Lens.Lens' SearchPlaceIndexForTextResponse SearchPlaceIndexForTextSummary
+searchPlaceIndexForTextResponse_summary = Lens.lens (\SearchPlaceIndexForTextResponse' {summary} -> summary) (\s@SearchPlaceIndexForTextResponse' {} a -> s {summary = a} :: SearchPlaceIndexForTextResponse)
+
+instance
+  Prelude.NFData
+    SearchPlaceIndexForTextResponse
+  where
+  rnf SearchPlaceIndexForTextResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf results
+      `Prelude.seq` Prelude.rnf summary
diff --git a/gen/Amazonka/Location/TagResource.hs b/gen/Amazonka/Location/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/TagResource.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.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)
+--
+-- Assigns one or more tags (key-value pairs) to the specified Amazon
+-- Location Service resource.
+--
+-- >  <p>Tags can help you organize and categorize your resources. You can also use them to scope user permissions, by granting a user permission to access or change only resources with certain tag values.</p> <p>You can use the <code>TagResource</code> operation with an Amazon Location Service resource that already has tags. If you specify a new tag key for the resource, this tag is appended to the tags already associated with the resource. If you specify a tag key that's already associated with the resource, the new tag value that you specify replaces the previous value for that tag. </p> <p>You can associate up to 50 tags with a resource.</p>
+module Amazonka.Location.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.Location.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 whose tags you want to
+    -- update.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+    resourceArn :: Prelude.Text,
+    -- | Applies one or more tags to specific resource. A tag is a key-value pair
+    -- that helps you manage, identify, search, and filter your resources.
+    --
+    -- Format: @\"key\" : \"value\"@
+    --
+    -- Restrictions:
+    --
+    -- -   Maximum 50 tags per resource.
+    --
+    -- -   Each tag key must be unique and must have exactly one associated
+    --     value.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8.
+    --
+    -- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+    --     characters: + - = . _ : \/ \@
+    --
+    -- -   Cannot use \"aws:\" as a prefix for a key.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource whose tags you want to
+-- update.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+--
+-- 'tags', 'tagResource_tags' - Applies one or more tags to specific resource. A tag is a key-value pair
+-- that helps you manage, identify, search, and filter your resources.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource.
+--
+-- -   Each tag key must be unique and must have exactly one associated
+--     value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource whose tags you want to
+-- update.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | Applies one or more tags to specific resource. A tag is a key-value pair
+-- that helps you manage, identify, search, and filter your resources.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- Restrictions:
+--
+-- -   Maximum 50 tags per resource.
+--
+-- -   Each tag key must be unique and must have exactly one associated
+--     value.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Can use alphanumeric characters (A–Z, a–z, 0–9), and the following
+--     characters: + - = . _ : \/ \@
+--
+-- -   Cannot use \"aws:\" as a prefix for a key.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.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
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | 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/Location/Types.hs b/gen/Amazonka/Location/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types.hs
@@ -0,0 +1,577 @@
+{-# 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.Location.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.Location.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _ConflictException,
+    _InternalServerException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _ThrottlingException,
+    _ValidationException,
+
+    -- * BatchItemErrorCode
+    BatchItemErrorCode (..),
+
+    -- * DimensionUnit
+    DimensionUnit (..),
+
+    -- * DistanceUnit
+    DistanceUnit (..),
+
+    -- * IntendedUse
+    IntendedUse (..),
+
+    -- * PositionFiltering
+    PositionFiltering (..),
+
+    -- * PricingPlan
+    PricingPlan (..),
+
+    -- * RouteMatrixErrorCode
+    RouteMatrixErrorCode (..),
+
+    -- * TravelMode
+    TravelMode (..),
+
+    -- * VehicleWeightUnit
+    VehicleWeightUnit (..),
+
+    -- * BatchDeleteDevicePositionHistoryError
+    BatchDeleteDevicePositionHistoryError (..),
+    newBatchDeleteDevicePositionHistoryError,
+    batchDeleteDevicePositionHistoryError_deviceId,
+    batchDeleteDevicePositionHistoryError_error,
+
+    -- * BatchDeleteGeofenceError
+    BatchDeleteGeofenceError (..),
+    newBatchDeleteGeofenceError,
+    batchDeleteGeofenceError_error,
+    batchDeleteGeofenceError_geofenceId,
+
+    -- * BatchEvaluateGeofencesError
+    BatchEvaluateGeofencesError (..),
+    newBatchEvaluateGeofencesError,
+    batchEvaluateGeofencesError_deviceId,
+    batchEvaluateGeofencesError_error,
+    batchEvaluateGeofencesError_sampleTime,
+
+    -- * BatchGetDevicePositionError
+    BatchGetDevicePositionError (..),
+    newBatchGetDevicePositionError,
+    batchGetDevicePositionError_deviceId,
+    batchGetDevicePositionError_error,
+
+    -- * BatchItemError
+    BatchItemError (..),
+    newBatchItemError,
+    batchItemError_code,
+    batchItemError_message,
+
+    -- * BatchPutGeofenceError
+    BatchPutGeofenceError (..),
+    newBatchPutGeofenceError,
+    batchPutGeofenceError_error,
+    batchPutGeofenceError_geofenceId,
+
+    -- * BatchPutGeofenceRequestEntry
+    BatchPutGeofenceRequestEntry (..),
+    newBatchPutGeofenceRequestEntry,
+    batchPutGeofenceRequestEntry_geofenceId,
+    batchPutGeofenceRequestEntry_geometry,
+
+    -- * BatchPutGeofenceSuccess
+    BatchPutGeofenceSuccess (..),
+    newBatchPutGeofenceSuccess,
+    batchPutGeofenceSuccess_createTime,
+    batchPutGeofenceSuccess_geofenceId,
+    batchPutGeofenceSuccess_updateTime,
+
+    -- * BatchUpdateDevicePositionError
+    BatchUpdateDevicePositionError (..),
+    newBatchUpdateDevicePositionError,
+    batchUpdateDevicePositionError_deviceId,
+    batchUpdateDevicePositionError_error,
+    batchUpdateDevicePositionError_sampleTime,
+
+    -- * CalculateRouteCarModeOptions
+    CalculateRouteCarModeOptions (..),
+    newCalculateRouteCarModeOptions,
+    calculateRouteCarModeOptions_avoidFerries,
+    calculateRouteCarModeOptions_avoidTolls,
+
+    -- * CalculateRouteMatrixSummary
+    CalculateRouteMatrixSummary (..),
+    newCalculateRouteMatrixSummary,
+    calculateRouteMatrixSummary_dataSource,
+    calculateRouteMatrixSummary_distanceUnit,
+    calculateRouteMatrixSummary_errorCount,
+    calculateRouteMatrixSummary_routeCount,
+
+    -- * CalculateRouteSummary
+    CalculateRouteSummary (..),
+    newCalculateRouteSummary,
+    calculateRouteSummary_dataSource,
+    calculateRouteSummary_distance,
+    calculateRouteSummary_distanceUnit,
+    calculateRouteSummary_durationSeconds,
+    calculateRouteSummary_routeBBox,
+
+    -- * CalculateRouteTruckModeOptions
+    CalculateRouteTruckModeOptions (..),
+    newCalculateRouteTruckModeOptions,
+    calculateRouteTruckModeOptions_avoidFerries,
+    calculateRouteTruckModeOptions_avoidTolls,
+    calculateRouteTruckModeOptions_dimensions,
+    calculateRouteTruckModeOptions_weight,
+
+    -- * Circle
+    Circle (..),
+    newCircle,
+    circle_center,
+    circle_radius,
+
+    -- * DataSourceConfiguration
+    DataSourceConfiguration (..),
+    newDataSourceConfiguration,
+    dataSourceConfiguration_intendedUse,
+
+    -- * DevicePosition
+    DevicePosition (..),
+    newDevicePosition,
+    devicePosition_accuracy,
+    devicePosition_deviceId,
+    devicePosition_positionProperties,
+    devicePosition_position,
+    devicePosition_receivedTime,
+    devicePosition_sampleTime,
+
+    -- * DevicePositionUpdate
+    DevicePositionUpdate (..),
+    newDevicePositionUpdate,
+    devicePositionUpdate_accuracy,
+    devicePositionUpdate_positionProperties,
+    devicePositionUpdate_deviceId,
+    devicePositionUpdate_position,
+    devicePositionUpdate_sampleTime,
+
+    -- * GeofenceGeometry
+    GeofenceGeometry (..),
+    newGeofenceGeometry,
+    geofenceGeometry_circle,
+    geofenceGeometry_polygon,
+
+    -- * Leg
+    Leg (..),
+    newLeg,
+    leg_geometry,
+    leg_distance,
+    leg_durationSeconds,
+    leg_endPosition,
+    leg_startPosition,
+    leg_steps,
+
+    -- * LegGeometry
+    LegGeometry (..),
+    newLegGeometry,
+    legGeometry_lineString,
+
+    -- * ListDevicePositionsResponseEntry
+    ListDevicePositionsResponseEntry (..),
+    newListDevicePositionsResponseEntry,
+    listDevicePositionsResponseEntry_accuracy,
+    listDevicePositionsResponseEntry_positionProperties,
+    listDevicePositionsResponseEntry_deviceId,
+    listDevicePositionsResponseEntry_position,
+    listDevicePositionsResponseEntry_sampleTime,
+
+    -- * ListGeofenceCollectionsResponseEntry
+    ListGeofenceCollectionsResponseEntry (..),
+    newListGeofenceCollectionsResponseEntry,
+    listGeofenceCollectionsResponseEntry_pricingPlan,
+    listGeofenceCollectionsResponseEntry_pricingPlanDataSource,
+    listGeofenceCollectionsResponseEntry_collectionName,
+    listGeofenceCollectionsResponseEntry_createTime,
+    listGeofenceCollectionsResponseEntry_description,
+    listGeofenceCollectionsResponseEntry_updateTime,
+
+    -- * ListGeofenceResponseEntry
+    ListGeofenceResponseEntry (..),
+    newListGeofenceResponseEntry,
+    listGeofenceResponseEntry_createTime,
+    listGeofenceResponseEntry_geofenceId,
+    listGeofenceResponseEntry_geometry,
+    listGeofenceResponseEntry_status,
+    listGeofenceResponseEntry_updateTime,
+
+    -- * ListMapsResponseEntry
+    ListMapsResponseEntry (..),
+    newListMapsResponseEntry,
+    listMapsResponseEntry_pricingPlan,
+    listMapsResponseEntry_createTime,
+    listMapsResponseEntry_dataSource,
+    listMapsResponseEntry_description,
+    listMapsResponseEntry_mapName,
+    listMapsResponseEntry_updateTime,
+
+    -- * ListPlaceIndexesResponseEntry
+    ListPlaceIndexesResponseEntry (..),
+    newListPlaceIndexesResponseEntry,
+    listPlaceIndexesResponseEntry_pricingPlan,
+    listPlaceIndexesResponseEntry_createTime,
+    listPlaceIndexesResponseEntry_dataSource,
+    listPlaceIndexesResponseEntry_description,
+    listPlaceIndexesResponseEntry_indexName,
+    listPlaceIndexesResponseEntry_updateTime,
+
+    -- * ListRouteCalculatorsResponseEntry
+    ListRouteCalculatorsResponseEntry (..),
+    newListRouteCalculatorsResponseEntry,
+    listRouteCalculatorsResponseEntry_pricingPlan,
+    listRouteCalculatorsResponseEntry_calculatorName,
+    listRouteCalculatorsResponseEntry_createTime,
+    listRouteCalculatorsResponseEntry_dataSource,
+    listRouteCalculatorsResponseEntry_description,
+    listRouteCalculatorsResponseEntry_updateTime,
+
+    -- * ListTrackersResponseEntry
+    ListTrackersResponseEntry (..),
+    newListTrackersResponseEntry,
+    listTrackersResponseEntry_pricingPlan,
+    listTrackersResponseEntry_pricingPlanDataSource,
+    listTrackersResponseEntry_createTime,
+    listTrackersResponseEntry_description,
+    listTrackersResponseEntry_trackerName,
+    listTrackersResponseEntry_updateTime,
+
+    -- * MapConfiguration
+    MapConfiguration (..),
+    newMapConfiguration,
+    mapConfiguration_style,
+
+    -- * Place
+    Place (..),
+    newPlace,
+    place_addressNumber,
+    place_country,
+    place_interpolated,
+    place_label,
+    place_municipality,
+    place_neighborhood,
+    place_postalCode,
+    place_region,
+    place_street,
+    place_subRegion,
+    place_timeZone,
+    place_unitNumber,
+    place_unitType,
+    place_geometry,
+
+    -- * PlaceGeometry
+    PlaceGeometry (..),
+    newPlaceGeometry,
+    placeGeometry_point,
+
+    -- * PositionalAccuracy
+    PositionalAccuracy (..),
+    newPositionalAccuracy,
+    positionalAccuracy_horizontal,
+
+    -- * RouteMatrixEntry
+    RouteMatrixEntry (..),
+    newRouteMatrixEntry,
+    routeMatrixEntry_distance,
+    routeMatrixEntry_durationSeconds,
+    routeMatrixEntry_error,
+
+    -- * RouteMatrixEntryError
+    RouteMatrixEntryError (..),
+    newRouteMatrixEntryError,
+    routeMatrixEntryError_message,
+    routeMatrixEntryError_code,
+
+    -- * SearchForPositionResult
+    SearchForPositionResult (..),
+    newSearchForPositionResult,
+    searchForPositionResult_placeId,
+    searchForPositionResult_distance,
+    searchForPositionResult_place,
+
+    -- * SearchForSuggestionsResult
+    SearchForSuggestionsResult (..),
+    newSearchForSuggestionsResult,
+    searchForSuggestionsResult_placeId,
+    searchForSuggestionsResult_text,
+
+    -- * SearchForTextResult
+    SearchForTextResult (..),
+    newSearchForTextResult,
+    searchForTextResult_distance,
+    searchForTextResult_placeId,
+    searchForTextResult_relevance,
+    searchForTextResult_place,
+
+    -- * SearchPlaceIndexForPositionSummary
+    SearchPlaceIndexForPositionSummary (..),
+    newSearchPlaceIndexForPositionSummary,
+    searchPlaceIndexForPositionSummary_language,
+    searchPlaceIndexForPositionSummary_maxResults,
+    searchPlaceIndexForPositionSummary_dataSource,
+    searchPlaceIndexForPositionSummary_position,
+
+    -- * SearchPlaceIndexForSuggestionsSummary
+    SearchPlaceIndexForSuggestionsSummary (..),
+    newSearchPlaceIndexForSuggestionsSummary,
+    searchPlaceIndexForSuggestionsSummary_biasPosition,
+    searchPlaceIndexForSuggestionsSummary_filterBBox,
+    searchPlaceIndexForSuggestionsSummary_filterCountries,
+    searchPlaceIndexForSuggestionsSummary_language,
+    searchPlaceIndexForSuggestionsSummary_maxResults,
+    searchPlaceIndexForSuggestionsSummary_dataSource,
+    searchPlaceIndexForSuggestionsSummary_text,
+
+    -- * SearchPlaceIndexForTextSummary
+    SearchPlaceIndexForTextSummary (..),
+    newSearchPlaceIndexForTextSummary,
+    searchPlaceIndexForTextSummary_biasPosition,
+    searchPlaceIndexForTextSummary_filterBBox,
+    searchPlaceIndexForTextSummary_filterCountries,
+    searchPlaceIndexForTextSummary_language,
+    searchPlaceIndexForTextSummary_maxResults,
+    searchPlaceIndexForTextSummary_resultBBox,
+    searchPlaceIndexForTextSummary_dataSource,
+    searchPlaceIndexForTextSummary_text,
+
+    -- * Step
+    Step (..),
+    newStep,
+    step_geometryOffset,
+    step_distance,
+    step_durationSeconds,
+    step_endPosition,
+    step_startPosition,
+
+    -- * TimeZone
+    TimeZone (..),
+    newTimeZone,
+    timeZone_offset,
+    timeZone_name,
+
+    -- * TruckDimensions
+    TruckDimensions (..),
+    newTruckDimensions,
+    truckDimensions_height,
+    truckDimensions_length,
+    truckDimensions_unit,
+    truckDimensions_width,
+
+    -- * TruckWeight
+    TruckWeight (..),
+    newTruckWeight,
+    truckWeight_total,
+    truckWeight_unit,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.Location.Types.BatchDeleteDevicePositionHistoryError
+import Amazonka.Location.Types.BatchDeleteGeofenceError
+import Amazonka.Location.Types.BatchEvaluateGeofencesError
+import Amazonka.Location.Types.BatchGetDevicePositionError
+import Amazonka.Location.Types.BatchItemError
+import Amazonka.Location.Types.BatchItemErrorCode
+import Amazonka.Location.Types.BatchPutGeofenceError
+import Amazonka.Location.Types.BatchPutGeofenceRequestEntry
+import Amazonka.Location.Types.BatchPutGeofenceSuccess
+import Amazonka.Location.Types.BatchUpdateDevicePositionError
+import Amazonka.Location.Types.CalculateRouteCarModeOptions
+import Amazonka.Location.Types.CalculateRouteMatrixSummary
+import Amazonka.Location.Types.CalculateRouteSummary
+import Amazonka.Location.Types.CalculateRouteTruckModeOptions
+import Amazonka.Location.Types.Circle
+import Amazonka.Location.Types.DataSourceConfiguration
+import Amazonka.Location.Types.DevicePosition
+import Amazonka.Location.Types.DevicePositionUpdate
+import Amazonka.Location.Types.DimensionUnit
+import Amazonka.Location.Types.DistanceUnit
+import Amazonka.Location.Types.GeofenceGeometry
+import Amazonka.Location.Types.IntendedUse
+import Amazonka.Location.Types.Leg
+import Amazonka.Location.Types.LegGeometry
+import Amazonka.Location.Types.ListDevicePositionsResponseEntry
+import Amazonka.Location.Types.ListGeofenceCollectionsResponseEntry
+import Amazonka.Location.Types.ListGeofenceResponseEntry
+import Amazonka.Location.Types.ListMapsResponseEntry
+import Amazonka.Location.Types.ListPlaceIndexesResponseEntry
+import Amazonka.Location.Types.ListRouteCalculatorsResponseEntry
+import Amazonka.Location.Types.ListTrackersResponseEntry
+import Amazonka.Location.Types.MapConfiguration
+import Amazonka.Location.Types.Place
+import Amazonka.Location.Types.PlaceGeometry
+import Amazonka.Location.Types.PositionFiltering
+import Amazonka.Location.Types.PositionalAccuracy
+import Amazonka.Location.Types.PricingPlan
+import Amazonka.Location.Types.RouteMatrixEntry
+import Amazonka.Location.Types.RouteMatrixEntryError
+import Amazonka.Location.Types.RouteMatrixErrorCode
+import Amazonka.Location.Types.SearchForPositionResult
+import Amazonka.Location.Types.SearchForSuggestionsResult
+import Amazonka.Location.Types.SearchForTextResult
+import Amazonka.Location.Types.SearchPlaceIndexForPositionSummary
+import Amazonka.Location.Types.SearchPlaceIndexForSuggestionsSummary
+import Amazonka.Location.Types.SearchPlaceIndexForTextSummary
+import Amazonka.Location.Types.Step
+import Amazonka.Location.Types.TimeZone
+import Amazonka.Location.Types.TravelMode
+import Amazonka.Location.Types.TruckDimensions
+import Amazonka.Location.Types.TruckWeight
+import Amazonka.Location.Types.VehicleWeightUnit
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2020-11-19@ of the Amazon Location Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Location",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "geo",
+      Core.signingName = "geo",
+      Core.version = "2020-11-19",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Location",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The request was denied because of insufficient access or permissions.
+-- Check with an administrator to verify your permissions.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The request was unsuccessful because of a conflict.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The request has failed to process because of an unknown server error,
+-- exception, or failure.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | The resource that you\'ve entered was not found in your AWS account.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The operation was denied because the request would exceed the maximum
+-- <https://docs.aws.amazon.com/location/latest/developerguide/location-quotas.html quota>
+-- set for Amazon Location Service.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request was denied because of request throttling.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The input failed to meet the constraints specified by the AWS service.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/Location/Types/BatchDeleteDevicePositionHistoryError.hs b/gen/Amazonka/Location/Types/BatchDeleteDevicePositionHistoryError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchDeleteDevicePositionHistoryError.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchDeleteDevicePositionHistoryError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchDeleteDevicePositionHistoryError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.BatchItemError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the tracker resource details.
+--
+-- /See:/ 'newBatchDeleteDevicePositionHistoryError' smart constructor.
+data BatchDeleteDevicePositionHistoryError = BatchDeleteDevicePositionHistoryError'
+  { -- | The ID of the device for this position.
+    deviceId :: Prelude.Text,
+    error :: BatchItemError
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteDevicePositionHistoryError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceId', 'batchDeleteDevicePositionHistoryError_deviceId' - The ID of the device for this position.
+--
+-- 'error', 'batchDeleteDevicePositionHistoryError_error' - Undocumented member.
+newBatchDeleteDevicePositionHistoryError ::
+  -- | 'deviceId'
+  Prelude.Text ->
+  -- | 'error'
+  BatchItemError ->
+  BatchDeleteDevicePositionHistoryError
+newBatchDeleteDevicePositionHistoryError
+  pDeviceId_
+  pError_ =
+    BatchDeleteDevicePositionHistoryError'
+      { deviceId =
+          pDeviceId_,
+        error = pError_
+      }
+
+-- | The ID of the device for this position.
+batchDeleteDevicePositionHistoryError_deviceId :: Lens.Lens' BatchDeleteDevicePositionHistoryError Prelude.Text
+batchDeleteDevicePositionHistoryError_deviceId = Lens.lens (\BatchDeleteDevicePositionHistoryError' {deviceId} -> deviceId) (\s@BatchDeleteDevicePositionHistoryError' {} a -> s {deviceId = a} :: BatchDeleteDevicePositionHistoryError)
+
+-- | Undocumented member.
+batchDeleteDevicePositionHistoryError_error :: Lens.Lens' BatchDeleteDevicePositionHistoryError BatchItemError
+batchDeleteDevicePositionHistoryError_error = Lens.lens (\BatchDeleteDevicePositionHistoryError' {error} -> error) (\s@BatchDeleteDevicePositionHistoryError' {} a -> s {error = a} :: BatchDeleteDevicePositionHistoryError)
+
+instance
+  Data.FromJSON
+    BatchDeleteDevicePositionHistoryError
+  where
+  parseJSON =
+    Data.withObject
+      "BatchDeleteDevicePositionHistoryError"
+      ( \x ->
+          BatchDeleteDevicePositionHistoryError'
+            Prelude.<$> (x Data..: "DeviceId")
+            Prelude.<*> (x Data..: "Error")
+      )
+
+instance
+  Prelude.Hashable
+    BatchDeleteDevicePositionHistoryError
+  where
+  hashWithSalt
+    _salt
+    BatchDeleteDevicePositionHistoryError' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceId
+        `Prelude.hashWithSalt` error
+
+instance
+  Prelude.NFData
+    BatchDeleteDevicePositionHistoryError
+  where
+  rnf BatchDeleteDevicePositionHistoryError' {..} =
+    Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf error
diff --git a/gen/Amazonka/Location/Types/BatchDeleteGeofenceError.hs b/gen/Amazonka/Location/Types/BatchDeleteGeofenceError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchDeleteGeofenceError.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchDeleteGeofenceError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchDeleteGeofenceError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.BatchItemError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains error details for each geofence that failed to delete from the
+-- geofence collection.
+--
+-- /See:/ 'newBatchDeleteGeofenceError' smart constructor.
+data BatchDeleteGeofenceError = BatchDeleteGeofenceError'
+  { -- | Contains details associated to the batch error.
+    error :: BatchItemError,
+    -- | The geofence associated with the error message.
+    geofenceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteGeofenceError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'batchDeleteGeofenceError_error' - Contains details associated to the batch error.
+--
+-- 'geofenceId', 'batchDeleteGeofenceError_geofenceId' - The geofence associated with the error message.
+newBatchDeleteGeofenceError ::
+  -- | 'error'
+  BatchItemError ->
+  -- | 'geofenceId'
+  Prelude.Text ->
+  BatchDeleteGeofenceError
+newBatchDeleteGeofenceError pError_ pGeofenceId_ =
+  BatchDeleteGeofenceError'
+    { error = pError_,
+      geofenceId = pGeofenceId_
+    }
+
+-- | Contains details associated to the batch error.
+batchDeleteGeofenceError_error :: Lens.Lens' BatchDeleteGeofenceError BatchItemError
+batchDeleteGeofenceError_error = Lens.lens (\BatchDeleteGeofenceError' {error} -> error) (\s@BatchDeleteGeofenceError' {} a -> s {error = a} :: BatchDeleteGeofenceError)
+
+-- | The geofence associated with the error message.
+batchDeleteGeofenceError_geofenceId :: Lens.Lens' BatchDeleteGeofenceError Prelude.Text
+batchDeleteGeofenceError_geofenceId = Lens.lens (\BatchDeleteGeofenceError' {geofenceId} -> geofenceId) (\s@BatchDeleteGeofenceError' {} a -> s {geofenceId = a} :: BatchDeleteGeofenceError)
+
+instance Data.FromJSON BatchDeleteGeofenceError where
+  parseJSON =
+    Data.withObject
+      "BatchDeleteGeofenceError"
+      ( \x ->
+          BatchDeleteGeofenceError'
+            Prelude.<$> (x Data..: "Error")
+            Prelude.<*> (x Data..: "GeofenceId")
+      )
+
+instance Prelude.Hashable BatchDeleteGeofenceError where
+  hashWithSalt _salt BatchDeleteGeofenceError' {..} =
+    _salt
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` geofenceId
+
+instance Prelude.NFData BatchDeleteGeofenceError where
+  rnf BatchDeleteGeofenceError' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf geofenceId
diff --git a/gen/Amazonka/Location/Types/BatchEvaluateGeofencesError.hs b/gen/Amazonka/Location/Types/BatchEvaluateGeofencesError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchEvaluateGeofencesError.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchEvaluateGeofencesError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchEvaluateGeofencesError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.BatchItemError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains error details for each device that failed to evaluate its
+-- position against the geofences in a given geofence collection.
+--
+-- /See:/ 'newBatchEvaluateGeofencesError' smart constructor.
+data BatchEvaluateGeofencesError = BatchEvaluateGeofencesError'
+  { -- | The device associated with the position evaluation error.
+    deviceId :: Prelude.Text,
+    -- | Contains details associated to the batch error.
+    error :: BatchItemError,
+    -- | Specifies a timestamp for when the error occurred in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    sampleTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchEvaluateGeofencesError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceId', 'batchEvaluateGeofencesError_deviceId' - The device associated with the position evaluation error.
+--
+-- 'error', 'batchEvaluateGeofencesError_error' - Contains details associated to the batch error.
+--
+-- 'sampleTime', 'batchEvaluateGeofencesError_sampleTime' - Specifies a timestamp for when the error occurred in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newBatchEvaluateGeofencesError ::
+  -- | 'deviceId'
+  Prelude.Text ->
+  -- | 'error'
+  BatchItemError ->
+  -- | 'sampleTime'
+  Prelude.UTCTime ->
+  BatchEvaluateGeofencesError
+newBatchEvaluateGeofencesError
+  pDeviceId_
+  pError_
+  pSampleTime_ =
+    BatchEvaluateGeofencesError'
+      { deviceId = pDeviceId_,
+        error = pError_,
+        sampleTime = Data._Time Lens.# pSampleTime_
+      }
+
+-- | The device associated with the position evaluation error.
+batchEvaluateGeofencesError_deviceId :: Lens.Lens' BatchEvaluateGeofencesError Prelude.Text
+batchEvaluateGeofencesError_deviceId = Lens.lens (\BatchEvaluateGeofencesError' {deviceId} -> deviceId) (\s@BatchEvaluateGeofencesError' {} a -> s {deviceId = a} :: BatchEvaluateGeofencesError)
+
+-- | Contains details associated to the batch error.
+batchEvaluateGeofencesError_error :: Lens.Lens' BatchEvaluateGeofencesError BatchItemError
+batchEvaluateGeofencesError_error = Lens.lens (\BatchEvaluateGeofencesError' {error} -> error) (\s@BatchEvaluateGeofencesError' {} a -> s {error = a} :: BatchEvaluateGeofencesError)
+
+-- | Specifies a timestamp for when the error occurred in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+batchEvaluateGeofencesError_sampleTime :: Lens.Lens' BatchEvaluateGeofencesError Prelude.UTCTime
+batchEvaluateGeofencesError_sampleTime = Lens.lens (\BatchEvaluateGeofencesError' {sampleTime} -> sampleTime) (\s@BatchEvaluateGeofencesError' {} a -> s {sampleTime = a} :: BatchEvaluateGeofencesError) Prelude.. Data._Time
+
+instance Data.FromJSON BatchEvaluateGeofencesError where
+  parseJSON =
+    Data.withObject
+      "BatchEvaluateGeofencesError"
+      ( \x ->
+          BatchEvaluateGeofencesError'
+            Prelude.<$> (x Data..: "DeviceId")
+            Prelude.<*> (x Data..: "Error")
+            Prelude.<*> (x Data..: "SampleTime")
+      )
+
+instance Prelude.Hashable BatchEvaluateGeofencesError where
+  hashWithSalt _salt BatchEvaluateGeofencesError' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` sampleTime
+
+instance Prelude.NFData BatchEvaluateGeofencesError where
+  rnf BatchEvaluateGeofencesError' {..} =
+    Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf error
+      `Prelude.seq` Prelude.rnf sampleTime
diff --git a/gen/Amazonka/Location/Types/BatchGetDevicePositionError.hs b/gen/Amazonka/Location/Types/BatchGetDevicePositionError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchGetDevicePositionError.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchGetDevicePositionError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchGetDevicePositionError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.BatchItemError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains error details for each device that didn\'t return a position.
+--
+-- /See:/ 'newBatchGetDevicePositionError' smart constructor.
+data BatchGetDevicePositionError = BatchGetDevicePositionError'
+  { -- | The ID of the device that didn\'t return a position.
+    deviceId :: Prelude.Text,
+    -- | Contains details related to the error code.
+    error :: BatchItemError
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchGetDevicePositionError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceId', 'batchGetDevicePositionError_deviceId' - The ID of the device that didn\'t return a position.
+--
+-- 'error', 'batchGetDevicePositionError_error' - Contains details related to the error code.
+newBatchGetDevicePositionError ::
+  -- | 'deviceId'
+  Prelude.Text ->
+  -- | 'error'
+  BatchItemError ->
+  BatchGetDevicePositionError
+newBatchGetDevicePositionError pDeviceId_ pError_ =
+  BatchGetDevicePositionError'
+    { deviceId = pDeviceId_,
+      error = pError_
+    }
+
+-- | The ID of the device that didn\'t return a position.
+batchGetDevicePositionError_deviceId :: Lens.Lens' BatchGetDevicePositionError Prelude.Text
+batchGetDevicePositionError_deviceId = Lens.lens (\BatchGetDevicePositionError' {deviceId} -> deviceId) (\s@BatchGetDevicePositionError' {} a -> s {deviceId = a} :: BatchGetDevicePositionError)
+
+-- | Contains details related to the error code.
+batchGetDevicePositionError_error :: Lens.Lens' BatchGetDevicePositionError BatchItemError
+batchGetDevicePositionError_error = Lens.lens (\BatchGetDevicePositionError' {error} -> error) (\s@BatchGetDevicePositionError' {} a -> s {error = a} :: BatchGetDevicePositionError)
+
+instance Data.FromJSON BatchGetDevicePositionError where
+  parseJSON =
+    Data.withObject
+      "BatchGetDevicePositionError"
+      ( \x ->
+          BatchGetDevicePositionError'
+            Prelude.<$> (x Data..: "DeviceId")
+            Prelude.<*> (x Data..: "Error")
+      )
+
+instance Prelude.Hashable BatchGetDevicePositionError where
+  hashWithSalt _salt BatchGetDevicePositionError' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` error
+
+instance Prelude.NFData BatchGetDevicePositionError where
+  rnf BatchGetDevicePositionError' {..} =
+    Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf error
diff --git a/gen/Amazonka/Location/Types/BatchItemError.hs b/gen/Amazonka/Location/Types/BatchItemError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchItemError.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.Location.Types.BatchItemError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchItemError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.BatchItemErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the batch request error details associated with the request.
+--
+-- /See:/ 'newBatchItemError' smart constructor.
+data BatchItemError = BatchItemError'
+  { -- | The error code associated with the batch request error.
+    code :: Prelude.Maybe BatchItemErrorCode,
+    -- | A message with the reason for the batch request error.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchItemError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'batchItemError_code' - The error code associated with the batch request error.
+--
+-- 'message', 'batchItemError_message' - A message with the reason for the batch request error.
+newBatchItemError ::
+  BatchItemError
+newBatchItemError =
+  BatchItemError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code associated with the batch request error.
+batchItemError_code :: Lens.Lens' BatchItemError (Prelude.Maybe BatchItemErrorCode)
+batchItemError_code = Lens.lens (\BatchItemError' {code} -> code) (\s@BatchItemError' {} a -> s {code = a} :: BatchItemError)
+
+-- | A message with the reason for the batch request error.
+batchItemError_message :: Lens.Lens' BatchItemError (Prelude.Maybe Prelude.Text)
+batchItemError_message = Lens.lens (\BatchItemError' {message} -> message) (\s@BatchItemError' {} a -> s {message = a} :: BatchItemError)
+
+instance Data.FromJSON BatchItemError where
+  parseJSON =
+    Data.withObject
+      "BatchItemError"
+      ( \x ->
+          BatchItemError'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Message")
+      )
+
+instance Prelude.Hashable BatchItemError where
+  hashWithSalt _salt BatchItemError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData BatchItemError where
+  rnf BatchItemError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/Location/Types/BatchItemErrorCode.hs b/gen/Amazonka/Location/Types/BatchItemErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchItemErrorCode.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchItemErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchItemErrorCode
+  ( BatchItemErrorCode
+      ( ..,
+        BatchItemErrorCode_AccessDeniedError,
+        BatchItemErrorCode_ConflictError,
+        BatchItemErrorCode_InternalServerError,
+        BatchItemErrorCode_ResourceNotFoundError,
+        BatchItemErrorCode_ThrottlingError,
+        BatchItemErrorCode_ValidationError
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype BatchItemErrorCode = BatchItemErrorCode'
+  { fromBatchItemErrorCode ::
+      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 BatchItemErrorCode_AccessDeniedError :: BatchItemErrorCode
+pattern BatchItemErrorCode_AccessDeniedError = BatchItemErrorCode' "AccessDeniedError"
+
+pattern BatchItemErrorCode_ConflictError :: BatchItemErrorCode
+pattern BatchItemErrorCode_ConflictError = BatchItemErrorCode' "ConflictError"
+
+pattern BatchItemErrorCode_InternalServerError :: BatchItemErrorCode
+pattern BatchItemErrorCode_InternalServerError = BatchItemErrorCode' "InternalServerError"
+
+pattern BatchItemErrorCode_ResourceNotFoundError :: BatchItemErrorCode
+pattern BatchItemErrorCode_ResourceNotFoundError = BatchItemErrorCode' "ResourceNotFoundError"
+
+pattern BatchItemErrorCode_ThrottlingError :: BatchItemErrorCode
+pattern BatchItemErrorCode_ThrottlingError = BatchItemErrorCode' "ThrottlingError"
+
+pattern BatchItemErrorCode_ValidationError :: BatchItemErrorCode
+pattern BatchItemErrorCode_ValidationError = BatchItemErrorCode' "ValidationError"
+
+{-# COMPLETE
+  BatchItemErrorCode_AccessDeniedError,
+  BatchItemErrorCode_ConflictError,
+  BatchItemErrorCode_InternalServerError,
+  BatchItemErrorCode_ResourceNotFoundError,
+  BatchItemErrorCode_ThrottlingError,
+  BatchItemErrorCode_ValidationError,
+  BatchItemErrorCode'
+  #-}
diff --git a/gen/Amazonka/Location/Types/BatchPutGeofenceError.hs b/gen/Amazonka/Location/Types/BatchPutGeofenceError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchPutGeofenceError.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchPutGeofenceError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchPutGeofenceError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.BatchItemError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains error details for each geofence that failed to be stored in a
+-- given geofence collection.
+--
+-- /See:/ 'newBatchPutGeofenceError' smart constructor.
+data BatchPutGeofenceError = BatchPutGeofenceError'
+  { -- | Contains details associated to the batch error.
+    error :: BatchItemError,
+    -- | The geofence associated with the error message.
+    geofenceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutGeofenceError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'batchPutGeofenceError_error' - Contains details associated to the batch error.
+--
+-- 'geofenceId', 'batchPutGeofenceError_geofenceId' - The geofence associated with the error message.
+newBatchPutGeofenceError ::
+  -- | 'error'
+  BatchItemError ->
+  -- | 'geofenceId'
+  Prelude.Text ->
+  BatchPutGeofenceError
+newBatchPutGeofenceError pError_ pGeofenceId_ =
+  BatchPutGeofenceError'
+    { error = pError_,
+      geofenceId = pGeofenceId_
+    }
+
+-- | Contains details associated to the batch error.
+batchPutGeofenceError_error :: Lens.Lens' BatchPutGeofenceError BatchItemError
+batchPutGeofenceError_error = Lens.lens (\BatchPutGeofenceError' {error} -> error) (\s@BatchPutGeofenceError' {} a -> s {error = a} :: BatchPutGeofenceError)
+
+-- | The geofence associated with the error message.
+batchPutGeofenceError_geofenceId :: Lens.Lens' BatchPutGeofenceError Prelude.Text
+batchPutGeofenceError_geofenceId = Lens.lens (\BatchPutGeofenceError' {geofenceId} -> geofenceId) (\s@BatchPutGeofenceError' {} a -> s {geofenceId = a} :: BatchPutGeofenceError)
+
+instance Data.FromJSON BatchPutGeofenceError where
+  parseJSON =
+    Data.withObject
+      "BatchPutGeofenceError"
+      ( \x ->
+          BatchPutGeofenceError'
+            Prelude.<$> (x Data..: "Error")
+            Prelude.<*> (x Data..: "GeofenceId")
+      )
+
+instance Prelude.Hashable BatchPutGeofenceError where
+  hashWithSalt _salt BatchPutGeofenceError' {..} =
+    _salt
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` geofenceId
+
+instance Prelude.NFData BatchPutGeofenceError where
+  rnf BatchPutGeofenceError' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf geofenceId
diff --git a/gen/Amazonka/Location/Types/BatchPutGeofenceRequestEntry.hs b/gen/Amazonka/Location/Types/BatchPutGeofenceRequestEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchPutGeofenceRequestEntry.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchPutGeofenceRequestEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchPutGeofenceRequestEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.GeofenceGeometry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains geofence geometry details.
+--
+-- /See:/ 'newBatchPutGeofenceRequestEntry' smart constructor.
+data BatchPutGeofenceRequestEntry = BatchPutGeofenceRequestEntry'
+  { -- | The identifier for the geofence to be stored in a given geofence
+    -- collection.
+    geofenceId :: Prelude.Text,
+    -- | Contains the details of the position of the geofence. Can be either a
+    -- polygon or a circle. Including both will return a validation error.
+    --
+    -- Each
+    -- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
+    -- can have a maximum of 1,000 vertices.
+    geometry :: GeofenceGeometry
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutGeofenceRequestEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'geofenceId', 'batchPutGeofenceRequestEntry_geofenceId' - The identifier for the geofence to be stored in a given geofence
+-- collection.
+--
+-- 'geometry', 'batchPutGeofenceRequestEntry_geometry' - Contains the details of the position of the geofence. Can be either a
+-- polygon or a circle. Including both will return a validation error.
+--
+-- Each
+-- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
+-- can have a maximum of 1,000 vertices.
+newBatchPutGeofenceRequestEntry ::
+  -- | 'geofenceId'
+  Prelude.Text ->
+  -- | 'geometry'
+  GeofenceGeometry ->
+  BatchPutGeofenceRequestEntry
+newBatchPutGeofenceRequestEntry
+  pGeofenceId_
+  pGeometry_ =
+    BatchPutGeofenceRequestEntry'
+      { geofenceId =
+          pGeofenceId_,
+        geometry = pGeometry_
+      }
+
+-- | The identifier for the geofence to be stored in a given geofence
+-- collection.
+batchPutGeofenceRequestEntry_geofenceId :: Lens.Lens' BatchPutGeofenceRequestEntry Prelude.Text
+batchPutGeofenceRequestEntry_geofenceId = Lens.lens (\BatchPutGeofenceRequestEntry' {geofenceId} -> geofenceId) (\s@BatchPutGeofenceRequestEntry' {} a -> s {geofenceId = a} :: BatchPutGeofenceRequestEntry)
+
+-- | Contains the details of the position of the geofence. Can be either a
+-- polygon or a circle. Including both will return a validation error.
+--
+-- Each
+-- <https://docs.aws.amazon.com/location-geofences/latest/APIReference/API_GeofenceGeometry.html geofence polygon>
+-- can have a maximum of 1,000 vertices.
+batchPutGeofenceRequestEntry_geometry :: Lens.Lens' BatchPutGeofenceRequestEntry GeofenceGeometry
+batchPutGeofenceRequestEntry_geometry = Lens.lens (\BatchPutGeofenceRequestEntry' {geometry} -> geometry) (\s@BatchPutGeofenceRequestEntry' {} a -> s {geometry = a} :: BatchPutGeofenceRequestEntry)
+
+instance
+  Prelude.Hashable
+    BatchPutGeofenceRequestEntry
+  where
+  hashWithSalt _salt BatchPutGeofenceRequestEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` geofenceId
+      `Prelude.hashWithSalt` geometry
+
+instance Prelude.NFData BatchPutGeofenceRequestEntry where
+  rnf BatchPutGeofenceRequestEntry' {..} =
+    Prelude.rnf geofenceId
+      `Prelude.seq` Prelude.rnf geometry
+
+instance Data.ToJSON BatchPutGeofenceRequestEntry where
+  toJSON BatchPutGeofenceRequestEntry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("GeofenceId" Data..= geofenceId),
+            Prelude.Just ("Geometry" Data..= geometry)
+          ]
+      )
diff --git a/gen/Amazonka/Location/Types/BatchPutGeofenceSuccess.hs b/gen/Amazonka/Location/Types/BatchPutGeofenceSuccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchPutGeofenceSuccess.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchPutGeofenceSuccess
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchPutGeofenceSuccess 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
+
+-- | Contains a summary of each geofence that was successfully stored in a
+-- given geofence collection.
+--
+-- /See:/ 'newBatchPutGeofenceSuccess' smart constructor.
+data BatchPutGeofenceSuccess = BatchPutGeofenceSuccess'
+  { -- | The timestamp for when the geofence was stored in a geofence collection
+    -- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    createTime :: Data.ISO8601,
+    -- | The geofence successfully stored in a geofence collection.
+    geofenceId :: Prelude.Text,
+    -- | The timestamp for when the geofence was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutGeofenceSuccess' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createTime', 'batchPutGeofenceSuccess_createTime' - The timestamp for when the geofence was stored in a geofence collection
+-- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+--
+-- 'geofenceId', 'batchPutGeofenceSuccess_geofenceId' - The geofence successfully stored in a geofence collection.
+--
+-- 'updateTime', 'batchPutGeofenceSuccess_updateTime' - The timestamp for when the geofence was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newBatchPutGeofenceSuccess ::
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'geofenceId'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  BatchPutGeofenceSuccess
+newBatchPutGeofenceSuccess
+  pCreateTime_
+  pGeofenceId_
+  pUpdateTime_ =
+    BatchPutGeofenceSuccess'
+      { createTime =
+          Data._Time Lens.# pCreateTime_,
+        geofenceId = pGeofenceId_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The timestamp for when the geofence was stored in a geofence collection
+-- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+batchPutGeofenceSuccess_createTime :: Lens.Lens' BatchPutGeofenceSuccess Prelude.UTCTime
+batchPutGeofenceSuccess_createTime = Lens.lens (\BatchPutGeofenceSuccess' {createTime} -> createTime) (\s@BatchPutGeofenceSuccess' {} a -> s {createTime = a} :: BatchPutGeofenceSuccess) Prelude.. Data._Time
+
+-- | The geofence successfully stored in a geofence collection.
+batchPutGeofenceSuccess_geofenceId :: Lens.Lens' BatchPutGeofenceSuccess Prelude.Text
+batchPutGeofenceSuccess_geofenceId = Lens.lens (\BatchPutGeofenceSuccess' {geofenceId} -> geofenceId) (\s@BatchPutGeofenceSuccess' {} a -> s {geofenceId = a} :: BatchPutGeofenceSuccess)
+
+-- | The timestamp for when the geofence was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+batchPutGeofenceSuccess_updateTime :: Lens.Lens' BatchPutGeofenceSuccess Prelude.UTCTime
+batchPutGeofenceSuccess_updateTime = Lens.lens (\BatchPutGeofenceSuccess' {updateTime} -> updateTime) (\s@BatchPutGeofenceSuccess' {} a -> s {updateTime = a} :: BatchPutGeofenceSuccess) Prelude.. Data._Time
+
+instance Data.FromJSON BatchPutGeofenceSuccess where
+  parseJSON =
+    Data.withObject
+      "BatchPutGeofenceSuccess"
+      ( \x ->
+          BatchPutGeofenceSuccess'
+            Prelude.<$> (x Data..: "CreateTime")
+            Prelude.<*> (x Data..: "GeofenceId")
+            Prelude.<*> (x Data..: "UpdateTime")
+      )
+
+instance Prelude.Hashable BatchPutGeofenceSuccess where
+  hashWithSalt _salt BatchPutGeofenceSuccess' {..} =
+    _salt
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` geofenceId
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData BatchPutGeofenceSuccess where
+  rnf BatchPutGeofenceSuccess' {..} =
+    Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf geofenceId
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/Types/BatchUpdateDevicePositionError.hs b/gen/Amazonka/Location/Types/BatchUpdateDevicePositionError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/BatchUpdateDevicePositionError.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.BatchUpdateDevicePositionError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.BatchUpdateDevicePositionError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.BatchItemError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains error details for each device that failed to update its
+-- position.
+--
+-- /See:/ 'newBatchUpdateDevicePositionError' smart constructor.
+data BatchUpdateDevicePositionError = BatchUpdateDevicePositionError'
+  { -- | The device associated with the failed location update.
+    deviceId :: Prelude.Text,
+    -- | Contains details related to the error code such as the error code and
+    -- error message.
+    error :: BatchItemError,
+    -- | The timestamp at which the device position was determined. Uses
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    sampleTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchUpdateDevicePositionError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceId', 'batchUpdateDevicePositionError_deviceId' - The device associated with the failed location update.
+--
+-- 'error', 'batchUpdateDevicePositionError_error' - Contains details related to the error code such as the error code and
+-- error message.
+--
+-- 'sampleTime', 'batchUpdateDevicePositionError_sampleTime' - The timestamp at which the device position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newBatchUpdateDevicePositionError ::
+  -- | 'deviceId'
+  Prelude.Text ->
+  -- | 'error'
+  BatchItemError ->
+  -- | 'sampleTime'
+  Prelude.UTCTime ->
+  BatchUpdateDevicePositionError
+newBatchUpdateDevicePositionError
+  pDeviceId_
+  pError_
+  pSampleTime_ =
+    BatchUpdateDevicePositionError'
+      { deviceId =
+          pDeviceId_,
+        error = pError_,
+        sampleTime = Data._Time Lens.# pSampleTime_
+      }
+
+-- | The device associated with the failed location update.
+batchUpdateDevicePositionError_deviceId :: Lens.Lens' BatchUpdateDevicePositionError Prelude.Text
+batchUpdateDevicePositionError_deviceId = Lens.lens (\BatchUpdateDevicePositionError' {deviceId} -> deviceId) (\s@BatchUpdateDevicePositionError' {} a -> s {deviceId = a} :: BatchUpdateDevicePositionError)
+
+-- | Contains details related to the error code such as the error code and
+-- error message.
+batchUpdateDevicePositionError_error :: Lens.Lens' BatchUpdateDevicePositionError BatchItemError
+batchUpdateDevicePositionError_error = Lens.lens (\BatchUpdateDevicePositionError' {error} -> error) (\s@BatchUpdateDevicePositionError' {} a -> s {error = a} :: BatchUpdateDevicePositionError)
+
+-- | The timestamp at which the device position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+batchUpdateDevicePositionError_sampleTime :: Lens.Lens' BatchUpdateDevicePositionError Prelude.UTCTime
+batchUpdateDevicePositionError_sampleTime = Lens.lens (\BatchUpdateDevicePositionError' {sampleTime} -> sampleTime) (\s@BatchUpdateDevicePositionError' {} a -> s {sampleTime = a} :: BatchUpdateDevicePositionError) Prelude.. Data._Time
+
+instance Data.FromJSON BatchUpdateDevicePositionError where
+  parseJSON =
+    Data.withObject
+      "BatchUpdateDevicePositionError"
+      ( \x ->
+          BatchUpdateDevicePositionError'
+            Prelude.<$> (x Data..: "DeviceId")
+            Prelude.<*> (x Data..: "Error")
+            Prelude.<*> (x Data..: "SampleTime")
+      )
+
+instance
+  Prelude.Hashable
+    BatchUpdateDevicePositionError
+  where
+  hashWithSalt
+    _salt
+    BatchUpdateDevicePositionError' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceId
+        `Prelude.hashWithSalt` error
+        `Prelude.hashWithSalt` sampleTime
+
+instance
+  Prelude.NFData
+    BatchUpdateDevicePositionError
+  where
+  rnf BatchUpdateDevicePositionError' {..} =
+    Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf error
+      `Prelude.seq` Prelude.rnf sampleTime
diff --git a/gen/Amazonka/Location/Types/CalculateRouteCarModeOptions.hs b/gen/Amazonka/Location/Types/CalculateRouteCarModeOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/CalculateRouteCarModeOptions.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.CalculateRouteCarModeOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.CalculateRouteCarModeOptions 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
+
+-- | Contains details about additional route preferences for requests that
+-- specify @TravelMode@ as @Car@.
+--
+-- /See:/ 'newCalculateRouteCarModeOptions' smart constructor.
+data CalculateRouteCarModeOptions = CalculateRouteCarModeOptions'
+  { -- | Avoids ferries when calculating routes.
+    --
+    -- Default Value: @false@
+    --
+    -- Valid Values: @false@ | @true@
+    avoidFerries :: Prelude.Maybe Prelude.Bool,
+    -- | Avoids tolls when calculating routes.
+    --
+    -- Default Value: @false@
+    --
+    -- Valid Values: @false@ | @true@
+    avoidTolls :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CalculateRouteCarModeOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'avoidFerries', 'calculateRouteCarModeOptions_avoidFerries' - Avoids ferries when calculating routes.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+--
+-- 'avoidTolls', 'calculateRouteCarModeOptions_avoidTolls' - Avoids tolls when calculating routes.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+newCalculateRouteCarModeOptions ::
+  CalculateRouteCarModeOptions
+newCalculateRouteCarModeOptions =
+  CalculateRouteCarModeOptions'
+    { avoidFerries =
+        Prelude.Nothing,
+      avoidTolls = Prelude.Nothing
+    }
+
+-- | Avoids ferries when calculating routes.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+calculateRouteCarModeOptions_avoidFerries :: Lens.Lens' CalculateRouteCarModeOptions (Prelude.Maybe Prelude.Bool)
+calculateRouteCarModeOptions_avoidFerries = Lens.lens (\CalculateRouteCarModeOptions' {avoidFerries} -> avoidFerries) (\s@CalculateRouteCarModeOptions' {} a -> s {avoidFerries = a} :: CalculateRouteCarModeOptions)
+
+-- | Avoids tolls when calculating routes.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+calculateRouteCarModeOptions_avoidTolls :: Lens.Lens' CalculateRouteCarModeOptions (Prelude.Maybe Prelude.Bool)
+calculateRouteCarModeOptions_avoidTolls = Lens.lens (\CalculateRouteCarModeOptions' {avoidTolls} -> avoidTolls) (\s@CalculateRouteCarModeOptions' {} a -> s {avoidTolls = a} :: CalculateRouteCarModeOptions)
+
+instance
+  Prelude.Hashable
+    CalculateRouteCarModeOptions
+  where
+  hashWithSalt _salt CalculateRouteCarModeOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` avoidFerries
+      `Prelude.hashWithSalt` avoidTolls
+
+instance Prelude.NFData CalculateRouteCarModeOptions where
+  rnf CalculateRouteCarModeOptions' {..} =
+    Prelude.rnf avoidFerries
+      `Prelude.seq` Prelude.rnf avoidTolls
+
+instance Data.ToJSON CalculateRouteCarModeOptions where
+  toJSON CalculateRouteCarModeOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AvoidFerries" Data..=) Prelude.<$> avoidFerries,
+            ("AvoidTolls" Data..=) Prelude.<$> avoidTolls
+          ]
+      )
diff --git a/gen/Amazonka/Location/Types/CalculateRouteMatrixSummary.hs b/gen/Amazonka/Location/Types/CalculateRouteMatrixSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/CalculateRouteMatrixSummary.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.CalculateRouteMatrixSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.CalculateRouteMatrixSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.DistanceUnit
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of the calculated route matrix.
+--
+-- /See:/ 'newCalculateRouteMatrixSummary' smart constructor.
+data CalculateRouteMatrixSummary = CalculateRouteMatrixSummary'
+  { -- | The data provider of traffic and road network data used to calculate the
+    -- routes. Indicates one of the available providers:
+    --
+    -- -   @Esri@
+    --
+    -- -   @Here@
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The unit of measurement for route distances.
+    distanceUnit :: DistanceUnit,
+    -- | The count of error results in the route matrix. If this number is 0, all
+    -- routes were calculated successfully.
+    errorCount :: Prelude.Natural,
+    -- | The count of cells in the route matrix. Equal to the number of
+    -- @DeparturePositions@ multiplied by the number of @DestinationPositions@.
+    routeCount :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CalculateRouteMatrixSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSource', 'calculateRouteMatrixSummary_dataSource' - The data provider of traffic and road network data used to calculate the
+-- routes. Indicates one of the available providers:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'distanceUnit', 'calculateRouteMatrixSummary_distanceUnit' - The unit of measurement for route distances.
+--
+-- 'errorCount', 'calculateRouteMatrixSummary_errorCount' - The count of error results in the route matrix. If this number is 0, all
+-- routes were calculated successfully.
+--
+-- 'routeCount', 'calculateRouteMatrixSummary_routeCount' - The count of cells in the route matrix. Equal to the number of
+-- @DeparturePositions@ multiplied by the number of @DestinationPositions@.
+newCalculateRouteMatrixSummary ::
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'distanceUnit'
+  DistanceUnit ->
+  -- | 'errorCount'
+  Prelude.Natural ->
+  -- | 'routeCount'
+  Prelude.Natural ->
+  CalculateRouteMatrixSummary
+newCalculateRouteMatrixSummary
+  pDataSource_
+  pDistanceUnit_
+  pErrorCount_
+  pRouteCount_ =
+    CalculateRouteMatrixSummary'
+      { dataSource =
+          pDataSource_,
+        distanceUnit = pDistanceUnit_,
+        errorCount = pErrorCount_,
+        routeCount = pRouteCount_
+      }
+
+-- | The data provider of traffic and road network data used to calculate the
+-- routes. Indicates one of the available providers:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+calculateRouteMatrixSummary_dataSource :: Lens.Lens' CalculateRouteMatrixSummary Prelude.Text
+calculateRouteMatrixSummary_dataSource = Lens.lens (\CalculateRouteMatrixSummary' {dataSource} -> dataSource) (\s@CalculateRouteMatrixSummary' {} a -> s {dataSource = a} :: CalculateRouteMatrixSummary)
+
+-- | The unit of measurement for route distances.
+calculateRouteMatrixSummary_distanceUnit :: Lens.Lens' CalculateRouteMatrixSummary DistanceUnit
+calculateRouteMatrixSummary_distanceUnit = Lens.lens (\CalculateRouteMatrixSummary' {distanceUnit} -> distanceUnit) (\s@CalculateRouteMatrixSummary' {} a -> s {distanceUnit = a} :: CalculateRouteMatrixSummary)
+
+-- | The count of error results in the route matrix. If this number is 0, all
+-- routes were calculated successfully.
+calculateRouteMatrixSummary_errorCount :: Lens.Lens' CalculateRouteMatrixSummary Prelude.Natural
+calculateRouteMatrixSummary_errorCount = Lens.lens (\CalculateRouteMatrixSummary' {errorCount} -> errorCount) (\s@CalculateRouteMatrixSummary' {} a -> s {errorCount = a} :: CalculateRouteMatrixSummary)
+
+-- | The count of cells in the route matrix. Equal to the number of
+-- @DeparturePositions@ multiplied by the number of @DestinationPositions@.
+calculateRouteMatrixSummary_routeCount :: Lens.Lens' CalculateRouteMatrixSummary Prelude.Natural
+calculateRouteMatrixSummary_routeCount = Lens.lens (\CalculateRouteMatrixSummary' {routeCount} -> routeCount) (\s@CalculateRouteMatrixSummary' {} a -> s {routeCount = a} :: CalculateRouteMatrixSummary)
+
+instance Data.FromJSON CalculateRouteMatrixSummary where
+  parseJSON =
+    Data.withObject
+      "CalculateRouteMatrixSummary"
+      ( \x ->
+          CalculateRouteMatrixSummary'
+            Prelude.<$> (x Data..: "DataSource")
+            Prelude.<*> (x Data..: "DistanceUnit")
+            Prelude.<*> (x Data..: "ErrorCount")
+            Prelude.<*> (x Data..: "RouteCount")
+      )
+
+instance Prelude.Hashable CalculateRouteMatrixSummary where
+  hashWithSalt _salt CalculateRouteMatrixSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` distanceUnit
+      `Prelude.hashWithSalt` errorCount
+      `Prelude.hashWithSalt` routeCount
+
+instance Prelude.NFData CalculateRouteMatrixSummary where
+  rnf CalculateRouteMatrixSummary' {..} =
+    Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf distanceUnit
+      `Prelude.seq` Prelude.rnf errorCount
+      `Prelude.seq` Prelude.rnf routeCount
diff --git a/gen/Amazonka/Location/Types/CalculateRouteSummary.hs b/gen/Amazonka/Location/Types/CalculateRouteSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/CalculateRouteSummary.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.CalculateRouteSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.CalculateRouteSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.DistanceUnit
+import qualified Amazonka.Prelude as Prelude
+
+-- | A summary of the calculated route.
+--
+-- /See:/ 'newCalculateRouteSummary' smart constructor.
+data CalculateRouteSummary = CalculateRouteSummary'
+  { -- | The data provider of traffic and road network data used to calculate the
+    -- route. Indicates one of the available providers:
+    --
+    -- -   @Esri@
+    --
+    -- -   @Here@
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The total distance covered by the route. The sum of the distance
+    -- travelled between every stop on the route.
+    --
+    -- If Esri is the data source for the route calculator, the route distance
+    -- can’t be greater than 400 km. If the route exceeds 400 km, the response
+    -- is a @400 RoutesValidationException@ error.
+    distance :: Prelude.Double,
+    -- | The unit of measurement for route distances.
+    distanceUnit :: DistanceUnit,
+    -- | The total travel time for the route measured in seconds. The sum of the
+    -- travel time between every stop on the route.
+    durationSeconds :: Prelude.Double,
+    -- | Specifies a geographical box surrounding a route. Used to zoom into a
+    -- route when displaying it in a map. For example,
+    -- @[min x, min y, max x, max y]@.
+    --
+    -- The first 2 @bbox@ parameters describe the lower southwest corner:
+    --
+    -- -   The first @bbox@ position is the X coordinate or longitude of the
+    --     lower southwest corner.
+    --
+    -- -   The second @bbox@ position is the Y coordinate or latitude of the
+    --     lower southwest corner.
+    --
+    -- The next 2 @bbox@ parameters describe the upper northeast corner:
+    --
+    -- -   The third @bbox@ position is the X coordinate, or longitude of the
+    --     upper northeast corner.
+    --
+    -- -   The fourth @bbox@ position is the Y coordinate, or latitude of the
+    --     upper northeast corner.
+    routeBBox :: Data.Sensitive (Prelude.NonEmpty Prelude.Double)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CalculateRouteSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSource', 'calculateRouteSummary_dataSource' - The data provider of traffic and road network data used to calculate the
+-- route. Indicates one of the available providers:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'distance', 'calculateRouteSummary_distance' - The total distance covered by the route. The sum of the distance
+-- travelled between every stop on the route.
+--
+-- If Esri is the data source for the route calculator, the route distance
+-- can’t be greater than 400 km. If the route exceeds 400 km, the response
+-- is a @400 RoutesValidationException@ error.
+--
+-- 'distanceUnit', 'calculateRouteSummary_distanceUnit' - The unit of measurement for route distances.
+--
+-- 'durationSeconds', 'calculateRouteSummary_durationSeconds' - The total travel time for the route measured in seconds. The sum of the
+-- travel time between every stop on the route.
+--
+-- 'routeBBox', 'calculateRouteSummary_routeBBox' - Specifies a geographical box surrounding a route. Used to zoom into a
+-- route when displaying it in a map. For example,
+-- @[min x, min y, max x, max y]@.
+--
+-- The first 2 @bbox@ parameters describe the lower southwest corner:
+--
+-- -   The first @bbox@ position is the X coordinate or longitude of the
+--     lower southwest corner.
+--
+-- -   The second @bbox@ position is the Y coordinate or latitude of the
+--     lower southwest corner.
+--
+-- The next 2 @bbox@ parameters describe the upper northeast corner:
+--
+-- -   The third @bbox@ position is the X coordinate, or longitude of the
+--     upper northeast corner.
+--
+-- -   The fourth @bbox@ position is the Y coordinate, or latitude of the
+--     upper northeast corner.
+newCalculateRouteSummary ::
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'distance'
+  Prelude.Double ->
+  -- | 'distanceUnit'
+  DistanceUnit ->
+  -- | 'durationSeconds'
+  Prelude.Double ->
+  -- | 'routeBBox'
+  Prelude.NonEmpty Prelude.Double ->
+  CalculateRouteSummary
+newCalculateRouteSummary
+  pDataSource_
+  pDistance_
+  pDistanceUnit_
+  pDurationSeconds_
+  pRouteBBox_ =
+    CalculateRouteSummary'
+      { dataSource = pDataSource_,
+        distance = pDistance_,
+        distanceUnit = pDistanceUnit_,
+        durationSeconds = pDurationSeconds_,
+        routeBBox =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pRouteBBox_
+      }
+
+-- | The data provider of traffic and road network data used to calculate the
+-- route. Indicates one of the available providers:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+calculateRouteSummary_dataSource :: Lens.Lens' CalculateRouteSummary Prelude.Text
+calculateRouteSummary_dataSource = Lens.lens (\CalculateRouteSummary' {dataSource} -> dataSource) (\s@CalculateRouteSummary' {} a -> s {dataSource = a} :: CalculateRouteSummary)
+
+-- | The total distance covered by the route. The sum of the distance
+-- travelled between every stop on the route.
+--
+-- If Esri is the data source for the route calculator, the route distance
+-- can’t be greater than 400 km. If the route exceeds 400 km, the response
+-- is a @400 RoutesValidationException@ error.
+calculateRouteSummary_distance :: Lens.Lens' CalculateRouteSummary Prelude.Double
+calculateRouteSummary_distance = Lens.lens (\CalculateRouteSummary' {distance} -> distance) (\s@CalculateRouteSummary' {} a -> s {distance = a} :: CalculateRouteSummary)
+
+-- | The unit of measurement for route distances.
+calculateRouteSummary_distanceUnit :: Lens.Lens' CalculateRouteSummary DistanceUnit
+calculateRouteSummary_distanceUnit = Lens.lens (\CalculateRouteSummary' {distanceUnit} -> distanceUnit) (\s@CalculateRouteSummary' {} a -> s {distanceUnit = a} :: CalculateRouteSummary)
+
+-- | The total travel time for the route measured in seconds. The sum of the
+-- travel time between every stop on the route.
+calculateRouteSummary_durationSeconds :: Lens.Lens' CalculateRouteSummary Prelude.Double
+calculateRouteSummary_durationSeconds = Lens.lens (\CalculateRouteSummary' {durationSeconds} -> durationSeconds) (\s@CalculateRouteSummary' {} a -> s {durationSeconds = a} :: CalculateRouteSummary)
+
+-- | Specifies a geographical box surrounding a route. Used to zoom into a
+-- route when displaying it in a map. For example,
+-- @[min x, min y, max x, max y]@.
+--
+-- The first 2 @bbox@ parameters describe the lower southwest corner:
+--
+-- -   The first @bbox@ position is the X coordinate or longitude of the
+--     lower southwest corner.
+--
+-- -   The second @bbox@ position is the Y coordinate or latitude of the
+--     lower southwest corner.
+--
+-- The next 2 @bbox@ parameters describe the upper northeast corner:
+--
+-- -   The third @bbox@ position is the X coordinate, or longitude of the
+--     upper northeast corner.
+--
+-- -   The fourth @bbox@ position is the Y coordinate, or latitude of the
+--     upper northeast corner.
+calculateRouteSummary_routeBBox :: Lens.Lens' CalculateRouteSummary (Prelude.NonEmpty Prelude.Double)
+calculateRouteSummary_routeBBox = Lens.lens (\CalculateRouteSummary' {routeBBox} -> routeBBox) (\s@CalculateRouteSummary' {} a -> s {routeBBox = a} :: CalculateRouteSummary) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Data.FromJSON CalculateRouteSummary where
+  parseJSON =
+    Data.withObject
+      "CalculateRouteSummary"
+      ( \x ->
+          CalculateRouteSummary'
+            Prelude.<$> (x Data..: "DataSource")
+            Prelude.<*> (x Data..: "Distance")
+            Prelude.<*> (x Data..: "DistanceUnit")
+            Prelude.<*> (x Data..: "DurationSeconds")
+            Prelude.<*> (x Data..: "RouteBBox")
+      )
+
+instance Prelude.Hashable CalculateRouteSummary where
+  hashWithSalt _salt CalculateRouteSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` distance
+      `Prelude.hashWithSalt` distanceUnit
+      `Prelude.hashWithSalt` durationSeconds
+      `Prelude.hashWithSalt` routeBBox
+
+instance Prelude.NFData CalculateRouteSummary where
+  rnf CalculateRouteSummary' {..} =
+    Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf distance
+      `Prelude.seq` Prelude.rnf distanceUnit
+      `Prelude.seq` Prelude.rnf durationSeconds
+      `Prelude.seq` Prelude.rnf routeBBox
diff --git a/gen/Amazonka/Location/Types/CalculateRouteTruckModeOptions.hs b/gen/Amazonka/Location/Types/CalculateRouteTruckModeOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/CalculateRouteTruckModeOptions.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.CalculateRouteTruckModeOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.CalculateRouteTruckModeOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.TruckDimensions
+import Amazonka.Location.Types.TruckWeight
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains details about additional route preferences for requests that
+-- specify @TravelMode@ as @Truck@.
+--
+-- /See:/ 'newCalculateRouteTruckModeOptions' smart constructor.
+data CalculateRouteTruckModeOptions = CalculateRouteTruckModeOptions'
+  { -- | Avoids ferries when calculating routes.
+    --
+    -- Default Value: @false@
+    --
+    -- Valid Values: @false@ | @true@
+    avoidFerries :: Prelude.Maybe Prelude.Bool,
+    -- | Avoids tolls when calculating routes.
+    --
+    -- Default Value: @false@
+    --
+    -- Valid Values: @false@ | @true@
+    avoidTolls :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies the truck\'s dimension specifications including length,
+    -- height, width, and unit of measurement. Used to avoid roads that can\'t
+    -- support the truck\'s dimensions.
+    dimensions :: Prelude.Maybe TruckDimensions,
+    -- | Specifies the truck\'s weight specifications including total weight and
+    -- unit of measurement. Used to avoid roads that can\'t support the
+    -- truck\'s weight.
+    weight :: Prelude.Maybe TruckWeight
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CalculateRouteTruckModeOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'avoidFerries', 'calculateRouteTruckModeOptions_avoidFerries' - Avoids ferries when calculating routes.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+--
+-- 'avoidTolls', 'calculateRouteTruckModeOptions_avoidTolls' - Avoids tolls when calculating routes.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+--
+-- 'dimensions', 'calculateRouteTruckModeOptions_dimensions' - Specifies the truck\'s dimension specifications including length,
+-- height, width, and unit of measurement. Used to avoid roads that can\'t
+-- support the truck\'s dimensions.
+--
+-- 'weight', 'calculateRouteTruckModeOptions_weight' - Specifies the truck\'s weight specifications including total weight and
+-- unit of measurement. Used to avoid roads that can\'t support the
+-- truck\'s weight.
+newCalculateRouteTruckModeOptions ::
+  CalculateRouteTruckModeOptions
+newCalculateRouteTruckModeOptions =
+  CalculateRouteTruckModeOptions'
+    { avoidFerries =
+        Prelude.Nothing,
+      avoidTolls = Prelude.Nothing,
+      dimensions = Prelude.Nothing,
+      weight = Prelude.Nothing
+    }
+
+-- | Avoids ferries when calculating routes.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+calculateRouteTruckModeOptions_avoidFerries :: Lens.Lens' CalculateRouteTruckModeOptions (Prelude.Maybe Prelude.Bool)
+calculateRouteTruckModeOptions_avoidFerries = Lens.lens (\CalculateRouteTruckModeOptions' {avoidFerries} -> avoidFerries) (\s@CalculateRouteTruckModeOptions' {} a -> s {avoidFerries = a} :: CalculateRouteTruckModeOptions)
+
+-- | Avoids tolls when calculating routes.
+--
+-- Default Value: @false@
+--
+-- Valid Values: @false@ | @true@
+calculateRouteTruckModeOptions_avoidTolls :: Lens.Lens' CalculateRouteTruckModeOptions (Prelude.Maybe Prelude.Bool)
+calculateRouteTruckModeOptions_avoidTolls = Lens.lens (\CalculateRouteTruckModeOptions' {avoidTolls} -> avoidTolls) (\s@CalculateRouteTruckModeOptions' {} a -> s {avoidTolls = a} :: CalculateRouteTruckModeOptions)
+
+-- | Specifies the truck\'s dimension specifications including length,
+-- height, width, and unit of measurement. Used to avoid roads that can\'t
+-- support the truck\'s dimensions.
+calculateRouteTruckModeOptions_dimensions :: Lens.Lens' CalculateRouteTruckModeOptions (Prelude.Maybe TruckDimensions)
+calculateRouteTruckModeOptions_dimensions = Lens.lens (\CalculateRouteTruckModeOptions' {dimensions} -> dimensions) (\s@CalculateRouteTruckModeOptions' {} a -> s {dimensions = a} :: CalculateRouteTruckModeOptions)
+
+-- | Specifies the truck\'s weight specifications including total weight and
+-- unit of measurement. Used to avoid roads that can\'t support the
+-- truck\'s weight.
+calculateRouteTruckModeOptions_weight :: Lens.Lens' CalculateRouteTruckModeOptions (Prelude.Maybe TruckWeight)
+calculateRouteTruckModeOptions_weight = Lens.lens (\CalculateRouteTruckModeOptions' {weight} -> weight) (\s@CalculateRouteTruckModeOptions' {} a -> s {weight = a} :: CalculateRouteTruckModeOptions)
+
+instance
+  Prelude.Hashable
+    CalculateRouteTruckModeOptions
+  where
+  hashWithSalt
+    _salt
+    CalculateRouteTruckModeOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` avoidFerries
+        `Prelude.hashWithSalt` avoidTolls
+        `Prelude.hashWithSalt` dimensions
+        `Prelude.hashWithSalt` weight
+
+instance
+  Prelude.NFData
+    CalculateRouteTruckModeOptions
+  where
+  rnf CalculateRouteTruckModeOptions' {..} =
+    Prelude.rnf avoidFerries
+      `Prelude.seq` Prelude.rnf avoidTolls
+      `Prelude.seq` Prelude.rnf dimensions
+      `Prelude.seq` Prelude.rnf weight
+
+instance Data.ToJSON CalculateRouteTruckModeOptions where
+  toJSON CalculateRouteTruckModeOptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AvoidFerries" Data..=) Prelude.<$> avoidFerries,
+            ("AvoidTolls" Data..=) Prelude.<$> avoidTolls,
+            ("Dimensions" Data..=) Prelude.<$> dimensions,
+            ("Weight" Data..=) Prelude.<$> weight
+          ]
+      )
diff --git a/gen/Amazonka/Location/Types/Circle.hs b/gen/Amazonka/Location/Types/Circle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/Circle.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.Circle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.Circle 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 circle on the earth, as defined by a center point and a radius.
+--
+-- /See:/ 'newCircle' smart constructor.
+data Circle = Circle'
+  { -- | A single point geometry, specifying the center of the circle, using
+    -- <https://gisgeography.com/wgs84-world-geodetic-system/ WGS 84>
+    -- coordinates, in the form @[longitude, latitude]@.
+    center :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | The radius of the circle in meters. Must be greater than zero and no
+    -- larger than 100,000 (100 kilometers).
+    radius :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Circle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'center', 'circle_center' - A single point geometry, specifying the center of the circle, using
+-- <https://gisgeography.com/wgs84-world-geodetic-system/ WGS 84>
+-- coordinates, in the form @[longitude, latitude]@.
+--
+-- 'radius', 'circle_radius' - The radius of the circle in meters. Must be greater than zero and no
+-- larger than 100,000 (100 kilometers).
+newCircle ::
+  -- | 'center'
+  Prelude.NonEmpty Prelude.Double ->
+  -- | 'radius'
+  Prelude.Double ->
+  Circle
+newCircle pCenter_ pRadius_ =
+  Circle'
+    { center =
+        Data._Sensitive
+          Prelude.. Lens.coerced
+          Lens.# pCenter_,
+      radius = pRadius_
+    }
+
+-- | A single point geometry, specifying the center of the circle, using
+-- <https://gisgeography.com/wgs84-world-geodetic-system/ WGS 84>
+-- coordinates, in the form @[longitude, latitude]@.
+circle_center :: Lens.Lens' Circle (Prelude.NonEmpty Prelude.Double)
+circle_center = Lens.lens (\Circle' {center} -> center) (\s@Circle' {} a -> s {center = a} :: Circle) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The radius of the circle in meters. Must be greater than zero and no
+-- larger than 100,000 (100 kilometers).
+circle_radius :: Lens.Lens' Circle Prelude.Double
+circle_radius = Lens.lens (\Circle' {radius} -> radius) (\s@Circle' {} a -> s {radius = a} :: Circle)
+
+instance Data.FromJSON Circle where
+  parseJSON =
+    Data.withObject
+      "Circle"
+      ( \x ->
+          Circle'
+            Prelude.<$> (x Data..: "Center")
+            Prelude.<*> (x Data..: "Radius")
+      )
+
+instance Prelude.Hashable Circle where
+  hashWithSalt _salt Circle' {..} =
+    _salt
+      `Prelude.hashWithSalt` center
+      `Prelude.hashWithSalt` radius
+
+instance Prelude.NFData Circle where
+  rnf Circle' {..} =
+    Prelude.rnf center `Prelude.seq` Prelude.rnf radius
+
+instance Data.ToJSON Circle where
+  toJSON Circle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Center" Data..= center),
+            Prelude.Just ("Radius" Data..= radius)
+          ]
+      )
diff --git a/gen/Amazonka/Location/Types/DataSourceConfiguration.hs b/gen/Amazonka/Location/Types/DataSourceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/DataSourceConfiguration.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.DataSourceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.DataSourceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.IntendedUse
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the data storage option chosen for requesting Places.
+--
+-- When using Amazon Location Places:
+--
+-- -   If using HERE Technologies as a data provider, you can\'t store
+--     results for locations in Japan by setting @IntendedUse@ to
+--     @Storage@. parameter.
+--
+-- -   Under the @MobileAssetTracking@ or @MobilAssetManagement@ pricing
+--     plan, you can\'t store results from your place index resources by
+--     setting @IntendedUse@ to @Storage@. This returns a validation
+--     exception error.
+--
+-- For more information, see the
+-- <https://aws.amazon.com/service-terms/ AWS Service Terms> for Amazon
+-- Location Service.
+--
+-- /See:/ 'newDataSourceConfiguration' smart constructor.
+data DataSourceConfiguration = DataSourceConfiguration'
+  { -- | Specifies how the results of an operation will be stored by the caller.
+    --
+    -- Valid values include:
+    --
+    -- -   @SingleUse@ specifies that the results won\'t be stored.
+    --
+    -- -   @Storage@ specifies that the result can be cached or stored in a
+    --     database.
+    --
+    -- Default value: @SingleUse@
+    intendedUse :: Prelude.Maybe IntendedUse
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSourceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'intendedUse', 'dataSourceConfiguration_intendedUse' - Specifies how the results of an operation will be stored by the caller.
+--
+-- Valid values include:
+--
+-- -   @SingleUse@ specifies that the results won\'t be stored.
+--
+-- -   @Storage@ specifies that the result can be cached or stored in a
+--     database.
+--
+-- Default value: @SingleUse@
+newDataSourceConfiguration ::
+  DataSourceConfiguration
+newDataSourceConfiguration =
+  DataSourceConfiguration'
+    { intendedUse =
+        Prelude.Nothing
+    }
+
+-- | Specifies how the results of an operation will be stored by the caller.
+--
+-- Valid values include:
+--
+-- -   @SingleUse@ specifies that the results won\'t be stored.
+--
+-- -   @Storage@ specifies that the result can be cached or stored in a
+--     database.
+--
+-- Default value: @SingleUse@
+dataSourceConfiguration_intendedUse :: Lens.Lens' DataSourceConfiguration (Prelude.Maybe IntendedUse)
+dataSourceConfiguration_intendedUse = Lens.lens (\DataSourceConfiguration' {intendedUse} -> intendedUse) (\s@DataSourceConfiguration' {} a -> s {intendedUse = a} :: DataSourceConfiguration)
+
+instance Data.FromJSON DataSourceConfiguration where
+  parseJSON =
+    Data.withObject
+      "DataSourceConfiguration"
+      ( \x ->
+          DataSourceConfiguration'
+            Prelude.<$> (x Data..:? "IntendedUse")
+      )
+
+instance Prelude.Hashable DataSourceConfiguration where
+  hashWithSalt _salt DataSourceConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` intendedUse
+
+instance Prelude.NFData DataSourceConfiguration where
+  rnf DataSourceConfiguration' {..} =
+    Prelude.rnf intendedUse
+
+instance Data.ToJSON DataSourceConfiguration where
+  toJSON DataSourceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("IntendedUse" Data..=) Prelude.<$> intendedUse]
+      )
diff --git a/gen/Amazonka/Location/Types/DevicePosition.hs b/gen/Amazonka/Location/Types/DevicePosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/DevicePosition.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.DevicePosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.DevicePosition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PositionalAccuracy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the device position details.
+--
+-- /See:/ 'newDevicePosition' smart constructor.
+data DevicePosition = DevicePosition'
+  { -- | The accuracy of the device position.
+    accuracy :: Prelude.Maybe PositionalAccuracy,
+    -- | The device whose position you retrieved.
+    deviceId :: Prelude.Maybe Prelude.Text,
+    -- | The properties associated with the position.
+    positionProperties :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The last known device position.
+    position :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | The timestamp for when the tracker resource received the device position
+    -- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    receivedTime :: Data.ISO8601,
+    -- | The timestamp at which the device\'s position was determined. Uses
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    sampleTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DevicePosition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accuracy', 'devicePosition_accuracy' - The accuracy of the device position.
+--
+-- 'deviceId', 'devicePosition_deviceId' - The device whose position you retrieved.
+--
+-- 'positionProperties', 'devicePosition_positionProperties' - The properties associated with the position.
+--
+-- 'position', 'devicePosition_position' - The last known device position.
+--
+-- 'receivedTime', 'devicePosition_receivedTime' - The timestamp for when the tracker resource received the device position
+-- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'sampleTime', 'devicePosition_sampleTime' - The timestamp at which the device\'s position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newDevicePosition ::
+  -- | 'position'
+  Prelude.NonEmpty Prelude.Double ->
+  -- | 'receivedTime'
+  Prelude.UTCTime ->
+  -- | 'sampleTime'
+  Prelude.UTCTime ->
+  DevicePosition
+newDevicePosition
+  pPosition_
+  pReceivedTime_
+  pSampleTime_ =
+    DevicePosition'
+      { accuracy = Prelude.Nothing,
+        deviceId = Prelude.Nothing,
+        positionProperties = Prelude.Nothing,
+        position =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pPosition_,
+        receivedTime = Data._Time Lens.# pReceivedTime_,
+        sampleTime = Data._Time Lens.# pSampleTime_
+      }
+
+-- | The accuracy of the device position.
+devicePosition_accuracy :: Lens.Lens' DevicePosition (Prelude.Maybe PositionalAccuracy)
+devicePosition_accuracy = Lens.lens (\DevicePosition' {accuracy} -> accuracy) (\s@DevicePosition' {} a -> s {accuracy = a} :: DevicePosition)
+
+-- | The device whose position you retrieved.
+devicePosition_deviceId :: Lens.Lens' DevicePosition (Prelude.Maybe Prelude.Text)
+devicePosition_deviceId = Lens.lens (\DevicePosition' {deviceId} -> deviceId) (\s@DevicePosition' {} a -> s {deviceId = a} :: DevicePosition)
+
+-- | The properties associated with the position.
+devicePosition_positionProperties :: Lens.Lens' DevicePosition (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+devicePosition_positionProperties = Lens.lens (\DevicePosition' {positionProperties} -> positionProperties) (\s@DevicePosition' {} a -> s {positionProperties = a} :: DevicePosition) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The last known device position.
+devicePosition_position :: Lens.Lens' DevicePosition (Prelude.NonEmpty Prelude.Double)
+devicePosition_position = Lens.lens (\DevicePosition' {position} -> position) (\s@DevicePosition' {} a -> s {position = a} :: DevicePosition) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The timestamp for when the tracker resource received the device position
+-- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+devicePosition_receivedTime :: Lens.Lens' DevicePosition Prelude.UTCTime
+devicePosition_receivedTime = Lens.lens (\DevicePosition' {receivedTime} -> receivedTime) (\s@DevicePosition' {} a -> s {receivedTime = a} :: DevicePosition) Prelude.. Data._Time
+
+-- | The timestamp at which the device\'s position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+devicePosition_sampleTime :: Lens.Lens' DevicePosition Prelude.UTCTime
+devicePosition_sampleTime = Lens.lens (\DevicePosition' {sampleTime} -> sampleTime) (\s@DevicePosition' {} a -> s {sampleTime = a} :: DevicePosition) Prelude.. Data._Time
+
+instance Data.FromJSON DevicePosition where
+  parseJSON =
+    Data.withObject
+      "DevicePosition"
+      ( \x ->
+          DevicePosition'
+            Prelude.<$> (x Data..:? "Accuracy")
+            Prelude.<*> (x Data..:? "DeviceId")
+            Prelude.<*> ( x
+                            Data..:? "PositionProperties"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "Position")
+            Prelude.<*> (x Data..: "ReceivedTime")
+            Prelude.<*> (x Data..: "SampleTime")
+      )
+
+instance Prelude.Hashable DevicePosition where
+  hashWithSalt _salt DevicePosition' {..} =
+    _salt
+      `Prelude.hashWithSalt` accuracy
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` positionProperties
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` receivedTime
+      `Prelude.hashWithSalt` sampleTime
+
+instance Prelude.NFData DevicePosition where
+  rnf DevicePosition' {..} =
+    Prelude.rnf accuracy
+      `Prelude.seq` Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf positionProperties
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf receivedTime
+      `Prelude.seq` Prelude.rnf sampleTime
diff --git a/gen/Amazonka/Location/Types/DevicePositionUpdate.hs b/gen/Amazonka/Location/Types/DevicePositionUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/DevicePositionUpdate.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.DevicePositionUpdate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.DevicePositionUpdate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PositionalAccuracy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the position update details for a device.
+--
+-- /See:/ 'newDevicePositionUpdate' smart constructor.
+data DevicePositionUpdate = DevicePositionUpdate'
+  { -- | The accuracy of the device position.
+    accuracy :: Prelude.Maybe PositionalAccuracy,
+    -- | Associates one of more properties with the position update. A property
+    -- is a key-value pair stored with the position update and added to any
+    -- geofence event the update may trigger.
+    --
+    -- Format: @\"key\" : \"value\"@
+    positionProperties :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The device associated to the position update.
+    deviceId :: Prelude.Text,
+    -- | The latest device position defined in
+    -- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 WGS 84>
+    -- format: @[X or longitude, Y or latitude]@.
+    position :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | The timestamp at which the device\'s position was determined. Uses
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    sampleTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DevicePositionUpdate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accuracy', 'devicePositionUpdate_accuracy' - The accuracy of the device position.
+--
+-- 'positionProperties', 'devicePositionUpdate_positionProperties' - Associates one of more properties with the position update. A property
+-- is a key-value pair stored with the position update and added to any
+-- geofence event the update may trigger.
+--
+-- Format: @\"key\" : \"value\"@
+--
+-- 'deviceId', 'devicePositionUpdate_deviceId' - The device associated to the position update.
+--
+-- 'position', 'devicePositionUpdate_position' - The latest device position defined in
+-- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 WGS 84>
+-- format: @[X or longitude, Y or latitude]@.
+--
+-- 'sampleTime', 'devicePositionUpdate_sampleTime' - The timestamp at which the device\'s position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newDevicePositionUpdate ::
+  -- | 'deviceId'
+  Prelude.Text ->
+  -- | 'position'
+  Prelude.NonEmpty Prelude.Double ->
+  -- | 'sampleTime'
+  Prelude.UTCTime ->
+  DevicePositionUpdate
+newDevicePositionUpdate
+  pDeviceId_
+  pPosition_
+  pSampleTime_ =
+    DevicePositionUpdate'
+      { accuracy = Prelude.Nothing,
+        positionProperties = Prelude.Nothing,
+        deviceId = pDeviceId_,
+        position =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pPosition_,
+        sampleTime = Data._Time Lens.# pSampleTime_
+      }
+
+-- | The accuracy of the device position.
+devicePositionUpdate_accuracy :: Lens.Lens' DevicePositionUpdate (Prelude.Maybe PositionalAccuracy)
+devicePositionUpdate_accuracy = Lens.lens (\DevicePositionUpdate' {accuracy} -> accuracy) (\s@DevicePositionUpdate' {} a -> s {accuracy = a} :: DevicePositionUpdate)
+
+-- | Associates one of more properties with the position update. A property
+-- is a key-value pair stored with the position update and added to any
+-- geofence event the update may trigger.
+--
+-- Format: @\"key\" : \"value\"@
+devicePositionUpdate_positionProperties :: Lens.Lens' DevicePositionUpdate (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+devicePositionUpdate_positionProperties = Lens.lens (\DevicePositionUpdate' {positionProperties} -> positionProperties) (\s@DevicePositionUpdate' {} a -> s {positionProperties = a} :: DevicePositionUpdate) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The device associated to the position update.
+devicePositionUpdate_deviceId :: Lens.Lens' DevicePositionUpdate Prelude.Text
+devicePositionUpdate_deviceId = Lens.lens (\DevicePositionUpdate' {deviceId} -> deviceId) (\s@DevicePositionUpdate' {} a -> s {deviceId = a} :: DevicePositionUpdate)
+
+-- | The latest device position defined in
+-- <https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84 WGS 84>
+-- format: @[X or longitude, Y or latitude]@.
+devicePositionUpdate_position :: Lens.Lens' DevicePositionUpdate (Prelude.NonEmpty Prelude.Double)
+devicePositionUpdate_position = Lens.lens (\DevicePositionUpdate' {position} -> position) (\s@DevicePositionUpdate' {} a -> s {position = a} :: DevicePositionUpdate) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The timestamp at which the device\'s position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+devicePositionUpdate_sampleTime :: Lens.Lens' DevicePositionUpdate Prelude.UTCTime
+devicePositionUpdate_sampleTime = Lens.lens (\DevicePositionUpdate' {sampleTime} -> sampleTime) (\s@DevicePositionUpdate' {} a -> s {sampleTime = a} :: DevicePositionUpdate) Prelude.. Data._Time
+
+instance Prelude.Hashable DevicePositionUpdate where
+  hashWithSalt _salt DevicePositionUpdate' {..} =
+    _salt
+      `Prelude.hashWithSalt` accuracy
+      `Prelude.hashWithSalt` positionProperties
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` sampleTime
+
+instance Prelude.NFData DevicePositionUpdate where
+  rnf DevicePositionUpdate' {..} =
+    Prelude.rnf accuracy
+      `Prelude.seq` Prelude.rnf positionProperties
+      `Prelude.seq` Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf sampleTime
+
+instance Data.ToJSON DevicePositionUpdate where
+  toJSON DevicePositionUpdate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Accuracy" Data..=) Prelude.<$> accuracy,
+            ("PositionProperties" Data..=)
+              Prelude.<$> positionProperties,
+            Prelude.Just ("DeviceId" Data..= deviceId),
+            Prelude.Just ("Position" Data..= position),
+            Prelude.Just ("SampleTime" Data..= sampleTime)
+          ]
+      )
diff --git a/gen/Amazonka/Location/Types/DimensionUnit.hs b/gen/Amazonka/Location/Types/DimensionUnit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/DimensionUnit.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.Location.Types.DimensionUnit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.DimensionUnit
+  ( DimensionUnit
+      ( ..,
+        DimensionUnit_Feet,
+        DimensionUnit_Meters
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DimensionUnit = DimensionUnit'
+  { fromDimensionUnit ::
+      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 DimensionUnit_Feet :: DimensionUnit
+pattern DimensionUnit_Feet = DimensionUnit' "Feet"
+
+pattern DimensionUnit_Meters :: DimensionUnit
+pattern DimensionUnit_Meters = DimensionUnit' "Meters"
+
+{-# COMPLETE
+  DimensionUnit_Feet,
+  DimensionUnit_Meters,
+  DimensionUnit'
+  #-}
diff --git a/gen/Amazonka/Location/Types/DistanceUnit.hs b/gen/Amazonka/Location/Types/DistanceUnit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/DistanceUnit.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.DistanceUnit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.DistanceUnit
+  ( DistanceUnit
+      ( ..,
+        DistanceUnit_Kilometers,
+        DistanceUnit_Miles
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DistanceUnit = DistanceUnit'
+  { fromDistanceUnit ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DistanceUnit_Kilometers :: DistanceUnit
+pattern DistanceUnit_Kilometers = DistanceUnit' "Kilometers"
+
+pattern DistanceUnit_Miles :: DistanceUnit
+pattern DistanceUnit_Miles = DistanceUnit' "Miles"
+
+{-# COMPLETE
+  DistanceUnit_Kilometers,
+  DistanceUnit_Miles,
+  DistanceUnit'
+  #-}
diff --git a/gen/Amazonka/Location/Types/GeofenceGeometry.hs b/gen/Amazonka/Location/Types/GeofenceGeometry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/GeofenceGeometry.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.GeofenceGeometry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.GeofenceGeometry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.Circle
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the geofence geometry details.
+--
+-- A geofence geometry is made up of either a polygon or a circle. Can be
+-- either a polygon or a circle. Including both will return a validation
+-- error.
+--
+-- Amazon Location doesn\'t currently support polygons with holes,
+-- multipolygons, polygons that are wound clockwise, or that cross the
+-- antimeridian.
+--
+-- /See:/ 'newGeofenceGeometry' smart constructor.
+data GeofenceGeometry = GeofenceGeometry'
+  { -- | A circle on the earth, as defined by a center point and a radius.
+    circle :: Prelude.Maybe (Data.Sensitive Circle),
+    -- | A polygon is a list of linear rings which are each made up of a list of
+    -- vertices.
+    --
+    -- Each vertex is a 2-dimensional point of the form:
+    -- @[longitude, latitude]@. This is represented as an array of doubles of
+    -- length 2 (so @[double, double]@).
+    --
+    -- An array of 4 or more vertices, where the first and last vertex are the
+    -- same (to form a closed boundary), is called a linear ring. The linear
+    -- ring vertices must be listed in counter-clockwise order around the
+    -- ring’s interior. The linear ring is represented as an array of vertices,
+    -- or an array of arrays of doubles (@[[double, double], ...]@).
+    --
+    -- A geofence consists of a single linear ring. To allow for future
+    -- expansion, the Polygon parameter takes an array of linear rings, which
+    -- is represented as an array of arrays of arrays of doubles
+    -- (@[[[double, double], ...], ...]@).
+    --
+    -- A linear ring for use in geofences can consist of between 4 and 1,000
+    -- vertices.
+    polygon :: Prelude.Maybe (Prelude.NonEmpty (Prelude.NonEmpty (Data.Sensitive (Prelude.NonEmpty Prelude.Double))))
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GeofenceGeometry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'circle', 'geofenceGeometry_circle' - A circle on the earth, as defined by a center point and a radius.
+--
+-- 'polygon', 'geofenceGeometry_polygon' - A polygon is a list of linear rings which are each made up of a list of
+-- vertices.
+--
+-- Each vertex is a 2-dimensional point of the form:
+-- @[longitude, latitude]@. This is represented as an array of doubles of
+-- length 2 (so @[double, double]@).
+--
+-- An array of 4 or more vertices, where the first and last vertex are the
+-- same (to form a closed boundary), is called a linear ring. The linear
+-- ring vertices must be listed in counter-clockwise order around the
+-- ring’s interior. The linear ring is represented as an array of vertices,
+-- or an array of arrays of doubles (@[[double, double], ...]@).
+--
+-- A geofence consists of a single linear ring. To allow for future
+-- expansion, the Polygon parameter takes an array of linear rings, which
+-- is represented as an array of arrays of arrays of doubles
+-- (@[[[double, double], ...], ...]@).
+--
+-- A linear ring for use in geofences can consist of between 4 and 1,000
+-- vertices.
+newGeofenceGeometry ::
+  GeofenceGeometry
+newGeofenceGeometry =
+  GeofenceGeometry'
+    { circle = Prelude.Nothing,
+      polygon = Prelude.Nothing
+    }
+
+-- | A circle on the earth, as defined by a center point and a radius.
+geofenceGeometry_circle :: Lens.Lens' GeofenceGeometry (Prelude.Maybe Circle)
+geofenceGeometry_circle = Lens.lens (\GeofenceGeometry' {circle} -> circle) (\s@GeofenceGeometry' {} a -> s {circle = a} :: GeofenceGeometry) Prelude.. Lens.mapping Data._Sensitive
+
+-- | A polygon is a list of linear rings which are each made up of a list of
+-- vertices.
+--
+-- Each vertex is a 2-dimensional point of the form:
+-- @[longitude, latitude]@. This is represented as an array of doubles of
+-- length 2 (so @[double, double]@).
+--
+-- An array of 4 or more vertices, where the first and last vertex are the
+-- same (to form a closed boundary), is called a linear ring. The linear
+-- ring vertices must be listed in counter-clockwise order around the
+-- ring’s interior. The linear ring is represented as an array of vertices,
+-- or an array of arrays of doubles (@[[double, double], ...]@).
+--
+-- A geofence consists of a single linear ring. To allow for future
+-- expansion, the Polygon parameter takes an array of linear rings, which
+-- is represented as an array of arrays of arrays of doubles
+-- (@[[[double, double], ...], ...]@).
+--
+-- A linear ring for use in geofences can consist of between 4 and 1,000
+-- vertices.
+geofenceGeometry_polygon :: Lens.Lens' GeofenceGeometry (Prelude.Maybe (Prelude.NonEmpty (Prelude.NonEmpty (Prelude.NonEmpty Prelude.Double))))
+geofenceGeometry_polygon = Lens.lens (\GeofenceGeometry' {polygon} -> polygon) (\s@GeofenceGeometry' {} a -> s {polygon = a} :: GeofenceGeometry) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON GeofenceGeometry where
+  parseJSON =
+    Data.withObject
+      "GeofenceGeometry"
+      ( \x ->
+          GeofenceGeometry'
+            Prelude.<$> (x Data..:? "Circle")
+            Prelude.<*> (x Data..:? "Polygon")
+      )
+
+instance Prelude.Hashable GeofenceGeometry where
+  hashWithSalt _salt GeofenceGeometry' {..} =
+    _salt
+      `Prelude.hashWithSalt` circle
+      `Prelude.hashWithSalt` polygon
+
+instance Prelude.NFData GeofenceGeometry where
+  rnf GeofenceGeometry' {..} =
+    Prelude.rnf circle
+      `Prelude.seq` Prelude.rnf polygon
+
+instance Data.ToJSON GeofenceGeometry where
+  toJSON GeofenceGeometry' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Circle" Data..=) Prelude.<$> circle,
+            ("Polygon" Data..=) Prelude.<$> polygon
+          ]
+      )
diff --git a/gen/Amazonka/Location/Types/IntendedUse.hs b/gen/Amazonka/Location/Types/IntendedUse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/IntendedUse.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.Location.Types.IntendedUse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.IntendedUse
+  ( IntendedUse
+      ( ..,
+        IntendedUse_SingleUse,
+        IntendedUse_Storage
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype IntendedUse = IntendedUse'
+  { fromIntendedUse ::
+      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 IntendedUse_SingleUse :: IntendedUse
+pattern IntendedUse_SingleUse = IntendedUse' "SingleUse"
+
+pattern IntendedUse_Storage :: IntendedUse
+pattern IntendedUse_Storage = IntendedUse' "Storage"
+
+{-# COMPLETE
+  IntendedUse_SingleUse,
+  IntendedUse_Storage,
+  IntendedUse'
+  #-}
diff --git a/gen/Amazonka/Location/Types/Leg.hs b/gen/Amazonka/Location/Types/Leg.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/Leg.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.Leg
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.Leg where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.LegGeometry
+import Amazonka.Location.Types.Step
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the calculated route\'s details for each path between a pair of
+-- positions. The number of legs returned corresponds to one fewer than the
+-- total number of positions in the request.
+--
+-- For example, a route with a departure position and destination position
+-- returns one leg with the positions
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html snapped to a nearby road>:
+--
+-- -   The @StartPosition@ is the departure position.
+--
+-- -   The @EndPosition@ is the destination position.
+--
+-- A route with a waypoint between the departure and destination position
+-- returns two legs with the positions snapped to a nearby road:
+--
+-- -   Leg 1: The @StartPosition@ is the departure position . The
+--     @EndPosition@ is the waypoint positon.
+--
+-- -   Leg 2: The @StartPosition@ is the waypoint position. The
+--     @EndPosition@ is the destination position.
+--
+-- /See:/ 'newLeg' smart constructor.
+data Leg = Leg'
+  { -- | Contains the calculated route\'s path as a linestring geometry.
+    geometry :: Prelude.Maybe LegGeometry,
+    -- | The distance between the leg\'s @StartPosition@ and @EndPosition@ along
+    -- a calculated route.
+    --
+    -- -   The default measurement is @Kilometers@ unless the request specifies
+    --     a @DistanceUnit@ of @Miles@.
+    distance :: Prelude.Double,
+    -- | The estimated travel time between the leg\'s @StartPosition@ and
+    -- @EndPosition@. The travel mode and departure time that you specify in
+    -- the request determines the calculated time.
+    durationSeconds :: Prelude.Double,
+    -- | The terminating position of the leg. Follows the format
+    -- @[longitude,latitude]@.
+    --
+    -- If the @EndPosition@ isn\'t located on a road, it\'s
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/nap-to-nearby-road.html snapped to a nearby road>.
+    endPosition :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | The starting position of the leg. Follows the format
+    -- @[longitude,latitude]@.
+    --
+    -- If the @StartPosition@ isn\'t located on a road, it\'s
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html snapped to a nearby road>.
+    startPosition :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | Contains a list of steps, which represent subsections of a leg. Each
+    -- step provides instructions for how to move to the next step in the leg
+    -- such as the step\'s start position, end position, travel distance,
+    -- travel duration, and geometry offset.
+    steps :: [Step]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Leg' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'geometry', 'leg_geometry' - Contains the calculated route\'s path as a linestring geometry.
+--
+-- 'distance', 'leg_distance' - The distance between the leg\'s @StartPosition@ and @EndPosition@ along
+-- a calculated route.
+--
+-- -   The default measurement is @Kilometers@ unless the request specifies
+--     a @DistanceUnit@ of @Miles@.
+--
+-- 'durationSeconds', 'leg_durationSeconds' - The estimated travel time between the leg\'s @StartPosition@ and
+-- @EndPosition@. The travel mode and departure time that you specify in
+-- the request determines the calculated time.
+--
+-- 'endPosition', 'leg_endPosition' - The terminating position of the leg. Follows the format
+-- @[longitude,latitude]@.
+--
+-- If the @EndPosition@ isn\'t located on a road, it\'s
+-- <https://docs.aws.amazon.com/location/latest/developerguide/nap-to-nearby-road.html snapped to a nearby road>.
+--
+-- 'startPosition', 'leg_startPosition' - The starting position of the leg. Follows the format
+-- @[longitude,latitude]@.
+--
+-- If the @StartPosition@ isn\'t located on a road, it\'s
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html snapped to a nearby road>.
+--
+-- 'steps', 'leg_steps' - Contains a list of steps, which represent subsections of a leg. Each
+-- step provides instructions for how to move to the next step in the leg
+-- such as the step\'s start position, end position, travel distance,
+-- travel duration, and geometry offset.
+newLeg ::
+  -- | 'distance'
+  Prelude.Double ->
+  -- | 'durationSeconds'
+  Prelude.Double ->
+  -- | 'endPosition'
+  Prelude.NonEmpty Prelude.Double ->
+  -- | 'startPosition'
+  Prelude.NonEmpty Prelude.Double ->
+  Leg
+newLeg
+  pDistance_
+  pDurationSeconds_
+  pEndPosition_
+  pStartPosition_ =
+    Leg'
+      { geometry = Prelude.Nothing,
+        distance = pDistance_,
+        durationSeconds = pDurationSeconds_,
+        endPosition =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pEndPosition_,
+        startPosition =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pStartPosition_,
+        steps = Prelude.mempty
+      }
+
+-- | Contains the calculated route\'s path as a linestring geometry.
+leg_geometry :: Lens.Lens' Leg (Prelude.Maybe LegGeometry)
+leg_geometry = Lens.lens (\Leg' {geometry} -> geometry) (\s@Leg' {} a -> s {geometry = a} :: Leg)
+
+-- | The distance between the leg\'s @StartPosition@ and @EndPosition@ along
+-- a calculated route.
+--
+-- -   The default measurement is @Kilometers@ unless the request specifies
+--     a @DistanceUnit@ of @Miles@.
+leg_distance :: Lens.Lens' Leg Prelude.Double
+leg_distance = Lens.lens (\Leg' {distance} -> distance) (\s@Leg' {} a -> s {distance = a} :: Leg)
+
+-- | The estimated travel time between the leg\'s @StartPosition@ and
+-- @EndPosition@. The travel mode and departure time that you specify in
+-- the request determines the calculated time.
+leg_durationSeconds :: Lens.Lens' Leg Prelude.Double
+leg_durationSeconds = Lens.lens (\Leg' {durationSeconds} -> durationSeconds) (\s@Leg' {} a -> s {durationSeconds = a} :: Leg)
+
+-- | The terminating position of the leg. Follows the format
+-- @[longitude,latitude]@.
+--
+-- If the @EndPosition@ isn\'t located on a road, it\'s
+-- <https://docs.aws.amazon.com/location/latest/developerguide/nap-to-nearby-road.html snapped to a nearby road>.
+leg_endPosition :: Lens.Lens' Leg (Prelude.NonEmpty Prelude.Double)
+leg_endPosition = Lens.lens (\Leg' {endPosition} -> endPosition) (\s@Leg' {} a -> s {endPosition = a} :: Leg) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The starting position of the leg. Follows the format
+-- @[longitude,latitude]@.
+--
+-- If the @StartPosition@ isn\'t located on a road, it\'s
+-- <https://docs.aws.amazon.com/location/latest/developerguide/snap-to-nearby-road.html snapped to a nearby road>.
+leg_startPosition :: Lens.Lens' Leg (Prelude.NonEmpty Prelude.Double)
+leg_startPosition = Lens.lens (\Leg' {startPosition} -> startPosition) (\s@Leg' {} a -> s {startPosition = a} :: Leg) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | Contains a list of steps, which represent subsections of a leg. Each
+-- step provides instructions for how to move to the next step in the leg
+-- such as the step\'s start position, end position, travel distance,
+-- travel duration, and geometry offset.
+leg_steps :: Lens.Lens' Leg [Step]
+leg_steps = Lens.lens (\Leg' {steps} -> steps) (\s@Leg' {} a -> s {steps = a} :: Leg) Prelude.. Lens.coerced
+
+instance Data.FromJSON Leg where
+  parseJSON =
+    Data.withObject
+      "Leg"
+      ( \x ->
+          Leg'
+            Prelude.<$> (x Data..:? "Geometry")
+            Prelude.<*> (x Data..: "Distance")
+            Prelude.<*> (x Data..: "DurationSeconds")
+            Prelude.<*> (x Data..: "EndPosition")
+            Prelude.<*> (x Data..: "StartPosition")
+            Prelude.<*> (x Data..:? "Steps" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Leg where
+  hashWithSalt _salt Leg' {..} =
+    _salt
+      `Prelude.hashWithSalt` geometry
+      `Prelude.hashWithSalt` distance
+      `Prelude.hashWithSalt` durationSeconds
+      `Prelude.hashWithSalt` endPosition
+      `Prelude.hashWithSalt` startPosition
+      `Prelude.hashWithSalt` steps
+
+instance Prelude.NFData Leg where
+  rnf Leg' {..} =
+    Prelude.rnf geometry
+      `Prelude.seq` Prelude.rnf distance
+      `Prelude.seq` Prelude.rnf durationSeconds
+      `Prelude.seq` Prelude.rnf endPosition
+      `Prelude.seq` Prelude.rnf startPosition
+      `Prelude.seq` Prelude.rnf steps
diff --git a/gen/Amazonka/Location/Types/LegGeometry.hs b/gen/Amazonka/Location/Types/LegGeometry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/LegGeometry.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.LegGeometry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.LegGeometry 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
+
+-- | Contains the geometry details for each path between a pair of positions.
+-- Used in plotting a route leg on a map.
+--
+-- /See:/ 'newLegGeometry' smart constructor.
+data LegGeometry = LegGeometry'
+  { -- | An ordered list of positions used to plot a route on a map.
+    --
+    -- The first position is closest to the start position for the leg, and the
+    -- last position is the closest to the end position for the leg.
+    --
+    -- -   For example,
+    --     @[[-123.117, 49.284],[-123.115, 49.285],[-123.115, 49.285]]@
+    lineString :: Prelude.Maybe (Prelude.NonEmpty (Data.Sensitive (Prelude.NonEmpty Prelude.Double)))
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LegGeometry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lineString', 'legGeometry_lineString' - An ordered list of positions used to plot a route on a map.
+--
+-- The first position is closest to the start position for the leg, and the
+-- last position is the closest to the end position for the leg.
+--
+-- -   For example,
+--     @[[-123.117, 49.284],[-123.115, 49.285],[-123.115, 49.285]]@
+newLegGeometry ::
+  LegGeometry
+newLegGeometry =
+  LegGeometry' {lineString = Prelude.Nothing}
+
+-- | An ordered list of positions used to plot a route on a map.
+--
+-- The first position is closest to the start position for the leg, and the
+-- last position is the closest to the end position for the leg.
+--
+-- -   For example,
+--     @[[-123.117, 49.284],[-123.115, 49.285],[-123.115, 49.285]]@
+legGeometry_lineString :: Lens.Lens' LegGeometry (Prelude.Maybe (Prelude.NonEmpty (Prelude.NonEmpty Prelude.Double)))
+legGeometry_lineString = Lens.lens (\LegGeometry' {lineString} -> lineString) (\s@LegGeometry' {} a -> s {lineString = a} :: LegGeometry) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON LegGeometry where
+  parseJSON =
+    Data.withObject
+      "LegGeometry"
+      ( \x ->
+          LegGeometry' Prelude.<$> (x Data..:? "LineString")
+      )
+
+instance Prelude.Hashable LegGeometry where
+  hashWithSalt _salt LegGeometry' {..} =
+    _salt `Prelude.hashWithSalt` lineString
+
+instance Prelude.NFData LegGeometry where
+  rnf LegGeometry' {..} = Prelude.rnf lineString
diff --git a/gen/Amazonka/Location/Types/ListDevicePositionsResponseEntry.hs b/gen/Amazonka/Location/Types/ListDevicePositionsResponseEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/ListDevicePositionsResponseEntry.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.ListDevicePositionsResponseEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.ListDevicePositionsResponseEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PositionalAccuracy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the tracker resource details.
+--
+-- /See:/ 'newListDevicePositionsResponseEntry' smart constructor.
+data ListDevicePositionsResponseEntry = ListDevicePositionsResponseEntry'
+  { -- | The accuracy of the device position.
+    accuracy :: Prelude.Maybe PositionalAccuracy,
+    -- | The properties associated with the position.
+    positionProperties :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The ID of the device for this position.
+    deviceId :: Prelude.Text,
+    -- | The last known device position. Empty if no positions currently stored.
+    position :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | The timestamp at which the device position was determined. Uses
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    sampleTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDevicePositionsResponseEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accuracy', 'listDevicePositionsResponseEntry_accuracy' - The accuracy of the device position.
+--
+-- 'positionProperties', 'listDevicePositionsResponseEntry_positionProperties' - The properties associated with the position.
+--
+-- 'deviceId', 'listDevicePositionsResponseEntry_deviceId' - The ID of the device for this position.
+--
+-- 'position', 'listDevicePositionsResponseEntry_position' - The last known device position. Empty if no positions currently stored.
+--
+-- 'sampleTime', 'listDevicePositionsResponseEntry_sampleTime' - The timestamp at which the device position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newListDevicePositionsResponseEntry ::
+  -- | 'deviceId'
+  Prelude.Text ->
+  -- | 'position'
+  Prelude.NonEmpty Prelude.Double ->
+  -- | 'sampleTime'
+  Prelude.UTCTime ->
+  ListDevicePositionsResponseEntry
+newListDevicePositionsResponseEntry
+  pDeviceId_
+  pPosition_
+  pSampleTime_ =
+    ListDevicePositionsResponseEntry'
+      { accuracy =
+          Prelude.Nothing,
+        positionProperties = Prelude.Nothing,
+        deviceId = pDeviceId_,
+        position =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pPosition_,
+        sampleTime =
+          Data._Time Lens.# pSampleTime_
+      }
+
+-- | The accuracy of the device position.
+listDevicePositionsResponseEntry_accuracy :: Lens.Lens' ListDevicePositionsResponseEntry (Prelude.Maybe PositionalAccuracy)
+listDevicePositionsResponseEntry_accuracy = Lens.lens (\ListDevicePositionsResponseEntry' {accuracy} -> accuracy) (\s@ListDevicePositionsResponseEntry' {} a -> s {accuracy = a} :: ListDevicePositionsResponseEntry)
+
+-- | The properties associated with the position.
+listDevicePositionsResponseEntry_positionProperties :: Lens.Lens' ListDevicePositionsResponseEntry (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listDevicePositionsResponseEntry_positionProperties = Lens.lens (\ListDevicePositionsResponseEntry' {positionProperties} -> positionProperties) (\s@ListDevicePositionsResponseEntry' {} a -> s {positionProperties = a} :: ListDevicePositionsResponseEntry) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The ID of the device for this position.
+listDevicePositionsResponseEntry_deviceId :: Lens.Lens' ListDevicePositionsResponseEntry Prelude.Text
+listDevicePositionsResponseEntry_deviceId = Lens.lens (\ListDevicePositionsResponseEntry' {deviceId} -> deviceId) (\s@ListDevicePositionsResponseEntry' {} a -> s {deviceId = a} :: ListDevicePositionsResponseEntry)
+
+-- | The last known device position. Empty if no positions currently stored.
+listDevicePositionsResponseEntry_position :: Lens.Lens' ListDevicePositionsResponseEntry (Prelude.NonEmpty Prelude.Double)
+listDevicePositionsResponseEntry_position = Lens.lens (\ListDevicePositionsResponseEntry' {position} -> position) (\s@ListDevicePositionsResponseEntry' {} a -> s {position = a} :: ListDevicePositionsResponseEntry) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The timestamp at which the device position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+listDevicePositionsResponseEntry_sampleTime :: Lens.Lens' ListDevicePositionsResponseEntry Prelude.UTCTime
+listDevicePositionsResponseEntry_sampleTime = Lens.lens (\ListDevicePositionsResponseEntry' {sampleTime} -> sampleTime) (\s@ListDevicePositionsResponseEntry' {} a -> s {sampleTime = a} :: ListDevicePositionsResponseEntry) Prelude.. Data._Time
+
+instance
+  Data.FromJSON
+    ListDevicePositionsResponseEntry
+  where
+  parseJSON =
+    Data.withObject
+      "ListDevicePositionsResponseEntry"
+      ( \x ->
+          ListDevicePositionsResponseEntry'
+            Prelude.<$> (x Data..:? "Accuracy")
+            Prelude.<*> ( x
+                            Data..:? "PositionProperties"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "DeviceId")
+            Prelude.<*> (x Data..: "Position")
+            Prelude.<*> (x Data..: "SampleTime")
+      )
+
+instance
+  Prelude.Hashable
+    ListDevicePositionsResponseEntry
+  where
+  hashWithSalt
+    _salt
+    ListDevicePositionsResponseEntry' {..} =
+      _salt
+        `Prelude.hashWithSalt` accuracy
+        `Prelude.hashWithSalt` positionProperties
+        `Prelude.hashWithSalt` deviceId
+        `Prelude.hashWithSalt` position
+        `Prelude.hashWithSalt` sampleTime
+
+instance
+  Prelude.NFData
+    ListDevicePositionsResponseEntry
+  where
+  rnf ListDevicePositionsResponseEntry' {..} =
+    Prelude.rnf accuracy
+      `Prelude.seq` Prelude.rnf positionProperties
+      `Prelude.seq` Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf sampleTime
diff --git a/gen/Amazonka/Location/Types/ListGeofenceCollectionsResponseEntry.hs b/gen/Amazonka/Location/Types/ListGeofenceCollectionsResponseEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/ListGeofenceCollectionsResponseEntry.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.ListGeofenceCollectionsResponseEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.ListGeofenceCollectionsResponseEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PricingPlan
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the geofence collection details.
+--
+-- /See:/ 'newListGeofenceCollectionsResponseEntry' smart constructor.
+data ListGeofenceCollectionsResponseEntry = ListGeofenceCollectionsResponseEntry'
+  { -- | No longer used. Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | No longer used. Always returns an empty string.
+    pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
+    -- | The name of the geofence collection.
+    collectionName :: Prelude.Text,
+    -- | The timestamp for when the geofence collection was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    createTime :: Data.ISO8601,
+    -- | The description for the geofence collection
+    description :: Prelude.Text,
+    -- | Specifies a timestamp for when the resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGeofenceCollectionsResponseEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pricingPlan', 'listGeofenceCollectionsResponseEntry_pricingPlan' - No longer used. Always returns @RequestBasedUsage@.
+--
+-- 'pricingPlanDataSource', 'listGeofenceCollectionsResponseEntry_pricingPlanDataSource' - No longer used. Always returns an empty string.
+--
+-- 'collectionName', 'listGeofenceCollectionsResponseEntry_collectionName' - The name of the geofence collection.
+--
+-- 'createTime', 'listGeofenceCollectionsResponseEntry_createTime' - The timestamp for when the geofence collection was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+--
+-- 'description', 'listGeofenceCollectionsResponseEntry_description' - The description for the geofence collection
+--
+-- 'updateTime', 'listGeofenceCollectionsResponseEntry_updateTime' - Specifies a timestamp for when the resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newListGeofenceCollectionsResponseEntry ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  ListGeofenceCollectionsResponseEntry
+newListGeofenceCollectionsResponseEntry
+  pCollectionName_
+  pCreateTime_
+  pDescription_
+  pUpdateTime_ =
+    ListGeofenceCollectionsResponseEntry'
+      { pricingPlan =
+          Prelude.Nothing,
+        pricingPlanDataSource =
+          Prelude.Nothing,
+        collectionName = pCollectionName_,
+        createTime =
+          Data._Time Lens.# pCreateTime_,
+        description = pDescription_,
+        updateTime =
+          Data._Time Lens.# pUpdateTime_
+      }
+
+-- | No longer used. Always returns @RequestBasedUsage@.
+listGeofenceCollectionsResponseEntry_pricingPlan :: Lens.Lens' ListGeofenceCollectionsResponseEntry (Prelude.Maybe PricingPlan)
+listGeofenceCollectionsResponseEntry_pricingPlan = Lens.lens (\ListGeofenceCollectionsResponseEntry' {pricingPlan} -> pricingPlan) (\s@ListGeofenceCollectionsResponseEntry' {} a -> s {pricingPlan = a} :: ListGeofenceCollectionsResponseEntry)
+
+-- | No longer used. Always returns an empty string.
+listGeofenceCollectionsResponseEntry_pricingPlanDataSource :: Lens.Lens' ListGeofenceCollectionsResponseEntry (Prelude.Maybe Prelude.Text)
+listGeofenceCollectionsResponseEntry_pricingPlanDataSource = Lens.lens (\ListGeofenceCollectionsResponseEntry' {pricingPlanDataSource} -> pricingPlanDataSource) (\s@ListGeofenceCollectionsResponseEntry' {} a -> s {pricingPlanDataSource = a} :: ListGeofenceCollectionsResponseEntry)
+
+-- | The name of the geofence collection.
+listGeofenceCollectionsResponseEntry_collectionName :: Lens.Lens' ListGeofenceCollectionsResponseEntry Prelude.Text
+listGeofenceCollectionsResponseEntry_collectionName = Lens.lens (\ListGeofenceCollectionsResponseEntry' {collectionName} -> collectionName) (\s@ListGeofenceCollectionsResponseEntry' {} a -> s {collectionName = a} :: ListGeofenceCollectionsResponseEntry)
+
+-- | The timestamp for when the geofence collection was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+listGeofenceCollectionsResponseEntry_createTime :: Lens.Lens' ListGeofenceCollectionsResponseEntry Prelude.UTCTime
+listGeofenceCollectionsResponseEntry_createTime = Lens.lens (\ListGeofenceCollectionsResponseEntry' {createTime} -> createTime) (\s@ListGeofenceCollectionsResponseEntry' {} a -> s {createTime = a} :: ListGeofenceCollectionsResponseEntry) Prelude.. Data._Time
+
+-- | The description for the geofence collection
+listGeofenceCollectionsResponseEntry_description :: Lens.Lens' ListGeofenceCollectionsResponseEntry Prelude.Text
+listGeofenceCollectionsResponseEntry_description = Lens.lens (\ListGeofenceCollectionsResponseEntry' {description} -> description) (\s@ListGeofenceCollectionsResponseEntry' {} a -> s {description = a} :: ListGeofenceCollectionsResponseEntry)
+
+-- | Specifies a timestamp for when the resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+listGeofenceCollectionsResponseEntry_updateTime :: Lens.Lens' ListGeofenceCollectionsResponseEntry Prelude.UTCTime
+listGeofenceCollectionsResponseEntry_updateTime = Lens.lens (\ListGeofenceCollectionsResponseEntry' {updateTime} -> updateTime) (\s@ListGeofenceCollectionsResponseEntry' {} a -> s {updateTime = a} :: ListGeofenceCollectionsResponseEntry) Prelude.. Data._Time
+
+instance
+  Data.FromJSON
+    ListGeofenceCollectionsResponseEntry
+  where
+  parseJSON =
+    Data.withObject
+      "ListGeofenceCollectionsResponseEntry"
+      ( \x ->
+          ListGeofenceCollectionsResponseEntry'
+            Prelude.<$> (x Data..:? "PricingPlan")
+            Prelude.<*> (x Data..:? "PricingPlanDataSource")
+            Prelude.<*> (x Data..: "CollectionName")
+            Prelude.<*> (x Data..: "CreateTime")
+            Prelude.<*> (x Data..: "Description")
+            Prelude.<*> (x Data..: "UpdateTime")
+      )
+
+instance
+  Prelude.Hashable
+    ListGeofenceCollectionsResponseEntry
+  where
+  hashWithSalt
+    _salt
+    ListGeofenceCollectionsResponseEntry' {..} =
+      _salt
+        `Prelude.hashWithSalt` pricingPlan
+        `Prelude.hashWithSalt` pricingPlanDataSource
+        `Prelude.hashWithSalt` collectionName
+        `Prelude.hashWithSalt` createTime
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` updateTime
+
+instance
+  Prelude.NFData
+    ListGeofenceCollectionsResponseEntry
+  where
+  rnf ListGeofenceCollectionsResponseEntry' {..} =
+    Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf pricingPlanDataSource
+      `Prelude.seq` Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/Types/ListGeofenceResponseEntry.hs b/gen/Amazonka/Location/Types/ListGeofenceResponseEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/ListGeofenceResponseEntry.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.ListGeofenceResponseEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.ListGeofenceResponseEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.GeofenceGeometry
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains a list of geofences stored in a given geofence collection.
+--
+-- /See:/ 'newListGeofenceResponseEntry' smart constructor.
+data ListGeofenceResponseEntry = ListGeofenceResponseEntry'
+  { -- | The timestamp for when the geofence was stored in a geofence collection
+    -- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    createTime :: Data.ISO8601,
+    -- | The geofence identifier.
+    geofenceId :: Prelude.Text,
+    -- | Contains the geofence geometry details describing a polygon or a circle.
+    geometry :: GeofenceGeometry,
+    -- | Identifies the state of the geofence. A geofence will hold one of the
+    -- following states:
+    --
+    -- -   @ACTIVE@ — The geofence has been indexed by the system.
+    --
+    -- -   @PENDING@ — The geofence is being processed by the system.
+    --
+    -- -   @FAILED@ — The geofence failed to be indexed by the system.
+    --
+    -- -   @DELETED@ — The geofence has been deleted from the system index.
+    --
+    -- -   @DELETING@ — The geofence is being deleted from the system index.
+    status :: Prelude.Text,
+    -- | The timestamp for when the geofence was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListGeofenceResponseEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createTime', 'listGeofenceResponseEntry_createTime' - The timestamp for when the geofence was stored in a geofence collection
+-- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+--
+-- 'geofenceId', 'listGeofenceResponseEntry_geofenceId' - The geofence identifier.
+--
+-- 'geometry', 'listGeofenceResponseEntry_geometry' - Contains the geofence geometry details describing a polygon or a circle.
+--
+-- 'status', 'listGeofenceResponseEntry_status' - Identifies the state of the geofence. A geofence will hold one of the
+-- following states:
+--
+-- -   @ACTIVE@ — The geofence has been indexed by the system.
+--
+-- -   @PENDING@ — The geofence is being processed by the system.
+--
+-- -   @FAILED@ — The geofence failed to be indexed by the system.
+--
+-- -   @DELETED@ — The geofence has been deleted from the system index.
+--
+-- -   @DELETING@ — The geofence is being deleted from the system index.
+--
+-- 'updateTime', 'listGeofenceResponseEntry_updateTime' - The timestamp for when the geofence was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newListGeofenceResponseEntry ::
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'geofenceId'
+  Prelude.Text ->
+  -- | 'geometry'
+  GeofenceGeometry ->
+  -- | 'status'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  ListGeofenceResponseEntry
+newListGeofenceResponseEntry
+  pCreateTime_
+  pGeofenceId_
+  pGeometry_
+  pStatus_
+  pUpdateTime_ =
+    ListGeofenceResponseEntry'
+      { createTime =
+          Data._Time Lens.# pCreateTime_,
+        geofenceId = pGeofenceId_,
+        geometry = pGeometry_,
+        status = pStatus_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The timestamp for when the geofence was stored in a geofence collection
+-- in <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+listGeofenceResponseEntry_createTime :: Lens.Lens' ListGeofenceResponseEntry Prelude.UTCTime
+listGeofenceResponseEntry_createTime = Lens.lens (\ListGeofenceResponseEntry' {createTime} -> createTime) (\s@ListGeofenceResponseEntry' {} a -> s {createTime = a} :: ListGeofenceResponseEntry) Prelude.. Data._Time
+
+-- | The geofence identifier.
+listGeofenceResponseEntry_geofenceId :: Lens.Lens' ListGeofenceResponseEntry Prelude.Text
+listGeofenceResponseEntry_geofenceId = Lens.lens (\ListGeofenceResponseEntry' {geofenceId} -> geofenceId) (\s@ListGeofenceResponseEntry' {} a -> s {geofenceId = a} :: ListGeofenceResponseEntry)
+
+-- | Contains the geofence geometry details describing a polygon or a circle.
+listGeofenceResponseEntry_geometry :: Lens.Lens' ListGeofenceResponseEntry GeofenceGeometry
+listGeofenceResponseEntry_geometry = Lens.lens (\ListGeofenceResponseEntry' {geometry} -> geometry) (\s@ListGeofenceResponseEntry' {} a -> s {geometry = a} :: ListGeofenceResponseEntry)
+
+-- | Identifies the state of the geofence. A geofence will hold one of the
+-- following states:
+--
+-- -   @ACTIVE@ — The geofence has been indexed by the system.
+--
+-- -   @PENDING@ — The geofence is being processed by the system.
+--
+-- -   @FAILED@ — The geofence failed to be indexed by the system.
+--
+-- -   @DELETED@ — The geofence has been deleted from the system index.
+--
+-- -   @DELETING@ — The geofence is being deleted from the system index.
+listGeofenceResponseEntry_status :: Lens.Lens' ListGeofenceResponseEntry Prelude.Text
+listGeofenceResponseEntry_status = Lens.lens (\ListGeofenceResponseEntry' {status} -> status) (\s@ListGeofenceResponseEntry' {} a -> s {status = a} :: ListGeofenceResponseEntry)
+
+-- | The timestamp for when the geofence was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+listGeofenceResponseEntry_updateTime :: Lens.Lens' ListGeofenceResponseEntry Prelude.UTCTime
+listGeofenceResponseEntry_updateTime = Lens.lens (\ListGeofenceResponseEntry' {updateTime} -> updateTime) (\s@ListGeofenceResponseEntry' {} a -> s {updateTime = a} :: ListGeofenceResponseEntry) Prelude.. Data._Time
+
+instance Data.FromJSON ListGeofenceResponseEntry where
+  parseJSON =
+    Data.withObject
+      "ListGeofenceResponseEntry"
+      ( \x ->
+          ListGeofenceResponseEntry'
+            Prelude.<$> (x Data..: "CreateTime")
+            Prelude.<*> (x Data..: "GeofenceId")
+            Prelude.<*> (x Data..: "Geometry")
+            Prelude.<*> (x Data..: "Status")
+            Prelude.<*> (x Data..: "UpdateTime")
+      )
+
+instance Prelude.Hashable ListGeofenceResponseEntry where
+  hashWithSalt _salt ListGeofenceResponseEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` geofenceId
+      `Prelude.hashWithSalt` geometry
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData ListGeofenceResponseEntry where
+  rnf ListGeofenceResponseEntry' {..} =
+    Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf geofenceId
+      `Prelude.seq` Prelude.rnf geometry
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/Types/ListMapsResponseEntry.hs b/gen/Amazonka/Location/Types/ListMapsResponseEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/ListMapsResponseEntry.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.ListMapsResponseEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.ListMapsResponseEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PricingPlan
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains details of an existing map resource in your AWS account.
+--
+-- /See:/ 'newListMapsResponseEntry' smart constructor.
+data ListMapsResponseEntry = ListMapsResponseEntry'
+  { -- | No longer used. Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | The timestamp for when the map resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | Specifies the data provider for the associated map tiles.
+    dataSource :: Prelude.Text,
+    -- | The description for the map resource.
+    description :: Prelude.Text,
+    -- | The name of the associated map resource.
+    mapName :: Prelude.Text,
+    -- | The timestamp for when the map resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMapsResponseEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pricingPlan', 'listMapsResponseEntry_pricingPlan' - No longer used. Always returns @RequestBasedUsage@.
+--
+-- 'createTime', 'listMapsResponseEntry_createTime' - The timestamp for when the map resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'dataSource', 'listMapsResponseEntry_dataSource' - Specifies the data provider for the associated map tiles.
+--
+-- 'description', 'listMapsResponseEntry_description' - The description for the map resource.
+--
+-- 'mapName', 'listMapsResponseEntry_mapName' - The name of the associated map resource.
+--
+-- 'updateTime', 'listMapsResponseEntry_updateTime' - The timestamp for when the map resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newListMapsResponseEntry ::
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'mapName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  ListMapsResponseEntry
+newListMapsResponseEntry
+  pCreateTime_
+  pDataSource_
+  pDescription_
+  pMapName_
+  pUpdateTime_ =
+    ListMapsResponseEntry'
+      { pricingPlan =
+          Prelude.Nothing,
+        createTime = Data._Time Lens.# pCreateTime_,
+        dataSource = pDataSource_,
+        description = pDescription_,
+        mapName = pMapName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | No longer used. Always returns @RequestBasedUsage@.
+listMapsResponseEntry_pricingPlan :: Lens.Lens' ListMapsResponseEntry (Prelude.Maybe PricingPlan)
+listMapsResponseEntry_pricingPlan = Lens.lens (\ListMapsResponseEntry' {pricingPlan} -> pricingPlan) (\s@ListMapsResponseEntry' {} a -> s {pricingPlan = a} :: ListMapsResponseEntry)
+
+-- | The timestamp for when the map resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+listMapsResponseEntry_createTime :: Lens.Lens' ListMapsResponseEntry Prelude.UTCTime
+listMapsResponseEntry_createTime = Lens.lens (\ListMapsResponseEntry' {createTime} -> createTime) (\s@ListMapsResponseEntry' {} a -> s {createTime = a} :: ListMapsResponseEntry) Prelude.. Data._Time
+
+-- | Specifies the data provider for the associated map tiles.
+listMapsResponseEntry_dataSource :: Lens.Lens' ListMapsResponseEntry Prelude.Text
+listMapsResponseEntry_dataSource = Lens.lens (\ListMapsResponseEntry' {dataSource} -> dataSource) (\s@ListMapsResponseEntry' {} a -> s {dataSource = a} :: ListMapsResponseEntry)
+
+-- | The description for the map resource.
+listMapsResponseEntry_description :: Lens.Lens' ListMapsResponseEntry Prelude.Text
+listMapsResponseEntry_description = Lens.lens (\ListMapsResponseEntry' {description} -> description) (\s@ListMapsResponseEntry' {} a -> s {description = a} :: ListMapsResponseEntry)
+
+-- | The name of the associated map resource.
+listMapsResponseEntry_mapName :: Lens.Lens' ListMapsResponseEntry Prelude.Text
+listMapsResponseEntry_mapName = Lens.lens (\ListMapsResponseEntry' {mapName} -> mapName) (\s@ListMapsResponseEntry' {} a -> s {mapName = a} :: ListMapsResponseEntry)
+
+-- | The timestamp for when the map resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+listMapsResponseEntry_updateTime :: Lens.Lens' ListMapsResponseEntry Prelude.UTCTime
+listMapsResponseEntry_updateTime = Lens.lens (\ListMapsResponseEntry' {updateTime} -> updateTime) (\s@ListMapsResponseEntry' {} a -> s {updateTime = a} :: ListMapsResponseEntry) Prelude.. Data._Time
+
+instance Data.FromJSON ListMapsResponseEntry where
+  parseJSON =
+    Data.withObject
+      "ListMapsResponseEntry"
+      ( \x ->
+          ListMapsResponseEntry'
+            Prelude.<$> (x Data..:? "PricingPlan")
+            Prelude.<*> (x Data..: "CreateTime")
+            Prelude.<*> (x Data..: "DataSource")
+            Prelude.<*> (x Data..: "Description")
+            Prelude.<*> (x Data..: "MapName")
+            Prelude.<*> (x Data..: "UpdateTime")
+      )
+
+instance Prelude.Hashable ListMapsResponseEntry where
+  hashWithSalt _salt ListMapsResponseEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` mapName
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData ListMapsResponseEntry where
+  rnf ListMapsResponseEntry' {..} =
+    Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf mapName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/Types/ListPlaceIndexesResponseEntry.hs b/gen/Amazonka/Location/Types/ListPlaceIndexesResponseEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/ListPlaceIndexesResponseEntry.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.ListPlaceIndexesResponseEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.ListPlaceIndexesResponseEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PricingPlan
+import qualified Amazonka.Prelude as Prelude
+
+-- | A place index resource listed in your AWS account.
+--
+-- /See:/ 'newListPlaceIndexesResponseEntry' smart constructor.
+data ListPlaceIndexesResponseEntry = ListPlaceIndexesResponseEntry'
+  { -- | No longer used. Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | The timestamp for when the place index resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | The data provider of geospatial data. Values can be one of the
+    -- following:
+    --
+    -- -   @Esri@
+    --
+    -- -   @Here@
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The optional description for the place index resource.
+    description :: Prelude.Text,
+    -- | The name of the place index resource.
+    indexName :: Prelude.Text,
+    -- | The timestamp for when the place index resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPlaceIndexesResponseEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pricingPlan', 'listPlaceIndexesResponseEntry_pricingPlan' - No longer used. Always returns @RequestBasedUsage@.
+--
+-- 'createTime', 'listPlaceIndexesResponseEntry_createTime' - The timestamp for when the place index resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'dataSource', 'listPlaceIndexesResponseEntry_dataSource' - The data provider of geospatial data. Values can be one of the
+-- following:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'description', 'listPlaceIndexesResponseEntry_description' - The optional description for the place index resource.
+--
+-- 'indexName', 'listPlaceIndexesResponseEntry_indexName' - The name of the place index resource.
+--
+-- 'updateTime', 'listPlaceIndexesResponseEntry_updateTime' - The timestamp for when the place index resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newListPlaceIndexesResponseEntry ::
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'indexName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  ListPlaceIndexesResponseEntry
+newListPlaceIndexesResponseEntry
+  pCreateTime_
+  pDataSource_
+  pDescription_
+  pIndexName_
+  pUpdateTime_ =
+    ListPlaceIndexesResponseEntry'
+      { pricingPlan =
+          Prelude.Nothing,
+        createTime = Data._Time Lens.# pCreateTime_,
+        dataSource = pDataSource_,
+        description = pDescription_,
+        indexName = pIndexName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | No longer used. Always returns @RequestBasedUsage@.
+listPlaceIndexesResponseEntry_pricingPlan :: Lens.Lens' ListPlaceIndexesResponseEntry (Prelude.Maybe PricingPlan)
+listPlaceIndexesResponseEntry_pricingPlan = Lens.lens (\ListPlaceIndexesResponseEntry' {pricingPlan} -> pricingPlan) (\s@ListPlaceIndexesResponseEntry' {} a -> s {pricingPlan = a} :: ListPlaceIndexesResponseEntry)
+
+-- | The timestamp for when the place index resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+listPlaceIndexesResponseEntry_createTime :: Lens.Lens' ListPlaceIndexesResponseEntry Prelude.UTCTime
+listPlaceIndexesResponseEntry_createTime = Lens.lens (\ListPlaceIndexesResponseEntry' {createTime} -> createTime) (\s@ListPlaceIndexesResponseEntry' {} a -> s {createTime = a} :: ListPlaceIndexesResponseEntry) Prelude.. Data._Time
+
+-- | The data provider of geospatial data. Values can be one of the
+-- following:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+listPlaceIndexesResponseEntry_dataSource :: Lens.Lens' ListPlaceIndexesResponseEntry Prelude.Text
+listPlaceIndexesResponseEntry_dataSource = Lens.lens (\ListPlaceIndexesResponseEntry' {dataSource} -> dataSource) (\s@ListPlaceIndexesResponseEntry' {} a -> s {dataSource = a} :: ListPlaceIndexesResponseEntry)
+
+-- | The optional description for the place index resource.
+listPlaceIndexesResponseEntry_description :: Lens.Lens' ListPlaceIndexesResponseEntry Prelude.Text
+listPlaceIndexesResponseEntry_description = Lens.lens (\ListPlaceIndexesResponseEntry' {description} -> description) (\s@ListPlaceIndexesResponseEntry' {} a -> s {description = a} :: ListPlaceIndexesResponseEntry)
+
+-- | The name of the place index resource.
+listPlaceIndexesResponseEntry_indexName :: Lens.Lens' ListPlaceIndexesResponseEntry Prelude.Text
+listPlaceIndexesResponseEntry_indexName = Lens.lens (\ListPlaceIndexesResponseEntry' {indexName} -> indexName) (\s@ListPlaceIndexesResponseEntry' {} a -> s {indexName = a} :: ListPlaceIndexesResponseEntry)
+
+-- | The timestamp for when the place index resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+listPlaceIndexesResponseEntry_updateTime :: Lens.Lens' ListPlaceIndexesResponseEntry Prelude.UTCTime
+listPlaceIndexesResponseEntry_updateTime = Lens.lens (\ListPlaceIndexesResponseEntry' {updateTime} -> updateTime) (\s@ListPlaceIndexesResponseEntry' {} a -> s {updateTime = a} :: ListPlaceIndexesResponseEntry) Prelude.. Data._Time
+
+instance Data.FromJSON ListPlaceIndexesResponseEntry where
+  parseJSON =
+    Data.withObject
+      "ListPlaceIndexesResponseEntry"
+      ( \x ->
+          ListPlaceIndexesResponseEntry'
+            Prelude.<$> (x Data..:? "PricingPlan")
+            Prelude.<*> (x Data..: "CreateTime")
+            Prelude.<*> (x Data..: "DataSource")
+            Prelude.<*> (x Data..: "Description")
+            Prelude.<*> (x Data..: "IndexName")
+            Prelude.<*> (x Data..: "UpdateTime")
+      )
+
+instance
+  Prelude.Hashable
+    ListPlaceIndexesResponseEntry
+  where
+  hashWithSalt _salt ListPlaceIndexesResponseEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` indexName
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData ListPlaceIndexesResponseEntry where
+  rnf ListPlaceIndexesResponseEntry' {..} =
+    Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf indexName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/Types/ListRouteCalculatorsResponseEntry.hs b/gen/Amazonka/Location/Types/ListRouteCalculatorsResponseEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/ListRouteCalculatorsResponseEntry.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.ListRouteCalculatorsResponseEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.ListRouteCalculatorsResponseEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PricingPlan
+import qualified Amazonka.Prelude as Prelude
+
+-- | A route calculator resource listed in your AWS account.
+--
+-- /See:/ 'newListRouteCalculatorsResponseEntry' smart constructor.
+data ListRouteCalculatorsResponseEntry = ListRouteCalculatorsResponseEntry'
+  { -- | Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | The name of the route calculator resource.
+    calculatorName :: Prelude.Text,
+    -- | The timestamp when the route calculator resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    --
+    -- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+    createTime :: Data.ISO8601,
+    -- | The data provider of traffic and road network data. Indicates one of the
+    -- available providers:
+    --
+    -- -   @Esri@
+    --
+    -- -   @Here@
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The optional description of the route calculator resource.
+    description :: Prelude.Text,
+    -- | The timestamp when the route calculator resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    --
+    -- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListRouteCalculatorsResponseEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pricingPlan', 'listRouteCalculatorsResponseEntry_pricingPlan' - Always returns @RequestBasedUsage@.
+--
+-- 'calculatorName', 'listRouteCalculatorsResponseEntry_calculatorName' - The name of the route calculator resource.
+--
+-- 'createTime', 'listRouteCalculatorsResponseEntry_createTime' - The timestamp when the route calculator resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+--
+-- 'dataSource', 'listRouteCalculatorsResponseEntry_dataSource' - The data provider of traffic and road network data. Indicates one of the
+-- available providers:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'description', 'listRouteCalculatorsResponseEntry_description' - The optional description of the route calculator resource.
+--
+-- 'updateTime', 'listRouteCalculatorsResponseEntry_updateTime' - The timestamp when the route calculator resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+newListRouteCalculatorsResponseEntry ::
+  -- | 'calculatorName'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  ListRouteCalculatorsResponseEntry
+newListRouteCalculatorsResponseEntry
+  pCalculatorName_
+  pCreateTime_
+  pDataSource_
+  pDescription_
+  pUpdateTime_ =
+    ListRouteCalculatorsResponseEntry'
+      { pricingPlan =
+          Prelude.Nothing,
+        calculatorName = pCalculatorName_,
+        createTime =
+          Data._Time Lens.# pCreateTime_,
+        dataSource = pDataSource_,
+        description = pDescription_,
+        updateTime =
+          Data._Time Lens.# pUpdateTime_
+      }
+
+-- | Always returns @RequestBasedUsage@.
+listRouteCalculatorsResponseEntry_pricingPlan :: Lens.Lens' ListRouteCalculatorsResponseEntry (Prelude.Maybe PricingPlan)
+listRouteCalculatorsResponseEntry_pricingPlan = Lens.lens (\ListRouteCalculatorsResponseEntry' {pricingPlan} -> pricingPlan) (\s@ListRouteCalculatorsResponseEntry' {} a -> s {pricingPlan = a} :: ListRouteCalculatorsResponseEntry)
+
+-- | The name of the route calculator resource.
+listRouteCalculatorsResponseEntry_calculatorName :: Lens.Lens' ListRouteCalculatorsResponseEntry Prelude.Text
+listRouteCalculatorsResponseEntry_calculatorName = Lens.lens (\ListRouteCalculatorsResponseEntry' {calculatorName} -> calculatorName) (\s@ListRouteCalculatorsResponseEntry' {} a -> s {calculatorName = a} :: ListRouteCalculatorsResponseEntry)
+
+-- | The timestamp when the route calculator resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+listRouteCalculatorsResponseEntry_createTime :: Lens.Lens' ListRouteCalculatorsResponseEntry Prelude.UTCTime
+listRouteCalculatorsResponseEntry_createTime = Lens.lens (\ListRouteCalculatorsResponseEntry' {createTime} -> createTime) (\s@ListRouteCalculatorsResponseEntry' {} a -> s {createTime = a} :: ListRouteCalculatorsResponseEntry) Prelude.. Data._Time
+
+-- | The data provider of traffic and road network data. Indicates one of the
+-- available providers:
+--
+-- -   @Esri@
+--
+-- -   @Here@
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+listRouteCalculatorsResponseEntry_dataSource :: Lens.Lens' ListRouteCalculatorsResponseEntry Prelude.Text
+listRouteCalculatorsResponseEntry_dataSource = Lens.lens (\ListRouteCalculatorsResponseEntry' {dataSource} -> dataSource) (\s@ListRouteCalculatorsResponseEntry' {} a -> s {dataSource = a} :: ListRouteCalculatorsResponseEntry)
+
+-- | The optional description of the route calculator resource.
+listRouteCalculatorsResponseEntry_description :: Lens.Lens' ListRouteCalculatorsResponseEntry Prelude.Text
+listRouteCalculatorsResponseEntry_description = Lens.lens (\ListRouteCalculatorsResponseEntry' {description} -> description) (\s@ListRouteCalculatorsResponseEntry' {} a -> s {description = a} :: ListRouteCalculatorsResponseEntry)
+
+-- | The timestamp when the route calculator resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- -   For example, @2020–07-2T12:15:20.000Z+01:00@
+listRouteCalculatorsResponseEntry_updateTime :: Lens.Lens' ListRouteCalculatorsResponseEntry Prelude.UTCTime
+listRouteCalculatorsResponseEntry_updateTime = Lens.lens (\ListRouteCalculatorsResponseEntry' {updateTime} -> updateTime) (\s@ListRouteCalculatorsResponseEntry' {} a -> s {updateTime = a} :: ListRouteCalculatorsResponseEntry) Prelude.. Data._Time
+
+instance
+  Data.FromJSON
+    ListRouteCalculatorsResponseEntry
+  where
+  parseJSON =
+    Data.withObject
+      "ListRouteCalculatorsResponseEntry"
+      ( \x ->
+          ListRouteCalculatorsResponseEntry'
+            Prelude.<$> (x Data..:? "PricingPlan")
+            Prelude.<*> (x Data..: "CalculatorName")
+            Prelude.<*> (x Data..: "CreateTime")
+            Prelude.<*> (x Data..: "DataSource")
+            Prelude.<*> (x Data..: "Description")
+            Prelude.<*> (x Data..: "UpdateTime")
+      )
+
+instance
+  Prelude.Hashable
+    ListRouteCalculatorsResponseEntry
+  where
+  hashWithSalt
+    _salt
+    ListRouteCalculatorsResponseEntry' {..} =
+      _salt
+        `Prelude.hashWithSalt` pricingPlan
+        `Prelude.hashWithSalt` calculatorName
+        `Prelude.hashWithSalt` createTime
+        `Prelude.hashWithSalt` dataSource
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` updateTime
+
+instance
+  Prelude.NFData
+    ListRouteCalculatorsResponseEntry
+  where
+  rnf ListRouteCalculatorsResponseEntry' {..} =
+    Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf calculatorName
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/Types/ListTrackersResponseEntry.hs b/gen/Amazonka/Location/Types/ListTrackersResponseEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/ListTrackersResponseEntry.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.Location.Types.ListTrackersResponseEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.ListTrackersResponseEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PricingPlan
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the tracker resource details.
+--
+-- /See:/ 'newListTrackersResponseEntry' smart constructor.
+data ListTrackersResponseEntry = ListTrackersResponseEntry'
+  { -- | Always returns @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | No longer used. Always returns an empty string.
+    pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp for when the tracker resource was created in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    createTime :: Data.ISO8601,
+    -- | The description for the tracker resource.
+    description :: Prelude.Text,
+    -- | The name of the tracker resource.
+    trackerName :: Prelude.Text,
+    -- | The timestamp at which the device\'s position was determined. Uses
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTrackersResponseEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'pricingPlan', 'listTrackersResponseEntry_pricingPlan' - Always returns @RequestBasedUsage@.
+--
+-- 'pricingPlanDataSource', 'listTrackersResponseEntry_pricingPlanDataSource' - No longer used. Always returns an empty string.
+--
+-- 'createTime', 'listTrackersResponseEntry_createTime' - The timestamp for when the tracker resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+--
+-- 'description', 'listTrackersResponseEntry_description' - The description for the tracker resource.
+--
+-- 'trackerName', 'listTrackersResponseEntry_trackerName' - The name of the tracker resource.
+--
+-- 'updateTime', 'listTrackersResponseEntry_updateTime' - The timestamp at which the device\'s position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newListTrackersResponseEntry ::
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  ListTrackersResponseEntry
+newListTrackersResponseEntry
+  pCreateTime_
+  pDescription_
+  pTrackerName_
+  pUpdateTime_ =
+    ListTrackersResponseEntry'
+      { pricingPlan =
+          Prelude.Nothing,
+        pricingPlanDataSource = Prelude.Nothing,
+        createTime = Data._Time Lens.# pCreateTime_,
+        description = pDescription_,
+        trackerName = pTrackerName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | Always returns @RequestBasedUsage@.
+listTrackersResponseEntry_pricingPlan :: Lens.Lens' ListTrackersResponseEntry (Prelude.Maybe PricingPlan)
+listTrackersResponseEntry_pricingPlan = Lens.lens (\ListTrackersResponseEntry' {pricingPlan} -> pricingPlan) (\s@ListTrackersResponseEntry' {} a -> s {pricingPlan = a} :: ListTrackersResponseEntry)
+
+-- | No longer used. Always returns an empty string.
+listTrackersResponseEntry_pricingPlanDataSource :: Lens.Lens' ListTrackersResponseEntry (Prelude.Maybe Prelude.Text)
+listTrackersResponseEntry_pricingPlanDataSource = Lens.lens (\ListTrackersResponseEntry' {pricingPlanDataSource} -> pricingPlanDataSource) (\s@ListTrackersResponseEntry' {} a -> s {pricingPlanDataSource = a} :: ListTrackersResponseEntry)
+
+-- | The timestamp for when the tracker resource was created in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+listTrackersResponseEntry_createTime :: Lens.Lens' ListTrackersResponseEntry Prelude.UTCTime
+listTrackersResponseEntry_createTime = Lens.lens (\ListTrackersResponseEntry' {createTime} -> createTime) (\s@ListTrackersResponseEntry' {} a -> s {createTime = a} :: ListTrackersResponseEntry) Prelude.. Data._Time
+
+-- | The description for the tracker resource.
+listTrackersResponseEntry_description :: Lens.Lens' ListTrackersResponseEntry Prelude.Text
+listTrackersResponseEntry_description = Lens.lens (\ListTrackersResponseEntry' {description} -> description) (\s@ListTrackersResponseEntry' {} a -> s {description = a} :: ListTrackersResponseEntry)
+
+-- | The name of the tracker resource.
+listTrackersResponseEntry_trackerName :: Lens.Lens' ListTrackersResponseEntry Prelude.Text
+listTrackersResponseEntry_trackerName = Lens.lens (\ListTrackersResponseEntry' {trackerName} -> trackerName) (\s@ListTrackersResponseEntry' {} a -> s {trackerName = a} :: ListTrackersResponseEntry)
+
+-- | The timestamp at which the device\'s position was determined. Uses
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+listTrackersResponseEntry_updateTime :: Lens.Lens' ListTrackersResponseEntry Prelude.UTCTime
+listTrackersResponseEntry_updateTime = Lens.lens (\ListTrackersResponseEntry' {updateTime} -> updateTime) (\s@ListTrackersResponseEntry' {} a -> s {updateTime = a} :: ListTrackersResponseEntry) Prelude.. Data._Time
+
+instance Data.FromJSON ListTrackersResponseEntry where
+  parseJSON =
+    Data.withObject
+      "ListTrackersResponseEntry"
+      ( \x ->
+          ListTrackersResponseEntry'
+            Prelude.<$> (x Data..:? "PricingPlan")
+            Prelude.<*> (x Data..:? "PricingPlanDataSource")
+            Prelude.<*> (x Data..: "CreateTime")
+            Prelude.<*> (x Data..: "Description")
+            Prelude.<*> (x Data..: "TrackerName")
+            Prelude.<*> (x Data..: "UpdateTime")
+      )
+
+instance Prelude.Hashable ListTrackersResponseEntry where
+  hashWithSalt _salt ListTrackersResponseEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` pricingPlanDataSource
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` trackerName
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData ListTrackersResponseEntry where
+  rnf ListTrackersResponseEntry' {..} =
+    Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf pricingPlanDataSource
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf trackerName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/Types/MapConfiguration.hs b/gen/Amazonka/Location/Types/MapConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/MapConfiguration.hs
@@ -0,0 +1,313 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.MapConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.MapConfiguration 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
+
+-- | Specifies the map tile style selected from an available provider.
+--
+-- /See:/ 'newMapConfiguration' smart constructor.
+data MapConfiguration = MapConfiguration'
+  { -- | Specifies the map style selected from an available data provider.
+    --
+    -- Valid
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri map styles>:
+    --
+    -- -   @VectorEsriDarkGrayCanvas@ – The Esri Dark Gray Canvas map style. A
+    --     vector basemap with a dark gray, neutral background with minimal
+    --     colors, labels, and features that\'s designed to draw attention to
+    --     your thematic content.
+    --
+    -- -   @RasterEsriImagery@ – The Esri Imagery map style. A raster basemap
+    --     that provides one meter or better satellite and aerial imagery in
+    --     many parts of the world and lower resolution satellite imagery
+    --     worldwide.
+    --
+    -- -   @VectorEsriLightGrayCanvas@ – The Esri Light Gray Canvas map style,
+    --     which provides a detailed vector basemap with a light gray, neutral
+    --     background style with minimal colors, labels, and features that\'s
+    --     designed to draw attention to your thematic content.
+    --
+    -- -   @VectorEsriTopographic@ – The Esri Light map style, which provides a
+    --     detailed vector basemap with a classic Esri map style.
+    --
+    -- -   @VectorEsriStreets@ – The Esri World Streets map style, which
+    --     provides a detailed vector basemap for the world symbolized with a
+    --     classic Esri street map style. The vector tile layer is similar in
+    --     content and style to the World Street Map raster map.
+    --
+    -- -   @VectorEsriNavigation@ – The Esri World Navigation map style, which
+    --     provides a detailed basemap for the world symbolized with a custom
+    --     navigation map style that\'s designed for use during the day in
+    --     mobile devices.
+    --
+    -- Valid
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies map styles>:
+    --
+    -- -   @VectorHereContrast@ – The HERE Contrast (Berlin) map style is a
+    --     high contrast detailed base map of the world that blends 3D and 2D
+    --     rendering.
+    --
+    --     The @VectorHereContrast@ style has been renamed from
+    --     @VectorHereBerlin@. @VectorHereBerlin@ has been deprecated, but will
+    --     continue to work in applications that use it.
+    --
+    -- -   @VectorHereExplore@ – A default HERE map style containing a neutral,
+    --     global map and its features including roads, buildings, landmarks,
+    --     and water features. It also now includes a fully designed map of
+    --     Japan.
+    --
+    -- -   @VectorHereExploreTruck@ – A global map containing truck
+    --     restrictions and attributes (e.g. width \/ height \/ HAZMAT)
+    --     symbolized with highlighted segments and icons on top of HERE
+    --     Explore to support use cases within transport and logistics.
+    --
+    -- -   @RasterHereExploreSatellite@ – A global map containing high
+    --     resolution satellite imagery.
+    --
+    -- -   @HybridHereExploreSatellite@ – A global map displaying the road
+    --     network, street names, and city labels over satellite imagery. This
+    --     style will automatically retrieve both raster and vector tiles, and
+    --     your charges will be based on total tiles retrieved.
+    --
+    --     Hybrid styles use both vector and raster tiles when rendering the
+    --     map that you see. This means that more tiles are retrieved than when
+    --     using either vector or raster tiles alone. Your charges will include
+    --     all tiles retrieved.
+    --
+    -- Valid
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html Open Data (Preview) map styles>:
+    --
+    -- -   @VectorOpenDataStandardLight@ – The Open Data Standard Light
+    --     (preview) map style provides a detailed basemap for the world
+    --     suitable for website and mobile application use. The map includes
+    --     highways major roads, minor roads, railways, water features, cities,
+    --     parks, landmarks, building footprints, and administrative
+    --     boundaries.
+    --
+    --     Open Data maps is in preview. We may add, change, or remove features
+    --     before announcing general availability. For more information, see
+    --     <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html#open-data-preview Open Data is in preview release>.
+    style :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MapConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'style', 'mapConfiguration_style' - Specifies the map style selected from an available data provider.
+--
+-- Valid
+-- <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri map styles>:
+--
+-- -   @VectorEsriDarkGrayCanvas@ – The Esri Dark Gray Canvas map style. A
+--     vector basemap with a dark gray, neutral background with minimal
+--     colors, labels, and features that\'s designed to draw attention to
+--     your thematic content.
+--
+-- -   @RasterEsriImagery@ – The Esri Imagery map style. A raster basemap
+--     that provides one meter or better satellite and aerial imagery in
+--     many parts of the world and lower resolution satellite imagery
+--     worldwide.
+--
+-- -   @VectorEsriLightGrayCanvas@ – The Esri Light Gray Canvas map style,
+--     which provides a detailed vector basemap with a light gray, neutral
+--     background style with minimal colors, labels, and features that\'s
+--     designed to draw attention to your thematic content.
+--
+-- -   @VectorEsriTopographic@ – The Esri Light map style, which provides a
+--     detailed vector basemap with a classic Esri map style.
+--
+-- -   @VectorEsriStreets@ – The Esri World Streets map style, which
+--     provides a detailed vector basemap for the world symbolized with a
+--     classic Esri street map style. The vector tile layer is similar in
+--     content and style to the World Street Map raster map.
+--
+-- -   @VectorEsriNavigation@ – The Esri World Navigation map style, which
+--     provides a detailed basemap for the world symbolized with a custom
+--     navigation map style that\'s designed for use during the day in
+--     mobile devices.
+--
+-- Valid
+-- <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies map styles>:
+--
+-- -   @VectorHereContrast@ – The HERE Contrast (Berlin) map style is a
+--     high contrast detailed base map of the world that blends 3D and 2D
+--     rendering.
+--
+--     The @VectorHereContrast@ style has been renamed from
+--     @VectorHereBerlin@. @VectorHereBerlin@ has been deprecated, but will
+--     continue to work in applications that use it.
+--
+-- -   @VectorHereExplore@ – A default HERE map style containing a neutral,
+--     global map and its features including roads, buildings, landmarks,
+--     and water features. It also now includes a fully designed map of
+--     Japan.
+--
+-- -   @VectorHereExploreTruck@ – A global map containing truck
+--     restrictions and attributes (e.g. width \/ height \/ HAZMAT)
+--     symbolized with highlighted segments and icons on top of HERE
+--     Explore to support use cases within transport and logistics.
+--
+-- -   @RasterHereExploreSatellite@ – A global map containing high
+--     resolution satellite imagery.
+--
+-- -   @HybridHereExploreSatellite@ – A global map displaying the road
+--     network, street names, and city labels over satellite imagery. This
+--     style will automatically retrieve both raster and vector tiles, and
+--     your charges will be based on total tiles retrieved.
+--
+--     Hybrid styles use both vector and raster tiles when rendering the
+--     map that you see. This means that more tiles are retrieved than when
+--     using either vector or raster tiles alone. Your charges will include
+--     all tiles retrieved.
+--
+-- Valid
+-- <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html Open Data (Preview) map styles>:
+--
+-- -   @VectorOpenDataStandardLight@ – The Open Data Standard Light
+--     (preview) map style provides a detailed basemap for the world
+--     suitable for website and mobile application use. The map includes
+--     highways major roads, minor roads, railways, water features, cities,
+--     parks, landmarks, building footprints, and administrative
+--     boundaries.
+--
+--     Open Data maps is in preview. We may add, change, or remove features
+--     before announcing general availability. For more information, see
+--     <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html#open-data-preview Open Data is in preview release>.
+newMapConfiguration ::
+  -- | 'style'
+  Prelude.Text ->
+  MapConfiguration
+newMapConfiguration pStyle_ =
+  MapConfiguration' {style = pStyle_}
+
+-- | Specifies the map style selected from an available data provider.
+--
+-- Valid
+-- <https://docs.aws.amazon.com/location/latest/developerguide/esri.html Esri map styles>:
+--
+-- -   @VectorEsriDarkGrayCanvas@ – The Esri Dark Gray Canvas map style. A
+--     vector basemap with a dark gray, neutral background with minimal
+--     colors, labels, and features that\'s designed to draw attention to
+--     your thematic content.
+--
+-- -   @RasterEsriImagery@ – The Esri Imagery map style. A raster basemap
+--     that provides one meter or better satellite and aerial imagery in
+--     many parts of the world and lower resolution satellite imagery
+--     worldwide.
+--
+-- -   @VectorEsriLightGrayCanvas@ – The Esri Light Gray Canvas map style,
+--     which provides a detailed vector basemap with a light gray, neutral
+--     background style with minimal colors, labels, and features that\'s
+--     designed to draw attention to your thematic content.
+--
+-- -   @VectorEsriTopographic@ – The Esri Light map style, which provides a
+--     detailed vector basemap with a classic Esri map style.
+--
+-- -   @VectorEsriStreets@ – The Esri World Streets map style, which
+--     provides a detailed vector basemap for the world symbolized with a
+--     classic Esri street map style. The vector tile layer is similar in
+--     content and style to the World Street Map raster map.
+--
+-- -   @VectorEsriNavigation@ – The Esri World Navigation map style, which
+--     provides a detailed basemap for the world symbolized with a custom
+--     navigation map style that\'s designed for use during the day in
+--     mobile devices.
+--
+-- Valid
+-- <https://docs.aws.amazon.com/location/latest/developerguide/HERE.html HERE Technologies map styles>:
+--
+-- -   @VectorHereContrast@ – The HERE Contrast (Berlin) map style is a
+--     high contrast detailed base map of the world that blends 3D and 2D
+--     rendering.
+--
+--     The @VectorHereContrast@ style has been renamed from
+--     @VectorHereBerlin@. @VectorHereBerlin@ has been deprecated, but will
+--     continue to work in applications that use it.
+--
+-- -   @VectorHereExplore@ – A default HERE map style containing a neutral,
+--     global map and its features including roads, buildings, landmarks,
+--     and water features. It also now includes a fully designed map of
+--     Japan.
+--
+-- -   @VectorHereExploreTruck@ – A global map containing truck
+--     restrictions and attributes (e.g. width \/ height \/ HAZMAT)
+--     symbolized with highlighted segments and icons on top of HERE
+--     Explore to support use cases within transport and logistics.
+--
+-- -   @RasterHereExploreSatellite@ – A global map containing high
+--     resolution satellite imagery.
+--
+-- -   @HybridHereExploreSatellite@ – A global map displaying the road
+--     network, street names, and city labels over satellite imagery. This
+--     style will automatically retrieve both raster and vector tiles, and
+--     your charges will be based on total tiles retrieved.
+--
+--     Hybrid styles use both vector and raster tiles when rendering the
+--     map that you see. This means that more tiles are retrieved than when
+--     using either vector or raster tiles alone. Your charges will include
+--     all tiles retrieved.
+--
+-- Valid
+-- <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html Open Data (Preview) map styles>:
+--
+-- -   @VectorOpenDataStandardLight@ – The Open Data Standard Light
+--     (preview) map style provides a detailed basemap for the world
+--     suitable for website and mobile application use. The map includes
+--     highways major roads, minor roads, railways, water features, cities,
+--     parks, landmarks, building footprints, and administrative
+--     boundaries.
+--
+--     Open Data maps is in preview. We may add, change, or remove features
+--     before announcing general availability. For more information, see
+--     <https://docs.aws.amazon.com/location/latest/developerguide/open-data.html#open-data-preview Open Data is in preview release>.
+mapConfiguration_style :: Lens.Lens' MapConfiguration Prelude.Text
+mapConfiguration_style = Lens.lens (\MapConfiguration' {style} -> style) (\s@MapConfiguration' {} a -> s {style = a} :: MapConfiguration)
+
+instance Data.FromJSON MapConfiguration where
+  parseJSON =
+    Data.withObject
+      "MapConfiguration"
+      ( \x ->
+          MapConfiguration' Prelude.<$> (x Data..: "Style")
+      )
+
+instance Prelude.Hashable MapConfiguration where
+  hashWithSalt _salt MapConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` style
+
+instance Prelude.NFData MapConfiguration where
+  rnf MapConfiguration' {..} = Prelude.rnf style
+
+instance Data.ToJSON MapConfiguration where
+  toJSON MapConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Style" Data..= style)]
+      )
diff --git a/gen/Amazonka/Location/Types/Place.hs b/gen/Amazonka/Location/Types/Place.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/Place.hs
@@ -0,0 +1,304 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.Place
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.Place where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.PlaceGeometry
+import Amazonka.Location.Types.TimeZone
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains details about addresses or points of interest that match the
+-- search criteria.
+--
+-- Not all details are included with all responses. Some details may only
+-- be returned by specific data partners.
+--
+-- /See:/ 'newPlace' smart constructor.
+data Place = Place'
+  { -- | The numerical portion of an address, such as a building number.
+    addressNumber :: Prelude.Maybe Prelude.Text,
+    -- | A country\/region specified using
+    -- <https://www.iso.org/iso-3166-country-codes.html ISO 3166> 3-digit
+    -- country\/region code. For example, @CAN@.
+    country :: Prelude.Maybe Prelude.Text,
+    -- | @True@ if the result is interpolated from other known places.
+    --
+    -- @False@ if the Place is a known place.
+    --
+    -- Not returned when the partner does not provide the information.
+    --
+    -- For example, returns @False@ for an address location that is found in
+    -- the partner data, but returns @True@ if an address does not exist in the
+    -- partner data and its location is calculated by interpolating between
+    -- other known addresses.
+    interpolated :: Prelude.Maybe Prelude.Bool,
+    -- | The full name and address of the point of interest such as a city,
+    -- region, or country. For example, @123 Any Street, Any Town, USA@.
+    label :: Prelude.Maybe Prelude.Text,
+    -- | A name for a local area, such as a city or town name. For example,
+    -- @Toronto@.
+    municipality :: Prelude.Maybe Prelude.Text,
+    -- | The name of a community district. For example, @Downtown@.
+    neighborhood :: Prelude.Maybe Prelude.Text,
+    -- | A group of numbers and letters in a country-specific format, which
+    -- accompanies the address for the purpose of identifying a location.
+    postalCode :: Prelude.Maybe Prelude.Text,
+    -- | A name for an area or geographical division, such as a province or state
+    -- name. For example, @British Columbia@.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | The name for a street or a road to identify a location. For example,
+    -- @Main Street@.
+    street :: Prelude.Maybe Prelude.Text,
+    -- | A country, or an area that\'s part of a larger region. For example,
+    -- @Metro Vancouver@.
+    subRegion :: Prelude.Maybe Prelude.Text,
+    -- | The time zone in which the @Place@ is located. Returned only when using
+    -- HERE as the selected partner.
+    timeZone :: Prelude.Maybe TimeZone,
+    -- | For addresses with multiple units, the unit identifier. Can include
+    -- numbers and letters, for example @3B@ or @Unit 123@.
+    --
+    -- Returned only for a place index that uses Esri as a data provider. Is
+    -- not returned for @SearchPlaceIndexForPosition@.
+    unitNumber :: Prelude.Maybe Prelude.Text,
+    -- | For addresses with a @UnitNumber@, the type of unit. For example,
+    -- @Apartment@.
+    unitType :: Prelude.Maybe Prelude.Text,
+    geometry :: PlaceGeometry
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Place' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressNumber', 'place_addressNumber' - The numerical portion of an address, such as a building number.
+--
+-- 'country', 'place_country' - A country\/region specified using
+-- <https://www.iso.org/iso-3166-country-codes.html ISO 3166> 3-digit
+-- country\/region code. For example, @CAN@.
+--
+-- 'interpolated', 'place_interpolated' - @True@ if the result is interpolated from other known places.
+--
+-- @False@ if the Place is a known place.
+--
+-- Not returned when the partner does not provide the information.
+--
+-- For example, returns @False@ for an address location that is found in
+-- the partner data, but returns @True@ if an address does not exist in the
+-- partner data and its location is calculated by interpolating between
+-- other known addresses.
+--
+-- 'label', 'place_label' - The full name and address of the point of interest such as a city,
+-- region, or country. For example, @123 Any Street, Any Town, USA@.
+--
+-- 'municipality', 'place_municipality' - A name for a local area, such as a city or town name. For example,
+-- @Toronto@.
+--
+-- 'neighborhood', 'place_neighborhood' - The name of a community district. For example, @Downtown@.
+--
+-- 'postalCode', 'place_postalCode' - A group of numbers and letters in a country-specific format, which
+-- accompanies the address for the purpose of identifying a location.
+--
+-- 'region', 'place_region' - A name for an area or geographical division, such as a province or state
+-- name. For example, @British Columbia@.
+--
+-- 'street', 'place_street' - The name for a street or a road to identify a location. For example,
+-- @Main Street@.
+--
+-- 'subRegion', 'place_subRegion' - A country, or an area that\'s part of a larger region. For example,
+-- @Metro Vancouver@.
+--
+-- 'timeZone', 'place_timeZone' - The time zone in which the @Place@ is located. Returned only when using
+-- HERE as the selected partner.
+--
+-- 'unitNumber', 'place_unitNumber' - For addresses with multiple units, the unit identifier. Can include
+-- numbers and letters, for example @3B@ or @Unit 123@.
+--
+-- Returned only for a place index that uses Esri as a data provider. Is
+-- not returned for @SearchPlaceIndexForPosition@.
+--
+-- 'unitType', 'place_unitType' - For addresses with a @UnitNumber@, the type of unit. For example,
+-- @Apartment@.
+--
+-- 'geometry', 'place_geometry' - Undocumented member.
+newPlace ::
+  -- | 'geometry'
+  PlaceGeometry ->
+  Place
+newPlace pGeometry_ =
+  Place'
+    { addressNumber = Prelude.Nothing,
+      country = Prelude.Nothing,
+      interpolated = Prelude.Nothing,
+      label = Prelude.Nothing,
+      municipality = Prelude.Nothing,
+      neighborhood = Prelude.Nothing,
+      postalCode = Prelude.Nothing,
+      region = Prelude.Nothing,
+      street = Prelude.Nothing,
+      subRegion = Prelude.Nothing,
+      timeZone = Prelude.Nothing,
+      unitNumber = Prelude.Nothing,
+      unitType = Prelude.Nothing,
+      geometry = pGeometry_
+    }
+
+-- | The numerical portion of an address, such as a building number.
+place_addressNumber :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_addressNumber = Lens.lens (\Place' {addressNumber} -> addressNumber) (\s@Place' {} a -> s {addressNumber = a} :: Place)
+
+-- | A country\/region specified using
+-- <https://www.iso.org/iso-3166-country-codes.html ISO 3166> 3-digit
+-- country\/region code. For example, @CAN@.
+place_country :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_country = Lens.lens (\Place' {country} -> country) (\s@Place' {} a -> s {country = a} :: Place)
+
+-- | @True@ if the result is interpolated from other known places.
+--
+-- @False@ if the Place is a known place.
+--
+-- Not returned when the partner does not provide the information.
+--
+-- For example, returns @False@ for an address location that is found in
+-- the partner data, but returns @True@ if an address does not exist in the
+-- partner data and its location is calculated by interpolating between
+-- other known addresses.
+place_interpolated :: Lens.Lens' Place (Prelude.Maybe Prelude.Bool)
+place_interpolated = Lens.lens (\Place' {interpolated} -> interpolated) (\s@Place' {} a -> s {interpolated = a} :: Place)
+
+-- | The full name and address of the point of interest such as a city,
+-- region, or country. For example, @123 Any Street, Any Town, USA@.
+place_label :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_label = Lens.lens (\Place' {label} -> label) (\s@Place' {} a -> s {label = a} :: Place)
+
+-- | A name for a local area, such as a city or town name. For example,
+-- @Toronto@.
+place_municipality :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_municipality = Lens.lens (\Place' {municipality} -> municipality) (\s@Place' {} a -> s {municipality = a} :: Place)
+
+-- | The name of a community district. For example, @Downtown@.
+place_neighborhood :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_neighborhood = Lens.lens (\Place' {neighborhood} -> neighborhood) (\s@Place' {} a -> s {neighborhood = a} :: Place)
+
+-- | A group of numbers and letters in a country-specific format, which
+-- accompanies the address for the purpose of identifying a location.
+place_postalCode :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_postalCode = Lens.lens (\Place' {postalCode} -> postalCode) (\s@Place' {} a -> s {postalCode = a} :: Place)
+
+-- | A name for an area or geographical division, such as a province or state
+-- name. For example, @British Columbia@.
+place_region :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_region = Lens.lens (\Place' {region} -> region) (\s@Place' {} a -> s {region = a} :: Place)
+
+-- | The name for a street or a road to identify a location. For example,
+-- @Main Street@.
+place_street :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_street = Lens.lens (\Place' {street} -> street) (\s@Place' {} a -> s {street = a} :: Place)
+
+-- | A country, or an area that\'s part of a larger region. For example,
+-- @Metro Vancouver@.
+place_subRegion :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_subRegion = Lens.lens (\Place' {subRegion} -> subRegion) (\s@Place' {} a -> s {subRegion = a} :: Place)
+
+-- | The time zone in which the @Place@ is located. Returned only when using
+-- HERE as the selected partner.
+place_timeZone :: Lens.Lens' Place (Prelude.Maybe TimeZone)
+place_timeZone = Lens.lens (\Place' {timeZone} -> timeZone) (\s@Place' {} a -> s {timeZone = a} :: Place)
+
+-- | For addresses with multiple units, the unit identifier. Can include
+-- numbers and letters, for example @3B@ or @Unit 123@.
+--
+-- Returned only for a place index that uses Esri as a data provider. Is
+-- not returned for @SearchPlaceIndexForPosition@.
+place_unitNumber :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_unitNumber = Lens.lens (\Place' {unitNumber} -> unitNumber) (\s@Place' {} a -> s {unitNumber = a} :: Place)
+
+-- | For addresses with a @UnitNumber@, the type of unit. For example,
+-- @Apartment@.
+place_unitType :: Lens.Lens' Place (Prelude.Maybe Prelude.Text)
+place_unitType = Lens.lens (\Place' {unitType} -> unitType) (\s@Place' {} a -> s {unitType = a} :: Place)
+
+-- | Undocumented member.
+place_geometry :: Lens.Lens' Place PlaceGeometry
+place_geometry = Lens.lens (\Place' {geometry} -> geometry) (\s@Place' {} a -> s {geometry = a} :: Place)
+
+instance Data.FromJSON Place where
+  parseJSON =
+    Data.withObject
+      "Place"
+      ( \x ->
+          Place'
+            Prelude.<$> (x Data..:? "AddressNumber")
+            Prelude.<*> (x Data..:? "Country")
+            Prelude.<*> (x Data..:? "Interpolated")
+            Prelude.<*> (x Data..:? "Label")
+            Prelude.<*> (x Data..:? "Municipality")
+            Prelude.<*> (x Data..:? "Neighborhood")
+            Prelude.<*> (x Data..:? "PostalCode")
+            Prelude.<*> (x Data..:? "Region")
+            Prelude.<*> (x Data..:? "Street")
+            Prelude.<*> (x Data..:? "SubRegion")
+            Prelude.<*> (x Data..:? "TimeZone")
+            Prelude.<*> (x Data..:? "UnitNumber")
+            Prelude.<*> (x Data..:? "UnitType")
+            Prelude.<*> (x Data..: "Geometry")
+      )
+
+instance Prelude.Hashable Place where
+  hashWithSalt _salt Place' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressNumber
+      `Prelude.hashWithSalt` country
+      `Prelude.hashWithSalt` interpolated
+      `Prelude.hashWithSalt` label
+      `Prelude.hashWithSalt` municipality
+      `Prelude.hashWithSalt` neighborhood
+      `Prelude.hashWithSalt` postalCode
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` street
+      `Prelude.hashWithSalt` subRegion
+      `Prelude.hashWithSalt` timeZone
+      `Prelude.hashWithSalt` unitNumber
+      `Prelude.hashWithSalt` unitType
+      `Prelude.hashWithSalt` geometry
+
+instance Prelude.NFData Place where
+  rnf Place' {..} =
+    Prelude.rnf addressNumber
+      `Prelude.seq` Prelude.rnf country
+      `Prelude.seq` Prelude.rnf interpolated
+      `Prelude.seq` Prelude.rnf label
+      `Prelude.seq` Prelude.rnf municipality
+      `Prelude.seq` Prelude.rnf neighborhood
+      `Prelude.seq` Prelude.rnf postalCode
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf street
+      `Prelude.seq` Prelude.rnf subRegion
+      `Prelude.seq` Prelude.rnf timeZone
+      `Prelude.seq` Prelude.rnf unitNumber
+      `Prelude.seq` Prelude.rnf unitType
+      `Prelude.seq` Prelude.rnf geometry
diff --git a/gen/Amazonka/Location/Types/PlaceGeometry.hs b/gen/Amazonka/Location/Types/PlaceGeometry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/PlaceGeometry.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.Location.Types.PlaceGeometry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.PlaceGeometry 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
+
+-- | Places uses a point geometry to specify a location or a Place.
+--
+-- /See:/ 'newPlaceGeometry' smart constructor.
+data PlaceGeometry = PlaceGeometry'
+  { -- | A single point geometry specifies a location for a Place using
+    -- <https://gisgeography.com/wgs84-world-geodetic-system/ WGS 84>
+    -- coordinates:
+    --
+    -- -   /x/ — Specifies the x coordinate or longitude.
+    --
+    -- -   /y/ — Specifies the y coordinate or latitude.
+    point :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double))
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlaceGeometry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'point', 'placeGeometry_point' - A single point geometry specifies a location for a Place using
+-- <https://gisgeography.com/wgs84-world-geodetic-system/ WGS 84>
+-- coordinates:
+--
+-- -   /x/ — Specifies the x coordinate or longitude.
+--
+-- -   /y/ — Specifies the y coordinate or latitude.
+newPlaceGeometry ::
+  PlaceGeometry
+newPlaceGeometry =
+  PlaceGeometry' {point = Prelude.Nothing}
+
+-- | A single point geometry specifies a location for a Place using
+-- <https://gisgeography.com/wgs84-world-geodetic-system/ WGS 84>
+-- coordinates:
+--
+-- -   /x/ — Specifies the x coordinate or longitude.
+--
+-- -   /y/ — Specifies the y coordinate or latitude.
+placeGeometry_point :: Lens.Lens' PlaceGeometry (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+placeGeometry_point = Lens.lens (\PlaceGeometry' {point} -> point) (\s@PlaceGeometry' {} a -> s {point = a} :: PlaceGeometry) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+instance Data.FromJSON PlaceGeometry where
+  parseJSON =
+    Data.withObject
+      "PlaceGeometry"
+      ( \x ->
+          PlaceGeometry' Prelude.<$> (x Data..:? "Point")
+      )
+
+instance Prelude.Hashable PlaceGeometry where
+  hashWithSalt _salt PlaceGeometry' {..} =
+    _salt `Prelude.hashWithSalt` point
+
+instance Prelude.NFData PlaceGeometry where
+  rnf PlaceGeometry' {..} = Prelude.rnf point
diff --git a/gen/Amazonka/Location/Types/PositionFiltering.hs b/gen/Amazonka/Location/Types/PositionFiltering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/PositionFiltering.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.PositionFiltering
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.PositionFiltering
+  ( PositionFiltering
+      ( ..,
+        PositionFiltering_AccuracyBased,
+        PositionFiltering_DistanceBased,
+        PositionFiltering_TimeBased
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PositionFiltering = PositionFiltering'
+  { fromPositionFiltering ::
+      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 PositionFiltering_AccuracyBased :: PositionFiltering
+pattern PositionFiltering_AccuracyBased = PositionFiltering' "AccuracyBased"
+
+pattern PositionFiltering_DistanceBased :: PositionFiltering
+pattern PositionFiltering_DistanceBased = PositionFiltering' "DistanceBased"
+
+pattern PositionFiltering_TimeBased :: PositionFiltering
+pattern PositionFiltering_TimeBased = PositionFiltering' "TimeBased"
+
+{-# COMPLETE
+  PositionFiltering_AccuracyBased,
+  PositionFiltering_DistanceBased,
+  PositionFiltering_TimeBased,
+  PositionFiltering'
+  #-}
diff --git a/gen/Amazonka/Location/Types/PositionalAccuracy.hs b/gen/Amazonka/Location/Types/PositionalAccuracy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/PositionalAccuracy.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.PositionalAccuracy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.PositionalAccuracy 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
+
+-- | Defines the level of certainty of the position.
+--
+-- /See:/ 'newPositionalAccuracy' smart constructor.
+data PositionalAccuracy = PositionalAccuracy'
+  { -- | Estimated maximum distance, in meters, between the measured position and
+    -- the true position of a device, along the Earth\'s surface.
+    horizontal :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PositionalAccuracy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'horizontal', 'positionalAccuracy_horizontal' - Estimated maximum distance, in meters, between the measured position and
+-- the true position of a device, along the Earth\'s surface.
+newPositionalAccuracy ::
+  -- | 'horizontal'
+  Prelude.Double ->
+  PositionalAccuracy
+newPositionalAccuracy pHorizontal_ =
+  PositionalAccuracy' {horizontal = pHorizontal_}
+
+-- | Estimated maximum distance, in meters, between the measured position and
+-- the true position of a device, along the Earth\'s surface.
+positionalAccuracy_horizontal :: Lens.Lens' PositionalAccuracy Prelude.Double
+positionalAccuracy_horizontal = Lens.lens (\PositionalAccuracy' {horizontal} -> horizontal) (\s@PositionalAccuracy' {} a -> s {horizontal = a} :: PositionalAccuracy)
+
+instance Data.FromJSON PositionalAccuracy where
+  parseJSON =
+    Data.withObject
+      "PositionalAccuracy"
+      ( \x ->
+          PositionalAccuracy'
+            Prelude.<$> (x Data..: "Horizontal")
+      )
+
+instance Prelude.Hashable PositionalAccuracy where
+  hashWithSalt _salt PositionalAccuracy' {..} =
+    _salt `Prelude.hashWithSalt` horizontal
+
+instance Prelude.NFData PositionalAccuracy where
+  rnf PositionalAccuracy' {..} = Prelude.rnf horizontal
+
+instance Data.ToJSON PositionalAccuracy where
+  toJSON PositionalAccuracy' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Horizontal" Data..= horizontal)]
+      )
diff --git a/gen/Amazonka/Location/Types/PricingPlan.hs b/gen/Amazonka/Location/Types/PricingPlan.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/PricingPlan.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.PricingPlan
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.PricingPlan
+  ( PricingPlan
+      ( ..,
+        PricingPlan_MobileAssetManagement,
+        PricingPlan_MobileAssetTracking,
+        PricingPlan_RequestBasedUsage
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PricingPlan = PricingPlan'
+  { fromPricingPlan ::
+      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 PricingPlan_MobileAssetManagement :: PricingPlan
+pattern PricingPlan_MobileAssetManagement = PricingPlan' "MobileAssetManagement"
+
+pattern PricingPlan_MobileAssetTracking :: PricingPlan
+pattern PricingPlan_MobileAssetTracking = PricingPlan' "MobileAssetTracking"
+
+pattern PricingPlan_RequestBasedUsage :: PricingPlan
+pattern PricingPlan_RequestBasedUsage = PricingPlan' "RequestBasedUsage"
+
+{-# COMPLETE
+  PricingPlan_MobileAssetManagement,
+  PricingPlan_MobileAssetTracking,
+  PricingPlan_RequestBasedUsage,
+  PricingPlan'
+  #-}
diff --git a/gen/Amazonka/Location/Types/RouteMatrixEntry.hs b/gen/Amazonka/Location/Types/RouteMatrixEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/RouteMatrixEntry.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.RouteMatrixEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.RouteMatrixEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.RouteMatrixEntryError
+import qualified Amazonka.Prelude as Prelude
+
+-- | The result for the calculated route of one @DeparturePosition@
+-- @DestinationPosition@ pair.
+--
+-- /See:/ 'newRouteMatrixEntry' smart constructor.
+data RouteMatrixEntry = RouteMatrixEntry'
+  { -- | The total distance of travel for the route.
+    distance :: Prelude.Maybe Prelude.Double,
+    -- | The expected duration of travel for the route.
+    durationSeconds :: Prelude.Maybe Prelude.Double,
+    -- | An error corresponding to the calculation of a route between the
+    -- @DeparturePosition@ and @DestinationPosition@.
+    error :: Prelude.Maybe RouteMatrixEntryError
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RouteMatrixEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'distance', 'routeMatrixEntry_distance' - The total distance of travel for the route.
+--
+-- 'durationSeconds', 'routeMatrixEntry_durationSeconds' - The expected duration of travel for the route.
+--
+-- 'error', 'routeMatrixEntry_error' - An error corresponding to the calculation of a route between the
+-- @DeparturePosition@ and @DestinationPosition@.
+newRouteMatrixEntry ::
+  RouteMatrixEntry
+newRouteMatrixEntry =
+  RouteMatrixEntry'
+    { distance = Prelude.Nothing,
+      durationSeconds = Prelude.Nothing,
+      error = Prelude.Nothing
+    }
+
+-- | The total distance of travel for the route.
+routeMatrixEntry_distance :: Lens.Lens' RouteMatrixEntry (Prelude.Maybe Prelude.Double)
+routeMatrixEntry_distance = Lens.lens (\RouteMatrixEntry' {distance} -> distance) (\s@RouteMatrixEntry' {} a -> s {distance = a} :: RouteMatrixEntry)
+
+-- | The expected duration of travel for the route.
+routeMatrixEntry_durationSeconds :: Lens.Lens' RouteMatrixEntry (Prelude.Maybe Prelude.Double)
+routeMatrixEntry_durationSeconds = Lens.lens (\RouteMatrixEntry' {durationSeconds} -> durationSeconds) (\s@RouteMatrixEntry' {} a -> s {durationSeconds = a} :: RouteMatrixEntry)
+
+-- | An error corresponding to the calculation of a route between the
+-- @DeparturePosition@ and @DestinationPosition@.
+routeMatrixEntry_error :: Lens.Lens' RouteMatrixEntry (Prelude.Maybe RouteMatrixEntryError)
+routeMatrixEntry_error = Lens.lens (\RouteMatrixEntry' {error} -> error) (\s@RouteMatrixEntry' {} a -> s {error = a} :: RouteMatrixEntry)
+
+instance Data.FromJSON RouteMatrixEntry where
+  parseJSON =
+    Data.withObject
+      "RouteMatrixEntry"
+      ( \x ->
+          RouteMatrixEntry'
+            Prelude.<$> (x Data..:? "Distance")
+            Prelude.<*> (x Data..:? "DurationSeconds")
+            Prelude.<*> (x Data..:? "Error")
+      )
+
+instance Prelude.Hashable RouteMatrixEntry where
+  hashWithSalt _salt RouteMatrixEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` distance
+      `Prelude.hashWithSalt` durationSeconds
+      `Prelude.hashWithSalt` error
+
+instance Prelude.NFData RouteMatrixEntry where
+  rnf RouteMatrixEntry' {..} =
+    Prelude.rnf distance
+      `Prelude.seq` Prelude.rnf durationSeconds
+      `Prelude.seq` Prelude.rnf error
diff --git a/gen/Amazonka/Location/Types/RouteMatrixEntryError.hs b/gen/Amazonka/Location/Types/RouteMatrixEntryError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/RouteMatrixEntryError.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.RouteMatrixEntryError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.RouteMatrixEntryError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.RouteMatrixErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | An error corresponding to the calculation of a route between the
+-- @DeparturePosition@ and @DestinationPosition@.
+--
+-- The error code can be one of the following:
+--
+-- -   @RouteNotFound@ - Unable to find a valid route with the given
+--     parameters.
+--
+-- -   @RouteTooLong@ - Route calculation went beyond the maximum size of a
+--     route and was terminated before completion.
+--
+-- -   @PositionsNotFound@ - One or more of the input positions were not
+--     found on the route network.
+--
+-- -   @DestinationPositionNotFound@ - The destination position was not
+--     found on the route network.
+--
+-- -   @DeparturePositionNotFound@ - The departure position was not found
+--     on the route network.
+--
+-- -   @OtherValidationError@ - The given inputs were not valid or a route
+--     was not found. More information is given in the error @Message@
+--
+-- /See:/ 'newRouteMatrixEntryError' smart constructor.
+data RouteMatrixEntryError = RouteMatrixEntryError'
+  { -- | A message about the error that occurred for the route calculation.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The type of error which occurred for the route calculation.
+    code :: RouteMatrixErrorCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RouteMatrixEntryError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'message', 'routeMatrixEntryError_message' - A message about the error that occurred for the route calculation.
+--
+-- 'code', 'routeMatrixEntryError_code' - The type of error which occurred for the route calculation.
+newRouteMatrixEntryError ::
+  -- | 'code'
+  RouteMatrixErrorCode ->
+  RouteMatrixEntryError
+newRouteMatrixEntryError pCode_ =
+  RouteMatrixEntryError'
+    { message = Prelude.Nothing,
+      code = pCode_
+    }
+
+-- | A message about the error that occurred for the route calculation.
+routeMatrixEntryError_message :: Lens.Lens' RouteMatrixEntryError (Prelude.Maybe Prelude.Text)
+routeMatrixEntryError_message = Lens.lens (\RouteMatrixEntryError' {message} -> message) (\s@RouteMatrixEntryError' {} a -> s {message = a} :: RouteMatrixEntryError)
+
+-- | The type of error which occurred for the route calculation.
+routeMatrixEntryError_code :: Lens.Lens' RouteMatrixEntryError RouteMatrixErrorCode
+routeMatrixEntryError_code = Lens.lens (\RouteMatrixEntryError' {code} -> code) (\s@RouteMatrixEntryError' {} a -> s {code = a} :: RouteMatrixEntryError)
+
+instance Data.FromJSON RouteMatrixEntryError where
+  parseJSON =
+    Data.withObject
+      "RouteMatrixEntryError"
+      ( \x ->
+          RouteMatrixEntryError'
+            Prelude.<$> (x Data..:? "Message")
+            Prelude.<*> (x Data..: "Code")
+      )
+
+instance Prelude.Hashable RouteMatrixEntryError where
+  hashWithSalt _salt RouteMatrixEntryError' {..} =
+    _salt
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` code
+
+instance Prelude.NFData RouteMatrixEntryError where
+  rnf RouteMatrixEntryError' {..} =
+    Prelude.rnf message `Prelude.seq` Prelude.rnf code
diff --git a/gen/Amazonka/Location/Types/RouteMatrixErrorCode.hs b/gen/Amazonka/Location/Types/RouteMatrixErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/RouteMatrixErrorCode.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.RouteMatrixErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.RouteMatrixErrorCode
+  ( RouteMatrixErrorCode
+      ( ..,
+        RouteMatrixErrorCode_DeparturePositionNotFound,
+        RouteMatrixErrorCode_DestinationPositionNotFound,
+        RouteMatrixErrorCode_OtherValidationError,
+        RouteMatrixErrorCode_PositionsNotFound,
+        RouteMatrixErrorCode_RouteNotFound,
+        RouteMatrixErrorCode_RouteTooLong
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RouteMatrixErrorCode = RouteMatrixErrorCode'
+  { fromRouteMatrixErrorCode ::
+      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 RouteMatrixErrorCode_DeparturePositionNotFound :: RouteMatrixErrorCode
+pattern RouteMatrixErrorCode_DeparturePositionNotFound = RouteMatrixErrorCode' "DeparturePositionNotFound"
+
+pattern RouteMatrixErrorCode_DestinationPositionNotFound :: RouteMatrixErrorCode
+pattern RouteMatrixErrorCode_DestinationPositionNotFound = RouteMatrixErrorCode' "DestinationPositionNotFound"
+
+pattern RouteMatrixErrorCode_OtherValidationError :: RouteMatrixErrorCode
+pattern RouteMatrixErrorCode_OtherValidationError = RouteMatrixErrorCode' "OtherValidationError"
+
+pattern RouteMatrixErrorCode_PositionsNotFound :: RouteMatrixErrorCode
+pattern RouteMatrixErrorCode_PositionsNotFound = RouteMatrixErrorCode' "PositionsNotFound"
+
+pattern RouteMatrixErrorCode_RouteNotFound :: RouteMatrixErrorCode
+pattern RouteMatrixErrorCode_RouteNotFound = RouteMatrixErrorCode' "RouteNotFound"
+
+pattern RouteMatrixErrorCode_RouteTooLong :: RouteMatrixErrorCode
+pattern RouteMatrixErrorCode_RouteTooLong = RouteMatrixErrorCode' "RouteTooLong"
+
+{-# COMPLETE
+  RouteMatrixErrorCode_DeparturePositionNotFound,
+  RouteMatrixErrorCode_DestinationPositionNotFound,
+  RouteMatrixErrorCode_OtherValidationError,
+  RouteMatrixErrorCode_PositionsNotFound,
+  RouteMatrixErrorCode_RouteNotFound,
+  RouteMatrixErrorCode_RouteTooLong,
+  RouteMatrixErrorCode'
+  #-}
diff --git a/gen/Amazonka/Location/Types/SearchForPositionResult.hs b/gen/Amazonka/Location/Types/SearchForPositionResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/SearchForPositionResult.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.SearchForPositionResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.SearchForPositionResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.Place
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains a search result from a position search query that is run on a
+-- place index resource.
+--
+-- /See:/ 'newSearchForPositionResult' smart constructor.
+data SearchForPositionResult = SearchForPositionResult'
+  { -- | The unique identifier of the place. You can use this with the @GetPlace@
+    -- operation to find the place again later.
+    --
+    -- For @SearchPlaceIndexForPosition@ operations, the @PlaceId@ is returned
+    -- only by place indexes that use HERE as a data provider.
+    placeId :: Prelude.Maybe Prelude.Text,
+    -- | The distance in meters of a great-circle arc between the query position
+    -- and the result.
+    --
+    -- A great-circle arc is the shortest path on a sphere, in this case the
+    -- Earth. This returns the shortest distance between two locations.
+    distance :: Prelude.Double,
+    -- | Details about the search result, such as its address and position.
+    place :: Place
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchForPositionResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'placeId', 'searchForPositionResult_placeId' - The unique identifier of the place. You can use this with the @GetPlace@
+-- operation to find the place again later.
+--
+-- For @SearchPlaceIndexForPosition@ operations, the @PlaceId@ is returned
+-- only by place indexes that use HERE as a data provider.
+--
+-- 'distance', 'searchForPositionResult_distance' - The distance in meters of a great-circle arc between the query position
+-- and the result.
+--
+-- A great-circle arc is the shortest path on a sphere, in this case the
+-- Earth. This returns the shortest distance between two locations.
+--
+-- 'place', 'searchForPositionResult_place' - Details about the search result, such as its address and position.
+newSearchForPositionResult ::
+  -- | 'distance'
+  Prelude.Double ->
+  -- | 'place'
+  Place ->
+  SearchForPositionResult
+newSearchForPositionResult pDistance_ pPlace_ =
+  SearchForPositionResult'
+    { placeId = Prelude.Nothing,
+      distance = pDistance_,
+      place = pPlace_
+    }
+
+-- | The unique identifier of the place. You can use this with the @GetPlace@
+-- operation to find the place again later.
+--
+-- For @SearchPlaceIndexForPosition@ operations, the @PlaceId@ is returned
+-- only by place indexes that use HERE as a data provider.
+searchForPositionResult_placeId :: Lens.Lens' SearchForPositionResult (Prelude.Maybe Prelude.Text)
+searchForPositionResult_placeId = Lens.lens (\SearchForPositionResult' {placeId} -> placeId) (\s@SearchForPositionResult' {} a -> s {placeId = a} :: SearchForPositionResult)
+
+-- | The distance in meters of a great-circle arc between the query position
+-- and the result.
+--
+-- A great-circle arc is the shortest path on a sphere, in this case the
+-- Earth. This returns the shortest distance between two locations.
+searchForPositionResult_distance :: Lens.Lens' SearchForPositionResult Prelude.Double
+searchForPositionResult_distance = Lens.lens (\SearchForPositionResult' {distance} -> distance) (\s@SearchForPositionResult' {} a -> s {distance = a} :: SearchForPositionResult)
+
+-- | Details about the search result, such as its address and position.
+searchForPositionResult_place :: Lens.Lens' SearchForPositionResult Place
+searchForPositionResult_place = Lens.lens (\SearchForPositionResult' {place} -> place) (\s@SearchForPositionResult' {} a -> s {place = a} :: SearchForPositionResult)
+
+instance Data.FromJSON SearchForPositionResult where
+  parseJSON =
+    Data.withObject
+      "SearchForPositionResult"
+      ( \x ->
+          SearchForPositionResult'
+            Prelude.<$> (x Data..:? "PlaceId")
+            Prelude.<*> (x Data..: "Distance")
+            Prelude.<*> (x Data..: "Place")
+      )
+
+instance Prelude.Hashable SearchForPositionResult where
+  hashWithSalt _salt SearchForPositionResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` placeId
+      `Prelude.hashWithSalt` distance
+      `Prelude.hashWithSalt` place
+
+instance Prelude.NFData SearchForPositionResult where
+  rnf SearchForPositionResult' {..} =
+    Prelude.rnf placeId
+      `Prelude.seq` Prelude.rnf distance
+      `Prelude.seq` Prelude.rnf place
diff --git a/gen/Amazonka/Location/Types/SearchForSuggestionsResult.hs b/gen/Amazonka/Location/Types/SearchForSuggestionsResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/SearchForSuggestionsResult.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.SearchForSuggestionsResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.SearchForSuggestionsResult 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
+
+-- | Contains a place suggestion resulting from a place suggestion query that
+-- is run on a place index resource.
+--
+-- /See:/ 'newSearchForSuggestionsResult' smart constructor.
+data SearchForSuggestionsResult = SearchForSuggestionsResult'
+  { -- | The unique identifier of the place. You can use this with the @GetPlace@
+    -- operation to find the place again later.
+    --
+    -- For @SearchPlaceIndexForSuggestions@ operations, the @PlaceId@ is
+    -- returned by place indexes that use HERE or Esri as data providers.
+    placeId :: Prelude.Maybe Prelude.Text,
+    -- | The text of the place suggestion, typically formatted as an address
+    -- string.
+    text :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchForSuggestionsResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'placeId', 'searchForSuggestionsResult_placeId' - The unique identifier of the place. You can use this with the @GetPlace@
+-- operation to find the place again later.
+--
+-- For @SearchPlaceIndexForSuggestions@ operations, the @PlaceId@ is
+-- returned by place indexes that use HERE or Esri as data providers.
+--
+-- 'text', 'searchForSuggestionsResult_text' - The text of the place suggestion, typically formatted as an address
+-- string.
+newSearchForSuggestionsResult ::
+  -- | 'text'
+  Prelude.Text ->
+  SearchForSuggestionsResult
+newSearchForSuggestionsResult pText_ =
+  SearchForSuggestionsResult'
+    { placeId =
+        Prelude.Nothing,
+      text = pText_
+    }
+
+-- | The unique identifier of the place. You can use this with the @GetPlace@
+-- operation to find the place again later.
+--
+-- For @SearchPlaceIndexForSuggestions@ operations, the @PlaceId@ is
+-- returned by place indexes that use HERE or Esri as data providers.
+searchForSuggestionsResult_placeId :: Lens.Lens' SearchForSuggestionsResult (Prelude.Maybe Prelude.Text)
+searchForSuggestionsResult_placeId = Lens.lens (\SearchForSuggestionsResult' {placeId} -> placeId) (\s@SearchForSuggestionsResult' {} a -> s {placeId = a} :: SearchForSuggestionsResult)
+
+-- | The text of the place suggestion, typically formatted as an address
+-- string.
+searchForSuggestionsResult_text :: Lens.Lens' SearchForSuggestionsResult Prelude.Text
+searchForSuggestionsResult_text = Lens.lens (\SearchForSuggestionsResult' {text} -> text) (\s@SearchForSuggestionsResult' {} a -> s {text = a} :: SearchForSuggestionsResult)
+
+instance Data.FromJSON SearchForSuggestionsResult where
+  parseJSON =
+    Data.withObject
+      "SearchForSuggestionsResult"
+      ( \x ->
+          SearchForSuggestionsResult'
+            Prelude.<$> (x Data..:? "PlaceId")
+            Prelude.<*> (x Data..: "Text")
+      )
+
+instance Prelude.Hashable SearchForSuggestionsResult where
+  hashWithSalt _salt SearchForSuggestionsResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` placeId
+      `Prelude.hashWithSalt` text
+
+instance Prelude.NFData SearchForSuggestionsResult where
+  rnf SearchForSuggestionsResult' {..} =
+    Prelude.rnf placeId `Prelude.seq` Prelude.rnf text
diff --git a/gen/Amazonka/Location/Types/SearchForTextResult.hs b/gen/Amazonka/Location/Types/SearchForTextResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/SearchForTextResult.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.SearchForTextResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.SearchForTextResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.Place
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains a search result from a text search query that is run on a place
+-- index resource.
+--
+-- /See:/ 'newSearchForTextResult' smart constructor.
+data SearchForTextResult = SearchForTextResult'
+  { -- | The distance in meters of a great-circle arc between the bias position
+    -- specified and the result. @Distance@ will be returned only if a bias
+    -- position was specified in the query.
+    --
+    -- A great-circle arc is the shortest path on a sphere, in this case the
+    -- Earth. This returns the shortest distance between two locations.
+    distance :: Prelude.Maybe Prelude.Double,
+    -- | The unique identifier of the place. You can use this with the @GetPlace@
+    -- operation to find the place again later.
+    --
+    -- For @SearchPlaceIndexForText@ operations, the @PlaceId@ is returned only
+    -- by place indexes that use HERE as a data provider.
+    placeId :: Prelude.Maybe Prelude.Text,
+    -- | The relative confidence in the match for a result among the results
+    -- returned. For example, if more fields for an address match (including
+    -- house number, street, city, country\/region, and postal code), the
+    -- relevance score is closer to 1.
+    --
+    -- Returned only when the partner selected is Esri.
+    relevance :: Prelude.Maybe Prelude.Double,
+    -- | Details about the search result, such as its address and position.
+    place :: Place
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchForTextResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'distance', 'searchForTextResult_distance' - The distance in meters of a great-circle arc between the bias position
+-- specified and the result. @Distance@ will be returned only if a bias
+-- position was specified in the query.
+--
+-- A great-circle arc is the shortest path on a sphere, in this case the
+-- Earth. This returns the shortest distance between two locations.
+--
+-- 'placeId', 'searchForTextResult_placeId' - The unique identifier of the place. You can use this with the @GetPlace@
+-- operation to find the place again later.
+--
+-- For @SearchPlaceIndexForText@ operations, the @PlaceId@ is returned only
+-- by place indexes that use HERE as a data provider.
+--
+-- 'relevance', 'searchForTextResult_relevance' - The relative confidence in the match for a result among the results
+-- returned. For example, if more fields for an address match (including
+-- house number, street, city, country\/region, and postal code), the
+-- relevance score is closer to 1.
+--
+-- Returned only when the partner selected is Esri.
+--
+-- 'place', 'searchForTextResult_place' - Details about the search result, such as its address and position.
+newSearchForTextResult ::
+  -- | 'place'
+  Place ->
+  SearchForTextResult
+newSearchForTextResult pPlace_ =
+  SearchForTextResult'
+    { distance = Prelude.Nothing,
+      placeId = Prelude.Nothing,
+      relevance = Prelude.Nothing,
+      place = pPlace_
+    }
+
+-- | The distance in meters of a great-circle arc between the bias position
+-- specified and the result. @Distance@ will be returned only if a bias
+-- position was specified in the query.
+--
+-- A great-circle arc is the shortest path on a sphere, in this case the
+-- Earth. This returns the shortest distance between two locations.
+searchForTextResult_distance :: Lens.Lens' SearchForTextResult (Prelude.Maybe Prelude.Double)
+searchForTextResult_distance = Lens.lens (\SearchForTextResult' {distance} -> distance) (\s@SearchForTextResult' {} a -> s {distance = a} :: SearchForTextResult)
+
+-- | The unique identifier of the place. You can use this with the @GetPlace@
+-- operation to find the place again later.
+--
+-- For @SearchPlaceIndexForText@ operations, the @PlaceId@ is returned only
+-- by place indexes that use HERE as a data provider.
+searchForTextResult_placeId :: Lens.Lens' SearchForTextResult (Prelude.Maybe Prelude.Text)
+searchForTextResult_placeId = Lens.lens (\SearchForTextResult' {placeId} -> placeId) (\s@SearchForTextResult' {} a -> s {placeId = a} :: SearchForTextResult)
+
+-- | The relative confidence in the match for a result among the results
+-- returned. For example, if more fields for an address match (including
+-- house number, street, city, country\/region, and postal code), the
+-- relevance score is closer to 1.
+--
+-- Returned only when the partner selected is Esri.
+searchForTextResult_relevance :: Lens.Lens' SearchForTextResult (Prelude.Maybe Prelude.Double)
+searchForTextResult_relevance = Lens.lens (\SearchForTextResult' {relevance} -> relevance) (\s@SearchForTextResult' {} a -> s {relevance = a} :: SearchForTextResult)
+
+-- | Details about the search result, such as its address and position.
+searchForTextResult_place :: Lens.Lens' SearchForTextResult Place
+searchForTextResult_place = Lens.lens (\SearchForTextResult' {place} -> place) (\s@SearchForTextResult' {} a -> s {place = a} :: SearchForTextResult)
+
+instance Data.FromJSON SearchForTextResult where
+  parseJSON =
+    Data.withObject
+      "SearchForTextResult"
+      ( \x ->
+          SearchForTextResult'
+            Prelude.<$> (x Data..:? "Distance")
+            Prelude.<*> (x Data..:? "PlaceId")
+            Prelude.<*> (x Data..:? "Relevance")
+            Prelude.<*> (x Data..: "Place")
+      )
+
+instance Prelude.Hashable SearchForTextResult where
+  hashWithSalt _salt SearchForTextResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` distance
+      `Prelude.hashWithSalt` placeId
+      `Prelude.hashWithSalt` relevance
+      `Prelude.hashWithSalt` place
+
+instance Prelude.NFData SearchForTextResult where
+  rnf SearchForTextResult' {..} =
+    Prelude.rnf distance
+      `Prelude.seq` Prelude.rnf placeId
+      `Prelude.seq` Prelude.rnf relevance
+      `Prelude.seq` Prelude.rnf place
diff --git a/gen/Amazonka/Location/Types/SearchPlaceIndexForPositionSummary.hs b/gen/Amazonka/Location/Types/SearchPlaceIndexForPositionSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/SearchPlaceIndexForPositionSummary.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.SearchPlaceIndexForPositionSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.SearchPlaceIndexForPositionSummary 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 summary of the request sent by using @SearchPlaceIndexForPosition@.
+--
+-- /See:/ 'newSearchPlaceIndexForPositionSummary' smart constructor.
+data SearchPlaceIndexForPositionSummary = SearchPlaceIndexForPositionSummary'
+  { -- | The preferred language used to return results. Matches the language in
+    -- the request. The value is a valid
+    -- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+    -- @en@ for English.
+    language :: Prelude.Maybe Prelude.Text,
+    -- | Contains the optional result count limit that is specified in the
+    -- request.
+    --
+    -- Default value: @50@
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The geospatial data provider attached to the place index resource
+    -- specified in the request. Values can be one of the following:
+    --
+    -- -   Esri
+    --
+    -- -   Here
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The position specified in the request.
+    position :: Data.Sensitive (Prelude.NonEmpty Prelude.Double)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForPositionSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'language', 'searchPlaceIndexForPositionSummary_language' - The preferred language used to return results. Matches the language in
+-- the request. The value is a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- 'maxResults', 'searchPlaceIndexForPositionSummary_maxResults' - Contains the optional result count limit that is specified in the
+-- request.
+--
+-- Default value: @50@
+--
+-- 'dataSource', 'searchPlaceIndexForPositionSummary_dataSource' - The geospatial data provider attached to the place index resource
+-- specified in the request. Values can be one of the following:
+--
+-- -   Esri
+--
+-- -   Here
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'position', 'searchPlaceIndexForPositionSummary_position' - The position specified in the request.
+newSearchPlaceIndexForPositionSummary ::
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'position'
+  Prelude.NonEmpty Prelude.Double ->
+  SearchPlaceIndexForPositionSummary
+newSearchPlaceIndexForPositionSummary
+  pDataSource_
+  pPosition_ =
+    SearchPlaceIndexForPositionSummary'
+      { language =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        dataSource = pDataSource_,
+        position =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pPosition_
+      }
+
+-- | The preferred language used to return results. Matches the language in
+-- the request. The value is a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+searchPlaceIndexForPositionSummary_language :: Lens.Lens' SearchPlaceIndexForPositionSummary (Prelude.Maybe Prelude.Text)
+searchPlaceIndexForPositionSummary_language = Lens.lens (\SearchPlaceIndexForPositionSummary' {language} -> language) (\s@SearchPlaceIndexForPositionSummary' {} a -> s {language = a} :: SearchPlaceIndexForPositionSummary)
+
+-- | Contains the optional result count limit that is specified in the
+-- request.
+--
+-- Default value: @50@
+searchPlaceIndexForPositionSummary_maxResults :: Lens.Lens' SearchPlaceIndexForPositionSummary (Prelude.Maybe Prelude.Natural)
+searchPlaceIndexForPositionSummary_maxResults = Lens.lens (\SearchPlaceIndexForPositionSummary' {maxResults} -> maxResults) (\s@SearchPlaceIndexForPositionSummary' {} a -> s {maxResults = a} :: SearchPlaceIndexForPositionSummary)
+
+-- | The geospatial data provider attached to the place index resource
+-- specified in the request. Values can be one of the following:
+--
+-- -   Esri
+--
+-- -   Here
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+searchPlaceIndexForPositionSummary_dataSource :: Lens.Lens' SearchPlaceIndexForPositionSummary Prelude.Text
+searchPlaceIndexForPositionSummary_dataSource = Lens.lens (\SearchPlaceIndexForPositionSummary' {dataSource} -> dataSource) (\s@SearchPlaceIndexForPositionSummary' {} a -> s {dataSource = a} :: SearchPlaceIndexForPositionSummary)
+
+-- | The position specified in the request.
+searchPlaceIndexForPositionSummary_position :: Lens.Lens' SearchPlaceIndexForPositionSummary (Prelude.NonEmpty Prelude.Double)
+searchPlaceIndexForPositionSummary_position = Lens.lens (\SearchPlaceIndexForPositionSummary' {position} -> position) (\s@SearchPlaceIndexForPositionSummary' {} a -> s {position = a} :: SearchPlaceIndexForPositionSummary) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance
+  Data.FromJSON
+    SearchPlaceIndexForPositionSummary
+  where
+  parseJSON =
+    Data.withObject
+      "SearchPlaceIndexForPositionSummary"
+      ( \x ->
+          SearchPlaceIndexForPositionSummary'
+            Prelude.<$> (x Data..:? "Language")
+            Prelude.<*> (x Data..:? "MaxResults")
+            Prelude.<*> (x Data..: "DataSource")
+            Prelude.<*> (x Data..: "Position")
+      )
+
+instance
+  Prelude.Hashable
+    SearchPlaceIndexForPositionSummary
+  where
+  hashWithSalt
+    _salt
+    SearchPlaceIndexForPositionSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` language
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` dataSource
+        `Prelude.hashWithSalt` position
+
+instance
+  Prelude.NFData
+    SearchPlaceIndexForPositionSummary
+  where
+  rnf SearchPlaceIndexForPositionSummary' {..} =
+    Prelude.rnf language
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf position
diff --git a/gen/Amazonka/Location/Types/SearchPlaceIndexForSuggestionsSummary.hs b/gen/Amazonka/Location/Types/SearchPlaceIndexForSuggestionsSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/SearchPlaceIndexForSuggestionsSummary.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.SearchPlaceIndexForSuggestionsSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.SearchPlaceIndexForSuggestionsSummary 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 summary of the request sent by using @SearchPlaceIndexForSuggestions@.
+--
+-- /See:/ 'newSearchPlaceIndexForSuggestionsSummary' smart constructor.
+data SearchPlaceIndexForSuggestionsSummary = SearchPlaceIndexForSuggestionsSummary'
+  { -- | Contains the coordinates for the optional bias position specified in the
+    -- request.
+    --
+    -- This parameter contains a pair of numbers. The first number represents
+    -- the X coordinate, or longitude; the second number represents the Y
+    -- coordinate, or latitude.
+    --
+    -- For example, @[-123.1174, 49.2847]@ represents the position with
+    -- longitude @-123.1174@ and latitude @49.2847@.
+    biasPosition :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | Contains the coordinates for the optional bounding box specified in the
+    -- request.
+    filterBBox :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | Contains the optional country filter specified in the request.
+    filterCountries :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The preferred language used to return results. Matches the language in
+    -- the request. The value is a valid
+    -- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+    -- @en@ for English.
+    language :: Prelude.Maybe Prelude.Text,
+    -- | Contains the optional result count limit specified in the request.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The geospatial data provider attached to the place index resource
+    -- specified in the request. Values can be one of the following:
+    --
+    -- -   Esri
+    --
+    -- -   Here
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The free-form partial text input specified in the request.
+    text :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForSuggestionsSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'biasPosition', 'searchPlaceIndexForSuggestionsSummary_biasPosition' - Contains the coordinates for the optional bias position specified in the
+-- request.
+--
+-- This parameter contains a pair of numbers. The first number represents
+-- the X coordinate, or longitude; the second number represents the Y
+-- coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents the position with
+-- longitude @-123.1174@ and latitude @49.2847@.
+--
+-- 'filterBBox', 'searchPlaceIndexForSuggestionsSummary_filterBBox' - Contains the coordinates for the optional bounding box specified in the
+-- request.
+--
+-- 'filterCountries', 'searchPlaceIndexForSuggestionsSummary_filterCountries' - Contains the optional country filter specified in the request.
+--
+-- 'language', 'searchPlaceIndexForSuggestionsSummary_language' - The preferred language used to return results. Matches the language in
+-- the request. The value is a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- 'maxResults', 'searchPlaceIndexForSuggestionsSummary_maxResults' - Contains the optional result count limit specified in the request.
+--
+-- 'dataSource', 'searchPlaceIndexForSuggestionsSummary_dataSource' - The geospatial data provider attached to the place index resource
+-- specified in the request. Values can be one of the following:
+--
+-- -   Esri
+--
+-- -   Here
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'text', 'searchPlaceIndexForSuggestionsSummary_text' - The free-form partial text input specified in the request.
+newSearchPlaceIndexForSuggestionsSummary ::
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'text'
+  Prelude.Text ->
+  SearchPlaceIndexForSuggestionsSummary
+newSearchPlaceIndexForSuggestionsSummary
+  pDataSource_
+  pText_ =
+    SearchPlaceIndexForSuggestionsSummary'
+      { biasPosition =
+          Prelude.Nothing,
+        filterBBox = Prelude.Nothing,
+        filterCountries = Prelude.Nothing,
+        language = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        dataSource = pDataSource_,
+        text = Data._Sensitive Lens.# pText_
+      }
+
+-- | Contains the coordinates for the optional bias position specified in the
+-- request.
+--
+-- This parameter contains a pair of numbers. The first number represents
+-- the X coordinate, or longitude; the second number represents the Y
+-- coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents the position with
+-- longitude @-123.1174@ and latitude @49.2847@.
+searchPlaceIndexForSuggestionsSummary_biasPosition :: Lens.Lens' SearchPlaceIndexForSuggestionsSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForSuggestionsSummary_biasPosition = Lens.lens (\SearchPlaceIndexForSuggestionsSummary' {biasPosition} -> biasPosition) (\s@SearchPlaceIndexForSuggestionsSummary' {} a -> s {biasPosition = a} :: SearchPlaceIndexForSuggestionsSummary) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Contains the coordinates for the optional bounding box specified in the
+-- request.
+searchPlaceIndexForSuggestionsSummary_filterBBox :: Lens.Lens' SearchPlaceIndexForSuggestionsSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForSuggestionsSummary_filterBBox = Lens.lens (\SearchPlaceIndexForSuggestionsSummary' {filterBBox} -> filterBBox) (\s@SearchPlaceIndexForSuggestionsSummary' {} a -> s {filterBBox = a} :: SearchPlaceIndexForSuggestionsSummary) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Contains the optional country filter specified in the request.
+searchPlaceIndexForSuggestionsSummary_filterCountries :: Lens.Lens' SearchPlaceIndexForSuggestionsSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+searchPlaceIndexForSuggestionsSummary_filterCountries = Lens.lens (\SearchPlaceIndexForSuggestionsSummary' {filterCountries} -> filterCountries) (\s@SearchPlaceIndexForSuggestionsSummary' {} a -> s {filterCountries = a} :: SearchPlaceIndexForSuggestionsSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The preferred language used to return results. Matches the language in
+-- the request. The value is a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+searchPlaceIndexForSuggestionsSummary_language :: Lens.Lens' SearchPlaceIndexForSuggestionsSummary (Prelude.Maybe Prelude.Text)
+searchPlaceIndexForSuggestionsSummary_language = Lens.lens (\SearchPlaceIndexForSuggestionsSummary' {language} -> language) (\s@SearchPlaceIndexForSuggestionsSummary' {} a -> s {language = a} :: SearchPlaceIndexForSuggestionsSummary)
+
+-- | Contains the optional result count limit specified in the request.
+searchPlaceIndexForSuggestionsSummary_maxResults :: Lens.Lens' SearchPlaceIndexForSuggestionsSummary (Prelude.Maybe Prelude.Int)
+searchPlaceIndexForSuggestionsSummary_maxResults = Lens.lens (\SearchPlaceIndexForSuggestionsSummary' {maxResults} -> maxResults) (\s@SearchPlaceIndexForSuggestionsSummary' {} a -> s {maxResults = a} :: SearchPlaceIndexForSuggestionsSummary)
+
+-- | The geospatial data provider attached to the place index resource
+-- specified in the request. Values can be one of the following:
+--
+-- -   Esri
+--
+-- -   Here
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+searchPlaceIndexForSuggestionsSummary_dataSource :: Lens.Lens' SearchPlaceIndexForSuggestionsSummary Prelude.Text
+searchPlaceIndexForSuggestionsSummary_dataSource = Lens.lens (\SearchPlaceIndexForSuggestionsSummary' {dataSource} -> dataSource) (\s@SearchPlaceIndexForSuggestionsSummary' {} a -> s {dataSource = a} :: SearchPlaceIndexForSuggestionsSummary)
+
+-- | The free-form partial text input specified in the request.
+searchPlaceIndexForSuggestionsSummary_text :: Lens.Lens' SearchPlaceIndexForSuggestionsSummary Prelude.Text
+searchPlaceIndexForSuggestionsSummary_text = Lens.lens (\SearchPlaceIndexForSuggestionsSummary' {text} -> text) (\s@SearchPlaceIndexForSuggestionsSummary' {} a -> s {text = a} :: SearchPlaceIndexForSuggestionsSummary) Prelude.. Data._Sensitive
+
+instance
+  Data.FromJSON
+    SearchPlaceIndexForSuggestionsSummary
+  where
+  parseJSON =
+    Data.withObject
+      "SearchPlaceIndexForSuggestionsSummary"
+      ( \x ->
+          SearchPlaceIndexForSuggestionsSummary'
+            Prelude.<$> (x Data..:? "BiasPosition")
+            Prelude.<*> (x Data..:? "FilterBBox")
+            Prelude.<*> (x Data..:? "FilterCountries")
+            Prelude.<*> (x Data..:? "Language")
+            Prelude.<*> (x Data..:? "MaxResults")
+            Prelude.<*> (x Data..: "DataSource")
+            Prelude.<*> (x Data..: "Text")
+      )
+
+instance
+  Prelude.Hashable
+    SearchPlaceIndexForSuggestionsSummary
+  where
+  hashWithSalt
+    _salt
+    SearchPlaceIndexForSuggestionsSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` biasPosition
+        `Prelude.hashWithSalt` filterBBox
+        `Prelude.hashWithSalt` filterCountries
+        `Prelude.hashWithSalt` language
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` dataSource
+        `Prelude.hashWithSalt` text
+
+instance
+  Prelude.NFData
+    SearchPlaceIndexForSuggestionsSummary
+  where
+  rnf SearchPlaceIndexForSuggestionsSummary' {..} =
+    Prelude.rnf biasPosition
+      `Prelude.seq` Prelude.rnf filterBBox
+      `Prelude.seq` Prelude.rnf filterCountries
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf text
diff --git a/gen/Amazonka/Location/Types/SearchPlaceIndexForTextSummary.hs b/gen/Amazonka/Location/Types/SearchPlaceIndexForTextSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/SearchPlaceIndexForTextSummary.hs
@@ -0,0 +1,238 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.SearchPlaceIndexForTextSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.SearchPlaceIndexForTextSummary 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 summary of the request sent by using @SearchPlaceIndexForText@.
+--
+-- /See:/ 'newSearchPlaceIndexForTextSummary' smart constructor.
+data SearchPlaceIndexForTextSummary = SearchPlaceIndexForTextSummary'
+  { -- | Contains the coordinates for the optional bias position specified in the
+    -- request.
+    --
+    -- This parameter contains a pair of numbers. The first number represents
+    -- the X coordinate, or longitude; the second number represents the Y
+    -- coordinate, or latitude.
+    --
+    -- For example, @[-123.1174, 49.2847]@ represents the position with
+    -- longitude @-123.1174@ and latitude @49.2847@.
+    biasPosition :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | Contains the coordinates for the optional bounding box specified in the
+    -- request.
+    filterBBox :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | Contains the optional country filter specified in the request.
+    filterCountries :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The preferred language used to return results. Matches the language in
+    -- the request. The value is a valid
+    -- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+    -- @en@ for English.
+    language :: Prelude.Maybe Prelude.Text,
+    -- | Contains the optional result count limit specified in the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The bounding box that fully contains all search results.
+    --
+    -- If you specified the optional @FilterBBox@ parameter in the request,
+    -- @ResultBBox@ is contained within @FilterBBox@.
+    resultBBox :: Prelude.Maybe (Data.Sensitive (Prelude.NonEmpty Prelude.Double)),
+    -- | The geospatial data provider attached to the place index resource
+    -- specified in the request. Values can be one of the following:
+    --
+    -- -   Esri
+    --
+    -- -   Here
+    --
+    -- For more information about data providers, see
+    -- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+    dataSource :: Prelude.Text,
+    -- | The search text specified in the request.
+    text :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchPlaceIndexForTextSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'biasPosition', 'searchPlaceIndexForTextSummary_biasPosition' - Contains the coordinates for the optional bias position specified in the
+-- request.
+--
+-- This parameter contains a pair of numbers. The first number represents
+-- the X coordinate, or longitude; the second number represents the Y
+-- coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents the position with
+-- longitude @-123.1174@ and latitude @49.2847@.
+--
+-- 'filterBBox', 'searchPlaceIndexForTextSummary_filterBBox' - Contains the coordinates for the optional bounding box specified in the
+-- request.
+--
+-- 'filterCountries', 'searchPlaceIndexForTextSummary_filterCountries' - Contains the optional country filter specified in the request.
+--
+-- 'language', 'searchPlaceIndexForTextSummary_language' - The preferred language used to return results. Matches the language in
+-- the request. The value is a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+--
+-- 'maxResults', 'searchPlaceIndexForTextSummary_maxResults' - Contains the optional result count limit specified in the request.
+--
+-- 'resultBBox', 'searchPlaceIndexForTextSummary_resultBBox' - The bounding box that fully contains all search results.
+--
+-- If you specified the optional @FilterBBox@ parameter in the request,
+-- @ResultBBox@ is contained within @FilterBBox@.
+--
+-- 'dataSource', 'searchPlaceIndexForTextSummary_dataSource' - The geospatial data provider attached to the place index resource
+-- specified in the request. Values can be one of the following:
+--
+-- -   Esri
+--
+-- -   Here
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+--
+-- 'text', 'searchPlaceIndexForTextSummary_text' - The search text specified in the request.
+newSearchPlaceIndexForTextSummary ::
+  -- | 'dataSource'
+  Prelude.Text ->
+  -- | 'text'
+  Prelude.Text ->
+  SearchPlaceIndexForTextSummary
+newSearchPlaceIndexForTextSummary pDataSource_ pText_ =
+  SearchPlaceIndexForTextSummary'
+    { biasPosition =
+        Prelude.Nothing,
+      filterBBox = Prelude.Nothing,
+      filterCountries = Prelude.Nothing,
+      language = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      resultBBox = Prelude.Nothing,
+      dataSource = pDataSource_,
+      text = Data._Sensitive Lens.# pText_
+    }
+
+-- | Contains the coordinates for the optional bias position specified in the
+-- request.
+--
+-- This parameter contains a pair of numbers. The first number represents
+-- the X coordinate, or longitude; the second number represents the Y
+-- coordinate, or latitude.
+--
+-- For example, @[-123.1174, 49.2847]@ represents the position with
+-- longitude @-123.1174@ and latitude @49.2847@.
+searchPlaceIndexForTextSummary_biasPosition :: Lens.Lens' SearchPlaceIndexForTextSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForTextSummary_biasPosition = Lens.lens (\SearchPlaceIndexForTextSummary' {biasPosition} -> biasPosition) (\s@SearchPlaceIndexForTextSummary' {} a -> s {biasPosition = a} :: SearchPlaceIndexForTextSummary) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Contains the coordinates for the optional bounding box specified in the
+-- request.
+searchPlaceIndexForTextSummary_filterBBox :: Lens.Lens' SearchPlaceIndexForTextSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForTextSummary_filterBBox = Lens.lens (\SearchPlaceIndexForTextSummary' {filterBBox} -> filterBBox) (\s@SearchPlaceIndexForTextSummary' {} a -> s {filterBBox = a} :: SearchPlaceIndexForTextSummary) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | Contains the optional country filter specified in the request.
+searchPlaceIndexForTextSummary_filterCountries :: Lens.Lens' SearchPlaceIndexForTextSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+searchPlaceIndexForTextSummary_filterCountries = Lens.lens (\SearchPlaceIndexForTextSummary' {filterCountries} -> filterCountries) (\s@SearchPlaceIndexForTextSummary' {} a -> s {filterCountries = a} :: SearchPlaceIndexForTextSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The preferred language used to return results. Matches the language in
+-- the request. The value is a valid
+-- <https://tools.ietf.org/search/bcp47 BCP 47> language tag, for example,
+-- @en@ for English.
+searchPlaceIndexForTextSummary_language :: Lens.Lens' SearchPlaceIndexForTextSummary (Prelude.Maybe Prelude.Text)
+searchPlaceIndexForTextSummary_language = Lens.lens (\SearchPlaceIndexForTextSummary' {language} -> language) (\s@SearchPlaceIndexForTextSummary' {} a -> s {language = a} :: SearchPlaceIndexForTextSummary)
+
+-- | Contains the optional result count limit specified in the request.
+searchPlaceIndexForTextSummary_maxResults :: Lens.Lens' SearchPlaceIndexForTextSummary (Prelude.Maybe Prelude.Natural)
+searchPlaceIndexForTextSummary_maxResults = Lens.lens (\SearchPlaceIndexForTextSummary' {maxResults} -> maxResults) (\s@SearchPlaceIndexForTextSummary' {} a -> s {maxResults = a} :: SearchPlaceIndexForTextSummary)
+
+-- | The bounding box that fully contains all search results.
+--
+-- If you specified the optional @FilterBBox@ parameter in the request,
+-- @ResultBBox@ is contained within @FilterBBox@.
+searchPlaceIndexForTextSummary_resultBBox :: Lens.Lens' SearchPlaceIndexForTextSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Double))
+searchPlaceIndexForTextSummary_resultBBox = Lens.lens (\SearchPlaceIndexForTextSummary' {resultBBox} -> resultBBox) (\s@SearchPlaceIndexForTextSummary' {} a -> s {resultBBox = a} :: SearchPlaceIndexForTextSummary) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The geospatial data provider attached to the place index resource
+-- specified in the request. Values can be one of the following:
+--
+-- -   Esri
+--
+-- -   Here
+--
+-- For more information about data providers, see
+-- <https://docs.aws.amazon.com/location/latest/developerguide/what-is-data-provider.html Amazon Location Service data providers>.
+searchPlaceIndexForTextSummary_dataSource :: Lens.Lens' SearchPlaceIndexForTextSummary Prelude.Text
+searchPlaceIndexForTextSummary_dataSource = Lens.lens (\SearchPlaceIndexForTextSummary' {dataSource} -> dataSource) (\s@SearchPlaceIndexForTextSummary' {} a -> s {dataSource = a} :: SearchPlaceIndexForTextSummary)
+
+-- | The search text specified in the request.
+searchPlaceIndexForTextSummary_text :: Lens.Lens' SearchPlaceIndexForTextSummary Prelude.Text
+searchPlaceIndexForTextSummary_text = Lens.lens (\SearchPlaceIndexForTextSummary' {text} -> text) (\s@SearchPlaceIndexForTextSummary' {} a -> s {text = a} :: SearchPlaceIndexForTextSummary) Prelude.. Data._Sensitive
+
+instance Data.FromJSON SearchPlaceIndexForTextSummary where
+  parseJSON =
+    Data.withObject
+      "SearchPlaceIndexForTextSummary"
+      ( \x ->
+          SearchPlaceIndexForTextSummary'
+            Prelude.<$> (x Data..:? "BiasPosition")
+            Prelude.<*> (x Data..:? "FilterBBox")
+            Prelude.<*> (x Data..:? "FilterCountries")
+            Prelude.<*> (x Data..:? "Language")
+            Prelude.<*> (x Data..:? "MaxResults")
+            Prelude.<*> (x Data..:? "ResultBBox")
+            Prelude.<*> (x Data..: "DataSource")
+            Prelude.<*> (x Data..: "Text")
+      )
+
+instance
+  Prelude.Hashable
+    SearchPlaceIndexForTextSummary
+  where
+  hashWithSalt
+    _salt
+    SearchPlaceIndexForTextSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` biasPosition
+        `Prelude.hashWithSalt` filterBBox
+        `Prelude.hashWithSalt` filterCountries
+        `Prelude.hashWithSalt` language
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` resultBBox
+        `Prelude.hashWithSalt` dataSource
+        `Prelude.hashWithSalt` text
+
+instance
+  Prelude.NFData
+    SearchPlaceIndexForTextSummary
+  where
+  rnf SearchPlaceIndexForTextSummary' {..} =
+    Prelude.rnf biasPosition
+      `Prelude.seq` Prelude.rnf filterBBox
+      `Prelude.seq` Prelude.rnf filterCountries
+      `Prelude.seq` Prelude.rnf language
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf resultBBox
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf text
diff --git a/gen/Amazonka/Location/Types/Step.hs b/gen/Amazonka/Location/Types/Step.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/Step.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.Step
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.Step 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
+
+-- | Represents an element of a leg within a route. A step contains
+-- instructions for how to move to the next step in the leg.
+--
+-- /See:/ 'newStep' smart constructor.
+data Step = Step'
+  { -- | Represents the start position, or index, in a sequence of steps within
+    -- the leg\'s line string geometry. For example, the index of the first
+    -- step in a leg geometry is @0@.
+    --
+    -- Included in the response for queries that set @IncludeLegGeometry@ to
+    -- @True@.
+    geometryOffset :: Prelude.Maybe Prelude.Natural,
+    -- | The travel distance between the step\'s @StartPosition@ and
+    -- @EndPosition@.
+    distance :: Prelude.Double,
+    -- | The estimated travel time, in seconds, from the step\'s @StartPosition@
+    -- to the @EndPosition@. . The travel mode and departure time that you
+    -- specify in the request determines the calculated time.
+    durationSeconds :: Prelude.Double,
+    -- | The end position of a step. If the position the last step in the leg,
+    -- this position is the same as the end position of the leg.
+    endPosition :: Data.Sensitive (Prelude.NonEmpty Prelude.Double),
+    -- | The starting position of a step. If the position is the first step in
+    -- the leg, this position is the same as the start position of the leg.
+    startPosition :: Data.Sensitive (Prelude.NonEmpty Prelude.Double)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Step' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'geometryOffset', 'step_geometryOffset' - Represents the start position, or index, in a sequence of steps within
+-- the leg\'s line string geometry. For example, the index of the first
+-- step in a leg geometry is @0@.
+--
+-- Included in the response for queries that set @IncludeLegGeometry@ to
+-- @True@.
+--
+-- 'distance', 'step_distance' - The travel distance between the step\'s @StartPosition@ and
+-- @EndPosition@.
+--
+-- 'durationSeconds', 'step_durationSeconds' - The estimated travel time, in seconds, from the step\'s @StartPosition@
+-- to the @EndPosition@. . The travel mode and departure time that you
+-- specify in the request determines the calculated time.
+--
+-- 'endPosition', 'step_endPosition' - The end position of a step. If the position the last step in the leg,
+-- this position is the same as the end position of the leg.
+--
+-- 'startPosition', 'step_startPosition' - The starting position of a step. If the position is the first step in
+-- the leg, this position is the same as the start position of the leg.
+newStep ::
+  -- | 'distance'
+  Prelude.Double ->
+  -- | 'durationSeconds'
+  Prelude.Double ->
+  -- | 'endPosition'
+  Prelude.NonEmpty Prelude.Double ->
+  -- | 'startPosition'
+  Prelude.NonEmpty Prelude.Double ->
+  Step
+newStep
+  pDistance_
+  pDurationSeconds_
+  pEndPosition_
+  pStartPosition_ =
+    Step'
+      { geometryOffset = Prelude.Nothing,
+        distance = pDistance_,
+        durationSeconds = pDurationSeconds_,
+        endPosition =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pEndPosition_,
+        startPosition =
+          Data._Sensitive
+            Prelude.. Lens.coerced
+            Lens.# pStartPosition_
+      }
+
+-- | Represents the start position, or index, in a sequence of steps within
+-- the leg\'s line string geometry. For example, the index of the first
+-- step in a leg geometry is @0@.
+--
+-- Included in the response for queries that set @IncludeLegGeometry@ to
+-- @True@.
+step_geometryOffset :: Lens.Lens' Step (Prelude.Maybe Prelude.Natural)
+step_geometryOffset = Lens.lens (\Step' {geometryOffset} -> geometryOffset) (\s@Step' {} a -> s {geometryOffset = a} :: Step)
+
+-- | The travel distance between the step\'s @StartPosition@ and
+-- @EndPosition@.
+step_distance :: Lens.Lens' Step Prelude.Double
+step_distance = Lens.lens (\Step' {distance} -> distance) (\s@Step' {} a -> s {distance = a} :: Step)
+
+-- | The estimated travel time, in seconds, from the step\'s @StartPosition@
+-- to the @EndPosition@. . The travel mode and departure time that you
+-- specify in the request determines the calculated time.
+step_durationSeconds :: Lens.Lens' Step Prelude.Double
+step_durationSeconds = Lens.lens (\Step' {durationSeconds} -> durationSeconds) (\s@Step' {} a -> s {durationSeconds = a} :: Step)
+
+-- | The end position of a step. If the position the last step in the leg,
+-- this position is the same as the end position of the leg.
+step_endPosition :: Lens.Lens' Step (Prelude.NonEmpty Prelude.Double)
+step_endPosition = Lens.lens (\Step' {endPosition} -> endPosition) (\s@Step' {} a -> s {endPosition = a} :: Step) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+-- | The starting position of a step. If the position is the first step in
+-- the leg, this position is the same as the start position of the leg.
+step_startPosition :: Lens.Lens' Step (Prelude.NonEmpty Prelude.Double)
+step_startPosition = Lens.lens (\Step' {startPosition} -> startPosition) (\s@Step' {} a -> s {startPosition = a} :: Step) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Data.FromJSON Step where
+  parseJSON =
+    Data.withObject
+      "Step"
+      ( \x ->
+          Step'
+            Prelude.<$> (x Data..:? "GeometryOffset")
+            Prelude.<*> (x Data..: "Distance")
+            Prelude.<*> (x Data..: "DurationSeconds")
+            Prelude.<*> (x Data..: "EndPosition")
+            Prelude.<*> (x Data..: "StartPosition")
+      )
+
+instance Prelude.Hashable Step where
+  hashWithSalt _salt Step' {..} =
+    _salt
+      `Prelude.hashWithSalt` geometryOffset
+      `Prelude.hashWithSalt` distance
+      `Prelude.hashWithSalt` durationSeconds
+      `Prelude.hashWithSalt` endPosition
+      `Prelude.hashWithSalt` startPosition
+
+instance Prelude.NFData Step where
+  rnf Step' {..} =
+    Prelude.rnf geometryOffset
+      `Prelude.seq` Prelude.rnf distance
+      `Prelude.seq` Prelude.rnf durationSeconds
+      `Prelude.seq` Prelude.rnf endPosition
+      `Prelude.seq` Prelude.rnf startPosition
diff --git a/gen/Amazonka/Location/Types/TimeZone.hs b/gen/Amazonka/Location/Types/TimeZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/TimeZone.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.TimeZone
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.TimeZone where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a time zone. Includes the name of the time zone and
+-- the offset from UTC in seconds.
+--
+-- /See:/ 'newTimeZone' smart constructor.
+data TimeZone = TimeZone'
+  { -- | The time zone\'s offset, in seconds, from UTC.
+    offset :: Prelude.Maybe Prelude.Int,
+    -- | The name of the time zone, following the
+    -- <https://www.iana.org/time-zones IANA time zone standard>. For example,
+    -- @America\/Los_Angeles@.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeZone' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'offset', 'timeZone_offset' - The time zone\'s offset, in seconds, from UTC.
+--
+-- 'name', 'timeZone_name' - The name of the time zone, following the
+-- <https://www.iana.org/time-zones IANA time zone standard>. For example,
+-- @America\/Los_Angeles@.
+newTimeZone ::
+  -- | 'name'
+  Prelude.Text ->
+  TimeZone
+newTimeZone pName_ =
+  TimeZone' {offset = Prelude.Nothing, name = pName_}
+
+-- | The time zone\'s offset, in seconds, from UTC.
+timeZone_offset :: Lens.Lens' TimeZone (Prelude.Maybe Prelude.Int)
+timeZone_offset = Lens.lens (\TimeZone' {offset} -> offset) (\s@TimeZone' {} a -> s {offset = a} :: TimeZone)
+
+-- | The name of the time zone, following the
+-- <https://www.iana.org/time-zones IANA time zone standard>. For example,
+-- @America\/Los_Angeles@.
+timeZone_name :: Lens.Lens' TimeZone Prelude.Text
+timeZone_name = Lens.lens (\TimeZone' {name} -> name) (\s@TimeZone' {} a -> s {name = a} :: TimeZone)
+
+instance Data.FromJSON TimeZone where
+  parseJSON =
+    Data.withObject
+      "TimeZone"
+      ( \x ->
+          TimeZone'
+            Prelude.<$> (x Data..:? "Offset")
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable TimeZone where
+  hashWithSalt _salt TimeZone' {..} =
+    _salt
+      `Prelude.hashWithSalt` offset
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData TimeZone where
+  rnf TimeZone' {..} =
+    Prelude.rnf offset `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/Location/Types/TravelMode.hs b/gen/Amazonka/Location/Types/TravelMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/TravelMode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.TravelMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.TravelMode
+  ( TravelMode
+      ( ..,
+        TravelMode_Car,
+        TravelMode_Truck,
+        TravelMode_Walking
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TravelMode = TravelMode'
+  { fromTravelMode ::
+      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 TravelMode_Car :: TravelMode
+pattern TravelMode_Car = TravelMode' "Car"
+
+pattern TravelMode_Truck :: TravelMode
+pattern TravelMode_Truck = TravelMode' "Truck"
+
+pattern TravelMode_Walking :: TravelMode
+pattern TravelMode_Walking = TravelMode' "Walking"
+
+{-# COMPLETE
+  TravelMode_Car,
+  TravelMode_Truck,
+  TravelMode_Walking,
+  TravelMode'
+  #-}
diff --git a/gen/Amazonka/Location/Types/TruckDimensions.hs b/gen/Amazonka/Location/Types/TruckDimensions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/TruckDimensions.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.Types.TruckDimensions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.TruckDimensions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.DimensionUnit
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains details about the truck dimensions in the unit of measurement
+-- that you specify. Used to filter out roads that can\'t support or allow
+-- the specified dimensions for requests that specify @TravelMode@ as
+-- @Truck@.
+--
+-- /See:/ 'newTruckDimensions' smart constructor.
+data TruckDimensions = TruckDimensions'
+  { -- | The height of the truck.
+    --
+    -- -   For example, @4.5@.
+    --
+    -- For routes calculated with a HERE resource, this value must be between 0
+    -- and 50 meters.
+    height :: Prelude.Maybe Prelude.Double,
+    -- | The length of the truck.
+    --
+    -- -   For example, @15.5@.
+    --
+    -- For routes calculated with a HERE resource, this value must be between 0
+    -- and 300 meters.
+    length :: Prelude.Maybe Prelude.Double,
+    -- | Specifies the unit of measurement for the truck dimensions.
+    --
+    -- Default Value: @Meters@
+    unit :: Prelude.Maybe DimensionUnit,
+    -- | The width of the truck.
+    --
+    -- -   For example, @4.5@.
+    --
+    -- For routes calculated with a HERE resource, this value must be between 0
+    -- and 50 meters.
+    width :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TruckDimensions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'height', 'truckDimensions_height' - The height of the truck.
+--
+-- -   For example, @4.5@.
+--
+-- For routes calculated with a HERE resource, this value must be between 0
+-- and 50 meters.
+--
+-- 'length', 'truckDimensions_length' - The length of the truck.
+--
+-- -   For example, @15.5@.
+--
+-- For routes calculated with a HERE resource, this value must be between 0
+-- and 300 meters.
+--
+-- 'unit', 'truckDimensions_unit' - Specifies the unit of measurement for the truck dimensions.
+--
+-- Default Value: @Meters@
+--
+-- 'width', 'truckDimensions_width' - The width of the truck.
+--
+-- -   For example, @4.5@.
+--
+-- For routes calculated with a HERE resource, this value must be between 0
+-- and 50 meters.
+newTruckDimensions ::
+  TruckDimensions
+newTruckDimensions =
+  TruckDimensions'
+    { height = Prelude.Nothing,
+      length = Prelude.Nothing,
+      unit = Prelude.Nothing,
+      width = Prelude.Nothing
+    }
+
+-- | The height of the truck.
+--
+-- -   For example, @4.5@.
+--
+-- For routes calculated with a HERE resource, this value must be between 0
+-- and 50 meters.
+truckDimensions_height :: Lens.Lens' TruckDimensions (Prelude.Maybe Prelude.Double)
+truckDimensions_height = Lens.lens (\TruckDimensions' {height} -> height) (\s@TruckDimensions' {} a -> s {height = a} :: TruckDimensions)
+
+-- | The length of the truck.
+--
+-- -   For example, @15.5@.
+--
+-- For routes calculated with a HERE resource, this value must be between 0
+-- and 300 meters.
+truckDimensions_length :: Lens.Lens' TruckDimensions (Prelude.Maybe Prelude.Double)
+truckDimensions_length = Lens.lens (\TruckDimensions' {length} -> length) (\s@TruckDimensions' {} a -> s {length = a} :: TruckDimensions)
+
+-- | Specifies the unit of measurement for the truck dimensions.
+--
+-- Default Value: @Meters@
+truckDimensions_unit :: Lens.Lens' TruckDimensions (Prelude.Maybe DimensionUnit)
+truckDimensions_unit = Lens.lens (\TruckDimensions' {unit} -> unit) (\s@TruckDimensions' {} a -> s {unit = a} :: TruckDimensions)
+
+-- | The width of the truck.
+--
+-- -   For example, @4.5@.
+--
+-- For routes calculated with a HERE resource, this value must be between 0
+-- and 50 meters.
+truckDimensions_width :: Lens.Lens' TruckDimensions (Prelude.Maybe Prelude.Double)
+truckDimensions_width = Lens.lens (\TruckDimensions' {width} -> width) (\s@TruckDimensions' {} a -> s {width = a} :: TruckDimensions)
+
+instance Prelude.Hashable TruckDimensions where
+  hashWithSalt _salt TruckDimensions' {..} =
+    _salt
+      `Prelude.hashWithSalt` height
+      `Prelude.hashWithSalt` length
+      `Prelude.hashWithSalt` unit
+      `Prelude.hashWithSalt` width
+
+instance Prelude.NFData TruckDimensions where
+  rnf TruckDimensions' {..} =
+    Prelude.rnf height
+      `Prelude.seq` Prelude.rnf length
+      `Prelude.seq` Prelude.rnf unit
+      `Prelude.seq` Prelude.rnf width
+
+instance Data.ToJSON TruckDimensions where
+  toJSON TruckDimensions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Height" Data..=) Prelude.<$> height,
+            ("Length" Data..=) Prelude.<$> length,
+            ("Unit" Data..=) Prelude.<$> unit,
+            ("Width" Data..=) Prelude.<$> width
+          ]
+      )
diff --git a/gen/Amazonka/Location/Types/TruckWeight.hs b/gen/Amazonka/Location/Types/TruckWeight.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/TruckWeight.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.Location.Types.TruckWeight
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.TruckWeight where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types.VehicleWeightUnit
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains details about the truck\'s weight specifications. Used to avoid
+-- roads that can\'t support or allow the total weight for requests that
+-- specify @TravelMode@ as @Truck@.
+--
+-- /See:/ 'newTruckWeight' smart constructor.
+data TruckWeight = TruckWeight'
+  { -- | The total weight of the truck.
+    --
+    -- -   For example, @3500@.
+    total :: Prelude.Maybe Prelude.Double,
+    -- | The unit of measurement to use for the truck weight.
+    --
+    -- Default Value: @Kilograms@
+    unit :: Prelude.Maybe VehicleWeightUnit
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TruckWeight' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'total', 'truckWeight_total' - The total weight of the truck.
+--
+-- -   For example, @3500@.
+--
+-- 'unit', 'truckWeight_unit' - The unit of measurement to use for the truck weight.
+--
+-- Default Value: @Kilograms@
+newTruckWeight ::
+  TruckWeight
+newTruckWeight =
+  TruckWeight'
+    { total = Prelude.Nothing,
+      unit = Prelude.Nothing
+    }
+
+-- | The total weight of the truck.
+--
+-- -   For example, @3500@.
+truckWeight_total :: Lens.Lens' TruckWeight (Prelude.Maybe Prelude.Double)
+truckWeight_total = Lens.lens (\TruckWeight' {total} -> total) (\s@TruckWeight' {} a -> s {total = a} :: TruckWeight)
+
+-- | The unit of measurement to use for the truck weight.
+--
+-- Default Value: @Kilograms@
+truckWeight_unit :: Lens.Lens' TruckWeight (Prelude.Maybe VehicleWeightUnit)
+truckWeight_unit = Lens.lens (\TruckWeight' {unit} -> unit) (\s@TruckWeight' {} a -> s {unit = a} :: TruckWeight)
+
+instance Prelude.Hashable TruckWeight where
+  hashWithSalt _salt TruckWeight' {..} =
+    _salt
+      `Prelude.hashWithSalt` total
+      `Prelude.hashWithSalt` unit
+
+instance Prelude.NFData TruckWeight where
+  rnf TruckWeight' {..} =
+    Prelude.rnf total `Prelude.seq` Prelude.rnf unit
+
+instance Data.ToJSON TruckWeight where
+  toJSON TruckWeight' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Total" Data..=) Prelude.<$> total,
+            ("Unit" Data..=) Prelude.<$> unit
+          ]
+      )
diff --git a/gen/Amazonka/Location/Types/VehicleWeightUnit.hs b/gen/Amazonka/Location/Types/VehicleWeightUnit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/Types/VehicleWeightUnit.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.Location.Types.VehicleWeightUnit
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Location.Types.VehicleWeightUnit
+  ( VehicleWeightUnit
+      ( ..,
+        VehicleWeightUnit_Kilograms,
+        VehicleWeightUnit_Pounds
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VehicleWeightUnit = VehicleWeightUnit'
+  { fromVehicleWeightUnit ::
+      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 VehicleWeightUnit_Kilograms :: VehicleWeightUnit
+pattern VehicleWeightUnit_Kilograms = VehicleWeightUnit' "Kilograms"
+
+pattern VehicleWeightUnit_Pounds :: VehicleWeightUnit
+pattern VehicleWeightUnit_Pounds = VehicleWeightUnit' "Pounds"
+
+{-# COMPLETE
+  VehicleWeightUnit_Kilograms,
+  VehicleWeightUnit_Pounds,
+  VehicleWeightUnit'
+  #-}
diff --git a/gen/Amazonka/Location/UntagResource.hs b/gen/Amazonka/Location/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/UntagResource.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes one or more tags from the specified Amazon Location resource.
+module Amazonka.Location.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.Location.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 from which you want to
+    -- remove tags.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+    resourceArn :: Prelude.Text,
+    -- | The list of tag keys to remove from the specified resource.
+    tagKeys :: Prelude.NonEmpty 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 from which you want to
+-- remove tags.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The list of tag keys to remove from the specified resource.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource from which you want to
+-- remove tags.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:resourcetype\/ExampleResource@
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The list of tag keys to remove from the specified resource.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | 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/Location/UpdateGeofenceCollection.hs b/gen/Amazonka/Location/UpdateGeofenceCollection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/UpdateGeofenceCollection.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.UpdateGeofenceCollection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified properties of a given geofence collection.
+module Amazonka.Location.UpdateGeofenceCollection
+  ( -- * Creating a Request
+    UpdateGeofenceCollection (..),
+    newUpdateGeofenceCollection,
+
+    -- * Request Lenses
+    updateGeofenceCollection_description,
+    updateGeofenceCollection_pricingPlan,
+    updateGeofenceCollection_pricingPlanDataSource,
+    updateGeofenceCollection_collectionName,
+
+    -- * Destructuring the Response
+    UpdateGeofenceCollectionResponse (..),
+    newUpdateGeofenceCollectionResponse,
+
+    -- * Response Lenses
+    updateGeofenceCollectionResponse_httpStatus,
+    updateGeofenceCollectionResponse_collectionArn,
+    updateGeofenceCollectionResponse_collectionName,
+    updateGeofenceCollectionResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateGeofenceCollection' smart constructor.
+data UpdateGeofenceCollection = UpdateGeofenceCollection'
+  { -- | Updates the description for the geofence collection.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | This parameter is no longer used.
+    pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
+    -- | The name of the geofence collection to update.
+    collectionName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGeofenceCollection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateGeofenceCollection_description' - Updates the description for the geofence collection.
+--
+-- 'pricingPlan', 'updateGeofenceCollection_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'pricingPlanDataSource', 'updateGeofenceCollection_pricingPlanDataSource' - This parameter is no longer used.
+--
+-- 'collectionName', 'updateGeofenceCollection_collectionName' - The name of the geofence collection to update.
+newUpdateGeofenceCollection ::
+  -- | 'collectionName'
+  Prelude.Text ->
+  UpdateGeofenceCollection
+newUpdateGeofenceCollection pCollectionName_ =
+  UpdateGeofenceCollection'
+    { description =
+        Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      pricingPlanDataSource = Prelude.Nothing,
+      collectionName = pCollectionName_
+    }
+
+-- | Updates the description for the geofence collection.
+updateGeofenceCollection_description :: Lens.Lens' UpdateGeofenceCollection (Prelude.Maybe Prelude.Text)
+updateGeofenceCollection_description = Lens.lens (\UpdateGeofenceCollection' {description} -> description) (\s@UpdateGeofenceCollection' {} a -> s {description = a} :: UpdateGeofenceCollection)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+updateGeofenceCollection_pricingPlan :: Lens.Lens' UpdateGeofenceCollection (Prelude.Maybe PricingPlan)
+updateGeofenceCollection_pricingPlan = Lens.lens (\UpdateGeofenceCollection' {pricingPlan} -> pricingPlan) (\s@UpdateGeofenceCollection' {} a -> s {pricingPlan = a} :: UpdateGeofenceCollection)
+
+-- | This parameter is no longer used.
+updateGeofenceCollection_pricingPlanDataSource :: Lens.Lens' UpdateGeofenceCollection (Prelude.Maybe Prelude.Text)
+updateGeofenceCollection_pricingPlanDataSource = Lens.lens (\UpdateGeofenceCollection' {pricingPlanDataSource} -> pricingPlanDataSource) (\s@UpdateGeofenceCollection' {} a -> s {pricingPlanDataSource = a} :: UpdateGeofenceCollection)
+
+-- | The name of the geofence collection to update.
+updateGeofenceCollection_collectionName :: Lens.Lens' UpdateGeofenceCollection Prelude.Text
+updateGeofenceCollection_collectionName = Lens.lens (\UpdateGeofenceCollection' {collectionName} -> collectionName) (\s@UpdateGeofenceCollection' {} a -> s {collectionName = a} :: UpdateGeofenceCollection)
+
+instance Core.AWSRequest UpdateGeofenceCollection where
+  type
+    AWSResponse UpdateGeofenceCollection =
+      UpdateGeofenceCollectionResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateGeofenceCollectionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CollectionArn")
+            Prelude.<*> (x Data..:> "CollectionName")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable UpdateGeofenceCollection where
+  hashWithSalt _salt UpdateGeofenceCollection' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` pricingPlanDataSource
+      `Prelude.hashWithSalt` collectionName
+
+instance Prelude.NFData UpdateGeofenceCollection where
+  rnf UpdateGeofenceCollection' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf pricingPlanDataSource
+      `Prelude.seq` Prelude.rnf collectionName
+
+instance Data.ToHeaders UpdateGeofenceCollection where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateGeofenceCollection where
+  toJSON UpdateGeofenceCollection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan,
+            ("PricingPlanDataSource" Data..=)
+              Prelude.<$> pricingPlanDataSource
+          ]
+      )
+
+instance Data.ToPath UpdateGeofenceCollection where
+  toPath UpdateGeofenceCollection' {..} =
+    Prelude.mconcat
+      [ "/geofencing/v0/collections/",
+        Data.toBS collectionName
+      ]
+
+instance Data.ToQuery UpdateGeofenceCollection where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateGeofenceCollectionResponse' smart constructor.
+data UpdateGeofenceCollectionResponse = UpdateGeofenceCollectionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the updated geofence collection. Used
+    -- to specify a resource across AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+    collectionArn :: Prelude.Text,
+    -- | The name of the updated geofence collection.
+    collectionName :: Prelude.Text,
+    -- | The time when the geofence collection was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateGeofenceCollectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateGeofenceCollectionResponse_httpStatus' - The response's http status code.
+--
+-- 'collectionArn', 'updateGeofenceCollectionResponse_collectionArn' - The Amazon Resource Name (ARN) of the updated geofence collection. Used
+-- to specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+--
+-- 'collectionName', 'updateGeofenceCollectionResponse_collectionName' - The name of the updated geofence collection.
+--
+-- 'updateTime', 'updateGeofenceCollectionResponse_updateTime' - The time when the geofence collection was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+newUpdateGeofenceCollectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'collectionArn'
+  Prelude.Text ->
+  -- | 'collectionName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  UpdateGeofenceCollectionResponse
+newUpdateGeofenceCollectionResponse
+  pHttpStatus_
+  pCollectionArn_
+  pCollectionName_
+  pUpdateTime_ =
+    UpdateGeofenceCollectionResponse'
+      { httpStatus =
+          pHttpStatus_,
+        collectionArn = pCollectionArn_,
+        collectionName = pCollectionName_,
+        updateTime =
+          Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The response's http status code.
+updateGeofenceCollectionResponse_httpStatus :: Lens.Lens' UpdateGeofenceCollectionResponse Prelude.Int
+updateGeofenceCollectionResponse_httpStatus = Lens.lens (\UpdateGeofenceCollectionResponse' {httpStatus} -> httpStatus) (\s@UpdateGeofenceCollectionResponse' {} a -> s {httpStatus = a} :: UpdateGeofenceCollectionResponse)
+
+-- | The Amazon Resource Name (ARN) of the updated geofence collection. Used
+-- to specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:geofence-collection\/ExampleGeofenceCollection@
+updateGeofenceCollectionResponse_collectionArn :: Lens.Lens' UpdateGeofenceCollectionResponse Prelude.Text
+updateGeofenceCollectionResponse_collectionArn = Lens.lens (\UpdateGeofenceCollectionResponse' {collectionArn} -> collectionArn) (\s@UpdateGeofenceCollectionResponse' {} a -> s {collectionArn = a} :: UpdateGeofenceCollectionResponse)
+
+-- | The name of the updated geofence collection.
+updateGeofenceCollectionResponse_collectionName :: Lens.Lens' UpdateGeofenceCollectionResponse Prelude.Text
+updateGeofenceCollectionResponse_collectionName = Lens.lens (\UpdateGeofenceCollectionResponse' {collectionName} -> collectionName) (\s@UpdateGeofenceCollectionResponse' {} a -> s {collectionName = a} :: UpdateGeofenceCollectionResponse)
+
+-- | The time when the geofence collection was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@
+updateGeofenceCollectionResponse_updateTime :: Lens.Lens' UpdateGeofenceCollectionResponse Prelude.UTCTime
+updateGeofenceCollectionResponse_updateTime = Lens.lens (\UpdateGeofenceCollectionResponse' {updateTime} -> updateTime) (\s@UpdateGeofenceCollectionResponse' {} a -> s {updateTime = a} :: UpdateGeofenceCollectionResponse) Prelude.. Data._Time
+
+instance
+  Prelude.NFData
+    UpdateGeofenceCollectionResponse
+  where
+  rnf UpdateGeofenceCollectionResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf collectionArn
+      `Prelude.seq` Prelude.rnf collectionName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/UpdateMap.hs b/gen/Amazonka/Location/UpdateMap.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/UpdateMap.hs
@@ -0,0 +1,245 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.UpdateMap
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified properties of a given map resource.
+module Amazonka.Location.UpdateMap
+  ( -- * Creating a Request
+    UpdateMap (..),
+    newUpdateMap,
+
+    -- * Request Lenses
+    updateMap_description,
+    updateMap_pricingPlan,
+    updateMap_mapName,
+
+    -- * Destructuring the Response
+    UpdateMapResponse (..),
+    newUpdateMapResponse,
+
+    -- * Response Lenses
+    updateMapResponse_httpStatus,
+    updateMapResponse_mapArn,
+    updateMapResponse_mapName,
+    updateMapResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateMap' smart constructor.
+data UpdateMap = UpdateMap'
+  { -- | Updates the description for the map resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | The name of the map resource to update.
+    mapName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMap' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateMap_description' - Updates the description for the map resource.
+--
+-- 'pricingPlan', 'updateMap_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'mapName', 'updateMap_mapName' - The name of the map resource to update.
+newUpdateMap ::
+  -- | 'mapName'
+  Prelude.Text ->
+  UpdateMap
+newUpdateMap pMapName_ =
+  UpdateMap'
+    { description = Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      mapName = pMapName_
+    }
+
+-- | Updates the description for the map resource.
+updateMap_description :: Lens.Lens' UpdateMap (Prelude.Maybe Prelude.Text)
+updateMap_description = Lens.lens (\UpdateMap' {description} -> description) (\s@UpdateMap' {} a -> s {description = a} :: UpdateMap)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+updateMap_pricingPlan :: Lens.Lens' UpdateMap (Prelude.Maybe PricingPlan)
+updateMap_pricingPlan = Lens.lens (\UpdateMap' {pricingPlan} -> pricingPlan) (\s@UpdateMap' {} a -> s {pricingPlan = a} :: UpdateMap)
+
+-- | The name of the map resource to update.
+updateMap_mapName :: Lens.Lens' UpdateMap Prelude.Text
+updateMap_mapName = Lens.lens (\UpdateMap' {mapName} -> mapName) (\s@UpdateMap' {} a -> s {mapName = a} :: UpdateMap)
+
+instance Core.AWSRequest UpdateMap where
+  type AWSResponse UpdateMap = UpdateMapResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateMapResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "MapArn")
+            Prelude.<*> (x Data..:> "MapName")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable UpdateMap where
+  hashWithSalt _salt UpdateMap' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` mapName
+
+instance Prelude.NFData UpdateMap where
+  rnf UpdateMap' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf mapName
+
+instance Data.ToHeaders UpdateMap where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateMap where
+  toJSON UpdateMap' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan
+          ]
+      )
+
+instance Data.ToPath UpdateMap where
+  toPath UpdateMap' {..} =
+    Prelude.mconcat
+      ["/maps/v0/maps/", Data.toBS mapName]
+
+instance Data.ToQuery UpdateMap where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateMapResponse' smart constructor.
+data UpdateMapResponse = UpdateMapResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the updated map resource. Used to
+    -- specify a resource across AWS.
+    --
+    -- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+    mapArn :: Prelude.Text,
+    -- | The name of the updated map resource.
+    mapName :: Prelude.Text,
+    -- | The timestamp for when the map resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateMapResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateMapResponse_httpStatus' - The response's http status code.
+--
+-- 'mapArn', 'updateMapResponse_mapArn' - The Amazon Resource Name (ARN) of the updated map resource. Used to
+-- specify a resource across AWS.
+--
+-- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+--
+-- 'mapName', 'updateMapResponse_mapName' - The name of the updated map resource.
+--
+-- 'updateTime', 'updateMapResponse_updateTime' - The timestamp for when the map resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newUpdateMapResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'mapArn'
+  Prelude.Text ->
+  -- | 'mapName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  UpdateMapResponse
+newUpdateMapResponse
+  pHttpStatus_
+  pMapArn_
+  pMapName_
+  pUpdateTime_ =
+    UpdateMapResponse'
+      { httpStatus = pHttpStatus_,
+        mapArn = pMapArn_,
+        mapName = pMapName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The response's http status code.
+updateMapResponse_httpStatus :: Lens.Lens' UpdateMapResponse Prelude.Int
+updateMapResponse_httpStatus = Lens.lens (\UpdateMapResponse' {httpStatus} -> httpStatus) (\s@UpdateMapResponse' {} a -> s {httpStatus = a} :: UpdateMapResponse)
+
+-- | The Amazon Resource Name (ARN) of the updated map resource. Used to
+-- specify a resource across AWS.
+--
+-- -   Format example: @arn:aws:geo:region:account-id:map\/ExampleMap@
+updateMapResponse_mapArn :: Lens.Lens' UpdateMapResponse Prelude.Text
+updateMapResponse_mapArn = Lens.lens (\UpdateMapResponse' {mapArn} -> mapArn) (\s@UpdateMapResponse' {} a -> s {mapArn = a} :: UpdateMapResponse)
+
+-- | The name of the updated map resource.
+updateMapResponse_mapName :: Lens.Lens' UpdateMapResponse Prelude.Text
+updateMapResponse_mapName = Lens.lens (\UpdateMapResponse' {mapName} -> mapName) (\s@UpdateMapResponse' {} a -> s {mapName = a} :: UpdateMapResponse)
+
+-- | The timestamp for when the map resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+updateMapResponse_updateTime :: Lens.Lens' UpdateMapResponse Prelude.UTCTime
+updateMapResponse_updateTime = Lens.lens (\UpdateMapResponse' {updateTime} -> updateTime) (\s@UpdateMapResponse' {} a -> s {updateTime = a} :: UpdateMapResponse) Prelude.. Data._Time
+
+instance Prelude.NFData UpdateMapResponse where
+  rnf UpdateMapResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf mapArn
+      `Prelude.seq` Prelude.rnf mapName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/UpdatePlaceIndex.hs b/gen/Amazonka/Location/UpdatePlaceIndex.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/UpdatePlaceIndex.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.UpdatePlaceIndex
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified properties of a given place index resource.
+module Amazonka.Location.UpdatePlaceIndex
+  ( -- * Creating a Request
+    UpdatePlaceIndex (..),
+    newUpdatePlaceIndex,
+
+    -- * Request Lenses
+    updatePlaceIndex_dataSourceConfiguration,
+    updatePlaceIndex_description,
+    updatePlaceIndex_pricingPlan,
+    updatePlaceIndex_indexName,
+
+    -- * Destructuring the Response
+    UpdatePlaceIndexResponse (..),
+    newUpdatePlaceIndexResponse,
+
+    -- * Response Lenses
+    updatePlaceIndexResponse_httpStatus,
+    updatePlaceIndexResponse_indexArn,
+    updatePlaceIndexResponse_indexName,
+    updatePlaceIndexResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdatePlaceIndex' smart constructor.
+data UpdatePlaceIndex = UpdatePlaceIndex'
+  { -- | Updates the data storage option for the place index resource.
+    dataSourceConfiguration :: Prelude.Maybe DataSourceConfiguration,
+    -- | Updates the description for the place index resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | The name of the place index resource to update.
+    indexName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdatePlaceIndex' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceConfiguration', 'updatePlaceIndex_dataSourceConfiguration' - Updates the data storage option for the place index resource.
+--
+-- 'description', 'updatePlaceIndex_description' - Updates the description for the place index resource.
+--
+-- 'pricingPlan', 'updatePlaceIndex_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'indexName', 'updatePlaceIndex_indexName' - The name of the place index resource to update.
+newUpdatePlaceIndex ::
+  -- | 'indexName'
+  Prelude.Text ->
+  UpdatePlaceIndex
+newUpdatePlaceIndex pIndexName_ =
+  UpdatePlaceIndex'
+    { dataSourceConfiguration =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      indexName = pIndexName_
+    }
+
+-- | Updates the data storage option for the place index resource.
+updatePlaceIndex_dataSourceConfiguration :: Lens.Lens' UpdatePlaceIndex (Prelude.Maybe DataSourceConfiguration)
+updatePlaceIndex_dataSourceConfiguration = Lens.lens (\UpdatePlaceIndex' {dataSourceConfiguration} -> dataSourceConfiguration) (\s@UpdatePlaceIndex' {} a -> s {dataSourceConfiguration = a} :: UpdatePlaceIndex)
+
+-- | Updates the description for the place index resource.
+updatePlaceIndex_description :: Lens.Lens' UpdatePlaceIndex (Prelude.Maybe Prelude.Text)
+updatePlaceIndex_description = Lens.lens (\UpdatePlaceIndex' {description} -> description) (\s@UpdatePlaceIndex' {} a -> s {description = a} :: UpdatePlaceIndex)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+updatePlaceIndex_pricingPlan :: Lens.Lens' UpdatePlaceIndex (Prelude.Maybe PricingPlan)
+updatePlaceIndex_pricingPlan = Lens.lens (\UpdatePlaceIndex' {pricingPlan} -> pricingPlan) (\s@UpdatePlaceIndex' {} a -> s {pricingPlan = a} :: UpdatePlaceIndex)
+
+-- | The name of the place index resource to update.
+updatePlaceIndex_indexName :: Lens.Lens' UpdatePlaceIndex Prelude.Text
+updatePlaceIndex_indexName = Lens.lens (\UpdatePlaceIndex' {indexName} -> indexName) (\s@UpdatePlaceIndex' {} a -> s {indexName = a} :: UpdatePlaceIndex)
+
+instance Core.AWSRequest UpdatePlaceIndex where
+  type
+    AWSResponse UpdatePlaceIndex =
+      UpdatePlaceIndexResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdatePlaceIndexResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "IndexArn")
+            Prelude.<*> (x Data..:> "IndexName")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable UpdatePlaceIndex where
+  hashWithSalt _salt UpdatePlaceIndex' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceConfiguration
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` indexName
+
+instance Prelude.NFData UpdatePlaceIndex where
+  rnf UpdatePlaceIndex' {..} =
+    Prelude.rnf dataSourceConfiguration
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf indexName
+
+instance Data.ToHeaders UpdatePlaceIndex where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdatePlaceIndex where
+  toJSON UpdatePlaceIndex' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSourceConfiguration" Data..=)
+              Prelude.<$> dataSourceConfiguration,
+            ("Description" Data..=) Prelude.<$> description,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan
+          ]
+      )
+
+instance Data.ToPath UpdatePlaceIndex where
+  toPath UpdatePlaceIndex' {..} =
+    Prelude.mconcat
+      ["/places/v0/indexes/", Data.toBS indexName]
+
+instance Data.ToQuery UpdatePlaceIndex where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdatePlaceIndexResponse' smart constructor.
+data UpdatePlaceIndexResponse = UpdatePlaceIndexResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the upated place index resource. Used
+    -- to specify a resource across AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:place- index\/ExamplePlaceIndex@
+    indexArn :: Prelude.Text,
+    -- | The name of the updated place index resource.
+    indexName :: Prelude.Text,
+    -- | The timestamp for when the place index resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdatePlaceIndexResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updatePlaceIndexResponse_httpStatus' - The response's http status code.
+--
+-- 'indexArn', 'updatePlaceIndexResponse_indexArn' - The Amazon Resource Name (ARN) of the upated place index resource. Used
+-- to specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:place- index\/ExamplePlaceIndex@
+--
+-- 'indexName', 'updatePlaceIndexResponse_indexName' - The name of the updated place index resource.
+--
+-- 'updateTime', 'updatePlaceIndexResponse_updateTime' - The timestamp for when the place index resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newUpdatePlaceIndexResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'indexArn'
+  Prelude.Text ->
+  -- | 'indexName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  UpdatePlaceIndexResponse
+newUpdatePlaceIndexResponse
+  pHttpStatus_
+  pIndexArn_
+  pIndexName_
+  pUpdateTime_ =
+    UpdatePlaceIndexResponse'
+      { httpStatus =
+          pHttpStatus_,
+        indexArn = pIndexArn_,
+        indexName = pIndexName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The response's http status code.
+updatePlaceIndexResponse_httpStatus :: Lens.Lens' UpdatePlaceIndexResponse Prelude.Int
+updatePlaceIndexResponse_httpStatus = Lens.lens (\UpdatePlaceIndexResponse' {httpStatus} -> httpStatus) (\s@UpdatePlaceIndexResponse' {} a -> s {httpStatus = a} :: UpdatePlaceIndexResponse)
+
+-- | The Amazon Resource Name (ARN) of the upated place index resource. Used
+-- to specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:place- index\/ExamplePlaceIndex@
+updatePlaceIndexResponse_indexArn :: Lens.Lens' UpdatePlaceIndexResponse Prelude.Text
+updatePlaceIndexResponse_indexArn = Lens.lens (\UpdatePlaceIndexResponse' {indexArn} -> indexArn) (\s@UpdatePlaceIndexResponse' {} a -> s {indexArn = a} :: UpdatePlaceIndexResponse)
+
+-- | The name of the updated place index resource.
+updatePlaceIndexResponse_indexName :: Lens.Lens' UpdatePlaceIndexResponse Prelude.Text
+updatePlaceIndexResponse_indexName = Lens.lens (\UpdatePlaceIndexResponse' {indexName} -> indexName) (\s@UpdatePlaceIndexResponse' {} a -> s {indexName = a} :: UpdatePlaceIndexResponse)
+
+-- | The timestamp for when the place index resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+updatePlaceIndexResponse_updateTime :: Lens.Lens' UpdatePlaceIndexResponse Prelude.UTCTime
+updatePlaceIndexResponse_updateTime = Lens.lens (\UpdatePlaceIndexResponse' {updateTime} -> updateTime) (\s@UpdatePlaceIndexResponse' {} a -> s {updateTime = a} :: UpdatePlaceIndexResponse) Prelude.. Data._Time
+
+instance Prelude.NFData UpdatePlaceIndexResponse where
+  rnf UpdatePlaceIndexResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf indexArn
+      `Prelude.seq` Prelude.rnf indexName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/UpdateRouteCalculator.hs b/gen/Amazonka/Location/UpdateRouteCalculator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/UpdateRouteCalculator.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.Location.UpdateRouteCalculator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified properties for a given route calculator resource.
+module Amazonka.Location.UpdateRouteCalculator
+  ( -- * Creating a Request
+    UpdateRouteCalculator (..),
+    newUpdateRouteCalculator,
+
+    -- * Request Lenses
+    updateRouteCalculator_description,
+    updateRouteCalculator_pricingPlan,
+    updateRouteCalculator_calculatorName,
+
+    -- * Destructuring the Response
+    UpdateRouteCalculatorResponse (..),
+    newUpdateRouteCalculatorResponse,
+
+    -- * Response Lenses
+    updateRouteCalculatorResponse_httpStatus,
+    updateRouteCalculatorResponse_calculatorArn,
+    updateRouteCalculatorResponse_calculatorName,
+    updateRouteCalculatorResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateRouteCalculator' smart constructor.
+data UpdateRouteCalculator = UpdateRouteCalculator'
+  { -- | Updates the description for the route calculator resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | The name of the route calculator resource to update.
+    calculatorName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRouteCalculator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateRouteCalculator_description' - Updates the description for the route calculator resource.
+--
+-- 'pricingPlan', 'updateRouteCalculator_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'calculatorName', 'updateRouteCalculator_calculatorName' - The name of the route calculator resource to update.
+newUpdateRouteCalculator ::
+  -- | 'calculatorName'
+  Prelude.Text ->
+  UpdateRouteCalculator
+newUpdateRouteCalculator pCalculatorName_ =
+  UpdateRouteCalculator'
+    { description =
+        Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      calculatorName = pCalculatorName_
+    }
+
+-- | Updates the description for the route calculator resource.
+updateRouteCalculator_description :: Lens.Lens' UpdateRouteCalculator (Prelude.Maybe Prelude.Text)
+updateRouteCalculator_description = Lens.lens (\UpdateRouteCalculator' {description} -> description) (\s@UpdateRouteCalculator' {} a -> s {description = a} :: UpdateRouteCalculator)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+updateRouteCalculator_pricingPlan :: Lens.Lens' UpdateRouteCalculator (Prelude.Maybe PricingPlan)
+updateRouteCalculator_pricingPlan = Lens.lens (\UpdateRouteCalculator' {pricingPlan} -> pricingPlan) (\s@UpdateRouteCalculator' {} a -> s {pricingPlan = a} :: UpdateRouteCalculator)
+
+-- | The name of the route calculator resource to update.
+updateRouteCalculator_calculatorName :: Lens.Lens' UpdateRouteCalculator Prelude.Text
+updateRouteCalculator_calculatorName = Lens.lens (\UpdateRouteCalculator' {calculatorName} -> calculatorName) (\s@UpdateRouteCalculator' {} a -> s {calculatorName = a} :: UpdateRouteCalculator)
+
+instance Core.AWSRequest UpdateRouteCalculator where
+  type
+    AWSResponse UpdateRouteCalculator =
+      UpdateRouteCalculatorResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateRouteCalculatorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "CalculatorArn")
+            Prelude.<*> (x Data..:> "CalculatorName")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable UpdateRouteCalculator where
+  hashWithSalt _salt UpdateRouteCalculator' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` calculatorName
+
+instance Prelude.NFData UpdateRouteCalculator where
+  rnf UpdateRouteCalculator' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf calculatorName
+
+instance Data.ToHeaders UpdateRouteCalculator where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateRouteCalculator where
+  toJSON UpdateRouteCalculator' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan
+          ]
+      )
+
+instance Data.ToPath UpdateRouteCalculator where
+  toPath UpdateRouteCalculator' {..} =
+    Prelude.mconcat
+      ["/routes/v0/calculators/", Data.toBS calculatorName]
+
+instance Data.ToQuery UpdateRouteCalculator where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateRouteCalculatorResponse' smart constructor.
+data UpdateRouteCalculatorResponse = UpdateRouteCalculatorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the updated route calculator resource.
+    -- Used to specify a resource across AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:route- calculator\/ExampleCalculator@
+    calculatorArn :: Prelude.Text,
+    -- | The name of the updated route calculator resource.
+    calculatorName :: Prelude.Text,
+    -- | The timestamp for when the route calculator was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateRouteCalculatorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateRouteCalculatorResponse_httpStatus' - The response's http status code.
+--
+-- 'calculatorArn', 'updateRouteCalculatorResponse_calculatorArn' - The Amazon Resource Name (ARN) of the updated route calculator resource.
+-- Used to specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:route- calculator\/ExampleCalculator@
+--
+-- 'calculatorName', 'updateRouteCalculatorResponse_calculatorName' - The name of the updated route calculator resource.
+--
+-- 'updateTime', 'updateRouteCalculatorResponse_updateTime' - The timestamp for when the route calculator was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newUpdateRouteCalculatorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'calculatorArn'
+  Prelude.Text ->
+  -- | 'calculatorName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  UpdateRouteCalculatorResponse
+newUpdateRouteCalculatorResponse
+  pHttpStatus_
+  pCalculatorArn_
+  pCalculatorName_
+  pUpdateTime_ =
+    UpdateRouteCalculatorResponse'
+      { httpStatus =
+          pHttpStatus_,
+        calculatorArn = pCalculatorArn_,
+        calculatorName = pCalculatorName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The response's http status code.
+updateRouteCalculatorResponse_httpStatus :: Lens.Lens' UpdateRouteCalculatorResponse Prelude.Int
+updateRouteCalculatorResponse_httpStatus = Lens.lens (\UpdateRouteCalculatorResponse' {httpStatus} -> httpStatus) (\s@UpdateRouteCalculatorResponse' {} a -> s {httpStatus = a} :: UpdateRouteCalculatorResponse)
+
+-- | The Amazon Resource Name (ARN) of the updated route calculator resource.
+-- Used to specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:route- calculator\/ExampleCalculator@
+updateRouteCalculatorResponse_calculatorArn :: Lens.Lens' UpdateRouteCalculatorResponse Prelude.Text
+updateRouteCalculatorResponse_calculatorArn = Lens.lens (\UpdateRouteCalculatorResponse' {calculatorArn} -> calculatorArn) (\s@UpdateRouteCalculatorResponse' {} a -> s {calculatorArn = a} :: UpdateRouteCalculatorResponse)
+
+-- | The name of the updated route calculator resource.
+updateRouteCalculatorResponse_calculatorName :: Lens.Lens' UpdateRouteCalculatorResponse Prelude.Text
+updateRouteCalculatorResponse_calculatorName = Lens.lens (\UpdateRouteCalculatorResponse' {calculatorName} -> calculatorName) (\s@UpdateRouteCalculatorResponse' {} a -> s {calculatorName = a} :: UpdateRouteCalculatorResponse)
+
+-- | The timestamp for when the route calculator was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+updateRouteCalculatorResponse_updateTime :: Lens.Lens' UpdateRouteCalculatorResponse Prelude.UTCTime
+updateRouteCalculatorResponse_updateTime = Lens.lens (\UpdateRouteCalculatorResponse' {updateTime} -> updateTime) (\s@UpdateRouteCalculatorResponse' {} a -> s {updateTime = a} :: UpdateRouteCalculatorResponse) Prelude.. Data._Time
+
+instance Prelude.NFData UpdateRouteCalculatorResponse where
+  rnf UpdateRouteCalculatorResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf calculatorArn
+      `Prelude.seq` Prelude.rnf calculatorName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/UpdateTracker.hs b/gen/Amazonka/Location/UpdateTracker.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/UpdateTracker.hs
@@ -0,0 +1,353 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Location.UpdateTracker
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified properties of a given tracker resource.
+module Amazonka.Location.UpdateTracker
+  ( -- * Creating a Request
+    UpdateTracker (..),
+    newUpdateTracker,
+
+    -- * Request Lenses
+    updateTracker_description,
+    updateTracker_positionFiltering,
+    updateTracker_pricingPlan,
+    updateTracker_pricingPlanDataSource,
+    updateTracker_trackerName,
+
+    -- * Destructuring the Response
+    UpdateTrackerResponse (..),
+    newUpdateTrackerResponse,
+
+    -- * Response Lenses
+    updateTrackerResponse_httpStatus,
+    updateTrackerResponse_trackerArn,
+    updateTrackerResponse_trackerName,
+    updateTrackerResponse_updateTime,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateTracker' smart constructor.
+data UpdateTracker = UpdateTracker'
+  { -- | Updates the description for the tracker resource.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Updates the position filtering for the tracker resource.
+    --
+    -- Valid values:
+    --
+    -- -   @TimeBased@ - Location updates are evaluated against linked geofence
+    --     collections, but not every location update is stored. If your update
+    --     frequency is more often than 30 seconds, only one update per 30
+    --     seconds is stored for each unique device ID.
+    --
+    -- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
+    --     location updates are ignored. Location updates within this distance
+    --     are neither evaluated against linked geofence collections, nor
+    --     stored. This helps control costs by reducing the number of geofence
+    --     evaluations and historical device positions to paginate through.
+    --     Distance-based filtering can also reduce the effects of GPS noise
+    --     when displaying device trajectories on a map.
+    --
+    -- -   @AccuracyBased@ - If the device has moved less than the measured
+    --     accuracy, location updates are ignored. For example, if two
+    --     consecutive updates from a device have a horizontal accuracy of 5 m
+    --     and 10 m, the second update is ignored if the device has moved less
+    --     than 15 m. Ignored location updates are neither evaluated against
+    --     linked geofence collections, nor stored. This helps educe the
+    --     effects of GPS noise when displaying device trajectories on a map,
+    --     and can help control costs by reducing the number of geofence
+    --     evaluations.
+    positionFiltering :: Prelude.Maybe PositionFiltering,
+    -- | No longer used. If included, the only allowed value is
+    -- @RequestBasedUsage@.
+    pricingPlan :: Prelude.Maybe PricingPlan,
+    -- | This parameter is no longer used.
+    pricingPlanDataSource :: Prelude.Maybe Prelude.Text,
+    -- | The name of the tracker resource to update.
+    trackerName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTracker' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateTracker_description' - Updates the description for the tracker resource.
+--
+-- 'positionFiltering', 'updateTracker_positionFiltering' - Updates the position filtering for the tracker resource.
+--
+-- Valid values:
+--
+-- -   @TimeBased@ - Location updates are evaluated against linked geofence
+--     collections, but not every location update is stored. If your update
+--     frequency is more often than 30 seconds, only one update per 30
+--     seconds is stored for each unique device ID.
+--
+-- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
+--     location updates are ignored. Location updates within this distance
+--     are neither evaluated against linked geofence collections, nor
+--     stored. This helps control costs by reducing the number of geofence
+--     evaluations and historical device positions to paginate through.
+--     Distance-based filtering can also reduce the effects of GPS noise
+--     when displaying device trajectories on a map.
+--
+-- -   @AccuracyBased@ - If the device has moved less than the measured
+--     accuracy, location updates are ignored. For example, if two
+--     consecutive updates from a device have a horizontal accuracy of 5 m
+--     and 10 m, the second update is ignored if the device has moved less
+--     than 15 m. Ignored location updates are neither evaluated against
+--     linked geofence collections, nor stored. This helps educe the
+--     effects of GPS noise when displaying device trajectories on a map,
+--     and can help control costs by reducing the number of geofence
+--     evaluations.
+--
+-- 'pricingPlan', 'updateTracker_pricingPlan' - No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+--
+-- 'pricingPlanDataSource', 'updateTracker_pricingPlanDataSource' - This parameter is no longer used.
+--
+-- 'trackerName', 'updateTracker_trackerName' - The name of the tracker resource to update.
+newUpdateTracker ::
+  -- | 'trackerName'
+  Prelude.Text ->
+  UpdateTracker
+newUpdateTracker pTrackerName_ =
+  UpdateTracker'
+    { description = Prelude.Nothing,
+      positionFiltering = Prelude.Nothing,
+      pricingPlan = Prelude.Nothing,
+      pricingPlanDataSource = Prelude.Nothing,
+      trackerName = pTrackerName_
+    }
+
+-- | Updates the description for the tracker resource.
+updateTracker_description :: Lens.Lens' UpdateTracker (Prelude.Maybe Prelude.Text)
+updateTracker_description = Lens.lens (\UpdateTracker' {description} -> description) (\s@UpdateTracker' {} a -> s {description = a} :: UpdateTracker)
+
+-- | Updates the position filtering for the tracker resource.
+--
+-- Valid values:
+--
+-- -   @TimeBased@ - Location updates are evaluated against linked geofence
+--     collections, but not every location update is stored. If your update
+--     frequency is more often than 30 seconds, only one update per 30
+--     seconds is stored for each unique device ID.
+--
+-- -   @DistanceBased@ - If the device has moved less than 30 m (98.4 ft),
+--     location updates are ignored. Location updates within this distance
+--     are neither evaluated against linked geofence collections, nor
+--     stored. This helps control costs by reducing the number of geofence
+--     evaluations and historical device positions to paginate through.
+--     Distance-based filtering can also reduce the effects of GPS noise
+--     when displaying device trajectories on a map.
+--
+-- -   @AccuracyBased@ - If the device has moved less than the measured
+--     accuracy, location updates are ignored. For example, if two
+--     consecutive updates from a device have a horizontal accuracy of 5 m
+--     and 10 m, the second update is ignored if the device has moved less
+--     than 15 m. Ignored location updates are neither evaluated against
+--     linked geofence collections, nor stored. This helps educe the
+--     effects of GPS noise when displaying device trajectories on a map,
+--     and can help control costs by reducing the number of geofence
+--     evaluations.
+updateTracker_positionFiltering :: Lens.Lens' UpdateTracker (Prelude.Maybe PositionFiltering)
+updateTracker_positionFiltering = Lens.lens (\UpdateTracker' {positionFiltering} -> positionFiltering) (\s@UpdateTracker' {} a -> s {positionFiltering = a} :: UpdateTracker)
+
+-- | No longer used. If included, the only allowed value is
+-- @RequestBasedUsage@.
+updateTracker_pricingPlan :: Lens.Lens' UpdateTracker (Prelude.Maybe PricingPlan)
+updateTracker_pricingPlan = Lens.lens (\UpdateTracker' {pricingPlan} -> pricingPlan) (\s@UpdateTracker' {} a -> s {pricingPlan = a} :: UpdateTracker)
+
+-- | This parameter is no longer used.
+updateTracker_pricingPlanDataSource :: Lens.Lens' UpdateTracker (Prelude.Maybe Prelude.Text)
+updateTracker_pricingPlanDataSource = Lens.lens (\UpdateTracker' {pricingPlanDataSource} -> pricingPlanDataSource) (\s@UpdateTracker' {} a -> s {pricingPlanDataSource = a} :: UpdateTracker)
+
+-- | The name of the tracker resource to update.
+updateTracker_trackerName :: Lens.Lens' UpdateTracker Prelude.Text
+updateTracker_trackerName = Lens.lens (\UpdateTracker' {trackerName} -> trackerName) (\s@UpdateTracker' {} a -> s {trackerName = a} :: UpdateTracker)
+
+instance Core.AWSRequest UpdateTracker where
+  type
+    AWSResponse UpdateTracker =
+      UpdateTrackerResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateTrackerResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "TrackerArn")
+            Prelude.<*> (x Data..:> "TrackerName")
+            Prelude.<*> (x Data..:> "UpdateTime")
+      )
+
+instance Prelude.Hashable UpdateTracker where
+  hashWithSalt _salt UpdateTracker' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` positionFiltering
+      `Prelude.hashWithSalt` pricingPlan
+      `Prelude.hashWithSalt` pricingPlanDataSource
+      `Prelude.hashWithSalt` trackerName
+
+instance Prelude.NFData UpdateTracker where
+  rnf UpdateTracker' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf positionFiltering
+      `Prelude.seq` Prelude.rnf pricingPlan
+      `Prelude.seq` Prelude.rnf pricingPlanDataSource
+      `Prelude.seq` Prelude.rnf trackerName
+
+instance Data.ToHeaders UpdateTracker where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateTracker where
+  toJSON UpdateTracker' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("PositionFiltering" Data..=)
+              Prelude.<$> positionFiltering,
+            ("PricingPlan" Data..=) Prelude.<$> pricingPlan,
+            ("PricingPlanDataSource" Data..=)
+              Prelude.<$> pricingPlanDataSource
+          ]
+      )
+
+instance Data.ToPath UpdateTracker where
+  toPath UpdateTracker' {..} =
+    Prelude.mconcat
+      ["/tracking/v0/trackers/", Data.toBS trackerName]
+
+instance Data.ToQuery UpdateTracker where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateTrackerResponse' smart constructor.
+data UpdateTrackerResponse = UpdateTrackerResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the updated tracker resource. Used to
+    -- specify a resource across AWS.
+    --
+    -- -   Format example:
+    --     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+    trackerArn :: Prelude.Text,
+    -- | The name of the updated tracker resource.
+    trackerName :: Prelude.Text,
+    -- | The timestamp for when the tracker resource was last updated in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+    -- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTrackerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateTrackerResponse_httpStatus' - The response's http status code.
+--
+-- 'trackerArn', 'updateTrackerResponse_trackerArn' - The Amazon Resource Name (ARN) of the updated tracker resource. Used to
+-- specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+--
+-- 'trackerName', 'updateTrackerResponse_trackerName' - The name of the updated tracker resource.
+--
+-- 'updateTime', 'updateTrackerResponse_updateTime' - The timestamp for when the tracker resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+newUpdateTrackerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'trackerArn'
+  Prelude.Text ->
+  -- | 'trackerName'
+  Prelude.Text ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  UpdateTrackerResponse
+newUpdateTrackerResponse
+  pHttpStatus_
+  pTrackerArn_
+  pTrackerName_
+  pUpdateTime_ =
+    UpdateTrackerResponse'
+      { httpStatus = pHttpStatus_,
+        trackerArn = pTrackerArn_,
+        trackerName = pTrackerName_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | The response's http status code.
+updateTrackerResponse_httpStatus :: Lens.Lens' UpdateTrackerResponse Prelude.Int
+updateTrackerResponse_httpStatus = Lens.lens (\UpdateTrackerResponse' {httpStatus} -> httpStatus) (\s@UpdateTrackerResponse' {} a -> s {httpStatus = a} :: UpdateTrackerResponse)
+
+-- | The Amazon Resource Name (ARN) of the updated tracker resource. Used to
+-- specify a resource across AWS.
+--
+-- -   Format example:
+--     @arn:aws:geo:region:account-id:tracker\/ExampleTracker@
+updateTrackerResponse_trackerArn :: Lens.Lens' UpdateTrackerResponse Prelude.Text
+updateTrackerResponse_trackerArn = Lens.lens (\UpdateTrackerResponse' {trackerArn} -> trackerArn) (\s@UpdateTrackerResponse' {} a -> s {trackerArn = a} :: UpdateTrackerResponse)
+
+-- | The name of the updated tracker resource.
+updateTrackerResponse_trackerName :: Lens.Lens' UpdateTrackerResponse Prelude.Text
+updateTrackerResponse_trackerName = Lens.lens (\UpdateTrackerResponse' {trackerName} -> trackerName) (\s@UpdateTrackerResponse' {} a -> s {trackerName = a} :: UpdateTrackerResponse)
+
+-- | The timestamp for when the tracker resource was last updated in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601>
+-- format: @YYYY-MM-DDThh:mm:ss.sssZ@.
+updateTrackerResponse_updateTime :: Lens.Lens' UpdateTrackerResponse Prelude.UTCTime
+updateTrackerResponse_updateTime = Lens.lens (\UpdateTrackerResponse' {updateTime} -> updateTime) (\s@UpdateTrackerResponse' {} a -> s {updateTime = a} :: UpdateTrackerResponse) Prelude.. Data._Time
+
+instance Prelude.NFData UpdateTrackerResponse where
+  rnf UpdateTrackerResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf trackerArn
+      `Prelude.seq` Prelude.rnf trackerName
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/Location/Waiters.hs b/gen/Amazonka/Location/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Location/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.Location.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.Location.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Location.Lens
+import Amazonka.Location.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.Location
+import Test.Amazonka.Location.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "Location"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/Location.hs b/test/Test/Amazonka/Gen/Location.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Location.hs
@@ -0,0 +1,1098 @@
+{-# 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.Location
+-- Copyright   : (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.Location where
+
+import Amazonka.Location
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Location.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"
+--         [ requestAssociateTrackerConsumer $
+--             newAssociateTrackerConsumer
+--
+--         , requestBatchDeleteDevicePositionHistory $
+--             newBatchDeleteDevicePositionHistory
+--
+--         , requestBatchDeleteGeofence $
+--             newBatchDeleteGeofence
+--
+--         , requestBatchEvaluateGeofences $
+--             newBatchEvaluateGeofences
+--
+--         , requestBatchGetDevicePosition $
+--             newBatchGetDevicePosition
+--
+--         , requestBatchPutGeofence $
+--             newBatchPutGeofence
+--
+--         , requestBatchUpdateDevicePosition $
+--             newBatchUpdateDevicePosition
+--
+--         , requestCalculateRoute $
+--             newCalculateRoute
+--
+--         , requestCalculateRouteMatrix $
+--             newCalculateRouteMatrix
+--
+--         , requestCreateGeofenceCollection $
+--             newCreateGeofenceCollection
+--
+--         , requestCreateMap $
+--             newCreateMap
+--
+--         , requestCreatePlaceIndex $
+--             newCreatePlaceIndex
+--
+--         , requestCreateRouteCalculator $
+--             newCreateRouteCalculator
+--
+--         , requestCreateTracker $
+--             newCreateTracker
+--
+--         , requestDeleteGeofenceCollection $
+--             newDeleteGeofenceCollection
+--
+--         , requestDeleteMap $
+--             newDeleteMap
+--
+--         , requestDeletePlaceIndex $
+--             newDeletePlaceIndex
+--
+--         , requestDeleteRouteCalculator $
+--             newDeleteRouteCalculator
+--
+--         , requestDeleteTracker $
+--             newDeleteTracker
+--
+--         , requestDescribeGeofenceCollection $
+--             newDescribeGeofenceCollection
+--
+--         , requestDescribeMap $
+--             newDescribeMap
+--
+--         , requestDescribePlaceIndex $
+--             newDescribePlaceIndex
+--
+--         , requestDescribeRouteCalculator $
+--             newDescribeRouteCalculator
+--
+--         , requestDescribeTracker $
+--             newDescribeTracker
+--
+--         , requestDisassociateTrackerConsumer $
+--             newDisassociateTrackerConsumer
+--
+--         , requestGetDevicePosition $
+--             newGetDevicePosition
+--
+--         , requestGetDevicePositionHistory $
+--             newGetDevicePositionHistory
+--
+--         , requestGetGeofence $
+--             newGetGeofence
+--
+--         , requestGetMapGlyphs $
+--             newGetMapGlyphs
+--
+--         , requestGetMapSprites $
+--             newGetMapSprites
+--
+--         , requestGetMapStyleDescriptor $
+--             newGetMapStyleDescriptor
+--
+--         , requestGetMapTile $
+--             newGetMapTile
+--
+--         , requestGetPlace $
+--             newGetPlace
+--
+--         , requestListDevicePositions $
+--             newListDevicePositions
+--
+--         , requestListGeofenceCollections $
+--             newListGeofenceCollections
+--
+--         , requestListGeofences $
+--             newListGeofences
+--
+--         , requestListMaps $
+--             newListMaps
+--
+--         , requestListPlaceIndexes $
+--             newListPlaceIndexes
+--
+--         , requestListRouteCalculators $
+--             newListRouteCalculators
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListTrackerConsumers $
+--             newListTrackerConsumers
+--
+--         , requestListTrackers $
+--             newListTrackers
+--
+--         , requestPutGeofence $
+--             newPutGeofence
+--
+--         , requestSearchPlaceIndexForPosition $
+--             newSearchPlaceIndexForPosition
+--
+--         , requestSearchPlaceIndexForSuggestions $
+--             newSearchPlaceIndexForSuggestions
+--
+--         , requestSearchPlaceIndexForText $
+--             newSearchPlaceIndexForText
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateGeofenceCollection $
+--             newUpdateGeofenceCollection
+--
+--         , requestUpdateMap $
+--             newUpdateMap
+--
+--         , requestUpdatePlaceIndex $
+--             newUpdatePlaceIndex
+--
+--         , requestUpdateRouteCalculator $
+--             newUpdateRouteCalculator
+--
+--         , requestUpdateTracker $
+--             newUpdateTracker
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateTrackerConsumer $
+--             newAssociateTrackerConsumerResponse
+--
+--         , responseBatchDeleteDevicePositionHistory $
+--             newBatchDeleteDevicePositionHistoryResponse
+--
+--         , responseBatchDeleteGeofence $
+--             newBatchDeleteGeofenceResponse
+--
+--         , responseBatchEvaluateGeofences $
+--             newBatchEvaluateGeofencesResponse
+--
+--         , responseBatchGetDevicePosition $
+--             newBatchGetDevicePositionResponse
+--
+--         , responseBatchPutGeofence $
+--             newBatchPutGeofenceResponse
+--
+--         , responseBatchUpdateDevicePosition $
+--             newBatchUpdateDevicePositionResponse
+--
+--         , responseCalculateRoute $
+--             newCalculateRouteResponse
+--
+--         , responseCalculateRouteMatrix $
+--             newCalculateRouteMatrixResponse
+--
+--         , responseCreateGeofenceCollection $
+--             newCreateGeofenceCollectionResponse
+--
+--         , responseCreateMap $
+--             newCreateMapResponse
+--
+--         , responseCreatePlaceIndex $
+--             newCreatePlaceIndexResponse
+--
+--         , responseCreateRouteCalculator $
+--             newCreateRouteCalculatorResponse
+--
+--         , responseCreateTracker $
+--             newCreateTrackerResponse
+--
+--         , responseDeleteGeofenceCollection $
+--             newDeleteGeofenceCollectionResponse
+--
+--         , responseDeleteMap $
+--             newDeleteMapResponse
+--
+--         , responseDeletePlaceIndex $
+--             newDeletePlaceIndexResponse
+--
+--         , responseDeleteRouteCalculator $
+--             newDeleteRouteCalculatorResponse
+--
+--         , responseDeleteTracker $
+--             newDeleteTrackerResponse
+--
+--         , responseDescribeGeofenceCollection $
+--             newDescribeGeofenceCollectionResponse
+--
+--         , responseDescribeMap $
+--             newDescribeMapResponse
+--
+--         , responseDescribePlaceIndex $
+--             newDescribePlaceIndexResponse
+--
+--         , responseDescribeRouteCalculator $
+--             newDescribeRouteCalculatorResponse
+--
+--         , responseDescribeTracker $
+--             newDescribeTrackerResponse
+--
+--         , responseDisassociateTrackerConsumer $
+--             newDisassociateTrackerConsumerResponse
+--
+--         , responseGetDevicePosition $
+--             newGetDevicePositionResponse
+--
+--         , responseGetDevicePositionHistory $
+--             newGetDevicePositionHistoryResponse
+--
+--         , responseGetGeofence $
+--             newGetGeofenceResponse
+--
+--         , responseGetMapGlyphs $
+--             newGetMapGlyphsResponse
+--
+--         , responseGetMapSprites $
+--             newGetMapSpritesResponse
+--
+--         , responseGetMapStyleDescriptor $
+--             newGetMapStyleDescriptorResponse
+--
+--         , responseGetMapTile $
+--             newGetMapTileResponse
+--
+--         , responseGetPlace $
+--             newGetPlaceResponse
+--
+--         , responseListDevicePositions $
+--             newListDevicePositionsResponse
+--
+--         , responseListGeofenceCollections $
+--             newListGeofenceCollectionsResponse
+--
+--         , responseListGeofences $
+--             newListGeofencesResponse
+--
+--         , responseListMaps $
+--             newListMapsResponse
+--
+--         , responseListPlaceIndexes $
+--             newListPlaceIndexesResponse
+--
+--         , responseListRouteCalculators $
+--             newListRouteCalculatorsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListTrackerConsumers $
+--             newListTrackerConsumersResponse
+--
+--         , responseListTrackers $
+--             newListTrackersResponse
+--
+--         , responsePutGeofence $
+--             newPutGeofenceResponse
+--
+--         , responseSearchPlaceIndexForPosition $
+--             newSearchPlaceIndexForPositionResponse
+--
+--         , responseSearchPlaceIndexForSuggestions $
+--             newSearchPlaceIndexForSuggestionsResponse
+--
+--         , responseSearchPlaceIndexForText $
+--             newSearchPlaceIndexForTextResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateGeofenceCollection $
+--             newUpdateGeofenceCollectionResponse
+--
+--         , responseUpdateMap $
+--             newUpdateMapResponse
+--
+--         , responseUpdatePlaceIndex $
+--             newUpdatePlaceIndexResponse
+--
+--         , responseUpdateRouteCalculator $
+--             newUpdateRouteCalculatorResponse
+--
+--         , responseUpdateTracker $
+--             newUpdateTrackerResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateTrackerConsumer :: AssociateTrackerConsumer -> TestTree
+requestAssociateTrackerConsumer =
+  req
+    "AssociateTrackerConsumer"
+    "fixture/AssociateTrackerConsumer.yaml"
+
+requestBatchDeleteDevicePositionHistory :: BatchDeleteDevicePositionHistory -> TestTree
+requestBatchDeleteDevicePositionHistory =
+  req
+    "BatchDeleteDevicePositionHistory"
+    "fixture/BatchDeleteDevicePositionHistory.yaml"
+
+requestBatchDeleteGeofence :: BatchDeleteGeofence -> TestTree
+requestBatchDeleteGeofence =
+  req
+    "BatchDeleteGeofence"
+    "fixture/BatchDeleteGeofence.yaml"
+
+requestBatchEvaluateGeofences :: BatchEvaluateGeofences -> TestTree
+requestBatchEvaluateGeofences =
+  req
+    "BatchEvaluateGeofences"
+    "fixture/BatchEvaluateGeofences.yaml"
+
+requestBatchGetDevicePosition :: BatchGetDevicePosition -> TestTree
+requestBatchGetDevicePosition =
+  req
+    "BatchGetDevicePosition"
+    "fixture/BatchGetDevicePosition.yaml"
+
+requestBatchPutGeofence :: BatchPutGeofence -> TestTree
+requestBatchPutGeofence =
+  req
+    "BatchPutGeofence"
+    "fixture/BatchPutGeofence.yaml"
+
+requestBatchUpdateDevicePosition :: BatchUpdateDevicePosition -> TestTree
+requestBatchUpdateDevicePosition =
+  req
+    "BatchUpdateDevicePosition"
+    "fixture/BatchUpdateDevicePosition.yaml"
+
+requestCalculateRoute :: CalculateRoute -> TestTree
+requestCalculateRoute =
+  req
+    "CalculateRoute"
+    "fixture/CalculateRoute.yaml"
+
+requestCalculateRouteMatrix :: CalculateRouteMatrix -> TestTree
+requestCalculateRouteMatrix =
+  req
+    "CalculateRouteMatrix"
+    "fixture/CalculateRouteMatrix.yaml"
+
+requestCreateGeofenceCollection :: CreateGeofenceCollection -> TestTree
+requestCreateGeofenceCollection =
+  req
+    "CreateGeofenceCollection"
+    "fixture/CreateGeofenceCollection.yaml"
+
+requestCreateMap :: CreateMap -> TestTree
+requestCreateMap =
+  req
+    "CreateMap"
+    "fixture/CreateMap.yaml"
+
+requestCreatePlaceIndex :: CreatePlaceIndex -> TestTree
+requestCreatePlaceIndex =
+  req
+    "CreatePlaceIndex"
+    "fixture/CreatePlaceIndex.yaml"
+
+requestCreateRouteCalculator :: CreateRouteCalculator -> TestTree
+requestCreateRouteCalculator =
+  req
+    "CreateRouteCalculator"
+    "fixture/CreateRouteCalculator.yaml"
+
+requestCreateTracker :: CreateTracker -> TestTree
+requestCreateTracker =
+  req
+    "CreateTracker"
+    "fixture/CreateTracker.yaml"
+
+requestDeleteGeofenceCollection :: DeleteGeofenceCollection -> TestTree
+requestDeleteGeofenceCollection =
+  req
+    "DeleteGeofenceCollection"
+    "fixture/DeleteGeofenceCollection.yaml"
+
+requestDeleteMap :: DeleteMap -> TestTree
+requestDeleteMap =
+  req
+    "DeleteMap"
+    "fixture/DeleteMap.yaml"
+
+requestDeletePlaceIndex :: DeletePlaceIndex -> TestTree
+requestDeletePlaceIndex =
+  req
+    "DeletePlaceIndex"
+    "fixture/DeletePlaceIndex.yaml"
+
+requestDeleteRouteCalculator :: DeleteRouteCalculator -> TestTree
+requestDeleteRouteCalculator =
+  req
+    "DeleteRouteCalculator"
+    "fixture/DeleteRouteCalculator.yaml"
+
+requestDeleteTracker :: DeleteTracker -> TestTree
+requestDeleteTracker =
+  req
+    "DeleteTracker"
+    "fixture/DeleteTracker.yaml"
+
+requestDescribeGeofenceCollection :: DescribeGeofenceCollection -> TestTree
+requestDescribeGeofenceCollection =
+  req
+    "DescribeGeofenceCollection"
+    "fixture/DescribeGeofenceCollection.yaml"
+
+requestDescribeMap :: DescribeMap -> TestTree
+requestDescribeMap =
+  req
+    "DescribeMap"
+    "fixture/DescribeMap.yaml"
+
+requestDescribePlaceIndex :: DescribePlaceIndex -> TestTree
+requestDescribePlaceIndex =
+  req
+    "DescribePlaceIndex"
+    "fixture/DescribePlaceIndex.yaml"
+
+requestDescribeRouteCalculator :: DescribeRouteCalculator -> TestTree
+requestDescribeRouteCalculator =
+  req
+    "DescribeRouteCalculator"
+    "fixture/DescribeRouteCalculator.yaml"
+
+requestDescribeTracker :: DescribeTracker -> TestTree
+requestDescribeTracker =
+  req
+    "DescribeTracker"
+    "fixture/DescribeTracker.yaml"
+
+requestDisassociateTrackerConsumer :: DisassociateTrackerConsumer -> TestTree
+requestDisassociateTrackerConsumer =
+  req
+    "DisassociateTrackerConsumer"
+    "fixture/DisassociateTrackerConsumer.yaml"
+
+requestGetDevicePosition :: GetDevicePosition -> TestTree
+requestGetDevicePosition =
+  req
+    "GetDevicePosition"
+    "fixture/GetDevicePosition.yaml"
+
+requestGetDevicePositionHistory :: GetDevicePositionHistory -> TestTree
+requestGetDevicePositionHistory =
+  req
+    "GetDevicePositionHistory"
+    "fixture/GetDevicePositionHistory.yaml"
+
+requestGetGeofence :: GetGeofence -> TestTree
+requestGetGeofence =
+  req
+    "GetGeofence"
+    "fixture/GetGeofence.yaml"
+
+requestGetMapGlyphs :: GetMapGlyphs -> TestTree
+requestGetMapGlyphs =
+  req
+    "GetMapGlyphs"
+    "fixture/GetMapGlyphs.yaml"
+
+requestGetMapSprites :: GetMapSprites -> TestTree
+requestGetMapSprites =
+  req
+    "GetMapSprites"
+    "fixture/GetMapSprites.yaml"
+
+requestGetMapStyleDescriptor :: GetMapStyleDescriptor -> TestTree
+requestGetMapStyleDescriptor =
+  req
+    "GetMapStyleDescriptor"
+    "fixture/GetMapStyleDescriptor.yaml"
+
+requestGetMapTile :: GetMapTile -> TestTree
+requestGetMapTile =
+  req
+    "GetMapTile"
+    "fixture/GetMapTile.yaml"
+
+requestGetPlace :: GetPlace -> TestTree
+requestGetPlace =
+  req
+    "GetPlace"
+    "fixture/GetPlace.yaml"
+
+requestListDevicePositions :: ListDevicePositions -> TestTree
+requestListDevicePositions =
+  req
+    "ListDevicePositions"
+    "fixture/ListDevicePositions.yaml"
+
+requestListGeofenceCollections :: ListGeofenceCollections -> TestTree
+requestListGeofenceCollections =
+  req
+    "ListGeofenceCollections"
+    "fixture/ListGeofenceCollections.yaml"
+
+requestListGeofences :: ListGeofences -> TestTree
+requestListGeofences =
+  req
+    "ListGeofences"
+    "fixture/ListGeofences.yaml"
+
+requestListMaps :: ListMaps -> TestTree
+requestListMaps =
+  req
+    "ListMaps"
+    "fixture/ListMaps.yaml"
+
+requestListPlaceIndexes :: ListPlaceIndexes -> TestTree
+requestListPlaceIndexes =
+  req
+    "ListPlaceIndexes"
+    "fixture/ListPlaceIndexes.yaml"
+
+requestListRouteCalculators :: ListRouteCalculators -> TestTree
+requestListRouteCalculators =
+  req
+    "ListRouteCalculators"
+    "fixture/ListRouteCalculators.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListTrackerConsumers :: ListTrackerConsumers -> TestTree
+requestListTrackerConsumers =
+  req
+    "ListTrackerConsumers"
+    "fixture/ListTrackerConsumers.yaml"
+
+requestListTrackers :: ListTrackers -> TestTree
+requestListTrackers =
+  req
+    "ListTrackers"
+    "fixture/ListTrackers.yaml"
+
+requestPutGeofence :: PutGeofence -> TestTree
+requestPutGeofence =
+  req
+    "PutGeofence"
+    "fixture/PutGeofence.yaml"
+
+requestSearchPlaceIndexForPosition :: SearchPlaceIndexForPosition -> TestTree
+requestSearchPlaceIndexForPosition =
+  req
+    "SearchPlaceIndexForPosition"
+    "fixture/SearchPlaceIndexForPosition.yaml"
+
+requestSearchPlaceIndexForSuggestions :: SearchPlaceIndexForSuggestions -> TestTree
+requestSearchPlaceIndexForSuggestions =
+  req
+    "SearchPlaceIndexForSuggestions"
+    "fixture/SearchPlaceIndexForSuggestions.yaml"
+
+requestSearchPlaceIndexForText :: SearchPlaceIndexForText -> TestTree
+requestSearchPlaceIndexForText =
+  req
+    "SearchPlaceIndexForText"
+    "fixture/SearchPlaceIndexForText.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateGeofenceCollection :: UpdateGeofenceCollection -> TestTree
+requestUpdateGeofenceCollection =
+  req
+    "UpdateGeofenceCollection"
+    "fixture/UpdateGeofenceCollection.yaml"
+
+requestUpdateMap :: UpdateMap -> TestTree
+requestUpdateMap =
+  req
+    "UpdateMap"
+    "fixture/UpdateMap.yaml"
+
+requestUpdatePlaceIndex :: UpdatePlaceIndex -> TestTree
+requestUpdatePlaceIndex =
+  req
+    "UpdatePlaceIndex"
+    "fixture/UpdatePlaceIndex.yaml"
+
+requestUpdateRouteCalculator :: UpdateRouteCalculator -> TestTree
+requestUpdateRouteCalculator =
+  req
+    "UpdateRouteCalculator"
+    "fixture/UpdateRouteCalculator.yaml"
+
+requestUpdateTracker :: UpdateTracker -> TestTree
+requestUpdateTracker =
+  req
+    "UpdateTracker"
+    "fixture/UpdateTracker.yaml"
+
+-- Responses
+
+responseAssociateTrackerConsumer :: AssociateTrackerConsumerResponse -> TestTree
+responseAssociateTrackerConsumer =
+  res
+    "AssociateTrackerConsumerResponse"
+    "fixture/AssociateTrackerConsumerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateTrackerConsumer)
+
+responseBatchDeleteDevicePositionHistory :: BatchDeleteDevicePositionHistoryResponse -> TestTree
+responseBatchDeleteDevicePositionHistory =
+  res
+    "BatchDeleteDevicePositionHistoryResponse"
+    "fixture/BatchDeleteDevicePositionHistoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDeleteDevicePositionHistory)
+
+responseBatchDeleteGeofence :: BatchDeleteGeofenceResponse -> TestTree
+responseBatchDeleteGeofence =
+  res
+    "BatchDeleteGeofenceResponse"
+    "fixture/BatchDeleteGeofenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDeleteGeofence)
+
+responseBatchEvaluateGeofences :: BatchEvaluateGeofencesResponse -> TestTree
+responseBatchEvaluateGeofences =
+  res
+    "BatchEvaluateGeofencesResponse"
+    "fixture/BatchEvaluateGeofencesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchEvaluateGeofences)
+
+responseBatchGetDevicePosition :: BatchGetDevicePositionResponse -> TestTree
+responseBatchGetDevicePosition =
+  res
+    "BatchGetDevicePositionResponse"
+    "fixture/BatchGetDevicePositionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchGetDevicePosition)
+
+responseBatchPutGeofence :: BatchPutGeofenceResponse -> TestTree
+responseBatchPutGeofence =
+  res
+    "BatchPutGeofenceResponse"
+    "fixture/BatchPutGeofenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchPutGeofence)
+
+responseBatchUpdateDevicePosition :: BatchUpdateDevicePositionResponse -> TestTree
+responseBatchUpdateDevicePosition =
+  res
+    "BatchUpdateDevicePositionResponse"
+    "fixture/BatchUpdateDevicePositionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchUpdateDevicePosition)
+
+responseCalculateRoute :: CalculateRouteResponse -> TestTree
+responseCalculateRoute =
+  res
+    "CalculateRouteResponse"
+    "fixture/CalculateRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CalculateRoute)
+
+responseCalculateRouteMatrix :: CalculateRouteMatrixResponse -> TestTree
+responseCalculateRouteMatrix =
+  res
+    "CalculateRouteMatrixResponse"
+    "fixture/CalculateRouteMatrixResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CalculateRouteMatrix)
+
+responseCreateGeofenceCollection :: CreateGeofenceCollectionResponse -> TestTree
+responseCreateGeofenceCollection =
+  res
+    "CreateGeofenceCollectionResponse"
+    "fixture/CreateGeofenceCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateGeofenceCollection)
+
+responseCreateMap :: CreateMapResponse -> TestTree
+responseCreateMap =
+  res
+    "CreateMapResponse"
+    "fixture/CreateMapResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateMap)
+
+responseCreatePlaceIndex :: CreatePlaceIndexResponse -> TestTree
+responseCreatePlaceIndex =
+  res
+    "CreatePlaceIndexResponse"
+    "fixture/CreatePlaceIndexResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreatePlaceIndex)
+
+responseCreateRouteCalculator :: CreateRouteCalculatorResponse -> TestTree
+responseCreateRouteCalculator =
+  res
+    "CreateRouteCalculatorResponse"
+    "fixture/CreateRouteCalculatorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRouteCalculator)
+
+responseCreateTracker :: CreateTrackerResponse -> TestTree
+responseCreateTracker =
+  res
+    "CreateTrackerResponse"
+    "fixture/CreateTrackerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTracker)
+
+responseDeleteGeofenceCollection :: DeleteGeofenceCollectionResponse -> TestTree
+responseDeleteGeofenceCollection =
+  res
+    "DeleteGeofenceCollectionResponse"
+    "fixture/DeleteGeofenceCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteGeofenceCollection)
+
+responseDeleteMap :: DeleteMapResponse -> TestTree
+responseDeleteMap =
+  res
+    "DeleteMapResponse"
+    "fixture/DeleteMapResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteMap)
+
+responseDeletePlaceIndex :: DeletePlaceIndexResponse -> TestTree
+responseDeletePlaceIndex =
+  res
+    "DeletePlaceIndexResponse"
+    "fixture/DeletePlaceIndexResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePlaceIndex)
+
+responseDeleteRouteCalculator :: DeleteRouteCalculatorResponse -> TestTree
+responseDeleteRouteCalculator =
+  res
+    "DeleteRouteCalculatorResponse"
+    "fixture/DeleteRouteCalculatorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRouteCalculator)
+
+responseDeleteTracker :: DeleteTrackerResponse -> TestTree
+responseDeleteTracker =
+  res
+    "DeleteTrackerResponse"
+    "fixture/DeleteTrackerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTracker)
+
+responseDescribeGeofenceCollection :: DescribeGeofenceCollectionResponse -> TestTree
+responseDescribeGeofenceCollection =
+  res
+    "DescribeGeofenceCollectionResponse"
+    "fixture/DescribeGeofenceCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeGeofenceCollection)
+
+responseDescribeMap :: DescribeMapResponse -> TestTree
+responseDescribeMap =
+  res
+    "DescribeMapResponse"
+    "fixture/DescribeMapResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeMap)
+
+responseDescribePlaceIndex :: DescribePlaceIndexResponse -> TestTree
+responseDescribePlaceIndex =
+  res
+    "DescribePlaceIndexResponse"
+    "fixture/DescribePlaceIndexResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePlaceIndex)
+
+responseDescribeRouteCalculator :: DescribeRouteCalculatorResponse -> TestTree
+responseDescribeRouteCalculator =
+  res
+    "DescribeRouteCalculatorResponse"
+    "fixture/DescribeRouteCalculatorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRouteCalculator)
+
+responseDescribeTracker :: DescribeTrackerResponse -> TestTree
+responseDescribeTracker =
+  res
+    "DescribeTrackerResponse"
+    "fixture/DescribeTrackerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTracker)
+
+responseDisassociateTrackerConsumer :: DisassociateTrackerConsumerResponse -> TestTree
+responseDisassociateTrackerConsumer =
+  res
+    "DisassociateTrackerConsumerResponse"
+    "fixture/DisassociateTrackerConsumerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateTrackerConsumer)
+
+responseGetDevicePosition :: GetDevicePositionResponse -> TestTree
+responseGetDevicePosition =
+  res
+    "GetDevicePositionResponse"
+    "fixture/GetDevicePositionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDevicePosition)
+
+responseGetDevicePositionHistory :: GetDevicePositionHistoryResponse -> TestTree
+responseGetDevicePositionHistory =
+  res
+    "GetDevicePositionHistoryResponse"
+    "fixture/GetDevicePositionHistoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDevicePositionHistory)
+
+responseGetGeofence :: GetGeofenceResponse -> TestTree
+responseGetGeofence =
+  res
+    "GetGeofenceResponse"
+    "fixture/GetGeofenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetGeofence)
+
+responseGetMapGlyphs :: GetMapGlyphsResponse -> TestTree
+responseGetMapGlyphs =
+  res
+    "GetMapGlyphsResponse"
+    "fixture/GetMapGlyphsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMapGlyphs)
+
+responseGetMapSprites :: GetMapSpritesResponse -> TestTree
+responseGetMapSprites =
+  res
+    "GetMapSpritesResponse"
+    "fixture/GetMapSpritesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMapSprites)
+
+responseGetMapStyleDescriptor :: GetMapStyleDescriptorResponse -> TestTree
+responseGetMapStyleDescriptor =
+  res
+    "GetMapStyleDescriptorResponse"
+    "fixture/GetMapStyleDescriptorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMapStyleDescriptor)
+
+responseGetMapTile :: GetMapTileResponse -> TestTree
+responseGetMapTile =
+  res
+    "GetMapTileResponse"
+    "fixture/GetMapTileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMapTile)
+
+responseGetPlace :: GetPlaceResponse -> TestTree
+responseGetPlace =
+  res
+    "GetPlaceResponse"
+    "fixture/GetPlaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPlace)
+
+responseListDevicePositions :: ListDevicePositionsResponse -> TestTree
+responseListDevicePositions =
+  res
+    "ListDevicePositionsResponse"
+    "fixture/ListDevicePositionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDevicePositions)
+
+responseListGeofenceCollections :: ListGeofenceCollectionsResponse -> TestTree
+responseListGeofenceCollections =
+  res
+    "ListGeofenceCollectionsResponse"
+    "fixture/ListGeofenceCollectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListGeofenceCollections)
+
+responseListGeofences :: ListGeofencesResponse -> TestTree
+responseListGeofences =
+  res
+    "ListGeofencesResponse"
+    "fixture/ListGeofencesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListGeofences)
+
+responseListMaps :: ListMapsResponse -> TestTree
+responseListMaps =
+  res
+    "ListMapsResponse"
+    "fixture/ListMapsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMaps)
+
+responseListPlaceIndexes :: ListPlaceIndexesResponse -> TestTree
+responseListPlaceIndexes =
+  res
+    "ListPlaceIndexesResponse"
+    "fixture/ListPlaceIndexesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPlaceIndexes)
+
+responseListRouteCalculators :: ListRouteCalculatorsResponse -> TestTree
+responseListRouteCalculators =
+  res
+    "ListRouteCalculatorsResponse"
+    "fixture/ListRouteCalculatorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListRouteCalculators)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListTrackerConsumers :: ListTrackerConsumersResponse -> TestTree
+responseListTrackerConsumers =
+  res
+    "ListTrackerConsumersResponse"
+    "fixture/ListTrackerConsumersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTrackerConsumers)
+
+responseListTrackers :: ListTrackersResponse -> TestTree
+responseListTrackers =
+  res
+    "ListTrackersResponse"
+    "fixture/ListTrackersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTrackers)
+
+responsePutGeofence :: PutGeofenceResponse -> TestTree
+responsePutGeofence =
+  res
+    "PutGeofenceResponse"
+    "fixture/PutGeofenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutGeofence)
+
+responseSearchPlaceIndexForPosition :: SearchPlaceIndexForPositionResponse -> TestTree
+responseSearchPlaceIndexForPosition =
+  res
+    "SearchPlaceIndexForPositionResponse"
+    "fixture/SearchPlaceIndexForPositionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchPlaceIndexForPosition)
+
+responseSearchPlaceIndexForSuggestions :: SearchPlaceIndexForSuggestionsResponse -> TestTree
+responseSearchPlaceIndexForSuggestions =
+  res
+    "SearchPlaceIndexForSuggestionsResponse"
+    "fixture/SearchPlaceIndexForSuggestionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchPlaceIndexForSuggestions)
+
+responseSearchPlaceIndexForText :: SearchPlaceIndexForTextResponse -> TestTree
+responseSearchPlaceIndexForText =
+  res
+    "SearchPlaceIndexForTextResponse"
+    "fixture/SearchPlaceIndexForTextResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchPlaceIndexForText)
+
+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)
+
+responseUpdateGeofenceCollection :: UpdateGeofenceCollectionResponse -> TestTree
+responseUpdateGeofenceCollection =
+  res
+    "UpdateGeofenceCollectionResponse"
+    "fixture/UpdateGeofenceCollectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateGeofenceCollection)
+
+responseUpdateMap :: UpdateMapResponse -> TestTree
+responseUpdateMap =
+  res
+    "UpdateMapResponse"
+    "fixture/UpdateMapResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateMap)
+
+responseUpdatePlaceIndex :: UpdatePlaceIndexResponse -> TestTree
+responseUpdatePlaceIndex =
+  res
+    "UpdatePlaceIndexResponse"
+    "fixture/UpdatePlaceIndexResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdatePlaceIndex)
+
+responseUpdateRouteCalculator :: UpdateRouteCalculatorResponse -> TestTree
+responseUpdateRouteCalculator =
+  res
+    "UpdateRouteCalculatorResponse"
+    "fixture/UpdateRouteCalculatorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateRouteCalculator)
+
+responseUpdateTracker :: UpdateTrackerResponse -> TestTree
+responseUpdateTracker =
+  res
+    "UpdateTrackerResponse"
+    "fixture/UpdateTrackerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateTracker)
diff --git a/test/Test/Amazonka/Location.hs b/test/Test/Amazonka/Location.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Location.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Location
+-- Copyright   : (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.Location
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Location/Internal.hs b/test/Test/Amazonka/Location/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Location/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Location.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.Location.Internal where
