NetworkOperatorAlertsRequest network.operator-alerts-request@1
Generated at from
openvibe-contracts v0.76.0 and
openvibe-sdk v0.20.1.
- Version
- 1.0.0
- Owner
- network
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/network/operator-alerts-request.v1.json
network.operator-alerts-request@1: POST /internal/operator/alerts on OpenVibe.Network (capability network.operator.alert, held by the Host principal). The complete set of alerts firing now at one source: an alert Network has not seen firing opens and pages the operator; one still firing is reminded once a day; one that was firing and is absent from the set is resolved and says so. An empty list resolves everything from that source. Fingerprints are stable per alert (name and labels), never secrets; summaries and descriptions are the alert rule's annotations.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
source | enum | yes | Where the alerts are evaluated. Resolution is per source. |
|
sent_at | string |
| ||
alerts | array of object | yes |
| |
alerts[].fingerprint | string | yes |
| |
alerts[].name | string | yes |
| |
alerts[].severity | enum | yes |
| |
alerts[].summary | string | yes |
| |
alerts[].description | string |
| ||
alerts[].service | string |
| ||
alerts[].started_at | string | yes |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: all-clear
{
"source": "prometheus",
"alerts": []
}Valid: two-firing
{
"source": "prometheus",
"sent_at": "2026-09-26T14:10:00Z",
"alerts": [
{
"fingerprint": "3f1c2a9b7d4e6f80",
"name": "OpenVibeBackupMissed",
"severity": "critical",
"summary": "No successful backup in 26 hours",
"description": "ovhost backup --all has not succeeded since 2026-09-25 03:35 UTC.",
"service": "host",
"started_at": "2026-09-26T05:35:00Z"
},
{
"fingerprint": "9a8b7c6d5e4f3a2b1c0d",
"name": "OpenVibeBrowserCheckFailed",
"severity": "warning",
"summary": "The browser check of live failed after release 8caa540",
"service": "live",
"started_at": "2026-09-26T14:05:00Z"
}
]
}Rejected: extra-labels
{
"source": "prometheus",
"alerts": [
{
"fingerprint": "3f1c2a9b7d4e6f80",
"name": "OpenVibeBackupMissed",
"severity": "critical",
"summary": "No backup",
"started_at": "2026-09-26T05:35:00Z",
"labels": {
"instance": "127.0.0.1:9100"
}
}
]
}Rejected: no-summary
{
"source": "prometheus",
"alerts": [
{
"fingerprint": "3f1c2a9b7d4e6f80",
"name": "OpenVibeBackupMissed",
"severity": "critical",
"started_at": "2026-09-26T05:35:00Z"
}
]
}Rejected: unknown-severity
{
"source": "prometheus",
"alerts": [
{
"fingerprint": "3f1c2a9b7d4e6f80",
"name": "OpenVibeBackupMissed",
"severity": "page",
"summary": "No backup",
"started_at": "2026-09-26T05:35:00Z"
}
]
}Rejected: unknown-source
{
"source": "grafana",
"alerts": []
}Rejected: uppercase-fingerprint
{
"source": "prometheus",
"alerts": [
{
"fingerprint": "3F1C2A9B7D4E6F80",
"name": "OpenVibeBackupMissed",
"severity": "critical",
"summary": "No backup",
"started_at": "2026-09-26T05:35:00Z"
}
]
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('network.operator-alerts-request@1', value); // { valid, errors: [{ path, message }] }