Here are some tips on troubleshooting common issues.

## Why is the accuracy radius very large?

If your Geolocation response shows a very high value in the accuracy field, the
service may be geolocating based on the request IP, instead of WiFi points or
cell towers. These kinds of responses can happen if the service does not
recognize any cell towers or access points.

To confirm that the service could not geolocate your access points, set
`considerIp` to false in your request. If the response is a 404, you've
confirmed that your wifiAccessPoints and cellTowers objects could not be
geolocated.

## How do I troubleshoot a response error?

If your request generates an error, the system returns a standard format error
response body and sets the HTTP status code to an error status.

The error response contains an object with a single error object with the
following keys:

- `code`: This is the same as the HTTP status of the response.
- `message`: A short description of the error.
- `errors`: A list of errors that occurred. Each error contains an identifier for the type of error (the reason) and a short description (the message).

For example, sending invalid JSON returns the following error:

```json
{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "parseError",
    "message": "Parse Error",
   }
  ],
  "code": 400,
  "message": "Parse Error"
 }
}
```

## Gather testing information from devices

For additional testing, you can gather information from your device using the
built-in location services offered by each platform:

- **Android devices** : Use the [LocationManager](https://developer.android.com/reference/android/location/LocationManager)
  or the
  [Fused Location Provider API](https://developers.google.com/location-context/fused-location-provider).

- **iOS devices** : Use the Apple [Core Location](https://developer.apple.com/documentation/corelocation)
  framework.

## Error descriptions

Here are the possible errors you might encounter with descriptions.

| Reason | Domain | HTTP Status Code | Description |
|---|---|---|---|
| `dailyLimitExceeded` | `usageLimits` | 403 | You have exceeded your [daily limit](https://developers.google.com/maps/documentation/geolocation/usage-and-billing.md.txt#other-usage-limits). |
| `keyInvalid` | `usageLimits` | 400 | Your API key is not valid for the Geolocation API. Be sure to include the entire key, and that you've either purchased the API or have [enabled billing and activated the API](https://developers.google.com/maps/documentation/geolocation/get-api-key.md.txt) to obtain the quota at no charge. |
| `userRateLimitExceeded` | `usageLimits` | 403 | You have exceeded the request limit that you configured in the Google Cloud console. This limit is typically set as requests per day, requests per 100 seconds, and requests per 100 seconds per user. You should configure your limit to prevent a single or small group of users from exhausting your daily quota, while still allowing reasonable access to all users. See [Capping API Usage](https://cloud.google.com/apis/docs/capping-api-usage) to configure these limits. |
| `notFound` | `geolocation` | 404 | The request was valid, but no results were returned. |
| `parseError` | `global` | 400 | The request body is not valid JSON. Refer to the [Request Body](https://developers.google.com/maps/documentation/geolocation/requests-geolocation.md.txt#body) section for details on each field. |