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

# Moesif alert integration

> Send Moesif API monitoring alerts to Flashduty On-call through a Moesif webhook notification channel.

When a Moesif alert rule triggers, a notification channel of type **Webhook** sends the alert as JSON to a URL you choose. Point the channel at the Flashduty push URL and every alert notification Moesif sends creates one alert in Flashduty.

Moesif notifies only when an alert triggers and has no recovery notification, so the alert in Flashduty does not recover on its own. Turn on auto-close as described in [Recovery and auto-close](#recovery-and-auto-close).

<div className="hide">
  ## In Flashduty On-call

  ***

  You can get the integration push URL in either of the following ways.

  ### Use a dedicated integration

  1. In the Flashduty console, select **Channel** and open a channel
  2. Select **Configuration** → **Integrations** → **Private integration**, then click **Add an integration**
  3. Select **Moesif** and click **Save**
  4. Open the new integration card and copy the **Push URL**

  ### Use a shared integration

  1. In the Flashduty console, select **Integration Center → Alert Events**
  2. Select **Moesif** and enter an integration name
  3. Configure the default route and select a channel. You can add more rules under **Routes** after creation
  4. Click **Save** and copy the generated **Push URL**
</div>

## Configure Moesif

***

<Steps>
  <Step title="Create a webhook notification channel">
    1. Sign in to Moesif, open the account menu in the lower-left corner and select **Settings → Notification Channels**
    2. Click **Create Channel**, enter a channel name (for example `Flashduty`) and set **Channel Type** to **Webhook**
    3. Set **Webhook URL** to the full Flashduty push URL (starting with `https://` and including `integration_key`)
    4. Set **Method** to **POST**. Flashduty does not check **Request Headers**; you can leave them empty
    5. Click **Save**
  </Step>

  <Step title="Select the channel in your alert rules">
    1. Open **Alert Rules** and edit a rule, or click **Alert** on any time series chart to create one
    2. In **Send To**, select the channel created in the previous step and save
    3. Select the channel in every alert rule that should notify Flashduty
  </Step>

  <Step title="Verify">
    Make an alert rule that uses the channel trigger once (for example, lower the threshold of a static alert for a while) and check that Flashduty shows an alert titled with the rule name.
  </Step>
</Steps>

<Note>
  The **Notification Throttle** of a channel or rule and **Silencing alerts** stop Moesif from sending some notifications. Suppressed notifications never reach Flashduty.
</Note>

## Recovery and auto-close

***

Moesif notifies only when a rule triggers. The request body has no alert ID and no field that marks a recovery, so the alert in Flashduty does not recover on its own.

Each Moesif notification is a separate Flashduty alert. Close it by hand, or turn on [auto-close](/en/on-call/channel/create-edit) in the channel that receives this integration. We suggest twice the rule's evaluation period, for example 30 minutes for a 15-minute rule.

## Alert Key

***

The request has no field that identifies the same alert across notifications, so Flashduty generates a random Alert Key for each notification. Different notifications never merge into one alert.

## Status and severity

***

Moesif alerts carry no severity. The alert in Flashduty is always **Warning**; its status equals its severity and it does not recover.

A notification whose `type` is not `alert` (for example another kind of notification sent to the same channel) is ignored and creates no alert.

## Alert content

***

* **Title**: the alert rule name `name`. When the notification has a single group value, it is appended, for example `Latency per user: user-1`. Without a rule name the title is `Moesif alert`
* **Description**: the rule condition `metric`, then each group value with its current value and, for dynamic alerts, its direction; up to 20 are listed

| Label | Source |
| :- | :- |
| `alert_rule` | Alert rule name |
| `metric` | Rule condition |
| `grouping_feature_level1` / `grouping_feature_level2` | First and second Group By field of the rule |
| `feature` | Group value; `global` for an ungrouped rule. Set only when the notification has one value |
| `value` | Metric value at trigger time. Set only when the notification has one value |
| `direction` | Direction of a dynamic alert (`spike`, `increase`, `drop`, `positive_trend`). Set only when the notification has one value |
| `feature_count` | Number of group values, when the notification has more than one |

## Troubleshooting

***

* **Flashduty receives nothing**: check that the rule is on and selects the channel in **Send To**, and that the channel's Webhook URL is the full push URL including `integration_key`. In Moesif **Alert History**, check that the rule triggered and was not suppressed by a throttle or silencing
* **Flashduty returns a parameter error**: the body is not JSON, or has neither `name` nor `metric_values`. Use Moesif's built-in webhook channel and do not rewrite the body
* **Alerts never close**: Moesif sends no recovery. Turn on auto-close in the channel, or close the alerts by hand


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.