Integrations
Integrations connect OpenNVR to the third-party services your team already runs — chat, email, message brokers, object storage, and SIEMs — so camera and detection events flow straight into your existing tooling. You’ll find it under Administration → Integrations in the sidebar.
[!NOTE] Viewing integrations requires the
integrations.viewpermission. Adding, editing, testing, and deleting integrations is superuser-only — non-admins see the list but not the controls.

What you can do here
- Add an integration of one of 8 types: Webhook, Slack, Microsoft Teams, Email (SMTP), MQTT, S3 Storage, Syslog / SIEM, and Prometheus.
- Choose exactly which events each integration receives (per-event checkboxes).
- Test Connection on any card to send a dummy event and confirm delivery before you rely on it.
- Enable/disable, reconfigure, or delete an integration at any time.
Each integration appears as a card showing its status (a green check when enabled, grey when disabled), its type, and a one-line summary of its target. Hover a card to reveal the Test (▶), Configure (⚙), and Delete (🗑) actions.
Add an integration
- Click Add Integration (top-right — visible to superusers only). The Add Integration dialog opens.
- Pick an Integration Type from the dropdown. (The type is locked once the integration is created — to change type, delete and re-add.)
- Give it a Name — this is just a label for the card, e.g.
Ops Team Slack. - Fill in the type-specific fields (see each type below).
- For event-driven types, tick the Events you want delivered.
- Leave Enabled checked (a disabled integration is skipped, and its Test button will fail).
- Click Create Integration.
Once saved, hover the new card and click Test Connection (▶) to send a sample event and verify the endpoint receives it.
[!TIP] To change an existing integration, hover its card and click Configure (⚙). Everything except the type is editable. Delete (🗑) asks for confirmation first.
The events matrix
Webhook, Slack, Teams, and MQTT integrations let you subscribe to specific events. Tick any combination of:
| Event | Fires when |
|---|---|
camera.online |
A camera reconnects / comes online |
camera.offline |
A camera drops / goes offline |
motion.detected |
Motion is detected on a camera |
object.detected |
An AI adapter detects an object (person, vehicle, …) |
recording.started |
A recording session begins |
incident.created |
An incident is raised (e.g. from Alerts & Incidents) |
Email and S3 don’t use the events matrix — email is for notifications, S3 is driven by its own upload toggles.
Integration types & fields
Every example value below matches the placeholder shown in the actual form, so you can follow along field-by-field.
Webhook
Posts a JSON payload to any HTTP endpoint.
| Field | Required | Example | Notes |
|---|---|---|---|
| Target URL | ✓ | https://api.example.com/hook |
Where the event JSON is POSTed |
| Secret Token | — | x-auth-token |
Optional shared secret sent for verification |
| Events | — | (checkboxes) | Which events to deliver |
Slack
Sends messages to a Slack channel via an incoming webhook.
| Field | Required | Example | Notes |
|---|---|---|---|
| Webhook URL | ✓ | https://hooks.slack.com/services/... |
Create one in Slack → Incoming Webhooks |
| Channel | — | #alerts |
Overrides the webhook’s default channel |
| Mention | — | @user or @here |
Prepended to the message to ping someone |
| Events | — | (checkboxes) | Which events to deliver |
Microsoft Teams
Posts to a Teams channel via an incoming webhook connector.
| Field | Required | Example | Notes |
|---|---|---|---|
| Webhook URL | ✓ | https://outlook.office.com/webhook/... |
From the Teams channel’s Connectors |
| Events | — | (checkboxes) | Which events to deliver |
Email (SMTP)
Sends email notifications through your own SMTP server.
| Field | Required | Example | Notes |
|---|---|---|---|
| SMTP Host | ✓ | smtp.gmail.com |
Your mail server |
| Port | — | 587 |
Defaults to 587 (STARTTLS) |
| Username | — | nvr@example.com |
SMTP auth user |
| Password | — | •••••••• |
SMTP auth password / app password |
| Use TLS/SSL | — | (checked) | On by default |
| From Address | ✓ | nvr@example.com |
Sender shown to recipients |
| Recipients | ✓ | admin@example.com, security@example.com |
Comma-separated list |
MQTT
Publishes events to an MQTT broker for downstream automation.
| Field | Required | Example | Notes |
|---|---|---|---|
| Broker URL | ✓ | mqtt://localhost:1883 |
mqtt:// or mqtts:// broker address |
| Username | — | Optional broker auth | |
| Password | — | Optional broker auth | |
| Topic Prefix | — | opennvr |
Events publish under opennvr/... |
| Events | — | (checkboxes) | Which events to deliver |
S3 Storage
Uploads recordings and/or snapshots to any S3-compatible bucket (AWS S3, MinIO, Backblaze, Cloudflare R2, …).
| Field | Required | Example | Notes |
|---|---|---|---|
| Endpoint | ✓ | https://s3.amazonaws.com |
S3-compatible endpoint URL |
| Access Key | ✓ | AKIA... |
|
| Secret Key | ✓ | •••••••• |
|
| Bucket Name | ✓ | opennvr-recordings |
Target bucket |
| Region | — | auto |
Defaults to auto |
| Upload Recordings | — | (checkbox) | Push recording segments to the bucket |
| Upload Snapshots | — | (checkbox) | Push event snapshots to the bucket |
Syslog / SIEM and Prometheus
Both types are selectable in the dropdown but their configuration forms aren’t wired up yet — the dialog shows “Configuration not available for this type yet.” They’re placeholders for an upcoming release; for now, use the Webhook type to forward events to a SIEM’s HTTP collector, and scrape adapter metrics directly with Prometheus (see System Monitoring).
📸 Screenshots to capture
Capture these from the running app and save them to opennvr-site/public/screenshots/ with the exact filenames below:
integrations-overview.png— the Integrations tab with a couple of configured cards (hover one so the Test/Configure/Delete actions show).integrations-add-dialog.png— the Add Integration dialog with the Type dropdown open, showing all 8 types.integrations-slack-config.png— the dialog on Slack, filled in withOps Team Slack, a webhook URL,#alerts, and a couple of events ticked.integrations-events-matrix.png— a close-up of the Events checkboxes (optional, if it reads well as its own shot).