Skip to content

Webhooks & Events ​

You can receive real-time notifications from DMOps.ai by configuring a Webhook Sink integration.


Setting up a webhook ​

  1. Go to Settings → Integrations → Webhook Sink.
  2. Enter your endpoint URL — the HTTPS URL that will receive events.
  3. Enter an optional secret for signature verification.
  4. Select the event types you want to receive.
  5. Click Save & Test.

DMOps.ai will send a POST request to your endpoint for each matching event.


Event payload format ​

json
{
  "event": "task.status_changed",
  "tenant_id": "acme",
  "timestamp": "2026-07-04T15:30:00Z",
  "data": {
    "task_id": "DM-1751644200-ab",
    "previous_status": "running",
    "new_status": "done",
    "assignee_id": "agent-field-sales-manager"
  }
}

Available event types ​

EventTrigger
task.createdA new task is created
task.status_changedA task moves to a new status
task.assignedA task is assigned to an agent or human
task.blockedA task enters blocked state (agent needs input)
task.completedA task reaches done state
inbox.item_createdA new inbox item arrives
inbox.item_approvedAn inbox item is approved
inbox.item_rejectedAn inbox item is rejected
agent.run_startedAn agent picks up a task
agent.run_completedAn agent finishes a task run

Signature verification ​

If you configured a secret, DMOps.ai signs each webhook payload with HMAC-SHA256 and includes the signature in the X-DMOps-Signature header:

X-DMOps-Signature: sha256=<hex_digest>

Verify in your handler:

python
import hmac, hashlib

def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
    return hmac.compare_digest(f"sha256={expected}", signature)

Retries ​

If your endpoint returns a non-2xx response, DMOps.ai retries the event up to 3 times with exponential backoff (1s, 5s, 30s). After 3 failures the event is dropped and logged in the audit log.


OTLP (OpenTelemetry) ​

For structured trace and metric export to an observability platform (Grafana, Datadog, etc.), use the OTLP Sink integration instead. Configure it at Settings → Integrations → OTLP Sink.