Skip to main content

Application configuration API

Description

VAPIX® Axis Application Configuration API is used to configure applications developed by Axis, for example AXIS Video Motion Detection and AXIS Cross Line Detection.

Supported functionality:

Identification

  • Property: Properties.EmbeddedDevelopment.Version=1.00 or later
  • Firmware: 5.11 or later. Removed in 12.0

Dependencies

Applications are uploaded and controlled using VAPIX® Application API.

Obsoletes

The list operation vaconfig.cgi?action=list is obsolete and should not be used.

This operation is replaced by applications/list.cgi in VAPIX® Application API.

The application configuration interface has been made obsolete as of Axis OS version 11.11 and will be removed and made unavailable with Axis OS version 12.0.

Common examples

These examples demonstrate how to use VAPIX® Axis Application Configuration API. Everything marked in bold should be replaced by application-specific values.

Get the application configuration.

Request:


http://myserver/axis-cgi/vaconfig.cgi?action=get&name=ExampleApp

Response:

<reply result="ok">
<config version="1.0">
<application name="ExampleApp">
<ruleEngine>
<namedObjects>
<namedObject name="ExampleLine1">
<data knownNameType="geometry.segment">
<segment>
<point x="-0.5" y="0.0"/>
<point x="0.5" y="0.0"/>
</segment>
</data>
</namedObject>
<namedObject name="ExamplePolygon1">
<data knownNameType="geometry.polygon">
<polygon>
<point x="0.60" y="0.60"/>
<point x="0.60" y="-0.60"/>
<point x="-0.60" y="-0.60"/>
<point x="-0.60" y="0.60"/>
</polygon>
</data>
</namedObject>
</namedObjects>
<rules>
<rule name="example_rule" function="example_function">
<parameter name="ExampleLineParameter" value="ExampleLine1"/>
<parameter name="ExamplePolygonParameter" value="ExamplePolygon1"/>
</rule>
</rules>
<scripts>
<script encryption="1">example.lua</script>
</scripts>
<events>
<event name="example_event">
<attr key="example_state" nicename="Example State" tag="property_state"/>
</event>
</events>
<moteConfig>
<option name="boundingBox" value="false"/>
<option name="polygon" value="true"/>
<option name="velocity" value="true"/>
</moteConfig>
</ruleEngine>
</application>
</config>
</reply>

Modify the application configuration.

Request:

POST http://myserver/axis-cgi/vaconfig.cgi HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: <content length>

action=modify&name=ExampleApp
<config version="1.0">
<application name="ExampleApp">
<ruleEngine>
<namedObjects>
<namedObject name="ExampleLine1">
<data knownNameType="geometry.segment">
<segment>
<point x="-0.5" y="0.0"/>
<point x="0.5" y="0.0"/>
</segment>
</data>
</namedObject>
<namedObject name="ExamplePolygon1">
<data knownNameType="geometry.polygon">
<polygon>
<point x="0.60" y="0.60"/>
<point x="0.60" y="-0.60"/>
<point x="-0.60" y="-0.60"/>
<point x="-0.60" y="0.60"/>
</polygon>
</data>
</namedObject>
</namedObjects>
<rules>
<rule name="example_rule" function="example_function">
<parameter name="ExampleLineParameter" value="ExampleLine1"/>
<parameter name="ExamplePolygonParameter" value="ExamplePolygon1"/>
</rule>
</rules>
<scripts>
<script encryption="1">example.lua</script>
</scripts>
<events>
<event name="example_event">
<attr key="example_state" nicename="Example State" tag="property_state"/>
</event>
</events>
<moteConfig>
<option name="boundingBox" value="false"/>
<option name="polygon" value="true"/>
<option name="velocity" value="true"/>
</moteConfig>
</ruleEngine>
</application>
</config>
</reply>

Example of an event emitted from the application. Application-specific content is marked in bold, the rest is part of the ONVIF stream and defined in ONVIF core specification version 1.0.

<tt:MetadataStream xmlns:tt="http://www.onvif.org/ver10/schema">
<tt:Event xmlns:tt="http://www.onvif.org/ver10/schema">
<wsnt:NotificationMessage
xmlns:tns1="http://www.onvif.org/ver10/topics"
xmlns:tnsaxis="http://www.axis.com/2009/event/topics"
xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"
xmlns:wsa5="http://www.w3.org/2005/08/addressing">
<wsnt:Topic Dialect="http://docs.oasis-open.org/wsn/t-1/TopicExpression/Simple">
tns1:RuleEnginge/tnsaxis:ExampleApp/example_event
</wsnt:Topic>
<wsnt:ProducerReference>
<wsa5:Address>
uri://daf20c8-c41f-11e0-8c89-00408cb96106/ProducerReference
</wsa5:Address>
</wsnt:ProducerReference>
<wsnt:Message>
<tt:Message UtcTime="2012-03-07T13:44:34.112703Z" PropertyOperation="Initialized"
<tt:Source>
</tt:Source>
<tt:Key>
</tt:Key>
<tt:Data>
<tt:SimpleItem Name="example_state" Value="0"/>
</tt:Data>
</tt:Message
</wsnt:Message>
</wsnt:NotificationMessage>
</tt:Event>
</tt:MetadataStream>

Application configuration

The application configuration is an XML file stored in the Axis product. If the application configuration is modified, the file is replaced by a new configuration file.

If the application configuration is modified while the application is running, the application will be restarted with the new configuration.

The application cannot be started if it is not possible to parse the XML file. If the application configuration is malformed, but still parsable, the application may not work properly or may fail to run.

XML Application Setup Data Description

The application configuration is defined in XML format. Most parts define how the application shall run and should not be modified.

For description of the application configuration for a particular application, see the documentation provided with the application.

XML pathAttributeValid valuesDescription
application/ruleEngine/namedObjectsSection with all named objects used by the application.
application/ruleEngine/rulesSection will all rules used by the application.
application/ruleEngine/rules/rulenameStringName of the rule.
functionStringName of the rule function used to execute the rule. The function which is defined in a script file (see scripts section), is executed with the provided parameter values as input.
application/ruleEngine/rules/rule/parameternameStringName of a paramer used by the rule function.
valueStringValue of a parameter used by the rule function.
application/ruleEngine/scriptsSection with scripts used by the application.
application/ruleEngine/scripts/scriptStringName of a script file used by the application.
encryption0 11 = The script is encrypted. 0 = The script is not encrypted.
application/ruleEngine/eventsSection with all events used by the application.
application/ruleEngine/events/eventnameStringName of an event emitted by the application.
application/ruleEngine/events/event/attrkeyStringKey string for the event.
tagsource data property-statesource = This is source information in the event metadata. data = This is data information in the event metadata. property-state = This is a stateful event. The current state is 0 or 1.
application/ruleEngine/moteConfigSection with all MOTE configuration options. Different applications may have different MOTE configuration.
application/ruleEngine/moteConfig/optionnameboundingBoxName of the MOTE configuration option.
valuetrue falsetrue = Bounding box should be used. false = Bounding box should not be used.
application/ruleEngine/moteConfig/optionnamepolygonName of the MOTE configuration option.
valuetrue falsetrue = Polygon should be used. false = Polygon should not be used.
application/ruleEngine/moteConfig/optionnamevelocityName of the MOTE configuration option.
valuetrue falsetrue = Velocity should be used. false = Velocity should not be used.

HTTP API

Manage I/O ports - port.cgi

Use io/port.cgi to retrieve information about port status and directions, to activate and deactivate ports and to monitor ports.

info

In port.cgi requests and in all responses, port numbering (Port ID below) starts from one (where one corresponds to the physical port labeled ‘1’).

  • Security level: viewer
  • Method: GET
http://<servername>/axis-cgi/io/port.cgi?
<argument>=<value>[&<argument>=<value>...]

With the following arguments and values:

ArgumentValid valuesDescription
check=<int>[,<int>,...]<Port ID 1>[<Port ID 2>,...]Return the status (1 or 0) of one or more ports numbered <Port ID 1>, <Port ID 2>, ... 1 = Closed circuit. 0 = Open circuit.
checkactive=<int> [,<int>,...]<Port ID 1>[,Port ID 2>,...]Return the status (active or inactive) of one or more ports numbered <Port ID 1>, <Port ID 2>, ... This value depends on the parameters Output.Active for an output and Input.Trig for an input.If the port is an output and Output.Active is configured as closed, then this request will return active if the port state is closed. The same goes for an input port that has Input.Trig configured as closed.
checkdirection=<int> [,<int>,...]<Port ID 1>[,<Port ID 2>,...]Return the port direction (input or output) of one or more ports numbered <Port ID 1>, <Port ID 2>,...
monitor=<int>[,<int>,...] Outputs and inputs must be monitored separately.<Port ID 1>[,Port ID 2>,...]Return a multipart stream of "check" ports (see return description below). Input and output ports must be monitored separately.
action=<string> Valid for output ports only.[<Port ID>]:<a>[<wait><a>...]Activate or deactivate an output. Use the <wait> option to activate/deactivate the port for a limited period of time.<Port ID> = Port number. If omitted, output 1 is selected.<a> = Action character. /=active, \=inactive<wait> = Delay before the next action. Unit: millisecondsNote: The :, / and \ characters must be percent-encoded in the URI. See .Example: To set output 1 to active, use 1:/. In the URI, the action argument becomes action=1%3A%2F

Example 1:

Retrieve information about port 1.

http://myserver/axis-cgi/param.cgi?action=list&group=IOPort.I0

Response

  • HTTP Code: 200 OK
  • Content-Type: text/plain
root.IOPort.I0.Configurable=yes
root.IOPort.I0.Direction=output
root.IOPort.I0.Input.Name=Input 1
root.IOPort.I0.Input.Trig=closed
root.IOPort.I0.Output.Name=Output 1
root.IOPort.I0.Output.Active=open
root.IOPort.I0.Output.Button=actinact
root.IOPort.I0.Output.PulseTime=0

Example 2:

Configure port 2 to act as output. This example is only applicable to configurable ports.

http://myserver/axis-cgi/param.cgi?action=update&IOPort.I2.Direction=output

Example 3:

Set port 2 to active, wait 300 ms and then set the port to inactive. Some characters in the action argument action=2:/300\ must be percent-encoded.

http://myserver/axis-cgi/io/port.cgi?action=2%3A%2F300%5C

Successful request, all arguments except monitor

Response

  • HTTP Code: 200 OK
  • Content-Type: text/plain
<Port ID>=<information>
info

The body is empty for the action argument.

Successful request, argument monitor

Response

  • HTTP Code: 200 OK
  • Content-Type: multipart/x-mixed-replace; boundary=<boundary>

Body:

--<boundary>
<monitor data>

Where the returned <monitor data> is:

<Port ID><port direction>:<action character>

--<boundary>
<monitor data>

Here <id> is the port and <port direction> is I for inputs and O for outputs. The action character is / or H for active and \ or L for inactive ports. The characters / and \ indicates a change in the state. The characters H and L indicates that the state is unchanged.

info

Non-empty boundaries are sent when the port status changes. If there are no changes, empty boundaries are sent at 15-second intervals.

Get application configuration

info

The vaconfig.cgi?action=get is obsolete and should not be used.

Use vaconfig.cgi?action=get to retrieve the application configuration.

  • Access control: admin
  • Method: GET

Syntax

http://<servername>/axis-cgi/vaconfig.cgi?<argument>=<value>[&<argument>=<value>...]

with the following arguments and values

ArgumentValid valuesDescription
action=<string>getGet the application configuration in XML format.
name=<string>StringApplication name.
  • HTTP Code: 200 OK
  • Content-Type: text/xml

Body:

<reply result="error">
<script/>
<error type="no_such_application" message="No application 'hello_glib' exists"/>
</reply>

For a description of the application configuration, see the API documentation for the application.

For error responses, see Error responses.

Modify application configuration

info

The vaconfig.cgi?action=modify is obsolete and should not be used.

Use vaconfig.cgi?action=modify to modify the application configuration.

  • Access control: admin
  • Method: POST

Syntax

http://<servername>/axis-cgi/vaconfig.cgi?<argument>=<value>
[&<argument>=<value>...]
ArgumentValid valuesDescription
action=<string>modifyModify the application configuration in XML format.
name=<string>StringApplication name.

Body:

POST http://myserver/axis-cgi/vaconfig.cgi HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: <content-length>

action=modify&name=[application name]
<config version="1.0">
[application xml configuration]
</config>
  • HTTP Code: 200 OK
  • Content-Type: text/xml

Body:

<reply result="error">
<script/>
<error type="no_such_application" message="No application 'hello_glib' exists"/>
</reply>

The XML Schema is available at http://www.axis.com/vapix/http_cgi/vaconfig/modify_response1.xsd.

For error responses, see Error responses.

List installed applications

info

The vaconfig.cgi?action=list is obsolete and should not be used. Replaced by applications/list.cgi in VAPIX® Application API.

vaconfig.cgi?action=list lists the installed applications.

  • Access control: admin
  • Method: GET

Syntax

http://<servername>/axis-cgi/vaconfig.cgi?<argument>=<value>[&<argument>=<value>...]

with the following arguments and values:

ArgumentValid valuesDescription
actionlistList the installed applications.
  • HTTP Code: 200 OK
  • Content-Type: text/xml

Body:

<reply result="ok">
<application name="[Application name]"/>
<application name="[Application name]"/>
...
<reply>

XML Schema: http://www.axis.com/vapix/http_cgi/vaconfig/list1.xsd.

For error responses, see Error responses.

Error responses

If the requested operation cannot be executed, the type of error and an error message will be returned.

  • HTTP Code: 200 OK
  • Content-Type: text/xml

Body:

<reply result="error">
<error type="<Error type>" message="<Error message>"/>
</reply>
Error typeDescription
bad_requestBad request. The request URL was not formatted correctly.
no_such_applicationThere is no application with the given name.
internalThe action could not be performed. This is for example returned if the application fails to restart after a configuration modification.

Get RTSP stream with event topic filter

Retrieve an RTSP stream with an event topic filter.

  • Access control: admin, operator
  • Method: GET

Syntax:

rtsp://<servername>/axis-media/media.amp?<argument>=<value>[&<argument>=<value>...]
ArgumentValid valuesDescription
video0 1Specify whether video should be available in the stream.0 = no video 1= video
eventon offSpecify whether event metadata should be available in the stream.on = event metadata is included off = event metadata is not included
eventtopicStringThe event topic filter to include.For AXIS Video Motion Detection 3, use onvif:RuleEngine/axis:VMD3//.For AXIS Video Motion Detection 2.1 use onvif:RuleEngine/axis:VideoMotionDetection//motionFor AXIS Digital Autotracking, use onvif:RuleEngine/axis:DigitalAutotracking/tracking//.For AXIS Cross Line Detection 1.1, use onvif:RuleEngine/axis:CrossLineDetection//.
For additional arguments, see Network Video > Video Streaming > Video streaming Over RTSP > Parameter Specification RTSP URL in VAPIX®.