# <a id="bitdrift.public.unary.alerts.v1.IssuesAlertConfig"></a>IssuesAlertConfig

**Source definition:** [`src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L19-L118`](<https://github.com/bitdriftlabs/api/blob/main/src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L19-L118>)

Defines the issue alert configuration for an issues view.

<section class="proto-fields-table" markdown>
| Field | Type | Description |
|---|---|---|
| new_issue_event_notification | <span class="proto-type proto-type-message">array of [<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">RateLimitedNotificationConfig</i>](bitdrift_public_unary_alerts_v1_RateLimitedNotificationConfig.md "bitdrift.public.unary.alerts.v1.RateLimitedNotificationConfig")</span><br><em class="proto-field-annotation">up to 20 items</em> | Rate limited notifications for new issue events within the view. |
| new_issue_group_notification | <span class="proto-type proto-type-message">array of [<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">RateLimitedNotificationConfig</i>](bitdrift_public_unary_alerts_v1_RateLimitedNotificationConfig.md "bitdrift.public.unary.alerts.v1.RateLimitedNotificationConfig")</span><br><em class="proto-field-annotation">up to 20 items</em> | Notifications for new issue groups within the view. |
| alerts | <span class="proto-type proto-type-message">array of [<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlert</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlert "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlert")</span><br><em class="proto-field-annotation">up to 20 items</em> | Alerts for the view. |

</section>
<p class="h4">Example</p>
```json
{
  "alerts": [
    {
      "alert_uuid": "0197eb79-ef35-72ec-8e9f-91a4123c18c5",
      "common_config": {
        "custom_notification_text": "@checkout-oncall Please investigate.",
        "description": "Triggers when the checkout workflow error rate exceeds the configured threshold.",
        "labels": {
          "key": ""
        },
        "name": "Checkout error rate",
        "notifications": [
          {
            "min_time_between_notifications": "3600s",
            "notification_config": {
              "disabled": false,
              "notification_group": {
                "name": "engineering-oncall"
              }
            }
          }
        ]
      },
      "condition": {
        "and_conditions": {
          "conditions": [
            {}
          ]
        }
      },
      "disabled": false,
      "per_issue_group": false
    }
  ],
  "new_issue_event_notification": [
    {
      "min_time_between_notifications": "3600s",
      "notification_config": {
        "disabled": false,
        "notification_group": {
          "name": "engineering-oncall"
        }
      }
    }
  ],
  "new_issue_group_notification": [
    {
      "min_time_between_notifications": "3600s",
      "notification_config": {
        "disabled": false,
        "notification_group": {
          "name": "engineering-oncall"
        }
      }
    }
  ]
}
```

# <a id="bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertConditionList"></a>IssuesAlertConfig.IssuesAlertConditionList

**Source definition:** [`src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L21-L27`](<https://github.com/bitdriftlabs/api/blob/main/src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L21-L27>)

Groups multiple issue alert conditions under a logical operator.

<section class="proto-fields-table" markdown>
| Field | Type | Description |
|---|---|---|
| conditions | <span class="proto-type proto-type-message">array of [<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertCondition</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertCondition "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertCondition")</span><br><em class="proto-field-annotation">between 2 and 20 items</em> | Conditions combined by the surrounding logical operator. |

</section>
<p class="h4">Example</p>
```json
{
  "conditions": [
    {
      "and_conditions": {}
    }
  ]
}
```

# <a id="bitdrift.public.unary.alerts.v1.IssuesAlertConfig.CountOverDuration"></a>IssuesAlertConfig.CountOverDuration

**Source definition:** [`src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L30-L36`](<https://github.com/bitdriftlabs/api/blob/main/src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L30-L36>)

Defines a count threshold that must be met within a duration.

<section class="proto-fields-table" markdown>
| Field | Type | Description |
|---|---|---|
| count | <span class="proto-type proto-type-primitive">uint64</span> | Minimum count required during the duration. |
| duration | <span class="proto-type proto-type-well-known">[google.protobuf.Duration](https://protobuf.dev/reference/protobuf/google.protobuf/#duration "google.protobuf.Duration")</span> | Duration over which the count is evaluated. |

</section>
<p class="h4">Example</p>
```json
{
  "count": 100,
  "duration": "3600s"
}
```

# <a id="bitdrift.public.unary.alerts.v1.IssuesAlertConfig.PercentOverDuration"></a>IssuesAlertConfig.PercentOverDuration

**Source definition:** [`src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L39-L45`](<https://github.com/bitdriftlabs/api/blob/main/src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L39-L45>)

Defines a percentage threshold that must be met within a duration.

<section class="proto-fields-table" markdown>
| Field | Type | Description |
|---|---|---|
| percent | <span class="proto-type proto-type-primitive">double</span> | Minimum percentage required during the duration. |
| duration | <span class="proto-type proto-type-well-known">[google.protobuf.Duration](https://protobuf.dev/reference/protobuf/google.protobuf/#duration "google.protobuf.Duration")</span> | Duration over which the percentage is evaluated. |

</section>
<p class="h4">Example</p>
```json
{
  "duration": "3600s",
  "percent": 0.1
}
```

# <a id="bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertCondition"></a>IssuesAlertConfig.IssuesAlertCondition

**Source definition:** [`src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L48-L84`](<https://github.com/bitdriftlabs/api/blob/main/src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L48-L84>)

Defines the condition that controls when an issues alert fires.

<section class="proto-fields-table" markdown>
| Field | Type | Description |
|---|---|---|
| and_conditions | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConditionList</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertConditionList "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertConditionList")</span><span class="proto-field-annotation">only one of <em>and_conditions</em>, or <em>or_conditions</em>, <em>event_threshold</em>, <em>unique_device_threshold</em>, <em>unique_session_threshold</em>, <em>event_to_app_open_threshold</em>, <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, <em>event_rate_of_change</em>, <em>event_unique_devices_to_overall_unique_devices_threshold</em> can be set</span> | All conditions must be met for the alert to fire. |
| or_conditions | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConditionList</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertConditionList "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertConditionList")</span><span class="proto-field-annotation">only one of <em>or_conditions</em>, or <em>and_conditions</em>, <em>event_threshold</em>, <em>unique_device_threshold</em>, <em>unique_session_threshold</em>, <em>event_to_app_open_threshold</em>, <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, <em>event_rate_of_change</em>, <em>event_unique_devices_to_overall_unique_devices_threshold</em> can be set</span> | Any of the conditions must be met for the alert to fire. |
| event_threshold | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">CountOverDuration</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.CountOverDuration "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.CountOverDuration")</span><span class="proto-field-annotation">only one of <em>event_threshold</em>, or <em>and_conditions</em>, <em>or_conditions</em>, <em>unique_device_threshold</em>, <em>unique_session_threshold</em>, <em>event_to_app_open_threshold</em>, <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, <em>event_rate_of_change</em>, <em>event_unique_devices_to_overall_unique_devices_threshold</em> can be set</span> | A count of events over a duration required for the alert to fire. |
| unique_device_threshold | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">CountOverDuration</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.CountOverDuration "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.CountOverDuration")</span><span class="proto-field-annotation">only one of <em>unique_device_threshold</em>, or <em>and_conditions</em>, <em>or_conditions</em>, <em>event_threshold</em>, <em>unique_session_threshold</em>, <em>event_to_app_open_threshold</em>, <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, <em>event_rate_of_change</em>, <em>event_unique_devices_to_overall_unique_devices_threshold</em> can be set</span> | A count of unique devices over a duration required for the alert to fire. |
| unique_session_threshold | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">CountOverDuration</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.CountOverDuration "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.CountOverDuration")</span><span class="proto-field-annotation">only one of <em>unique_session_threshold</em>, or <em>and_conditions</em>, <em>or_conditions</em>, <em>event_threshold</em>, <em>unique_device_threshold</em>, <em>event_to_app_open_threshold</em>, <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, <em>event_rate_of_change</em>, <em>event_unique_devices_to_overall_unique_devices_threshold</em> can be set</span> | A count of unique sessions over a duration required for the alert to fire. |
| event_to_app_open_threshold | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">PercentOverDuration</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.PercentOverDuration "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.PercentOverDuration")</span><span class="proto-field-annotation">only one of <em>event_to_app_open_threshold</em>, or <em>and_conditions</em>, <em>or_conditions</em>, <em>event_threshold</em>, <em>unique_device_threshold</em>, <em>unique_session_threshold</em>, <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, <em>event_rate_of_change</em>, <em>event_unique_devices_to_overall_unique_devices_threshold</em> can be set</span> | A percentage of events compared to app opens over a duration required for the alert to  fire. The app open metric will only be filtered by the platform and app ID. |
| event_unique_sessions_to_overall_unique_sessions_threshold | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">PercentOverDuration</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.PercentOverDuration "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.PercentOverDuration")</span><span class="proto-field-annotation">only one of <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, or <em>and_conditions</em>, <em>or_conditions</em>, <em>event_threshold</em>, <em>unique_device_threshold</em>, <em>unique_session_threshold</em>, <em>event_to_app_open_threshold</em>, <em>event_rate_of_change</em>, <em>event_unique_devices_to_overall_unique_devices_threshold</em> can be set</span> | A percentage of unique sessions with events compared to overall unique sessions over a  duration required for the alert to fire. The unique session metric will only be filtered by  the platform and app ID. |
| event_rate_of_change | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">RateOfChangeAlertConfig</i>](bitdrift_public_unary_alerts_v1_RateOfChangeAlertConfig.md "bitdrift.public.unary.alerts.v1.RateOfChangeAlertConfig")</span><span class="proto-field-annotation">only one of <em>event_rate_of_change</em>, or <em>and_conditions</em>, <em>or_conditions</em>, <em>event_threshold</em>, <em>unique_device_threshold</em>, <em>unique_session_threshold</em>, <em>event_to_app_open_threshold</em>, <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, <em>event_unique_devices_to_overall_unique_devices_threshold</em> can be set</span> | A rate of change of events over a duration required for the alert to fire. |
| event_unique_devices_to_overall_unique_devices_threshold | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">PercentOverDuration</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.PercentOverDuration "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.PercentOverDuration")</span><span class="proto-field-annotation">only one of <em>event_unique_devices_to_overall_unique_devices_threshold</em>, or <em>and_conditions</em>, <em>or_conditions</em>, <em>event_threshold</em>, <em>unique_device_threshold</em>, <em>unique_session_threshold</em>, <em>event_to_app_open_threshold</em>, <em>event_unique_sessions_to_overall_unique_sessions_threshold</em>, <em>event_rate_of_change</em> can be set</span> | A percentage of unique devices with events compared to overall unique devices over a  duration required for the alert to fire. The unique device metric will only be filtered by  the platform and app ID. |

</section>
<p class="h4">Example</p>
```json
{
  "and_conditions": {
    "conditions": [
      {}
    ]
  }
}
```

# <a id="bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlert"></a>IssuesAlertConfig.IssuesAlert

**Source definition:** [`src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L87-L108`](<https://github.com/bitdriftlabs/api/blob/main/src/bitdrift/public/unary/alerts/v1/issue_alerts.proto#L87-L108>)

Defines one issues alert attached to the view.

<section class="proto-fields-table" markdown>
| Field | Type | Description |
|---|---|---|
| common_config | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">CommonAlertConfig</i>](bitdrift_public_unary_alerts_v1_CommonAlertConfig.md "bitdrift.public.unary.alerts.v1.CommonAlertConfig")</span> | Shared metadata and notification settings for the alert. |
| per_issue_group | <span class="proto-type proto-type-primitive">bool</span> | If false, the alert applies globally (across all issue groups). If true, the alert applies  individually within every issue group. |
| condition | <span class="proto-type proto-type-message">[<i class="proto-type-part">bitdrift</i><i class="proto-type-dot">.</i><i class="proto-type-part">public</i><i class="proto-type-dot">.</i><i class="proto-type-part">unary</i><i class="proto-type-dot">.</i><i class="proto-type-part">alerts</i><i class="proto-type-dot">.</i><i class="proto-type-part">v1</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertConfig</i><i class="proto-type-dot">.</i><i class="proto-type-part">IssuesAlertCondition</i>](#bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertCondition "bitdrift.public.unary.alerts.v1.IssuesAlertConfig.IssuesAlertCondition")</span> | The condition for the alert to fire. |
| disabled | <span class="proto-type proto-type-primitive">bool</span> | Whether the alert is disabled or not. |
| alert_uuid | <span class="proto-type proto-type-primitive">string</span><br><em class="proto-field-annotation">between 1 and 255 chars</em> | The unique identifier for the alert. This only needs to be unique within a view. This is  used to associate history data with this alert. The ID should be kept consistent across  modifications where the expectation is the history will be preserved. |

</section>
<p class="h4">Example</p>
```json
{
  "alert_uuid": "0197eb79-ef35-72ec-8e9f-91a4123c18c5",
  "common_config": {
    "custom_notification_text": "@checkout-oncall Please investigate.",
    "description": "Triggers when the checkout workflow error rate exceeds the configured threshold.",
    "labels": {
      "key": ""
    },
    "name": "Checkout error rate",
    "notifications": [
      {
        "min_time_between_notifications": "3600s",
        "notification_config": {
          "disabled": false,
          "notification_group": {
            "name": "engineering-oncall"
          }
        }
      }
    ]
  },
  "condition": {
    "and_conditions": {
      "conditions": [
        {}
      ]
    }
  },
  "disabled": false,
  "per_issue_group": false
}
```

