Integrations

Webhooks

Configure Qualflare project webhooks to receive HTTP callbacks when events occur, such as test results being collected or defects being created.

Webhooks

Webhooks let you receive real-time HTTP notifications from Qualflare when events happen in your project. Use webhooks to trigger custom automation, sync data to external systems, or notify services that don't have a native integration.

Managing Webhooks

Webhooks are configured per project at Project Settings → Webhooks.

Creating a Webhook

  1. Go to Project Settings → Webhooks
  2. Click New Webhook
  3. Enter:
    • URL — the HTTPS endpoint to receive the webhook payload
    • Events — which events should trigger this webhook (see Events below)
  4. Click Save

The webhook status badge shows Active when enabled.

Webhook Events

EventWhen It Fires
launch.completedA test launch finishes execution
defect.createdA new defect was created in the project

Payload Format

Qualflare sends an HTTP POST request to your webhook URL with a JSON body. Example payload:

{
  "event": "launch.completed",
  "timestamp": "2026-04-01T12:00:00Z",
  "projectSlug": "my-project",
  "data": {
    "launchSeq": 42,
    "totalCases": 120,
    "passed": 115,
    "failed": 5
  }
}

Enabling and Disabling

Use the toggle on each webhook row to enable or disable it without deleting the configuration.

Request Headers

Every webhook delivery includes:

HeaderDescription
Content-TypeAlways application/json
User-AgentAstrais-Webhook/1.0
X-Webhook-EventThe event type that triggered this delivery (e.g. launch.completed)
X-Webhook-IDThe webhook's own ID — useful for routing if one endpoint handles deliveries from multiple webhooks
X-Webhook-SignatureHMAC-SHA256 signature of the raw request body — see Verifying Signatures below

Only https:// endpoints are accepted (on port 443 or 8443) — plain HTTP webhook URLs aren't supported.

Verifying Signatures

Each webhook has its own signing secret, generated automatically and shown exactly once, in a toast, immediately after you create it. Copy it somewhere safe — it can't be viewed again afterward (only regenerated by recreating the webhook).

To verify a delivery is genuinely from Qualflare, compute an HMAC-SHA256 digest of the raw request body using your secret, and compare it — as a constant-time comparison, not === — against the X-Webhook-Signature header, which is formatted as sha256=<hex-digest>:

import crypto from 'node:crypto';

function isValidSignature(rawBody, signatureHeader, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signatureHeader),
    Buffer.from(expected),
  );
}

Sign the raw request body, not a re-serialized version of the parsed JSON — re-serializing can change key order or whitespace and produce a signature mismatch even for a legitimate delivery.

Security

Verify the X-Webhook-Signature header on every request as described above — this is the reliable way to confirm a delivery is genuinely from Qualflare, not just checking the payload shape or origin IP.

See Also