Catalog / ToolMint NWS Alerts
ToolMint NWS Alerts
US National Weather Service active alerts as clean JSON — by state/area or lat/lon. No NWS API key.
Routes and prices
| Route | Price | What it does | Parameters (* required) |
|---|---|---|---|
GET /alerts | $0.005 | Active alerts by area or point query params | area, lat, lon, limit |
GET /alerts/area/{area} | $0.005 | Active alerts by state/area code | area*, limit |
GET /alerts/point | $0.005 | Active alerts by lat/lon | lat*, lon*, limit |
GET /alerts/types | $0.005 | Alert event types catalog | — |
Free routes: /, /health, /openapi.json, /.well-known/x402.
Try it
Call it with no payment. You get 402 and a base64 PAYMENT-REQUIRED header. Decoded, it looks like this (captured from the live tool on 2026-10-31 17:32 UTC):
curl -i "https://toolmint-nws-alerts.toolmint.workers.dev/alerts?area=TX"
{
"x402Version": 2,
"accepts": [
{
"scheme": "exact",
"network": "eip155:8453",
"amount": "5000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0xfbF7413bcB3a604936775C96FDbe0b0C9c9E37F5",
"maxTimeoutSeconds": 300,
"extra": {
"name": "USD Coin",
"version": "2"
}
}
],
"resource": {
"url": "https://toolmint-nws-alerts.toolmint.workers.dev/alerts?area=TX",
"description": "Active NWS weather alerts by US state/area code (query: area=TX&limit=25) or by point (lat&lon)",
"mimeType": "application/json",
"serviceName": "ToolMint NWS Alerts",
"tags": [
"weather",
"nws",
"alerts",
"public-data",
"toolmint"
],
"iconUrl": "https://toolmint.toolmint.workers.dev/icon.png"
}
}
amount is in USDC base units (6 decimals): 5000 = $0.005. Repeat the same request with a PAYMENT-SIGNATURE header from any x402 client.
What question it answers
"What weather alerts are active right now for this state, or for this point on the map?" Each alert has event, severity, certainty, urgency, headline, instructions and timing.
When to use it
- You need current NWS alerts as flat JSON, not NWS GeoJSON.
- You want a count of alerts by severity for a state (
bySeverity).
When not to use it
- Life-safety decisions. This is a convenience copy of NWS data, up to 5 minutes old from cache. Use weather.gov and official channels for that.
- Forecasts or past weather. It lists only alerts that are active now.
- Places outside the US.
- The NWS API is free. You pay for the cleaned shape and for not writing the client.
Example
curl -i "https://toolmint-nws-alerts.toolmint.workers.dev/alerts/area/TX?limit=2"
# HTTP 402 with a PAYMENT-REQUIRED header. Pay with an x402 client, then repeat the
# same request with the PAYMENT-SIGNATURE header.
Response after payment (trimmed; values are illustrative, field names come from the code):
{
"tool": "nws-alerts-json",
"version": "0.1.0",
"area": "TX",
"count": 1,
"bySeverity": { "Moderate": 1 },
"alerts": [
{
"id": "https://api.weather.gov/alerts/urn:oid:...",
"event": "Heat Advisory",
"severity": "Moderate",
"certainty": "Likely",
"urgency": "Expected",
"headline": "Heat Advisory issued ...",
"description": "...",
"descriptionTruncated": false,
"instruction": "Drink plenty of fluids...",
"instructionTruncated": false,
"areaDesc": "Travis; Williamson",
"sent": "2026-10-31T14:00:00-05:00",
"effective": "2026-10-31T14:00:00-05:00",
"onset": "2026-10-31T14:00:00-05:00",
"expires": "2026-10-31T20:00:00-05:00",
"ends": "2026-10-31T20:00:00-05:00",
"status": "Actual",
"messageType": "Alert",
"senderName": "NWS Austin/San Antonio TX",
"web": "http://www.weather.gov"
}
],
"source": "api.weather.gov (NWS)",
"note": "US government public data. No API key.",
"cached": false
}
description is cut at 1500 characters and instruction at 800; the ...Truncated flags say when. The point route returns point: {lat, lon} instead of area, and has no bySeverity.
Data source and licence
Source: api.weather.gov (US National Weather Service). US government work, generally public domain. Check the source's terms if you redistribute. Not endorsed by NWS.
Freshness and limits
- Cached for 5 minutes per area or point, and the event-type list for 24 hours.
cachedtells you if you got a cache hit. There is nofetchedAtfield yet. - The cache lives in memory on one server instance, so a repeat call may or may not hit it.
- At most 100 alerts per call. There is no filter by severity or event.
- NWS test or exercise messages are not filtered out.
- If it runs out, paid calls fail and are not charged.
Errors are not charged
Payment settles only on a successful answer. Any response with status 400 or higher (bad input, not found, upstream failure) is never settled.