Audio Analytics

The VAPIX® Audio Analytics API provides the information that makes it possible to manage the settings for an audio plugin framework.

Overview

The API implements audioanalytics.cgi as its communications interface and supports the following methods:

MethodDescription
getPluginsSchemasLists the JSON schema for all settings related to an analytics plugin.
getPluginsSettingsLists the plugin settings for all plugin instances.
setPluginsSettingsApplies the plugin settings for all plugin instances.
getSupportedVersionsLists all API versions supported by your device.

This API works with the Audio Device Control API, which can be used to configure hardware devices. The Audio Analytics API can then be used to configure the audio analytics features on the devices.

Identification

API Discovery

id=audio-analytics

Common examples

Audio analytics plugin

These examples will show you how to configure an existing audio analytics plugin. A plugin is made to analyze and react to an audio signal received from an audio source. Each plugin has its own unique settings object that can be used by the set/get methods detailed below.

getPluginsSchemas

Each plugin has its own individual settings object. This means that the method getPluginsSchemas will return the JSON schema for all analytics plugins.

http://<servername>/axis-cgi/audioanalytics.cgi
JSON input parameters
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "getPluginsSchemas",
  "params": {}
}

Parse the JSON response.

Successful response example
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "getPluginsSchemas",
  "data": {
    "schemas": [
      {
        "$schema": "http://json-schema.org/draft/2020-12/schema#",
        "title": Adaptive Audio Detection",
        "type": "object",
        "properties": {
          "threshold": {
            "type": "number",
            "description": "Required threshold (dBFs) for detection",
            "minimum": -180,
            "maximum": 0
          },
          "enable": {
            "type": "boolean",
            "description": "Enable detection"
          }
        }
      },
      {
        "$schema": "http://json-schema.org/draft/2020-12/schema#",
        "title": "Classification",
        "id": "Classification",
        "type": "object",
        "properties": {
          "enable": {
            "title": "Enable",
            "type": "boolean",
            "description": "Enable classification"
          }
        }
      }
    ]
  }
}
Error response example
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "getPluginsSchemas",
  "error": {
    "code": 2104,
    "message": "Invalid parameter value specified."
  }
}

See getPluginsSchemas for additional details.

getPluginsSettings

Return added audio plugin settings for all audio sources. The properties in the settings object are unique to the plugin and are described by the JSON schema returned with getPluginsSchemas.

http://<servername>/axis-cgi/audioanalytics.cgi
JSON input parameters
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "getPluginsSettings",
  "params": {}
}

Parse the JSON response.

Successful response example
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "getPluginsSettings",
  "data": {
    "devices": [{
      "id": "0",
      "inputs": [{
        "id": "0",
        "plugins": [{
          "id": "AdaptiveAudioDetection",
          "settings": {
            "enabled": true,
            "threshold": -6
          }
        },
        {
          "id": "DirectionOfArrival",
          "settings": {
            "enable": true
          }
        }]
      }],
      "outputs": [{
        "id": "0",
        "plugins": [{
          "id": "AggressionDetection",
          "settings": {
            "enable": true,
            "level": 0
          }
        }]
      }]
    }]
  }
}
Error response example
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "getPluginsSettings",
  "error": {
    "code": 2100,
    "message": "The requested API version is not supported."
  }
}

See getPluginsSettings for additional details.

setPluginsSettings

The settings returned by getPluginsSettings can be used to configure the plugins with the following request. Descriptions for the settings can be requested with the method getPluginsSchemas.

http://<servername>/axis-cgi/audioanalytics.cgi
JSON input parameters
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "setPluginsSettings",
  "params": {
    "devices": [{
      "id": "0",
      "inputs": [{
        "id": "0",
        "plugins": [{
          "id": "AdaptiveAudioDetection",
          "settings": {
            "enable": false,
            "threshold": -3
          }
        },
        {
          "id": "DirectionOfArrival",
          "settings": {
            "enable": false
          }
        }]
      }],
      "outputs": [{
        "id": "0",
        "plugins": [{
          "id": "AggressionDetection",
          "settings": {
            "enable": true,
            "level": 2
          }
        }]
      }]
    }]
  }
}

Parse the JSON response.

Successful response example
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "setPluginsSettings"
}
Error response example
{
  "apiVersion": "1.0",
  "context": "abc",
  "method": "setPluginsSettings",
  "error": {
    "code": 2104,
    "message": "Invalid parameter value specified."
  }
}

See setPluginsSettings for additional details.

Retrieve supported API versions

This example will show you how to list all API versions supported by your device.

http://<servername>/axis-cgi/audioanalytics.cgi
JSON input parameters
{
  "context": "abc",
  "method": "getSupportedVersions"
}
Successful response example
{
  "apiVersion": "2.1",
  "context": "abc",
  "method": "getSupportedVersions",
  "data": {
    "apiVersions": ["1.3","2.1"]
  }
}
Error response example
{
  "apiVersion": "2.1",
  "context": "abc",
  "method": "getSupportedVersions",
  "error": {
    "code": 2100,
    "message": "The requested API version is not supported."
  }
}

See getSupportedVersions for additional details.

API specifications

getPluginsSchemas

This method should be used when you want to retrieve the JSON schema for a settings object originating from the getPluginsSettings response, or in the request set by setPluginsSettings.

Request

Security level

Operator

Method

POST

http://myserver/axis-cgi/audioanalytics.cgi
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "getPluginsSchema",
  "params": {
    "plugin": <string>
  }
}
ParameterDescription
apiVersion=<string>The API version that should be used.
context=<string>
Optional
The user sets this value and the server echoes it back in the response.
method="getPluginsSchemas"The method that should be used.
plugin=<string>The plugin name.

Return value - Success

HTTP Code

200 OK

Content-Type

application/json

Response body syntax
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "getPluginsSchemas",
  "data": {
    "schemas": [
      {
        "$schema": <string>,
        "title": <string>,
        "id": <string>,
        "type": <string>,
        "properties": <object>
  }
}
ParameterDescription
apiVersion=<string>The API version that was used in the request.
context=<string>
Optional
The context set by the user in the request.
method="getPluginsSchemas"The requested method.
data=<object>Container for method specific parameters.
data.schemas[]=<list of plugin schemas>List of available plugin schemas.
<plugin schema>.$schema=<string>The URL for the core schema meta-schema.
<plugin schema>.title=<string>The schema title.
<plugin schema>.id=<string>Identification of the plugin.
<plugin schema>.type=<string>The settings type, usually an object.
<plugin schema>.properties=<object>A unique JSON schema describing the properties of the settings objects returned by getPluginsSettings and sent in the request by setPluginsSettings. All JSON schemas has a link to the version used in the node property $schema. The plugin uses draft/2020-12 to describe the properties. This means that a deviation will be explained if it occur from draft/2020-12. Example of a schema version:"$schema": "http://json-schema.org/draft/2020-12/schema#"

Return value - Failure

HTTP Code

200 OK

Content-Type

application/json

Response body syntax
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "getPluginsSchemas",
  "error": {
    "code": <integer error code>,
    "message". <string>
  }
}
ParameterDescription
apiVersion=<string>The API version that was used in the request.
context=<string>
Optional
The context set by the user in the request.
method="getPluginsSchemas"The requested method.
error.code=<integer error code>The error code.
error.message=<string>The error message for the corresponding error code.

Error codes

See General error codes for a complete list of potential errors.

getPluginsSettings

This method should be used when you want to retrieve the settings for all plugins. The plugins all have their own settings object, detailed by the response from getPluginsSchemas.

Request

Security level

Operator

Method

POST

http://myserver/axis-cgi/audioanalytics.cgi
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "getPluginsSettings"
}
ParameterDescription
apiVersion=<string>The API version that should be used.
context=<string>
Optional
The user sets this value and the server echoes it back in the response.
method="getPluginsSetting"The method that should be used.

Return value - Success

HTTP Code

200 OK

Content-Type

application/json

Response body syntax
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "getPluginsSetting",
  "data": {
    "devices": [{
      "id": <string>,
      "inputs": [{
        "id": <string>,
        "plugins": [{
          "id": <string>,
          "settings": <object>
        }]
      }],
      "outputs": [{
        "id": <string>,
        "plugins": [{
          "id": <string>,
          "settings": <object>
        }]
      }]
    }]
  }
}
ParameterDescription
apiVersion=<string>The API version that was used in the request.
context=<string>
Optional
The context set by the user in the request.
method="getPluginsSettings"The requested method.
data=<object>Container for the parameters listed below.
data.devices[]=<list of audio devices>Lists all available audio devices.
<audio device>.idThe audio device id.
<audio device>.inputs[]=<list of inputs>Lists the device inputs.
inputs.idThe input id.
input.plugins[]=<list of plugin settings>Lists the plugin settings.
plugins.idThe plugin instance id.
plugins.settings=<object>An object containing settings parameters detailed by the response from getPluginsSchemas.
<audio device>.outputs[]=<list of outputs>Lists the device outputs.
outputs.idThe output id.
output.plugins[]=<list of plugin settings>Lists the plugin settings.
plugins.idThe plugin instance id.
plugins.settings=<object>An object containing the settings parameters detailed in the response from getPluginsSchemas.

Return value - Failure

HTTP Code

200 OK

Content-Type

application/json

Response body syntax
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "getPluginsSettings",
  "error": {
    "code": <integer error code>,
    "message". <string>
  }
}
ParameterDescription
apiVersion=<string>The API version that was used in the request.
context=<string>
Optional
The context set by the user in the request.
method="getPluginsSettings"The requested method.
error.code=<integer error code>The error code.
error.message=<string>The error message for the corresponding error code.

Error codes

See General error codes for a complete list of potential errors.

setPluginsSettings

This method should be used when you want to configure a plugin to work with the response from getPluginsSettings.

Request

Security level

Operator

Method

POST

http://myserver/axis-cgi/audioanalytics.cgi
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "setPluginsSetting",
  "params": {
    "devices": [{
      "id": <string>,
      "inputs": [{
        "id": <string>,
        "plugins": [{
          "id": <string>,
          "settings": <object>
        }]
      }],
      "outputs": [{
        "id": <string>,
        "plugins": [{
          "id": <string>,
          "settings": <object>
        }]
      }]
    }]
  }
}
ParameterDescription
apiVersion=<string>The API version that was used in the request.
context=<string>
Optional
The context set by the user in the request.
method="setPluginsSettings"The requested method.
params=<object>Container for method specific parameters listed below.
data.devices[]=<list of audio devices>List containing all available audio devices.
<audio device>.idThe audio device id.
<audio device>.inputs[]=<list of inputs>Lists the device inputs.
inputs.idThe input id.
input.plugins[]=<list of plugin settings>Lists the plugin settings.
plugins.idThe plugin instance id.
plugins.settings=<object>An object containing settings parameters detailed by the response from getPluginsSchemas.
<audio device>.outputs[]=<list of outputs>Lists the device outputs.
outputs.idThe output id.
output.plugins[]=<list of plugin settings>Lists the plugin settings.
plugins.idThe plugin instance id.
plugins.settings=<object>An object containing settings parameters detailed by the response from getPluginsSchemas.

Return value - Success

HTTP Code

200 OK

Content-Type

application/json

{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "setPluginsSettings"
}
ParameterDescription
apiVersion=<string>The API version that should be used.
context=<string>
Optional.
The user sets this value and the server echoes it back in the response.
method="setPluginsSettings"The method that should be used.

Return value - Failure

HTTP Code

200 OK

Content-Type

application/json

Response body syntax
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "setPluginsSettings",
  "error": {
    "code": <integer error code>,
    "message". <string>
  }
}
ParameterDescription
apiVersion=<string>The API version that was used in the request.
context=<string>
Optional.
The context set by the user in the request.
method="setPluginsSettings"The requested method.
error.code=<integer error code>The error code.
error.message=<string>The error message for the corresponding error code.

Error codes

See General error codes for a complete list of potential errors.

getSupportedVersions

This method should be used when you want to request a list of all API versions supported by your device.

Request

Security level

Operator

Method

POST

http://myserver/axis-cgi/audioanalytics.cgi
{
  "context": <string>,
  "method": "getSupportedVersions",
}
ParameterDescription
context=<string>
Optional
The context set by the user in the request.
method="getSupportedVersions"The requested method.

Return value - Success

HTTP Code

200 OK

Content-Type

application/json

{
  "context": <string>,
  "method": "getSupportedVersions",
  "data": {
    "apiVersions": ["<Major1>.<Minor1>", "<Major2>.<minor2>"]
  }
}
ParameterDescription
context=<string>
Optional
The user sets this value and the server echoes it back in the response.
method="getSupportedVersions"The method that should be used.
data.apiVersions[]=<list of versions>A list containing all supported major versions along with their highest minor version, e.g. ["1.2", "3.4"].

Return value - Failure

HTTP Code

200 OK

Content-Type

application/json

Response body syntax
{
  "apiVersion": "<Major>.<Minor>",
  "context": <string>,
  "method": "getSupportedVersions",
  "error": {
    "code": <integer error code>,
    "message". <string>
  }
}
ParameterDescription
apiVersion=<string>The API version that was used in the request.
context=<string>
Optional
The context set by the user in the request.
method="getSupportedVersions"The requested method.
error.code=<integer error code>The error code.
error.message=<string>The error message for the corresponding error code.

Error codes

See General error codes for a complete list of potential errors.

General error codes

The following table consist of errors that may occur for any method. Errors specific to a method are listed under their separate API description.

CodeDefinitionDescription
1100INTERNAL_ERRORInternal error.
2100UNSUPPORTED_API_VERSIONThe requested API version is not supported.
2101JSON_INVALID_ERRORThe provided JSON input was invalid.
2102METHOD_NOT_SUPPORTEDMethod not supported.
2103JSON_KEY_NOT_FOUNDA mandatory input parameter was not found in the input.
2104PARAM_INVALID_VALUE_ERRORInvalid parameter value specified.
2105AUTHORIZATION_ERRORAuthorization failed.
2106AUTHENTICATION_ERRORAuthentication failed.
2107TRANSPORT_LEVEL_ERRORTransport Level Error.