# Location keys

A location key is a unique identifier for a precise geographic location. Use one of the [Locations API](/core-weather/location-key-locations) endpoints to find a location key. It is required for most API endpoints, including:

- [Current conditions](/core-weather/location-key-currentconditions)
- [Forecasts](/core-weather/location-key-daily)
- [Alerts](/core-weather/location-key-alerts)
- [Indices](/core-weather/1-day)
- [Alarms](/core-weather/location-key-alarms)
- [Imagery maps](/core-weather/location-key-maps)

## Find a location key

To get a location key, use one of the [Location search](/core-weather/text-search) endpoints. Below are some examples:

| Use case                     | Endpoint                                                                                                      |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------- |
| City name search             | [`/locations/v1/cities/search`](/core-weather/text-search#city-search)                                        |
| Postal code search           | [`/locations/v1/postalcodes/search`](/core-weather/text-search#postal-code-search)                            |
| Points of interest search    | [`/locations/v1/poi/search`](/core-weather/text-search#point-of-interest-search)                              |
| Cities by latitude/longitude | [`/locations/v1/cities/geoposition/search`](/core-weather/geoposition-locations#cities-search-by-geoposition) |
| IP-based auto-detect         | [`/locations/v1/cities/ipaddress`](/core-weather/ip-address#cities-search-by-ip-address)                      |

Try a city search to get started:

<CodeTabs syncKey="language">

```ts title="TypeScript"
const url = "https://dataservice.accuweather.com/locations/v1/cities/search?q=San+Francisco";

const response = await fetch(url, {
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Accept-Encoding": "gzip",
  },
});

const data: Record<string, unknown>[] = await response.json();
```

```python title="Python"
import requests

url = "https://dataservice.accuweather.com/locations/v1/cities/search"
params = {"q": "San Francisco"}
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Accept-Encoding": "gzip",
}

response = requests.get(url, params=params, headers=headers)
data = response.json()
```

```csharp title="C#"
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip");

var url = "https://dataservice.accuweather.com/locations/v1/cities/search?q=San+Francisco";
var response = await client.GetAsync(url);
var data = await response.Content.ReadAsStringAsync();
```

```java title="Java"
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://dataservice.accuweather.com/locations/v1/cities/search?q=San+Francisco"))
    .header("Authorization", "Bearer YOUR_API_KEY")
    .header("Accept-Encoding", "gzip")
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
String data = response.body();
```

```bash title="bash"
curl -H "Authorization: Bearer YOUR_API_KEY" \
     -H "Accept-Encoding: gzip,deflate" \
     "https://dataservice.accuweather.com/locations/v1/cities/search?q=San+Francisco"
```

</CodeTabs>

<OpenPlaygroundButton
  method="get"
  queryParams={[
    {
      name: "q",
      required: true,
      defaultValue: "San Francisco",
      defaultActive: true,
    },
  ]}
  url="/locations/v1/cities/search"
  server={import.meta.env.ZUPLO_PUBLIC_API_BASE_URL}
/>

Response:

```json
[
  {
    "Version": 1,
    "Key": "347629",
    "Type": "City",
    "Rank": 35,
    "LocalizedName": "San Francisco",
    "EnglishName": "San Francisco",
    "PrimaryPostalCode": "94103",
     ...
  }
]
```

➡️ `347629` is the location key for San Francisco, CA, US.

## Use a location key

Use the location key we just found in other API endpoints:

<CodeTabs syncKey="language">

```ts title="TypeScript"
const url = "https://dataservice.accuweather.com/currentconditions/v1/347629";

const response = await fetch(url, {
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Accept-Encoding": "gzip",
  },
});

const data: Record<string, unknown>[] = await response.json();
```

```python title="Python"
import requests

url = "https://dataservice.accuweather.com/currentconditions/v1/347629"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Accept-Encoding": "gzip",
}

response = requests.get(url, headers=headers)
data = response.json()
```

```csharp title="C#"
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_API_KEY");
client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip");

var url = "https://dataservice.accuweather.com/currentconditions/v1/347629";
var response = await client.GetAsync(url);
var data = await response.Content.ReadAsStringAsync();
```

```java title="Java"
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://dataservice.accuweather.com/currentconditions/v1/347629"))
    .header("Authorization", "Bearer YOUR_API_KEY")
    .header("Accept-Encoding", "gzip")
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
String data = response.body();
```

```bash title="bash"
curl -H "Authorization: Bearer YOUR_API_KEY" \
     -H "Accept-Encoding: gzip,deflate" \
     "https://dataservice.accuweather.com/currentconditions/v1/347629"
```

</CodeTabs>

<OpenPlaygroundButton
  method="get"
  url="/currentconditions/v1/347629"
  server={import.meta.env.ZUPLO_PUBLIC_API_BASE_URL}
/>

This returns the current conditions for San Francisco, CA.