Documentation
Getting cameras online, the management API, and exactly what an evidence export contains.
Network requirements
Cameras dial out. There is nothing to forward, nothing to expose and no VPN to maintain.
| Direction | Destination | Port | Purpose |
|---|---|---|---|
| outbound | ingest-*.at-mirror-01.tabserv.link | 443/tcp | media and control |
| outbound | time.at-mirror-01.tabserv.link | 123/udp | NTP |
| outbound | fw.at-mirror-01.tabserv.link | 443/tcp | firmware |
Budget 2.2 Mbit/s of sustained uplink per 1080p camera — the extra 10% covers retransmission and the low-rate live view stream. The console will refuse to enrol a camera that would push a site past its configured ceiling.
Onboarding cameras
bash
# claim a camera by serial, assign it to a site
sv cameras claim --serial K7B-4192-8831 --site warehouse-04 \
--profile continuous-1080p15
# verify it is recording
sv cameras status --site warehouse-04 --watchCompleteness
Every camera reports which minutes it holds and which it has shipped. The difference is the backfill queue, and it is visible to you, not just to us.
json
{
"camera": "cam_8831",
"day": "2026-08-03",
"minutes_expected": 1440,
"minutes_stored": 1440,
"minutes_pending": 0,
"completeness": 1.0
}Access control
Roles are scoped to sites and to camera groups. Viewing is logged with the same rigour as export — an operator who scrubbed through an hour of footage leaves a record of it.
API
| Method | Path | Purpose |
|---|---|---|
GET | /v2/cameras | list with health and completeness |
GET | /v2/cameras/{id}/timeline | stored ranges |
POST | /v2/exports | request an evidence export |
GET | /v2/exports/{id} | status and download URL |
POST | /v2/search | cross-site metadata query |
GET | /v2/audit | access log, exportable |
Export format
A signed ZIP containing the media, a manifest and the access log.
media/— fragmented MP4 segments, unalteredmanifest.json— per-segment SHA-256 and a Merkle roottimestamp.tsr— RFC 3161 token over the Merkle rootaccess.csv— every view and export touching this rangeverify.sh— offline verification, no network needed
Re-encoding an export invalidates the hash chain. If a prosecutor needs a different container, export again with the container you need rather than converting the file.