WeatherArb
Intelligence API
Real-time weather anomaly intelligence for 10,385+ cities across 120 countries. Z-Score climatological analysis against 25-year NASA POWER ERA5-Land baselines. HDD/CDD energy metrics, sector impact data, and space weather integration.
Authentication
The Free tier requires no authentication. Simply call the endpoints directly. For Pro tier (higher rate limits and advanced endpoints), include your API key in the request header.
Free Tier — No Auth Required
curl "https://api.weatherarb.com/api/v1/pulse/milan"
Pro Tier — API Key Header
curl -H "X-API-Key: your_key_here" \ "https://api.weatherarb.com/api/v1/global/top?limit=100"
import requests headers = {"X-API-Key": "your_key_here"} r = requests.get( "https://api.weatherarb.com/api/v1/global/top", headers=headers, params={"limit": 100} ) data = r.json() print(data["count"], "anomalies detected")
const response = await fetch( "https://api.weatherarb.com/api/v1/global/top?limit=100", { headers: { "X-API-Key": "your_key_here" } } ); const data = await response.json(); console.log(data.reports.length, "cities");
Pulse Endpoints
Real-time weather anomaly data for individual cities. Returns Z-Score, temperature, HDD/CDD, wind, humidity, and sector impact analysis.
Returns real-time weather anomaly data for a specific city. The city_slug is the URL-encoded city name (lowercase, hyphens). Z-Score is calculated against the 25-year NASA POWER ERA5-Land baseline for that exact location.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| city_slugrequired | string | City name slug (e.g. milan, new-york, sao-paulo) |
curl "https://api.weatherarb.com/api/v1/pulse/milan"
import requests r = requests.get("https://api.weatherarb.com/api/v1/pulse/milan") d = r.json() w = d["weather"] print(f"Milan Z-Score: {w['z_score']:+.2f}σ") print(f"Temperature: {w['temperature_c']}°C") print(f"Anomaly: {w['anomaly_level']}")
const r = await fetch("https://api.weatherarb.com/api/v1/pulse/milan"); const { weather, signal } = await r.json(); console.log(`Z-Score: ${weather.z_score > 0 ? '+' : ''}${weather.z_score.toFixed(2)}σ`); console.log(`Score: ${signal.score}/10`); console.log(`Event: ${weather.anomaly_label}`);
package main import ( "encoding/json" "fmt" "net/http" ) func main() { resp, _ := http.Get("https://api.weatherarb.com/api/v1/pulse/milan") var data map[string]interface{} json.NewDecoder(resp.Body).Decode(&data) weather := data["weather"].(map[string]interface{}) fmt.Printf("Z-Score: %v\n", weather["z_score"]) }
{
"city": "milan",
"location": "Milan",
"country_code": "it",
"lat": 45.46,
"lon": 9.19,
"weather": {
"z_score": +2.14, // Standard deviations from 25yr baseline
"temperature_c": 28.4, // Current temperature (°C)
"humidity_pct": 62, // Relative humidity (%)
"wind_kmh": 14, // Wind speed (km/h)
"hdd": 0.0, // Heating degree days
"cdd": 3.4, // Cooling degree days
"hdd_delta": -2.1, // HDD vs historical average
"anomaly_level": "EXTREME", // NORMAL|UNUSUAL|EXTREME|CRITICAL
"anomaly_label": "Heat wave",
"event_type": "heat_wave"
},
"signal": {
"score": 7.8, // 0-10 composite risk score
"vertical": "heat_wave",
"agri_impact": "high",
"energy_impact": "high",
"logistics_impact": "moderate"
},
"timestamp": "2026-05-06T18:00:00Z"
}
Find the nearest monitored city to a given latitude/longitude and return its live anomaly data. Useful for geolocation-based applications.
| Parameter | Type | Description |
|---|---|---|
| latrequired | float | Latitude (-90 to 90) |
| lonrequired | float | Longitude (-180 to 180) |
curl "https://api.weatherarb.com/api/v1/pulse/nearby?lat=45.46&lon=9.19"
Intelligence Endpoints
Aggregate anomaly intelligence across regions, countries, and globally. Returns ranked lists of cities with active weather anomalies.
Returns the top anomalies across all monitored cities, sorted by absolute Z-Score. Default limit is 50.
| Parameter | Type | Description |
|---|---|---|
| limitoptional | integer | Max results (default: 50, max free: 100, max pro: 500) |
| min_scoreoptional | float | Minimum score filter (0-10) |
curl "https://api.weatherarb.com/api/v1/europe/top?limit=10&min_score=5"
Returns top anomalies globally across all 10,385 monitored cities. Includes heat waves, cold snaps, heavy rain events ranked by severity.
| Parameter | Type | Description |
|---|---|---|
| limitoptional | integer | Max results (default: 50) |
| event_typeoptional | string | Filter: heat_wave, cold_snap, heavy_rain, drought |
curl "https://api.weatherarb.com/api/v1/global/top?limit=20&event_type=heat_wave"
import requests params = {"limit": 20, "event_type": "heat_wave"} r = requests.get("https://api.weatherarb.com/api/v1/global/top", params=params) data = r.json() for city in data["reports"]: z = city["z_score"] print(f"{city['location']:20} Z={z:+.2f}σ Score={city['score']:.1f}")
Returns all monitored cities and their anomaly data for a specific country (ISO 3166-1 alpha-2 code).
| Parameter | Type | Description |
|---|---|---|
| country_coderequired | string | ISO country code: it, us, de, fr, in... |
curl "https://api.weatherarb.com/api/v1/country/it" curl "https://api.weatherarb.com/api/v1/country/us" curl "https://api.weatherarb.com/api/v1/country/in"
Returns only cities with critical anomalies (absolute Z-Score ≥ 3σ). These represent statistically extreme weather events occurring less than 0.3% of the time historically.
curl "https://api.weatherarb.com/api/v1/critical"
Top anomalies ranked by composite score (0-10). Score combines Z-Score magnitude, HDD/CDD impact, wind, humidity, and duration.
curl "https://api.weatherarb.com/api/v1/leaderboard?limit=20"
Analytics Endpoints
System statistics, grid stress analysis, and cache management.
Returns platform-wide statistics: total nodes, cached nodes, critical count, average Z-Score, and last update timestamp.
curl "https://api.weatherarb.com/api/v1/stats"
{
"total_nodes": 10385,
"cached_nodes": 500,
"critical_count": 27,
"avg_z_score": 1.24,
"countries": 120,
"last_updated": "2026-05-06T18:00:00Z",
"cache_age_seconds": 3240
}
Returns energy grid stress scores per country, space weather data (Kp index, solar flare class), and risk assessments for critical infrastructure.
curl -H "X-API-Key: your_key" \ "https://api.weatherarb.com/api/v1/grid-stress"
Triggers a background refresh of all weather data from Open-Meteo. Returns immediately; data available after ~30 seconds.
curl -X POST "https://api.weatherarb.com/pulse/refresh" # Response: { "status": "refresh_started", "province_count": 10385, "message": "Data available in ~30 seconds" }
Data Model
Complete reference for all fields returned by the API.
Weather Object
Signal Object
Live Playground
Test the API directly from your browser. No authentication required.
Rate Limits
Rate limits are applied per IP address on the free tier and per API key on paid plans.
Rate limit headers are included in every response: X-RateLimit-Remaining, X-RateLimit-Reset.
Error Codes
All errors return JSON with error and message fields.
Pricing
Start free, scale as you grow. No credit card required for the free tier.
- 60 requests / hour
- All pulse endpoints
- Top 100 anomalies
- JSON responses
- API key required
- Grid stress data
- Historical data
- Webhooks
- 10,000 requests / hour
- All endpoints
- Full 10,385 city database
- Grid stress & space weather
- Sector impact analytics
- Priority support
- Historical time series
- Custom baselines
- Unlimited requests
- Custom city additions
- Historical time series
- Custom baselines
- Dedicated infrastructure
- SLA guarantee
- White-label option
- Custom integrations