All docs

Integrations

Notifications & Alerts

Email, Slack, Discord, Teams, webhooks. Per-channel event filters so engineering doesn't see the QA noise. HMAC-signed webhooks.

Notifications & Alerts

AegisRunner can deliver run results, scan completions, and AI-generated tests to email, Slack, Discord, Microsoft Teams, and any HTTPS webhook. Each channel can subscribe to a different mix of events, so your engineering channel doesn't get the same noise as your QA channel.

Channels

ChannelSetupNotes
EmailJust enable. Uses your account email by default; override per project.Always available, no config required.
SlackPaste an Incoming Webhook URL.Block Kit formatting with pass/fail counts and link to run.
DiscordPaste a Webhook URL.Embed format. Color-coded by status.
TeamsPaste a Workflow / Incoming Webhook URL.Adaptive Card format. Note: classic Office 365 connectors retire late 2025.
HTTPS WebhookYour URL + a secret.HMAC-SHA256-signed JSON payload. Best for piping into your own tools.

Events

Five events can fire a notification:

EventWhen it fires
run_completedAny test run finishes — pass or fail.
run_failedA test run fails. Subset of run_completed.
crawl_completedA scan finishes (success or failure).
ai_generatedAI test generation completes for a scan.
scheduled_runsA scheduled run completes.

Per-channel filters

You don't have to send every event to every channel. Each channel can subscribe to a different subset:

  • Engineering Slack channel — only run_failed. Don't ping engineers when everything passes.
  • QA Slack channelrun_completed + ai_generated. They want every run plus alerts when new tests are generated to review.
  • Email (you)scheduled_runs only. Daily digest of overnight schedule outcomes.
  • Webhook (your dashboard) — everything. Centralized aggregation in your own tooling.

The filter UI is on the Notifications page (sidebar) or per-project under Project Config → Integrations → Notifications.

How filters resolve

The system uses two layers:

  1. Global event flags — at the top of the settings, you toggle which events you want at all. "Notify on run failed" on; "Notify on crawl completed" off.
  2. Per-channel overrides — under each enabled channel, you can override individual events. If a channel doesn't override an event, it inherits the global flag.

Storage shape (for the API):

{
  "slack": {
    "run_completed": false,
    "run_failed": true
  },
  "email": {
    "scheduled_runs": true
  }
}

Missing keys fall back to the global flag, so you only specify what's different.

Setting up Slack

  1. In Slack, go to Apps → Manage → Custom Integrations → Incoming Webhooks.
  2. Add a webhook to the channel you want notifications in. Copy the URL.
  3. In AegisRunner, open Project → Integrations → Notifications.
  4. Toggle Slack on, paste the URL, click Test to send a sample message.
  5. Configure which events route to Slack from the per-channel filter.

Setting up Discord

  1. In Discord, open the channel settings → Integrations → Webhooks → New Webhook.
  2. Name it (e.g. "AegisRunner") and copy the webhook URL.
  3. In AegisRunner, paste it under the Discord toggle.

Setting up Teams

  1. In Teams, open the channel → … → Workflows → Post to a channel when a webhook request is received.
  2. Configure the workflow and copy the trigger URL.
  3. Paste it under the Teams toggle.
Note on classic Teams connectors: Microsoft is deprecating classic O365 connectors. Use the Workflows-based webhook setup above for new integrations. Existing classic-connector URLs continue to work but won't be supported indefinitely.

Setting up an outbound webhook

  1. Toggle Webhook on.
  2. Enter your URL.
  3. Generate or paste a secret. AegisRunner signs every request with HMAC-SHA256 using this secret.
  4. Save.

Verifying the signature

Every webhook delivery includes X-AegisRunner-Signature:

X-AegisRunner-Signature: sha256=<hex>
X-AegisRunner-Event: run_completed
Content-Type: application/json

Compute HMAC-SHA256(secret, raw_body) and compare with constant-time equality. Reject any request whose signature doesn't match.

Payload shape

{
  "event": "run_completed",
  "timestamp": "2026-04-28T10:42:11Z",
  "project": { "id": "...", "name": "Acme Web", "slug": "acme-web" },
  "run": {
    "id": "...",
    "suite_name": "Checkout flow",
    "status": "passed",
    "browser": "chromium",
    "passed": 14,
    "failed": 0,
    "skipped": 1,
    "duration_ms": 38_400,
    "url": "https://aegisrunner.com/runs/..."
  }
}

Schemas vary by event. Webhooks deliver as soon as the event fires. Make your endpoint idempotent — duplicate deliveries are possible during retries.

Email digests and retention emails

Beyond run notifications, AegisRunner sends a few automated emails outside the per-event system:

  • Weekly digest — opt-in, summarizes the week's runs, scans, top failures.
  • Retention nudges — sent if your account goes inactive for 7 days, then again at 30 days. Encourage you to come back, with a link to your last project.
  • Plan-limit warnings — at 80% and 100% of your monthly run/scan cap.

Manage subscription to digests under Settings → Email Preferences. Retention nudges respect a workspace-wide unsubscribe.

Plan availability

PlanEmailSlack/Discord/TeamsWebhookPer-channel filters
Free
Starter1 channel1 webhook
ProAll three3 webhooks
BusinessAll threeUnlimited
EnterpriseAll threeUnlimited

Common questions

I'm getting Slack messages for runs that pass — can I quiet that?

Yes. Under per-channel filters for Slack, set run_completed to false and run_failed to true. You'll only get notified on failures.

Why didn't I get an email for that failure?

Either the global notify_run_failed is off, or the email channel has an explicit run_failed: false override. Check Settings → Notifications.

Can I add multiple Slack workspaces?

One Slack webhook per project on Pro. On Business, no per-project cap — you can target different channels in different workspaces by configuring multiple projects or using multiple webhook integrations.

Related