# Integration events

Source: https://docs.qualflare.com/docs/integrations/events · Last updated: 2026-10-29

Every event Qualflare integrations send: what triggers it, which integrations offer it, the message each one posts, and how to read Recent deliveries.

Qualflare integrations send seven events, from Defect Created to Flaky Test Detected, and each project picks which of them reach each integration; every attempt, delivered or not, is listed under **Recent deliveries** on the project's **Integrations** page.

[Webhooks](https://docs.qualflare.com/docs/integrations/webhooks) are separate and send their own two events.

## Events and when they are sent

| Event               | Key                   | Sent when                                                           | Offered by                                                                                                                                                                                                                                                                                        |
| ------------------- | --------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Defect Created      | `defect_created`      | A defect is created, or flaky detection opens one                   | [GitHub](https://docs.qualflare.com/docs/integrations/github), [GitLab](https://docs.qualflare.com/docs/integrations/gitlab), [Jira](https://docs.qualflare.com/docs/integrations/jira), Linear, [Slack](https://docs.qualflare.com/docs/integrations/slack), Microsoft Teams, Discord, PagerDuty |
| Defect Resolved     | `defect_resolved`     | A defect is closed or marked False positive                         | [Slack](https://docs.qualflare.com/docs/integrations/slack), Microsoft Teams, Discord, PagerDuty                                                                                                                                                                                                  |
| Launch Completed    | `launch_completed`    | An upload has no failed, error, timed-out or aborted test           | [Slack](https://docs.qualflare.com/docs/integrations/slack), Microsoft Teams, Discord, PagerDuty                                                                                                                                                                                                  |
| Launch Failed       | `launch_failed`       | An upload has at least one failed, error, timed-out or aborted test | All eight integrations                                                                                                                                                                                                                                                                            |
| Cluster Created     | `cluster_created`     | A new failure cluster gets its name                                 | All eight integrations                                                                                                                                                                                                                                                                            |
| Milestone Completed | `milestone_completed` | A milestone is saved with **Is Completed** on                       | [Slack](https://docs.qualflare.com/docs/integrations/slack), Microsoft Teams, Discord, PagerDuty                                                                                                                                                                                                  |
| Flaky Test Detected | `flaky_test_detected` | Qualflare opens a defect for a flaky case                           | [GitHub](https://docs.qualflare.com/docs/integrations/github), [GitLab](https://docs.qualflare.com/docs/integrations/gitlab), [Jira](https://docs.qualflare.com/docs/integrations/jira), Linear, [Slack](https://docs.qualflare.com/docs/integrations/slack), Microsoft Teams, Discord            |

### Defect Created

Qualflare sends Defect Created when someone creates a defect with **Create Defect** on the **Defects** page, through the API or through MCP, and when flaky detection opens a defect for a test case. Defects that Qualflare opens for a failure cluster, and defects created from a redundant-case notification, never send it. See [How defects are created](https://docs.qualflare.com/docs/defects#how-defects-are-created).

### Defect Resolved

Qualflare sends Defect Resolved when a defect's status changes from **Active** or **Action Required** to **Closed** or **False positive**, and when it closes a flaky-detection defect because the case is stable again. Issue trackers have nothing to file for it, so GitHub, GitLab, Jira and Linear don't offer it. See [Defect statuses](https://docs.qualflare.com/docs/defects#defect-statuses).

### Launch Completed

Qualflare sends Launch Completed when results uploaded with the CLI, a reporter or the API contain no failed, error, timed-out or aborted test. Manual runs never send it. In its message the counts currently always read `Passed: 0, Failed: 0`. See [Upload results with qf collect](https://docs.qualflare.com/docs/cli/collect).

### Launch Failed

Qualflare sends Launch Failed when an upload contains at least one failed, error, timed-out or aborted test: one event per upload, however many tests failed. Manual runs never send it.

### Cluster Created

Qualflare sends Cluster Created once per cluster, when a new failure cluster gets its name. Clustering needs **Enable AI Features** in the project's **AI Features** settings and a plan with AI failure clustering. See [How failure clustering works](https://docs.qualflare.com/docs/ai/failure-clusters#how-failure-clustering-works).

### Milestone Completed

Qualflare sends Milestone Completed when you save a milestone in **Edit** with **Is Completed** on. Saving the milestone again with **Is Completed** on sends it again, even when it was already completed. See [Complete or reopen a milestone](https://docs.qualflare.com/docs/test-management/milestones#complete-or-reopen-a-milestone).

### Flaky Test Detected

Qualflare sends Flaky Test Detected each time it opens a flaky-detection defect for a test case: when the case becomes flaky, and again if that defect is closed or marked **False positive** while the case is still flaky. The new defect also sends Defect Created, so a tracker with both events selected files two issues for one flaky test. PagerDuty doesn't offer Flaky Test Detected for this reason. See [How Qualflare flags a flaky test](https://docs.qualflare.com/docs/analytics/flaky-tests#how-qualflare-flags-a-flaky-test).

## Chat and alert messages

| Event               | Message text                                                                          |
| ------------------- | ------------------------------------------------------------------------------------- |
| Defect Created      | `New defect created: #<number> <name> (Severity: <severity>)`                         |
| Defect Resolved     | `Defect resolved: #<number> <name>`                                                   |
| Launch Completed    | `Launch #<number> completed with status: <status> (Passed: <count>, Failed: <count>)` |
| Launch Failed       | `Launch #<number> failed with status: <status> (Failed: <failed>/<total>)`            |
| Cluster Created     | `Failure cluster detected: <cluster name> (<count> affected cases)`                   |
| Milestone Completed | `Milestone completed: <milestone name>`                                               |
| Flaky Test Detected | `Flaky test detected: <test case name> (<rate>% flaky rate)`                          |

Slack and Discord post the text as it is, Microsoft Teams wraps it in a card, and PagerDuty uses it as the incident summary.

## Issues that trackers file

| Event               | Issue title                      |
| ------------------- | -------------------------------- |
| Defect Created      | `[Defect #12] <defect name>`     |
| Launch Failed       | `[Launch #48] Failed — <status>` |
| Cluster Created     | `[Cluster] <cluster name>`       |
| Flaky Test Detected | `[Flaky] <test case name>`       |

GitHub, GitLab, Jira and Linear use these titles. The body lists the event's details, such as a defect's severity and description or a launch's status, branch and failed count, and ends with *Created automatically by Qualflare*. See [What the issue contains](https://docs.qualflare.com/docs/integrations/github#what-the-issue-contains).

## Recent deliveries

In the project sidebar, open **Integrations**: **Recent deliveries** is below the cards once the project has a configured integration, with 10 rows a page. Until an event is sent, it reads `No deliveries recorded yet`. Anyone who can open the project can read it (requires the Viewer role or higher in the project).

*Figure: A project lists only the integrations enabled in its workspace, and each card shows whether this project has a configuration.*

| Column          | What it shows                                                                      |
| --------------- | ---------------------------------------------------------------------------------- |
| **When**        | When the attempt was made; hover it for how long ago                               |
| **Outcome**     | **Delivered**, **Failed** or **Dropped**                                           |
| **Integration** | The integration's key with a capital letter, for example Teams for Microsoft Teams |
| **Event**       | The event key, for example `launch_failed`                                         |
| **Detail**      | The provider's error on one line; hover it for the full text                       |

Each row is one attempt, so a delivery that Qualflare retries has a row for each attempt. The `<n> not delivered` badge next to the title counts the project's Failed and Dropped rows.

The **Outcome** column shows one of three values:

| Outcome       | Meaning                                                                              |
| ------------- | ------------------------------------------------------------------------------------ |
| **Delivered** | The provider accepted the delivery                                                   |
| **Failed**    | A temporary error, such as a timeout. Qualflare may still retry it                   |
| **Dropped**   | A permanent error, such as a revoked token or a deleted channel. It is never retried |

*Figure: Each row is one delivery attempt; Dropped means it failed for good and will not be retried.*

## Retries

Qualflare retries timeouts, network errors, and 429 and 5xx responses, up to 10 attempts in total, 10 seconds to 5 minutes apart. A 4xx response other than 429 is permanent, so the attempt is **Dropped** and never retried. Each integration is delivered and retried on its own, so a failure in one doesn't hold back or resend another. Events that happen while an integration is disabled are not sent, then or later.

## Linked issues

When GitHub, GitLab, Jira or Linear files an issue for Defect Created, Qualflare records it on the defect, under **Linked issues**. Issues filed for Launch Failed, Cluster Created or Flaky Test Detected aren't linked to any defect. See [Linked issues](https://docs.qualflare.com/docs/defects#linked-issues).

*Figure: An issue filed for Defect Created is linked from the defect.*

## Related

* **Guides:** [Integrations](https://docs.qualflare.com/docs/integrations) · [GitHub](https://docs.qualflare.com/docs/integrations/github) · [Jira](https://docs.qualflare.com/docs/integrations/jira) · [Slack](https://docs.qualflare.com/docs/integrations/slack)
* **Reference:** [Webhooks](https://docs.qualflare.com/docs/integrations/webhooks) · [Defects](https://docs.qualflare.com/docs/defects) · [Failure clusters](https://docs.qualflare.com/docs/ai/failure-clusters)
* **CLI/API:** [Upload results with qf collect](https://docs.qualflare.com/docs/cli/collect)
