vertical-weather
Python client for the Vertical Weather API. Ask for wind, temperature, pressure, humidity and air density at the heights you choose above a point, from NOAA's GFS model.
pip install vertical-weather
Needs Python 3.11 or later. Get an API key from the dashboard; the API is in free beta.
Example
import os
from vertical_weather import get_profile
profile = get_profile(os.environ["VERTICAL_WEATHER_API_KEY"], {
"latitude": 35.052,
"longitude": -117.985,
"time": "2026-10-03T18:00:00Z",
"altitudes_m": [1000, 2000, 5000],
"altitude_reference": "agl",
})
for level in profile.levels:
print(level.altitude_agl_m, level.wind_speed_ms, level.wind_direction_deg)
In async code, use await async_get_profile(...) with the same arguments.
The result is a typed Pydantic model; profile.model_dump(mode="json") gives
plain data. PROFILE_UNITS names the unit of every level field.
Keep the key on a server. Don't ship it in a mobile app, browser code or a public repository.
Reading the results
- Heights are metres above ground (
agl) or above mean sea level (msl). Ground is the model's terrain unless you passground_elevation_m_msl. - Wind
upoints east andvnorth, in m/s.wind_direction_degis where the wind comes from, clockwise from true north; 0 at zero speed means calm. valid_timeis the model time actually used and can differ from the time you asked for.provenancenames the model run and grid point.- Relative humidity can be above 100%.
Options
Keyword arguments to both functions:
| Option | Default | Meaning |
|---|---|---|
base_url |
https://api.verticalweather.com |
API address |
timeout_ms |
30000 | Time limit per attempt (1 to 300000) |
max_elapsed_ms |
30000 | Time limit for the whole call, including waits |
max_attempts |
1 | Up to 5; retries only 429 rate_limited and 503 source_busy |
Retries wait for Retry-After when the server sends it. Timeouts and network
errors are never retried, since the server may already have done the work.
Errors
Every failure raises AtmosphereError with code, status, request_id,
retry_after_ms and coverage.
| Code | What to do |
|---|---|
unauthorized (401) |
Check the key. |
profile_out_of_range (409) |
A height is outside the model column; coverage has the available range. |
rate_limited (429) |
Wait retry_after_ms, or allow retries. |
source_busy (503) |
Try again shortly. |
timeout, network_error |
The request may or may not have completed. |
invalid_response, unexpected_status |
The response didn't match the contract. |
invalid_request, missing_key, invalid_url, invalid_options |
Fix the input. |
The client checks every response against the request (heights, time, ground, coverage, derived wind) and never fills in missing values. It follows no redirects, ignores proxy environment variables and never logs your key.
Links
- Guides: https://verticalweather.com
- Support: support@verticalweather.com
MIT license.
Release files for vertical-weather 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vertical_weather-0.1.0.tar.gz | 14.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vertical_weather-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.7 kB
Release files / vertical_weather-0.1.0.tar.gz
| Download URL | vertical_weather-0.1.0.tar.gz |
|---|---|
| Size | 14.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c0e15ba1480f91bfaa4c57fcd77928d9c27e5227977633a52f904275c00a52aa
|
|
BLAKE2b-256 checksum How to use checksums |
6260eb05aa4d92bc072fa8e6b4f1c447c83b8526f27a1e424d37fc7988efd723
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / vertical_weather-0.1.0-py3-none-any.whl
| Download URL | vertical_weather-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1d4908f5bbbd1756f4cbfda7c3636ce6640e6cfe64fc7cc5925819f757f1891a
|
|
BLAKE2b-256 checksum How to use checksums |
6ee8392b6147256bf7318df2e9e983dd3371d532b8cb4e78aa2b22cab6865ce7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|