Appearance
Webhooks & Events
You can receive real-time notifications from DMOps.ai by configuring a Webhook Sink integration.
Setting up a webhook
- Go to Settings → Integrations → Webhook Sink.
- Enter your endpoint URL — the HTTPS URL that will receive events.
- Enter an optional secret for signature verification.
- Select the event types you want to receive.
- 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
| Event | Trigger |
|---|---|
task.created | A new task is created |
task.status_changed | A task moves to a new status |
task.assigned | A task is assigned to an agent or human |
task.blocked | A task enters blocked state (agent needs input) |
task.completed | A task reaches done state |
inbox.item_created | A new inbox item arrives |
inbox.item_approved | An inbox item is approved |
inbox.item_rejected | An inbox item is rejected |
agent.run_started | An agent picks up a task |
agent.run_completed | An 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.