One row per site. Open the Cameras tab for the full per-camera list.
| Site name | Total | Online | Offline | Last check | Status |
|---|
No cameras yet. Open the Admin tab and upload a JSON file.
| Site | Host | Status | Ping uptime (30d) | Last checked |
|---|
No sites yet.
No events yet.
Showing all sites. Use Run (Health / Snapshots / Both), or per-site / per-camera buttons.
No cameras yet. Open the Admin tab and upload a JSON file.
Everything that has gone wrong, by day. Pick a date on the left to see exactly what happened on it.
Nothing recorded.
One section at a time — pick what you need below.
Select a site to edit names/URLs, test, delete cameras, or add more channels.
Sites where the vendor API (ISAPI, DW Spectrum, Uniview, UniFi) is either unreachable — so cameras silently fall back to a plain RTSP check and you lose recording and disk status — or answered and called cameras offline while they streamed fine over RTSP, which usually means a viewing-only port or a forward pointing at a different device. Fix the port if the API should work; switch to RTSP only if it never will.
Changes the host on every camera at this site at once, keeping ports, paths and stored logins. Use this when the site's public IP changes — editing 20-odd URLs by hand is 20 chances to mistype one.
| Camera name | RTSP URL | Test | ||
|---|---|---|---|---|
| Select a site to edit cameras. | ||||
Channels: 1-8 or 1,3,5-12,45 — not only 1…N in order.
Preview: —
Pick NVR brand → IP, user, pass, port, channels. Pulse builds every RTSP URL.
Preview: —
Replace the camera list from a CSV or JSON file (same as before).
Upload .json or .csv (id, site_name, rtsp_url, ports, extra_data).
No file selected
What each camera saw, by day. One picture per camera is kept for each day — the last good look at it that day — so you can go back through the last two weeks. Pick a site, then a date.
Pick a site to see its pictures.
| Site | Pictures | No picture | Stale | Oldest | Newest | On disk | |
|---|---|---|---|---|---|---|---|
| Loading sites… | |||||||
API keys for sites on RTSP port 7447.
Paste the Protect / UniFi OS API key and the HTTPS host/port of the Protect UI (often different from RTSP if only 7447 is forwarded).
| RTSP host | Label / sites | Cams | HTTPS host | Port | API key | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Sites whose recorder is a Lumana box, checked through Lumana's cloud API.
Create an API key in the Lumana console and paste it here. It is stored encrypted and never shown again — leave the field blank to keep the saved one.
Link each camera of a site to its Lumana camera. A linked camera is judged by Lumana alone: its old address is no longer pinged, port-checked or opened over RTSP. Clear every link to hand the site back to its own recorder.
| Pulse camera | Lumana camera | Status |
|---|---|---|
| Choose a site. | ||
How often Pulse checks cameras automatically.
Sent when a camera or site goes DOWN or recovers, and when a camera is online but stops recording — the failure you would otherwise only find out about when footage is asked for. Nothing is sent until SMTP is filled in below; until then alerts appear on the Dashboard and in History only.
RTSP usernames and passwords are stored encrypted and are never sent to this
portal — camera URLs show **** in place of credentials. Cameras
reference a login rather than embedding it, so changing a password here applies
to every camera that uses it, with no URL editing.
| Site | Username | NVR / host | Cameras |
|---|
No stored logins yet. They are created automatically the first time cameras with credentials are loaded.
What another system — the VMS — reads from Pulse, and the keys it uses. Authenticated with a key header rather than a login, so it holds no session and can be revoked on its own.
Every path below hangs off this.
A read key can call the first two. A write key can call all of them.
| Method | Path | Needs | What it does |
|---|---|---|---|
| GET | /api/integration/system-health | read | Current state of every camera, site and recorder. |
| GET | /api/integration/ping | read | Confirm the key works. |
| POST | /api/integration/sites | write | Create a site. |
| PUT | /api/integration/sites/{id} | write | Update a site. |
| DEL | /api/integration/sites/{id} | write | Stop monitoring a site. |
| POST | /api/integration/nvrs | write | Create a recorder. |
| PUT | /api/integration/nvrs/{id} | write | Update a recorder. |
| DEL | /api/integration/nvrs/{id} | write | Stop monitoring a recorder. |
| POST | /api/integration/cameras | write | Create a camera. |
| PUT | /api/integration/cameras/{id} | write | Update a camera. |
| DEL | /api/integration/cameras/{id} | write | Remove a camera. |
A read key exposes health status. A write key can stop a camera being monitored, so leave this off unless the integration needs it. An Admin key is a level above that: it can change who can log in here, set the camera logins, and mint further keys. Issue one only to a system you would trust with this portal, and only for as long as it needs it.
| Label | Key | Access | Created | Last used |
|---|
No API keys yet.
Pulse calls the VMS the moment a camera or site changes state, so nobody has to poll for it. Deliveries that fail are queued and retried; nothing is lost while the far end is down.
Each receiver signs with its own secret, so one cannot forge another's deliveries. An event goes to every destination that is switched on.
| Name | URL | Secret | Queued | Sending |
|---|
No destinations yet — add the first one below.
Both ends must hold the same secret. Paste the one they sent you, or and send it to them.
Shared by every destination. Changes are sent as they happen — these settings do not delay them.
Also send incidents pushes an outage when it starts and again when it ends, so a receiver does not have to keep asking. Turn it on only once they have told you their end is ready for it.
Resend full state pushes the whole fleet's status on a timer whether or not anything changed, so a receiver that was offline and missed some changes is put right without anyone reconciling anything. Every 15 minutes is plenty.
The last 25 deliveries, whether they worked or not — so a camera going down can be traced from the event to the receiver that took it. Quote the delivery id if they cannot find one their end.
Read the camera list from the VMS, so a camera is added in one place instead of two. Pulse keeps its own settings — ports, logins, how each camera is checked — and takes only the inventory.
Read the camera list from the VMS so a site is added in one place. Pulse keeps its own ports, probe settings and credentials — those are found by probing and are never overwritten by a sync.
Users see Dashboard and History only. Admins can open Admin and run everything in it. Superadmins additionally reset passwords and grant roles.
| Username | Role | Status | Actions |
|---|