Documentation
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

Need help?

Can't find what you're looking for? Our support team is here to help.