What are Alert Attributes?
Attributes are named pieces of data extracted from incoming alert payloads, things liketeam, service, error_message, or priority. They can be scalar (a single value) or array (a list of values), and they can also be static and reference catalog types like Team or Service. Once captured, attributes flow into incidents and escalations via your alert routes.
Getting started
- Head to Settings → Routing in the dashboard
- Click on your alert source (e.g. HTTP, Datadog, PagerDuty)
- Scroll until you find the attributes section and click Edit
- Click the cog next to an attribute to change its merge strategy
Understanding Merge Strategies
When the same alert fires multiple times, merge strategies determine how attribute values are combined or replaced. Here’s how each of them works:Rankable types are: Alert Priority, Incident Severity, Follow-up Priority, or custom catalog types with ranking.
| Strategy | Scalar | Array | Rankable Required |
|---|---|---|---|
| First Wins | Yes | Yes | No |
| Last Wins | Yes | Yes | No |
| Accumulate | No | Yes | No |
| Maximum | Yes | No | Yes |
| Minimum | Yes | No | Yes |
First Wins
Keeps the first value ever set for the attribute. Basically, once the value is set it never changes regardless of subsequent alerts. Available for all attribute types. Example: First alert setsservice = "payments", second alert sends service = "checkout" → result is service = "payments".
Best for preserving original state, like an initial error message or first reported time.
Last Wins
Always updates to the latest value each time an alert with the same de-duplication key fires. This is available for all attribute types and only applies before the alert escalates or creates an incident. Example: First alert setserror_count = "5", second alert sends error_count = "12" → result is error_count = "12".
Best for tracking current state, like a live error count or status.
Accumulate
Combines all values into a single deduplicated list. This is available for array attributes only and applies before the alert escalates or creates an incident. Example: First alert sendsaffected_services = ["api", "web"], second sends ["api", "database"] → result is ["api", "web", "database"].
Best for building up lists of affected services, regions, or endpoints over time.
Maximum
Keeps the highest ranked value. This is available for scalar attributes with rankable types only and applies before the alert escalates or creates an incident. Example: First alert setspriority = "medium", second sends priority = "critical" → result is priority = "critical".
Best for ensuring the most critical priority always wins.
Minimum
Keeps the lowest ranked value. Works the same as Maximum, so only works with rankable types and applies before the alert escalates or creates an incident. Example: First alert setspriority = "critical", second sends priority = "low" → result is priority = "low".
Best for de-escalating priority when subsequent alerts signal recovery.
When Attributes Stop Updating
Once an alert has created an incident or triggered an escalation, attribute values are locked. Any subsequent alert fires will not update them. This is by design — it ensures your incident data reflects the state at the moment action was taken, prevents confusing mid-incident changes, and keeps your audit trail clean.| Strategy | Locks after incident/escalation? |
|---|---|
| First Wins | N/A (already locked from first value) |
| Last Wins | Yes, stops updating |
| Accumulate | Yes, stops accumulating |
| Maximum | Yes, stops comparing |
| Minimum | Yes, stops comparing |