# AccuWeather Developer Portal > Complete content of all documentation pages for AccuWeather APIs and the developer portal. ## Core pages - [Home](https://developer.accuweather.com/home): Landing page with an overview of AccuWeather APIs - [Pricing](https://developer.accuweather.com/pricing): Pricing information for all API plans - [FAQ](https://developer.accuweather.com/faq): Frequently asked questions - [Contact Us](https://developer.accuweather.com/contact-us): Contact form for sales and support - [Core Weather API](https://developer.accuweather.com/core-weather): OpenAPI reference for the Core Weather API - [MinuteCast API](https://developer.accuweather.com/minutecast): OpenAPI reference for the MinuteCast API - [Lightning API](https://developer.accuweather.com/lightning): OpenAPI reference for the Lightning API --- ## Document: /documentation/weather-mcp-usage-and-billing What MCP costs on the AccuWeather free trial and Elite plans, and how to keep your call count down. URL: /documentation/weather-mcp-usage-and-billing # Usage and billing Using AccuWeather's MCP costs the same as using the REST API. Each tool call counts as one Core Weather call, and there is no separate MCP price or allowance. ## Free trial and Elite The MCP server is included with both plans at no extra cost. The free trial includes 500 Core Weather calls per day, and the count resets daily. Elite has no daily cap. Calls draw down your monthly allowance, and the published overage rate applies once you pass it. The [pricing page](/pricing) has the current allowance and rate. ## Check your usage Your [subscriptions page](/subscriptions) shows how many calls each subscription has used against its limit. ## Minimize call counts Location keys do not change, so the lookup is the call worth eliminating. Store the key you get back from `search_locations` and reuse it for that location, rather than looking up the same place every time. See [best practices](/documentation/best-practices) for caching and update-cadence guidance that applies to MCP and REST alike. ## What next? - [Pricing](/pricing) — allowances and overage rates - [Best practices](/documentation/best-practices) — caching, compression, and update cadence - [Tools](/documentation/weather-mcp-tools) — what each tool returns --- ## Document: /documentation/weather-mcp-tools The 26 AccuWeather weather MCP tools, what each one returns, the arguments they accept, and their coverage limits. URL: /documentation/weather-mcp-tools # Tools All 91 Core Weather GET endpoints are available through 26 tools. Your assistant chooses which tool to use and fills in the arguments, so you ask for weather in plain language rather than calling the API yourself. ## What you can ask for - **Current conditions.** The latest observations, or weather conditions over the past 6 or 24 hours. - **Forecasts.** Daily for 1, 5, 7, 10, or 15 days. Hourly for 1, 12, 24, 72, or 120 hours. - **Locations.** Search by name, postal code, point of interest, reverse-geocode coordinates, IP address, or list neighboring cities, top cities, regions, countries, and administrative areas. - **Lifestyle and health indices.** Daily index values such as running, allergy, and flu risk, plus a full index catalog. - **Alerts and alarms.** Government-issued warnings, and AccuWeather's own forecast-threshold alarms. - **Tropical storms.** Active storms, past seasons, forecast tracks, and position history. - **Imagery.** Radar and satellite map image links at three sizes. - **Translations.** The language catalog and translation groups. ### Example questions You ask in plain language. Your assistant works out which tools to call and what to pass them. - "Are there active weather alerts for Dallas, Denver, or Phoenix?" - "What's the 5-day forecast along our route through Chicago, Indianapolis, and Columbus?" - "Will conditions in Houston support crane work over the next three days?" - "What's the soil moisture and field readiness outlook for Fresno this week?" - "Give me the hourly temperature forecast for Phoenix tomorrow in Celsius." - "Which tropical storms were active in the Atlantic in 2024, and what were their tracks?" - "What's the pollen and asthma outlook for Atlanta this week?" ## Tool catalog | Tool | What it returns | Key arguments | | ------------------------------ | -------------------------------------------------------------- | ----------------------------------------------------------------- | | `search_locations` | Locations matching a search term, with their location keys | `q`, `scope`: `all`, `cities`, `poi`, `postalcodes`, `adminareas` | | `autocomplete_locations` | Prefix suggestions for type-ahead input | `q`, `scope`: `all`, `cities`, `poi` | | `search_by_geoposition` | The location at a set of coordinates | `latitude`, `longitude` | | `get_top_cities` | The world's top cities by population | `count`: 50, 100, 150 | | `get_daily_forecast` | Daily forecast | `days`: 1, 5, 7, 10, 15 (default 5) | | `get_hourly_forecast` | Hour-by-hour forecast | `hours`: 1, 12, 24, 72, 120 (default 12) | | `get_weather_alarms` | AccuWeather forecast-threshold alarms, not official warnings | `days`: 1, 5, 10, 15 (default 5) | | `get_daily_indices` | Lifestyle and health index values | `days`, plus `indexId` or `groupId` to narrow to one | | `list_index_definitions` | The index catalog. Needs no location | `kind`: `indices`, `groups` | | `list_regions` | Top-level geographic regions | `regionCode` | | `list_countries` | Countries and their ISO codes | `regionCode`, `countryCode` | | `list_admin_areas` | States, provinces, and equivalents | `countryCode`, `adminCode` | | `get_current_conditions` | Current observation, or the past 6 or 24 hours | `period`: `current`, `past6hours`, `past24hours` | | `get_top_cities_conditions` | Current conditions for the world's top cities | `count` | | `get_weather_alerts` | Official warnings, watches, and advisories in force | `locationKey` | | `get_location_by_key` | The full record for a location key you already have | `locationKey` | | `list_neighboring_cities` | Cities adjacent to a location | `locationKey` | | `search_location_by_ip` | The city an IP address resolves to | `ipAddress` | | `list_top_cities_by_region` | Top cities within one region | `regionCode`, `languageId` | | `list_translation_groups` | Translation groups, or one group's translations | `groupId` | | `list_languages` | Supported languages. Resolves a code to an id or back | `code` or `id`, not both | | `get_radar_satellite_map` | Radar and satellite map image links | `size`: `480x480`, `640x480`, `1024x1024` | | `list_active_tropical_storms` | Storms active right now | optional `basin`, then `govId` | | `list_tropical_storms_by_year` | Storms recorded for a past season | `year` required, optional `basin`, then `govId` | | `list_tropical_storm_statuses` | The status vocabulary: depression, storm, hurricane, and so on | optional `basin` | | `get_tropical_storm_details` | One storm's forecast track or position history | `year`, `basin`, `govId`, `kind` | ## Coverage and limits ### Alerts and alarms Alerts and alarms are different. `get_weather_alerts` returns warnings, watches, and advisories issued by official government agencies. `get_weather_alarms` returns AccuWeather forecast-threshold alarms. These are not configurable. AccuWeather derives them from the daily forecast against a fixed set of thresholds for conditions such as heavy rain, snow, and high wind. See [weather alarm thresholds](/documentation/weather-alarm-thresholds) for the values. ### Imagery Radar does not cover every location. Where it is unavailable, the response still returns satellite images. ### Units **Current conditions** returns both imperial and metric units in the same response, so there is no need to specify. **Forecasts** returns imperial units by default. Ask the assistant for metric units directly, such as "Give me the 5-day forecast for Boston in Celsius." **Alarms** and **indices** have no unit setting. Index values are unitless scores. ### Default forecast lengths If a forecast length is not specified, these tools use a default: | Tool | Argument | Default | | --------------------- | -------- | -------- | | `get_daily_forecast` | `days` | 5 days | | `get_hourly_forecast` | `hours` | 12 hours | | `get_weather_alarms` | `days` | 5 days | For any other duration, specify when querying the assistant. ### Tropical storms Find storms by season and basin rather than by location. Ask for storms happening now, or for a past season by year. ### Rejected requests Not every argument applies to every tool. Where one does not, the request returns an error rather than being quietly ignored, so you never get an answer to a question other than the one you asked. A rejected call does not count against your allowance, which is covered in [usage and billing](/documentation/weather-mcp-usage-and-billing). ## Reading a tool error When a call is rejected, the server still returns HTTP 200 and puts the reason in an `error` object. Most clients do not show it, which is why you see "tool execution failed" with nothing else: ```json { "jsonrpc": "2.0", "id": 1, "error": { "code": -32602, "message": "Invalid arguments for tool 'get_weather_alarms': Unrecognized key: \"metric\" at body" } } ``` To read that message, connect with [MCP Inspector](/documentation/weather-mcp-client-connection#mcp-inspector) and call the tool there. It shows the full response, so you can see which argument was refused and try another value. ## Troubleshooting | Issue | Resolution | | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | "Tool execution failed" with no detail | Your client is hiding the reason, usually an invalid value or an argument that does not apply. See [reading a tool error](#reading-a-tool-error). | | A tool you expected is not listed | One tool usually covers several REST endpoints. Every daily forecast, for example, comes from `get_daily_forecast`. Check the catalog above, then the [Core Weather reference](/core-weather). | | Empty alert list for a valid location | No official agency publishes alerts there. This is expected, not an error. | | Radar images missing from a map response | Radar does not cover every location. Satellite images are still returned. | ## What next? - [Usage and billing](/documentation/weather-mcp-usage-and-billing) — what each call costs you - [Client connection](/documentation/weather-mcp-client-connection) — setup examples for common MCP clients - [Core Weather API reference](/core-weather) — the REST endpoints behind each tool --- ## Document: /documentation/weather-mcp-server AccuWeather's remote, read-only MCP server exposes all 91 Core Weather GET endpoints as 26 tools for AI clients and agents. Included with the free trial and Elite plans. URL: /documentation/weather-mcp-server # Weather MCP server AccuWeather's MCP server connects AI clients such as Claude, ChatGPT, and Cursor directly to Core Weather data. Ask a question in one of those tools and it retrieves the forecast, current conditions, or alerts it needs to answer you. It uses the [Model Context Protocol (MCP)](https://modelcontextprotocol.io), an open standard for connecting AI applications to outside data. ## What you get All 91 Core Weather GET endpoints, available as 26 tools your client can call. - **Nothing to switch on.** The server is live for every free trial and Elite subscriber. - **No separate credential.** Your existing free trial or Elite API key works. - **No separate pricing.** Each tool call counts as one Core Weather call. ## Not included MinuteCast™ and Lightning are not served over MCP. Keep calling those over REST. ## What next? - [Endpoint and authentication](/documentation/weather-mcp-authentication) — the URL, your API key, and the two ways to send it - [Client connection](/documentation/weather-mcp-client-connection) — setup for Claude, Cursor, GitHub Copilot, ChatGPT, and MCP Inspector - [Tools](/documentation/weather-mcp-tools) — what each tool returns and what you can ask for - [Usage and billing](/documentation/weather-mcp-usage-and-billing) — what MCP costs on your plan --- ## Document: /documentation/weather-mcp-client-connection Set up the AccuWeather weather MCP server in Claude, Cursor, GitHub Copilot, ChatGPT, and MCP Inspector. URL: /documentation/weather-mcp-client-connection # Client connection AccuWeather's MCP works with many different AI tools. While this page provides instructions for some of the more common options, it is not a comprehensive collection. :::info Replace `YOUR_API_KEY` in the examples below with a key from your [subscriptions page](/subscriptions), then [verify the connection](#verify-the-connection). ::: ## Claude Custom connectors are available on every Claude plan, with limits on how many you can add. On Team and Enterprise, an owner adds the connector for the organization before members can connect to it. ### Custom connector The same custom connector works in the Claude web app and Claude Desktop, and installs nothing. Add it under **Customize** → **Connectors**, using this URL with your free trial or Elite API key in place of `YOUR_API_KEY`: ```text https://dataservice.accuweather.com/mcp?apikey=YOUR_API_KEY ``` Then enable AccuWeather in a conversation from the **+** menu. The key goes in the URL because the connector form has no field for a custom header. Read [send the key](/documentation/weather-mcp-authentication#send-the-key) before you store or share that URL, particularly for an organization-wide connector where more people can see it. For the current click-by-click flow, see [Anthropic's custom connector documentation](https://support.anthropic.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp). :::note{title="Where the connection comes from"} Remote connectors reach AccuWeather from Anthropic's infrastructure, including when you use Claude Desktop. The MCP remote bridge below connects from your own machine instead. This matters if your network restricts outbound traffic, or if you are diagnosing why one works and the other does not. ::: ### Claude Desktop with the MCP remote bridge Use this if you need the server defined in `claude_desktop_config.json`, to share one config file across machines for example. `claude_desktop_config.json` cannot point at a remote server directly, so the entry runs [`mcp-remote`](https://www.npmjs.com/package/mcp-remote), a small helper that connects on its behalf. **Before you begin:** install [Node.js](https://nodejs.org). The helper runs through `npx`, which Node.js provides. 1. In the **Settings** menu, select **Developer**, then select **Edit Config**. This opens the folder containing your configuration file: - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json` - Windows: `%APPDATA%\Claude\claude_desktop_config.json` 2. Open the file in a text editor and merge the AccuWeather server into any existing `mcpServers` entries, including your free trial or Elite API key where indicated. Both forms below authenticate the same way, and both work on every platform. ```json title="Key in an env variable" { "mcpServers": { "accuweather": { "command": "npx", "args": [ "-y", "mcp-remote", "https://dataservice.accuweather.com/mcp", "--header", "Authorization:${AUTH_HEADER}" ], "env": { "AUTH_HEADER": "Bearer YOUR_API_KEY" } } } } ``` ```json title="Key in URL" { "mcpServers": { "accuweather": { "command": "npx", "args": [ "-y", "mcp-remote", "https://dataservice.accuweather.com/mcp?apikey=YOUR_API_KEY" ] } } } ``` The key goes in `env` rather than straight into the `--header` argument because Claude Desktop on Windows mishandles the space in `Bearer YOUR_API_KEY`. The bridge fills the variable in before sending, so AccuWeather still receives the correct header. The "Key in URL" form avoids the space too, since it passes no header at all. 3. Save the file, then quit and relaunch Claude Desktop. 4. Confirm the AccuWeather tools are listed in the tool picker. On Windows, see [bridge fails to launch](#windows-bridge-fails-to-launch) if the server does not start at all. ### Claude Code [Claude Code](https://code.claude.com) adds remote MCP servers from the command line. 1. Run the following command, replacing `YOUR_API_KEY` with your free trial or Elite API key: ```bash claude mcp add --transport http accuweather https://dataservice.accuweather.com/mcp \ --header "Authorization: Bearer YOUR_API_KEY" ``` Without a scope flag, the server is added for the current project on the current machine only. Add `--scope user` to make it available in every project on your machine. 2. Confirm the server was added: ```bash claude mcp list ``` 3. Start a new Claude Code session. Run `/mcp` in the session to check the connection and see the AccuWeather tools. :::warning{title="Never commit an API key"} `--scope project` writes the server into a `.mcp.json` that your team commits, so a literal key in that command ends up in version control. Reference an environment variable instead: ```bash title="Bash or zsh" claude mcp add --transport http --scope project accuweather https://dataservice.accuweather.com/mcp \ --header "Authorization: Bearer \${ACCUWEATHER_API_KEY}" ``` The backslash stops Bash or zsh expanding the variable, so the placeholder rather than your key is written to the file. Other shells escape differently, so check the file afterwards to confirm it contains `${ACCUWEATHER_API_KEY}` and not your key. Each teammate then sets `ACCUWEATHER_API_KEY` in their own environment. Give each person their own key. A key belongs to one subscription, so sharing one means sharing an allowance, and rotating it breaks everyone at once. ::: For the current command reference, see [Claude Code's MCP documentation](https://code.claude.com/docs/en/mcp). ## Cursor Cursor reads MCP servers from a JSON configuration file. 1. Open `~/.cursor/mcp.json` in a text editor. Create the file if it does not exist. 2. Merge the AccuWeather server into any existing `mcpServers` entries, replacing `YOUR_API_KEY` with your free trial or Elite API key: ```json { "mcpServers": { "accuweather": { "url": "https://dataservice.accuweather.com/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } } ``` 3. Save the file and restart Cursor. 4. Open **Customize**, find the AccuWeather server, and confirm its tools are listed. ### Sharing the configuration with your team A workspace `.cursor/mcp.json` works the same way, but it is usually committed to source control. Reference an environment variable instead of a literal key: ```json { "mcpServers": { "accuweather": { "url": "https://dataservice.accuweather.com/mcp", "headers": { "Authorization": "Bearer ${env:ACCUWEATHER_API_KEY}" } } } } ``` Each teammate sets `ACCUWEATHER_API_KEY` themselves, somewhere Cursor can read it. For the current setup flow, see [Cursor's MCP documentation](https://cursor.com/docs/mcp). ## GitHub Copilot ### VS Code You can add the server through **MCP: Add Server**, but editing the configuration file directly is the route documented here because it makes the `Authorization` header explicit and easy to check. 1. Run **MCP: Open User Configuration** from the Command Palette to open your user `mcp.json`, or open `.vscode/mcp.json` to configure a single workspace. Create the file if it does not exist. 2. Merge the following into any existing `servers` and `inputs` entries. The `${input:…}` pattern prompts you for the key and stores it securely, so your key is never written into the file: ```json { "inputs": [ { "type": "promptString", "id": "accuweather-api-key", "description": "AccuWeather free trial or Elite API key", "password": true } ], "servers": { "accuweather": { "type": "http", "url": "https://dataservice.accuweather.com/mcp", "headers": { "Authorization": "Bearer ${input:accuweather-api-key}" } } } } ``` 3. Save the file, then start the server and trust it when VS Code asks. 4. Enter your API key at the prompt. 5. Open the chat input, select **Configure Tools**, and confirm the AccuWeather tools are listed. For the current setup flow, see [VS Code's MCP documentation](https://code.visualstudio.com/docs/agent-customization/mcp-servers). ### JetBrains IDEs This applies to IntelliJ IDEA, PyCharm, WebStorm, and other JetBrains IDEs with GitHub Copilot installed. If your organization manages Copilot, MCP servers may need to be enabled for you first. In Copilot Chat, switch to **Agent** mode and open the MCP server configuration from the tools icon. Merge the following into `mcp.json`, replacing `YOUR_API_KEY` with your free trial or Elite API key. Note that the header goes inside `requestInit`, which differs from the VS Code format above: ```json { "servers": { "accuweather": { "url": "https://dataservice.accuweather.com/mcp", "requestInit": { "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } } } ``` For the current menu path, see [GitHub's MCP documentation](https://docs.github.com/en/copilot/how-tos/provide-context/use-mcp-in-your-ide/extend-copilot-chat-with-mcp). ## ChatGPT ChatGPT connects to MCP servers through developer mode on the web, which paid plans include. On a managed workspace, an administrator may need to enable it or grant you access first. 1. In **Settings**, select **Security and login**, then turn on **Developer mode**. 2. Go to **ChatGPT Plugins** and select the plus button. 3. Enter a name and description. These are what you will see when picking the connection in a conversation, so something like `AccuWeather` works well. 4. Under **Connection**, enter the URL below as the MCP server URL, including your free trial or Elite API key where indicated. ```text https://dataservice.accuweather.com/mcp?apikey=YOUR_API_KEY ``` 5. Select **No authentication**. The key in the URL authenticates the connection. The form also offers **OAuth** and **Mixed authentication**. Neither accepts a custom `Authorization` header, which is why the key goes in the URL. Treat that URL as a secret. 6. Create the connection. It is live once the AccuWeather tools and their descriptions appear on its details page. 7. Open a conversation, select **Developer mode** from the **+** menu in the composer, then select AccuWeather. When several connections offer similar tools, name the one you want in your prompt: "Use the AccuWeather app's `get_daily_forecast` tool for Boston." For the current setup flow, see [OpenAI's developer mode documentation](https://developers.openai.com/api/docs/guides/developer-mode). ## MCP Inspector MCP Inspector is a tool that lists every available tool and lets you call one directly. Use it to confirm your key works before configuring a client. **Before you begin:** install [Node.js](https://nodejs.org) 22.19.0 or newer, which the current Inspector requires. 1. Run the following command, replacing `YOUR_API_KEY` with your free trial or Elite API key: ```bash npx @modelcontextprotocol/inspector --web --server-url https://dataservice.accuweather.com/mcp --transport http --header "Authorization: Bearer YOUR_API_KEY" ``` 2. Open the URL the command prints, then select **Connect**. 3. Select **List Tools** to see the AccuWeather tools, and select any one to call it with your own arguments. For current options and flags, see the [MCP Inspector repository](https://github.com/modelcontextprotocol/inspector). ## Other clients The examples above are not a complete list. Any MCP client that supports a remote Streamable HTTP server, and lets you supply an API key as either an `Authorization` header or a URL parameter, can connect using the details in [endpoint and authentication](/documentation/weather-mcp-authentication). ## Verify the connection Whichever client you set up, confirm it works the same way. Ask your assistant: > What's the 5-day forecast for New York City? **Expected result:** a five-day forecast. You will typically see two AccuWeather tool calls, one to look up New York City and one to fetch the forecast for it, though how your assistant sequences them is up to it. Most clients let you expand a tool call to see what was sent. More than one call for a single question is normal, and each counts against your allowance. See [usage and billing](/documentation/weather-mcp-usage-and-billing). If nothing happens, or the assistant answers without calling a tool, see [troubleshooting](#troubleshooting) below. ## Troubleshooting | Issue | Resolution | | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | No AccuWeather tools appear | Restart the client so it reloads the tool list. Reconnect the connector if you used one. | | Tool names look out of date | Your client is showing a cached list. Restart it, and reconnect the connector. | | `401 Unauthorized` | Check the key is correct and active on the [subscriptions page](/subscriptions). | | `403 Forbidden` | The key is valid but its plan does not include MCP. Only the free trial and Elite plans do. Compare plans on the [pricing page](/pricing). | | `429 Too Many Requests` | You have hit a rate limit. On the free trial this is usually the daily allowance, which resets daily. Wait and retry, or upgrade on the [pricing page](/pricing). | | Only some tools appear | Your client may be limiting how many tools it sends to the model at once. Check its tool settings, and deselect tools from other servers if you have several connected. | ### Windows: bridge fails to launch **Symptom:** Claude Desktop does not start the MCP remote bridge, and reports `'C:\Program' is not recognized as an internal or external command`. **Cause:** Node.js installs to `C:\Program Files\nodejs` by default, and the unquoted space in that path breaks the command when the server is launched. This affects MCP servers generally on Windows, not just AccuWeather's. You only hit it if Node is installed somewhere containing a space, which is why it does not affect every Windows machine. **Resolution:** run `npx` through `cmd` so it resolves from `PATH`, keeping the rest of the entry as it is: ```json { "mcpServers": { "accuweather": { "command": "cmd", "args": [ "/c", "npx", "-y", "mcp-remote", "https://dataservice.accuweather.com/mcp", "--header", "Authorization:${AUTH_HEADER}" ], "env": { "AUTH_HEADER": "Bearer YOUR_API_KEY" } } } } ``` If the `cmd` wrapper causes trouble of its own, point `command` straight at `npx` instead, using either the full path `C:\\Program Files\\nodejs\\npx.cmd` or its short form `C:\\PROGRA~1\\nodejs\\npx.cmd`, and drop `"/c"` and `"npx"` from `args`. Run `where npx` in Command Prompt to confirm the path on your machine. This is a separate problem from the space in `Bearer YOUR_API_KEY`, which the configuration above already avoids by putting the key in `env`. ## What next? - [Tools](/documentation/weather-mcp-tools) — what each tool returns - [Usage and billing](/documentation/weather-mcp-usage-and-billing) — what MCP costs on your plan - [Endpoint and authentication](/documentation/weather-mcp-authentication) — key handling and the `apikey` parameter --- ## Document: /documentation/weather-mcp-authentication The AccuWeather MCP server endpoint and how to authenticate it with your API key, as an Authorization header or an apikey URL parameter. URL: /documentation/weather-mcp-authentication # Endpoint and authentication Your AI client needs two things: the server URL and your AccuWeather API key. One URL covers every tool. ```text https://dataservice.accuweather.com/mcp ``` Get started by providing the server URL above and your API key. See [client connection](/documentation/weather-mcp-client-connection) for instructions. ## Authentication Use the same key you use for the REST API. There is nothing extra to sign up for and no second credential to manage. Your keys are on the [subscriptions page](/subscriptions). The key has to be on the free trial or the Elite plan. If something is wrong, your client will show one of these: | Response | What it means | | ------------------ | ------------------------------------------------------------------------------------------------ | | `401 Unauthorized` | The key is missing, mistyped, or no longer active. | | `403 Forbidden` | The key works, but its plan does not include MCP. Compare plans on the [pricing page](/pricing). | :::info{title="Your assistant never sees the key"} You enter the key once, in your client, and it authenticates the connection itself. The assistant using that connection cannot see your key, ask anyone for it, or repeat it back in a conversation. ::: ### Send the key There are two methods to send your API key. Most clients provide a field for a header. In that case, use: ```http Authorization: Bearer YOUR_API_KEY ``` Some clients only let you paste a URL, with nowhere to put a header. For those, add your key to the URL as an `apikey` parameter instead: ```text https://dataservice.accuweather.com/mcp?apikey=YOUR_API_KEY ``` Either method works, but we recommend using the header when your client offers the option. :::warning{title="Treat a URL with your key in it as a secret"} Including your API key directly in the URL means your API key is visible any time the URL is visible. - Do not commit it to a code repository, paste it into a ticket or chat, or include it in a screenshot. - Expect it to be recorded in browser history, server access logs, and proxy logs. - Rotate the key on the [subscriptions page](/subscriptions) if a URL containing it gets out. ::: ### If your client asks for OAuth Some MCP clients assume every remote server signs users in through OAuth, so they ask for a client ID and client secret, or try to open a sign-in page. AccuWeather uses an API key instead, so there is nothing to enter and no sign-in page. If your client's guided setup requires OAuth, skip the setup and manually enter the server URL and header. See [Client connection](/documentation/weather-mcp-client-connection) for help. ## What next? - [Client connection](/documentation/weather-mcp-client-connection) — setup examples for common MCP clients - [Tools](/documentation/weather-mcp-tools) — what you can call once you are connected - [Authentication](/documentation/authentication) — how API keys work across all AccuWeather APIs --- ## Document: /documentation/weather-icons URL: /documentation/weather-icons # Weather icons | Icon number | Icon | Day | Night | Text | | ----------- | ------------------------------------------------------------------------------------------------------------------------ | --- | ----- | ------------------------- | | 1 | ![Sunny](https://www.accuweather.com/assets/images/weather-icons/v2a/1.svg "Sunny") | Yes | No | Sunny | | 2 | ![Mostly sunny](https://www.accuweather.com/assets/images/weather-icons/v2a/2.svg "Mostly sunny") | Yes | No | Mostly sunny | | 3 | ![Partly sunny](https://www.accuweather.com/assets/images/weather-icons/v2a/3.svg "Partly sunny") | Yes | No | Partly sunny | | 4 | ![Intermittent clouds](https://www.accuweather.com/assets/images/weather-icons/v2a/4.svg "Intermittent clouds") | Yes | No | Intermittent clouds | | 5 | ![Hazy sunshine](https://www.accuweather.com/assets/images/weather-icons/v2a/5.svg "Hazy sunshine") | Yes | No | Hazy sunshine | | 6 | ![Mostly cloudy](https://www.accuweather.com/assets/images/weather-icons/v2a/6.svg "Mostly cloudy") | Yes | No | Mostly cloudy | | 7 | ![Cloudy](https://www.accuweather.com/assets/images/weather-icons/v2a/7.svg "Cloudy") | Yes | Yes | Cloudy | | 8 | ![Dreary](https://www.accuweather.com/assets/images/weather-icons/v2a/8.svg "Dreary") | Yes | Yes | Dreary (overcast) | | 11 | ![Fog](https://www.accuweather.com/assets/images/weather-icons/v2a/11.svg "Fog") | Yes | Yes | Fog | | 12 | ![Showers](https://www.accuweather.com/assets/images/weather-icons/v2a/12.svg "Showers") | Yes | Yes | Showers | | 13 | ![Mostly cloudy w/ showers](https://www.accuweather.com/assets/images/weather-icons/v2a/13.svg "Mostly cloudy w/ showers") | Yes | No | Mostly cloudy w/ showers | | 14 | ![Partly sunny w/ showers](https://www.accuweather.com/assets/images/weather-icons/v2a/14.svg "Partly sunny w/ showers") | Yes | No | Partly sunny w/ showers | | 15 | ![T-storms](https://www.accuweather.com/assets/images/weather-icons/v2a/15.svg "T-storms") | Yes | Yes | T-storms | | 16 | ![Mostly cloudy w/ T-storms](https://www.accuweather.com/assets/images/weather-icons/v2a/16.svg "Mostly cloudy w/ T-storms") | Yes | No | Mostly cloudy w/ T-storms | | 17 | ![Partly sunny w/ T-storms](https://www.accuweather.com/assets/images/weather-icons/v2a/17.svg "Partly sunny w/ T-storms") | Yes | No | Partly sunny w/ T-storms | | 18 | ![Rain](https://www.accuweather.com/assets/images/weather-icons/v2a/18.svg "Rain") | Yes | Yes | Rain | | 19 | ![Flurries](https://www.accuweather.com/assets/images/weather-icons/v2a/19.svg "Flurries") | Yes | Yes | Flurries | | 20 | ![Mostly cloudy w/ flurries](https://www.accuweather.com/assets/images/weather-icons/v2a/20.svg "Mostly cloudy w/ flurries") | Yes | No | Mostly cloudy w/ flurries | | 21 | ![Partly sunny w/ flurries](https://www.accuweather.com/assets/images/weather-icons/v2a/21.svg "Partly sunny w/ flurries") | Yes | No | Partly sunny w/ flurries | | 22 | ![Snow](https://www.accuweather.com/assets/images/weather-icons/v2a/22.svg "Snow") | Yes | Yes | Snow | | 23 | ![Mostly cloudy w/ snow](https://www.accuweather.com/assets/images/weather-icons/v2a/23.svg "Mostly cloudy w/ snow") | Yes | No | Mostly cloudy w/ snow | | 24 | ![Ice](https://www.accuweather.com/assets/images/weather-icons/v2a/24.svg "Ice") | Yes | Yes | Ice | | 25 | ![Sleet](https://www.accuweather.com/assets/images/weather-icons/v2a/25.svg "Sleet") | Yes | Yes | Sleet | | 26 | ![Freezing rain](https://www.accuweather.com/assets/images/weather-icons/v2a/26.svg "Freezing rain") | Yes | Yes | Freezing rain | | 29 | ![Rain and snow](https://www.accuweather.com/assets/images/weather-icons/v2a/29.svg "Rain and snow") | Yes | Yes | Rain and snow | | 30 | ![Hot](https://www.accuweather.com/assets/images/weather-icons/v2a/30.svg "Hot") | Yes | Yes | Hot | | 31 | ![Cold](https://www.accuweather.com/assets/images/weather-icons/v2a/31.svg "Cold") | Yes | Yes | Cold | | 32 | ![Windy](https://www.accuweather.com/assets/images/weather-icons/v2a/32.svg "Windy") | Yes | Yes | Windy | | 33 | ![Clear](https://www.accuweather.com/assets/images/weather-icons/v2a/33.svg "Clear") | No | Yes | Clear | | 34 | ![Mostly clear](https://www.accuweather.com/assets/images/weather-icons/v2a/34.svg "Mostly clear") | No | Yes | Mostly clear | | 35 | ![Partly cloudy](https://www.accuweather.com/assets/images/weather-icons/v2a/35.svg "Partly cloudy") | No | Yes | Partly cloudy | | 36 | ![Intermittent clouds](https://www.accuweather.com/assets/images/weather-icons/v2a/36.svg "Intermittent clouds") | No | Yes | Intermittent clouds | | 37 | ![Hazy moonlight](https://www.accuweather.com/assets/images/weather-icons/v2a/37.svg "Hazy moonlight") | No | Yes | Hazy moonlight | | 38 | ![Mostly cloudy](https://www.accuweather.com/assets/images/weather-icons/v2a/38.svg "Mostly cloudy") | No | Yes | Mostly cloudy | | 39 | ![Partly cloudy w/ showers](https://www.accuweather.com/assets/images/weather-icons/v2a/39.svg "Partly cloudy w/ showers") | No | Yes | Partly cloudy w/ showers | | 40 | ![Mostly cloudy w/ showers](https://www.accuweather.com/assets/images/weather-icons/v2a/40.svg "Mostly cloudy w/ showers") | No | Yes | Mostly cloudy w/ showers | | 41 | ![Partly cloudy w/ T-storms](https://www.accuweather.com/assets/images/weather-icons/v2a/41.svg "Partly cloudy w/ T-storms") | No | Yes | Partly cloudy w/ T-storms | | 42 | ![Mostly cloudy w/ T-storms](https://www.accuweather.com/assets/images/weather-icons/v2a/42.svg "Mostly cloudy w/ T-storms") | No | Yes | Mostly cloudy w/ T-storms | | 43 | ![Mostly cloudy w/ flurries](https://www.accuweather.com/assets/images/weather-icons/v2a/43.svg "Mostly cloudy w/ flurries") | No | Yes | Mostly cloudy w/ flurries | | 44 | ![Mostly cloudy w/ snow](https://www.accuweather.com/assets/images/weather-icons/v2a/44.svg "Mostly cloudy w/ snow") | No | Yes | Mostly cloudy w/ snow | --- ## Document: /documentation/weather-alarm-thresholds URL: /documentation/weather-alarm-thresholds # Weather alarm thresholds AccuWeather weather alarms are determined using the daily forecasts for a location. An alarm exists for a location if the forecast weather meets or exceeds the following thresholds: | Alarm Type | Imperial Threshold | Metric Threshold | | ------------------------ | ------------------ | ---------------- | | Rain | 0.5 inch | 12.7 mm | | Snow | 1 inch | 2.54 cm | | Ice | 0.1 inch | 0.254 mm | | Sustained Wind | 30 mph | 48 kph | | Wind Gust | 40 mph | 64 kph | | Thunderstorm Probability | 75% | 75% | --- ## Document: /documentation/unit-types URL: /documentation/unit-types # Unit types | Type | Symbol | Numeric ID | | --------------------------------- | ---------- | ---------- | | Feet | ft | 0 | | Inches | in | 1 | | Miles | mi | 2 | | Millimeters | mm | 3 | | Centimeters | cm | 4 | | Meters | m | 5 | | Kilometers | km | 6 | | Kilometers per hour | km/h | 7 | | Knots | kts | 8 | | Miles per hour | mi/h | 9 | | Meters per second | m/s | 10 | | HectoPascals | hPa | 11 | | Inches of mercury | inHg | 12 | | KiloPascals | kPa | 13 | | Millibars | mb | 14 | | Millimeters of mercury | mmHg | 15 | | Pounds per square inch | lbs/in² | 16 | | Celsius | C | 17 | | Fahrenheit | F | 18 | | Kelvin | K | 19 | | Percent | % | 20 | | Float | | 21 | | Integer | | 22 | | Body/duration magnitude | Mb | 23 | | Energy magnitude | Me | 24 | | Local magnitude | Ml | 25 | | Moment magnitude | Mi | 26 | | Nuttli surface wave magnitude | MbLg | 27 | | Moment magnitude | Mw | 28 | | Surface wave magnitude | Ms | 29 | | Teleseismic moment magnitude | Mt | 30 | | Micrograms per cubic meter of air | µg/m³ | 31 | | Watt hours per square meter | Wh/m² | 32 | | Watts per square meter | W/m² | 33 | | BTU per hour per square foot | BTU/hr/ft² | 34 | | Cubic meters per cubic meter | m³/m³ | 35 | | Cubic feet per cubic foot | ft³/ft³ | 36 | --- ## Document: /documentation/terms-of-use URL: /documentation/terms-of-use import TosContent from "../../src/terms-of-use/TosContent.tsx"; --- ## Document: /documentation/regions-and-countries URL: /documentation/regions-and-countries # Regions Below are the available regions and their corresponding region codes for use with the API. While each country will only have one primary region listed, any country that spans more than one region will be returned for every region the country falls within. For example, the country of Russia will be returned in both the Europe and Asia lists. | Region code | Region name | | ----------- | --------------- | | AFR | Africa | | ANT | Antarctica | | ARC | Arctic | | ASI | Asia | | CAC | Central America | | EUR | Europe | | MEA | Middle East | | NAM | North America | | OCN | Oceania | | SAM | South America | # Countries Below are the available countries, dependent territories, and special areas of geographical interest, along with their corresponding country code and region for use with the APIs. All of the country codes have been derived from the [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) Alpha-2 codes. | Country | Country code | Region | Region code | | ---------------------------------------- | ------------ | ------------------------------------------- | ----------- | | Afghanistan | AF | Asia | ASI | | Albania | AL | Europe | EUR | | Algeria | DZ | Africa | AFR | | American Samoa | AS | Oceania | OCN | | Andorra | AD | Europe | EUR | | Angola | AO | Africa | AFR | | Anguilla | AI | Central America | CAC | | Antarctica | AQ | Antarctica | ANT | | Antigua and Barbuda | AG | Central America | CAC | | Argentina | AR | South America | SAM | | Armenia | AM | Asia | ASI | | Aruba | AW | Central America | CAC | | Australia | AU | Oceania | OCN | | Austria | AT | Europe | EUR | | Azerbaijan | AZ | Asia | ASI | | Bahamas, The | BS | Central America | CAC | | Bahrain | BH | Middle East | MEA | | Bangladesh | BD | Asia | ASI | | Barbados | BB | Central America | CAC | | Belarus | BY | Europe | EUR | | Belgium | BE | Europe | EUR | | Belize | BZ | Central America | CAC | | Benin | BJ | Africa | AFR | | Bermuda | BM | North America | NAM | | Bhutan | BT | Asia | ASI | | Bolivia | BO | South America | SAM | | Bonaire | BQ | Central America | CAC | | Bosnia and Herzegovina | BA | Europe | EUR | | Botswana | BW | Africa | AFR | | Bouvet Island | BV | Antarctica | ANT | | Brazil | BR | South America | SAM | | British Indian Ocean Territory | IO | Asia | ASI | | British Virgin Islands | VG | Central America | CAC | | Brunei | BN | Asia | ASI | | Bulgaria | BG | Europe | EUR | | Burkina Faso | BF | Africa | AFR | | Burundi | BI | Africa | AFR | | Cambodia | KH | Asia | ASI | | Cameroon | CM | Africa | AFR | | Canada | CA | North America | NAM | | Cape Verde | CV | Africa | AFR | | Cayman Islands | KY | Central America | CAC | | Central African Republic | CF | Africa | AFR | | Chad | TD | Africa | AFR | | Chile | CL | South America | SAM | | China | CN | Asia | ASI | | Christmas Island | CX | Asia | ASI | | Cocos (Keeling) Islands | CC | Asia | ASI | | Colombia | CO | South America | SAM | | Comoros | KM | Africa | AFR | | Cook Islands | CK | Oceania | OCN | | Costa Rica | CR | Central America | CAC | | Cote D'Ivoire | CI | Africa | AFR | | Croatia | HR | Europe | EUR | | Cuba | CU | Central America | CAC | | Curacao | CW | Central America | CAC | | Cyprus | CY | Europe | EUR | | Czech Republic | CZ | Europe | EUR | | Democratic Republic of the Congo | CD | Africa | AFR | | Denmark | DK | Europe | EUR | | Djibouti | DJ | Africa | AFR | | Dominica | DM | Central America | CAC | | Dominican Republic | DO | Central America | CAC | | Ecuador | EC | South America | SAM | | Egypt | EG | Africa | AFR | | El Salvador | SV | Central America | CAC | | Equatorial Guinea | GQ | Africa | AFR | | Eritrea | ER | Africa | AFR | | Estonia | EE | Europe | EUR | | Ethiopia | ET | Africa | AFR | | Falkland Islands | FK | South America | SAM | | Faroe Islands | FO | Europe | EUR | | Federated States of Micronesia | FM | Oceania | OCN | | Fiji | FJ | Oceania | OCN | | Finland | FI | Europe | EUR | | France | FR | Europe | EUR | | French Guiana | GF | South America | SAM | | French Polynesia | PF | Oceania | OCN | | French Southern Territories | TF | Oceania | OCN | | Gabon | GA | Africa | AFR | | Gambia, The | GM | Africa | AFR | | Georgia | GE | Asia | ASI | | Germany | DE | Europe | EUR | | Ghana | GH | Africa | AFR | | Gibraltar | GI | Europe | EUR | | Greece | GR | Europe | EUR | | Greenland | GL | Arctic | ARC | | Grenada | GD | Central America | CAC | | Guadeloupe | GP | Central America | CAC | | Guam | GU | Oceania | OCN | | Guatemala | GT | Central America | CAC | | Guernsey | GG | Europe | EUR | | Guinea | GN | Africa | AFR | | Guinea-Bissau | GW | Africa | AFR | | Guyana | GY | South America | SAM | | Haiti | HT | Central America | CAC | | Heard Island and McDonald Islands | HM | Antarctica | ANT | | Honduras | HN | Central America | CAC | | Hong Kong | HK | Asia | ASI | | Hungary | HU | Europe | EUR | | Iceland | IS | Arctic | ARC | | India | IN | Asia | ASI | | India | IN | Asia | ASI | | Indonesia | ID | Asia | ASI | | Iran | IR | Middle East | MEA | | Iraq | IQ | Middle East | MEA | | Ireland | IE | Europe | EUR | | Isle of Man | IM | Europe | EUR | | Israel | IL | Middle East | MEA | | Italy | IT | Europe | EUR | | Jamaica | JM | Central America | CAC | | Japan | JP | Asia | ASI | | Jersey | JE | Europe | EUR | | Jordan | JO | Middle East | MEA | | Kazakhstan | KZ | Asia | ASI | | Kenya | KE | Africa | AFR | | Kiribati | KI | Oceania | OCN | | Kosovo | XK | Europe | EUR | | Kuwait | KW | Middle East | MEA | | Kyrgyzstan | KG | Asia | ASI | | Laos | LA | Asia | ASI | | Latvia | LV | Europe | EUR | | Lebanon | LB | Middle East | MEA | | Lesotho | LS | Africa | AFR | | Liberia | LR | Africa | AFR | | Libya | LY | Africa | AFR | | Liechtenstein | LI | Europe | EUR | | Lithuania | LT | Europe | EUR | | Luxembourg | LU | Europe | EUR | | Macau | MO | Asia | ASI | | Macedonia | MK | Europe | EUR | | Madagascar | MG | Africa | AFR | | Malawi | MW | Africa | AFR | | Malaysia | MY | Asia | ASI | | Maldives | MV | Asia | ASI | | Mali | ML | Africa | AFR | | Malta | MT | Europe | EUR | | Marshall Islands | MH | Oceania | OCN | | Martinique | MQ | Central America | CAC | | Mauritania | MR | Africa | AFR | | Mauritius | MU | Africa | AFR | | Mayotte | YT | Africa | AFR | | Mexico | MX | North America | NAM | | Moldova | MD | Europe | EUR | | Monaco | MC | Europe | EUR | | Mongolia | MN | Asia | ASI | | Montenegro | ME | Europe | EUR | | Montserrat | MS | Central America | CAC | | Morocco | MA | Africa | AFR | | Mozambique | MZ | Africa | AFR | | Myanmar | MM | Asia | ASI | | Namibia | NA | Africa | AFR | | Nauru | NR | Oceania | OCN | | Nepal | NP | Asia | ASI | | Netherlands | NL | Europe | EUR | | New Caledonia | NC | Oceania | OCN | | New Zealand | NZ | Oceania | OCN | | Nicaragua | NI | Central America | CAC | | Niger | NE | Africa | AFR | | Nigeria | NG | Africa | AFR | | Niue | NU | Oceania | OCN | | Norfolk Island | NF | Oceania | OCN | | North Korea | KP | Asia | ASI | | Northern Mariana Islands | MP | Oceania | OCN | | Norway | NO | Europe | EUR | | Oman | OM | Middle East | MEA | | Pakistan | PK | Asia | ASI | | Palau | PW | Oceania | OCN | | Palestine | PS | Middle East | MEA | | Panama | PA | Central America | CAC | | Papua New Guinea | PG | Oceania | OCN | | Paraguay | PY | South America | SAM | | Peru | PE | South America | SAM | | Philippines | PH | Asia | ASI | | Pitcairn Islands | PN | Oceania | OCN | | Poland | PL | Europe | EUR | | Portugal | PT | Europe | EUR | | Puerto Rico | PR | Central America | CAC | | Qatar | QA | Middle East | MEA | | Republic of the Congo | CG | Africa | AFR | | Reunion | RE | Africa | AFR | | Romania | RO | Europe | EUR | | Russia | RU | Asia | ASI | | Rwanda | RW | Africa | AFR | | Saint Barthelemy | BL | Central America | CAC | | Saint Helena | SH | Africa | AFR | | Saint Kitts and Nevis | KN | Central America | CAC | | Saint Lucia | LC | Central America | CAC | | Saint Martin | MF | Central America | CAC | | Saint Pierre and Miquelon | PM | North America | NAM | | Saint Vincent and the Grenadines | VC | Central America | CAC | | Samoa | WS | Oceania | OCN | | San Marino | SM | Europe | EUR | | Sao Tome and Principe | ST | Africa | AFR | | Saudi Arabia | SA | Middle East | MEA | | Senegal | SN | Africa | AFR | | Serbia | RS | Europe | EUR | | Seychelles | SC | Africa | AFR | | Sierra Leone | SL | Africa | AFR | | Singapore | SG | Asia | ASI | | Sint Maarten | SX | Central America | CAC | | Slovakia | SK | Europe | EUR | | Slovenia | SI | Europe | EUR | | Solomon Islands | SB | Oceania | OCN | | Somalia | SO | Africa | AFR | | South Africa | ZA | Africa | AFR | | South Georgia and South Sandwich Islands | GS | South America | SAM | | South Korea | KR | Asia | ASI | | South Sudan | SS | Africa | AFR | | Spain | ES | Europe | EUR | | Spratly Islands | SP | Asia | ASI | | Sri Lanka | LK | Asia | ASI | | Sudan | SD | Africa | AFR | | Suriname | SR | South America | SAM | | Svalbard And Jan Mayen | SJ | Europe | EUR | | Swaziland | SZ | Africa | AFR | | Sweden | SE | Europe | EUR | | Switzerland | CH | Europe | EUR | | Syria | SY | Middle East | MEA | | Taiwan | TW | Asia | ASI | | Tajikistan | TJ | Asia | ASI | | Tanzania | TZ | Africa | AFR | | Thailand | TH | Asia | ASI | | Timor-Leste | TL | Asia | ASI | | Togo | TG | Africa | AFR | | Tokelau | TK | Oceania | OCN | | Tonga | TO | Oceania | OCN | | Trinidad and Tobago | TT | Central America | CAC | | Tunisia | TN | Africa | AFR | | Turkey | TR | Middle East | MEA | | Turkmenistan | TM | Asia | ASI | | Turks and Caicos Islands | TC | Central America | CAC | | Tuvalu | TV | Oceania | OCN | | Uganda | UG | Africa | AFR | | Ukraine | UA | Europe | EUR | | United Arab Emirates | AE | Middle East | MEA | | United Kingdom | GB | Europe | EUR | | United States | US | North America | NAM | | United States Minor Outlying Islands | UM | Oceania | OCN | | Uruguay | UY | South America | SAM | | US Virgin Islands | VI | Central America | CAC | | Uzbekistan | UZ | Asia | ASI | | Vanuatu | VU | Oceania | OCN | | Vatican City | VA | Europe | EUR | | Venezuela | VE | South America | SAM | | Vietnam | VN | Asia | ASI | | Wallis and Futuna | WF | Oceania | OCN | | Western Sahara | EH | Africa | AFR | | Yemen | YE | Middle East | MEA | | Zambia | ZM | Africa | AFR | | Zimbabwe | ZW | Africa | AFR | --- ## Document: /documentation/point-of-interest-types URL: /documentation/point-of-interest-types # Point-of-interest types | POI type ID | POI type | | ----------- | --------------- | | 1 | Amusement Park | | 2 | Aquarium | | 3 | Art | | 4 | Balloon | | 5 | Stadium | | 6 | Botanical | | 7 | Brewery | | 8 | Winery | | 9 | Vineyard | | 10 | Distillery | | 11 | Building | | 12 | Casino | | 13 | Driving Range | | 14 | Embassy | | 15 | Observatory | | 16 | Performing Arts | | 17 | Planetarium | | 18 | Resort | | 19 | Shopping | | 20 | Zoo | | 21 | Tennis | | 22 | Sports | | 23 | Racing | | 24 | Polo | | 25 | Ski | | 26 | Camp | | 27 | County Park | | 28 | National Park | | 29 | Nature Preserve | | 30 | State Park | | 31 | Waterfall | | 32 | Bridge | | 33 | Historic | | 34 | Monument/Statue | | 35 | Museum | | 36 | State Capitol | | 37 | Random | | 38 | Airports | | 39 | Olympics | --- ## Document: /documentation/overview URL: /documentation/overview # AccuWeather APIs Your gateway to the world’s most accurate, hyper-local, and globally trusted weather data. Whether you're building a mobile app, web platform, or IoT solution, our APIs empower you to deliver timely and relevant weather intelligence that keeps users informed, engaged, and prepared. --- ## Global reach, local precision, built for developers AccuWeather offers superior accuracy and globally-scalable RESTful APIs. - Hyper-local forecasts, updated in real time - Global coverage with **200+ languages and dialects** - Seamless integration across industries and platforms - Detailed API documentation: [Core Weather](/core-weather)—[MinuteCast™](/minutecast)—[Lightning](/lightning) --- ## Core Weather APIs ### [Locations](/core-weather/text-search) Easily retrieve location data using: - City names/documentation/location-keys - ZIP/postal codes - GPS coordinates - Points of interest Use [location keys](/documentation/location-keys) to access all other weather content such as current conditions, forecasts, alerts, and more for millions of locations worldwide. ### [Current Conditions](/core-weather/location-key-currentconditions) Get real-time observations with: - Temperature, humidity, wind, air pressure - Visibility, UV index, and cloud cover - RealFeel™ temperature and weather descriptions ### [Hourly Forecasts](/core-weather/location-key-hourly) & [Daily Forecasts](/core-weather/location-key-daily) Plan ahead with forecast intervals including: - 1-hour, 12-hour, 24-hour, 72-hour and 120-hour **hourly** forecasts - 1-day, 5-day, 7-day, 10-day, and 15-day **daily** forecasts - Includes detailed weather phrases, temperature, wind speed/direction, sunrise/sunset, moon phases, precipitation probabilities, and more ### [Indices](/core-weather/1-day) Deliver lifestyle insights with [indices](/documentation/indices) like: - Travel, Dog Walking, Hair Frizz - Cold & Flu, Arthritis, Migraine, - Running, Ski Weather, Mosquito, and more ### [Alerts](/core-weather/location-key-alerts) Keep users safe with: - Severe weather alerts from official Government Meteorological Agencies and leading global weather alert providers ### **[Alarms](/core-weather/location-key-alarms)** - [Threshold-based](/documentation/weather-alarm-thresholds) alarms determined using daily forecasts ### **[Imagery Maps](/core-weather/location-key-maps)** Visualize weather with: - Global satellite and radar images of varying resolutions ### **[Tropical](/core-weather/active)** Monitor and analyze tropical cyclones worldwide - Active government-issued tropical cyclones across all basins - Current and forecasted storm positions with latitude/longitude, wind speeds, pressure, and movement details - Wind radii summaries indicating the extent of wind fields at various thresholds - Proximity information to major landmarks or population centers ### **[Translations](/core-weather/groups-translations)** - Enables localization of weather content in over 200 languages and dialects --- ## MinuteCast™ API ### **[MinuteCast™](/minutecast)** - Hyper-local **minute-by-minute precipitation forecasts** for the next 2 hours - Forecast start/stop times for rain, snow, and mixed precipitation - Coverage is worldwide - Ideal for navigation, outdoor apps, utilities, and safety-critical use cases --- ## Lightning API ### [Lightning Forecasts](/lightning/geoposition-forecast-lightning) - Lightning probability forecasts by latitude and longitude - Forecasts estimate the likelihood of at least one lightning strike occurring in 10-minute intervals over a 2-hour window - Outstanding for weather safety apps, outdoor activity planners, short-range alerts, and more ### [Current Lightning](/lightning/radius-lightning) - Search for lightning strikes by geographic coordinates - Define a point and radius, or specify the northwest and southeast corners of a bounding box - GeoJSON responses are ready to drop into mapping libraries like Leaflet, Mapbox GL, or Google Maps ### [Historical Lightning](/lightning/geoposition-radius-historical) - Search for lightning strikes that occurred more than 120 minutes (two hours) before your query - Access one 24-hour period at a time, with records reaching back to January 1, 2006 - JSON response with embedded GeoJSON geometry. --- ## Subscription Packages Choose the plan that best fits your application needs. **Core Weather API packages** and **MinuteCast™ packages** are billed separately, with the **Free tier** offering limited access to both. [View All Plans](/pricing) ### Core Weather API Packages | Plan | Price | Key Features | CPM Overage | | -------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | | **Free** | $0/month | 14-day trial, 500 daily calls for Core Weather APIs with MCP access | Not available | | **Starter** | $2/month | 15,000 monthly calls, Current Conditions, 12-hour Forecasts 5-day Forecasts | $0.25 CPM over 15,000 calls/month | | **Standard** | $25/month | 225,000 monthly calls, 12-hour Forecasts, 5-day Forecasts, 5-day Indices | $0.12 CPM over 225,000 calls/month | | **Prime** | $250/month | 1,800,000 monthly calls, 72-hour Forecasts, 10-day Forecasts, Alerts, Tropical, Imagery | $0.15 CPM over 1,800,000 calls/month | | **Elite** | $500/month | 2,400,000 monthly calls, Full API suite, 120-hour Forecasts, 15-day Forecasts, 15 day Indices, Alerts, Tropical, Imagery, MCP access | $0.22 CPM over 2,400,000 calls/month | | **Enterprise** | [Contact us](/contact-us) | Custom call volume, 90-day Daily Forecasts, 240-hour Hourly Forecasts, AccuWeather Alerts, Lightning, Air Quality, Satellite and Radar, enterprise-grade support, global coverage, MCP Access available | [Contact us](/contact-us) | ### MinuteCast™ Packages | Plan | Price | Key Features | CPM Overage | | -------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | | **Free** | $0/month | 50 daily calls for MinuteCast™ | Not available | | **Lite** | $25/month | 10,000 monthly calls, MinuteCast™ access, basic precipitation insight | $0.18 CPM over 10,000 calls/month | | **Full** | $100/month | 675,000 monthly calls, MinuteCast™ access, basic precipitation insight | $0.12 CPM over 675,000 calls/month | | **Enterprise** | [Contact us](/contact-us) | Custom call volume, premium 1-, 5-, and 15-minute intervals, 2-hour Forecasts, full precipitation color spectrum, Radar reflectivity values (dBZ), rain/snow/ice/mix typing, enterprise grade support | [Contact us](/contact-us) | ### Lightning Packages | Plan | Price | Key Features | CPM Overage | | ---------- | ------------------------------ | ----------------------------------------------------------------------------- | ------------------------------ | | Free | $0/month | 50 daily calls for Lightning | Not available | | Enterprise | [Contact us](/contact-us) | Custom call volume, Lightning Forecasts, current strike data, historical data | [Contact us](/contact-us) | ## Get Started Bring superior weather accuracy to your application today. [Sign up](/subscriptions) and start building with the AccuWeather [Core Weather](/documentation/core-weather-quick-start) and [MinuteCast™](/documentation/minutecast-quick-start) APIs --- --- ## Document: /documentation/minutecast-quick-start URL: /documentation/minutecast-quick-start # MinuteCast™ quick-start AccuWeather's MinuteCast™ API provides access to minute-by-minute forecast data from around the world. Let's make a call to the 120-minute endpoint. First we need geographical coordinates for our forecast location. The MinuteCast™ API accepts any coordinate pair, but let's use the coordinates for New York City to start: 40.7127°N 74.0059°W. Now we can get the MinuteCast™ forecast by making a `GET` request to {import.meta.env.ZUPLO_PUBLIC_API_BASE_URL}/forecasts/v1/minute?q=40.7127,74.0059 and sending your API key. You can use our test console below to call the API right now ([log in](/signin) to get your free API key if you haven't already). ## What next? Check out the full [MinuteCast™ API](/minutecast) to build the weather experience like never before. ## Want more? [Contact our sales department](/contact-us) to learn how you can leverage our full range of weather API offerings. --- ## Document: /documentation/locations-info URL: /documentation/locations-info # General information AccuWeather's APIs use location keys to identify precise geographic locations. Use AccuWeather's Locations API to return world-wide location keys for cities, postal codes, and points of interest in more than 200 languages and dialects. Search by WGS-84 coordinates on geoposition endpoints. By default, specific details about the location such as designated market area, station code, and population are not returned. Add `details=true` to the URL to return extended information about the location. ## Cities City searches include more than 3.5 million locations, including 1.7 million verified locations. Many cities have alternate names, or aliases, defined to provide flexibility when searching for a particular location. Aliases are used to account for common alternate spellings (such as Saint Louis, St. Louis, or St Louis), historical names (Ho Chi Minh City, Saigon), and accepted alternate names (Derry, Londonderry). - Only verified locations will be used in GeoLookup and AutoComplete searches. - Only verified locations will be supported for localizations (translations). - City searches will always be returned in order of rank, with the most important cities listed at the top. ## Postal codes One postal code can point to many locations. Use a location key to get back to a specific postal code. In many cases, the name for a particular postal code is derived from the location of the post office responsible for that postal code. These names often differ from the cities located in that same area. Since postal codes can cover a large area, derived data is mapped based on what best represents the whole area of the postal code. Verified postal code searching is available for the following countries, with the root level of the code in red. - Canada - Follows the format A0A 0A0. All lookups are based on the Forward Sortation Areas, or FSA, part of the postal code. - Germany - Follows the format 00000. Many of the postal code names are available in German as well as English. - United Kingdom - Follows the format A0 0AA, A00 0AA, AA0 0AA, AA00 0AA, A0A 0AA, or AA0A 0AA. All lookups are based on the Postcode Sector. The UK Postal Code system also includes support for the following areas: Guernsey, Isle of Man, and Jersey. - United States - Follows the format 00000. The US Postal Code system also includes support for the following areas: American Samoa, Federated States of Micronesia, Guam, Marshall Islands, Northern Mariana Islands, Palau, Puerto Rico, and the US Virgin Islands. Unverified postal code search is available for the countries listed below. | Country | Country Code | Postal Code Format | |----------------|--------------|--------------------| | Andorra | AD | AD000 | | Argentina | AR | 0000 | | Australia | AU | 0000 | | Austria | AT | 0000 | | Belgium | BE | 0000 | | Brazil | BR | 00000 | | Bulgaria | BG | 0000 | | Croatia | HR | 00000 | | Czech Republic | CZ | 000 00 | | Denmark | DK | 0000 | | Finland | FI | 00000 | | France | FR | 00000 | | Guatemala | GT | 00000 | | Hungary | HU | 0000 | | India | IN | 000000 | | Italy | IT | 00000 | | Luxembourg | LU | 0000 | | Mexico | MX | 00000 | | Moldova | MD | 0000 | | Netherlands | NL | 0000 | | New Zealand | NZ | 0000 | | Norway | NO | 0000 | | Poland | PL | 00-000 | | Russia | RU | 000000 | | Slovakia | SK | 000 00 | | Slovenia | SI | 0000 | | Spain | ES | 00000 | | Sweden | SE | 000 00 | | Switzerland | CH | 0000 | ## Points of interest A point of interest (POI) is frequently used to refer to a business location, tourist location, or other well-known site. Common examples of POIs available are airports, stadiums, and parks. More than 50,000 searchable worldwide POIs. More than 12,000 airports, including the ability to search by airport codes (FAA, ICAO, or IATA). A search autocomplete feature is available. POI data is primarily focused on the US, with plans to expand to other countries in the near future, including support for localized names. Supported POI types are listed below. | POI Type ID | POI Type | |-------------|------------------| | 1 | Amusement Park | | 2 | Aquarium | | 3 | Art | | 4 | Balloon | | 5 | Stadium | | 6 | Botanical | | 7 | Brewery | | 8 | Winery | | 9 | Vineyard | | 10 | Distillery | | 11 | Building | | 12 | Casino | | 13 | Driving Range | | 14 | Embassy | | 15 | Observatory | | 16 | Performing Arts | | 17 | Planetarium | | 18 | Resort | | 19 | Shopping | | 20 | Zoo | | 21 | Tennis | | 22 | Sports | | 23 | Racing | | 24 | Polo | | 25 | Ski | | 26 | Camp | | 27 | County Park | | 28 | National Park | | 29 | Nature Preserve | | 30 | State Park | | 31 | Waterfall | | 32 | Bridge | | 33 | Historic | | 34 | Monument/ Statue | | 35 | Museum | | 36 | State Capitol | | 37 | Random | | 38 | Airports | | 39 | Olympics | ## Time zones Time zone information is returned with location information for all forecast points in the Locations API. Time zone information for any lat/lon, including marine areas and areas with no forecast points, is available through a separate time zone query. --- ## Document: /documentation/location-keys URL: /documentation/location-keys # 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: ```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[] = 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 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" ``` 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: ```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[] = 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 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" ``` This returns the current conditions for San Francisco, CA. --- ## Document: /documentation/last-actions URL: /documentation/last-actions # Last actions | Last Action Value | Definition | | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | New | Used for an initial issuance of an event. | | Extend | Alert has been extended in time or area or both. An alert is extended (in time) when the valid time period of an existing event has been made longer or shorter by changing either or both the areas.startDateTime or areas.endDateTime. An alert is extended (in area) when the valid area of an existing event has been expanded from its previous issuance. An alert can also be extended in both area and time when the valid time period of an existing event has been changed (made longer or shorter) and the valid area has been expanded. | | Cancel | Active alert has been canceled prior to original expiration time. | | Correct | Alert has been modified to correct an error. | | Expire | Alert has expired and is no longer active. Expire is primarily used in a concluding message, while the event is still active, to notify users that an event will be allowed to expire at the scheduled event ending time. It can also be used just after event expiration, to pass along final wrap-up information about the event. | | Upgrade | Upgrade is used when an existing event is upgraded for the same area to a higher eventClass, for example, from a watch to an advisory or warning, or from an advisory to a warning. | | Continue | Continue is used when providing updates to an existing event, where no changes were made to the area, valid time period, or eventClass. | | Update | Update to an active event. | --- ## Document: /documentation/languages-localizations URL: /documentation/languages-localizations # Languages and localizations Listed below are all available languages and their corresponding language codes for use with the API. All of the language codes are derived from the [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) Alpha-2 codes. Additinal localizations, where available, are listed below their respective language. All of the localization codes are derived from the [Microsoft language codes](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/) | Language | Language code | Localization | | ----------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Arabic | ar | ar-dz   -   Algeria

ar-bh   -   Bahrain

ar-eg   -   Egypt

ar-iq   -   Iraq

ar-jo   -   Jordan

ar-kw   -   Kuwait

ar-lb   -   Lebanon

ar-ly   -   Libya

ar-ma   -   Morocco

ar-om   -   Oman

ar-qa   -   Qatar

ar-sa   -   Saudi Arabia

ar-sd   -   Sudan

ar-sy   -   Syria

ar-tn   -   Tunisia

ar-ae   -   U.A.E.

ar-ye   -   Yemen | | Azerbaijani | az | az-latn   -   Latin

az-latn-az   -   Latin, Azerbaijan | | Bengali | bn | bn-bd   -   Bangladesh

bn-in   -   India | | Bosnian | bs | bs-ba   -   Bosnia and Herzegovina | | Bulgarian | bg | bg-bg   -   Bulgaria | | Catalan | ca | ca-es   -   Spain | | Chinese | zh | zh-hk   -   Hong Kong SAR

zh-mo   -   Macao SAR

zh-cn   -   Simplified, PRC

zh-hans   -   Simplified

zh-hans-cn   -   Simplified, China

zh-hans-hk   -   Simplified, Hong Kong SAR China

zh-hans-mo   -   Simplified, Macau SAR China

zh-hans-sg   -   Simplified, Singapore

zh-sg   -   Singapore

zh-tw   -   Taiwan

zh-hant   -   Traditional

zh-hant-hk   -   Traditional, Hong Kong SAR China

zh-hant-mo   -   Traditional, Macau SAR China

zh-hant-tw   -   Traditional, Taiwan | | Croatian | hr | hr-hr   -   Croatia | | Czech | cs | cs-cz   -   Czech Republic | | Danish | da | da-dk   -   Denmark | | Dutch | nl | nl-aw   -   Aruba

nl-be   -   Belgium

nl-cw   -   Curacao

nl-nl   -   Netherlands

nl-sx   -   Sint Maarten | | English | en | en-as   -   American Samoa

en-us   -   United States

en-au   -   Australia

en-bb   -   Barbados

en-be   -   Belgium

en-bz   -   Belize

en-bm   -   Bermuda

en-bw   -   Botswana

en-cm   -   Cameroon

en-ca   -   Canada

en-gh   -   Ghana

en-gu   -   Guam

en-gy   -   Guyana

en-hk   -   Hong Kong SAR China

en-in   -   India

en-ie   -   Ireland

en-jm   -   Jamaica

en-ke   -   Kenya

en-mw   -   Malawi

en-my   -   Malaysia

en-mt   -   Malta

en-mh   -   Marshall Islands

en-mu   -   Mauritius

en-na   -   Namibia

en-nz   -   New Zealand

en-ng   -   Nigeria

en-mp   -   Northern Mariana Islands

en-pk   -   Pakistan

en-ph   -   Philippines

en-rw   -   Rwanda

en-sg   -   Singapore

en-za   -   South Africa

en-tz   -   Tanzania

en-th   -   Thailand

en-tt   -   Trinidad and Tobago

en-um   -   U.S. Minor Outlying Islands

en-vi   -   U.S. Virgin Islands

en-ug   -   Uganda

en-gb   -   United Kingdom

en-zm   -   Zambia

en-zw   -   Zimbabwe | | Estonian | et | et-ee   -   Estonia | | Farsi | fa | fa-af   -   Afghanistan

fa-ir   -   Iran | | Filipino | fil | fil-ph   -   Philippines | | Finnish | fi | fi-fi   -   Finland | | French | fr | fr-dz   -   Algeria

fr-be   -   Belgium

fr-bj   -   Benin

fr-bf   -   Burkina Faso

fr-bi   -   Burundi

fr-cm   -   Cameroon

fr-ca   -   Canada

fr-cf   -   Central African Republic

fr-td   -   Chad

fr-km   -   Comoros

fr-cg   -   Congo - Brazzaville

fr-cd   -   Congo - Kinshasa

fr-ci   -   Cote d'Ivoire

fr-dj   -   Djibouti

fr-gq   -   Equatorial Guinea

fr-fr   -   France

fr-gf   -   French Guiana

fr-ga   -   Gabon

fr-gp   -   Guadeloupe

fr-gn   -   Guinea

fr-lu   -   Luxembourg

fr-mg   -   Madagascar

fr-ml   -   Mali

fr-mq   -   Martinique

fr-mu   -   Mauritius

fr-yt   -   Mayotte

fr-mc   -   Monaco

fr-ma   -   Morocco

fr-ne   -   Niger

fr-re   -   Reunion

fr-rw   -   Rwanda

fr-bl   -   Saint Barthelemy

fr-mf   -   Saint Martin

fr-sn   -   Senegal

fr-sc   -   Seychelles

fr-ch   -   Switzerland

fr-tg   -   Togo

fr-tn   -   Tunisia | | German | de | de-at   -   Austria

de-be   -   Belgium

de-de   -   Germany

de-li   -   Liechtenstein

de-lu   -   Luxembourg

de-ch   -   Switzerland | | Greek | el | el-cy   -   Cyprus

el-gr   -   Greece | | Gujarati | gu | | | Hebrew | he | he-il   -   Israel | | Hindi | hi | hi-in   -   India | | Hungarian | hu | hu-hu   -   Hungary | | Icelandic | is | is-is   -   Iceland | | Indonesian | id | id-id   -   Indonesia | | Italian | it | it-it   -   Italy

it-ch   -   Switzerland | | Japanese | ja | ja-jp   -   Japan | | Kannada | kn | | | Kazakh | kk | kk-kz   -   Kazakhstan | | Korean | ko | ko-kr   -   South Korea | | Latvian | lv | lv-lv   -   Latvia | | Lithuanian | lt | lt-lt   -   Lithuania | | Macedonian | mk | mk-mk   -   Macedonia | | Malay | ms | ms-bn   -   Brunei

ms-my   -   Malaysia | | Marathi | mr | | | Norwegian | nb | | | Polish | pl | pl-pl   -   Poland | | Portuguese | pt | pt-ao   -   Angola

pt-br   -   Brazil

pt-cv   -   Cape Verde

pt-gw   -   Guinea-Bissau

pt-mz   -   Mozambique

pt-pt   -   Portugal

pt-st   -   Sao Tome and Principe | | Punjabi | pa | pa-in   -   India | | Romanian | ro | ro-md   -   Moldova

ro-mo   -   Republic of Moldova

ro-ro   -   Romania | | Russian | ru | ru-md   -   Moldova

ru-mo   -   Republic of Moldova

ru-ru   -   Russia

ru-ua   -   Ukraine | | Serbian | sr | sr-latn   -   Latin

sr-latn-ba   -   Latin, Bosnia and Herzegovina

sr-me   -   Montenegrin

sr-rs   -   Serbia | | Slovak | sk | sk-sk   -   Slovakia | | Slovenian | sl | sl-sl   -   Slovenia | | Spanish | es | es-ar   -   Argentina

es-bo   -   Bolivia

es-cl   -   Chile

es-co   -   Colombia

es-cr   -   Costa Rica

es-do   -   Dominican Republic

es-ec   -   Ecuador

es-sv   -   El Salvador

es-gq   -   Equatorial Guinea

es-gt   -   Guatemala

es-hn   -   Honduras

es-419   -   Latin America

es-mx   -   Mexico

es-ni   -   Nicaragua

es-pa   -   Panama

es-py   -   Paraguay

es-pe   -   Peru

es-pr   -   Puerto Rico

es-es   -   Spain

es-us   -   United States

es-uy   -   Uruguay

es-ve   -   Venezuela | | Swahili | sw | sw-cd   -   Democratic Republic of the Congo

sw-ke   -   Kenya

sw-tz   -   Tanzania

sw-ug   -   Uganda | | Swedish | sv | sv-fi   -   Finland

sv-se   -   Sweden | | Tagalog | tl | | | Tamil | ta | ta-in   -   India

ta-lk   -   Sri Lanka | | Telegu | te | te-in   -   India | | Thai | th | th-th   -   Thailand | | Turkish | tr | tr-tr   -   Turkey | | Ukrainian | uk | uk-ua   -   Ukraine | | Urdu | ur | ur-bd   -   Bangladesh

ur-in   -   India

ur-np   -   Nepal

ur-pk   -   Pakistan | | Uzbek | uz | uz-latn   -   Latin

uz-latn-uz   -   Latin, Uzbekistan | | Vietnamese | vi | vi-vn   -   Vietnam | --- ## Document: /documentation/indices URL: /documentation/indices # Index list The Daily Index API provides daily index data for a specific location. The index data includes the following: | Index Name | ID | | ---------------------------- | ---- | | AccuLumen Brightness Index™ | 47 | | Air quality | \-10 | | Arthritis Pain | 21 | | Asthma | 23 | | Beach & Pool | 10 | | Bicycling | 4 | | Car washing forecast | 51 | | Clothes drying forecast | 50 | | Common Cold | 25 | | Composting | 38 | | Construction | 14 | | COPD | 44 | | Dog Walking Comfort | 43 | | Driving | 40 | | Dry skin forecast | 48 | | Dust & Dander | 18 | | Field Readiness | 32 | | Fishing | 13 | | Flight Delays | \-3 | | Flu | 26 | | Flying Travel Index | 31 | | Fuel Economy | 37 | | Golf Weather | 5 | | Grass Growing | 33 | | Grass pollen | \-11 | | Hair Frizz | 42 | | Healthy Heart Fitness | 16 | | Hiking | 3 | | Home Energy Efficiency | 36 | | Hunting | 20 | | Indoor Activity | \-2 | | Jogging | 2 | | Kite Flying | 9 | | Lawn Mowing | 28 | | Makeup and skincare forecast | 49 | | Migraine Headache | 27 | | Mold pollen | \-12 | | Morning School Bus | 35 | | Mosquito Activity | 17 | | Outdoor Activity | 29 | | Outdoor Barbecue | 24 | | Outdoor Concert | 8 | | Ragweed pollen | \-13 | | Running | 1 | | Tennis | 6 | | Thirst | 41 | | Tree pollen | \-14 | | Sailing | 11 | | Shopping | 39 | | Sinus Headache | 30 | | Skateboarding | 7 | | Ski Weather | 15 | | Snow Days | 19 | | Soil Moisture | 34 | | Stargazing | 12 | | UV index | \-15 | --- ## Document: /documentation/index-categories URL: /documentation/index-categories # Daily Index Categories and Level Values **The categories and value ranges in table 1 apply to the following indices/IDs:** - Indoor activity / -2 - Running / 1 - Jogging / 2 - Hiking / 3 - Bicycling / 4 - Golf weather / 5 - Tennis / 6 - Skateboarding / 7 - Outdoor concert / 8 - Kite flying / 9 - Beach & pool / 10 - Sailing / 11 - Stargazing / 12 - Fishing / 13 - Construction / 14 - Ski weather / 15 - Healthy heart fitness / 16 - Hunting / 20 - Outdoor barbecue / 24 - Lawn mowing / 28 - Outdoor activity / 29 - Field readiness / 32 - Grass growing / 33 - Soil moisture / 34 - Morning school bus / 35 - Home energy efficiency / 36 - Fuel economy / 37 - Composting / 38 - Shopping / 39 - Dog walking comfort / 43 - Clothes drying forecast / 50 - Car washing forecast / 51 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Poor | 0 | 2.99 | | Fair | 3 | 4.99 | | Good | 5 | 6.99 | | Very Good | 7 | 8.99 | | Excellent | 9 | 10 | --- **The categories and value ranges in table 2 apply to the following indices/IDs:** - Mosquito activity / 17 - Dust & dander / 18 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Low | 0 | 1.99 | | Moderate | 2 | 3.99 | | High | 4 | 5.99 | | Very High | 6 | 7.99 | | Extreme | 8 | 10 | --- **The categories and value ranges in table 3 apply to the following indices/IDs:** - Snow Days / 19 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Very Unlikely | 0 | 1.99 | | Unlikely | 2 | 3.99 | | Possibly | 4 | 5.99 | | Likely | 6 | 7.99 | | Very Likely | 8 | 10 | --- **The categories and value ranges in table 4 apply to the following indices/IDs:** - Driving / 40 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Poor | 0 | 3 | | Fair | 3.01 | 6 | | Good | 6.01 | 7.5 | | Very Good | 7.51 | 8.99 | | Excellent | 9 | 10 | --- **The categories and value ranges in table 5 apply to the following indices/IDs:** - Thirst / 41 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Low | 0 | 2.99 | | Moderate | 3 | 4.99 | | High | 5 | 6.99 | | Very High | 7 | 8.99 | | Extreme | 9 | 10 | --- **The categories and value ranges in table 6 apply to the following indices/IDs:** - Hair Frizz / 42 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Unlikely | 0 | 2.99 | | Watch | 3 | 4.99 | | Advisory | 5 | 6.99 | | Warning | 7 | 8.99 | | Emergency | 9 | 10 | --- **The categories and value ranges in table 7 apply to the following indices/IDs:** - Arthritis Pain / 21 - Asthma / 23 - Common Cold / 25 - Flu / 26 - Migraine Headache / 27 - Sinus Headache / 30 - COPD / 44 | | | | | --------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Beneficial | 0 | 1.99 | | Neutral | 2 | 3.99 | | At Risk | 4 | 5.99 | | At High Risk | 6 | 7.99 | | At Extreme Risk | 8 | 10 | --- **The categories and value ranges in table 8 apply to the following indices/IDs:** - Flight Delays / -3 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Very Likely | 0.00 | 1.00 | | Likely | 1.01 | 3.00 | | Possibly | 3.01 | 5.00 | | Unlikely | 5.01 | 7.00 | | Very Unlikely | 7.01 | 10.00 | --- **The categories and value ranges in table 9 apply to the following indices/IDs:** - Flying Travel / 31 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Excellent | 0.00 | 1.00 | | Very Good | 1.01 | 3.00 | | Good | 3.01 | 5.00 | | Fair | 5.01 | 7.00 | | Poor | 7.01 | 10.00 | --- **The categories and value ranges in table 10 apply to the following indices/IDs:** - Air quality / -10 | | | | | ------------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Good | 0.00 | 50.00 | | Moderate | 50.01 | 100.00 | | Unhealthy sensitive | 100.01 | 150.00 | | Unhealthy | 150.01 | 200.00 | | Very unhealthy | 200.01 | 300.00 | | Hazardous | 300.01 | 100000.00 | --- **The categories and value ranges in table 11 apply to the following indices/IDs:** - Grass pollen / -11 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Low | 0 | 4.99 | | Moderate | 5 | 19.99 | | High | 20 | 199.99 | | Very High | 200 | 299.99 | | Extreme | 300 | 1000000 | --- **The categories and value ranges in table 12 apply to the following indices/IDs:** - Mold pollen / -12 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Low | 0 | 6499.99 | | Moderate | 6500 | 12999.99 | | High | 13000 | 49999.99 | | Very High | 50000 | 64999.99 | | Extreme | 65000 | 1000000 | --- **The categories and value ranges in table 13 apply to the following indices/IDs:** - Ragweed pollen / -13 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Low | 0 | 9.99 | | Moderate | 10 | 49.99 | | High | 50 | 499.99 | | Very High | 500 | 649.99 | | Extreme | 650 | 1000000 | --- **The categories and value ranges in table 14 apply to the following indices/IDs:** - Tree pollen / -14 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Low | 0 | 14.99 | | Moderate | 15 | 89.99 | | High | 90 | 1499.99 | | Very High | 1500 | 2999.99 | | Extreme | 3000 | 1000000 | --- **The categories and value ranges in table 15 apply to the following indices/IDs:** - UV index / -15 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Low | 0 | 2.49 | | Moderate | 2.5 | 5.49 | | High | 5.5 | 7.49 | | Very High | 7.5 | 10.499 | --- **The categories and value ranges in table 16 apply to the following indices/IDs:** - AccuLumen Brightness Index™ / 47 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Dark | 0 | 2.99 | | Dull | 3 | 4.99 | | Medium | 5 | 6.99 | | Bright | 7 | 8.99 | | Very bright | 9 | 10.00 | --- **The categories and value ranges in table 17 apply to the following indices/IDs:** - Dry skin forecast / 48 | | | | | ------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Very likely | 0 | 1.99 | | Likely | 2 | 3.99 | | Possibly | 4 | 5.99 | | Unlikely | 6 | 7.99 | | Very unlikely | 8 | 10 | --- **The categories and value ranges in table 18 apply to the following indices/IDs:** - Makeup and skincare forecast / 49 | | | | | ----------------- | ----------- | --------- | | Category Name | Begin Range | End Range | | --- | --- | --- | | Deep moisturizers | 0 | 1.99 | | Moisturizers | 2 | 3.99 | | Hydrators | 4 | 5.99 | | Primers | 6 | 7.99 | | Sweat-resistants | 8 | 10 | --- ## Document: /documentation/http-status-codes URL: /documentation/http-status-codes # HTTP status codes All API responses include an HTTP status code in the `status` parameter. A 200 status indicates success, while other codes identify specific error conditions. See the table below for details. | Code | Response name | Description | | ---- | --------------------- | ---------------------------------------------------------------------------------------------- | | 200 | OK | The request was successful. | | 400 | Bad Request | The request had bad syntax or the parameters supplied were invalid. | | 401 | Unauthorized | A valid API key was not supplied in the query. | | 403 | Forbidden | The API key provided does not have access to the requested resource. | | 404 | Not Found | The server has not found a route matching the given URI. | | 429 | Too Many Requests | The request rate limit has been exceeded. | | 500 | Internal Server Error | The server encountered an unexpected condition which prevented it from fulfilling the request. | | 501 | Not Implemented | The server does not support the functionality required to fulfill the request. | | 502 | Bad Gateway | The server received an invalid response from the upstream server. | | 503 | Service Unavailable | The server is currently unable to handle the request due to temporary overload or maintenance. | | 504 | Gateway Timeout | The server did not receive a timely response from the upstream server. | ## Success response format A successful response returns data in the format specified by the particular API endpoint. Refer to the individual API documentation pages for details. ## Error response format Error responses follow the [RFC 7807 Problem Details for HTTP APIs](https://datatracker.ietf.org/doc/html/rfc7807) standard. Each error response contains both modern standardized fields and legacy fields for backward compatibility. ## Response fields | Field | Type | Description | | ----------------- | ------ | ----------------------------------------------------------------------------------------------------------- | | `type` | string | URI reference that identifies the problem type (e.g., `https://httpproblems.com/http-status/401`) | | `title` | string | Human-readable summary of the error type | | `status` | number | HTTP status code for this occurrence of the problem | | `instance` | string | URI reference that identifies the specific problem occurrence (request path without base URL) | | `trace.timestamp` | string | ISO 8601 timestamp when the error occurred (GMT) | | `trace.requestId` | string | Unique identifier for this request (useful when contacting support) | | `trace.buildId` | string | Build/deployment API gateway identifier | | `Code` | string | **(Will be deprecated)** HTTP status text - use `title` and `status` instead | | `Message` | string | **(Will be deprecated)** Error message - use `title` instead | | `Reference` | string | **(Will be deprecated)** Full URL of the request - use `instance` instead (note: includes query parameters) | ### Legacy keys—to be deprecated :::warning{title="Deprecated Fields"} The following fields exist only for backward compatibility with legacy clients and **will be removed in a future version**: - **`Code`** - Replaced by `title` (text) and `status` (numeric) - **`Message`** - Replaced by `title` - **`Reference`** - Replaced by `instance` (without base URL) Use the modern keys for new integrations. ::: ## Example error response This is a complete example of an error response for an unauthorized request: ```json { "type": "https://httpproblems.com/http-status/401", "title": "Unauthorized", "status": 401, "instance": "/currentconditions/v1/349727", "trace": { "timestamp": "2025-10-06T14:21:53.918Z", "requestId": "3b0b8539-a290-4fdd-b83e-9b7f989dea44", "buildId": "6e3881ec-0837-46a0-b8f4-344ea529b089" }, "Code": "Unauthorized", "Message": "API authorization failed", "Reference": "https://dataservice.accuweather.com/currentconditions/v1/349727?apikey=REDACTED&details=true" } ``` When handling errors, use the modern `status` field for the numeric HTTP code, `title` for a user-friendly error name, and `trace.requestId` when contacting support. The legacy fields (`Code`, `Message`, `Reference`) are provided for backward compatibility but should not be used in new integrations. --- ## Document: /documentation/glossary URL: /documentation/glossary # Glossary **admin code** — An administrative area code is a unique integer that identifies a specific geographical area within a country such as a state or province. The default is no admin code filter. **alias** — Alternate names that are used to account for: - Common alternate spellings such as Saint Louis, St. Louis, and St Louis. - Historical names such as Ho Chi Minh City, Saigon. - Accepted alternate names such as Derry, Londonderry. Control the inclusion of aliases in search results by setting the `Alias` enumeration value. Valid enumeration values are `Never`, `Always`, and `NoOfficialMatchFound`. The default value is `NoOfficialMatchFound`. **API hostname** — The domain root for use with all resources described on this website: {import.meta.env.ZUPLO_PUBLIC_API_BASE_URL}.... **API key** — A unique code used for identification and authorization purposes. This is the gateway for access to AccuWeather's API. [Sign up](/signup) for a developer account to get an API key today, or contact [sales@accuweather.com](mailto:sales@accuweather.com) for an [Enterprise API](https://apidev.accuweather.com/developers) key. **basin ID** — A unique code that identifies a basin for tropical data: North Atlantic = AL; East Pacific = EP; Northwest Pacific = NP; Southwest Pacific = SP; North Indian = NI; South Indian = SI. **city ID** — See [location code](/documentation/location-keys). **constituent country** — A country which makes up a part of a larger country or federation. The United Kingdom is made up of four constituent countries: England, Scotland, Wales, and Northern Ireland. **country code** — A unique two-letter code that identifies a specific country. **CSV (comma-separated values)** — A data format that displays endpoint response data in a list by table row, with each value separated by a comma. **depression number** — (may also be referred to as depression ID) An integer that identifies a specific tropical depression. The integer is assigned in numerical order by year and basin. For example, the first tropical depression in the AL basin for 2024 is assigned depression number 1. The first tropical depression in the EP basin for 2024 is also assigned depression number 1. **details** — A boolean (true or false) value that specifies whether or not to include the full response object. The default value is `false`. For Locations API searches, `details=true` will return AccuWeather-related details. **end** — The last date in a date range to which the relevant information applies. **GMT offset** — The time difference, in hours, between the current timezone and Greenwich Mean Time (GMT). **group** — A Locations API city search value that indicates the number of cities to return with a request. The options are 50, 100, and 150. **IP address** — Internet protocol address. A numerical code that identifies a device connected to the Internet. **JSON** — JavaScript object notation. A data format that is intended to be both human- and machine-readable. **language** — A string indicating the language in which to return the resource. The default value is `en-us`. [See here for a list of available language codes](/documentation/languages-localizations). **limit** — An integer that indicates the number of resources to return with the request. The default value is 25. **location key** — A unique ID that designates a specific location. Use the [Locations API](/core-weather/text-search#) to search for the appropriate location key. **localization** — The process of translating information into different languages or adapting a product for a specific country or region. Within the API setting, this term is used to represent languages, including the localized dialects. **max** — An integer that specifies the total list size. This cannot exceed 100. The default value is 100. **offset** — An integer, along with a limit, that determines the first resource to return. The default value is 0. **POI type** — [Categorized points of interest](/documentation/point-of-interest-types). **q** — Used in a query string to indicate search text. **rank** — A number applied to locations set by factors such as population, political importance, and geographic size. Location search results are returned in rank order. A lower rank number represents a city of larger population, political importance, an important location of commerce, or larger geographic size. A rank value of 10 is the highest possible. **RealFeel™ temperature** — An index that describes what the temperature really feels like. [See here to learn more about AccuWeather's RealFeel™ temperature](). **RealFeel™ temperature shade** — An index that describes what the temperature really feels like in the shade. [See here to learn more about AccuWeather's RealFeel™ temperature](). **RealFeel™ phrase** — A brief description of how the weather really feels. Possible phrases and their respective RealFeel™ temperature ranges are displayed in the table below. Please note that the imperial and metric temperature ranges associated with a particular phrase are rounded and therefore are not necessarily equal. AccuWeather advises that partners do not display phrases associated with both imperial and metric values at the same time. All phrases will translate.
Imperial Metric
Low High Low High Phrase
133° 140° 56° 60° Extraordinarily dangerous heat
125° 132° 51° 55° Extremely dangerous heat
116° 124° 46° 50° Very dangerous heat
108° 115° 42° 45° Dangerous heat
101° 107° 38° 41° Quite hot
90° 100° 32° 37° Hot
82° 89° 27° 31° Very warm
63° 81° 17° 26° Pleasant
53° 62° 11° 16° Cool
40° 52° 4° 10° Chilly
25° 39° -3° 3° Cold
10° 24° -12° -4° Very cold
-10° 9° -23° -13° Quite cold
-24° -11° -31° -24° Bitterly cold
-43° -25° -41° -32° Dangerous cold
-69° -44° -56° -42° Very dangerous cold
-90° -70° -67° -57° Extremely dangerous cold
-120° -91° -84° -68° Extraordinarily dangerous cold
**resolution** — A measure of image sharpness. This can be found as a parameter for the Imagery API. **REST** — REpresentational State Transfer. **start** — The date indicating the start of a date range. **status** — A short phrase that describes a significant weather event. Possible status values are: - Cyclonic storm - Deep depression - Depression - Extremely severe cyclonic storm - Hurricane—category 1 - Hurricane—category 2 - Hurricane—category 3 - Hurricane—category 4 - Hurricane—category 5 - Intense tropical cyclone - Moderate tropical storm - Post-tropical cyclone - Potential tropical cyclone - Severe cyclonic storm - Severe tropical storm - Subtropical - Super cyclonic storm - Tropical cyclone - Tropical cyclone—category 1 - Tropical cyclone—category 2 - Tropical cyclone—category 3 - Tropical cyclone—category 4 - Tropical cyclone—category 5 - Tropical depression - Tropical disturbance - Tropical storm - Typhoon - Very intense tropical cyclone - Very severe cyclonic storm - Very strong typhoon - Violent typhoon **verified location** — A term used to describe a location that has been verified by our primary location data provider. For searches that return multiple results, verified locations will always be returned at the top of the list. Only verified locations will be used in GeoLookup and AutoComplete searches. Also, only verified locations will be supported for localizations (translations). An unverified location can be added to the verified list, provided that there is credible information to confirm the latitude/longitude, name, country, and primary administrative code. --- ## Document: /documentation/data-display-formats URL: /documentation/data-display-formats # Data display formats Standard display formats for weather elements. | Element | Imperial | Metric | | -------------------- | -------- | ------- | | Cloud ceiling | ######0 | ######0 | | Hourly precipitation | ##0.00 | ###0 | | Pressure | ##0.00 | #000.0 | | Temperature | ##0 | ##0.0 | | Visibility | #0.0## | #0.0 | | Wind gust | ##0.0 | ##0.0 | | Wind speed | ##0.0 | ##0.0 | --- ## Document: /documentation/core-weather-quick-start URL: /documentation/core-weather-quick-start # Core Weather quick-start AccuWeather's Core Weather API has all the weather data you need to get started. Let's make a call to the [5-day Daily Forecast](/core-weather/location-key-daily#5-days-by-location-key) API endpoint. First we need to get a location code from the Locations API. Let's use the [search endpoint](/core-weather/text-search#location-search) to get the location key. AccuWeather's location codes provide a precise geographical pinpoint to ensure weather data is always accurate. To keep things moving, let's use a location code for New York City: 349727. Now we can get the five-day forecast by making a `GET` request to {import.meta.env.ZUPLO_PUBLIC_API_BASE_URL}/forecasts/v1/daily/5day/349727 and sending your API key. You can use our test console below to call the API right now ([log in](/signin) to get your free API key if you haven't already). And that's it, check out New York City's weather! ## Look up other locations Use the [City Search endpoint](/core-weather/text-search#city-search) to do a string search for location codes. Use our test console below to try it now. ## What next? Check out the full [Core Weather API](/core-weather) to build the weather experience like never before. Don't forget to check out our [MinuteCast™ API](/documentation/minutecast-quick-start) as well! ## Want more? [Contact our sales department](/contact-us) to learn how you can leverage our full range of weather API offerings. --- ## Document: /documentation/brand-guidelines URL: /documentation/brand-guidelines import { BrandGuidelinesPage } from "../../src/brand-guidelines/BrandGuidelinesPage.tsx"; # Brand guidelines --- ## Document: /documentation/best-practices URL: /documentation/best-practices # Best practices ## Use GZIP compression Compression reduces the amount of data being transferred and improves data request speed. Add HTTP headers to enable GZIP compression. ```ts title="TypeScript" const url = "https://dataservice.accuweather.com/locations/v1/search?q=san"; const response = await fetch(url, { headers: { "Authorization": "Bearer YOUR_API_KEY", "Accept-Encoding": "gzip", }, }); const data: Record[] = await response.json(); ``` ```python title="Python" import requests url = "https://dataservice.accuweather.com/locations/v1/search" params = {"q": "san"} 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/search?q=san"; 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/search?q=san")) .header("Authorization", "Bearer YOUR_API_KEY") .header("Accept-Encoding", "gzip") .build(); HttpResponse 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/search?q=san" ``` - Without compression: 17,695 bytes - With compression: 2,958 bytes - Size reduction of 83% ## Randomize refresh rates Randomize individual device refresh rates so that devices refresh at different clock times. Requesting updates on all devices at consistent times will overload the system. ## Use the _expires_ header Refresh information from the AccuWeather APIs for your device based upon the cache expires time in the response headers. In the example below, refresh on Thursday, August 30th, 2012 at 14:56:34 GMT. ``` Response Headers Cache-Control: public Content-Encoding: gzip Content-Type: application/json; charset=utf-8 Date: Wed, 29 Aug 2012 14:55:33 GMT Expires: Thu, 30 Aug 2012 14:56:34 GMT Server: Microsoft-IIS/7.5 Server: Microsoft-IIS/7.0 Transfer-Encoding: chunked Vary: Accept-Encoding X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET ``` ## Timezone offset changes for daylight saving time If you intend to use the GMTOffset from the Location API response to calculate times local to the location, you MUST be careful to observe the NextOffsetChange property. The offset will change on the date and time specified. Using the _expires_ header as described above will ensure that you have the most current GMTOffset for the location. ## Use HTTPS Only HTTPS encrypts traffic between the client and AccuWeather servers, preventing data leaks, interception, and tampering. Always call our APIs using the documented HTTPS endpoints. ## Redirects We may temporarily support HTTP by automatically upgrading the connection to HTTPS for backward compatibility. This behavior is not guaranteed long-term and should not be relied upon. Please update integrations to use HTTPS endpoints exclusively. --- ## Document: /documentation/autocomplete-search URL: /documentation/autocomplete-search # Autocomplete AccuWeather's autocomplete feature allows users to perform a location lookup with a partial city name so search boxes can be automatically populated and refined as a user types. This feature also suggests location names if a user is unsure of proper spelling. The top ten verified location results are returned, ordered by rank. While autocomplete works for all supported language localizations, it is optimized for Latin-based languages. - Global caching ensures quick response times and optimized service for users all over the world. - Returns a truncated response. - Only cities can be searched through autocomplete; it does not work with postal codes. Explore the many location autocomplete endpoints in the [autocomplete documentation](/core-weather/autocomplete). --- ## Document: /documentation/authentication URL: /documentation/authentication # Authentication AccuWeather APIs use API key-based authentication to secure access to weather data. Every request to the API must include a valid API key in the `Authorization` header. ## Get your API key Your API key is available in your account dashboard. 1. [Sign up](/signin) for a free AccuWeather developer account or sign in if you already have an account. 2. Navigate to your [subscriptions](/subscriptions) page. 3. Copy your API key from the dashboard. Your API key is unique to your account and should be kept secure. Do not share it publicly or commit it to version control. ## Make authenticated requests Include your API key in the `Authorization` header using the bearer token format: ```ts title="TypeScript" const url = "https://dataservice.accuweather.com/currentconditions/v1/349727"; const response = await fetch(url, { headers: { "Authorization": "Bearer YOUR_API_KEY", "Accept-Encoding": "gzip", }, }); const data: Record[] = await response.json(); ``` ```python title="Python" import requests url = "https://dataservice.accuweather.com/currentconditions/v1/349727" 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/349727"; 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/349727")) .header("Authorization", "Bearer YOUR_API_KEY") .header("Accept-Encoding", "gzip") .build(); HttpResponse 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/349727" ``` This example retrieves current weather conditions for New York City (location key 349727). ### Response format Successful requests return JSON data with weather information. Unauthorized requests return a 401 status code. ```json { "type": "https://httpproblems.com/http-status/401", "title": "Unauthorized", "status": 401, "instance": "/currentconditions/v1/349727", "trace": { "timestamp": "2025-07-26T08:00:13.887Z", "requestId": "f88dc27c-wmf1-4982-be8d-cc7b0f2a2b41", "buildId": "10a5efeb-jjf6-4971-89a5-51cfd7026e0f" }, "Code": "Unauthorized", "Message": "API authorization failed", "Reference": "https://dataservice.accuweather.com/currentconditions/v1/349727" } ``` ## Authentication best practices ### Secure API keys - Store API keys as environment variables. - Never hardcode keys in client-side applications. - Use server-side proxies for client applications. - If you think your API key has been compromised, [contact AccuWeather support](/contact-us) immediately. ### Request headers - Always include `Accept-Encoding: gzip,deflate` for compression. - Use HTTPS endpoints exclusively. Unsecure HTTP is not supported. - Include proper error handling for authentication failures. ## Troubleshoot | Issue | Solution | | ------------------- | ----------------------------------------------------------------- | | 401 Unauthorized | Verify your API key is correct and active | | 403 Forbidden | Check your subscription limits in [Subscriptions](/subscriptions) | | Rate limit exceeded | Implement caching and respect the `expires` header | ## What next? Now that you understand authentication, explore our APIs: - [Core Weather quick-start](/documentation/core-weather-quick-start) - Get started with weather data. - [MinuteCast™ quick-start](/documentation/minutecast-quick-start) - Minute-by-minute precipitation forecasts. - [Best practices](/documentation/best-practices) - Optimize your API usage. --- ## Document: /documentation/api-flow-diagram URL: /documentation/api-flow-diagram import { Diagram } from "../../src/Diagram"; # API flow diagram ## Core Weather API flow diagram This diagram shows the workflow to get a location key, then to use that location key to request forecasts, current conditions, indices, and alarms. ## MinuteCast API flow diagram The MinuteCast™ API provides minute-by-minute precipitation forecasts for a specified location. Unlike the other APIs, it does not require a location key. Forecasts are requested directly using latitude and longitude coordinates. --- ## Document: /documentation/administrative-areas URL: /documentation/administrative-areas # Administrative areas Every location has one primary administrative area assigned to it. The primary administrative area is designated by the Level 1 code in the `AdministrativeArea` block of the response. These admin codes are derived from the [ISO 3166-2](https://www.iso.org/iso/home/standards/country_codes.htm#2012_iso3166-2) codes (when available) with a focus on the principal subdivisions. If the principal subdivisions of a particular country are not available, the code "00" will be assigned to all locations in that country. The name of the country will be assigned as the administrative name for any "00" codes. In the event that a principal subdivision has not yet had an ISO 3166-2 code assigned to it, a code ranging from "X01" to "X99" will be assigned as a place holder until the official code has been released. Each primary administrative area will also include the administrative classification, such as State, Province, etc. ### Examples | Country code | Admin code | Admin name | Admin type | | ------------ | ---------- | ------------- | ------------ | | US | NY | New York | State | | CA | ON | Ontario | Province | | FR | J | Île-De-France | Region | | KR | 11 | Seoul | Special City | | VA | 00 | Vatican City | | | TH | X01 | Bueng Kan | Province | ## Supplemental Administrative Areas Supplemental administrative areas can be used to help distinguish between locations that look similar. Each area is assigned a number to describe the scale of the administrative subdivisions for countries. As the Level number increases, the scale of the subdivision will decrease. ### Political Boundaries Internationally recognized areas focusing on the secondary subdivisions, where available. #### Level 0 - Used to categorize the constituent country, or subcountry, for locations that belong to a country that makes up a part of a larger entity. - Currently used for locations in the UK to represent England, Scotland, Wales, and Northern Ireland. - Primary use casereplace country name with constituent country name. - London, United Kingdom - London, England #### Level 2 - Used to represent secondary subdivisions of the primary administrative areas. - Primary use case - include in parentheses after the primary administrative information. - Miami, Florida, United States - Miami, Florida (Miami-Dade), United States. ### Examples | Country code | Admin code | City name | Location key | Admin level | Admin name | | ------------ | ---------- | ------------- | ------------ | ---------------- | -------------------- | | US | FL | Miami | 347936 | Level 2 | Miami-Dade | | CA | BC | Vancouver | 53286 | Level 2 | Greater Vancouver | | GB | ENG-MAN | Manchester | 329260 | Level 0, Level 2 | England, City Center | | IN | MH | Mumbai | 204842 | Level 2 | Mumbai Suburban | | US | CA | Mountain View | 337169 | Level 2 | Santa Clara | | US | CA | Mountain View | 337169 | Level 2 | Contra Costa |