**European Economic Area (EEA) developers**

> [!NOTE]
> If your billing address is in the European Economic Area, effective on 8 July 2025, the [Google Maps Platform EEA Terms of Service](https://cloud.google.com/terms/maps-platform/eea) will apply to your use of the Services. Functionality varies by region. [Learn more](https://developers.google.com/maps/comms/eea/faq.md.txt).

By default, the Routes API `Compute Routes`
method calculates a route through multiple stops, called stopover waypoints, in
the order that you provide them.

You can have the Routes API optimize the provided route by rearranging
stops in a more efficient order. Waypoint optimization optimizes for travel
time but also considers other factors such as distance and number of turns when
deciding which route is the most efficient.

## To optimize waypoints

1. Make sure none of the waypoints in the route have `via` set to `true`, for
   example: `{"address": "Clare,SA", "via": true}`. For more information about
   intermediate waypoints, see
   [Specify intermediate waypoints](https://developers.google.com/maps/documentation/routes/intermed_waypoints.md.txt).

2. Make sure the `routing_preference` is not set to `TRAFFIC_AWARE_OPTIMAL`.

3. Set `optimize_waypoint_order` to `true`. For example:

   ```json
   "optimizeWaypointOrder": "true",
   ```
4. Specify the `routes.optimizedIntermediateWaypointIndex` field in the field
   mask:

   **REST**

   ```json
   -H X-Goog-FieldMask: routes.optimizedIntermediateWaypointIndex
   ```

   **RPC**

   ```
   const (fieldMask = "routes.optimizedIntermediateWaypointIndex")
   ```

### Understand how waypoint order is optimized

Here's how the Routes API optimizes the order of waypoints in a route:

1. Automatically indexes the waypoints based on the order you provide
   them in the request, starting with 0.

2. Optimizes the order of the waypoints using the index numbers it
   assigned to the waypoints in the request.

3. Returns the optimized waypoint order in the `routes` object, in the
   `waypoint_order` field, under `routes.optimizedIntermediateWaypointIndex`.

### Example

This request asks for optimization for a route from Adelaide, South Australia,
to each of South Australia's main wine regions, and then returning to Adelaide.

```json
curl -X POST -H 'content-type: application/json' -d ' {
  "origin": {
    "address": "Adelaide,SA"
  },
  "destination": {
    "address": "Adelaide,SA"
  },
  "intermediates": [
    {"address": "Barossa+Valley,SA"},
    {"address": "Clare,SA"},
    {"address": "Coonawarra,SA"},
    {"address": "McLaren+Vale,SA"}
  ],
  "travelMode": "DRIVE",
  "optimizeWaypointOrder": "true"
  }' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes,geocodingResults.intermediates.intermediateWaypointRequestIndex' \
'https://routes.googleapis.com/directions/v2:computeRoutes'
```

The Routes API indexes the intermediate waypoints provided in the
request, starting at 0. For example:

```json
0    {"address": "Barossa+Valley,SA"},
1    {"address": "Clare,SA"},
2    {"address": "Coonawarrav,SA"},
3    {"address": "McLaren+Vale,SA"}
```

Using the index numbers for the four waypoints provided in the request, the
service then returns the optimized order:

```json
"optimizedIntermediateWaypointIndex": [
                3,
                2,
                0,
                1
            ]
```

> [!CAUTION]
> **Caution:** Requests using waypoint optimization are billed at a higher rate on the SKU for Compute Routes Pro. For more details, see [SKU: Routes: Compute Routes Pro](https://developers.google.com/maps/documentation/routes/usage-and-billing.md.txt#compute-routes-pro-sku).