ToolMint

Catalog / ToolMint NWS Alerts

Live Safety, hazards & recalls

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

RoutePriceWhat it doesParameters (* required)
GET /alerts$0.005Active alerts by area or point query paramsarea, lat, lon, limit
GET /alerts/area/{area}$0.005Active alerts by state/area codearea*, limit
GET /alerts/point$0.005Active alerts by lat/lonlat*, lon*, limit
GET /alerts/types$0.005Alert 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. cached tells you if you got a cache hit. There is no fetchedAt field 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.