Overview
Rhombus cameras expose multiple ways to access video content through the public API:- Live streaming for real-time monitoring, embedded as a Rhombus-hosted iframe
- HLS manifests (
.m3u8) for direct playback in your own player - Thumbnail images for dashboards and quick previews
- Frame captures at any historical timestamp
Getting Camera Thumbnails
All Rhombus cameras automatically upload thumbnail images. These are perfect for dashboards, monitoring interfaces, and quick status checks.Thumbnail Endpoint
Retrieve camera thumbnails using a GET request to:All
media.rhombussystems.com endpoints use the same authentication as the main API — include the x-auth-scheme and x-auth-apikey headers on every request.cameraUuid and mediaRegion for a camera, call POST /api/camera/getMinimalCameraStateList. The response contains a cameraStates array; each entry has uuid and mediaRegion fields.
Basic Implementation
cURL
cURL
Getting Frames at Specific Times
To get a JPEG image at a specific historical timestamp, callPOST /api/video/getExactFrameUri. The response contains a frameUri — make a GET request to that URI with the same authentication headers to download the frame.
downscaleFactor, jpgQuality, and permyriadCropX/permyriadCropY/permyriadCropWidth/permyriadCropHeight fields (each in 1/10000ths of the image dimensions, where 10000 = 100%).
Live Video Streaming
Rhombus offers two ways to play live video in your application:- Embed the Rhombus player as an iframe — easiest path; analytics and timeline events render automatically.
- Play the HLS manifest directly — use your own player (
hls.js, Safari native, etc.) for full UI control.
POST /api/camera/createSharedLiveVideoStream. The response contains both URLs:
| Field | Description |
|---|---|
sharedLiveVideoStreamUrl | Hosted Rhombus player URL — embed in an iframe |
sharedLiveM3U8StreamUrl | HLS (.m3u8) manifest — play directly with any HLS player |
sharedLiveVideoStreamUuid | UUID of the created share, useful for revoking later |
Embedding Shared Streams as iframes (Recommended)
Create a shared stream, then drop the returned URL into an iframe. The iframe player handles authentication via the URL itself, so no API key is needed in the browser.React Component Example
URL Parameters for Enhanced Control
Customize the embedded player with URL parameters. All parameters can be set totrue or false:
| Parameter | Description |
|---|---|
disableautoplay | Enable or disable video autoplay upon loading |
hideevents | Enable or disable the timeline and related events |
realtime | Enable or disable real-time streaming by default |
showheader | Enable or disable zoom & streaming buttons at the top |
showfooter | Enable or disable camera name and timestamp at bottom |
lowRes | Force low resolution on the video stream |
performanceMode | Force performance mode allowing GPU usage |
t | Timestamp (epoch milliseconds) where video should start |
Parameter Usage
Append parameters to the shared stream URL:https://{{url}}/?{{variable}}=true&{{variable}}=false
Example:
React Usage with Parameters
Embedding HLS Streams Directly
If you want to render live video in your own player rather than the hosted iframe, usesharedLiveM3U8StreamUrl from the same createSharedLiveVideoStream response. The manifest is a standard HLS .m3u8 and is signed with a token in the URL itself — no x-auth-apikey header is needed when fetching it.
The HLS URL is single-org-scoped and time-limited. Treat it as a credential and don’t expose it in public-facing pages without an expiration policy.
createSharedLiveVideoStream call from a server you control and pass only the resulting sharedLiveM3U8StreamUrl (or sharedLiveVideoStreamUrl) to the browser. Keep the API key out of client code.
Recorded Video Access
Downloading recorded footage as a single MP4 file is not exposed as a public API operation. The Rhombus storage layer serves recorded video as a sequence of media segments rather than a pre-rendered MP4, so producing a downloadable clip requires fetching and concatenating segments client-side. The supported way to do this is the Rhombus CLI:POST /api/event/getPolicyAlerts — the previous getPolicyAlertsV2 endpoint is deprecated.
Complete Implementation Example
A React component supporting both thumbnail and live-stream view types:Usage Examples
Best Practices
Performance Optimization
- Thumbnail caching: Cache thumbnails client-side and refresh on a sensible interval rather than polling continuously.
- Lazy loading: Load video content only when needed or when in viewport.
- Quality selection: Use
lowRes=trueon the iframe player for grids and dashboards.
Security Considerations
- Keep API keys server-side: Never expose
x-auth-apikeyin browser code. CallcreateSharedLiveVideoStreamfrom your backend and pass only the resulting URLs to the client. - HTTPS only: Always use HTTPS for API calls and shared stream URLs.
- Scope keys narrowly: Limit each API key to the minimum permissions required.
- Set expirations on shared streams: Pass
expirationTimeSecswhen creating shared streams so URLs don’t outlive the use case.
Error Handling
Accessibility
Troubleshooting
Thumbnail not loading- Verify
cameraUuidandmediaRegioncame from a recentgetMinimalCameraStateListresponse —mediaRegioncan change. - Check that the API key has access to the camera’s location.
- Confirm the camera is online (
connectionStatusin the camera state response).
- Check network connectivity to
*.rhombussystems.com. - For HLS playback, confirm the browser supports HLS natively or that
hls.jsis loaded. - Inspect firewall/proxy rules — corporate proxies frequently block media segment requests.
- Pass
lowRes=truefor bandwidth-constrained clients. - Check upstream bandwidth at the camera site.
Next Steps
Video Player
Build a custom video player with HLS playback and timeline controls.
LAN Realtime Detection
Parse AI bounding boxes from the LAN H.264 WebSocket stream and overlay them on live video.
Backup Footage
Download and archive camera footage to local storage.