# Method: computeRoutes

- [HTTP request](https://developers.google.com/maps/documentation/routes_preferred/reference/rest/v1alpha/TopLevel/computeRoutes#body.HTTP_TEMPLATE)
- [Request body](https://developers.google.com/maps/documentation/routes_preferred/reference/rest/v1alpha/TopLevel/computeRoutes#body.request_body)
  - [JSON representation](https://developers.google.com/maps/documentation/routes_preferred/reference/rest/v1alpha/TopLevel/computeRoutes#body.request_body.SCHEMA_REPRESENTATION)
- [Response body](https://developers.google.com/maps/documentation/routes_preferred/reference/rest/v1alpha/TopLevel/computeRoutes#body.response_body)
- [Authorization scopes](https://developers.google.com/maps/documentation/routes_preferred/reference/rest/v1alpha/TopLevel/computeRoutes#body.aspect)

Returns the primary route along with optional alternate routes, given a set of terminal and intermediate waypoints.

**NOTE:** This method requires that you specify a response field mask in the input. You can provide the response field mask by using the URL parameter `$fields` or `fields`, or by using the HTTP/gRPC header `X-Goog-FieldMask` (see the [available URL parameters and headers](https://cloud.google.com/apis/docs/system-parameters). The value is a comma separated list of field paths. See this detailed documentation about [how to construct the field paths](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/field_mask.proto).

For example, in this method:

- Field mask of all available fields (for manual inspection): `X-Goog-FieldMask: *`
- Field mask of Route-level duration, distance, and polyline (an example production setup): `X-Goog-FieldMask:
  routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline`

Google discourages the use of the wildcard (`*`) response field mask, or specifying the field mask at the top level (`routes`), because:

- Selecting only the fields that you need helps our server save computation cycles, allowing us to return the result to you with a lower latency.
- Selecting only the fields that you need in your production job ensures stable latency performance. We might add more response fields in the future, and those new fields might require extra computation time. If you select all fields, or if you select all fields at the top level, then you might experience performance degradation because any new field we add will be automatically included in the response.
- Selecting only the fields that you need results in a smaller response size, and thus higher network throughput.

### HTTP request

`POST https://routespreferred.googleapis.com/v1alpha:computeRoutes`

The URL uses [gRPC Transcoding](https://google.aip.dev/127) syntax.

### Request body

The request body contains data with the following structure:

| JSON representation |
|---|
| ``` { "origin": { object (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/Waypoint`) }, "destination": { object (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/Waypoint`) }, "intermediates": [ { object (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/Waypoint`) } ], "travelMode": enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode`), "routingPreference": enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RoutingPreference`), "polylineQuality": enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/PolylineQuality`), "polylineEncoding": enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/PolylineEncoding`), "departureTime": string, "computeAlternativeRoutes": boolean, "routeModifiers": { object (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteModifiers`) }, "languageCode": string, "units": enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/Units`), "optimizeWaypointOrder": boolean } ``` |

| Fields ||
|---|---|
| `origin` | ``object (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/Waypoint`)`` Required. Origin waypoint. |
| `destination` | ``object (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/Waypoint`)`` Required. Destination waypoint. |
| `intermediates[]` | ``object (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/Waypoint`)`` Optional. A set of waypoints along the route (excluding terminal points), for either stopping at or passing by. Up to 25 intermediate waypoints are supported. |
| `travelMode` | ``enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode`)`` Optional. Specifies the mode of transportation. |
| `routingPreference` | ``enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RoutingPreference`)`` Optional. Specifies how to compute the route. The server attempts to use the selected routing preference to compute the route. If the routing preference results in an error or an extra long latency, then an error is returned. You can specify this option only when the `travelMode` is `DRIVE` or `TWO_WHEELER`, otherwise the request fails. |
| `polylineQuality` | ``enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/PolylineQuality`)`` Optional. Specifies your preference for the quality of the polyline. |
| `polylineEncoding` | ``enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/PolylineEncoding`)`` Optional. Specifies the preferred encoding for the polyline. |
| `departureTime` | ``string (`https://protobuf.dev/reference/protobuf/google.protobuf#timestamp` format)`` Optional. The departure time. If you don't set this value, then this value defaults to the time that you made the request. If you set this value to a time that has already occurred, then the request fails. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: `"2014-10-02T15:01:23Z"` and `"2014-10-02T15:01:23.045123456Z"`. |
| `computeAlternativeRoutes` | `boolean` Optional. Specifies whether to calculate alternate routes in addition to the route. No alternative routes are returned for requests that have intermediate waypoints. |
| `routeModifiers` | ``object (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteModifiers`)`` Optional. A set of conditions to satisfy that affect the way routes are calculated. |
| `languageCode` | `string` Optional. The BCP-47 language code, such as "en-US" or "sr-Latn". For more information, see [Unicode Locale Identifier](http://www.unicode.org/reports/tr35/#Unicode_locale_identifier). See [Language Support](https://developers.google.com/maps/faq#languagesupport) for the list of supported languages. When you don't provide this value, the display language is inferred from the location of the route request. |
| `units` | ``enum (`https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/Units`)`` Optional. Specifies the units of measure for the display fields. This includes the `instruction` field in `NavigationInstruction`. The units of measure used for the route, leg, step distance, and duration are not affected by this value. If you don't provide this value, then the display units are inferred from the location of the request. |
| `optimizeWaypointOrder` | `boolean` If optimizeWaypointOrder is set to true, an attempt is made to re-order the specified intermediate waypoints to minimize the overall cost of the route. If any of the intermediate waypoints is via waypoint the request fails. Use `ComputeRoutesResponse.Routes.optimized_intermediate_waypoint_index` to find the new ordering. If `routes.optimized_intermediate_waypoint_index` is not requested in the `X-Goog-FieldMask` header, the request fails. If `optimizeWaypointOrder` is set to false, `ComputeRoutesResponse.optimized_intermediate_waypoint_index` is empty. |

### Response body

If successful, the response body contains an instance of `https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/ComputeRoutesResponse`.

### Authorization scopes

Requires the following OAuth scope:

- `https://www.googleapis.com/auth/maps-platform.routespreferred`

For more information, see the [OAuth 2.0 Overview](https://developers.google.com/identity/protocols/OAuth2).