{ "openapi": "3.0.3", "info": { "title": "VSS Video Analytics APIs", "description": "REST API endpoints in Video Analytics API microservice", "license": { "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0" }, "version": "3.3.0" }, "servers": [ { "url": "https://ai.nvidia.com/api/v3.3/analytics", "x-internal": false } ], "security": [], "tags": [ { "name": "metrics", "description": "Endpoint(s) related to computation of key performance indicators." }, { "name": "tracker", "description": "Endpoint(s) related to tracker." }, { "name": "frames", "description": "Endpoint(s) related to frame metadata." }, { "name": "behavior", "description": "Endpoint(s) related to behavior metadata." }, { "name": "alerts", "description": "Endpoint(s) related to alerts." }, { "name": "incidents", "description": "Endpoint(s) related to incidents." }, { "name": "clustering", "description": "Endpoint(s) related to clustering." }, { "name": "events", "description": "Endpoint(s) related to events." }, { "name": "sensor", "description": "Endpoint(s) related to sensor." }, { "name": "config", "description": "Endpoint(s) related to config." }, { "name": "livez", "description": "Endpoint(s) used to check if server is live." } ], "paths": { "/metrics/average-speed": { "get": { "tags": [ "metrics" ], "summary": "Get average speed", "description": "Calculate average object speed for a place or sensor over a time range, with optional filters for stationary and short-lived behaviors.", "operationId": "controller.metrics.getAverageSpeed", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "stationaryObjectMaxTimeIntervalThresholdInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 500, "maximum": 900, "minimum": 1 } }, { "name": "stationaryObjectMinDistanceThresholdInMeters", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 5, "maximum": 10, "minimum": 1 } }, { "name": "shortLivedBehaviorMinTimeIntervalInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 3, "maximum": 10, "minimum": 1 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AverageSpeed" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/flowrate": { "get": { "tags": [ "metrics" ], "summary": "Get flow rate", "description": "Calculate object flow rate for a place or sensor over a time window, using the requested flow-rate unit and optional behavior filters.", "operationId": "controller.metrics.getFlowrate", "parameters": [ { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "timeWindowSizeInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 5, "maximum": 900, "minimum": 1 } }, { "name": "flowrateUnit", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "/sec", "/min", "/hr" ] } }, { "name": "shortLivedBehaviorMinTimeIntervalInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 3, "maximum": 10, "minimum": 0 } }, { "name": "stationaryObjectMinDistanceThresholdInMeters", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 5, "maximum": 10, "minimum": 0 } }, { "name": "stationaryObjectMaxTimeIntervalThresholdInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 300, "maximum": 900, "minimum": 0 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Flowrate" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "503": { "description": "Service Unavailable. This response will be sent if behavior-analytics does not respond within the configured timeout.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/average-speed-with-flowrate": { "get": { "tags": [ "metrics" ], "summary": "Get average speed and flow rate", "description": "Calculate average object speed and flow rate for a place or sensor over a time range.", "operationId": "controller.metrics.getAverageSpeedWithFlowrate", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "flowrateUnit", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "/sec", "/min", "/hr" ] } }, { "name": "shortLivedBehaviorMinTimeIntervalInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 3, "maximum": 10, "minimum": 0 } }, { "name": "stationaryObjectMinDistanceThresholdInMeters", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 5, "maximum": 10, "minimum": 0 } }, { "name": "stationaryObjectMaxTimeIntervalThresholdInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 300, "maximum": 900, "minimum": 0 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AverageSpeedWithFlowrate" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/average-speed-with-travel-time": { "get": { "tags": [ "metrics" ], "summary": "Get average speed and travel time", "description": "Calculate average object speed and corridor travel time for a place over a time range.", "operationId": "controller.metrics.getAverageSpeedWithTravelTime", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "corridorTravelTimeUnit", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "sec", "min", "hr" ] } }, { "name": "shortLivedBehaviorMinTimeIntervalInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 3, "maximum": 10, "minimum": 0 } }, { "name": "stationaryObjectMinDistanceThresholdInMeters", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 5, "maximum": 10, "minimum": 0 } }, { "name": "stationaryObjectMaxTimeIntervalThresholdInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 300, "maximum": 900, "minimum": 0 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AverageSpeedWithTravelTime" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/tripwire/counts": { "get": { "tags": [ "metrics" ], "summary": "Get tripwire counts", "description": "Get effective and actual tripwire crossing counts for a sensor over a time range, optionally filtered by tripwire and object type.", "operationId": "controller.metrics.getTripwireCounts", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "tripwireId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "default": "Person", "maxLength": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TripwireCounts" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/tripwire": { "get": { "tags": [ "metrics" ], "summary": "Get tripwire-based occupancy", "description": "Calculate occupancy for a place at a specified time from IN/OUT tripwire events and occupancy reset values. Use the occupancy reset endpoint to establish an accurate baseline.", "operationId": "controller.metrics.getTripwireBasedOccupancy", "parameters": [ { "name": "timestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "example": "Person", "maxLength": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TripwireOccupancy" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/reset": { "post": { "tags": [ "metrics" ], "summary": "Reset place occupancy", "description": "Reset the occupancy baseline for a place using the values in the request body.", "operationId": "controller.metrics.resetOccupancy", "security": [ { "BearerAuth": [] } ], "requestBody": { "description": "Details regarding the current occupancy of a place", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OccupancyReset" } } }, "required": true }, "responses": { "201": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Success" } } } }, "400": { "description": "Bad Request. This response will be sent if request body doesn't follow schema.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-codegen-request-body-name": "body" } }, "/metrics/tripwire/histogram": { "get": { "tags": [ "metrics" ], "summary": "Get tripwire count histogram", "description": "Aggregate tripwire crossing counts into histogram buckets for a sensor using either an explicit time range or a relative lookback window.", "operationId": "controller.metrics.getTripwireHistogram", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "tripwireId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with toTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with fromTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:10.000Z" }, { "name": "minutesAgo", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "description": "This parameter is not compatible with fromTimestamp and toTimestamp." }, { "name": "bucketCount", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 20 }, "description": "This parameter provided by user is a suggestion which will be taken into account while calculating bucket size in sec (which will be a multiple of 5). There is a possibilty that the result will have less/more buckets than the one provided in the input (i.e. it can go above 1000 buckets)." }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "example": "Person", "maxLength": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TripwireHistogram" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/fov": { "get": { "tags": [ "metrics" ], "summary": "Get FOV occupancy", "description": "Get field-of-view occupancy counts for a sensor over a time range, optionally filtered by object type.", "operationId": "controller.metrics.getFovOccupancy", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FovCounts" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/fov/histogram": { "get": { "tags": [ "metrics" ], "summary": "Get FOV occupancy histogram", "description": "Aggregate field-of-view occupancy into histogram buckets for a sensor using either an explicit time range or a relative lookback window.", "operationId": "controller.metrics.getFovHistogram", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with toTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with fromTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:10.000Z" }, { "name": "minutesAgo", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "description": "This parameter is not compatible with fromTimestamp and toTimestamp." }, { "name": "bucketCount", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 20 }, "description": "This parameter provided by user is a suggestion which will be taken into account while calculating bucket size in sec (which will be a multiple of 5). There is a possibilty that the result will have less/more buckets than the one provided in the input (i.e. it can go above 1000 buckets)." }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FovHistogram" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/roi": { "get": { "tags": [ "metrics" ], "summary": "Get ROI occupancy", "description": "Get region-of-interest occupancy counts for a sensor over a time range, optionally filtered by ROI and object type.", "operationId": "controller.metrics.getRoiOccupancy", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "roiId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "hazard_zone_1" }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RoiCounts" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/roi/histogram": { "get": { "tags": [ "metrics" ], "summary": "Get ROI occupancy histogram", "description": "Aggregate region-of-interest occupancy into histogram buckets for a sensor using either an explicit time range or a relative lookback window.", "operationId": "controller.metrics.getRoiHistogram", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "roiId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "hazard_zone_1" }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with toTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with fromTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:10.000Z" }, { "name": "minutesAgo", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "description": "This parameter is not compatible with fromTimestamp and toTimestamp." }, { "name": "bucketCount", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 20 }, "description": "This parameter provided by user is a suggestion which will be taken into account while calculating bucket size in sec (which will be a multiple of 5). There is a possibilty that the result will have less/more buckets than the one provided in the input (i.e. it can go above 1000 buckets)." }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RoiHistogram" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/roi/mutually-exclusive": { "get": { "tags": [ "metrics" ], "summary": "Get mutually exclusive ROI occupancy", "description": "Calculate occupancy for a place from mutually exclusive ROIs at a specified time, with optional object details and timing controls.", "operationId": "controller.metrics.getOccupancyBasedOnMutuallyExclusiveRoi", "parameters": [ { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "timestamp", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "default": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "objectDetails", "in": "query", "required": false, "schema": { "type": "boolean", "default": false } }, { "name": "timestampDelayInSec", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 5, "default": 3 } }, { "name": "timeWindowInMs", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 4000, "default": 2000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OccupancyBasedOnMutuallyExclusiveRois" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/tracker": { "get": { "tags": [ "metrics" ], "summary": "Get tracker-based occupancy", "description": "Get object counts by type from tracker data for a place at a specified time.", "operationId": "controller.metrics.getOccupancyTracker", "parameters": [ { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "timestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 } }, { "name": "timeWindowInMs", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 100, "default": 100, "maximum": 5000, "description": "Time window in milliseconds" } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TrackerOccupancy" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/occupancy/tracker/histogram": { "get": { "tags": [ "metrics" ], "summary": "Get tracker occupancy histogram", "description": "Aggregate average tracker-based occupancy by object type into time buckets for a place using either an explicit time range or a relative lookback window.", "operationId": "controller.metrics.getTripwireOccupancyHistogram", "parameters": [ { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with toTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with fromTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:10.000Z" }, { "name": "minutesAgo", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "description": "This parameter is not compatible with fromTimestamp and toTimestamp." }, { "name": "bucketCount", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 20 }, "description": "This parameter provided by user is a suggestion which will be taken into account while calculating bucket size in sec (which will be a multiple of 5). There is a possibilty that the result will have less/more buckets than the one provided in the input (i.e. it can go above 1000 buckets)." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TrackerOccupancyHistogram" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/space-utilization/histogram": { "get": { "tags": [ "metrics" ], "summary": "Get space utilization histogram", "description": "Aggregate ROI space-utilization values into time buckets, optionally filtered by ROI identifiers and time window.", "operationId": "controller.metrics.getSpaceUtilizationHistogram", "parameters": [ { "name": "roiIds", "in": "query", "required": false, "schema": { "type": "array", "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "minItems": 1, "maxItems": 10000 } }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with toTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "description": "This parameter must be used together with fromTimestamp. However, it is not compatible with minutesAgo.", "example": "2022-08-25T00:00:10.000Z" }, { "name": "minutesAgo", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "description": "This parameter is not compatible with fromTimestamp and toTimestamp." }, { "name": "bucketCount", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 20 }, "description": "This parameter provided by user is a suggestion which will be taken into account while calculating bucket size in sec (which will be a multiple of 5). There is a possibilty that the result will have less/more buckets than the one provided in the input (i.e. it can go above 1000 buckets)." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SpaceUtilizationHistogram" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/last-processed-timestamp": { "get": { "tags": [ "metrics" ], "summary": "Get last processed timestamp", "description": "Get the most recent timestamp processed for a specified place or sensor.", "operationId": "controller.metrics.getLastProcessedTimestamp", "parameters": [ { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "city=abc/building=xyz", "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "Cam1", "description": "This parameter is incompatible with place. Only one of them can exist in the query." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LastProcessedTimestamp" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/metrics/road-network/segment-speed": { "get": { "tags": [ "metrics" ], "summary": "Get road-segment speeds", "operationId": "controller.roadNetwork.averageSegmentSpeed", "description": "Calculate average object speed for specified road-network segments at a place over a time range.", "parameters": [ { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "city=abc/intersection=xyz" }, { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "objectTypes", "in": "query", "required": false, "schema": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "default": [ "Vehicle" ] } }, { "name": "segmentInfo", "in": "query", "required": true, "schema": { "type": "boolean", "default": false } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "oneOf": [ { "$ref": "#/components/schemas/DetailedSegmentSpeed" }, { "$ref": "#/components/schemas/SegmentSpeed" } ] } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tracker/unique-object-count": { "get": { "tags": [ "tracker" ], "summary": "Get unique object count", "description": "Estimate the number of unique objects observed across sensors at a specified time, optionally filtered by place, sensor, or object identifier.", "operationId": "controller.tracker.getUniqueObjectCount", "parameters": [ { "name": "timestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-24T00:00:10.000Z" }, { "name": "timeWindowInMs", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 86400000, "default": 100 } }, { "name": "sensorIds", "in": "query", "required": false, "schema": { "type": "array", "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "minItems": 1, "maxItems": 20 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query. When objectId is present, then only one sensorId can be present in the sensorIds array.", "example": [ "Cam1", "Cam2" ] }, { "name": "objectId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "101" }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorIds. Only one of them can exist in the query.", "example": "city=abc/building=xyz" } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UniqueObjectCount" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tracker/unique-object-count-with-locations": { "get": { "tags": [ "tracker" ], "summary": "Get unique object count and locations", "description": "Estimate unique objects and their locations across sensors for a place, with timing controls for RTLS and AMR data.", "operationId": "controller.tracker.getUniqueObjectCountWithLocations", "parameters": [ { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "city=abc/building=def/Warehouse=xyz" }, { "name": "timestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "timeWindowInMs", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 3000, "minimum": 1, "maximum": 99999999 } }, { "name": "amrTimestampWindowInMs", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 200, "minimum": 0, "maximum": 99999999 } }, { "name": "amrWithoutRtlsMinTimestampThresholdInMs", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 2000, "minimum": 0, "maximum": 99999999 } }, { "name": "amrRouteMinTimestampThresholdInMs", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 1000, "minimum": 0, "maximum": 99999999 } }, { "name": "amrRouteMaxTimestampThresholdInMs", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 200, "minimum": 0, "maximum": 99999999 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UniqueObjectCountWithLocations" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tracker/unique-objects": { "get": { "tags": [ "tracker" ], "summary": "Get tracked objects", "description": "Retrieve objects tracked across one or more sensors, including their constituent behaviors or tracklets, for a specified time range and optional filters.", "operationId": "controller.tracker.getUniqueObjects", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:59.000Z" }, { "name": "sensorIds", "in": "query", "required": false, "schema": { "type": "array", "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "minItems": 1, "maxItems": 20 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query. When objectId is present, then only one sensorId can be present in the sensorIds array.", "example": [ "Cam1", "Cam2" ] }, { "name": "objectId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "101" }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorIds and globalId. Only one of them can exist in the query.", "example": "city=abc/building=xyz" }, { "name": "globalId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorIds and place. Only one of them can exist in the query.", "example": "1" }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 25, "maximum": 100, "minimum": 1 }, "description": "This parameter is incompatible with globalId. Only one of them can exist in the query.", "example": 10 } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MTMCObjects" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tracker/behavior-locations": { "get": { "tags": [ "tracker" ], "summary": "Get behavior locations", "description": "Retrieve behaviors and their corresponding locations over a time range, optionally filtered by behavior identifiers or global object identifier.", "operationId": "controller.tracker.getBehaviorLocations", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-24T00:00:10.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-24T00:01:10.000Z" }, { "name": "behaviorIds", "in": "query", "required": false, "schema": { "type": "array", "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "minItems": 1, "maxItems": 100 }, "description": "This parameter is incompatible with globalId. Only one of them can exist in the query.", "example": [ "Cam1 #-# 11", "Cam2 #-# 12" ] }, { "name": "globalId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with behaviorIds. Only one of them can exist in the query.", "example": "1" } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BehaviorLocations" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/tracker/last-record": { "get": { "tags": [ "tracker" ], "summary": "Get the latest RTLS or AMR record", "description": "Retrieve the latest record for a place from an RTLS or AMR source, optionally filtered by object type.", "operationId": "controller.tracker.getLastRecord", "parameters": [ { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "building=Warehouse" }, { "name": "source", "in": "query", "required": false, "schema": { "type": "string", "default": "RTLS", "enum": [ "RTLS", "AMR" ] } }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "default": "Person", "maxLength": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LastRecord" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/frames": { "get": { "tags": [ "frames" ], "summary": "Get raw frame metadata", "description": "Retrieve raw frame metadata for a sensor, optionally filtered by frame identifier, timestamp, time range, and result limit.", "operationId": "controller.frames.getRawFrames", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "frameId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "4", "description": "This parameter is incompatible with maxResultSize, timestamp or time range params (fromTimestamp and toTimestamp). Only one of them can exist in the query." }, { "name": "timestamp", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "2022-08-25T00:00:00.000Z", "description": "This parameter is used for querying frame at a particular point of time. It is incompatible with maxResultSize, frameId or time range params (fromTimestamp and toTimestamp). Only one of them can exist in the query." }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "This parameter is used for querying frames in a time range. It is incompatible with timestamp or frameId. Only one of them can exist in the query." }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z", "description": "This parameter is used for querying frames in a time range. It is incompatible with timestamp or frameId. Only one of them can exist in the query." }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 25 }, "description": "This parameter is incompatible with timestamp or frameId. Only one of them can exist in the query." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RawFrames" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/frames/enhanced": { "get": { "tags": [ "frames" ], "summary": "Get enhanced frame metadata", "description": "Retrieve enhanced frame metadata for a sensor, optionally filtered by frame identifier, timestamp, time range, and result limit.", "operationId": "controller.frames.getEnhancedFrames", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "frameId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "4", "description": "This parameter is incompatible with maxResultSize, timestamp or time range params (fromTimestamp and toTimestamp). Only one of them can exist in the query." }, { "name": "timestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "This parameter is used for querying enhanced frame at a particular point of time. It is incompatible with maxResultSize, frameId or time range params (fromTimestamp and toTimestamp). Only one of them can exist in the query." }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "This parameter is used for querying enhanced frames in a time range. It is incompatible with timestamp or frameId. Only one of them can exist in the query." }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z", "description": "This parameter is used for querying enhanced frames in a time range. It is incompatible with timestamp or frameId. Only one of them can exist in the query." }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 25 }, "description": "This parameter is incompatible with timestamp or frameId. Only one of them can exist in the query." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EnhancedFrames" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/frames/bev": { "get": { "tags": [ "frames" ], "summary": "Get BEV frame metadata", "description": "Retrieve bird's-eye-view frame metadata for a sensor, optionally filtered by frame identifier, timestamp, time range, and result limit.", "operationId": "controller.frames.getBevFrames", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "frameId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "4", "description": "This parameter is incompatible with maxResultSize, timestamp or time range params (fromTimestamp and toTimestamp). Only one of them can exist in the query." }, { "name": "timestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "This parameter is used for querying enhanced frame at a particular point of time. It is incompatible with maxResultSize, frameId or time range params (fromTimestamp and toTimestamp). Only one of them can exist in the query." }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "This parameter is used for querying enhanced frames in a time range. It is incompatible with timestamp or frameId. Only one of them can exist in the query." }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z", "description": "This parameter is used for querying enhanced frames in a time range. It is incompatible with timestamp or frameId. Only one of them can exist in the query." }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 1000, "default": 25 }, "description": "This parameter is incompatible with timestamp or frameId. Only one of them can exist in the query." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "description": "The maximum number of requests allowed in the current time period.", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Remaining": { "description": "The number of requests remaining in the current time period.", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Reset": { "description": "The time when the rate limit will be reset (Unix timestamp).", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BevFrames" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "description": "The maximum number of requests allowed in the current time period.", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Remaining": { "description": "The number of requests remaining in the current time period.", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Reset": { "description": "The time when the rate limit will be reset (Unix timestamp).", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "description": "The maximum number of requests allowed in the current time period.", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Remaining": { "description": "The number of requests remaining in the current time period.", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Reset": { "description": "The time when the rate limit will be reset (Unix timestamp).", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "description": "The maximum number of requests allowed in the current time period.", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Remaining": { "description": "The number of requests remaining in the current time period.", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Reset": { "description": "The time when the rate limit will be reset (Unix timestamp).", "schema": { "type": "integer", "minimum": 0, "maximum": 1000 } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/frames/alerts": { "get": { "tags": [ "frames" ], "summary": "Get frame-based alerts", "description": "Retrieve frame-based alerts over a time range, optionally filtered by sensor, alert type, and result limit.", "operationId": "controller.frames.getAlerts", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "type", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "proximity", "restricted-area", "confined-area" ] } }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 25 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FrameAlerts" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/frames/high-confidence-objects": { "get": { "tags": [ "frames" ], "summary": "Get high-confidence frame objects", "description": "Retrieve high-confidence object detections from frames for use as reference embeddings in object search, filtered by sensor and time range.", "operationId": "controller.frames.getHighConfidenceObjects", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "objectId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with maxResultSize. Only one of them can exist in the query." }, { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 100, "default": 100 }, "description": "This parameter is incompatible with objectId. Only one of them can exist in the query." }, { "name": "minConfidence", "in": "query", "required": false, "schema": { "type": "number", "format": "double", "minimum": 0, "maximum": 1, "default": 0.80 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FrameObjects" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/frames/proximity-detection": { "get": { "tags": [ "frames" ], "summary": "Get proximity clusters", "description": "Retrieve the latest proximity-detection clusters for a sensor within a specified time range.", "operationId": "controller.frames.getProximityClusters", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProximityDetectionResult" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/frames/pts": { "get": { "tags": [ "frames" ], "summary": "Get frame PTS", "description": "Calculate a frame presentation timestamp in milliseconds from a frame identifier, or estimate it from a timestamp, for video sources streamed with NVStreamer.", "operationId": "controller.frames.getPts", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "timestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "This parameter is incompatible with frameId. Only one of them can exist in the query." }, { "name": "frameId", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "example": 4, "description": "This parameter is incompatible with timestamp. Only one of them can exist in the query." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FramePts" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/behavior": { "get": { "tags": [ "behavior" ], "summary": "Get behaviors", "description": "Retrieve behavior records from the database using optional sensor, place, object, time-range, query-string, and result-limit filters.", "operationId": "controller.behavior.getBehavior", "parameters": [ { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "objectId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with either 'place', 'queryString' or 'maxResultSize'. It also requires 'sensorId', 'fromTimestamp' and 'toTimestamp' in the query." }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "If this parameter is present in the query, then 'objectId' should also be present in the query." }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "If this parameter is present in the query, then 'toTimestamp' should also be present in the query." }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z", "description": "If this parameter is present in the query, then 'fromTimestamp' should also be present in the query." }, { "name": "queryString", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "'queryString' should follow lucene syntax." }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 10000, "default": 25 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Behaviors" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/behavior/pts": { "get": { "tags": [ "behavior" ], "summary": "Get behavior PTS", "description": "Calculate the start and end presentation timestamps of a behavior in milliseconds for video sources streamed with NVStreamer.", "operationId": "controller.behavior.getPts", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "endFrameId", "in": "query", "required": true, "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "example": 400 }, { "name": "behaviorTimeInterval", "in": "query", "required": true, "schema": { "type": "number" }, "example": 2.5 } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BehaviorPts" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/alerts": { "get": { "tags": [ "alerts" ], "summary": "Get alerts", "description": "Retrieve alerts using optional sensor, place, object, time-range, query-string, VLM-verification, and result-limit filters.", "operationId": "controller.alerts.getAlerts", "parameters": [ { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "objectId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with either 'place' or 'queryString'. It also requires 'sensorId', 'fromTimestamp' and 'toTimestamp' in the query." }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "If this parameter is present in the query, then 'toTimestamp' should also be present in the query." }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z", "description": "If this parameter is present in the query, then 'fromTimestamp' should also be present in the query." }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "queryString", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "'queryString' should follow lucene syntax." }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 1000, "default": 25 } }, { "name": "vlmVerified", "in": "query", "required": false, "description": "Set to true to retrieve VLM verified alerts.", "schema": { "type": "boolean", "default": false } }, { "name": "vlmVerdict", "in": "query", "required": false, "description": "Filter alerts by VLM verdict. Can only be provided when vlmVerified is true.", "schema": { "type": "string", "enum": [ "all", "confirmed", "rejected", "verification-failed", "not-confirmed" ], "default": "all" } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Alerts" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/alerts/severe": { "get": { "tags": [ "alerts" ], "summary": "Get severe alerts by place or sensor", "description": "Identify places or sensors with severe alerts over a time range, optionally filtered by alert type and VLM-verification result.", "operationId": "controller.alerts.getSevereAlerts", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "severeAlertTypes", "in": "query", "required": false, "schema": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "default": [ "Abnormal Movement" ] } }, { "name": "vlmVerified", "in": "query", "required": false, "description": "Set to true to retrieve VLM verified alerts.", "schema": { "type": "boolean", "default": false } }, { "name": "vlmVerdict", "in": "query", "required": false, "description": "Filter alerts by VLM verdict. Can only be provided when vlmVerified is true.", "schema": { "type": "string", "enum": [ "all", "confirmed", "rejected", "verification-failed", "not-confirmed" ], "default": "all" } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SevereAlerts" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/incidents": { "get": { "tags": [ "incidents" ], "summary": "Get incidents", "description": "Retrieve incidents using optional sensor, place, object, time-range, category, query-string, VLM-verification, and result-limit filters.", "operationId": "controller.incidents.getIncidents", "parameters": [ { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "objectId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with either 'place' or 'queryString'. It also requires 'sensorId', 'fromTimestamp' and 'toTimestamp' in the query." }, { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z", "description": "If this parameter is present in the query, then 'toTimestamp' should also be present in the query." }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z", "description": "If this parameter is present in the query, then 'fromTimestamp' should also be present in the query." }, { "name": "category", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "queryString", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "'queryString' should follow lucene syntax." }, { "name": "vlmVerified", "in": "query", "required": false, "description": "Set to true to retrieve VLM verified incidents.", "schema": { "type": "boolean", "default": false } }, { "name": "vlmVerdict", "in": "query", "required": false, "description": "Filter incidents by VLM verdict. Can only be provided when vlmVerified is true.", "schema": { "type": "string", "enum": [ "all", "confirmed", "rejected", "verification-failed", "not-confirmed" ], "default": "all" } }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 10000, "default": 25 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Incidents" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/incidents/severe": { "get": { "tags": [ "incidents" ], "summary": "Get severe incidents by place or sensor", "description": "Identify places or sensors with severe incidents, optionally filtered by time range, incident type, and VLM-verification result.", "operationId": "controller.incidents.getSevereIncidents", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "severeIncidentTypes", "in": "query", "required": false, "schema": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "default": [ "Collision Detection" ] } }, { "name": "vlmVerified", "in": "query", "required": false, "description": "Set to true to retrieve VLM verified incidents.", "schema": { "type": "boolean", "default": false } }, { "name": "vlmVerdict", "in": "query", "required": false, "description": "Filter incidents by VLM verdict. Can only be provided when vlmVerified is true.", "schema": { "type": "string", "enum": [ "all", "confirmed", "rejected", "verification-failed", "not-confirmed" ], "default": "all" } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SevereIncidents" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/clustering/behavior": { "get": { "tags": [ "clustering" ], "summary": "Get behavior clusters", "description": "Retrieve behavior-clustering results for a sensor over a time range, with optional cluster, sample-size, and distance filters.", "operationId": "controller.clustering.getClusteringResults", "parameters": [ { "name": "sensorId", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "clusterIndex", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "maxClusterSampleSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 100, "default": 100 } }, { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "minBehaviorDistance", "in": "query", "required": false, "schema": { "type": "number", "format": "double", "minimum": 0, "default": 30 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClusteringResult" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/clustering/add-label": { "post": { "tags": [ "clustering" ], "summary": "Label a behavior cluster", "description": "Assign a label to a behavior cluster using the cluster details in the request body.", "operationId": "controller.clustering.addClusterLabel", "security": [ { "BearerAuth": [] } ], "requestBody": { "description": "Details regarding the cluster and the label", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClusterLabel" } } }, "required": true }, "responses": { "201": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Success" } } } }, "400": { "description": "Bad Request. This response will be sent if request body doesn't follow schema.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-codegen-request-body-name": "body" } }, "/events/tripwire": { "get": { "tags": [ "events" ], "summary": "Get tripwire events", "description": "Retrieve tripwire events over a time range, optionally filtered by sensor, place, tripwire, object type, effective status, and result limit.", "operationId": "controller.events.getTripwireEvents", "parameters": [ { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "tripwireId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter must be used together with sensorId and it is incompatible with place." }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 500, "default": 25 } }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "effective", "in": "query", "required": false, "schema": { "type": "boolean", "default": true }, "description": "This parameter is used to obtain effective/actual set of tripwire events. If effective events are being obtained, then only the latest tripwire event of each object will be retrieved." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TripwireEvents" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/events/amr": { "get": { "tags": [ "events" ], "summary": "Get AMR events", "description": "Retrieve events sent by mission control for a place within a time range, optionally filtered by object type and result limit.", "operationId": "controller.events.getAMREvents", "parameters": [ { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "default": "AMR", "maxLength": 10000 } }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 25, "minimum": 0, "maximum": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AMREvents" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/events/roi": { "get": { "tags": [ "events" ], "summary": "Get ROI events", "description": "Retrieve region-of-interest events over a time range, optionally filtered by sensor, place, ROI, object type, and result limit.", "operationId": "controller.events.getRoiEvents", "parameters": [ { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "roiId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter must be used together with sensorId and it is incompatible with place." }, { "name": "fromTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:00.000Z" }, { "name": "toTimestamp", "in": "query", "required": true, "schema": { "type": "string", "format": "date-time", "maxLength": 24 }, "example": "2022-08-25T00:00:10.000Z" }, { "name": "maxResultSize", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "minimum": 1, "maximum": 500, "default": 25 } }, { "name": "objectType", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RoiEvents" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/upload-file/{docType}": { "post": { "tags": [ "config" ], "summary": "Upload a configuration file", "description": "Upload a configuration file for the document type specified in the path.", "operationId": "controller.config.uploadFile", "security": [ { "BearerAuth": [] } ], "parameters": [ { "name": "docType", "in": "path", "description": "Type of document that is being uploaded.", "required": true, "schema": { "type": "string", "enum": [ "calibration", "road-network", "usd-assets" ] } } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "properties": { "configFiles": { "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "file to upload", "format": "binary" } } }, "required": [ "configFiles" ] } } }, "required": true }, "responses": { "201": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Success" } } } }, "400": { "description": "Bad Request. This response will be sent if there are too many or no files being uploaded. It can also be sent if there is any multer error because of uploaded files in request.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/update/{docType}": { "post": { "tags": [ "config" ], "summary": "Update service configuration", "description": "Submit a behavior analytics configuration update for the document type specified in the path.", "operationId": "controller.config.update", "security": [ { "BearerAuth": [] } ], "parameters": [ { "name": "docType", "in": "path", "description": "Type of config that is being updated.", "required": true, "schema": { "type": "string", "enum": [ "behavior-analytics" ] } } ], "requestBody": { "description": "Updated configurations of a microservice", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConfigUpdate" } } }, "required": true }, "responses": { "201": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConfigUpdateSuccess" } } } }, "400": { "description": "Bad Request. This response will be sent if request body doesn't follow schema.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-codegen-request-body-name": "body" } }, "/config/update/status/{docType}/{referenceId}": { "get": { "tags": [ "config" ], "summary": "Get configuration update status", "description": "Retrieve the processing status of a behavior analytics configuration update by document type and reference identifier.", "operationId": "controller.config.getUpdateStatus", "security": [ { "BearerAuth": [] } ], "parameters": [ { "name": "docType", "in": "path", "description": "Type of config update request.", "required": true, "schema": { "type": "string", "enum": [ "behavior-analytics" ] } }, { "name": "referenceId", "in": "path", "description": "Reference ID returned by the config update request.", "required": true, "schema": { "type": "string", "minLength": 1, "maxLength": 10000 } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConfigUpdateStatus" } } } }, "400": { "description": "Bad Request. This response will be sent if docType or referenceId is invalid.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/calibration/upsert": { "post": { "tags": [ "config" ], "summary": "Upsert sensor calibration", "description": "Insert or update calibration data for one or more sensors. To change file-level attributes such as version, calibration type, or OSM URL, upload the complete calibration file instead.", "operationId": "controller.config.upsertCalibration", "security": [ { "BearerAuth": [] } ], "requestBody": { "description": "Calibration of sensor(s)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Calibration" } } }, "required": true }, "responses": { "201": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Success" } } } }, "400": { "description": "Bad Request. This response will be sent if request body doesn't follow schema.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-codegen-request-body-name": "body" } }, "/config/calibration/delete-sensor": { "post": { "tags": [ "config" ], "summary": "Delete sensor calibration", "description": "Delete calibration data for the sensor identifiers provided in the request body.", "operationId": "controller.config.deleteSensorCalibration", "security": [ { "BearerAuth": [] } ], "requestBody": { "description": "List of sensorIds", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": false, "properties": { "sensorIds": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam1" } } }, "required": [ "sensorIds" ] } } } }, "responses": { "201": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CalibrationDeleteSuccess" } } } }, "400": { "description": "Bad Request. This response will be sent if request body doesn't follow schema.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-codegen-request-body-name": "body" } }, "/config/calibration": { "get": { "tags": [ "config" ], "summary": "Get calibration configuration", "description": "Retrieve calibration configuration from the database, optionally for a specific sensor or as an empty result when no configuration is found.", "operationId": "controller.config.getCalibrationConfig", "parameters": [ { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, { "name": "emptyIfNotFound", "in": "query", "required": false, "schema": { "type": "boolean", "default": true }, "description": "If set to true, empty calibration will be returned when calibration config is not found." } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Calibration" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/calibration/last-modified-timestamp": { "get": { "tags": [ "config" ], "summary": "Get calibration modification timestamp", "description": "Retrieve the timestamp of the most recent calibration-data modification.", "operationId": "controller.config.getCalibrationLastModifiedTimestamp", "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CalibrationLastModifiedTimestamp" } } } }, "404": { "description": "No calibration data found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "400": { "description": "Bad Request", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/road-network": { "get": { "tags": [ "config" ], "summary": "Get road-network configuration", "description": "Retrieve the road-network configuration stored in the database.", "operationId": "controller.config.getRoadNetworkConfig", "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RoadNetwork" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/usd-assets": { "get": { "tags": [ "config" ], "summary": "Get USD asset configuration", "description": "Retrieve the USD asset configuration stored in the database.", "operationId": "controller.config.getUsdAssetsConfig", "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UsdAssets" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/calibration/images": { "post": { "tags": [ "config" ], "summary": "Upload calibration images", "description": "Upload one or more calibration images together with a single image-metadata JSON file.", "operationId": "controller.config.uploadCalibrationImages", "security": [ { "BearerAuth": [] } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "properties": { "images": { "type": "array", "minItems": 1, "maxItems": 20, "items": { "type": "string", "description": "image to upload", "format": "binary" } }, "imageMetadata": { "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "imageMetadata file", "format": "binary" } } }, "required": [ "images", "imageMetadata" ] } } }, "required": true }, "responses": { "201": { "description": "Successful or Partially Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InsertImagesResponse" } } } }, "400": { "description": "Bad Request. This response will be sent if there are too many or no files being uploaded. It can also be sent if there is any multer error because of uploaded files in request.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/calibration/image": { "get": { "tags": [ "config" ], "summary": "Get a calibration image", "description": "Retrieve a calibration image by sensor or place and view in PNG, JPEG, or SVG format.", "operationId": "controller.config.getCalibrationImage", "parameters": [ { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with place. Only one of them can exist in the query." }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "This parameter is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "view", "in": "query", "required": true, "schema": { "type": "string", "enum": [ "camera-view", "warped-camera-view", "plan-view" ] } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "image/png": { "schema": { "type": "string", "format": "binary" } }, "image/jpeg": { "schema": { "type": "string", "format": "binary" } }, "image/svg+xml": { "schema": { "type": "string", "format": "binary" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/calibration/image-metadata": { "get": { "tags": [ "config" ], "summary": "Get calibration image metadata", "description": "Retrieve calibration image metadata, optionally filtered by sensor, place, or view.", "operationId": "controller.config.getCalibrationImageMetadata", "parameters": [ { "name": "sensorId", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "sensorId is an optional parameter. It is incompatible with place. Only one of them can exist in the query." }, { "name": "place", "in": "query", "required": false, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "description": "place is an optional parameter. It is incompatible with sensorId. Only one of them can exist in the query." }, { "name": "view", "in": "query", "required": false, "schema": { "type": "string", "enum": [ "camera-view", "warped-camera-view", "plan-view" ] } } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CalibrationImageMetadata" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/config/calibration/delete-images": { "post": { "tags": [ "config" ], "summary": "Delete calibration images", "description": "Delete the calibration images identified in the request body and return the deletion result.", "operationId": "controller.config.deleteCalibrationImages", "security": [ { "BearerAuth": [] } ], "requestBody": { "description": "Details of calibration images to be deleted.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CalibrationImagesToBeDeleted" } } }, "required": true }, "responses": { "201": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CalibrationImageDeletionResponse" } } } }, "400": { "description": "Bad Request. This response will be sent if request body doesn't follow schema.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } }, "x-codegen-request-body-name": "body" } }, "/sensor/lookup": { "get": { "tags": [ "sensor" ], "summary": "Find sensors covering a floor-plan coordinate", "description": "Return the sensors whose field of view covers a specified floor-plan coordinate at a place.", "operationId": "controller.sensor.getSensorLookup", "parameters": [ { "name": "place", "in": "query", "required": true, "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": "building=Warehouse" }, { "name": "x", "in": "query", "required": true, "schema": { "type": "integer", "format": "int64", "minimum": -999999, "maximum": 999999, "example": 1 }, "description": "x co-ordinate" }, { "name": "y", "in": "query", "required": true, "schema": { "type": "integer", "format": "int64", "minimum": -999999, "maximum": 999999, "example": 2 }, "description": "y co-ordinate" }, { "name": "z", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 0, "minimum": -999999, "maximum": 999999, "example": 4 }, "description": "z co-ordinate" } ], "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SensorLookup" } } } }, "400": { "description": "Bad Request. This response will be sent if any of the required params are not present or if extra params are passed. It will also be sent if parameter dependencies (mentioned in parameter descriptions) are not satisfied.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Resource Not Found", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "422": { "description": "Unprocessable Entity", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/livez": { "get": { "tags": [ "livez" ], "summary": "Check service health", "description": "Report whether the Video Analytics API server is running.", "operationId": "controller.livez.isAlive", "responses": { "200": { "description": "Successful Operation.", "headers": { "Access-Control-Allow-Origin": { "$ref": "#/components/headers/Access-Control-Allow-Origin" }, "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IsAlive" } } } } } } } }, "components": { "securitySchemes": { "BearerAuth": { "type": "http", "scheme": "bearer" } }, "headers": { "Access-Control-Allow-Origin": { "description": "CORS header to allow cross-origin requests.", "schema": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, "X-RateLimit-Limit": { "description": "The maximum number of requests allowed in the current time period.", "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Remaining": { "description": "The number of requests remaining in the current time period.", "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 1000 } }, "X-RateLimit-Reset": { "description": "The time when the rate limit will be reset (Unix timestamp).", "schema": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 1000 } } }, "schemas": { "AverageSpeed": { "type": "object", "additionalProperties": false, "properties": { "metrics": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "direction": { "type": "string", "enum": [ "N", "S", "W", "E" ] }, "averageSpeed": { "type": "string", "example": "10", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, "required": [ "direction", "averageSpeed" ] } } }, "required": [ "metrics" ] }, "AverageSpeedWithTravelTime": { "type": "object", "additionalProperties": false, "properties": { "metrics": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "direction": { "type": "string", "enum": [ "N", "S", "W", "E" ] }, "averageSpeed": { "type": "string", "example": "10", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "travelTime": { "type": "string", "example": "12", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, "required": [ "direction", "averageSpeed", "travelTime" ] } } }, "required": [ "metrics" ] }, "Flowrate": { "type": "object", "additionalProperties": false, "properties": { "metrics": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "direction": { "type": "string", "enum": [ "N", "S", "W", "E" ] }, "flowrate": { "type": "string", "example": "10", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, "required": [ "direction", "flowrate" ] } } }, "required": [ "metrics" ] }, "AverageSpeedWithFlowrate": { "type": "object", "additionalProperties": false, "properties": { "metrics": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "direction": { "type": "string", "enum": [ "N", "S", "W", "E" ] }, "averageSpeed": { "type": "string", "example": "10", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "flowrate": { "type": "string", "example": "12", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, "required": [ "direction", "averageSpeed", "flowrate" ] } } }, "required": [ "metrics" ] }, "BehaviorLocations": { "type": "object", "additionalProperties": false, "properties": { "behaviors": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "Id": { "type": "string", "example": "logstash generated Id", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "id": { "type": "string", "example": "Cam1 #-# 11", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "locations": { "$ref": "#/components/schemas/Locations" }, "smoothLocations": { "$ref": "#/components/schemas/Locations" }, "length": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 100000 }, "speedOverTime": { "type": "array", "maxItems": 10000, "items": { "type": "number", "format": "double", "minimum": -100000, "maximum": 100000 }, "example": [ 2.1, 3.2 ] }, "speed": { "type": "number", "format": "double", "minimum": -100000, "maximum": 100000 }, "timeInterval": { "type": "number", "format": "float", "example": 30, "minimum": -100000, "maximum": 100000 }, "distance": { "type": "number", "format": "double", "minimum": -100000, "maximum": 100000 }, "bearing": { "type": "number", "format": "double", "minimum": -100000, "maximum": 100000 }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:30.000Z" } }, "required": [ "id", "locations", "smoothLocations", "speedOverTime", "speed", "timeInterval", "length", "distance", "bearing", "timestamp", "end" ] } } }, "required": [ "behaviors" ] }, "Behavior": { "type": "object", "additionalProperties": false, "properties": { "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "Id": { "type": "string", "example": "logstash generated Id", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "id": { "type": "string", "example": "Cam1 #-# 11", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "timeInterval": { "type": "number", "format": "float", "example": 30, "minimum": 0, "maximum": 10000 }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:30.000Z" }, "locations": { "$ref": "#/components/schemas/Locations" }, "smoothLocations": { "$ref": "#/components/schemas/Locations" }, "length": { "type": "integer", "format": "int64", "minimum": -10000, "maximum": 10000 }, "speedOverTime": { "type": "array", "maxItems": 10000, "items": { "type": "number", "format": "double", "minimum": -100000, "maximum": 100000 }, "example": [ 2.1, 3.2 ] }, "sensor": { "$ref": "#/components/schemas/Sensor" }, "place": { "$ref": "#/components/schemas/Place" }, "event": { "$ref": "#/components/schemas/Event" }, "object": { "$ref": "#/components/schemas/Object" }, "edges": { "type": "array", "minItems": 0, "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" } }, "analyticsModule": { "$ref": "#/components/schemas/AnalyticsModule" }, "direction": { "type": "string", "enum": [ "N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "Right", "Left", "Up", "Down" ] }, "speed": { "type": "number", "format": "double" }, "distance": { "type": "number", "format": "double" }, "bearing": { "type": "number", "format": "double" }, "videoPath": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "path_to_video" } }, "required": [ "timestamp", "Id", "id", "timeInterval", "end", "length", "speedOverTime", "sensor", "place", "object", "direction", "speed", "distance", "bearing", "videoPath" ] }, "AnalyticsModule": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "description": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "description" }, "version": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "example1" }, "source": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "source1" }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } } }, "Locations": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "enum": [ "linestring" ], "description": "Type of Geoshape" }, "coordinates": { "type": "array", "maxItems": 100000, "items": { "type": "array", "minItems": 2, "maxItems": 100000, "items": { "type": "number", "format": "double", "example": 1 } } } }, "required": [ "type", "coordinates" ] }, "Place": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "city=abc/building=def/Warehouse=xyz" }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "name" ] }, "Event": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "ENTRY", "description": "Allowed values for tripwire events: 'IN', 'OUT'. Allowed values for roi events: 'ENTRY', 'EXIT'." }, "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "id", "type" ] }, "Object": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "location": { "type": "object", "additionalProperties": false, "properties": { "lon": { "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 7.5 }, "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 2.6 }, "alt": { "type": "number", "format": "double", "minimum": 0, "maximum": 100000, "example": 9.47 } }, "required": [ "lon", "lat", "alt" ] }, "bbox": { "$ref": "#/components/schemas/Bbox" }, "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "133" }, "speed": { "type": "number", "format": "double", "minimum": 0, "maximum": 100000, "example": 50 }, "coordinate": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 50 }, "y": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 50 }, "z": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 50 } }, "required": [ "x", "y", "z" ] }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "type", "location", "bbox", "id", "speed", "coordinate" ] }, "Sensor": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam-1" }, "description": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "description of sensor" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "sensor" }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "value1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "id", "description", "type" ] }, "Bbox": { "type": "object", "additionalProperties": false, "properties": { "topY": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 0.5 }, "rightX": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 1.7 }, "bottomY": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 0.8 }, "leftX": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 0.6 }, "embeddings": { "type": "array", "maxItems": 10000, "items": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "vector": { "type": "array", "maxItems": 100000, "items": { "type": "number", "format": "float", "example": 0.1 } } }, "required": [ "vector" ] } }, "confidence": { "type": "number", "format": "float", "example": 0.95 }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "value1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "topY", "rightX", "bottomY", "leftX", "embeddings", "confidence" ] }, "Bbox3d": { "type": "object", "additionalProperties": false, "properties": { "embeddings": { "type": "array", "maxItems": 10000, "items": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "vector": { "type": "array", "maxItems": 100000, "items": { "type": "number", "format": "float" } } }, "required": [ "vector" ] } }, "confidence": { "type": "number", "format": "float", "example": 0.95 }, "coordinates": { "type": "array", "oneOf": [ { "minItems": 9, "maxItems": 9 }, { "minItems": 12, "maxItems": 12 } ], "example": [1,2,3,4,5,6,7,8,9], "items": { "type": "number", "format": "float" } }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "value1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "embeddings", "confidence", "coordinates" ] }, "LastRecord": { "type": "object", "additionalProperties": false, "properties": { "lastRecord": { "type": "object", "additionalProperties": false, "nullable": true, "properties": { "place": { "type": "string", "example": "building=Warehouse", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "timestamp": { "type": "string", "format": "date-time", "example": "2024-02-22T11:45:00.000Z", "maxLength": 24 }, "objectCounts": { "type": "array", "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "count": { "type": "integer", "format": "int64", "example": 2, "minimum": 0, "maximum": 99999999 } }, "required": [ "type", "count" ] }, "example": [ { "type": "Person", "count": 2 } ] }, "locationsOfObjects": { "type": "array", "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "example": "1", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "type": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "locations": { "type": "array", "maxItems": 10000, "items": { "$ref": "#/components/schemas/Location" } } }, "required": [ "id", "locations", "type" ] }, "example": [ { "id": "1", "type": "Person", "locations": [ [ -21.315656, -8.9215497 ] ] }, { "id": "2", "type": "Person", "locations": [ [ -9.55607, 0.984224 ] ] } ] } }, "required": [ "place", "timestamp", "objectCounts", "locationsOfObjects" ] } }, "required": [ "lastRecord" ] }, "FrameObjects": { "type": "object", "additionalProperties": false, "properties": { "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "frameId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "10" }, "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam-1" }, "objectId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24 }, "bbox": { "$ref": "#/components/schemas/Bbox" }, "confidence": { "type": "number", "format": "double", "example": 0.95 }, "embedding": { "type": "array", "maxItems": 100000, "nullable": true, "items": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000 } }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "frameId", "sensorId", "objectId", "timestamp", "bbox", "confidence", "embedding" ] } } }, "required": [ "objects" ] }, "FrameAlertBase": { "type": "object", "additionalProperties": false, "properties": { "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam-1" }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24 }, "objects": { "type": "array", "minItems": 0, "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "155" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" } }, "required": [ "id", "type" ], "anyOf": [ { "properties": { "bbox": { "$ref": "#/components/schemas/Bbox" } }, "required": [ "bbox" ] }, { "properties": { "bbox3d": { "type": "object", "additionalProperties": false, "properties": { "coordinates": { "type": "array", "oneOf": [ { "minItems": 9, "maxItems": 9 }, { "minItems": 12, "maxItems": 12 } ], "example": [1,2,3,4,5,6,7,8,9], "items": { "type": "number", "format": "float" } } }, "required": [ "coordinates" ] } }, "required": [ "bbox3d" ] } ] } } }, "required": [ "sensorId", "timestamp", "objects" ] }, "FrameAlert": { "type": "object", "additionalProperties": false, "allOf": [ { "$ref": "#/components/schemas/FrameAlertBase" }, { "type": "object", "additionalProperties": false, "anyOf": [ { "properties": { "confinedArea": { "type": "object", "additionalProperties": false, "properties": { "objectIds": { "type": "array", "minItems": 0, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "10" } } }, "required": [ "objectIds" ] } }, "required": [ "confinedArea" ] }, { "properties": { "proximity": { "type": "object", "additionalProperties": false, "properties": { "clusters": { "$ref": "#/components/schemas/ProximityClusters" }, "proximityDetections": { "type": "integer", "format": "int64", "minimum": -10000, "maximum": 10000, "example": 1 }, "threshold": { "type": "number", "format": "double", "example": 2 } }, "required": [ "clusters", "proximityDetections", "threshold" ] } }, "required": [ "proximity" ] }, { "properties": { "restrictedArea": { "type": "array", "minItems": 0, "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "roiId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "objectIds": { "type": "array", "minItems": 0, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "12" } } }, "required": [ "roiId", "objectIds" ] } } }, "required": [ "restrictedArea" ] } ] } ] }, "FrameAlerts": { "type": "object", "additionalProperties": false, "properties": { "alerts": { "type": "array", "minItems": 0, "maxItems": 1000, "items": { "$ref": "#/components/schemas/FrameAlert" } } }, "required": [ "alerts" ] }, "Alerts": { "type": "object", "additionalProperties": false, "properties": { "alerts": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/components/schemas/Behavior" } } }, "required": [ "alerts" ] }, "Incident": { "type": "object", "additionalProperties": false, "properties": { "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "Id": { "type": "string", "example": "logstash generated Id", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:30.000Z" }, "category": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "category1" }, "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "sensor1" }, "place": { "$ref": "#/components/schemas/Place" }, "objectIds": { "type": "array", "maxItems": 10000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" } }, "frameIds": { "type": "array", "maxItems": 10000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "10" }, "example": [ "1", "2" ] }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } }, "analyticsModule": { "$ref": "#/components/schemas/AnalyticsModule" } }, "required": [ "timestamp", "Id", "end", "place" ] }, "Incidents": { "type": "object", "additionalProperties": false, "properties": { "incidents": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/components/schemas/Incident" } } }, "required": [ "incidents" ] }, "SevereAlerts": { "type": "object", "additionalProperties": false, "properties": { "severeAlerts": { "type": "object", "nullable": true, "additionalProperties": false, "oneOf": [ { "properties": { "places": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "city=Santa Clara/building=NVIDIA Voyager/room=Visitor Lobby" } } }, "required": [ "places" ] }, { "properties": { "sensors": { "type": "array", "maxItems": 100000, "items": { "type": "string", "example": "cam1", "pattern": "^.{0,10000}$", "maxLength": 10000 } } }, "required": [ "sensors" ] }, { "properties": { "places": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "city=Santa Clara/building=NVIDIA Voyager/room=Visitor Lobby" } }, "sensors": { "type": "array", "maxItems": 100000, "items": { "type": "string", "example": "cam1", "pattern": "^.{0,10000}$", "maxLength": 10000 } } }, "required": [ "places", "sensors" ] } ] } }, "required": [ "severeAlerts" ] }, "SevereIncidents": { "type": "object", "additionalProperties": false, "properties": { "severeIncidents": { "type": "object", "nullable": true, "additionalProperties": false, "oneOf": [ { "properties": { "places": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "city=Santa Clara/building=NVIDIA Voyager/room=Visitor Lobby" } } }, "required": [ "places" ] }, { "properties": { "sensors": { "type": "array", "maxItems": 100000, "items": { "type": "string", "example": "cam1", "pattern": "^.{0,10000}$", "maxLength": 10000 } } }, "required": [ "sensors" ] }, { "properties": { "places": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "city=Santa Clara/building=NVIDIA Voyager/room=Visitor Lobby" } }, "sensors": { "type": "array", "maxItems": 100000, "items": { "type": "string", "example": "cam1", "pattern": "^.{0,10000}$", "maxLength": 10000 } } }, "required": [ "places", "sensors" ] } ] } }, "required": [ "severeIncidents" ] }, "Behaviors": { "type": "object", "additionalProperties": false, "properties": { "behaviors": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/components/schemas/Behavior" } } }, "required": [ "behaviors" ] }, "Location": { "type": "array", "minItems": 2, "maxItems": 2, "example": [ 10, 11 ], "items": { "type": "number", "format": "double" } }, "MTMCBehavior": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "example": "Cam1 #-# 11", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "sensorId": { "type": "string", "example": "Cam1", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "objectId": { "type": "string", "example": "11", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "objectType": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:30.000Z" }, "startFrame": { "type": "string", "example": "10", "pattern": "^.{0,100000}$", "maxLength": 100000 }, "endFrame": { "type": "string", "example": "910", "pattern": "^.{0,100000}$", "maxLength": 100000 }, "place": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "locations": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/components/schemas/Location" } } }, "required": [ "sensorId", "objectId", "timestamp", "end" ] }, "MTMCObject": { "type": "object", "additionalProperties": false, "properties": { "batchId": { "type": "string", "example": "batch-1", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "globalId": { "type": "string", "example": "1", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:30.000Z" }, "objectType": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "matched": { "type": "array", "maxItems": 10000, "items": { "$ref": "#/components/schemas/MTMCBehavior" } } }, "required": [ "batchId", "globalId", "timestamp", "end", "objectType", "matched" ] }, "MTMCObjects": { "type": "object", "additionalProperties": false, "properties": { "uniqueObjects": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/components/schemas/MTMCObject" }, "description": "array of MTMCObject" } }, "example": { "uniqueObjects": [ { "batchId": "batch-1", "globalId": "1", "timestamp": "2022-08-25T00:00:00.000Z", "end": "2022-08-25T00:00:55.000Z", "objectType": "Person", "matched": [ { "id": "Cam1 #-# 11", "sensorId": "Cam1", "objectId": "11", "objectType": "Person", "timestamp": "2022-08-25T00:00:00.000Z", "end": "2022-08-25T00:00:30.000Z", "startFrame": "10", "endFrame": "910", "place": "city=Santa Clara/building=K", "locations": [ [ 10, 11 ] ] }, { "id": "Cam2 #-# 12", "sensorId": "Cam2", "objectId": "12", "objectType": "Person", "timestamp": "2022-08-25T00:00:40.000Z", "end": "2022-08-25T00:00:55.000Z", "startFrame": "210", "endFrame": "1010", "place": "city=Santa Clara/building=K", "locations": [ [ 10, 11 ] ] } ] } ] }, "required": [ "uniqueObjects" ] }, "UniqueObjectCount": { "type": "object", "additionalProperties": false, "properties": { "uniqueObjectCount": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 } }, "required": [ "uniqueObjectCount" ] }, "UniqueObjectCountWithLocations": { "type": "object", "additionalProperties": false, "properties": { "place": { "type": "string", "example": "city=abc/building=def/Warehouse=xyz", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "timestamp": { "type": "string", "format": "date-time", "example": "2022-08-25T00:00:00.000Z", "maxLength": 24 }, "objectCounts": { "type": "array", "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "count": { "type": "integer", "format": "int64", "example": 12, "minimum": 0, "maximum": 99999999 } }, "required": [ "type", "count" ] }, "example": [ { "type": "Person", "count": 1 }, { "type": "AMR", "count": 1 } ] }, "locationsOfObjects": { "type": "array", "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "example": "2", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "locations": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "array", "minItems": 2, "maxItems": 3, "items": { "type": "number", "format": "double" } } }, "type": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, "required": [ "id", "locations", "type" ] }, "example": [ { "id": "1", "locations": [ [ 1, 1 ] ], "type": "Person" }, { "id": "Transporter 1", "locations": [ [ 5, 10 ] ], "type": "AMR" } ] }, "events": { "type": "array", "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "objectId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "objectType": { "type": "string", "example": "AMR", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "currentRoute": { "type": "array", "maxItems": 10000, "items": { "$ref": "#/components/schemas/Location" } }, "newRoute": { "type": "array", "maxItems": 10000, "items": { "$ref": "#/components/schemas/Location" } }, "blockages": { "type": "array", "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "center": { "description": "center is represented using WKT format of Point", "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "POINT(2.5 3.2)" }, "radius": { "type": "number", "format": "double", "example": 5 } }, "required": [ "center", "radius" ] } } }, "required": [ "objectId", "objectType", "currentRoute", "newRoute", "blockages" ] } } }, "required": [ "place", "timestamp", "objectCounts", "locationsOfObjects" ] }, "Error": { "type": "object", "additionalProperties": false, "properties": { "error": { "type": "string", "pattern": "^.{0,100000}$", "maxLength": 100000, "example": "Error" } }, "required": [ "error" ] }, "RoadNetwork": { "type": "object", "additionalProperties": false, "properties": { "city": { "type": "string", "example": "Santa-Clara", "pattern": "^.{1,10000}$", "maxLength": 10000 }, "docType": { "type": "string", "enum": [ "roadNetwork" ] }, "intersections": { "type": "array", "minItems": 1, "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "example": "i1", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "segments": { "type": "array", "minItems": 0, "maxItems": 100000, "items": { "$ref": "#/components/schemas/RoadNetworkSegment" } } }, "required": [ "name", "segments" ] } } }, "required": [ "city", "docType", "intersections" ] }, "RoadNetworkSegment": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "example": "id1", "pattern": "^.{1,10000}$", "maxLength": 10000 }, "direction": { "type": "string", "enum": [ "N", "S", "W", "E" ] }, "start": { "type": "object", "properties": { "lat": { "type": "number", "format": "double" }, "lng": { "type": "number", "format": "double" } }, "additionalProperties": false, "required": [ "lat", "lng" ] }, "end": { "type": "object", "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90 }, "lng": { "type": "number", "format": "double", "minimum": -180, "maximum": 180 } }, "additionalProperties": false, "required": [ "lat", "lng" ] }, "points": { "type": "array", "minItems": 2, "maxItems": 10000, "items": { "type": "object", "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 10.5 }, "lng": { "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 50.4 }, "alt": { "type": "number", "format": "double", "minimum": 0, "maximum": 100000, "example": 25.4 } }, "additionalProperties": false, "required": [ "lat", "lng", "alt" ] } } }, "required": [ "id", "direction", "start", "end", "points" ] }, "UsdAssets": { "type": "object", "additionalProperties": false, "properties": { "sceneUrl": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "s3://bucket/path/to/usd-scene-file.usd" }, "assets": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "usdPath": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "/World/Pallets/Zone3/Cardbox_B2_Pallet_B1_03/Pallet_B1_physics/Geometry/Pallet_B1" }, "primType": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "Mesh" }, "properties": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "minItems": 1, "maxItems": 10000, "properties": { "name": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000 }, "value": { "type": "string", "pattern": "^.{0,999999999}$", "minLength": 0, "maxLength": 999999999 } }, "required": [ "name", "value" ] }, "example": [ { "name": "class", "value": "pallet" }, { "name": "type", "value": "pallet_b1" } ] }, "bbox": { "type": "object", "additionalProperties": false, "properties": { "dimension": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": 0, "maximum": 999999, "example": 0.2 }, "y": { "type": "number", "format": "double", "minimum": 0, "maximum": 999999, "example": 0.8 }, "z": { "type": "number", "format": "double", "minimum": 0, "maximum": 999999, "example": 1.4 } }, "required": [ "x", "y", "z" ] } }, "required": [ "dimension" ] } }, "required": [ "usdPath", "primType", "properties", "bbox" ] } } } }, "ConfigUpdate": { "$ref": "#/components/schemas/BehaviorAnalyticsConfig" }, "BehaviorAnalyticsConfig": { "type": "object", "additionalProperties": false, "properties": { "sensors": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 10000 }, "configs": { "type": "array", "maxItems": 10000, "items": { "$ref": "#/components/schemas/BehaviorAnalyticsConfigKeyValuePair" } } }, "required": [ "id" ] } }, "app": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "$ref": "#/components/schemas/BehaviorAnalyticsConfigKeyValuePair" } } }, "anyOf": [ { "required": [ "app" ] }, { "required": [ "sensors" ] }, { "required": [ "sensors", "app" ] } ], "example": { "sensors": [ { "id": "default", "configs": [ { "name": "proximityDetectionCenterClasses", "value": "[\"Forklift\"]" } ] } ] } }, "BehaviorAnalyticsConfigKeyValuePair": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 10000 }, "value": { "type": "string", "minLength": 0, "maxLength": 999999999 } }, "required": [ "name", "value" ] }, "Calibration": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "version": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "v1" }, "osmURL": { "type": "string", "pattern": "^.{0,10000}$", "minLength": 0, "maxLength": 10000, "example": "URL" }, "calibrationType": { "type": "string", "enum": [ "geo", "cartesian", "image" ], "example": "cartesian" }, "sensors": { "type": "array", "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "camera" }, "id": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "cam1" }, "origin": { "type": "object", "additionalProperties": false, "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 0 }, "lng": { "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 0 } }, "required": [ "lat", "lng" ] }, "geoLocation": { "type": "object", "additionalProperties": false, "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 0 }, "lng": { "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 0 } }, "required": [ "lat", "lng" ] }, "coordinates": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 }, "z": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] }, "translationToGlobalCoordinates": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 }, "z": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] }, "scaleFactor": { "type": "number", "format": "double", "example": 1 }, "attributes": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "source" }, "value": { "type": "string", "pattern": "^.{0,999999999}$", "minLength": 0, "maxLength": 999999999, "example": "vst" } }, "required": [ "name", "value" ] } }, "group": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "bev-sensor-1" }, "type": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "bev" }, "origin": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1.0 } }, "dimensions": { "type": "array", "minItems": 4, "maxItems": 4, "items": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 } }, "alias": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "area-1" } }, "required": [ "name", "type", "origin", "dimensions" ] }, "region": { "type": "object", "additionalProperties": false, "properties": { "placeLevel": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "building" }, "origin": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 } }, "dimensions": { "type": "object", "additionalProperties": false, "properties": { "length": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 }, "width": { "type": "number", "format": "double", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "length", "width" ] } }, "required": [ "placeLevel", "origin", "dimensions" ] }, "place": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "building" }, "value": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "warehouse" } }, "required": [ "name", "value" ] } }, "imageCoordinates": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] } }, "globalCoordinates": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "z": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] } }, "intrinsicMatrix": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 2 } } }, "extrinsicMatrix": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": "array", "minItems": 4, "maxItems": 4, "items": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 3 } } }, "cameraMatrix": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": "array", "minItems": 4, "maxItems": 4, "items": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 4 } } }, "homography": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 5 } } }, "rois": { "type": "array", "minItems": 0, "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "buffer_zone_1" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "minLength": 0, "maxLength": 10000, "example": "buffer_zone" }, "roiCoordinates": { "type": "array", "minItems": 3, "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "z": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 0 } }, "required": [ "x", "y" ] } }, "restrictedObjectTypes": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "Person" } }, "confinedObjectTypes": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "Fourier_GR1_T2_Humanoid" } } }, "required": [ "id", "roiCoordinates" ] } }, "tripwires": { "type": "array", "minItems": 0, "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "tripwire-id-1" }, "wire": { "type": "object", "additionalProperties": false, "properties": { "p1": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] }, "p2": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] } }, "required": [ "p1", "p2" ] }, "direction": { "type": "object", "additionalProperties": false, "properties": { "p1": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] }, "p2": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] } }, "required": [ "p1", "p2" ] } }, "required": [ "id", "wire", "direction" ] } } }, "required": [ "type", "id", "origin", "geoLocation", "coordinates", "scaleFactor", "attributes", "place", "imageCoordinates", "globalCoordinates" ] } }, "rois": { "type": "array", "minItems": 0, "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 10000, "example": "buffer_zone_1" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "minLength": 0, "maxLength": 10000, "example": "buffer_zone" }, "roiCoordinates": { "type": "array", "minItems": 3, "maxItems": 999999, "items": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "z": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 0 } }, "required": [ "x", "y" ] } }, "sensors": { "type": "array", "minItems": 1, "maxItems": 999999, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "cam1" } }, "groups": { "type": "array", "minItems": 1, "maxItems": 9999999, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "bev-sensor-1" } }, "restrictedObjectTypes": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "Person" } }, "confinedObjectTypes": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "Fourier_GR1_T2_Humanoid" } } }, "required": [ "id", "roiCoordinates", "sensors", "groups" ] } }, "tripwires": { "type": "array", "minItems": 0, "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "tripwire-id-1" }, "wire": { "type": "object", "additionalProperties": false, "properties": { "p1": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] }, "p2": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] } }, "required": [ "p1", "p2" ] }, "direction": { "type": "object", "additionalProperties": false, "properties": { "p1": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] }, "p2": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 }, "y": { "type": "number", "minimum": -999999, "maximum": 999999, "example": 1 } }, "required": [ "x", "y" ] } }, "required": [ "p1", "p2" ] }, "sensors": { "type": "array", "minItems": 1, "maxItems": 9999999, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "cam1" } }, "groups": { "type": "array", "minItems": 1, "maxItems": 9999999, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "bev-sensor-1" } } }, "required": [ "id", "wire", "direction", "sensors", "groups" ] } }, "corridors": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "city=abc/corridor=xyz" }, "sensors": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "cam1" } }, "directions": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{1,10000}$", "minLength": 1, "maxLength": 10000, "example": "N" } }, "length": { "type": "number", "format": "double", "minimum": 0, "maximum": 99999999, "example": 5 } }, "required": [ "name", "sensors", "directions", "length" ] } } }, "required": [ "version", "osmURL", "calibrationType", "sensors" ] }, "CalibrationDeleteSuccess": { "type": "object", "additionalProperties": false, "properties": { "success": { "type": "object", "additionalProperties": false, "properties": { "partial": { "type": "boolean", "example": false }, "complete": { "type": "boolean", "example": true } }, "required": [ "partial", "complete" ] }, "invalidSensors": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam1" }, "nullable": true }, "deletedCalibration": { "$ref": "#/components/schemas/Calibration" } }, "required": [ "success", "invalidSensors", "deletedCalibration" ] }, "IsAlive": { "type": "object", "additionalProperties": false, "properties": { "isAlive": { "type": "boolean" } }, "required": [ "isAlive" ] }, "InsertImagesResponse": { "type": "object", "additionalProperties": false, "properties": { "success": { "type": "object", "additionalProperties": false, "properties": { "partial": { "type": "boolean" }, "complete": { "type": "boolean" } }, "required": [ "partial", "complete" ] }, "invalidImages": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,100000}$", "maxLength": 100000, "example": "image1" }, "nullable": true } }, "required": [ "success", "invalidImages" ] }, "MetadataOfACalibrationImage": { "type": "object", "additionalProperties": false, "properties": { "view": { "type": "string", "enum": [ "camera-view", "warped-camera-view", "plan-view" ] }, "place": { "type": "string", "pattern": "^.{1,10000}$", "maxLength": 10000, "example": "1" }, "sensorId": { "type": "string", "pattern": "^.{1,10000}$", "maxLength": 10000, "example": "1" } }, "required": [ "view" ], "oneOf": [ { "required": [ "place" ] }, { "required": [ "sensorId" ] } ] }, "CalibrationImageMetadata": { "type": "object", "additionalProperties": false, "properties": { "imageMetadata": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/components/schemas/MetadataOfACalibrationImage" } } }, "required": [ "imageMetadata" ], "example": { "imageMetadata": [ { "view": "plan-view", "place": "room=warehouse/region=region-1" } ] } }, "CalibrationImagesToBeDeleted": { "type": "object", "additionalProperties": false, "properties": { "calibrationImages": { "type": "array", "minItems": 1, "maxItems": 100000, "items": { "$ref": "#/components/schemas/MetadataOfACalibrationImage" } } }, "required": [ "calibrationImages" ], "example": { "calibrationImages": [ { "place": "room=warehouse/region=region-1", "view": "plan-view" } ] } }, "CalibrationImageDeletionResponse": { "type": "object", "additionalProperties": false, "properties": { "success": { "type": "object", "additionalProperties": false, "properties": { "partial": { "type": "boolean" }, "complete": { "type": "boolean" } }, "required": [ "partial", "complete" ] }, "invalidInput": { "type": "array", "minItems": 1, "maxItems": 100000, "items": { "$ref": "#/components/schemas/MetadataOfACalibrationImage" }, "nullable": true }, "deletedCalibrationImages": { "type": "array", "maxItems": 100000, "minItems": 1, "items": { "$ref": "#/components/schemas/MetadataOfACalibrationImage" }, "nullable": true } }, "required": [ "success", "invalidInput", "deletedCalibrationImages" ], "example": { "invalidInput": null, "deletedCalibrationImages": [ { "place": "room=warehouse/region=region-1", "view": "plan-view" } ], "success": { "complete": true, "partial": false } } }, "Success": { "type": "object", "additionalProperties": false, "properties": { "success": { "type": "boolean" } }, "required": [ "success" ] }, "ConfigUpdateSuccess": { "type": "object", "additionalProperties": false, "properties": { "referenceId": { "type": "string", "maxLength": 10000 }, "status": { "type": "string", "enum": [ "pending", "failure" ] }, "config": { "type": "object", "nullable": true }, "error": { "type": "string", "maxLength": 100000, "nullable": true } }, "required": [ "referenceId", "status" ] }, "ConfigUpdateStatus": { "type": "object", "additionalProperties": false, "properties": { "referenceId": { "type": "string", "maxLength": 10000 }, "docType": { "type": "string", "enum": [ "behavior-analytics" ] }, "status": { "type": "string", "enum": [ "pending", "partial-success", "failure", "success" ] }, "config": { "type": "object", "nullable": true }, "error": { "type": "string", "maxLength": 100000, "nullable": true }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24 } }, "required": [ "referenceId", "docType", "status", "config", "error", "timestamp" ] }, "LastProcessedTimestamp": { "type": "object", "additionalProperties": false, "properties": { "latestTimestamp": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "timestamp": { "type": "string", "format": "date-time", "maxLength": 24 } }, "required": [ "timestamp" ], "oneOf": [ { "properties": { "place": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "place1" } }, "required": [ "place" ] }, { "properties": { "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" } }, "required": [ "sensorId" ] }, { "properties": { "place": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "place1" }, "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" } }, "required": [ "place", "sensorId" ] } ] }, "details": { "type": "array", "maxItems": 100000, "nullable": true, "items": { "type": "object", "additionalProperties": false, "properties": { "place": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "place1" }, "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" } }, "required": [ "place", "timestamp" ] } } }, "required": [ "latestTimestamp" ] }, "TripwireCounts": { "type": "object", "additionalProperties": false, "properties": { "tripwireMetrics": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "tripwireMetrics" }, "events": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "IN" }, "count": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000, "example": 1, "description": "Effective counts are used to count only the effective event generated by an object. An effective tripwire event can be defined with the following example: Suppose an object generates tripwire events in the following sequence: IN, OUT and IN again, then the effective count in this case considers only the final IN event. This is helpful to handle loitering behavior of an object." }, "actualCount": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000, "example": 1, "description": "Actual tripwire count is the count of all the events that have occurred." }, "objectType": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" } }, "required": [ "type", "count", "actualCount", "objectType" ] } } }, "required": [ "id", "events" ] } }, "aggregatedMetrics": { "type": "object", "additionalProperties": false, "properties": { "events": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "IN" }, "count": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000, "example": 1, "description": "Effective counts are used to count only the effective event generated by an object. An effective tripwire event can be defined with the following example: Suppose an object generates tripwire events in the following sequence: IN, OUT and IN again, then the effective count in this case considers only the final IN event. This is helpful to handle loitering behavior of an object." }, "actualCount": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000, "example": 1, "description": "Actual tripwire count is the count of all the events that have occurred." }, "objectType": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" } }, "required": [ "type", "count", "actualCount", "objectType" ] } } }, "required": [ "events" ] } }, "required": [ "tripwireMetrics", "aggregatedMetrics" ], "example": { "tripwireMetrics": [ { "id": "tripwire-id-1", "events": [ { "type": "IN", "count": 0, "actualCount": 18, "objectType": "Forklift" }, { "type": "OUT", "count": 0, "actualCount": 18, "objectType": "Forklift" }, { "type": "IN", "count": 18, "actualCount": 18, "objectType": "Person" }, { "type": "OUT", "count": 18, "actualCount": 18, "objectType": "Person" } ] } ], "aggregatedMetrics": { "events": [ { "type": "IN", "count": 0, "actualCount": 18, "objectType": "Forklift" }, { "type": "OUT", "count": 0, "actualCount": 18, "objectType": "Forklift" }, { "type": "IN", "count": 18, "actualCount": 18, "objectType": "Person" }, { "type": "OUT", "count": 18, "actualCount": 18, "objectType": "Person" } ] } } }, "TripwireOccupancy": { "type": "object", "additionalProperties": false, "properties": { "place": { "type": "string", "example": "building=sjc14/zone=lobby", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:10.000Z" }, "occupancy": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "objectType": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "count": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000, "example": 8 }, "details": { "type": "object", "additionalProperties": false, "properties": { "events": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "enum": [ "IN", "OUT" ], "example": "IN" }, "count": { "type": "integer", "format": "int64", "example": 6, "minimum": 0, "maximum": 10000 } }, "required": [ "type", "count" ] } }, "occupancyReset": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "resetValue": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000, "example": 2 }, "resetTimestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" } }, "required": [ "resetValue", "resetTimestamp" ] } }, "required": [ "events", "occupancyReset" ] } }, "required": [ "objectType", "count", "details" ] } } }, "required": [ "place", "timestamp", "occupancy" ] }, "TripwireHistogram": { "type": "object", "additionalProperties": false, "properties": { "bucketSizeInSec": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "tripwires": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "tripwire-id-1" }, "histogram": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "start": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:10.000Z" }, "events": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "IN" }, "count": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "actualCount": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "objectType": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" } }, "required": [ "type", "count", "actualCount" ] } } }, "required": [ "start", "end", "events" ] } } }, "required": [ "id", "histogram" ] } } }, "required": [ "bucketSizeInSec", "tripwires" ], "example": { "bucketSizeInSec": 360, "tripwires": [ { "id": "tripwire-id-1", "histogram": [ { "start": "2022-11-20T05:00:00.000Z", "end": "2022-11-20T05:06:00.000Z", "events": [ { "type": "IN", "count": 4, "actualCount": 4, "objectType": "Forklift" }, { "type": "OUT", "count": 4, "actualCount": 4, "objectType": "Forklift" }, { "type": "IN", "count": 4, "actualCount": 4, "objectType": "Person" }, { "type": "OUT", "count": 4, "actualCount": 4, "objectType": "Person" } ] } ] } ] } }, "TrackerOccupancy": { "type": "object", "properties": { "trackerOccupancy": { "type": "array", "maxItems": 10000, "items": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" }, "count": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 100000 } }, "required": [ "type", "count" ] } } }, "required": [ "trackerOccupancy" ] }, "TrackerOccupancyHistogram": { "type": "object", "properties": { "bucketSizeInSec": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "histogram": { "type": "array", "maxItems": 100000, "items": { "type": "object", "properties": { "start": { "type": "string", "format": "date-time", "maxLength": 24 }, "end": { "type": "string", "format": "date-time", "maxLength": 24 }, "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "default": "Person", "maxLength": 10000 }, "averageCount": { "type": "number", "minimum": 0, "maximum": 100000 } }, "required": [ "type", "averageCount" ] } } }, "required": [ "start", "end", "objects" ] } } }, "required": [ "bucketSizeInSec", "histogram" ] }, "AMREvents": { "type": "object", "properties": { "amrEvents": { "type": "array", "maxItems": 100000, "items": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "date-time", "maxLength": 24 }, "place": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "city=Santa Clara/building=NVIDIA Voyager/room=Visitor Lobby" }, "events": { "type": "array", "maxItems": 100000, "items": { "type": "object", "properties": { "objectId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Transporter 1" }, "objectType": { "type": "string", "pattern": "^.{0,10000}$", "default": "AMR", "maxLength": 10000, "example": "AMR" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "default": "route-change", "maxLength": 10000, "example": "route-change" }, "currentLocation": { "type": "array", "maxItems": 1, "items": { "type": "array", "maxItems": 2, "items": { "type": "number" }, "example": [ 0, 0 ] } }, "currentRoute": { "type": "array", "maxItems": 100000, "items": { "type": "array", "maxItems": 100000, "items": { "type": "number", "minimum": 0, "maximum": 999999 }, "example": [ 1, 1 ] } }, "newRoute": { "type": "array", "maxItems": 100000, "items": { "type": "array", "maxItems": 100000, "items": { "type": "number" }, "example": [ 2, 2 ] } }, "blockages": { "type": "array", "maxItems": 100000, "items": { "type": "object", "properties": { "center": { "type": "string", "example": "POINT(28.625360369528934 77.2227479486792)", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "radius": { "type": "number", "minimum": 0, "maximum": 100000, "example": 5 } }, "required": [ "center", "radius" ] } } }, "required": [ "objectId", "objectType", "currentRoute", "newRoute", "blockages" ] } } }, "required": [ "timestamp", "place", "events" ] } } }, "required": [ "amrEvents" ] }, "RoiEvents": { "type": "object", "additionalProperties": false, "properties": { "roiEvents": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/components/schemas/Behavior" } } }, "required": [ "roiEvents" ] }, "FovCounts": { "type": "object", "additionalProperties": false, "properties": { "fovOccupancy": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" }, "averageCount": { "type": "number", "format": "double", "minimum": 0, "maximum": 10000, "example": 10 } }, "required": [ "type", "averageCount" ] } } }, "required": [ "fovOccupancy" ] }, "FovHistogram": { "type": "object", "additionalProperties": false, "properties": { "bucketSizeInSec": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "histogram": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "start": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:01:00.000Z" }, "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{0,1000000}$", "maxLength": 1000000, "example": "Person" }, "averageCount": { "type": "number", "format": "double", "minimum": 0, "maximum": 10000, "example": 10 } }, "required": [ "type", "averageCount" ] } } }, "required": [ "start", "end", "objects" ] } } }, "required": [ "bucketSizeInSec", "histogram" ] }, "RoiCounts": { "type": "object", "additionalProperties": false, "properties": { "roiOccupancy": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "roiId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" }, "averageCount": { "type": "number", "format": "double", "minimum": 0, "maximum": 10000, "example": 1 }, "uniqueObjectCount": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 99999999, "example": 2 } }, "required": [ "type", "averageCount", "uniqueObjectCount" ] } } }, "required": [ "roiId", "objects" ] } } }, "required": [ "roiOccupancy" ] }, "RoiHistogram": { "type": "object", "additionalProperties": false, "properties": { "bucketSizeInSec": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "rois": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "histogram": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "start": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:10.000Z" }, "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" }, "averageCount": { "type": "number", "format": "double", "minimum": 0, "maximum": 10000, "example": 1 }, "uniqueObjectCount": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 99999999, "example": 2 } }, "required": [ "type", "averageCount", "uniqueObjectCount" ] } } }, "required": [ "start", "end", "objects" ] } } }, "required": [ "id", "histogram" ] } } }, "required": [ "bucketSizeInSec", "rois" ] }, "OccupancyBasedOnMutuallyExclusiveRois": { "type": "object", "additionalProperties": false, "properties": { "place": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "place1" }, "timestamp": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "2022-08-25T00:00:00.000Z" }, "occupancy": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "objectType": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "objectDetails": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam-1" }, "roiId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "coordinates": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 1.4 }, "y": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 2.7 }, "z": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 3.9 } }, "required": [ "x", "y" ] } }, "required": [ "id", "coordinates" ] } } }, "required": [ "sensorId", "roiId", "objects" ] } } }, "required": [ "place", "timestamp", "occupancy", "objectType" ] }, "SpaceUtilizationHistogram": { "type": "object", "additionalProperties": false, "properties": { "bucketSizeInSec": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "rois": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "histogram": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "start": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2024-08-25T00:00:00.000Z" }, "end": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2024-08-25T00:00:10.000Z" }, "metrics": { "type": "object", "additionalProperties": false, "properties": { "avgUtilizableFreeSpace": { "type": "number", "format": "double" }, "avgSpaceUtilization": { "type": "number", "format": "double" }, "avgSpaceOccupied": { "type": "number", "format": "double" }, "avgTotalSpace": { "type": "number", "format": "double" }, "avgFreeSpaceQuality": { "type": "number", "format": "double" }, "avgNumExtraPallets": { "type": "number", "format": "double" }, "avgFreeSpace": { "type": "number", "format": "double" } }, "required": [ "avgUtilizableFreeSpace", "avgSpaceUtilization", "avgSpaceOccupied", "avgTotalSpace", "avgFreeSpaceQuality", "avgNumExtraPallets", "avgFreeSpace" ] } }, "required": [ "start", "end", "metrics" ] } } }, "required": [ "id", "histogram" ] } } }, "required": [ "bucketSizeInSec", "rois" ] }, "RawFrames": { "type": "object", "additionalProperties": false, "properties": { "frames": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "version": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "id": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "bbox": { "$ref": "#/components/schemas/Bbox" }, "confidence": { "type": "number", "format": "float" }, "type": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "speed": { "type": "number", "format": "float" }, "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } }, "embedding": { "type": "object", "additionalProperties": false, "properties": { "vector": { "type": "array", "maxItems": 100000, "items": { "type": "number", "format": "float" } }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "vector" ] } }, "required": [ "bbox", "confidence", "type", "speed", "id", "embedding" ] } }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam-1" }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "version", "id", "objects", "timestamp", "sensorId" ] } } }, "required": [ "frames" ] }, "EnhancedFrames": { "type": "object", "additionalProperties": false, "properties": { "enhancedFrames": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "version": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "bbox": { "$ref": "#/components/schemas/Bbox" }, "bbox3d": { "$ref": "#/components/schemas/Bbox3d" }, "confidence": { "type": "number", "format": "float" }, "type": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "speed": { "type": "number", "format": "float" }, "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "embedding": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "vector": { "type": "array", "maxItems": 100000, "items": { "type": "number", "format": "float" } } }, "required": [ "vector" ] }, "location": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 24.5 }, "lon": { "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 15.4 }, "alt": { "type": "number", "format": "double", "minimum": 0, "maximum": 1000000, "example": 19.7 } }, "required": [ "lat", "lon", "alt" ] }, "coordinate": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 4.5 }, "y": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 1.7 }, "z": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 2.7 }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "x", "y", "z" ] } }, "required": [ "confidence", "type", "speed", "id" ], "anyOf": [ { "required": [ "bbox" ] }, { "required": [ "bbox3d" ] } ] } }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24 }, "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam-1" }, "socialDistancing": { "type": "object", "additionalProperties": false, "properties": { "clusters": { "$ref": "#/components/schemas/ProximityClusters" }, "proximityDetections": { "type": "integer", "format": "int64", "minimum": -10000, "maximum": 10000 }, "threshold": { "type": "number", "format": "double" } }, "required": [ "clusters", "proximityDetections", "threshold" ] }, "rois": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" }, "count": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 } }, "required": [ "id", "type", "count" ] } }, "fov": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" }, "count": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 } }, "required": [ "id", "type", "count" ] } }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "version", "id", "objects", "timestamp", "sensorId", "socialDistancing", "rois", "fov" ] } } }, "required": [ "enhancedFrames" ] }, "BevFrames": { "type": "object", "additionalProperties": false, "properties": { "bevFrames": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "version": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "objects": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "bbox": { "$ref": "#/components/schemas/Bbox" }, "bbox3d": { "$ref": "#/components/schemas/Bbox3d" }, "confidence": { "type": "number", "format": "float" }, "type": { "type": "string", "example": "Person", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "speed": { "type": "number", "format": "float" }, "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "embedding": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "vector": { "type": "array", "maxItems": 100000, "items": { "type": "number", "format": "float" } } }, "required": [ "vector" ] }, "location": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 79.5 }, "lon": { "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 34.8 }, "alt": { "type": "number", "format": "double", "minimum": 0, "maximum": 1000000, "example": 65.1 } }, "required": [ "lat", "lon", "alt" ] }, "coordinate": { "type": "object", "nullable": true, "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 6.5 }, "y": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 4.3 }, "z": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 2.8 } }, "required": [ "x", "y", "z" ] }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "confidence", "type", "speed", "id" ], "anyOf": [ { "required": [ "bbox" ] }, { "required": [ "bbox3d" ] } ] } }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24 }, "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam-1" }, "rois": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "hazard_zone_1" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "zone1" }, "count": { "type": "integer", "minimum": 0, "maximum": 10000, "example": 2 } }, "required": [ "id", "type", "count" ] } }, "fov": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "id1" }, "type": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" }, "count": { "type": "integer", "minimum": 0, "maximum": 10000, "example": 2 } }, "required": [ "id", "type", "count" ] } }, "congestions": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "objectIds": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, "amount": { "type": "number", "format": "float", "minimum": 0, "maximum": 1 }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } } } }, "interactions": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "objectIds": { "type": "array", "maxItems": 100000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 } }, "coordinates": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 6.5 }, "y": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 4.3 }, "z": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 2.8 } }, "required": [ "x", "y", "z" ] } }, "description": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } } } }, "info": { "type": "object", "additionalProperties": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "example": { "additionalProperty1": "value1", "additionalProperty2": "value2" } } }, "required": [ "version", "id", "objects", "timestamp", "sensorId", "rois", "fov" ] } } }, "required": [ "bevFrames" ] }, "ProximityClusters": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "points": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 1.1 }, "y": { "type": "number", "format": "double", "minimum": -10000, "maximum": 10000, "example": 0.5 } }, "required": [ "x", "y" ] } } }, "required": [ "points" ] } }, "ProximityDetectionResult": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "nullable": true, "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "nullable": true }, "clusters": { "$ref": "#/components/schemas/ProximityClusters" } }, "required": [ "id", "timestamp", "clusters" ] }, "FramePts": { "type": "object", "additionalProperties": false, "properties": { "pts": { "type": "integer", "format": "int64", "nullable": true, "minimum": -10000, "maximum": 10000 } }, "required": [ "pts" ] }, "BehaviorPts": { "type": "object", "additionalProperties": false, "properties": { "startPts": { "type": "integer", "format": "int64", "minimum": -10000, "maximum": 10000 }, "endPts": { "type": "integer", "format": "int64", "minimum": -10000, "maximum": 10000 } }, "required": [ "startPts", "endPts" ] }, "ClusteringResult": { "type": "object", "additionalProperties": false, "properties": { "clusters": { "type": "array", "maxItems": 100000, "items": { "type": "object", "additionalProperties": false, "properties": { "clusterIndex": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "modelVersion": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "label": { "type": "string", "nullable": true, "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "count": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "sampledBehaviors": { "type": "array", "minItems": 1, "maxItems": 100, "items": { "$ref": "#/components/schemas/Behavior" } } }, "required": [ "clusterIndex", "modelVersion", "label", "count", "sampledBehaviors" ] } } }, "required": [ "clusters" ] }, "ClusterLabel": { "type": "object", "additionalProperties": false, "properties": { "sensorId": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "cam-1" }, "modelVersion": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "clusterIndex": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" }, "label": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "1" } }, "required": [ "sensorId", "modelVersion", "clusterIndex", "label" ] }, "TripwireEvents": { "type": "object", "additionalProperties": false, "properties": { "tripwireEvents": { "type": "array", "maxItems": 100000, "items": { "$ref": "#/components/schemas/Behavior" } } }, "required": [ "tripwireEvents" ] }, "OccupancyReset": { "type": "object", "additionalProperties": false, "properties": { "place": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "place1" }, "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "example": "2022-08-25T00:00:00.000Z" }, "occupancyReset": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 10000 }, "objectType": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "Person" } }, "required": [ "place", "timestamp", "occupancyReset", "objectType" ] }, "DetailedSegmentSpeed": { "type": "object", "additionalProperties": false, "properties": { "roadSegments": { "type": "array", "maxItems": 99999999, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "id1" }, "direction": { "type": "string", "enum": [ "N", "S", "W", "E" ] }, "start": { "type": "object", "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 0.5 }, "lng": { "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 48.7 }, "alt": { "type": "number", "format": "double", "minimum": 0, "maximum": 100000, "example": 73.4 } }, "additionalProperties": false, "required": [ "lat", "lng" ] }, "end": { "type": "object", "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90 }, "lng": { "type": "number", "format": "double", "minimum": -180, "maximum": 180 }, "alt": { "type": "number", "format": "double", "minimum": 0, "maximum": 100000 } }, "additionalProperties": false, "required": [ "lat", "lng" ] }, "points": { "type": "array", "minItems": 2, "maxItems": 100000, "items": { "type": "object", "properties": { "lat": { "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 4.4 }, "lng": { "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 5.74 }, "alt": { "type": "number", "format": "double", "minimum": 0, "maximum": 100000, "example": 2.8 } }, "additionalProperties": false, "required": [ "lat", "lng", "alt" ] } }, "speed": { "type": "number", "minimum": 0, "maximum": 1000 }, "objectCount": { "type": "integer", "minimum": 0, "maximum": 100000 } }, "required": [ "id", "direction", "start", "end", "points", "speed", "objectCount" ] } } }, "required": [ "roadSegments" ] }, "SegmentSpeed": { "type": "object", "additionalProperties": false, "properties": { "roadSegments": { "type": "array", "maxItems": 99999999, "items": { "type": "object", "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000, "example": "id1" }, "speed": { "type": "number", "minimum": 0, "maximum": 1000 }, "objectCount": { "type": "integer", "format": "int64", "minimum": 0, "maximum": 100000 } }, "required": [ "id", "speed", "objectCount" ] } } }, "required": [ "roadSegments" ] }, "SensorLookup": { "type": "object", "additionalProperties": false, "properties": { "sensorIds": { "type": "array", "minItems": 1, "maxItems": 10000, "items": { "type": "string", "pattern": "^.{0,10000}$", "maxLength": 10000 }, "example": [ "sensor_1", "sensor_2" ] } } }, "CalibrationLastModifiedTimestamp": { "type": "object", "additionalProperties": false, "properties": { "timestamp": { "type": "string", "format": "date-time", "maxLength": 24, "description": "ISO 8601 timestamp of the last calibration data modification" } }, "required": [ "timestamp" ] } } } }