PlatformPricingDocsBlogSign In
Sign InGet Started Free
PlatformPricingDocsBlogSign In

Stay up to date

Get the latest on the Euriqa platform, product updates, and test automation best practices.

Platform

  • Platform
  • Services
  • Pricing
  • Docs

Developers

  • Getting Started
  • API Reference
  • SDK
  • CI/CD Integration

Company

  • About
  • Blog
  • Contact
  • Security

Legal

  • Privacy Policy
  • Terms of Service
© 2026 Euriqa. All rights reserved.
  • Getting Started

    • Introduction
    • Quickstart
    • Reporter Configuration
    • CI/CD Setup
  • Platform Features

    • Test Orchestration
    • AI Features
    • Flakiness Detection
    • Artifacts & Uploads
    • Webhooks
    • Teams & Projects
  • API Reference

    • Authentication
    • API Reference
    • Data Model
  • Security

    • Security Overview
  • Playwright

    • Playwright Docs
    • Playwright API
    • Playwright Test Reporters

Webhooks

Get notified when important events happen in your project. Euriqa webhooks send HTTP POST requests to your endpoint whenever subscribed events occur, enabling real-time integrations with Slack, PagerDuty, deployment pipelines, and more.

Supported Events

Subscribe to one or more of the following events when configuring a webhook.

EventDescriptionTrigger
run.completedA test run finishedFires when a run finishes with any status (passed, failed, or mixed)
run.failedA test run failedFires only when a run finishes with one or more test failures

Creating a Webhook

Via Dashboard

  1. Navigate to your project in the Euriqa dashboard at app.euriqa.dev.
  2. Go to Settings > Webhooks.
  3. Click Add Webhook.
  4. Enter the webhook URL, select the events to subscribe to, and optionally add custom headers or a secret.
  5. Click Save. The webhook is now active.

Via API

bash
curl -X POST https://app.euriqa.dev/api/webhooks \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-server.com/webhook",
    "events": ["run.completed", "run.failed"],
    "headers": {
      "Authorization": "Bearer your-token"
    },
    "secret": "whsec_your_webhook_secret",
    "active": true
  }'

URL Requirements

Webhook endpoint URLs must meet the following requirements:

  • Must use HTTPS (HTTP is not allowed for security reasons).
  • Must be a publicly accessible URL. Internal or private network addresses are not supported.
  • Must respond with a 2xx status code within 10 seconds.
  • Must accept POST requests with a JSON body.
If a webhook delivery fails (non-2xx response or timeout), Euriqa retries the delivery up to 3 times with exponential backoff.

Managing Webhooks

Use the API to list, update, and delete webhooks programmatically.

List Webhooks

bash
curl https://app.euriqa.dev/api/webhooks \
  -H "X-API-Key: your-api-key"

Update a Webhook

bash
curl -X PATCH https://app.euriqa.dev/api/webhooks/whk_abc123 \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-server.com/new-webhook-endpoint",
    "events": ["run.failed"],
    "active": true
  }'

Delete a Webhook

bash
curl -X DELETE https://app.euriqa.dev/api/webhooks/whk_abc123 \
  -H "X-API-Key: your-api-key"

Custom Headers

Add custom HTTP headers to every webhook delivery. This is useful for authentication tokens, routing keys, or any metadata your endpoint requires.

json
{
  "headers": {
    "Authorization": "Bearer your-service-token",
    "X-Routing-Key": "test-results",
    "X-Environment": "production"
  }
}

Custom headers are sent alongside the standard Euriqa headers on every delivery. They are stored securely and can be updated at any time via the dashboard or API.


Webhook Secret

Each webhook can have an optional secret used to sign request payloads. When a secret is configured, every delivery includes an X-Euriqa-Signature header containing an HMAC-SHA256 signature of the request body.

Your endpoint should verify this signature to confirm the request genuinely came from Euriqa. This prevents attackers from spoofing webhook deliveries.

typescript
import crypto from 'crypto';

function verifyWebhookSignature(
  payload: string,
  signature: string,
  secret: string
): boolean {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}
Always use a timing-safe comparison when verifying webhook signatures to prevent timing attacks.

Example: Slack Integration

Send test run results to a Slack channel using an incoming webhook URL. Subscribe to run.completed to get notified on every run, or run.failed to only hear about failures.

json
{
  "url": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX",
  "events": ["run.completed"],
  "headers": {},
  "secret": "whsec_slack_integration_secret",
  "active": true
}

Euriqa formats the payload as a JSON POST request. You can use a middleware service or Slack workflow to transform the payload into a Slack message block format, or use a tool like Zapier or n8n to bridge the two.


Example: Deployment Gate

Use webhooks to gate deployments on test results. When a test run completes, your webhook endpoint can check the results and approve or block the deployment accordingly.

json
{
  "url": "https://your-deploy-service.com/api/gate",
  "events": ["run.completed"],
  "headers": {
    "Authorization": "Bearer deploy-service-token",
    "X-Pipeline-Stage": "pre-deploy"
  },
  "secret": "whsec_deploy_gate_secret",
  "active": true
}

The webhook payload includes the full run summary with pass/fail counts, duration, branch, and commit SHA. Your deployment gate service can use this data to make an informed decision:

  • All tests passed -- Approve the deployment and trigger the next pipeline stage.
  • Tests failed -- Block the deployment and notify the team via Slack or email.
  • Flaky tests detected -- Approve with a warning, or require manual review depending on your policy.
Combining the run.completed event with CI metadata (branch, commit SHA) lets you build deployment gates that are specific to your release branch.