The routes and fields are on the storm cells reference.
Ids
storm_id is WxAlerts’ own id for a storm. ProbSevere renames a cell when it
merges or splits, and the ingest stitches those back into one storm; every
ProbSevere ID it has worn is in feed_ids. Use storm_id for anything you keep.
couplet_id is the id of a tracked rotation, which is linked to a cell
(storm_id, possibly null) but tracked on its own.
The per storm routes take any id ever issued, not only active ones, so a client holding an id from earlier still gets an answer.
Freshness
Check feed_age_seconds: an empty response looks the same whether the sky is
quiet or the feed stopped. The feed publishes about every two minutes and lands
two to three and a half minutes after its valid time, so an age of 100 to 220
seconds is normal.
Cone profiles
profile picks how much area a cone spends for how much certainty. Both are
measured against where storms actually went.
| profile | cells | rotations |
|---|---|---|
wide (default) |
about 95% of storms inside the cone at 60 minutes | about 95% capture |
tight |
about 92%, for roughly 29% less area | about 90%, for roughly two thirds of the area |
Area is the real cost: a wide cell cone grows about five times between 10 and 60 minutes of lead, and everyone inside it is being told something. A cell cone has no rear margin; a rotation’s cone does, because rotations die and re-form upstream. Rotation cones stop at 20 minutes because past that they grow larger than the cell cone they are meant to narrow. The reasoning, with numbers, is in Accuracy and The rotation’s own cone.

