Purpose
Deploy the video-analytics-api REST service standalone with the user's chosen config, data-log bind, and Elasticsearch / Kafka connectivity.
Instructions
Follow the routing tables and step-by-step workflows below. Each section that ends in
workflow,
quick start, or
flow is intended to be executed top-to-bottom. Detailed reference material lives in
and helper scripts live in
— call them via
when the skill points to a script by name.
Examples
Worked end-to-end examples are kept under
(each
manifest
contains a runnable scenario). Run a Tier-3 evaluation to replay them:
bash
nv-base validate skills/vss-setup-video-analytics-api --agent-eval
A minimal standalone bring-up looks like:
bash
cd $REPO/deploy/docker
export VSS_APPS_DIR=$(pwd)
export VSS_DATA_DIR=${VSS_DATA_DIR:-/tmp/vss-data}
mkdir -p "$VSS_DATA_DIR/data_log/vss_video_analytics_api"
docker compose -f services/analytics/video-analytics-api/compose.yml up -d vss-video-analytics-api
curl -sf http://localhost:8081/livez
Follow
references/deploy-video-analytics-api-service.md
for the full
workflow (config source, data-log bind, infrastructure dependencies, REST endpoints).
Limitations
- Requires the matching VSS profile / microservice to be deployed and reachable from the caller.
- NGC-hosted models and NIMs may be subject to rate-limits, GPU memory requirements, and license restrictions.
- Concurrency, GPU memory, and storage limits depend on the host hardware and the profile's compose file.
Troubleshooting
- Error: REST call returns connection refused. Cause: target microservice not running. Solution: probe or ; redeploy via or the matching skill.
- Error: HTTP 401/403 from NGC pulls. Cause: missing/expired . Solution: and re-export the key before retrying.
- Error: container OOM or model fails to load. Cause: insufficient GPU memory for the selected profile. Solution: switch to a smaller variant or free GPUs via .
VSS Setup Video Analytics API — Standalone
Deploy
just the
container (the Node.js REST API from the upstream
repo), not as part of the full warehouse blueprint stack.
The full operational walkthrough — config-source options, data-log volume behavior, infrastructure dependencies, REST API endpoints, deploy + verify, troubleshooting — is
references/deploy-video-analytics-api-service.md
. This SKILL.md only handles routing and prerequisites.
When to use
- "Deploy video analytics api" / "run video-analytics-api standalone"
- "I just want to run the REST API, not the full stack"
- "Use my own video-analytics-api config"
- "Point the API at a different Elasticsearch / Kafka"
- "Start the API without Kafka" / "run the API broker-less"
- "Check what REST endpoints are available"
Prerequisites
-
Repo checkout with
pointing at
. Required by the service compose's volume binds.
-
NGC credentials —
set so docker can pull the image. See
../vss-deploy-profile/references/ngc.md
.
Secure-handling note for : this key is a
long-lived credential that pulls all NVIDIA private images
available to your NGC org. Never commit the key, never paste it
into chat, never store it in
. Read it interactively
(
) or load it from your secret manager
(Vault, AWS Secrets Manager, sealed-secrets) at deploy time.
Write any derived
files with
+
,
add them to
, and rotate the key on a defined
cadence and after every host decommission. If it has ever been
exposed (host snapshot, shared screen, ticket attachment),
rotate immediately.
-
Docker runtime — Docker Engine
28.3.3 with Docker Compose plugin
v2.39.1+. Verify with
and
.
-
Elasticsearch — must be reachable at the URL configured in
. The server pings ES on startup; if unreachable, it exits (and
brings it back). If you need to bring up ES too, use the infra compose:
docker compose -f services/infra/compose.yml up -d elasticsearch
.
-
Optional Kafka broker. The API can run without Kafka. If you want a quiet broker-less deployment, use the image-baked config or a custom config with
; the service-shipped compose config points at
, so Kafka-dependent features (dynamic config, dynamic calibration, RTLS/AMR) will fail until a broker is reachable.
-
for the default compose. The base compose bind-mounts
$VSS_DATA_DIR/data_log/vss_video_analytics_api
for multipart upload handling and file-backed assets such as calibration images. Set the directory to a writable host path and pre-create it, or remove that mount if image uploads are not needed.
If any required prerequisite fails, surface the gap before going further.
Workflow
Hand the user
references/deploy-video-analytics-api-service.md
and walk them through its steps in order:
- Choose a config — image-baked default, service-shipped, or custom.
- Decide whether a data-log volume is needed for file uploads.
- Confirm infrastructure dependencies — Elasticsearch (required), Kafka (optional).
- Deploy + verify with and health check.
The compose-file edits, config options, deploy + verify commands, REST API endpoint table, and troubleshooting table all live in that reference — don't duplicate them here.
REST API capabilities
Once the container is up and Elasticsearch is reachable, the API serves the
endpoint groups listed in
references/deploy-video-analytics-api-service.md
§ REST API endpoints.
The server must initialize against Elasticsearch before
can return healthy. Data-query endpoints also need matching Elasticsearch indices and data. Endpoints that publish notifications (config, calibration) or expose RTLS / AMR streams also require Kafka.
Kafka-dependent features (runtime, requires broker)
Once the container is up and a Kafka broker is reachable, three additional capabilities are available:
Dynamic config
The API acts as the
producer for dynamic config updates. When an operator POSTs to
, the API publishes an
message to the
topic with Kafka key
behavior-analytics-config
. The downstream
container consumes this and ACKs back. The API also handles the bootstrap flow — when
starts, it publishes a
message, and the API replies with
containing the latest verified config from Elasticsearch.
Consumer-side validation, ACK semantics, and the full wire contract are documented in
../vss-setup-behavior-analytics/references/dynamic-config.md
.
Dynamic calibration
The API produces calibration update notifications on
with Kafka key
. Supports
(full snapshot),
(per-sensor merge), and
(per-sensor removal). The downstream
container consumes these and applies them to the live calibration.
Consumer-side validation and per-action policy are documented in
../vss-setup-behavior-analytics/references/dynamic-calibration.md
.
RTLS / AMR
The API consumes real-time location (
) and AMR (
) messages from Kafka and exposes them via REST endpoints.
Routing rules
- If the user wants "the full stack" (UI / agent / perception): hand off to with profile (or ). Don't run this skill in parallel.
- If the user wants to deploy the analytics pipeline (behavior creation, incident detection): hand off to
vss-setup-behavior-analytics
.
- If the user wants to publish a runtime config / calibration update through the REST API: confirm Kafka is reachable, then use the or calibration endpoints and point them at the behavior-analytics dynamic-update references for the consumer wire contract.
- If the user wants to understand the dynamic config / dynamic calibration wire contract from the consumer (behavior-analytics) side: point them at
../vss-setup-behavior-analytics/references/dynamic-config.md
and ../vss-setup-behavior-analytics/references/dynamic-calibration.md
.
- If the user wants to query or interact with the REST API endpoints: the endpoint table above and the deploy reference cover what's available. For the full OpenAPI spec, see
src/app/specification/openapi.json
in the repo.