diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6342971778..4af6df903e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -3,4 +3,13 @@ repos:
rev: v1.33.1
hooks:
- id: typos
- args: ["--config", ".typos.toml"]
\ No newline at end of file
+ args: ["--config", ".typos.toml"]
+ - repo: local
+ hooks:
+ - id: mkdocs-warnings
+ name: mkdocs build (check for warnings)
+ entry: bash -c 'output=$(source venv/bin/activate && mkdocs build 2>&1); if echo "$output" | grep -q "WARNING"; then echo ""; echo "⚠️ MkDocs build produced warnings that might affect production:"; echo "$output" | grep "WARNING"; echo ""; fi; exit 0'
+ language: system
+ pass_filenames: false
+ always_run: true
+ verbose: true
\ No newline at end of file
diff --git a/docs/assets/flows/notifications/email/email-settings-fields.png b/docs/assets/flows/notifications/email/email-settings-fields.png
new file mode 100644
index 0000000000..5db15bbc1c
Binary files /dev/null and b/docs/assets/flows/notifications/email/email-settings-fields.png differ
diff --git a/docs/assets/flows/notifications/email/email-settings-panel.png b/docs/assets/flows/notifications/email/email-settings-panel.png
new file mode 100644
index 0000000000..bf4a83e400
Binary files /dev/null and b/docs/assets/flows/notifications/email/email-settings-panel.png differ
diff --git a/docs/assets/flows/notifications/email/save-button.png b/docs/assets/flows/notifications/email/save-button.png
new file mode 100644
index 0000000000..844608600b
Binary files /dev/null and b/docs/assets/flows/notifications/email/save-button.png differ
diff --git a/docs/assets/flows/notifications/email/select-email.png b/docs/assets/flows/notifications/email/select-email.png
new file mode 100644
index 0000000000..0cdda674fd
Binary files /dev/null and b/docs/assets/flows/notifications/email/select-email.png differ
diff --git a/docs/assets/flows/notifications/email/test-notification-success.png b/docs/assets/flows/notifications/email/test-notification-success.png
new file mode 100644
index 0000000000..8a9ce46dd8
Binary files /dev/null and b/docs/assets/flows/notifications/email/test-notification-success.png differ
diff --git a/docs/assets/flows/notifications/in-app/in-app-message-variables.png b/docs/assets/flows/notifications/in-app/in-app-message-variables.png
new file mode 100644
index 0000000000..9a5fc3e2a5
Binary files /dev/null and b/docs/assets/flows/notifications/in-app/in-app-message-variables.png differ
diff --git a/docs/assets/flows/notifications/in-app/in-app-settings-panel.png b/docs/assets/flows/notifications/in-app/in-app-settings-panel.png
new file mode 100644
index 0000000000..4e6a143c90
Binary files /dev/null and b/docs/assets/flows/notifications/in-app/in-app-settings-panel.png differ
diff --git a/docs/assets/flows/notifications/in-app/save-button.png b/docs/assets/flows/notifications/in-app/save-button.png
new file mode 100644
index 0000000000..844608600b
Binary files /dev/null and b/docs/assets/flows/notifications/in-app/save-button.png differ
diff --git a/docs/assets/flows/notifications/in-app/select-in-app.png b/docs/assets/flows/notifications/in-app/select-in-app.png
new file mode 100644
index 0000000000..d919ad6823
Binary files /dev/null and b/docs/assets/flows/notifications/in-app/select-in-app.png differ
diff --git a/docs/assets/flows/notifications/microsoft-teams/save-button.png b/docs/assets/flows/notifications/microsoft-teams/save-button.png
new file mode 100644
index 0000000000..844608600b
Binary files /dev/null and b/docs/assets/flows/notifications/microsoft-teams/save-button.png differ
diff --git a/docs/assets/flows/notifications/microsoft-teams/select-microsoft-teams.png b/docs/assets/flows/notifications/microsoft-teams/select-microsoft-teams.png
new file mode 100644
index 0000000000..ab9d07094c
Binary files /dev/null and b/docs/assets/flows/notifications/microsoft-teams/select-microsoft-teams.png differ
diff --git a/docs/assets/flows/notifications/microsoft-teams/teams-settings-fields.png b/docs/assets/flows/notifications/microsoft-teams/teams-settings-fields.png
new file mode 100644
index 0000000000..6da3eb05bf
Binary files /dev/null and b/docs/assets/flows/notifications/microsoft-teams/teams-settings-fields.png differ
diff --git a/docs/assets/flows/notifications/microsoft-teams/teams-settings-panel.png b/docs/assets/flows/notifications/microsoft-teams/teams-settings-panel.png
new file mode 100644
index 0000000000..d2dd736ece
Binary files /dev/null and b/docs/assets/flows/notifications/microsoft-teams/teams-settings-panel.png differ
diff --git a/docs/assets/flows/notifications/microsoft-teams/test-notification-success.png b/docs/assets/flows/notifications/microsoft-teams/test-notification-success.png
new file mode 100644
index 0000000000..8a9ce46dd8
Binary files /dev/null and b/docs/assets/flows/notifications/microsoft-teams/test-notification-success.png differ
diff --git a/docs/assets/flows/notifications/notification-channels.png b/docs/assets/flows/notifications/notification-channels.png
new file mode 100644
index 0000000000..41a7e9baef
Binary files /dev/null and b/docs/assets/flows/notifications/notification-channels.png differ
diff --git a/docs/assets/flows/notifications/pagerduty/pagerduty-message-variables.png b/docs/assets/flows/notifications/pagerduty/pagerduty-message-variables.png
new file mode 100644
index 0000000000..1896ea19fa
Binary files /dev/null and b/docs/assets/flows/notifications/pagerduty/pagerduty-message-variables.png differ
diff --git a/docs/assets/flows/notifications/pagerduty/pagerduty-settings-panel.png b/docs/assets/flows/notifications/pagerduty/pagerduty-settings-panel.png
new file mode 100644
index 0000000000..08e42bc7a6
Binary files /dev/null and b/docs/assets/flows/notifications/pagerduty/pagerduty-settings-panel.png differ
diff --git a/docs/assets/flows/notifications/pagerduty/save-button.png b/docs/assets/flows/notifications/pagerduty/save-button.png
new file mode 100644
index 0000000000..844608600b
Binary files /dev/null and b/docs/assets/flows/notifications/pagerduty/save-button.png differ
diff --git a/docs/assets/flows/notifications/pagerduty/select-pagerduty.png b/docs/assets/flows/notifications/pagerduty/select-pagerduty.png
new file mode 100644
index 0000000000..37e7fa0b98
Binary files /dev/null and b/docs/assets/flows/notifications/pagerduty/select-pagerduty.png differ
diff --git a/docs/assets/flows/notifications/pagerduty/severity-dropdown.png b/docs/assets/flows/notifications/pagerduty/severity-dropdown.png
new file mode 100644
index 0000000000..a24e6c5f0d
Binary files /dev/null and b/docs/assets/flows/notifications/pagerduty/severity-dropdown.png differ
diff --git a/docs/assets/flows/notifications/pagerduty/test-notification-success.png b/docs/assets/flows/notifications/pagerduty/test-notification-success.png
new file mode 100644
index 0000000000..8a9ce46dd8
Binary files /dev/null and b/docs/assets/flows/notifications/pagerduty/test-notification-success.png differ
diff --git a/docs/assets/flows/notifications/slack/acknowledge-anomaly.png b/docs/assets/flows/notifications/slack/acknowledge-anomaly.png
new file mode 100644
index 0000000000..7292f0e8ca
Binary files /dev/null and b/docs/assets/flows/notifications/slack/acknowledge-anomaly.png differ
diff --git a/docs/assets/flows/notifications/slack/anomalous-scan.png b/docs/assets/flows/notifications/slack/anomalous-scan.png
new file mode 100644
index 0000000000..44840d3eb7
Binary files /dev/null and b/docs/assets/flows/notifications/slack/anomalous-scan.png differ
diff --git a/docs/assets/flows/notifications/slack/anomaly-detected.png b/docs/assets/flows/notifications/slack/anomaly-detected.png
new file mode 100644
index 0000000000..1e584b1f6f
Binary files /dev/null and b/docs/assets/flows/notifications/slack/anomaly-detected.png differ
diff --git a/docs/assets/flows/notifications/slack/click-slack.png b/docs/assets/flows/notifications/slack/click-slack.png
new file mode 100644
index 0000000000..1f92dfd4c1
Binary files /dev/null and b/docs/assets/flows/notifications/slack/click-slack.png differ
diff --git a/docs/assets/flows/notifications/slack/comment-archive.png b/docs/assets/flows/notifications/slack/comment-archive.png
new file mode 100644
index 0000000000..639a950a48
Binary files /dev/null and b/docs/assets/flows/notifications/slack/comment-archive.png differ
diff --git a/docs/assets/flows/notifications/slack/horizontal-ellipsis.png b/docs/assets/flows/notifications/slack/horizontal-ellipsis.png
new file mode 100644
index 0000000000..b2544770b1
Binary files /dev/null and b/docs/assets/flows/notifications/slack/horizontal-ellipsis.png differ
diff --git a/docs/assets/flows/notifications/slack/save-button.png b/docs/assets/flows/notifications/slack/save-button.png
new file mode 100644
index 0000000000..844608600b
Binary files /dev/null and b/docs/assets/flows/notifications/slack/save-button.png differ
diff --git a/docs/assets/flows/notifications/slack/scan-completed.png b/docs/assets/flows/notifications/slack/scan-completed.png
new file mode 100644
index 0000000000..ea4243a110
Binary files /dev/null and b/docs/assets/flows/notifications/slack/scan-completed.png differ
diff --git a/docs/assets/flows/notifications/slack/slack-options.png b/docs/assets/flows/notifications/slack/slack-options.png
new file mode 100644
index 0000000000..c0be0c53ed
Binary files /dev/null and b/docs/assets/flows/notifications/slack/slack-options.png differ
diff --git a/docs/assets/flows/notifications/slack/slack-settings.png b/docs/assets/flows/notifications/slack/slack-settings.png
new file mode 100644
index 0000000000..ffbec45f3a
Binary files /dev/null and b/docs/assets/flows/notifications/slack/slack-settings.png differ
diff --git a/docs/assets/flows/notifications/slack/successfully-notified.png b/docs/assets/flows/notifications/slack/successfully-notified.png
new file mode 100644
index 0000000000..96be7acd5c
Binary files /dev/null and b/docs/assets/flows/notifications/slack/successfully-notified.png differ
diff --git a/docs/assets/flows/notifications/slack/test-notification.png b/docs/assets/flows/notifications/slack/test-notification.png
new file mode 100644
index 0000000000..0bb9db0f2c
Binary files /dev/null and b/docs/assets/flows/notifications/slack/test-notification.png differ
diff --git a/docs/assets/flows/notifications/slack/view-anomaly.png b/docs/assets/flows/notifications/slack/view-anomaly.png
new file mode 100644
index 0000000000..419c346c70
Binary files /dev/null and b/docs/assets/flows/notifications/slack/view-anomaly.png differ
diff --git a/docs/assets/flows/notifications/slack/view-operation.png b/docs/assets/flows/notifications/slack/view-operation.png
new file mode 100644
index 0000000000..b961cd7eac
Binary files /dev/null and b/docs/assets/flows/notifications/slack/view-operation.png differ
diff --git a/docs/assets/flows/notifications/slack/view-results.png b/docs/assets/flows/notifications/slack/view-results.png
new file mode 100644
index 0000000000..b3d9a5bb15
Binary files /dev/null and b/docs/assets/flows/notifications/slack/view-results.png differ
diff --git a/docs/assets/integrations/alerting/microsoft-logo.png b/docs/assets/integrations/alerting/microsoft-logo.png
new file mode 100644
index 0000000000..f27824f4bc
Binary files /dev/null and b/docs/assets/integrations/alerting/microsoft-logo.png differ
diff --git a/docs/assets/integrations/alerting/microsoft.png b/docs/assets/integrations/alerting/microsoft.png
deleted file mode 100644
index c96ab94dd2..0000000000
Binary files a/docs/assets/integrations/alerting/microsoft.png and /dev/null differ
diff --git a/docs/assets/integrations/alerting/pagerduty-logo.png b/docs/assets/integrations/alerting/pagerduty-logo.png
new file mode 100644
index 0000000000..819d6156c0
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty-logo.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/connect.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/connect.png
new file mode 100644
index 0000000000..324a77d5b3
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/connect.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/created-successfully.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/created-successfully.png
new file mode 100644
index 0000000000..c207526087
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/created-successfully.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/integrations-tab.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/integrations-tab.png
new file mode 100644
index 0000000000..85184907d0
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/integrations-tab.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/routing-key.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/routing-key.png
new file mode 100644
index 0000000000..528114e898
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/add-integration/routing-key.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/edit-pagerduty-integration.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/edit-pagerduty-integration.png
new file mode 100644
index 0000000000..c0c8479516
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/edit-pagerduty-integration.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/edit-pagerduty.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/edit-pagerduty.png
new file mode 100644
index 0000000000..2ef44607be
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/edit-pagerduty.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/update.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/update.png
new file mode 100644
index 0000000000..644e9c2dee
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/update.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/updated-successfully.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/updated-successfully.png
new file mode 100644
index 0000000000..70653800bd
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/edit-integration/updated-successfully.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnect-integration.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnect-integration.png
new file mode 100644
index 0000000000..a4b24e0e23
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnect-integration.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnect.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnect.png
new file mode 100644
index 0000000000..3582c40ae4
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnect.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnected-successfully.png b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnected-successfully.png
new file mode 100644
index 0000000000..23e243cbe4
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/managing-pagerduty/remove-integration/disconnected-successfully.png differ
diff --git a/docs/assets/integrations/alerting/pagerduty/pagerduty-overview/pagerduty-overview.png b/docs/assets/integrations/alerting/pagerduty/pagerduty-overview/pagerduty-overview.png
new file mode 100644
index 0000000000..d533256721
Binary files /dev/null and b/docs/assets/integrations/alerting/pagerduty/pagerduty-overview/pagerduty-overview.png differ
diff --git a/docs/assets/integrations/alerting/slack-logo.png b/docs/assets/integrations/alerting/slack-logo.png
new file mode 100644
index 0000000000..b328e70eff
Binary files /dev/null and b/docs/assets/integrations/alerting/slack-logo.png differ
diff --git a/docs/assets/integrations/alerting/slack.png b/docs/assets/integrations/alerting/slack.png
deleted file mode 100644
index 618e1a965e..0000000000
Binary files a/docs/assets/integrations/alerting/slack.png and /dev/null differ
diff --git a/docs/assets/integrations/alerting/slack/settings-light.png b/docs/assets/integrations/alerting/slack/settings-light.png
deleted file mode 100644
index 9404eb9c22..0000000000
Binary files a/docs/assets/integrations/alerting/slack/settings-light.png and /dev/null differ
diff --git a/docs/assets/integrations/settings.png b/docs/assets/integrations/settings.png
new file mode 100644
index 0000000000..d1cc8eb80f
Binary files /dev/null and b/docs/assets/integrations/settings.png differ
diff --git a/docs/changelog-2023.md b/docs/changelog-2023.md
index 8ecb481556..f86ee64e78 100644
--- a/docs/changelog-2023.md
+++ b/docs/changelog-2023.md
@@ -806,8 +806,8 @@
- {: style="height:100px"}
{: style="height:100px"}
- - The [`Absolute Change Limit`](/data-quality-checks/metric-check.md#comparison-options/) check is designed to monitor changes in a field's value by a fixed amount. If the field's value changes by more than the specified limit since the last applicable scan, an anomaly is generated.
- - The [`Relative Change Limit`](/data-quality-checks/metric-check.md#comparison-options/) check works similarly but tracks changes in terms of percentages. If the change in a field's value exceeds the defined percentage limit since the last applicable scan, an anomaly is generated.
+ - The [`Absolute Change Limit`](/data-quality-checks/metric-check.md#comparison-options) check is designed to monitor changes in a field's value by a fixed amount. If the field's value changes by more than the specified limit since the last applicable scan, an anomaly is generated.
+ - The [`Relative Change Limit`](/data-quality-checks/metric-check.md#comparison-options) check works similarly but tracks changes in terms of percentages. If the change in a field's value exceeds the defined percentage limit since the last applicable scan, an anomaly is generated.
#### General Fixes
diff --git a/docs/cli/authentication.md b/docs/cli/authentication.md
index 6cabd1ef73..3271d578ae 100644
--- a/docs/cli/authentication.md
+++ b/docs/cli/authentication.md
@@ -80,6 +80,7 @@ Environment variables take precedence over the config file. Combined with `QUALY
### GitHub Actions Example
+{% raw %}
```yaml
jobs:
quality-scan:
@@ -95,3 +96,4 @@ jobs:
run: |
qualytics operations scan --datastore-id 1 --background
```
+{% endraw %}
diff --git a/docs/cli/automation.md b/docs/cli/automation.md
index 22bd97805e..503fc5259f 100644
--- a/docs/cli/automation.md
+++ b/docs/cli/automation.md
@@ -71,6 +71,7 @@ qualytics operations scan --datastore-id 1 --background
### Quality Scan on Schedule
+{% raw %}
```yaml
name: Nightly Quality Scan
on:
@@ -93,9 +94,11 @@ jobs:
qualytics operations profile --datastore-id ${{ vars.DATASTORE_ID }}
qualytics operations scan --datastore-id ${{ vars.DATASTORE_ID }}
```
+{% endraw %}
### Config Promotion (Dev to Prod)
+{% raw %}
```yaml
name: Promote Quality Config
on:
@@ -123,9 +126,11 @@ jobs:
qualytics config import --input ./qualytics-config --dry-run
qualytics config import --input ./qualytics-config
```
+{% endraw %}
### Check Export and Import Across Environments
+{% raw %}
```yaml
name: Sync Checks Dev → Staging
on:
@@ -152,6 +157,7 @@ jobs:
QUALYTICS_TOKEN: ${{ secrets.STAGING_QUALYTICS_TOKEN }}
run: qualytics checks import --datastore-id ${{ vars.STAGING_DATASTORE_ID }} --input ./checks
```
+{% endraw %}
## Secrets Management
diff --git a/docs/cli/config-as-code.md b/docs/cli/config-as-code.md
index 5b813ca33a..06c42f69f8 100644
--- a/docs/cli/config-as-code.md
+++ b/docs/cli/config-as-code.md
@@ -154,6 +154,7 @@ qualytics config import --input ./qualytics-config
### GitHub Actions Example
+{% raw %}
```yaml
name: Promote Quality Config
on:
@@ -188,3 +189,4 @@ jobs:
DB_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
run: qualytics config import --input ./qualytics-config
```
+{% endraw %}
diff --git a/docs/explore/profiles.md b/docs/explore/profiles.md
index d6dd78fb33..2257c59745 100644
--- a/docs/explore/profiles.md
+++ b/docs/explore/profiles.md
@@ -160,7 +160,7 @@ A modal window will appear, providing the options to create the tag. Enter the r

-For more information on creating tags, refer to the [Add Tag section](../tags/overview-of-tag.md/#add-tag).
+For more information on creating tags, refer to the [Add Tag section](../tags/add-tag.md).
### Filter and Sort
diff --git a/docs/fields/field-status/concepts/field-status-lifecycle.md b/docs/fields/field-status/concepts/field-status-lifecycle.md
index 1aec8c0f20..b56df8de9a 100644
--- a/docs/fields/field-status/concepts/field-status-lifecycle.md
+++ b/docs/fields/field-status/concepts/field-status-lifecycle.md
@@ -14,10 +14,6 @@ flowchart LR
Active -- User excludes the field --> Excluded
Masked -- User excludes the field --> Excluded
Excluded -- User restores the field --> Active
-
- style Active fill:#4CAF50,color:#fff,stroke:#388E3C
- style Masked fill:#FFA726,color:#fff,stroke:#F57C00
- style Excluded fill:#EF5350,color:#fff,stroke:#C62828
```
## Automatic Transitions
@@ -33,12 +29,6 @@ flowchart LR
Missing -- Field reappears in profile results --> Active
Missing -- Permanently delete --> End(( ))
-
- style Active fill:#4CAF50,color:#fff,stroke:#388E3C
- style Masked fill:#FFA726,color:#fff,stroke:#F57C00
- style Missing fill:#FFEE58,color:#000,stroke:#F9A825
- style Start fill:#333,stroke:#333
- style End fill:#333,stroke:#333
```
## Transition Details
diff --git a/docs/flows/notification.md b/docs/flows/notification.md
deleted file mode 100644
index 5f7b63dab0..0000000000
--- a/docs/flows/notification.md
+++ /dev/null
@@ -1,260 +0,0 @@
-# Notification
-
-Users can configure the application to send notifications through various channels. The available notification options include:
-
-* In App.
-
-* Email.
-
-* Slack.
-
-* Microsoft Teams.
-
-* PagerDuty.
-
-
-
-## In App
-
-This will send an app notification to all users that use Qualytics. Users can set a custom message using variables and modify the standard text.
-
-**Step 1:** Click on **In App.**
-
-
-
-A panel **In App Settings** will appear on the right-hand side, allowing you to configure the notification message.
-
-
-
-**Message:** Enter your custom message using variables in the Message field, where you can specify the content of the notification that will be sent out.
-
-
-
-!!! tip
- You can write your custom notification message by utilizing the autocomplete feature. This feature allows you to easily insert internal variables such as `{{ flow_name }}`, `{{ container_name }}`, and `{{ datastore_name }}`. As you start typing, the autocomplete will suggest and recommend relevant variables in the dropdown.
-
-**Step 2:** After configuring the message, click **Save** to finalize the settings.
-
-
-
-## Email
-
-Adding email notifications allows users to receive timely updates or alerts directly in their inbox. By setting up notifications with specific triggers and channels, you can ensure that you are promptly informed about critical events, such as operation completions or detected anomalies. This proactive approach allows you to take immediate action when necessary, helping to address issues quickly and maintain the smooth and efficient operation of your processes.
-
-**Step 1:** Click on **Email.**
-
-
-
-A panel **Email Settings** will appear on the right-hand side, allowing you to add email addresses, specify an email subject, and configure the notification message.
-
-
-
-| No. | Field | Description |
-| :---- | :---- | :---- |
-| 1. | Email Address | Enter the email address where the notification should be sent. |
-| 2. | Email Subject | Enter the subject line of the notification email to help recipients identify its purpose. |
-| 3. | Message | Text area to customize the notification message content with dynamic placeholders like **`{{flow_name}}`**, **`{{operation_type}}`**, and **`{{operation_result}}`**. |
-
-
-
-**Step 2:** Click the Test Notification button to send a test email to the provided address. If the email is successfully sent, you will receive a confirmation message indicating **Notification successfully sent.**
-
-
-
-**Step 3:** Once all fields are configured, click the **Save** button to finalize the email notification setup.
-
-
-
-## Notification Message Variables
-
-Qualytics allows you to customize notification messages using dynamic variables (tokens). These tokens are automatically replaced with real values when a Flow is triggered.
-
-!!! note
- For more detailed information, review the [notification tokens documentation](../flows/notification-tokens.md){target="_blank"}.
-
-## Slack
-
-Qualytics integrates with Slack to deliver real-time notifications on scan completions, anomalies, and operational statuses, ensuring teams stay informed and can act quickly. With this integration, users receive instant alerts for system events, monitor scan results, and manage data anomalies directly within Slack. They can view notifications, acknowledge issues, and take necessary actions without switching platforms.
-
-**Step 1**: Click on **Slack.**
-
-
-
-A **Slack Settings** panel appears on the right side of the screen.
-
-
-
-| No. | Field | Description |
-| :---- | :---- | :---- |
-| **1.** | Channel | Choose the channel where notifications should be sent using the **Channel** dropdown. For demonstration purposes, the channel **#demo** is selected. |
-| **2.** | Preview | Shows a preview of the Slack notification that will be sent when the flow runs. |
-
-
-
-**Step 2:** Click the **Test Notification** button to send a sample notification to the selected Slack channel.
-
-
-
-A prompt appears stating **Notification successfully sent** once the notification is successfully delivered.
-
-
-
-**Step 3:** Once the notification is successfully sent, check your connected Slack workspace to ensure it is linked to Qualytics. You will see the test notification in the selected Slack channel.
-
-!!! note
- Each trigger generates a different type of Slack notification message. The content and format of the message vary based on the specific trigger event.
-
-
-
-**Step 4:** After confirming that the notification was received successfully, return and click the Save button.
-
-
-
-## Examples of Trigger Messages
-
-Trigger messages in Slack provide real-time notifications for various system events, ensuring timely awareness and action. Each trigger message follows a unique format and conveys different types of information based on the operation performed. Below are examples highlighting distinct scenarios:
-
-**Scenario 1: Scan Completion Notification**
-
-When a data sync or scan operation completes successfully, a notification is sent to Slack. The message includes details such as the dataset name, operation type (e.g., Sync Operation), and the result of the operation.
-
-
-
-**Scenario 2: Anomalous Table or File Detected**
-
-When a scan detects a critical data anomaly, Slack sends a detailed notification highlighting the issue. The notification includes the dataset name, flow (such as Quality Monitor), and source datastore. It also provides a summary of the anomaly, specifying the number of records that differ between datasets and the container where the discrepancy was found. Additionally, the message offers an option to view detailed results.
-
-
-
-**Scenario 3: Anomaly Detected**
-
-When a scan detects record anomalies, Slack sends a notification highlighting the affected container, flow, and source datastore. It specifies the number of records that differ between datasets and provides options to view or acknowledge the anomaly.
-
-
-
-## Managing Qualytics Alerts in Slack
-
-Qualytics Slack integration enables real-time monitoring and quick action on data quality issues directly from Slack. This guide outlines the different types of alerts and the actions you can take without leaving Slack.
-
-**When an Operation Success or failure**
-
-**Step 1:** A Slack notification confirms the scan completion with a **Success/failure** status.
-
-For demonstration purposes we are using Success operation.
-
-
-
-**Step 2:** Click **View Operation** to be redirected automatically to the result section in Qualytics.
-
-
-
-**When an Anomalous File or Table is Detected**
-
-**Step 1:** A Slack alert notifies about anomalies in a dataset.
-
-
-
-**Step 2:** Click **View Results** to examine the identified discrepancies directly in Qualytics.
-
-
-
-**When a Record Anomaly is Detected**
-
-If a **shape or record anomaly** is found, you'll receive a Slack notification. You can take the following actions:
-
-
-
-* **View Anomaly** – Click on view anomaly to open the details in Qualytics to investigate further.
-
-
-
-* **Acknowledge** – Click on Acknowledge to mark it as reviewed to avoid duplicate alerts.
-
-
-
-* **Horizontal ellipsis(⋯)** – Click on horizontal ellipsis.
-
-
-
- A dropdown will open with option **comment** and **archive** :
-
-
-
-| No. | Action | Description |
-| :---- | :---- | :---- |
-| **1.** | Comment | Add Comment to collaborate with your team. |
-| **2.** | Archive | Archive if no further action is needed. |
-
-## Microsoft Teams
-
-**Step 1:** Click on **Microsoft Teams.**
-
-
-
-A panel **Microsoft Teams Settings** will appear on the right-hand side, allowing you to add a webhook url and configure the notification message.
-
-
-
-| No. | Field | Description |
-| :---- | :---- | :---- |
-| 1. | Teams Webhook URL | Enter the Teams webhook URL where the notification should be sent. |
-| 2. | Message | Text area to customize the notification message content with dynamic placeholders like **`{{flow_name}}`**, **`{{operation_type}}`**, and **`{{operation_result}}`**. |
-
-
-
-**Step 2:** Click the **"Test Notification"** button to send a test message to the provided **“Webhook URL”.** If the message is successfully sent, you will receive a confirmation notification indicating **"Notification successfully sent".**
-
-
-
-**Step 3:** Once all fields are configured, click the **Save** button to finalize the Microsoft Teams notification setup.
-
-
-
-## PagerDuty
-
-Integrating PagerDuty with Qualytics ensures that your team gets instant alerts for critical data events and system issues. With this connection, you can automatically receive real-time notifications about anomalies, operation completions and other important events directly in your PagerDuty account. By categorizing alerts based on severity, it ensures the right people are notified at the right time, speeding up decision-making and resolving incidents efficiently. This helps your team respond quickly to issues, reducing downtime and keeping data operations on track.
-
-**Step 1:** Click on **PagerDuty.**
-
-
-
-A **PagerDuty Settings** panel will appear on the right-hand side, enabling users to configure and send PagerDuty notifications.
-
-
-
-**Integration Key:** Enter the **Integration Key** where you want the notification to be sent.
-
-
-
-**Severity:** Select the appropriate PagerDuty severity level to categorize incidents based on their urgency and impact. The available severity levels are:
-
-* **Info:** For informational messages that don't require immediate action but provide helpful context.
-
-* **Warning:** For potential issues that may need attention but aren't immediately critical.
-
-* **Error:** For significant problems that require prompt resolution to prevent disruption.
-
-* **Critical:** For urgent issues that demand immediate attention due to their severe impact on system operations.
-
-
-
-**Message:** Enter your custom message using variables in the Message field, where you can specify the content of the notification that will be sent out.
-
-
-
-!!! tip
- You can write your custom notification message by utilizing the autocomplete feature. This feature allows you to easily insert internal variables such as `{{ flow_name }}`, `{{ operation_type }}`, and `{{ datastore_name }}`. As you start typing, the autocomplete will suggest and recommend relevant variables in the dropdown.
-
-**Step 2:** Click on the **Test notification** button to check if the integration key is functioning correctly. Once the test notification is sent, you will see a success message, **"Notification successfully sent."**
-
-
-
-**Step 3:** Once you have entered all the values, then click on the **Save** button.
-
-
-
-## FAQ
-
-**1.** Can I test notifications before publishing?
-
-Yes. Each notification channel—Email, Slack, Teams, PagerDuty, and HTTP—includes a Test Notification button that allows you to send a sample message before publishing the flow.
\ No newline at end of file
diff --git a/docs/flows/notifications/email/api.md b/docs/flows/notifications/email/api.md
new file mode 100644
index 0000000000..76d4d1f468
--- /dev/null
+++ b/docs/flows/notifications/email/api.md
@@ -0,0 +1,90 @@
+# Email Notification API
+
+This page documents the API endpoints related to Email notification operations within Flows.
+
+All endpoints use the base URL of your Qualytics deployment (e.g., `https://your-instance.qualytics.io/api`).
+
+## Get Notification Specifications
+
+Retrieves the specifications for configuring Email notifications in Flow actions.
+
+**Endpoint**: `GET /api/flows/actions/notification/specifications`
+
+**Permission**: Member
+
+??? example "Example response (Email entry)"
+
+ ```json
+ {
+ "display_name": "Email",
+ "type": "Email",
+ "properties": [
+ {
+ "field": "emails",
+ "map_to": "parameters",
+ "required": true,
+ "title": "Email Address",
+ "type": "string",
+ "placeholder": "user1@example.com, user2@example.com"
+ },
+ {
+ "field": "email_subject",
+ "map_to": "parameters",
+ "required": false,
+ "title": "Email Subject",
+ "type": "string",
+ "default": "Qualytics Notification",
+ "placeholder": "Qualytics Notification"
+ }
+ ]
+ }
+ ```
+
+### Configuration Properties
+
+| Property | Type | Required | Default | Description |
+| :--- | :--- | :--- | :--- | :--- |
+| `emails` | string | Yes | — | Comma-separated list of email addresses |
+| `email_subject` | string | No | `Qualytics Notification` | Subject line of the notification email |
+
+## Get Notification Tokens
+
+Retrieves the available message tokens for each trigger type.
+
+**Endpoint**: `GET /api/flows/actions/notification/tokens`
+
+**Permission**: Member
+
+## Test Notification
+
+Sends a test Email notification to verify the configuration.
+
+**Endpoint**: `POST /api/flows/actions/notifications/test`
+
+**Permission**: Manager
+
+??? example "Example request"
+
+ ```bash
+ curl -X POST "https://your-instance.qualytics.io/api/flows/actions/notifications/test" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "Email",
+ "tokenized_message": "Test notification from {{ flow_name }}",
+ "parameters": {
+ "emails": "user@example.com",
+ "email_subject": "Qualytics Test Alert"
+ }
+ }'
+ ```
+
+ **Response**: `200 OK` with a success confirmation.
+
+## Permission Summary
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications | Member |
+| View notification tokens | Member |
+| Test notification | Manager |
diff --git a/docs/flows/notifications/email/faq.md b/docs/flows/notifications/email/faq.md
new file mode 100644
index 0000000000..b075bbd8e1
--- /dev/null
+++ b/docs/flows/notifications/email/faq.md
@@ -0,0 +1,35 @@
+# Email Notification FAQ
+
+## Configuration & Recipients
+
+#### Can I send notifications to multiple email addresses?
+
+Yes. Enter multiple email addresses separated by commas in the **Email Address** field (e.g., `user1@example.com, user2@example.com`).
+
+#### Is the email subject customizable?
+
+Yes. You can enter a custom subject line in the **Email Subject** field. If left empty, the default subject `Qualytics Notification` will be used.
+
+#### Can I use variables in the email subject?
+
+No. Dynamic tokens (variables) are only supported in the **Message** body, not in the Email Subject field.
+
+---
+
+## Message & Format
+
+#### What format is the email notification?
+
+Email notifications are sent as formatted messages with the content you configured in the Message field. Dynamic tokens are replaced with their actual values when the Flow triggers.
+
+---
+
+## Testing & Troubleshooting
+
+#### Can I test the email notification before publishing the Flow?
+
+Yes. Click the **Test Notification** button to send a test email to the configured address. You will see a confirmation message if the email was sent successfully.
+
+#### What happens if an email address is invalid?
+
+The notification delivery may fail for that specific address. Other valid addresses in the list will still receive the notification. You can verify addresses by using the **Test Notification** feature.
diff --git a/docs/flows/notifications/email/overview.md b/docs/flows/notifications/email/overview.md
new file mode 100644
index 0000000000..8f69403a8a
--- /dev/null
+++ b/docs/flows/notifications/email/overview.md
@@ -0,0 +1,90 @@
+# Email Notification
+
+Email notifications deliver data quality alerts directly to one or more email inboxes. When a Flow trigger fires, Qualytics resolves any message variables, builds an email with the configured subject and body, and sends it to every address in the recipient list. Each address is processed independently — if one address is invalid, the remaining recipients still receive the notification.
+
+Email is well suited for stakeholders who need a persistent, searchable record of data quality events outside of the Qualytics platform, such as compliance officers, external partners, or team members who do not regularly log in.
+
+## Lifecycle
+
+
+
+```mermaid
+flowchart TD
+ A[Flow Trigger Fires] --> B[Resolve Message Variables]
+ B --> C[Build Email with Subject & Body]
+ C --> D[Send to Configured Addresses]
+ D --> E[Email Delivered to Inbox]
+```
+
+
+
+## Configuration
+
+**Step 1:** Click on **Email.**
+
+
+
+A panel **Email Settings** will appear on the right-hand side, allowing you to add email addresses, specify an email subject, and configure the notification message.
+
+
+
+| No. | Field | Description |
+| :---- | :---- | :---- |
+| 1. | Email Address | Enter one or more email addresses separated by `;` or `,`. Each address receives the notification independently — invalid addresses are silently skipped without affecting the others. The notification fails only if **all** provided addresses are invalid. |
+| 2. | Email Subject | Enter the subject line for the notification email. This helps recipients quickly identify the purpose and priority of the message in their inbox. |
+| 3. | Message | Text area to customize the notification message content with dynamic variables like `{{ flow_name }}`, `{{ operation_type }}`, and `{{ operation_result }}`. |
+
+
+
+!!! tip
+ Use the autocomplete feature (triggered by `Ctrl+Space`) to insert variables such as `{{ flow_name }}`, `{{ container_name }}`, and `{{ datastore_name }}`. The autocomplete only suggests variables that are valid for the selected Flow trigger type.
+
+**Step 2:** Click the **Test Notification** button to send a test email to the provided address. If the email is successfully sent, you will receive a confirmation message indicating **"Notification successfully sent."**
+
+
+
+**Step 3:** Once all fields are configured, click the **Save** button to finalize the email notification setup.
+
+
+
+## Message Variables
+
+Email notifications support the same dynamic tokens as all other notification channels. The available tokens depend on the Flow trigger type:
+
+| Token | Description |
+| :--- | :--- |
+| `{{ flow_name }}` | Name of the Flow |
+| `{{ datastore_name }}` | Datastore involved in the event |
+| `{{ datastore_link }}` | Link to the datastore |
+| `{{ container_name }}` | Container (table or file) involved |
+| `{{ container_link }}` | Link to the container |
+| `{{ operation_type }}` | Type of operation (Catalog, Profile, Scan) |
+| `{{ operation_result }}` | Result of the operation (Success, Failure) |
+| `{{ anomaly_message }}` | Description of the detected anomaly |
+| `{{ anomaly_type }}` | Type of anomaly detected |
+| `{{ target_link }}` | Direct link to view the event details |
+
+!!! warning
+ **Manual** and **Scheduled** Flow trigger types do not support message variables. Notification messages for these triggers must use static text only.
+
+For the complete list of tokens organized by trigger type, see the [Message Variables](../message-variables.md) documentation.
+
+## Permission
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications and tokens | Member |
+| Configure and save notification | Manager |
+| Test notification | Manager |
+
+For the complete list of roles and permissions, see the [Security](../../../settings/security/overview.md) documentation.
+
+## Troubleshooting
+
+| Symptom | Possible Cause | Resolution |
+| :--- | :--- | :--- |
+| Test notification fails | Invalid email address | Verify the email address format. Ensure there are no extra spaces or typos. Multiple addresses must be separated by `;` or `,`. |
+| Email not received | Email went to spam/junk folder | Check the recipient's spam or junk folder. Add the sender address to the allowlist. |
+| Message variables showing as raw text | Unsupported token for the trigger type | Ensure the tokens used are valid for the selected Flow trigger type. Use the autocomplete feature (`Ctrl+Space`) to see available tokens. |
+| Multiple recipients but only some received | One or more invalid addresses | Invalid addresses are silently skipped. Verify each address individually using the **Test Notification** feature. |
+| Notification sent but content is empty | Message field left blank | Enter a message in the configuration. Email notifications require both a subject and a message body. |
diff --git a/docs/flows/notifications/faq.md b/docs/flows/notifications/faq.md
new file mode 100644
index 0000000000..e303e7c5c9
--- /dev/null
+++ b/docs/flows/notifications/faq.md
@@ -0,0 +1,63 @@
+# Notifications FAQ
+
+## General
+
+#### What are notifications in Qualytics?
+
+Notifications are actions within Flows that send alerts through configured channels (In App, Email, Slack, Microsoft Teams, PagerDuty) when a trigger event occurs, such as an anomaly detection, operation completion, or partition scan.
+
+#### How many notification channels can I use in a single Flow?
+
+There is no limit. You can add multiple notification actions to a Flow, each configured with a different channel. For example, a single Flow can send an In App notification, an Email, and a Slack message simultaneously.
+
+#### Do all notification channels receive the same information?
+
+All channels have access to the same set of message variables (tokens) based on the Flow trigger type. However, the format and presentation may differ — for example, Slack uses Block Kit for rich formatting, while PagerDuty creates structured incidents with severity levels.
+
+---
+
+## Triggers & Behavior
+
+#### Which Flow trigger types support notifications?
+
+Notifications are supported on all trigger types: **Anomaly**, **Operation**, **Partition Scan**, **Anomaly Archive**, **Anomaly Delete**, **Schedule**, and **Manual**. However, Schedule and Manual triggers do not support message variables — only static text.
+
+#### What happens if a notification fails to send?
+
+If a notification action fails (e.g., due to a disconnected integration or invalid configuration), the Flow continues to execute. Other actions in the same Flow — including other notification channels — are not affected.
+
+#### Are notifications sent in real time?
+
+Yes. Notifications are dispatched immediately when the Flow trigger fires. Delivery time depends on the external channel (e.g., Slack, Email, PagerDuty).
+
+---
+
+## Message Variables
+
+#### What are message variables?
+
+Message variables (also called tokens) are dynamic placeholders like `{{ flow_name }}` or `{{ datastore_name }}` that are automatically replaced with real values when a notification is sent. They allow you to create reusable, context-aware messages.
+
+#### Are the same variables available across all channels?
+
+Yes. The available variables depend on the **Flow trigger type**, not on the notification channel. All channels share the same set of tokens for a given trigger. The only exceptions are channel-specific color tokens for Slack (`{{ operation_result_color }}`) and Microsoft Teams (`{{ operation_result_color__msft_teams }}`).
+
+#### What happens if I use a variable that is not supported by the trigger type?
+
+The variable will not be replaced and will appear as raw text in the notification message. Use the autocomplete feature in the message editor — it only suggests variables valid for the selected trigger type.
+
+---
+
+## Testing & Permissions
+
+#### Can I test notifications before publishing the Flow?
+
+Yes. Each notification channel includes a **Test Notification** button that sends a sample message before the Flow is published. This allows you to verify the configuration and message formatting.
+
+#### What permissions are needed to configure and test notifications?
+
+A **Member** role is required to configure notification actions. A **Manager** role is required to send test notifications.
+
+#### Does testing a notification affect external systems?
+
+It depends on the channel. For most channels (In App, Email, Slack, Microsoft Teams), a test message is sent to the configured destination. For PagerDuty, test notifications **will create an actual incident** in your PagerDuty service.
diff --git a/docs/flows/notifications/in-app/api.md b/docs/flows/notifications/in-app/api.md
new file mode 100644
index 0000000000..ebf021bc04
--- /dev/null
+++ b/docs/flows/notifications/in-app/api.md
@@ -0,0 +1,64 @@
+# In App Notification API
+
+This page documents the API endpoints related to In App notification operations within Flows.
+
+All endpoints use the base URL of your Qualytics deployment (e.g., `https://your-instance.qualytics.io/api`).
+
+!!! note
+ In App notifications do not have specific configuration properties beyond the message. They are automatically delivered to all Qualytics users when triggered.
+
+## Get Notification Tokens
+
+Retrieves the available message tokens for each trigger type.
+
+**Endpoint**: `GET /api/flows/actions/notification/tokens`
+
+**Permission**: Member
+
+??? example "Example request and response"
+
+ **Request**:
+
+ ```bash
+ curl -X GET "https://your-instance.qualytics.io/api/flows/actions/notification/tokens" \
+ -H "Authorization: Bearer YOUR_TOKEN"
+ ```
+
+ **Response** (abbreviated):
+
+ ```json
+ [
+ {
+ "trigger_type": "anomaly",
+ "valid_message_tokens": ["{{flow_name}}", "{{datastore_name}}", "{{container_name}}", "{{anomaly_message}}", "{{anomaly_type}}"],
+ "default_message": "..."
+ },
+ {
+ "trigger_type": "operation",
+ "valid_message_tokens": ["{{flow_name}}", "{{datastore_name}}", "{{operation_type}}", "{{operation_result}}"],
+ "default_message": "..."
+ }
+ ]
+ ```
+
+## Test Notification
+
+Sends a test In App notification to verify the configuration.
+
+**Endpoint**: `POST /api/flows/actions/notifications/test`
+
+**Permission**: Manager
+
+??? example "Example request"
+
+ ```bash
+ curl -X POST "https://your-instance.qualytics.io/api/flows/actions/notifications/test" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "InApp",
+ "tokenized_message": "Test notification from {{ flow_name }}"
+ }'
+ ```
+
+ **Response**: `200 OK` with a success confirmation.
diff --git a/docs/flows/notifications/in-app/faq.md b/docs/flows/notifications/in-app/faq.md
new file mode 100644
index 0000000000..62a920334e
--- /dev/null
+++ b/docs/flows/notifications/in-app/faq.md
@@ -0,0 +1,27 @@
+# In App Notification FAQ
+
+## Delivery & Targeting
+
+#### Who receives In App notifications?
+
+All users with access to the Qualytics platform will receive In App notifications when a Flow triggers this action.
+
+#### Can I target specific users with In App notifications?
+
+No. In App notifications are delivered to all users in the platform. If you need to notify specific individuals, consider using Email or Slack notifications instead.
+
+#### Where do In App notifications appear?
+
+In App notifications appear in the notification bell icon in the Qualytics navigation bar. Users can view and manage their notifications from there.
+
+---
+
+## Configuration & Customization
+
+#### Can I customize the notification message?
+
+Yes. You can write a custom message using dynamic variables (tokens) like `{{ flow_name }}`, `{{ datastore_name }}`, and `{{ anomaly_message }}`. The autocomplete feature will suggest available tokens as you type.
+
+#### Do In App notifications support all trigger types?
+
+Yes. In App notifications support all Flow trigger types: Anomaly, Operation, Partition Scan, Schedule, and Manual.
diff --git a/docs/flows/notifications/in-app/overview.md b/docs/flows/notifications/in-app/overview.md
new file mode 100644
index 0000000000..cd162c957f
--- /dev/null
+++ b/docs/flows/notifications/in-app/overview.md
@@ -0,0 +1,78 @@
+# In App Notification
+
+In App notifications deliver alerts directly within the Qualytics platform. When a Flow trigger fires, Qualytics creates a notification for each eligible user — all **Admin** users and all users belonging to **teams associated with the target object** (e.g., the datastore or container involved in the event). If the target object has no assigned teams, all users in the platform receive the notification.
+
+Notifications appear in the **bell icon** in the navigation bar, where users can view and manage them.
+
+## Lifecycle
+
+
+
+```mermaid
+flowchart TD
+ A[Flow Trigger Fires] --> B[Resolve Message Variables]
+ B --> C[Identify Target Object Teams]
+ C --> D[Send to Admins + Team Members]
+ D --> E[Notification Appears in Bell Icon]
+```
+
+
+
+## Configuration
+
+**Step 1:** Click on **In App.**
+
+
+
+A panel **In App Settings** will appear on the right-hand side, allowing you to configure the notification message.
+
+
+
+**Message:** Enter your custom message in the Message field. You can use dynamic variables that will be replaced with real values when the notification is sent. The available variables depend on the Flow trigger type (e.g., Anomaly, Operation, Partition Scan).
+
+
+
+!!! tip
+ Use the autocomplete feature (triggered by `Ctrl+Space`) to insert variables such as `{{ flow_name }}`, `{{ container_name }}`, and `{{ datastore_name }}`. The autocomplete only suggests variables that are valid for the selected Flow trigger type.
+
+**Step 2:** After configuring the message, click **Save** to finalize the settings.
+
+
+
+## Message Variables
+
+In App notifications support dynamic tokens that depend on the Flow trigger type. Common tokens include:
+
+| Token | Description |
+| :--- | :--- |
+| `{{ flow_name }}` | Name of the Flow |
+| `{{ datastore_name }}` | Datastore involved in the event |
+| `{{ container_name }}` | Container (table or file) involved |
+| `{{ operation_type }}` | Type of operation (Catalog, Profile, Scan) |
+| `{{ operation_result }}` | Result of the operation (Success, Failure) |
+| `{{ anomaly_message }}` | Description of the detected anomaly |
+| `{{ anomaly_type }}` | Type of anomaly detected |
+
+!!! warning
+ **Manual** and **Scheduled** Flow trigger types do not support message variables. Notification messages for these triggers must use static text only.
+
+For the complete list of tokens organized by trigger type, see the [Message Variables](../message-variables.md) documentation.
+
+## Permission
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications and tokens | Member |
+| Configure and save notification | Manager |
+| Test notification | Manager |
+
+For the complete list of roles and permissions, see the [Security](../../../settings/security/overview.md) documentation.
+
+## Troubleshooting
+
+| Symptom | Possible Cause | Resolution |
+| :--- | :--- | :--- |
+| Notification not appearing in bell icon | Flow trigger did not fire | Verify that the Flow is active and the trigger conditions are met. Check the Flow execution history for errors. |
+| Notification not received by a specific user | User is not an Admin and not in a team assigned to the target datastore | Verify the user's team assignments include the relevant datastore. Admin users always receive In App notifications. |
+| Message variables showing as raw text | Unsupported token for the trigger type | Ensure the tokens used are valid for the selected Flow trigger type. Use the autocomplete feature (`Ctrl+Space`) to see available tokens. |
+| Notification sent but content is empty | Message field left blank | Enter a message in the configuration. In App notifications require a custom message to be set. |
diff --git a/docs/flows/notification-tokens.md b/docs/flows/notifications/message-variables.md
similarity index 85%
rename from docs/flows/notification-tokens.md
rename to docs/flows/notifications/message-variables.md
index 1ec47fee37..1a92b18a08 100644
--- a/docs/flows/notification-tokens.md
+++ b/docs/flows/notifications/message-variables.md
@@ -1,4 +1,4 @@
-# Notification Tokens
+# Message Variables
Qualytics allows you to customize notification messages using dynamic variables (tokens). These tokens are automatically replaced with real values when a Flow is triggered.
@@ -84,3 +84,15 @@ The following tokens are available when a Flow is triggered by permanent anomaly
!!! note
Notification tokens appear in the autocomplete menu only if they are valid for the selected Flow trigger type. If a token does not appear in the list, it is not supported for that trigger.
+## Channel-Specific Variables
+
+Some notification channels support additional tokens beyond the ones listed above.
+
+| Channel | Additional Variables |
+| :--- | :--- |
+| [In App](./in-app/overview.md) | Standard tokens only. |
+| [Email](./email/overview.md) | Standard tokens only. |
+| [Slack](./slack/overview.md) | `{{operation_result_color}}` — hex color code based on operation result. |
+| [Microsoft Teams](./microsoft-teams/overview.md) | `{{operation_result_color__msft_teams}}` — hex color code for Adaptive Card theming. |
+| [PagerDuty](./pagerduty/overview.md) | Standard tokens only. Severity and custom details are configured separately. |
+
diff --git a/docs/flows/notifications/microsoft-teams/api.md b/docs/flows/notifications/microsoft-teams/api.md
new file mode 100644
index 0000000000..e886f4b13b
--- /dev/null
+++ b/docs/flows/notifications/microsoft-teams/api.md
@@ -0,0 +1,79 @@
+# Microsoft Teams Notification API
+
+This page documents the API endpoints related to Microsoft Teams notification operations within Flows.
+
+All endpoints use the base URL of your Qualytics deployment (e.g., `https://your-instance.qualytics.io/api`).
+
+## Get Notification Specifications
+
+Retrieves the specifications for configuring Microsoft Teams notifications in Flow actions.
+
+**Endpoint**: `GET /api/flows/actions/notification/specifications`
+
+**Permission**: Member
+
+??? example "Example response (Microsoft Teams entry)"
+
+ ```json
+ {
+ "display_name": "Microsoft Teams",
+ "type": "MSFT_Teams",
+ "properties": [
+ {
+ "field": "channel",
+ "map_to": "parameters",
+ "required": true,
+ "title": "Channel",
+ "type": "enum",
+ "placeholder": "general"
+ }
+ ]
+ }
+ ```
+
+### Configuration Properties
+
+| Property | Type | Required | Description |
+| :--- | :--- | :--- | :--- |
+| `channel` | enum | Yes | The Microsoft Teams channel where notifications will be sent. The available channels are retrieved from your connected Teams workspace. |
+
+## Get Notification Tokens
+
+Retrieves the available message tokens for each trigger type.
+
+**Endpoint**: `GET /api/flows/actions/notification/tokens`
+
+**Permission**: Member
+
+## Test Notification
+
+Sends a test Microsoft Teams notification to verify the configuration.
+
+**Endpoint**: `POST /api/flows/actions/notifications/test`
+
+**Permission**: Manager
+
+??? example "Example request"
+
+ ```bash
+ curl -X POST "https://your-instance.qualytics.io/api/flows/actions/notifications/test" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "MSFT_Teams",
+ "tokenized_message": "Test notification from {{ flow_name }}",
+ "parameters": {
+ "channel": "general"
+ }
+ }'
+ ```
+
+ **Response**: `200 OK` with a success confirmation.
+
+## Permission Summary
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications | Member |
+| View notification tokens | Member |
+| Test notification | Manager |
diff --git a/docs/flows/notifications/microsoft-teams/faq.md b/docs/flows/notifications/microsoft-teams/faq.md
new file mode 100644
index 0000000000..68e3a4d493
--- /dev/null
+++ b/docs/flows/notifications/microsoft-teams/faq.md
@@ -0,0 +1,35 @@
+# Microsoft Teams Notification FAQ
+
+## Setup & Prerequisites
+
+#### Do I need to set up the Teams integration before using Teams notifications in Flows?
+
+Yes. You must first connect the Microsoft Teams integration in **Settings > Integrations > Microsoft Teams** before you can select Teams channels in Flow notification actions. See the [Microsoft Teams Integration guide](../../../settings/integrations/alerting/msft_teams.md) for setup instructions.
+
+---
+
+## Channel & Configuration
+
+#### How do I choose which Teams channel to send notifications to?
+
+The **Channel** dropdown in the Microsoft Teams notification configuration shows all available channels from your connected Teams workspace. Select the channel where you want notifications to appear.
+
+#### Can I send notifications to multiple Teams channels from the same Flow?
+
+Yes. Add multiple Microsoft Teams notification actions to your Flow, each configured with a different channel.
+
+---
+
+## Message & Customization
+
+#### What format are Teams notifications?
+
+Microsoft Teams notifications are sent as Adaptive Cards, which provide a rich, structured format with sections, facts, and action buttons. The card format varies based on the trigger type.
+
+#### Can I customize the notification message?
+
+Yes. You can write a custom message using dynamic variables (tokens). The message content is rendered within the Adaptive Card format specific to Microsoft Teams.
+
+#### What is the `operation_result_color__msft_teams` token?
+
+This is a Teams-specific token that returns a color code compatible with Microsoft Teams Adaptive Cards. It is used to color-code notifications based on the operation result (e.g., green for success, red for failure).
diff --git a/docs/flows/notifications/microsoft-teams/overview.md b/docs/flows/notifications/microsoft-teams/overview.md
new file mode 100644
index 0000000000..88bf300549
--- /dev/null
+++ b/docs/flows/notifications/microsoft-teams/overview.md
@@ -0,0 +1,91 @@
+# Microsoft Teams Notification
+
+!!! warning
+ Before using Microsoft Teams notifications in Flows, you need to connect the Microsoft Teams integration in **Settings > Integrations**. See the [Microsoft Teams Integration setup guide](../../../settings/integrations/alerting/msft_teams.md) for instructions.
+
+Microsoft Teams notifications deliver data quality alerts directly into your Teams channels as rich Adaptive Cards. When a Flow trigger fires, Qualytics resolves message variables, builds an Adaptive Card with the configured content, and posts it to the selected channel. Adaptive Cards provide a structured, visually formatted layout that makes it easy for team members to quickly understand the event context — including color-coded operation results — without leaving the Teams interface.
+
+## Lifecycle
+
+
+
+```mermaid
+flowchart TD
+ A[Flow Trigger Fires] --> B[Resolve Message Variables]
+ B --> C[Build Adaptive Card]
+ C --> D[Send to Selected Channel]
+ D --> E[Card Appears in Teams]
+```
+
+
+
+## Configuration
+
+**Step 1:** Click on **Microsoft Teams.**
+
+
+
+A panel **Microsoft Teams Settings** will appear on the right-hand side, allowing you to select a channel and configure the notification message.
+
+
+
+| No. | Field | Description |
+| :---- | :---- | :---- |
+| 1. | Channel | Select the Teams channel where the notification should be sent. |
+| 2. | Message | Text area to customize the notification message content with dynamic placeholders like `{{ flow_name }}`, `{{ operation_type }}`, and `{{ operation_result }}`. |
+
+
+
+!!! tip
+ Use the autocomplete feature (triggered by `Ctrl+Space`) to insert variables such as `{{ flow_name }}`, `{{ container_name }}`, and `{{ datastore_name }}`. The autocomplete only suggests variables that are valid for the selected Flow trigger type.
+
+**Step 2:** Click the **"Test Notification"** button to send a test message to the selected channel. If the message is successfully sent, you will receive a confirmation notification indicating **"Notification successfully sent".**
+
+
+
+**Step 3:** Once all fields are configured, click the **Save** button to finalize the Microsoft Teams notification setup.
+
+
+
+## Message Variables
+
+Microsoft Teams notifications support the same dynamic tokens as all other notification channels, plus a Teams-specific color token. The available tokens depend on the Flow trigger type:
+
+| Token | Description |
+| :--- | :--- |
+| `{{ flow_name }}` | Name of the Flow |
+| `{{ datastore_name }}` | Datastore involved in the event |
+| `{{ datastore_link }}` | Link to the datastore |
+| `{{ container_name }}` | Container (table or file) involved |
+| `{{ container_link }}` | Link to the container |
+| `{{ operation_type }}` | Type of operation (Catalog, Profile, Scan) |
+| `{{ operation_result }}` | Result of the operation (Success, Failure) |
+| `{{ operation_result_color__msft_teams }}` | Color code for the operation result (Teams-specific) |
+| `{{ anomaly_message }}` | Description of the detected anomaly |
+| `{{ anomaly_type }}` | Type of anomaly detected |
+| `{{ target_link }}` | Direct link to view the event details |
+
+!!! warning
+ **Manual** and **Scheduled** Flow trigger types do not support message variables. Notification messages for these triggers must use static text only.
+
+For the complete list of tokens organized by trigger type, see the [Message Variables](../message-variables.md) documentation.
+
+## Permission
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications and tokens | Member |
+| Configure and save notification | Manager |
+| Test notification | Manager |
+
+For the complete list of roles and permissions, see the [Security](../../../settings/security/overview.md) documentation.
+
+## Troubleshooting
+
+| Symptom | Possible Cause | Resolution |
+| :--- | :--- | :--- |
+| No channels available in dropdown | Teams integration not connected | Connect the Microsoft Teams integration in **Settings > Integrations > Microsoft Teams** before configuring notifications. |
+| Test notification fails | Webhook or connector issue | Verify the Teams integration is active and the connector has not been removed from the Teams channel. |
+| Notification sent but not visible in Teams | Message posted to a different channel | Verify the selected channel in the notification configuration matches the intended destination. |
+| Adaptive Card not rendering properly | Teams client version outdated | Ensure the Teams client is up to date. Adaptive Cards require a minimum Teams client version to render correctly. |
+| Message variables showing as raw text | Unsupported token for the trigger type | Ensure the tokens used are valid for the selected Flow trigger type. Use the autocomplete feature (`Ctrl+Space`) to see available tokens. |
diff --git a/docs/flows/notifications/overview.md b/docs/flows/notifications/overview.md
new file mode 100644
index 0000000000..3fe4a6c7f7
--- /dev/null
+++ b/docs/flows/notifications/overview.md
@@ -0,0 +1,82 @@
+# Notifications - Overview
+
+Notifications are Flow actions that deliver real-time alerts through external channels when data quality events occur. Every time a Flow trigger fires — whether from an anomaly detection, an operation completion, a partition scan, or a scheduled event — Qualytics resolves the configured message variables, builds a channel-appropriate payload, and dispatches it to the target destination.
+
+
+
+## Why Notifications Matter
+
+Data quality issues lose impact when they sit unnoticed in a dashboard. Notifications close the gap between detection and action by pushing alerts to where your team already works — inboxes, chat channels, and incident management platforms. With notifications you can:
+
+- **React faster**: Get alerts the moment a scan detects anomalies, an operation fails, or a data quality check triggers — no need to manually check the platform.
+- **Reach the right people**: Route critical anomalies to PagerDuty on-call teams, send operational summaries to Slack channels, and deliver compliance records to email recipients — all from a single Flow.
+- **Add context automatically**: Use message variables to include datastore names, container links, anomaly descriptions, and operation results so responders understand the issue without navigating to Qualytics first.
+- **Scale without manual effort**: Once configured, notifications run autonomously on every trigger event. Combine multiple channels in the same Flow to ensure redundancy across communication tools.
+
+## How Notifications Work
+
+
+
+```mermaid
+flowchart TD
+ A[Flow Trigger Fires] --> B[Resolve Message Variables]
+ B --> C[Build Channel Payload]
+ C --> D{Notification Channel}
+ D --> E[In App]
+ D --> F[Email]
+ D --> G[Slack]
+ D --> H[Microsoft Teams]
+ D --> I[PagerDuty]
+```
+
+
+
+When a Flow trigger fires, Qualytics processes each notification action in order:
+
+1. **Trigger event occurs** — An anomaly is detected, an operation completes, a partition scan finishes, or a scheduled/manual trigger fires.
+2. **Variables are resolved** — Dynamic tokens like `{{ datastore_name }}` and `{{ anomaly_message }}` are replaced with real values from the event context. The available tokens depend on the trigger type (see [Message Variables](message-variables.md)).
+3. **Payload is built** — Qualytics constructs the appropriate payload for each channel: plain text for Email and PagerDuty, Block Kit for Slack, Adaptive Cards for Microsoft Teams, or platform notifications for In App.
+4. **Notification is dispatched** — The message is sent to the configured destination. Each channel is processed independently — if one fails, the others still deliver.
+5. **Execution is recorded** — Every notification creates an audit record linked to the trigger event, so you can trace what was sent, when, and to whom.
+
+!!! tip
+ You can add multiple notification actions to a single Flow. For example, send an In App alert to the team, a Slack message to a monitoring channel, and a PagerDuty incident for critical anomalies — all triggered by the same event.
+
+## Channels
+
+| Channel | Description |
+| :--- | :--- |
+| [In App](in-app/overview.md) | Send notifications directly within the Qualytics platform to admins and team members assigned to the datastore. |
+| [Email](email/overview.md) | Deliver notifications to one or more email addresses with a customizable subject and message body. |
+| [Slack](slack/overview.md) | Send rich Block Kit messages to Slack channels with actionable buttons for viewing, acknowledging, commenting, and archiving anomalies. |
+| [Microsoft Teams](microsoft-teams/overview.md) | Post Adaptive Card notifications to Microsoft Teams channels with color-coded operation results. |
+| [PagerDuty](pagerduty/overview.md) | Trigger PagerDuty incidents with configurable severity, custom event details, and per-action routing key overrides. |
+
+Each channel page includes configuration steps, message variable reference, permissions, and troubleshooting. For API endpoints and FAQ, see the dedicated pages within each channel section.
+
+## Supported Triggers
+
+Notifications can be attached to any Flow trigger type. The trigger type determines which message variables are available:
+
+| Trigger Type | Description | Message Variables |
+| :--- | :--- | :--- |
+| **Anomaly** | Fires when a scan detects a data quality anomaly. | Datastore, container, anomaly type, anomaly message, check description, target link |
+| **Operation** | Fires when an operation (Catalog, Profile, or Scan) completes. | Datastore, operation type, operation result, target link |
+| **Partition Scan** | Fires when a partition-level scan completes. | Datastore, container, scan target, anomaly count, target link |
+| **Anomaly Status Change** | Fires when an anomaly's status changes (e.g., acknowledged, archived). | Datastore, container, anomaly type, old status, new status |
+| **Schedule** | Fires on a cron schedule. | Static text only — no message variables. |
+| **Manual** | Fires when manually triggered by a user. | Static text only — no message variables. |
+
+## Testing Notifications
+
+Every notification channel includes a **Test Notification** button that sends a sample message before you publish the Flow. This allows you to verify the integration connection, message formatting, and channel targeting without waiting for a real trigger event.
+
+!!! warning
+ Test behavior varies by channel. For most channels (In App, Email, Slack, Microsoft Teams), a test sends a sample message. For PagerDuty, a test notification **creates an actual incident** in your PagerDuty service.
+
+## Reference
+
+| Topic | Description |
+| :--- | :--- |
+| [Message Variables](message-variables.md) | Complete reference of dynamic tokens available per trigger type, organized by Flow trigger. |
+| [Notifications FAQ](faq.md) | Answers to common questions about notification behavior, triggers, testing, and permissions. |
diff --git a/docs/flows/notifications/pagerduty/api.md b/docs/flows/notifications/pagerduty/api.md
new file mode 100644
index 0000000000..8b83b96db0
--- /dev/null
+++ b/docs/flows/notifications/pagerduty/api.md
@@ -0,0 +1,107 @@
+# PagerDuty Notification API
+
+This page documents the API endpoints related to PagerDuty notification operations within Flows.
+
+All endpoints use the base URL of your Qualytics deployment (e.g., `https://your-instance.qualytics.io/api`).
+
+## Get Notification Specifications
+
+Retrieves the specifications for configuring PagerDuty notifications in Flow actions.
+
+**Endpoint**: `GET /api/flows/actions/notification/specifications`
+
+**Permission**: Member
+
+??? example "Example response (PagerDuty entry)"
+
+ ```json
+ {
+ "display_name": "PagerDuty",
+ "type": "PagerDuty",
+ "properties": [
+ {
+ "field": "severity",
+ "map_to": "parameters",
+ "required": false,
+ "title": "Severity",
+ "type": "enum",
+ "values": [
+ { "label": "Info", "value": "info" },
+ { "label": "Warning", "value": "warning" },
+ { "label": "Error", "value": "error" },
+ { "label": "Critical", "value": "critical" }
+ ],
+ "default": "info"
+ },
+ {
+ "field": "custom_details",
+ "map_to": "parameters",
+ "required": false,
+ "title": "Additional Details",
+ "type": "object",
+ "info": "Enhance the PagerDuty alert by setting additional details"
+ },
+ {
+ "field": "routing_key",
+ "map_to": "parameters",
+ "required": false,
+ "title": "Routing Key Override",
+ "info": "Override the default routing key from the PagerDuty integration to route events to a different PagerDuty service",
+ "type": "string",
+ "secret": true
+ }
+ ]
+ }
+ ```
+
+### Configuration Properties
+
+| Property | Type | Required | Default | Description |
+| :--- | :--- | :--- | :--- | :--- |
+| `severity` | enum | No | `info` | Severity level: `info`, `warning`, `error`, `critical` |
+| `custom_details` | object | No | — | Key-value pairs for additional incident context |
+| `routing_key` | string (secret) | No | — | Override the default Routing Key to route to a different PagerDuty service |
+
+## Get Notification Tokens
+
+Retrieves the available message tokens for each trigger type.
+
+**Endpoint**: `GET /api/flows/actions/notification/tokens`
+
+**Permission**: Member
+
+## Test Notification
+
+Sends a test PagerDuty notification to verify the configuration.
+
+**Endpoint**: `POST /api/flows/actions/notifications/test`
+
+**Permission**: Manager
+
+??? example "Example request"
+
+ ```bash
+ curl -X POST "https://your-instance.qualytics.io/api/flows/actions/notifications/test" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "PagerDuty",
+ "tokenized_message": "Test notification from {{ flow_name }}",
+ "parameters": {
+ "severity": "info"
+ }
+ }'
+ ```
+
+ **Response**: `200 OK` with a success confirmation.
+
+!!! warning
+ Test notifications **will create an incident** in your PagerDuty service (unlike connection validation, which uses Change Events).
+
+## Permission Summary
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications | Member |
+| View notification tokens | Member |
+| Test notification | Manager |
diff --git a/docs/flows/notifications/pagerduty/faq.md b/docs/flows/notifications/pagerduty/faq.md
new file mode 100644
index 0000000000..0f93a1f475
--- /dev/null
+++ b/docs/flows/notifications/pagerduty/faq.md
@@ -0,0 +1,55 @@
+# PagerDuty Notification FAQ
+
+## Configuration
+
+#### How do I send PagerDuty notifications from a Flow?
+
+Add a **Notification** action to your Flow and select **PagerDuty** as the notification type. Configure the message, severity, and optionally add custom details or a Routing Key override.
+
+#### Can I use variables in the notification message?
+
+Yes. PagerDuty messages support variable interpolation using `{{ variable_name }}` syntax. Available variables include `{{ flow_name }}`, `{{ operation_type }}`, `{{ datastore_name }}`, `{{ container_name }}`, `{{ anomaly_message }}`, and more. The autocomplete feature in the message editor will suggest available variables as you type.
+
+#### What severity levels are available?
+
+Four levels: **Info**, **Warning**, **Error**, and **Critical**. The default is **Info**. Each level maps directly to PagerDuty's severity classification, which controls urgency and notification behavior based on your service's configuration.
+
+---
+
+## Routing & Delivery
+
+#### Can I send different events to different PagerDuty services?
+
+Yes. Each PagerDuty notification action in a Flow supports a **Routing Key Override** property. When set, the override key routes that specific action's events to a different PagerDuty service than the default integration key.
+
+#### What happens if the PagerDuty integration is disconnected but a Flow still references it?
+
+The Flow action will fail to deliver the notification. The Flow itself will continue to execute, but the PagerDuty notification step will be skipped with an error. Other actions in the same Flow (e.g., Slack notifications, HTTP actions) are not affected.
+
+---
+
+## Incident Details
+
+#### What information is included in the PagerDuty incident?
+
+Each incident includes:
+
+- **Summary**: The rendered notification message from your Flow action
+- **Severity**: The configured severity level (Info, Warning, Error, Critical)
+- **Source**: Your Qualytics instance URL
+- **Component**: The affected container name
+- **Class**: The event type (anomaly, operation, partition scan, etc.)
+- **Custom Details**: System-generated metadata plus any custom key-value pairs you configured
+- **Links**: A direct link back to the relevant resource in the Qualytics UI
+
+---
+
+## Testing & History
+
+#### Can I test a PagerDuty notification before publishing the Flow?
+
+Yes. Click the **Test notification** button in the PagerDuty notification action configuration. This sends a test event to PagerDuty using the configured settings. Note that test events **will create an incident** in your PagerDuty service (unlike connection validation, which uses Change Events).
+
+#### Can I see a history of PagerDuty events sent by Qualytics?
+
+PagerDuty events are sent as part of Flow executions. You can review Flow execution history in the Qualytics UI to see which notifications were triggered and their status.
diff --git a/docs/flows/notifications/pagerduty/overview.md b/docs/flows/notifications/pagerduty/overview.md
new file mode 100644
index 0000000000..7f38cfec49
--- /dev/null
+++ b/docs/flows/notifications/pagerduty/overview.md
@@ -0,0 +1,133 @@
+# PagerDuty Notification
+
+!!! warning
+ Before using PagerDuty in Flows, you need to connect the PagerDuty integration in **Settings > Integrations**. See the [PagerDuty Integration setup guide](../../../settings/integrations/alerting/pagerduty/managing-pagerduty/add-integration.md) for instructions.
+
+Integrating PagerDuty with Qualytics ensures that your team gets instant alerts for critical data events and system issues. With this connection, you can automatically receive real-time notifications about anomalies, operation completions and other important events directly in your PagerDuty account. By categorizing alerts based on severity, it ensures the right people are notified at the right time, speeding up decision-making and resolving incidents efficiently.
+
+## Lifecycle
+
+
+
+```mermaid
+flowchart TD
+ A[Flow Trigger Fires] --> B[Resolve Message Variables]
+ B --> C[Build Trigger Event Payload]
+ C --> D[Apply Severity & Custom Details]
+ D --> E[Route via Integration or Override Key]
+ E --> F[PagerDuty Creates Incident]
+ F --> G[On-Call Team Notified]
+```
+
+
+
+## Configuration
+
+**Step 1:** Click on **PagerDuty.**
+
+
+
+A **PagerDuty Settings** panel will appear on the right-hand side, enabling users to configure and send PagerDuty notifications.
+
+
+
+### Message
+
+Enter your custom message using variables in the **Message** field. This becomes the incident summary in PagerDuty — the first thing responders see when an incident is triggered.
+
+
+
+!!! tip
+ You can write your custom notification message by utilizing the autocomplete feature. This feature allows you to easily insert internal variables such as `{{ flow_name }}`, `{{ operation_type }}`, and `{{ datastore_name }}`. As you start typing, the autocomplete will suggest and recommend relevant variables in the dropdown.
+
+!!! note
+ PagerDuty summaries are **plain text** (unlike Slack Block Kit or Microsoft Teams Adaptive Cards). The message is rendered as a single-line summary that appears as the incident title in PagerDuty.
+
+### Severity
+
+Select the appropriate PagerDuty severity level to categorize incidents based on their urgency and impact. The severity controls how PagerDuty handles the incident based on your service's urgency settings and notification rules.
+
+
+
+| Severity | Description | Recommended Use |
+| :--- | :--- | :--- |
+| **Info** | Low urgency — may not page on-call depending on service configuration | Informational events, routine completions, status updates |
+| **Warning** | Moderate urgency — follows service notification rules | Potential issues that need attention but aren't immediately critical |
+| **Error** | High urgency — triggers notifications based on escalation policy | Significant problems that require prompt resolution to prevent disruption |
+| **Critical** | Highest urgency — immediate notification via all configured channels | Urgent issues that demand immediate attention due to severe impact |
+
+!!! tip
+ PagerDuty's behavior for each severity level depends on your service's **urgency settings** and **notification rules**. Configure your PagerDuty service to match the alerting behavior you expect from each severity level.
+
+### Additional Details
+
+Optional key-value pairs that provide extra context to PagerDuty incidents. These appear in the incident's **Custom Details** section and help responders understand the issue quickly.
+
+Qualytics automatically populates some details based on the event type (datastore name, container name, check type, etc.). Any additional details you configure here are merged with the auto-populated ones.
+
+### Routing Key Override
+
+By default, PagerDuty events are routed using the Routing Key configured in the [PagerDuty integration settings](../../../settings/integrations/alerting/pagerduty/overview.md). However, you can override this per action to route specific events to a **different PagerDuty service**.
+
+This is useful when you want different types of events to go to different teams. For example:
+
+- Critical anomaly alerts → **Production Incidents** service
+- Operational status updates → **Data Platform Notifications** service
+
+To override, enter the Routing Key of the target PagerDuty service in the **Routing Key Override** field. If left empty, the default integration key is used.
+
+### Test and Save
+
+**Step 2:** Click on the **Test notification** button to check if the configuration is working correctly. Once the test notification is sent, you will see a success message, **"Notification successfully sent."**
+
+!!! warning
+ Unlike connection validation (which uses Change Events), test notifications **will create an incident** in your PagerDuty service.
+
+
+
+**Step 3:** Once you have entered all the values, then click on the **Save** button.
+
+
+
+## Message Variables
+
+PagerDuty notifications support the same dynamic tokens as all other notification channels. The available tokens depend on the Flow trigger type:
+
+| Token | Description |
+| :--- | :--- |
+| `{{ flow_name }}` | Name of the Flow |
+| `{{ datastore_name }}` | Datastore involved in the event |
+| `{{ datastore_link }}` | Link to the datastore |
+| `{{ container_name }}` | Container (table or file) involved |
+| `{{ container_link }}` | Link to the container |
+| `{{ operation_type }}` | Type of operation (Catalog, Profile, Scan) |
+| `{{ operation_result }}` | Result of the operation (Success, Failure) |
+| `{{ anomaly_message }}` | Description of the detected anomaly |
+| `{{ anomaly_type }}` | Type of anomaly detected |
+| `{{ target_link }}` | Direct link to view the event details |
+
+!!! warning
+ **Manual** and **Scheduled** Flow trigger types do not support message variables. Notification messages for these triggers must use static text only.
+
+For the complete list of tokens organized by trigger type, see the [Message Variables](../message-variables.md) documentation.
+
+## Permission
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications and tokens | Member |
+| Configure and save notification | Manager |
+| Test notification | Manager |
+
+For the complete list of roles and permissions, see the [Security](../../../settings/security/overview.md) documentation.
+
+## Troubleshooting
+
+| Symptom | Possible Cause | Resolution |
+| :--- | :--- | :--- |
+| Test notification fails | Invalid or expired Routing Key | Verify the Routing Key in the [PagerDuty integration settings](../../../settings/integrations/alerting/pagerduty/overview.md). Ensure the key matches an active Events API v2 integration in PagerDuty. |
+| Incident not created in PagerDuty | PagerDuty service disabled or event rules suppressing | Check that the PagerDuty service is enabled and that event rules are not suppressing the event. |
+| Severity not matching expected behavior | PagerDuty service urgency settings | PagerDuty's handling of severity depends on the service's urgency configuration. Review the service's notification rules in PagerDuty. |
+| Routing Key Override not working | Override key is invalid | Verify the override Routing Key belongs to an active PagerDuty service with Events API v2 enabled. |
+| Message variables showing as raw text | Unsupported token for the trigger type | Ensure the tokens used are valid for the selected Flow trigger type. Use the autocomplete feature to see available tokens. |
+| Notification sent but no one was paged | Severity set to Info | Some PagerDuty services treat **Info** events as low urgency and may not page on-call. Increase the severity level or adjust the service's urgency settings. |
diff --git a/docs/flows/notifications/slack/api.md b/docs/flows/notifications/slack/api.md
new file mode 100644
index 0000000000..2fe70ca20e
--- /dev/null
+++ b/docs/flows/notifications/slack/api.md
@@ -0,0 +1,79 @@
+# Slack Notification API
+
+This page documents the API endpoints related to Slack notification operations within Flows.
+
+All endpoints use the base URL of your Qualytics deployment (e.g., `https://your-instance.qualytics.io/api`).
+
+## Get Notification Specifications
+
+Retrieves the specifications for configuring Slack notifications in Flow actions.
+
+**Endpoint**: `GET /api/flows/actions/notification/specifications`
+
+**Permission**: Member
+
+??? example "Example response (Slack entry)"
+
+ ```json
+ {
+ "display_name": "Slack",
+ "type": "Slack",
+ "properties": [
+ {
+ "field": "channel",
+ "map_to": "parameters",
+ "required": true,
+ "title": "Channel",
+ "type": "enum",
+ "placeholder": "general"
+ }
+ ]
+ }
+ ```
+
+### Configuration Properties
+
+| Property | Type | Required | Description |
+| :--- | :--- | :--- | :--- |
+| `channel` | enum | Yes | The Slack channel where notifications will be sent. The available channels are retrieved from your connected Slack workspace. |
+
+## Get Notification Tokens
+
+Retrieves the available message tokens for each trigger type.
+
+**Endpoint**: `GET /api/flows/actions/notification/tokens`
+
+**Permission**: Member
+
+## Test Notification
+
+Sends a test Slack notification to verify the configuration.
+
+**Endpoint**: `POST /api/flows/actions/notifications/test`
+
+**Permission**: Manager
+
+??? example "Example request"
+
+ ```bash
+ curl -X POST "https://your-instance.qualytics.io/api/flows/actions/notifications/test" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "Slack",
+ "tokenized_message": "Test notification from {{ flow_name }}",
+ "parameters": {
+ "channel": "general"
+ }
+ }'
+ ```
+
+ **Response**: `200 OK` with a success confirmation.
+
+## Permission Summary
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications | Member |
+| View notification tokens | Member |
+| Test notification | Manager |
diff --git a/docs/flows/notifications/slack/faq.md b/docs/flows/notifications/slack/faq.md
new file mode 100644
index 0000000000..9245880355
--- /dev/null
+++ b/docs/flows/notifications/slack/faq.md
@@ -0,0 +1,50 @@
+# Slack Notification FAQ
+
+## Setup & Prerequisites
+
+#### Do I need to set up the Slack integration before using Slack notifications in Flows?
+
+Yes. You must first connect the Slack integration in **Settings > Integrations > Slack** before you can select Slack channels in Flow notification actions. See the [Slack Integration guide](../../../settings/integrations/alerting/slack.md) for setup instructions.
+
+---
+
+## Channel & Configuration
+
+#### How do I choose which Slack channel to send notifications to?
+
+The **Channel** dropdown in the Slack notification configuration shows all available channels from your connected Slack workspace. Select the channel where you want notifications to appear.
+
+#### Can I send notifications to multiple Slack channels from the same Flow?
+
+Yes. Add multiple Slack notification actions to your Flow, each configured with a different channel.
+
+---
+
+## Message & Customization
+
+#### Do different trigger types generate different Slack messages?
+
+Yes. Each trigger generates a unique Slack notification format. Operation completions include status and result details, anomaly detections include container and check information, and partition scans include partition-specific data.
+
+#### Is the Slack notification message customizable?
+
+Slack notifications use a rich format (Block Kit) with structured content. The message template is pre-configured based on the trigger type, but you can customize the content using message variables. The Preview section in the configuration shows how the notification will appear.
+
+#### What is the `operation_result_color` token?
+
+This is a Slack-specific token that returns a hex color code based on the operation result (e.g., green for success, red for failure). It is used internally by the Slack Block Kit template to color-code notifications.
+
+---
+
+## Actions & Interactivity
+
+#### What actions can I take on Slack notifications?
+
+Slack notifications from Qualytics include interactive buttons depending on the trigger type:
+
+- **View Operation** — Open operation details in Qualytics
+- **View Results** — Examine scan results
+- **View Anomaly** — Investigate anomaly details
+- **Acknowledge** — Mark an anomaly as reviewed
+- **Comment** — Add a comment for team collaboration
+- **Archive** — Archive the anomaly if no further action is needed
diff --git a/docs/flows/notifications/slack/overview.md b/docs/flows/notifications/slack/overview.md
new file mode 100644
index 0000000000..224332c878
--- /dev/null
+++ b/docs/flows/notifications/slack/overview.md
@@ -0,0 +1,178 @@
+# Slack Notification
+
+!!! warning
+ Before using Slack notifications in Flows, you need to connect the Slack integration in **Settings > Integrations**. See the [Slack Integration setup guide](../../../settings/integrations/alerting/slack.md) for instructions.
+
+Qualytics integrates with Slack to deliver real-time, interactive notifications about data quality events directly into your team's channels. When a Flow trigger fires, Qualytics builds a rich Slack Block Kit message — complete with contextual details, color-coded results, and action buttons — and posts it to the configured channel. Unlike simple webhook messages, Slack notifications support interactive actions: responders can **view details in Qualytics**, **acknowledge anomalies**, **add comments**, or **archive** records without leaving Slack.
+
+## Lifecycle
+
+
+
+```mermaid
+flowchart TD
+ A[Flow Trigger Fires] --> B[Resolve Message Variables]
+ B --> C[Build Slack Block Kit Message]
+ C --> D[Send to Selected Channel]
+ D --> E[Message Appears in Slack]
+ E --> F{User Action}
+ F --> G[View in Qualytics]
+ F --> H[Acknowledge Anomaly]
+ F --> I[Comment or Archive]
+```
+
+
+
+## Configuration
+
+**Step 1**: Click on **Slack.**
+
+
+
+A **Slack Settings** panel appears on the right side of the screen.
+
+
+
+| No. | Field | Description |
+| :---- | :---- | :---- |
+| **1.** | Channel | Choose the channel where notifications should be sent using the **Channel** dropdown. For demonstration purposes, the channel **#demo** is selected. |
+| **2.** | Preview | Shows a preview of the Slack notification that will be sent when the flow runs. |
+
+
+
+**Step 2:** Click the **Test Notification** button to send a sample notification to the selected Slack channel.
+
+
+
+A prompt appears stating **Notification successfully sent** once the notification is successfully delivered.
+
+
+
+**Step 3:** Once the notification is successfully sent, check your connected Slack workspace to ensure it is linked to Qualytics. You will see the test notification in the selected Slack channel.
+
+!!! note
+ Each trigger generates a different type of Slack notification message. The content and format of the message vary based on the specific trigger event.
+
+
+
+**Step 4:** After confirming that the notification was received successfully, return and click the Save button.
+
+
+
+## Examples of Trigger Messages
+
+Trigger messages in Slack provide real-time notifications for various system events, ensuring timely awareness and action. Each trigger message follows a unique format and conveys different types of information based on the operation performed. Below are examples highlighting distinct scenarios:
+
+**Scenario 1: Scan Completion Notification**
+
+When a data cataloging or scan operation completes successfully, a notification is sent to Slack. The message includes details such as the dataset name, operation type (e.g., Catalog Operation), and the result of the operation.
+
+
+
+**Scenario 2: Anomalous Table or File Detected**
+
+When a scan detects a critical data anomaly, Slack sends a detailed notification highlighting the issue. The notification includes the dataset name, flow (such as Quality Monitor), and source datastore. It also provides a summary of the anomaly, specifying the number of records that differ between datasets and the container where the discrepancy was found. Additionally, the message offers an option to view detailed results.
+
+
+
+**Scenario 3: Anomaly Detected**
+
+When a scan detects record anomalies, Slack sends a notification highlighting the affected container, flow, and source datastore. It specifies the number of records that differ between datasets and provides options to view or acknowledge the anomaly.
+
+
+
+## Managing Qualytics Alerts in Slack
+
+Qualytics Slack integration enables real-time monitoring and quick action on data quality issues directly from Slack. This guide outlines the different types of alerts and the actions you can take without leaving Slack.
+
+**When an Operation Success or failure**
+
+**Step 1:** A Slack notification confirms the scan completion with a **Success/failure** status.
+
+For demonstration purposes we are using Success operation.
+
+
+
+**Step 2:** Click **View Operation** to be redirected automatically to the result section in Qualytics.
+
+
+
+**When an Anomalous File or Table is Detected**
+
+**Step 1:** A Slack alert notifies about anomalies in a dataset.
+
+
+
+**Step 2:** Click **View Results** to examine the identified discrepancies directly in Qualytics.
+
+
+
+**When a Record Anomaly is Detected**
+
+If a **shape or record anomaly** is found, you'll receive a Slack notification. You can take the following actions:
+
+
+
+* **View Anomaly** – Click on view anomaly to open the details in Qualytics to investigate further.
+
+
+
+* **Acknowledge** – Click on Acknowledge to mark it as reviewed to avoid duplicate alerts.
+
+
+
+* **Horizontal ellipsis(⋯)** – Click on horizontal ellipsis.
+
+
+
+ A dropdown will open with option **comment** and **archive** :
+
+
+
+| No. | Action | Description |
+| :---- | :---- | :---- |
+| **1.** | Comment | Add Comment to collaborate with your team. |
+| **2.** | Archive | Archive if no further action is needed. |
+
+## Message Variables
+
+Slack notifications support the same dynamic tokens as all other notification channels, plus a Slack-specific color token. The available tokens depend on the Flow trigger type:
+
+| Token | Description |
+| :--- | :--- |
+| `{{ flow_name }}` | Name of the Flow |
+| `{{ datastore_name }}` | Datastore involved in the event |
+| `{{ datastore_link }}` | Link to the datastore |
+| `{{ container_name }}` | Container (table or file) involved |
+| `{{ container_link }}` | Link to the container |
+| `{{ operation_type }}` | Type of operation (Catalog, Profile, Scan) |
+| `{{ operation_result }}` | Result of the operation (Success, Failure) |
+| `{{ operation_result_color }}` | Color code for the operation result (Slack-specific) |
+| `{{ anomaly_message }}` | Description of the detected anomaly |
+| `{{ anomaly_type }}` | Type of anomaly detected |
+| `{{ target_link }}` | Direct link to view the event details |
+
+!!! warning
+ **Manual** and **Scheduled** Flow trigger types do not support message variables. Notification messages for these triggers must use static text only.
+
+For the complete list of tokens organized by trigger type, see the [Message Variables](../message-variables.md) documentation.
+
+## Permission
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View notification specifications and tokens | Member |
+| Configure and save notification | Manager |
+| Test notification | Manager |
+
+For the complete list of roles and permissions, see the [Security](../../../settings/security/overview.md) documentation.
+
+## Troubleshooting
+
+| Symptom | Possible Cause | Resolution |
+| :--- | :--- | :--- |
+| No channels available in dropdown | Slack integration not connected | Connect the Slack integration in **Settings > Integrations > Slack** before configuring Slack notifications. |
+| Test notification fails | Bot not added to the channel | Ensure the Qualytics Slack bot has been invited to the target channel. |
+| Notification sent but not visible in Slack | Message posted to a different channel | Verify the selected channel in the notification configuration matches the intended destination. |
+| Interactive buttons not working | Qualytics instance unreachable from Slack | Ensure your Qualytics instance URL is accessible from the internet so Slack can send action callbacks. |
+| Message variables showing as raw text | Unsupported token for the trigger type | Ensure the tokens used are valid for the selected Flow trigger type. Use the autocomplete feature (`Ctrl+Space`) to see available tokens. |
diff --git a/docs/flows/overview-action.md b/docs/flows/overview-action.md
index 0f19549b19..f946f74ba0 100644
--- a/docs/flows/overview-action.md
+++ b/docs/flows/overview-action.md
@@ -36,12 +36,12 @@ A panel will appear on the right-hand side displaying the list of available acti
## Notifications
!!! note
- For more detailed information, review the [notifications documentation](../flows/notification.md){target="_blank"}.
+ For more detailed information, review the [notifications documentation](../flows/notifications/overview.md){target="_blank"}.
## Notification Message Variables
!!! note
- For more detailed information, review the [notification tokens documentation](../flows/notification-tokens.md){target="_blank"}.
+ For more detailed information, review the [message variables documentation](../flows/notifications/message-variables.md){target="_blank"}.
## Workflow
diff --git a/docs/settings/integrations/alerting/msft_teams.md b/docs/settings/integrations/alerting/msft_teams.md
index 93a02694d2..7993c88aa3 100644
--- a/docs/settings/integrations/alerting/msft_teams.md
+++ b/docs/settings/integrations/alerting/msft_teams.md
@@ -185,7 +185,7 @@ In the next section, we'll walk through the steps to access the Qualytics integr
**Step 1:** Log in to your Qualytics account and click the **"Settings"** button on the left side panel of the interface.
-
+
**Step 2:** By default, Connections tab will open. Click on the **Integrations** tab.
diff --git a/docs/settings/integrations/alerting/overview.md b/docs/settings/integrations/alerting/overview.md
index 68cd7c28b2..0b1eae44e9 100644
--- a/docs/settings/integrations/alerting/overview.md
+++ b/docs/settings/integrations/alerting/overview.md
@@ -1,31 +1,59 @@
-# Alerting Integrations
+# Alerting Integrations Overview
-The Qualytics platform integrates with popular enterprise messaging platforms, such as [Slack](./slack.md) and [Microsoft Teams](./msft_teams.md) to enable real-time communication about data quality events. These integrations help ensure that your teams remain informed and can respond quickly when data issues occur.
+Alerting integrations connect Qualytics to external messaging and incident management platforms, enabling real-time notifications about data quality events. By setting up these integrations in **Settings > Integrations**, you allow [Flow notification actions](../../../flows/notifications/overview.md) to route alerts to the channels and services your teams already use.
-- Receive instant notifications when data quality issues are detected
-- Alert relevant team members about failed quality checks in real-time
-- Share operational status updates and system health notifications
-- Configure custom alerts based on data quality thresholds and conditions
-- Route notifications to specific channels or teams based on data context
+## Why Alerting Integrations Matter
-These integrations ensure your teams stay informed about data quality events as they happen, enabling rapid response and maintaining continuous data quality awareness across your organization.
+In data quality management, timely awareness of issues is just as important as detecting them. Alerting integrations ensure that the right people are notified through the right channel when something happens — whether it's an anomaly detected during a scan, an operation failure, or a routine status update.
-## Available Integration
+With Alerting Integrations, you can:
-Qualytics makes it easy to deliver alerts through the communication platforms your teams already rely on. Below are the currently supported integrations:
+- **Deliver instant notifications** when data quality issues are detected, without requiring users to log in to Qualytics.
+- **Leverage existing workflows** by routing alerts to the platforms your teams already monitor daily.
+- **Categorize by urgency** using severity levels (PagerDuty) or color-coded results (Slack, Teams) to help responders prioritize.
+- **Take action without switching tools** — acknowledge anomalies, add comments, or view details directly from Slack.
+- **Configure once, use everywhere** — set up the integration at the platform level, then reference it across multiple Flows.
+
+## Available Integrations
+
+| Integration | Description |
+| :--- | :--- |
+| **Slack** | Send rich, interactive Block Kit messages to Slack channels with action buttons for viewing, acknowledging, and commenting. |
+| **Microsoft Teams** | Post Adaptive Card notifications to Teams channels with color-coded results and structured layouts. |
+| **PagerDuty** | Trigger PagerDuty incidents via Events API v2 with configurable severity, custom details, and routing key overrides. |
### Slack
-Integrate Qualytics with Slack to send real-time alerts directly to your Slack channels. This allows teams to stay on top of data quality events without switching tools.
+
+
+ {: style="height:200px"}
-For more details you can refer to the [slack integration](./slack.md) documentation.
+
-
+Integrate Qualytics with Slack to send real-time alerts directly to your Slack channels. The Slack integration uses a bot token to post messages, allowing teams to stay on top of data quality events without switching tools. Once connected, you can select any channel the bot has access to when configuring Flow notification actions.
+
+For more details, refer to the [Slack Integration](./slack.md) documentation.
### Microsoft Teams
-Connect Microsoft Teams to receive automated alerts about failed checks, system health updates, and threshold-based events right within your team chats.
+
+
+ {: style="height:200px"}
+
+
+
+Connect Microsoft Teams to receive automated Adaptive Card alerts about operations, anomalies, and threshold-based events directly in your team channels. The integration uses webhooks to post structured messages with color-coded operation results.
+
+For more details, refer to the [Microsoft Teams Integration](./msft_teams.md) documentation.
+
+### PagerDuty
+
+
+
+ {: style="height:200px"}
+
+
-For more details you can refer to the [microsoft teams](./msft_teams.md) documentation.
+Connect PagerDuty to trigger real-time incidents based on data quality events, enabling your on-call teams to respond quickly to critical anomalies and operational issues. The integration uses the Events API v2, routing events via a Routing Key to the appropriate PagerDuty service and escalation policy.
-
\ No newline at end of file
+For more details, refer to the [PagerDuty Integration](./pagerduty/overview.md) documentation.
\ No newline at end of file
diff --git a/docs/settings/integrations/alerting/pagerduty/deep-dive.md b/docs/settings/integrations/alerting/pagerduty/deep-dive.md
new file mode 100644
index 0000000000..f896b62b39
--- /dev/null
+++ b/docs/settings/integrations/alerting/pagerduty/deep-dive.md
@@ -0,0 +1,161 @@
+# PagerDuty Deep Dive
+
+This page provides an in-depth look at how Qualytics manages PagerDuty integration behind the scenes — from event construction and routing to severity mapping and deduplication.
+
+## Architecture Overview
+
+Qualytics communicates with PagerDuty through the **Events API v2**, a REST-based API that PagerDuty provides for programmatic incident management. There are two event endpoints involved:
+
+| Endpoint | Purpose | Creates Incidents? |
+| :--- | :--- | :--- |
+| `/v2/enqueue` | Send trigger, acknowledge, or resolve events | Yes |
+| `/v2/change/enqueue` | Send change events (used for validation) | No |
+
+When a Flow action sends a PagerDuty notification, Qualytics constructs a **trigger event** and posts it to `/v2/enqueue`. When validating a Routing Key during integration setup, Qualytics sends a **change event** to `/v2/change/enqueue`, which safely validates the key without creating an incident.
+
+## Event Structure
+
+Every PagerDuty event sent by Qualytics follows this structure:
+
+```json
+{
+ "routing_key": "your-routing-key",
+ "event_action": "trigger",
+ "dedup_key": "unique-event-identifier",
+ "client": "Qualytics",
+ "client_url": "https://your-instance.qualytics.io",
+ "payload": {
+ "summary": "Anomaly detected in orders (Production DWH): unexpected null values",
+ "timestamp": "2026-03-12T10:30:00Z",
+ "severity": "error",
+ "source": "https://your-instance.qualytics.io",
+ "component": "orders",
+ "class": "anomaly",
+ "custom_details": {
+ "datastore": "Production DWH",
+ "container": "orders",
+ "check_type": "is_not_null"
+ }
+ },
+ "links": [
+ {
+ "href": "https://your-instance.qualytics.io/anomalies/12345",
+ "text": "Event Details"
+ }
+ ]
+}
+```
+
+### Event Fields Explained
+
+| Field | Description |
+| :--- | :--- |
+| `routing_key` | The Integration Key that routes the event to a specific PagerDuty service. Can be overridden per Flow action. |
+| `event_action` | Always `trigger` for Qualytics events. This creates a new incident or groups with an existing one if the `dedup_key` matches. |
+| `dedup_key` | A unique identifier for the event. PagerDuty uses this to deduplicate events — if an open incident already exists with the same key, a new incident is not created. |
+| `client` | Always `Qualytics`. Displayed in the PagerDuty incident timeline. |
+| `client_url` | Your Qualytics instance URL. Provides a clickable link in PagerDuty back to the platform. |
+| `payload.summary` | The rendered notification message. Composed using the message template configured in the Flow action. |
+| `payload.severity` | The severity level: `info`, `warning`, `error`, or `critical`. Controls PagerDuty's urgency and notification behavior. |
+| `payload.source` | The origin of the event — set to your Qualytics instance URL. |
+| `payload.component` | The affected component — typically the container name (e.g., table or file name). |
+| `payload.class` | The event class — categorizes the type of event (e.g., `anomaly`, `operation`, `partition_scan`). |
+| `payload.custom_details` | Additional context attached to the incident. Includes system-generated details plus any custom key-value pairs configured in the Flow action. |
+| `links` | A direct link back to the relevant resource in the Qualytics UI. |
+
+## Severity Mapping
+
+PagerDuty severity levels control how incidents are prioritized and which notification rules apply. Qualytics allows you to set the severity level per Flow action:
+
+| Severity | PagerDuty Behavior | Recommended Use |
+| :--- | :--- | :--- |
+| **Info** | Low urgency — may not page on-call depending on service configuration | Informational events, routine completions, status updates |
+| **Warning** | Moderate urgency — follows service notification rules | Potential issues that need attention but are not immediately critical |
+| **Error** | High urgency — triggers notifications based on escalation policy | Significant data quality issues requiring prompt resolution |
+| **Critical** | Highest urgency — immediate notification via all configured channels | Severe incidents demanding immediate response (e.g., critical pipeline failures) |
+
+!!! tip
+ PagerDuty's behavior for each severity level depends on your service's **urgency settings** and **notification rules**. Configure your PagerDuty service appropriately to match the alerting behavior you expect from each severity level.
+
+## Routing and Routing Key Override
+
+By default, all PagerDuty events are routed using the **Routing Key** configured in the integration settings. This key maps to a specific PagerDuty service.
+
+However, you may want different types of events to go to different PagerDuty services. For example:
+
+- Critical anomaly alerts → Production Incidents service
+- Operational status updates → Data Platform Notifications service
+
+To support this, each PagerDuty notification action in a Flow can include a **Routing Key Override**. When set, the override key is used instead of the default integration key for that specific action.
+
+```mermaid
+flowchart LR
+ A["Default Routing Key\n(Integration)"] --> S1["PagerDuty Service A\n(default)"]
+ F1["Flow Action 1\n(no override)"] --> S1
+ F2["Flow Action 2\n(override key)"] --> S2["PagerDuty Service B\n(specific)"]
+```
+
+## Event Deduplication
+
+PagerDuty uses the `dedup_key` field to prevent duplicate incidents. Qualytics assigns a unique event identifier to each notification, which ensures:
+
+- The same event does not create multiple incidents if retried
+- Related events can be grouped under the same incident if they share a dedup key
+
+The dedup key is generated from the event's unique internal identifier (such as the operation ID or anomaly ID), ensuring consistency across retries.
+
+## Message Templates
+
+PagerDuty event summaries are rendered from configurable message templates. These templates support variable interpolation using the `{{ variable_name }}` syntax. Available variables include:
+
+| Variable | Description |
+| :--- | :--- |
+| `{{ flow_name }}` | The name of the Flow that triggered the notification |
+| `{{ operation_type }}` | The type of operation (e.g., Catalog, Profile, Scan) |
+| `{{ operation_result }}` | The result of the operation (e.g., Success, Failure) |
+| `{{ datastore_name }}` | The name of the affected datastore |
+| `{{ container_name }}` | The name of the affected container |
+| `{{ anomaly_message }}` | The anomaly description message |
+| `{{ anomaly_status }}` | The anomaly status (e.g., Active, Acknowledged) |
+
+!!! info
+ PagerDuty summaries are **plain text** (unlike Slack Block Kit or Microsoft Teams Adaptive Cards). The message template is rendered as a single-line summary that appears as the incident title in PagerDuty.
+
+## Custom Details
+
+Custom Details allow you to attach additional key-value pairs to PagerDuty incidents. These appear in the incident's **Custom Details** section and provide extra context for responders.
+
+Qualytics automatically populates some custom details based on the event type:
+
+| Event Type | Auto-populated Details |
+| :--- | :--- |
+| Anomaly | Datastore, container, check type |
+| Operation | Datastore, operation type, result |
+| Partition Scan | Datastore, container, partition info |
+
+You can add additional custom details through the Flow action configuration. These are merged with the auto-populated details, giving responders a complete picture of the event context.
+
+## Connection Validation
+
+When you create or update a PagerDuty integration, Qualytics validates the Routing Key by sending a **Change Event** to PagerDuty's `/v2/change/enqueue` endpoint.
+
+Change Events are specifically designed for informational purposes and **do not create incidents**. This makes them ideal for connection validation — Qualytics can confirm that the Routing Key is valid and the PagerDuty service is reachable without triggering any alerts.
+
+| Validation Result | HTTP Status | Meaning |
+| :--- | :--- | :--- |
+| Success | 202 | Routing Key is valid, PagerDuty service is reachable |
+| Invalid Key | 400/401 | The Routing Key is incorrect or revoked |
+| Network Error | 502 | Cannot reach PagerDuty API |
+
+## Comparison with Other Alerting Integrations
+
+| Feature | PagerDuty | Slack | Microsoft Teams |
+| :--- | :--- | :--- | :--- |
+| **Authentication** | Routing Key | OAuth tokens | Azure App + OAuth |
+| **Message format** | Plain text summary | Block Kit (rich) | Adaptive Cards (rich) |
+| **Routing** | Routing Keys → Services | Channels | Teams → Channels |
+| **Channel selection** | No (key-based) | Yes (channel picker) | Yes (channel picker) |
+| **Severity support** | Native (info/warn/error/critical) | Via message content | Via message content |
+| **Incident management** | Native (trigger/ack/resolve) | N/A | N/A |
+| **Deduplication** | Native (dedup_key) | N/A | N/A |
+| **Per-action override** | Routing Key override | Channel override | Channel override |
diff --git a/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/add-integration.md b/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/add-integration.md
new file mode 100644
index 0000000000..19f1a735b7
--- /dev/null
+++ b/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/add-integration.md
@@ -0,0 +1,64 @@
+# Add PagerDuty Integration
+
+This guide walks you through connecting PagerDuty to Qualytics. Before starting, you'll need a **Routing Key** (Integration Key) from a PagerDuty service with an Events API v2 integration.
+
+## Prerequisites
+
+### Creating a PagerDuty Service with Events API v2
+
+If you don't already have a PagerDuty service configured with Events API v2, follow these steps:
+
+**Step 1:** Log in to your PagerDuty account and navigate to **Services** from the top navigation menu.
+
+**Step 2:** Click **+ New Service** to create a new service (or select an existing service where you want to receive Qualytics alerts).
+
+**Step 3:** Fill in the service details:
+
+- **Name**: Enter a descriptive name (e.g., *Qualytics Data Quality Alerts*).
+- **Escalation Policy**: Select or create an escalation policy that determines who gets notified.
+
+**Step 4:** Under **Integrations**, search for and select **Events API v2**, then click **Create Service**.
+
+### Retrieving the Routing Key
+
+**Step 1:** After the service is created, you'll be redirected to the service's **Integrations** tab.
+
+**Step 2:** Locate the **Events API v2** integration and copy the **Integration Key**. This is the **Routing Key** you'll need for the Qualytics integration.
+
+!!! tip
+ You can also find the Integration Key later by navigating to **Services > [Your Service] > Integrations > Events API v2**.
+
+---
+
+## Navigation to Integration
+
+**Step 1:** Log in to your Qualytics account and click the **"Settings"** button on the left side panel of the interface.
+
+
+
+**Step 2:** By default, Connections tab will open. Click on the **Integrations** tab.
+
+
+
+## Connect PagerDuty Integration
+
+**Step 1:** Click on the **Connect** button next to PagerDuty to connect to the PagerDuty Integration.
+
+
+
+A modal window titled **"Add PagerDuty Integration"** appears. Fill in the connection properties to connect to PagerDuty.
+
+**Step 2:** Fill out the required connection property and click the **Create** button to validate the Routing Key and create the PagerDuty integration.
+
+| No. | Field Name | Description |
+| :---- | :---- | :---- |
+| 1. | Routing Key | The **Integration Key** (Routing Key) from your PagerDuty Events API v2 integration. Find it in your PagerDuty service under **Integrations > Events API v2**. |
+
+
+
+!!! note
+ Qualytics validates your Routing Key by sending a test change event to PagerDuty. This validation does not create an incident in your PagerDuty service.
+
+Once the integration is successfully created, a confirmation message will appear on the screen stating, **"The Integration has been successfully created."**
+
+
diff --git a/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/edit-integration.md b/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/edit-integration.md
new file mode 100644
index 0000000000..bed01ff3ff
--- /dev/null
+++ b/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/edit-integration.md
@@ -0,0 +1,24 @@
+# Edit PagerDuty Integration
+
+Editing the PagerDuty integration allows you to update the Routing Key, for example when the key has been rotated or you want to route events to a different PagerDuty service.
+
+## Edit Integration
+
+**Step 1:** Click on the **vertical ellipses(⋮)** next to the Connected button and select the **Edit** option.
+
+
+
+**Step 2:** A modal window **Edit PagerDuty Integration** will appear providing you with options to edit the connection properties.
+
+
+
+**Step 3:** After editing the connection properties of the PagerDuty integration, click on the **Update** button to apply the changes.
+
+
+
+!!! note
+ Qualytics validates the updated Routing Key before saving the changes. If the key is invalid, the update will fail with an error.
+
+A confirmation message will appear on the screen displaying **"The Integration has been successfully updated"**.
+
+
diff --git a/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/remove-integration.md b/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/remove-integration.md
new file mode 100644
index 0000000000..8e6a2c5a5c
--- /dev/null
+++ b/docs/settings/integrations/alerting/pagerduty/managing-pagerduty/remove-integration.md
@@ -0,0 +1,20 @@
+# Remove PagerDuty Integration
+
+Disconnecting the PagerDuty integration will remove its connection from your platform. Any existing workflows, notifications, or Flow actions relying on PagerDuty may stop working, though they won't be deleted. Make sure to review any dependent Flows before proceeding.
+
+## Disconnect Integration
+
+**Step 1:** Click on the **vertical ellipses(⋮)** next to the connected button and select the **Disconnect** option to disconnect the integration.
+
+
+
+**Step 2:** A modal window **Disconnect Integration** will appear. Click on the **Disconnect** button to proceed.
+
+
+
+!!! warning
+ This action will remove the PagerDuty integration. Any Flows using PagerDuty notifications will no longer be able to deliver alerts to your PagerDuty service.
+
+A confirmation message will appear on the screen displaying **"The Integration has been successfully disconnected"**.
+
+
diff --git a/docs/settings/integrations/alerting/pagerduty/overview.md b/docs/settings/integrations/alerting/pagerduty/overview.md
new file mode 100644
index 0000000000..f30c30d6ca
--- /dev/null
+++ b/docs/settings/integrations/alerting/pagerduty/overview.md
@@ -0,0 +1,43 @@
+# PagerDuty Overview
+
+PagerDuty integration in Qualytics connects your data quality platform directly to PagerDuty's incident management workflow. When data quality events occur — anomalies detected, operations completed, or thresholds breached — Qualytics automatically triggers PagerDuty incidents, ensuring the right people are notified at the right time.
+
+
+
+## Why PagerDuty?
+
+PagerDuty is an industry-standard incident management platform that helps teams respond to operational issues quickly. By integrating Qualytics with PagerDuty, you can:
+
+- **Trigger real-time incidents** when critical data quality issues are detected
+- **Leverage existing on-call schedules** — alerts follow your team's PagerDuty escalation policies
+- **Deduplicate events** — Qualytics uses deduplication keys to prevent duplicate incidents for the same event
+
+## How It Works
+
+Qualytics integrates with PagerDuty using the **Events API v2**, which is the standard mechanism for programmatically triggering incidents in PagerDuty services. The integration flow is:
+
+1. You create a PagerDuty service with an **Events API v2** integration and obtain a **Routing Key**
+2. You register the Routing Key in Qualytics through the Integrations settings
+3. You configure **Flow actions** to send PagerDuty notifications when specific data quality events occur
+4. Qualytics sends trigger events to PagerDuty, which creates incidents according to your service's escalation policy
+
+!!! info
+ Unlike Slack or Microsoft Teams, PagerDuty does not use channels. Events are routed to PagerDuty services via **Routing Keys** (also called Integration Keys). Each Routing Key maps to a specific service in your PagerDuty account.
+
+## Using PagerDuty in Flows
+
+Once the integration is connected, you can use PagerDuty as a notification action inside your Flows. For a complete guide on configuring PagerDuty notifications — including message templates, severity levels, routing key overrides, and custom details — see the [Flows Notification — PagerDuty](../../../../flows/notifications/pagerduty/overview.md) documentation.
+
+| Topic | Description |
+| :--- | :--- |
+| [Deep Dive](deep-dive.md) | How Qualytics manages PagerDuty events under the hood, including event types, severity mapping, deduplication, and routing. |
+| [API](pagerduty-api.md) | API endpoints for creating, updating, validating, and deleting PagerDuty integrations programmatically. |
+| [FAQ](pagerduty-faq.md) | Answers to common questions about PagerDuty integration behavior. |
+
+## Managing PagerDuty
+
+| Task | Description |
+| :--- | :--- |
+| [Add Integration](managing-pagerduty/add-integration.md) | Set up the PagerDuty integration by providing your Routing Key. |
+| [Edit Integration](managing-pagerduty/edit-integration.md) | Update the Routing Key or modify the integration configuration. |
+| [Remove Integration](managing-pagerduty/remove-integration.md) | Disconnect the PagerDuty integration from Qualytics. |
diff --git a/docs/settings/integrations/alerting/pagerduty/pagerduty-api.md b/docs/settings/integrations/alerting/pagerduty/pagerduty-api.md
new file mode 100644
index 0000000000..b459a23152
--- /dev/null
+++ b/docs/settings/integrations/alerting/pagerduty/pagerduty-api.md
@@ -0,0 +1,329 @@
+# PagerDuty API
+
+This page documents the API endpoints related to PagerDuty integration operations. Use these endpoints to programmatically manage your PagerDuty integration — from creating and validating to editing and removing it.
+
+All endpoints use the base URL of your Qualytics deployment (e.g., `https://your-instance.qualytics.io/api`).
+
+## Add Integration via API
+
+### Get Integration Specifications
+
+Before creating the integration, you can retrieve the specifications to understand the required properties.
+
+**Endpoint**: `GET /api/integrations-specifications`
+
+**Permission**: Manager
+
+??? example "Example request and response"
+
+ **Request**:
+
+ ```bash
+ curl -X GET "https://your-instance.qualytics.io/api/integrations-specifications" \
+ -H "Authorization: Bearer YOUR_TOKEN"
+ ```
+
+ **Response** (PagerDuty entry):
+
+ ```json
+ {
+ "label": "PagerDuty",
+ "type": "pagerduty",
+ "implemented": true,
+ "category": "alerting",
+ "properties": [
+ {
+ "group": {
+ "name": "Connection Properties",
+ "outline": true
+ },
+ "field": "api_access_token",
+ "map_to": "api_access_token",
+ "required": true,
+ "secret": true,
+ "type": "string",
+ "title": "Routing Key",
+ "info_md": "The **Integration Key** (Routing Key) from your PagerDuty Events API v2 integration...",
+ "placeholder": "your-routing-key"
+ }
+ ]
+ }
+ ```
+
+### Create Integration
+
+Creates a new PagerDuty integration with the provided Routing Key. Qualytics validates the key during creation by sending a Change Event to PagerDuty (which does **not** create an incident).
+
+**Endpoint**: `POST /api/integrations`
+
+**Permission**: Manager
+
+**Request Body**:
+
+| Property | Type | Required | Description |
+| :--- | :--- | :--- | :--- |
+| `type` | string | Yes | Must be `pagerduty` |
+| `api_access_token` | string | Yes | The Routing Key (Integration Key) from your PagerDuty Events API v2 integration |
+
+??? example "Example request and response"
+
+ **Request**:
+
+ ```bash
+ curl -X POST "https://your-instance.qualytics.io/api/integrations" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "pagerduty",
+ "api_access_token": "your-pagerduty-routing-key"
+ }'
+ ```
+
+ **Response**:
+
+ ```json
+ {
+ "id": 5,
+ "type": "pagerduty",
+ "created": "2026-03-12T10:00:00Z",
+ "updated": "2026-03-12T10:00:00Z"
+ }
+ ```
+
+!!! note
+ If the Routing Key is invalid, the creation will fail with a `400` error. Verify the key in your PagerDuty service under **Integrations > Events API v2**.
+
+---
+
+## Edit Integration via API
+
+### Get Integration
+
+Retrieves the details of a specific integration by ID. Use this to check the current state before editing.
+
+**Endpoint**: `GET /api/integrations/{id}`
+
+**Permission**: Manager
+
+**Path Parameters**:
+
+| Parameter | Type | Required | Description |
+| :--- | :--- | :--- | :--- |
+| `id` | integer | Yes | The integration ID |
+
+??? example "Example request and response"
+
+ **Request**:
+
+ ```bash
+ curl -X GET "https://your-instance.qualytics.io/api/integrations/5" \
+ -H "Authorization: Bearer YOUR_TOKEN"
+ ```
+
+ **Response**:
+
+ ```json
+ {
+ "id": 5,
+ "type": "pagerduty",
+ "created": "2026-03-12T10:00:00Z",
+ "updated": "2026-03-12T10:00:00Z"
+ }
+ ```
+
+### Update Integration
+
+Updates an existing PagerDuty integration. Commonly used to rotate the Routing Key or change the target PagerDuty service.
+
+**Endpoint**: `PUT /api/integrations/{id}`
+
+**Permission**: Manager
+
+**Path Parameters**:
+
+| Parameter | Type | Required | Description |
+| :--- | :--- | :--- | :--- |
+| `id` | integer | Yes | The integration ID |
+
+**Request Body**:
+
+| Property | Type | Required | Description |
+| :--- | :--- | :--- | :--- |
+| `api_access_token` | string | No | The new Routing Key |
+
+??? example "Example request and response"
+
+ **Request**:
+
+ ```bash
+ curl -X PUT "https://your-instance.qualytics.io/api/integrations/5" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "api_access_token": "new-routing-key-value-here"
+ }'
+ ```
+
+ **Response**:
+
+ ```json
+ {
+ "id": 5,
+ "type": "pagerduty",
+ "created": "2026-03-12T10:00:00Z",
+ "updated": "2026-03-12T11:30:00Z"
+ }
+ ```
+
+!!! note
+ Qualytics validates the new Routing Key before saving. If the key is invalid, the update will fail.
+
+---
+
+## Remove Integration via API
+
+### Delete Integration
+
+Deletes the PagerDuty integration. Any Flows using PagerDuty notifications will no longer be able to deliver alerts until a new integration is created.
+
+**Endpoint**: `DELETE /api/integrations/{id}`
+
+**Permission**: Manager
+
+**Path Parameters**:
+
+| Parameter | Type | Required | Description |
+| :--- | :--- | :--- | :--- |
+| `id` | integer | Yes | The integration ID |
+
+??? example "Example request"
+
+ ```bash
+ curl -X DELETE "https://your-instance.qualytics.io/api/integrations/5" \
+ -H "Authorization: Bearer YOUR_TOKEN"
+ ```
+
+ **Response**: `204 No Content`
+
+!!! warning
+ Deleting the integration does not delete Flow actions that reference PagerDuty. Those actions will fail to deliver notifications until the integration is re-created.
+
+---
+
+## Additional Endpoints
+
+### List Channels
+
+Returns the list of available channels for an alerting integration.
+
+**Endpoint**: `GET /api/alerting/{type}/list-channels`
+
+**Permission**: Manager
+
+!!! note
+ PagerDuty does not use channels — events are routed via Routing Keys, not channel selection. This endpoint returns an empty list for PagerDuty integrations.
+
+??? example "Example request and response"
+
+ **Request**:
+
+ ```bash
+ curl -X GET "https://your-instance.qualytics.io/api/alerting/pagerduty/list-channels" \
+ -H "Authorization: Bearer YOUR_TOKEN"
+ ```
+
+ **Response**:
+
+ ```json
+ []
+ ```
+
+### Get Action Notification Specifications
+
+Returns the specifications for configuring PagerDuty notifications in Flow actions, including severity levels, custom details, and routing key override.
+
+**Endpoint**: `GET /api/action-notification-specifications`
+
+**Permission**: Manager
+
+??? example "Example response (PagerDuty entry)"
+
+ ```json
+ {
+ "display_name": "PagerDuty",
+ "type": "PagerDuty",
+ "properties": [
+ {
+ "field": "severity",
+ "map_to": "parameters",
+ "required": false,
+ "title": "Severity",
+ "type": "enum",
+ "values": [
+ { "label": "Info", "value": "info" },
+ { "label": "Warning", "value": "warning" },
+ { "label": "Error", "value": "error" },
+ { "label": "Critical", "value": "critical" }
+ ],
+ "default": "info"
+ },
+ {
+ "field": "custom_details",
+ "map_to": "parameters",
+ "required": false,
+ "title": "Additional Details",
+ "type": "object",
+ "info": "Enhance the PagerDuty alert by setting additional details"
+ },
+ {
+ "field": "routing_key",
+ "map_to": "parameters",
+ "required": false,
+ "title": "Routing Key Override",
+ "info": "Override the default routing key from the PagerDuty integration to route events to a different PagerDuty service",
+ "type": "string",
+ "secret": true
+ }
+ ]
+ }
+ ```
+
+### Test Notification
+
+Sends a test PagerDuty notification to verify the configuration.
+
+**Endpoint**: `POST /api/flows/actions/test-notification`
+
+**Permission**: Manager
+
+??? example "Example request"
+
+ ```bash
+ curl -X POST "https://your-instance.qualytics.io/api/flows/actions/test-notification" \
+ -H "Authorization: Bearer YOUR_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "type": "PagerDuty",
+ "tokenized_message": "Test notification from {{ flow_name }}",
+ "parameters": {
+ "severity": "info"
+ }
+ }'
+ ```
+
+ **Response**: `200 OK` with a success confirmation.
+
+!!! tip
+ Use the test notification endpoint to verify that your Routing Key and Flow action configuration are working correctly before publishing the Flow.
+
+---
+
+## Permission Summary
+
+| Operation | Minimum Permission |
+| :--- | :--- |
+| View integration specifications | Manager |
+| Create, update, or delete integration | Manager |
+| List channels | Manager |
+| Test notification | Manager |
+| Configure Flow action notifications | Manager |
diff --git a/docs/settings/integrations/alerting/pagerduty/pagerduty-faq.md b/docs/settings/integrations/alerting/pagerduty/pagerduty-faq.md
new file mode 100644
index 0000000000..09806a9d6e
--- /dev/null
+++ b/docs/settings/integrations/alerting/pagerduty/pagerduty-faq.md
@@ -0,0 +1,78 @@
+# PagerDuty FAQ
+
+## Setup & Configuration
+
+#### What is a Routing Key and where do I find it?
+
+A Routing Key (also called an Integration Key) is a unique identifier that routes events to a specific PagerDuty service. You can find it in your PagerDuty account by navigating to **Services > [Your Service] > Integrations > Events API v2**. Each service can have its own Routing Key.
+
+#### Do I need admin access to PagerDuty to set up the integration?
+
+You need sufficient permissions in PagerDuty to create or manage a service and add an Events API v2 integration. Typically, a PagerDuty Admin or Manager role is required for these actions.
+
+#### What PagerDuty plan do I need?
+
+The Events API v2 is available on all PagerDuty plans, including the free tier. No specific paid plan is required for the Qualytics integration.
+
+#### Can I connect multiple PagerDuty services?
+
+Qualytics supports one PagerDuty integration (one default Routing Key) at the platform level. However, you can route events to **different PagerDuty services** by using the **Routing Key Override** property in individual Flow actions. This gives you multi-service routing without needing multiple integrations.
+
+#### Does the integration require OAuth?
+
+No. PagerDuty integration uses a simple **Routing Key** (Integration Key) instead of OAuth tokens. There is no authorization flow or token refresh required.
+
+---
+
+## Connection & Validation
+
+#### What happens when I create the integration?
+
+Qualytics validates your Routing Key by sending a **Change Event** to PagerDuty. Change Events are informational and **do not create incidents**, so your on-call team will not be alerted during setup.
+
+#### What if my Routing Key is invalid?
+
+The integration creation will fail with an error message indicating that the key could not be validated. Double-check that you copied the correct Integration Key from your PagerDuty service's Events API v2 integration.
+
+#### How do I rotate my Routing Key?
+
+Edit the PagerDuty integration in Qualytics (Settings > Integrations > PagerDuty > Edit) and update the Routing Key with the new value. Qualytics will validate the new key before saving.
+
+#### Can Qualytics reach PagerDuty if I'm behind a firewall?
+
+Qualytics communicates with PagerDuty's public Events API (`https://events.pagerduty.com`). Ensure that outbound HTTPS traffic to this domain is allowed from your Qualytics deployment.
+
+---
+
+## Managing the Integration
+
+#### Can I edit the Routing Key after the integration is created?
+
+Yes. Go to **Settings > Integrations**, click the vertical ellipses (⋮) next to PagerDuty, and select **Edit**. Update the Routing Key and click **Update**. The new key is validated before saving.
+
+#### What happens when I disconnect the PagerDuty integration?
+
+Disconnecting removes the integration configuration. Any Flow actions that reference PagerDuty will no longer be able to deliver notifications, but the Flow actions themselves are not deleted. You can re-create the integration at any time.
+
+#### Can I manage the integration via API?
+
+Yes. All integration operations — create, read, update, and delete — are available through the Qualytics API. See the [PagerDuty API](pagerduty-api.md) documentation for endpoints and examples.
+
+---
+
+## Troubleshooting
+
+#### My PagerDuty events are not creating incidents. What should I check?
+
+1. Verify the Routing Key is correct and not expired
+2. Check that the PagerDuty service associated with the key is not disabled
+3. Ensure the severity level matches your service's urgency settings — some services may suppress low-severity events
+4. Verify that your Qualytics deployment can reach `https://events.pagerduty.com` over HTTPS
+
+#### The test notification succeeded but I don't see an incident in PagerDuty.
+
+Check the following:
+
+- The PagerDuty service may have **event rules** that suppress or route certain events
+- The incident may have been auto-resolved by PagerDuty's event intelligence
+- The severity may be set to **Info**, which some services treat as low urgency and may not surface prominently
diff --git a/docs/settings/integrations/alerting/slack.md b/docs/settings/integrations/alerting/slack.md
index 568a612ef8..10a107ffd6 100644
--- a/docs/settings/integrations/alerting/slack.md
+++ b/docs/settings/integrations/alerting/slack.md
@@ -8,7 +8,7 @@ Let's get started 🚀
**Step 1:** Log in to your Qualytics account and click the **"Settings"** button on the left side panel of the interface.
-
+
**Step 2:** By default, Connections tab will open. Click on the **Integrations** tab .
diff --git a/mkdocs.yml b/mkdocs.yml
index d7c1bae219..29740cd879 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -2,7 +2,7 @@ site_name: User Guide
## DEPLOYMENT URL
site_url: https://userguide.qualytics.io/
## LOCAL URL
-#site_url: http://localhost:8001/userguide/
+# site_url: http://localhost:8001/userguide/
site_description: User Guide for the Qualytics data quality platform
site_author: Qualytics Team
@@ -273,8 +273,30 @@ nav:
- Overview: flows/overview-action.md
- Operations: flows/operations.md
- Anomaly: flows/anomaly.md
- - Notifications: flows/notification.md
- - Notification Tokens: flows/notification-tokens.md
+ - Notifications:
+ - Overview: flows/notifications/overview.md
+ - Message Variables: flows/notifications/message-variables.md
+ - In App:
+ - Overview: flows/notifications/in-app/overview.md
+ - API: flows/notifications/in-app/api.md
+ - FAQ: flows/notifications/in-app/faq.md
+ - Email:
+ - Overview: flows/notifications/email/overview.md
+ - API: flows/notifications/email/api.md
+ - FAQ: flows/notifications/email/faq.md
+ - Slack:
+ - Overview: flows/notifications/slack/overview.md
+ - API: flows/notifications/slack/api.md
+ - FAQ: flows/notifications/slack/faq.md
+ - Microsoft Teams:
+ - Overview: flows/notifications/microsoft-teams/overview.md
+ - API: flows/notifications/microsoft-teams/api.md
+ - FAQ: flows/notifications/microsoft-teams/faq.md
+ - PagerDuty:
+ - Overview: flows/notifications/pagerduty/overview.md
+ - API: flows/notifications/pagerduty/api.md
+ - FAQ: flows/notifications/pagerduty/faq.md
+ - FAQ: flows/notifications/faq.md
- Workflow: flows/workflow.md
- Ticketing: flows/ticketing.md
- View and Track Flow Executions: flows/view-created-flows.md
@@ -351,6 +373,15 @@ nav:
- Overview: settings/integrations/alerting/overview.md
- Slack: settings/integrations/alerting/slack.md
- Microsoft Teams: settings/integrations/alerting/msft_teams.md
+ - PagerDuty:
+ - Overview: settings/integrations/alerting/pagerduty/overview.md
+ - Deep Dive: settings/integrations/alerting/pagerduty/deep-dive.md
+ - API: settings/integrations/alerting/pagerduty/pagerduty-api.md
+ - FAQ: settings/integrations/alerting/pagerduty/pagerduty-faq.md
+ - Managing PagerDuty:
+ - Add Integration: settings/integrations/alerting/pagerduty/managing-pagerduty/add-integration.md
+ - Edit Integration: settings/integrations/alerting/pagerduty/managing-pagerduty/edit-integration.md
+ - Remove Integration: settings/integrations/alerting/pagerduty/managing-pagerduty/remove-integration.md
- Ticketing:
- Overview: settings/integrations/ticketing/ticketing.md
- Jira: settings/integrations/ticketing/jira.md
@@ -479,11 +510,9 @@ markdown_extensions:
emoji_generator: !!python/name:material.extensions.emoji.to_svg
plugins:
- - search:
- exclude:
- - components/anomaly-support/*
- - components/comparators/*
- - components/general-props/*
+ - search
+ - exclude:
+ glob:
- components/anomaly-support/*
- components/comparators/*
- components/general-props/*
@@ -507,6 +536,14 @@ plugins:
'container/computed-fields/transformation-types.md': 'fields/computed-fields/transformation-types.md'
'container/computed-fields/computed-fields-details.md': 'fields/computed-fields/computed-fields-details.md'
'container/computed-fields/add-computed-fields.md': 'fields/computed-fields/add-computed-fields.md'
+ # Notifications restructure
+ 'flows/notification.md': 'flows/notifications/overview.md'
+ 'flows/notification-tokens.md': 'flows/notifications/message-variables.md'
+ 'flows/notifications/in-app.md': 'flows/notifications/in-app/overview.md'
+ 'flows/notifications/email.md': 'flows/notifications/email/overview.md'
+ 'flows/notifications/slack.md': 'flows/notifications/slack/overview.md'
+ 'flows/notifications/microsoft-teams.md': 'flows/notifications/microsoft-teams/overview.md'
+ 'flows/notifications/pagerduty.md': 'flows/notifications/pagerduty/overview.md'
# Source Datastore reorganization
'source-datastore/catalog.md': 'source-datastore/operations/sync.md'
'source-datastore/operations/catalog.md': 'source-datastore/operations/sync.md'
@@ -553,7 +590,7 @@ plugins:
'connections/overview-of-a-connection.md': 'source-datastore/add-datastores/connections/overview-of-a-connection.md'
# Catalog to Sync redirect
'source-datastore/sync.md': 'source-datastore/operations/sync.md'
- # AI integrations redirects (from main)
+ # AI integrations redirects
'settings/integrations/ai/mcp.md': 'settings/integrations/ai-and-agents/deep-dive/mcp.md'
'settings/integrations/ai/agentic.md': 'settings/integrations/ai-and-agents/deep-dive/agentic.md'
'settings/integrations/ai/mcp-quickstart.md': 'settings/integrations/ai-and-agents/managing/add-agent-q-integration.md'