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
- Go to Project Settings → Webhooks
- Click New Webhook
- Enter:
- URL — the HTTPS endpoint to receive the webhook payload
- Events — which events should trigger this webhook (see Events below)
- Click Save
The webhook status badge shows Active when enabled.
Webhook Events
| Event | When It Fires |
|---|---|
launch.completed | A test launch finishes execution |
defect.created | A 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:
| Header | Description |
|---|---|
Content-Type | Always application/json |
User-Agent | Astrais-Webhook/1.0 |
X-Webhook-Event | The event type that triggered this delivery (e.g. launch.completed) |
X-Webhook-ID | The webhook's own ID — useful for routing if one endpoint handles deliveries from multiple webhooks |
X-Webhook-Signature | HMAC-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
Notion Integration
Connect Qualflare to Notion to create a page in a Notion database whenever a defect, failed launch, failure cluster or flaky test appears.
Qualflare CLI Tool - Upload & Query Test Results
Upload test results from 27 frameworks with the Qualflare CLI. Query suites, cases, plans, launches, and defects — supports JUnit, pytest, Jest, and more.