> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rootly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Alert Routing

> Use Alert Routes to determine which teams, services, and escalation policies receive incoming alerts from your monitoring tools based on conditions you define.

## Overview

Alert Routing ensures that alerts from your monitoring and observability systems reach the correct responders quickly and reliably. Rootly provides a unified routing layer that works across all alert sources, enabling consistent on-call workflows.

Rootly supports two routing pathways:

1. **Routing inside your monitoring tool** (Datadog, PagerDuty, Opsgenie, etc.)
2. **Routing inside Rootly** using centralized **Alert Routes**

This guide focuses on routing **inside Rootly**.

***

## What Is an Alert Route?

An **Alert Route** defines *when*, *how*, and *to whom* Rootly should send alerts. It supports evaluation against:

* Alert Sources
* Alert Fields (normalized metadata)
* Raw payload values (JSONPath)
* Teams, services, and escalation policies

<Info>
  **Tip:** Alert Routes work best when combined with **Alert Fields**, which let you write stable routing logic even when payload schemas vary across providers.
</Info>

***

## Creating an Alert Route

Navigate to **Alerts → Routes** and click **New Route**, then configure the following:

<Steps>
  <Step title="Name the Route">
    Give the route a descriptive title that clarifies its purpose.
  </Step>

  <Step title="Select Alert Sources">
    Select one or more alert sources the route should evaluate. Sources can be added or removed at any time.

    A route can only evaluate sources that already exist, so connect the tool first — see [Alert Sources](/alerts/alert-sources) for how to connect one and what to configure on it, or the [integrations catalog](/integrations/overview) for per-vendor setup.
  </Step>

  <Step title="Set the Owning Team">
    The owning team controls who can edit the route.

    <Note>
      **Permissions:**

      * Team Admins may only create routes **for their own team**.
      * Teams can only route alerts **from alert sources they own**.
    </Note>
  </Step>
</Steps>

After creating a route, you can begin adding Routing Rules.

***

## Configuring Routing Rules

Routing Rules determine *which alerts should page responders* and *where they should go*.

Click **Add routing rule** to create one.

***

## Routing Rule Conditions

Conditions define when a rule should trigger.

### Select a Field

You may reference:

* **Alert Fields** (recommended)
* **Payload values via JSONPath**

<Info>
  Alert Fields ensure your routing logic remains stable even if payload structures change.
</Info>

### Choose an Operator

Supported operators include:

* *is one of*
* *contains*
* *starts with*
* *matches regex*
* *is empty*
* and more

<Tip>
  Use **regex** when values vary across alert providers and need flexible matching.
</Tip>

### Add Additional Conditions

Use **AND/OR** groups to define complex routing logic.

### Live Preview

Rootly shows matching historical alerts to validate your logic.

***

## Routing Rule Destinations

Each rule must specify **who receives the alert**. Rules can target any of three destination types, and a single rule may include multiple destinations — all are paged when it fires.

<ParamField path="Teams" type="escalation policy owner">
  Pages the team's configured escalation policy. Recommended for easier reporting and maintenance.
</ParamField>

<ParamField path="Services" type="escalation policy owner">
  Pages the service's configured escalation policy. Recommended alongside teams.
</ParamField>

<ParamField path="Escalation Policies" type="direct">
  Page a policy directly. Works, but is harder to report on than routing through a team or service.
</ParamField>

Routing to a team or service automatically triggers its configured escalation policy.

<Tip>
  For easier reporting and maintenance, Rootly recommends routing to **teams** or **services**, not directly to escalation policies.
</Tip>

Rules may include **multiple destinations**, all of which will be paged when the rule fires.

***

## Completing the Alert Route

A route may contain any number of rules.<br />Rootly evaluates rules **top-to-bottom**, so ordering matters.

Use the rule menu (**… → Reorder rule**) to adjust order.

***

## How Rootly Routes Alerts

Rootly evaluates alerts in two sequential stages.

### Stage 1 — Payload-Based Routing

If the alert payload contains a **target ID** (team or service), Rootly immediately routes the alert there without evaluating Alert Routes.

### Stage 2 — Evaluate Alert Routes

If the alert does not specify a target:

### Evaluate Routes

Rootly evaluates **every Alert Route associated with the alert’s source**.

### Evaluate Rules

Within each route, rules are evaluated **from top to bottom**.

* The first matching rule triggers paging
* Rootly stops evaluating additional rules in that route
* Other routes referencing the same source will still run

<Warning>
  If no rules match, the alert becomes a **Non-Paging Alert**. Review these in the Alerts dashboard by filtering **Status → Non-Paging**.
</Warning>

<Tip>
  Order rules **most specific → least specific** to avoid unintended matches.
</Tip>

***

## Alert Timeline

Every routed alert includes a timeline event documenting:

* Which **Alert Route** was applied
* Which **Routing Rule** matched
* Which **destinations** were paged

This ensures responders understand *why* they were paged.

***

## Best Practices

* Prefer **Alert Fields** over JSONPath for stability.
* Start with broad routing categories and refine with specific rules.
* Keep rule names action-oriented and descriptive.
* Regularly check **Non-Paging Alerts** for routing gaps.
* Route to **teams/services**, not escalation policies, for better ownership.
* Combine routes thoughtfully when different teams own different tools.

***

## Troubleshooting

<AccordionGroup>
  <Accordion title="My alert is not routing to anyone" icon="route">
    * Ensure the alert source is included in at least one route.
    * Verify that at least one rule matches the alert.
    * Confirm the alert payload does not contain a `target_id`, which overrides routing.
  </Accordion>

  <Accordion title="The wrong rule is triggering" icon="bolt">
    * Check the rule order; a broader rule may be matching first.
    * Validate operators and values used in conditions.
    * Ensure Alert Field mappings are extracting values correctly.
  </Accordion>

  <Accordion title="My alert is routing to too many destinations" icon="arrows-split-up-and-left">
    * All routes referencing the alert source are evaluated.
    * Remove unnecessary alert sources from routes.
    * Tighten condition logic.
  </Accordion>

  <Accordion title="JSONPath conditions aren't matching the alert" icon="code">
    * Review the alert payload preview (purple pill tokens).
    * Confirm your JSONPath reflects the actual alert structure.
    * Use Alert Fields whenever possible.
  </Accordion>
</AccordionGroup>

***

## Related Pages

<CardGroup cols={3}>
  <Card title="Alerts Overview" icon="bell" href="/alerts/alerts">
    The umbrella page covering programmatic alert ingestion, sources, and noise reduction.
  </Card>

  <Card title="Alert Sources" icon="satellite-dish" href="/alerts/alert-sources">
    Connect monitoring tools — sources are what Alert Routes evaluate.
  </Card>

  <Card title="Alert Fields" icon="tags" href="/alerts/alert-fields">
    Recommended condition source for stable routing logic across payload changes.
  </Card>
</CardGroup>
