Application API
Description
Use VAPIX® Application API to upload, control and manage applications and their license keys.
Supported functionality:
Upload applications to the Axis product. See Upload application.
Start, stop, restart and remove applications. See Control application.
Configure settings usable by all applications. See Configure application.
Upload, install and remove license keys. See Manage license keys.
List installed applications. See List installed applications.
Identification
VAPIX® Application API is supported if:
- Property
Properties.EmbeddedDevelopment.Version
exists.
list.cgi
requries:
- Property
Properties.EmbeddedDevelopment.Version=1.20
and later.
Common examples
These examples demonstrate how to use the Application API. Text marked in bold should be replaced by application-specific values.
Upload an application to the Axis product.
POST /axis-cgi/applications/upload.cgi HTTP/1.1
Content-Type: multipart/form-data; boundary=fileboundary
Content-Length: <content-length>
fileboundary
Content-Disposition: form-data; name="packfil"; filename="ExampleApp.eap"
Content-Type: application/octet-stream
<application package data>
Upload a license key.
POST /axis-cgi/applications/license.cgi?action=uploadlicensekey&package=ExampleApp HTTP/1.1
Content-Type: multipart/form-data; boundary=fileboundary
Content-Length: <content-length>
fileboundary
Content-Disposition: form-data; name="licenseKey"; filename="ExampleAppLicenseKey.xml"
Content-Type: application/octet-stream
<license key data>
Allow an unsigned application to be installed.
http://<servername>/axis-cgi/applications/config.cgi?action=set&name=AllowUnsigned&value=true
Start the application.
http://myserver/axis-cgi/applications/control.cgi?action=start&package=ExampleApp
List installed applications.
http://myserver/axis-cgi/applications/list.cgi
<reply result="ok">
<application Name="VideoMotionDetection" NiceName="AXIS Video Motion Detection"
Vendor="Axis Communications" Version="2.1" ApplicationID="8546"
License="None" Status="Running"
ConfigurationPage="local/VideoMotionDetection/setup.shtml" />
<application Name="CrossLineDetection" NiceName="AXIS Cross Line Detection"
Vendor="Axis Communications" Version="1.1" ApplicationID="3051"
License="Valid" Status="Stopped"
ConfigurationPage="local/CrossLineDetection/setup.shtml" />
<application Name="ExampleApp" NiceName="Example Application"
Vendor="Example inc." Version="1.0" ApplicationID="1"
License="Custom" Status="Stopped"
ConfigurationPage="local/ExampleApp/settings.html"
ValidationResult="http//validate.org/ExampleApp" />
</reply>
Upload application
The applications/upload.cgi
is used to upload applications to the Axis product. Applications are installed automatically when uploaded.
Request
- Access control
admin
- Method
POST
http://<servername>/axis-cgi/applications/upload.cgi
POST http://<servername>/axis-cgi/applications/upload.cgi HTTP/1.1
Content-Type: multipart/form-data; boundary=fileboundary
Content-Length: <content-length>
fileboundary
Content-Disposition: form-data; name="packfil"; filename="application_name"
Content-Type: application/octet-stream
<application package data>
Response
Responses to applications/upload.cgi
Success:
- Return
- HTTP Code
200 OK
- Content-Type
text/plain
OK
Error:
If the request failed, the following is returned.
- Return
- HTTP Code
200 OK
- Content-Type
text/plain
Error: <error code>
Error code | Description |
1 | No valid package. The file type should be Embedded Axis Package (eap). |
2 | Verification failed. The verification of the package content failed. This can happen if the package version is not compatible with the product or due to architecture issues. |
3 | Package too large. The package file is too large or the disk is full. |
5 | Package not compatible. The package is not compatible with the Axis product. See the product logs for more information. |
10 | Unspecified error. See the product logs for more information. |
12 | Upload currently unavailable. A package upload is ongoing. |
13 | Installation failed. The package requires a user or group that is not allowed. |
Control application
The applications/control.cgi
is used to start, stop, restart and remove the application.
Request
- Access control
admin
- Method
POST
http://<servername>/axis-cgi/applications/control.cgi?<argument>=<value>
[&<argument>=<value>...]
With the following argument and values:
Argument | Valid values | Description |
action=<string> | start stop restart remove | start = Start the application.stop = Stop the application.restart = Restart the application.remove = Remove the application. |
package=<string> | <package name> | The application to perform the action on. |
returnpage=<string> | <path to return page> | Optional. The web page to return to after performing the action. |
Response
Responses to applications/control.cgi
Success:
- Return
- HTTP Code
200 OK
- Content-Type
text/plain
OK
Error:
If the request failed, the following is returned.
- Return
- HTTP Code
200 OK
- Content-Type
text/plain
Error: <error code>
Error code | Description |
4 | Application not found. The specified application package could not be found. |
6 | The application is already running. |
7 | Application not running. The application must be running to perform the action. |
8 | Could not start application. |
9 | Too many applications are running. The application cannot be started. |
10 | Unspecified error. See the product logs for more information. |
Configure application
The applications/config.cgi
is used to access or configure settings that are usable by all applications, such as whether the device will allow both signed and unsigned applications to be installed.
Request
- Access control
admin
- Method
POST
http://<servername>/axis-cgi/applications/config.cgi?action=<action>&name=<configname>&value=<configvalue>
With the following argument and values:
Argument | Valid values | Description |
action=<string> | set get | set = Sets the value of a config parameter.get = Retrieves the value of a config parameter. |
name=<string> | AllowUnsigned | The name of the config parameter that should be operated on. Valid values are described in the Configuration parameters table below. |
value=<string> Optional | true false | Should be used when the action is set to specify the required value for the config parameter. |
Configuration name | Type | Default value | Description |
AllowUnsigned | Boolean | true | Controls whether unsigned applications can be installed. Can be either true or false (optional). |
Response
Responses to applications/config.cgi
Success:
- Return
- HTTP Code
200 OK
- Content-Type
text/xml
<reply result="ok">
<param name="configname" value="configvalue">
</reply>
<reply result="ok">
<param name="AllowUnsigned" value="true"/>
</reply>
The response body contains a key
and value
corresponding to the param name="configname"
in the request.
Parameter | Description |
param name=<key> | The parameter name. |
value=<true|false> | The parameter value. |
Error:
The following will be returned if the request failed.
- Return
- HTTP Code
200 OK
- Content-Type
text/xml
<reply result="error">
...
</reply>
<reply result="error">
<error type="32" message="An error occurred"/>
</reply>
Error code | Description |
1 | Internal error. |
32 | Unspecified error. |
Schema for config.cgi response
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="reply">
<xs:complexType>
<xs:sequence>
<xs:element name="param">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"/>
<xs:attribute type="xs:string" name="value"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="result"/>
</xs:complexType>
</xs:element>
</xs:schema>
Manage license keys
The applications/license.cgi
is used to upload, install and remove license keys.
In order to receive the license key itself, the license key file must first be obtained from www.axis.com/applications. The client must then use action=uploadlicensekey
to upload and install the license key.
To request a license key from www.axis.com/applications, a License Code and the Axis product’s serial number (S/N) are required.
Request
- Access control
admin
- Method
POST
http://<servername>/axis-cgi/applications/license.cgi?<argument>=<value>
[&<argument>=<value>...]
With the following arguments and values.
Argument | Valid values | Description |
action=<string> | uploadlicensekey removelicensekey | uploadlicensekey = Upload and install a license key.removelicensekey = Remove a license key. |
package=<string> | <package name> | The name of the application to which the license key belongs. |
Response
Responses to applications/license.cgi
Success:
- Return
- HTTP Code
200 OK
- Content-Type
text/plain
OK
Error:
If the request failed, the following is returned.
- Return
- HTTP Code
200 OK
- Content-Type
text/plain
Error: <error code>
Error code | Description |
21 | Invalid license key file. |
22 | File upload failed. |
23 | Failed to remove the license key file. |
24 | The application is not correctly installed. |
25 | The key’s application ID does not match the installed application. |
26 | The license key cannot be used with this version of the application. |
27 | Failed to connect to Axis online service. |
28 | Failed to receive license from Axis online service. |
29 | Bad configuration file for the application. |
30 | Wrong serial number. |
31 | The license key has expired. |
List installed applications
The applications/list.cgi
is used to list information about installed applications.
applications/list.cgi is supported for Properties.EmbeddedDevelopment.Version=1.20 and later.
Request
- Access control
admin
- Method
POST
http://<servername>/axis-cgi/applications/list.cgi
This CGI has no arguments.
Response
Response to applications/list.cgi
. The response is in XML format.
For the XML schema, see Schema for list.cgi response
- Return
- HTTP Code
200 OK
- Content-Type
text/xml
<reply result="ok">
<application Name="<Application Name>" NiceName="<Nice name>" Vendor="<Vendor name>"
Version="<Version>" ApplicationID="<ID>" License="<License status>"
LicenseExpirationDate="<Expiration date>" Status="<Application status>"
ConfigurationPage="<Configuration link>" ValidationResult="<Validation URL>" />
<application ... />
...
</reply>
Supported elements, attributes and values:
Element | Description | Attribute | Description |
application | Information about one application | Name | Application short name. |
NiceName | Application official name. | ||
Vendor | Application vendor. | ||
Version | Application version. | ||
ApplicationID | Application ID | ||
License | License status:Valid = License is installed and valid.Invalid = License is installed but not valid.Missing = No license is installed.Custom = Custom license is used. License status cannot be retrieved.None = Application does not require any license. | ||
LicenseExpirationDate | Date (YYYY-MM-DD) when the license expires. | ||
Status | Application status:Running = Application is running.Stopped = Application is not running.Idle = Application is idle. | ||
ConfigurationPage | Relative URL to application configuration page. | ||
ValidationResult | Complete URL to a validation or result page. |
Schema for list.cgi response
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="EnumResult">
<xs:restriction base="xs:string">
<xs:enumeration value="ok" />
<xs:enumeration value="error" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="StatusType">
<xs:restriction base="xs:string">
<xs:enumeration value="Running" />
<xs:enumeration value="Stopped" />
<xs:enumeration value="Idle" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LicenseType">
<xs:restriction base="xs:string">
<xs:enumeration value="Valid" />
<xs:enumeration value="Invalid" />
<xs:enumeration value="Missing" />
<xs:enumeration value="Custom" />
<xs:enumeration value="None" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="ErrorType">
<xs:attribute name="type" type="xs:string" use="required" />
<xs:attribute name="message" type="xs:string" use="required" />
<xs:anyAttribute processContents="lax" />
</xs:complexType>
<xs:complexType name="ApplicationType">
<xs:attribute name="Name" type="xs:string" use="required" />
<xs:attribute name="NiceName" type="xs:string" />
<xs:attribute name="Vendor" type="xs:string" />
<xs:attribute name="Version" type="xs:string" />
<xs:attribute name="ApplicationID" type="xs:integer" />
<xs:attribute name="License" type="LicenseType" />
<xs:attribute name="LicenseExpirationDate" type="xs:string" />
<xs:attribute name="Status" type="StatusType" />
<xs:attribute name="ConfigurationPage" type="xs:string" />
<xs:attribute name="ValidationResult" type="xs:string" />
<xs:anyAttribute processContents="lax" />
</xs:complexType>
<xs:element name="reply">
<xs:complexType>
<xs:choice>
<xs:element name="application" type="ApplicationType" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="error" type="ErrorType" minOccurs="0" />
</xs:choice>
<xs:attribute name="result" type="EnumResult" />
</xs:complexType>
</xs:element>
</xs:schema>
Read general information
The applications/info.cgi
is used to retrieve general information related to the applications currently running on your device.
Request
- Access control
admin
- Method
POST
http://<servername>/axis-cgi/applications/info.cgi
This CGI has no arguments.
Response
Responses to applications/info.cgi
.
Success:
- Return
- HTTP Code
200 OK
- Content-Type
text/xml
<reply result ="ok">
<supportedSdks>
<sdk>acap3</sdk>
<sdk>acap4-native</sdk>
<sdk>acap4-cv</sdk>
</supportedSdks>
</reply>
Supported elements, attributes and values:
Argument | Description |
supportedSdks | SDKs whose applications able to run on the device. |
sdk | A specific SDK. |
Error:
If the request failed, the following is returned.
- Return
- HTTP Code
200 OK
- Content-Type
text/xml
<reply result="error">
<error type="32" message=<"An error occurred"/>
</reply>
Error code | Description |
32 | Unspecified error. |