Fluidify

Generic Webhook

The generic webhook accepts a standardized JSON schema that any monitoring tool, script, or custom integration can send to. Use this for tools not natively supported.

Webhook URL

POST https://your-domain.com/api/v1/webhooks/generic

Schema

{
  "alerts": [
    {
      "title": "Redis memory usage above 90%",
      "description": "Redis instance redis-primary is using 91.2% of available memory.",
      "severity": "critical",
      "status": "firing",
      "external_id": "redis-memory-alert-001",
      "source": "my-monitoring-script",
      "labels": {
        "service": "redis",
        "environment": "production",
        "region": "us-east-1"
      },
      "annotations": {
        "runbook": "https://wiki.yourcompany.com/runbooks/redis-memory",
        "dashboard": "https://grafana.yourcompany.com/d/redis"
      },
      "started_at": "2024-01-15T10:30:00Z"
    }
  ]
}

Fields

Field Type Required Description
title string Yes Alert title shown in the UI and Slack
description string No Detailed description of the alert
severity string No critical, warning, info — defaults to warning
status string No firing or resolved — defaults to firing
external_id string No Stable ID for deduplication. If the same external_id is sent again, Regen updates the existing alert rather than creating a new one
source string No Name of the source system
labels object No Key-value pairs for filtering and routing
annotations object No Additional metadata (runbook links, dashboards, etc.)
started_at string No ISO8601 timestamp — defaults to current time

Authentication (optional)

Sign requests with an HMAC-SHA256 signature to prevent unauthorized alert injection. Configure a secret under Settings → Integrations → Generic Webhook.

When configured, include the header:

X-Regen-Signature: sha256=<hmac_hex>

The HMAC is computed over the raw request body using your configured secret.

Example in Python:

import hmac, hashlib, json, requests

secret = b"your-webhook-secret"
payload = json.dumps({"alerts": [...]}).encode()
sig = hmac.new(secret, payload, hashlib.sha256).hexdigest()

requests.post(
    "https://your-domain.com/api/v1/webhooks/generic",
    data=payload,
    headers={
        "Content-Type": "application/json",
        "X-Regen-Signature": f"sha256={sig}",
    }
)

Schema reference

Fetch the full JSON Schema at runtime:

GET https://your-domain.com/api/v1/webhooks/generic/schema

Sending a resolve

To resolve an alert, send the same external_id with status: resolved:

{
  "alerts": [
    {
      "external_id": "redis-memory-alert-001",
      "title": "Redis memory usage above 90%",
      "status": "resolved"
    }
  ]
}

Regen matches on external_id and closes the alert. If all alerts linked to an incident are resolved, the incident is flagged for resolution.