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 → IntegrationsWebhook 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.