# Storm cell ids, freshness and cones

> Why a storm keeps one id through merges and splits, what the feed age tells you, and how the wide and tight cone profiles were chosen.

Developers · Concept · https://wxalerts.org/docs/developers/concepts/storm-cells/

The routes and fields are on the [storm cells reference](/docs/api/storms/).

## 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](/docs/storm-analysis/accuracy/) and
[The rotation's own cone](/docs/storm-analysis/rotation/#the-rotations-own-cone).
