# Discard the stream's ephemeral changes Action endpoint: reverts the running instance to its persisted configuration (stream group config plus override) and applies it live, immediately — restarting the detector session when the change calls for it, never the stream itself. Returns the resulting stream — fresh state and ETag, so the client needs no follow-up GET. Idempotent — succeeds whether or not ephemeral changes exist. No If-Match: this is an action, not a conditional edit. Endpoint: POST /runtime/apps/{app}/streams/{stream}/reset Version: 2.0.0 Security: engineBasic ## Path parameters: - `app` (string, required) Engine application holding the stream (e.g. live). The vhost and application instance are the ones VIC serves and are not addressed here. - `stream` (string, required) One stream's exact name, never a pattern — patterns belong to a stream group config's match.stream_pattern. ## Response 200 fields (application/json): - `application` (string, required) Engine application the stream is published to. - `name` (string, required) The stream's name. - `vhost` (string) Engine virtual host holding the application, normally _defaultVHost_. - `instance` (string) Application instance the stream is published to, normally _definst_. - `state` (object, required) The stream's live connection state and performance counters. - `state.connection` (string, required) VIS connection state (e.g. connected); stays connected during an AI-endpoint outage. - `state.endpoint_degraded` (boolean,null) True while the stream's AI endpoint (VLM or SVD NIM) is unreachable. - `state.reason` (string,null) Detail behind the current connection or endpoint_degraded state, when there is any. - `state.service_version` (string,null) Version of the VIS instance serving this stream. - `state.performance` (object,null) Live performance counters; absent while the stream reports none yet. - `state.performance.ping_rtt_avg` (number,null) Round-trip time to the VIS instance. - `state.performance.preprocess_time_avg` (number,null) Time preparing a frame before it reaches the model. - `state.performance.inference_time_avg` (number,null) Time the model spends on inference. - `state.performance.postprocess_time_avg` (number,null) Time turning inference output into detections. - `state.performance.total_processing_time_avg` (number,null) End-to-end time from frame capture to result. - `state.performance.frame_detect_time_avg` (number,null) Time spent specifically on the detection step. - `state.performance.frame_window` (integer,null) Length of one analysis window in seconds: the window duration for scene, VLM and synthetic; 1 for transcoder-fed object detection, or the frame-grab interval when it is fed by grabs. - `state.performance.video_frames_total` (integer,null) Frames taken from the source over the last 10 seconds, not since the stream started. A rolling count, so it falls back to 0 when analysis stops. - `state.performance.frames_detected` (integer,null) Frames analyzed over the same rolling 10 seconds, to read against video_frames_total. Lower means frames are being sampled or skipped, not lost. - `video` (object) The source video's resolution, frame rate and GOP size. - `video.width` (integer,null) Source width in pixels. - `video.height` (integer,null) Source height in pixels. - `video.frame_rate` (number,null) Source frame rate, in frames per second. - `video.gop_size` (integer,null) Source GOP (keyframe interval) size, in frames. - `config` (object, required) What the stream is running with — every layer already resolved, so nothing here is absent-and-inheriting the way a persisted document's members are. - `config.active` (boolean) Whether analysis runs. - `config.detector` (object,null) The stream's analysis; absent inherits from the layer below, explicit null selects none. - `config.detector.type` (string, required) Detector subtype: scene, object, vlm, or synthetic. Enum: "scene", "object", "vlm", "synthetic" - `config.listeners` (object) Listeners, keyed by name. Each entry merges independently of the others. - `config.processing` (object) How frames are sampled and shipped to analysis; absent inherits from the layer below. - `config.processing.inference_fps` (integer) Frames per second sent to analysis; -1 matches the source rate. Default -1. - `config.processing.window_seconds` (number) Seconds per analysis window (scene/VLM/synthetic). Default 2. - `config.processing.video_height` (integer) Resize frames to this height; -1 matches source, 0 matches the model. Default 0. - `config.processing.grayscale` (boolean) Send frames in grayscale. Default false. - `config.processing.frame_source` (string) Capture frames via the transcoder or periodic frame grabs. Default transcoder, except the synthetic detector, which taps the source packets and defaults to grab. Enum: "transcoder", "grab" - `config.processing.grab_interval_seconds` (number) Frame-grab period when frame_source is grab. Default 1. - `config.processing.buffer_frames` (integer) Frames buffered awaiting processing. Sized from the incoming video by default. - `config.processing.auto_throttle` (boolean) Reduce inference_fps automatically when inference falls behind. Default off. - `config.processing.catch_up` (object,null) Scene/VLM — skip stale backlog to the live edge when inference lags. - `config.processing.catch_up.enabled` (boolean) Default true. - `config.processing.catch_up.max_behind_seconds` (number) Default is the buffer's own headroom. - `config.processing.rollup_interval_seconds` (number) How long detections are held for batch/rollup listener events. Default 2. - `config.processing.gpu_ids` (array,null) Pin VIS-side inference to these GPUs; null lets VIS balance. - `config.service` (object) Which Video Intelligence Service analyzes the stream; absent inherits from the layer below. - `config.service.url` (string) VIS WebSocket endpoint, e.g. ws://vis-host:5001/ws/stream/. - `config.service.api_key` (string,null) Never echoed by a read. On a write: absent or null keeps the stored value, an empty string clears it. - `config.service.model_idle_timeout_seconds` (integer,null) How long VIS keeps an idle model loaded. - `config.diagnostics` (object) Debug aids; absent inherits from the layer below. - `config.diagnostics.save_images` (boolean) Save captured frames to disk on the Engine host. Default false. - `config.diagnostics.timing_log_seconds` (integer) Seconds between timing-metric dumps; 0 disables. Default 0. - `config.diagnostics.max_logged_messages` (integer) Protocol messages logged; -1 all, 0 disabled. Default 20. - `ephemeral_changes` (boolean) True while the running instance diverges from its persisted configuration (stream group config plus override) because of runtime writes. POST .../reset discards the divergence. - `etag` (string,null) This stream's configuration revision, to quote as If-Match on a write. Carried on the document so a client that listed streams can write one without reading it again; a single-stream read repeats it in the ETag header. It covers the config only, not the live counters under state. Server-assigned and ignored on a write. ## Response 404 fields (application/problem+json): - `type` (string) URI identifying the problem type. - `title` (string, required) Short, human-readable summary of the problem type. - `status` (integer, required) The HTTP status code, repeated from the response line. - `detail` (string) Human-readable explanation specific to this occurrence. - `instance` (string) URI identifying this specific occurrence of the problem. ## Response default fields (application/problem+json): - `type` (string) URI identifying the problem type. - `title` (string, required) Short, human-readable summary of the problem type. - `status` (integer, required) The HTTP status code, repeated from the response line. - `detail` (string) Human-readable explanation specific to this occurrence. - `instance` (string) URI identifying this specific occurrence of the problem.