Axis VAPIX / ACAP API
developer.axis.com · Security
Axis Communications device API — VAPIX for direct camera configuration, live streams, PTZ control, event subscriptions, and analytics. ACAP SDK for building apps that run on-camera. Used by Milestone, Genetec, and VMS integrators worldwide.
Authentication
Basic Auth
HTTP Digest or Basic authentication using the camera's admin credentials. HTTPS strongly recommended.
Sample Requests
GET
Get camera info
Get firmware version from an Axis camera.
http://YOUR_AXIS_CAMERA_IP/axis-cgi/param.cgi?action=list&group=Properties.Firmware
Hover any highlighted part to learn what it does
Headers — extra info sent with the request
| Authorization | Digest admin:PASSWORD |
curl -X GET "http://YOUR_AXIS_CAMERA_IP/axis-cgi/param.cgi?action=list&group=Properties.Firmware" \ -H "Authorization: Basic YOUR_BASE64_CREDENTIALS"
import requests
headers = {
"Authorization": "Basic YOUR_BASE64_CREDENTIALS"
}
response = requests.get(
"http://YOUR_AXIS_CAMERA_IP/axis-cgi/param.cgi?action=list&group=Properties.Firmware",
headers=headers,
)
print(response.json())const url = 'http://YOUR_AXIS_CAMERA_IP/axis-cgi/param.cgi?action=list&group=Properties.Firmware';
const response = await fetch(url, {
headers: {
'Authorization': 'Basic YOUR_BASE64_CREDENTIALS'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "http://YOUR_AXIS_CAMERA_IP/axis-cgi/param.cgi?action=list&group=Properties.Firmware"
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("Authorization", "Basic YOUR_BASE64_CREDENTIALS")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("http://YOUR_AXIS_CAMERA_IP/axis-cgi/param.cgi?action=list&group=Properties.Firmware")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Basic YOUR_BASE64_CREDENTIALS"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "http://YOUR_AXIS_CAMERA_IP/axis-cgi/param.cgi?action=list&group=Properties.Firmware";
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"Authorization: Basic YOUR_BASE64_CREDENTIALS"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET
Live MJPEG stream
Access the live MJPEG video stream directly from the camera.
http://YOUR_AXIS_CAMERA_IP/axis-cgi/mjpg/video.mjpg
Hover any highlighted part to learn what it does
curl -X GET "http://YOUR_AXIS_CAMERA_IP/axis-cgi/mjpg/video.mjpg" \ -H "Authorization: Basic YOUR_BASE64_CREDENTIALS"
import requests
headers = {
"Authorization": "Basic YOUR_BASE64_CREDENTIALS"
}
response = requests.get(
"http://YOUR_AXIS_CAMERA_IP/axis-cgi/mjpg/video.mjpg",
headers=headers,
)
print(response.json())const url = 'http://YOUR_AXIS_CAMERA_IP/axis-cgi/mjpg/video.mjpg';
const response = await fetch(url, {
headers: {
'Authorization': 'Basic YOUR_BASE64_CREDENTIALS'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "http://YOUR_AXIS_CAMERA_IP/axis-cgi/mjpg/video.mjpg"
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("Authorization", "Basic YOUR_BASE64_CREDENTIALS")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("http://YOUR_AXIS_CAMERA_IP/axis-cgi/mjpg/video.mjpg")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Basic YOUR_BASE64_CREDENTIALS"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "http://YOUR_AXIS_CAMERA_IP/axis-cgi/mjpg/video.mjpg";
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"Authorization: Basic YOUR_BASE64_CREDENTIALS"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET
PTZ control
Move a PTZ camera 10° right and 5° up.
http://YOUR_AXIS_CAMERA_IP/axis-cgi/com/ptz.cgi?pan=10&tilt=5&zoom=0
Hover any highlighted part to learn what it does
curl -X GET "http://YOUR_AXIS_CAMERA_IP/axis-cgi/com/ptz.cgi?pan=10&tilt=5&zoom=0" \ -H "Authorization: Basic YOUR_BASE64_CREDENTIALS"
import requests
headers = {
"Authorization": "Basic YOUR_BASE64_CREDENTIALS"
}
response = requests.get(
"http://YOUR_AXIS_CAMERA_IP/axis-cgi/com/ptz.cgi?pan=10&tilt=5&zoom=0",
headers=headers,
)
print(response.json())const url = 'http://YOUR_AXIS_CAMERA_IP/axis-cgi/com/ptz.cgi?pan=10&tilt=5&zoom=0';
const response = await fetch(url, {
headers: {
'Authorization': 'Basic YOUR_BASE64_CREDENTIALS'
},
});
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "http://YOUR_AXIS_CAMERA_IP/axis-cgi/com/ptz.cgi?pan=10&tilt=5&zoom=0"
req, _ := http.NewRequest("GET", targetURL, nil)
req.Header.Set("Authorization", "Basic YOUR_BASE64_CREDENTIALS")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("http://YOUR_AXIS_CAMERA_IP/axis-cgi/com/ptz.cgi?pan=10&tilt=5&zoom=0")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Basic YOUR_BASE64_CREDENTIALS"
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "http://YOUR_AXIS_CAMERA_IP/axis-cgi/com/ptz.cgi?pan=10&tilt=5&zoom=0";
$opts = ["http" => [
"method" => "GET",
"header" => implode("\r\n", [
"Authorization: Basic YOUR_BASE64_CREDENTIALS"
]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- VAPIX runs directly on each Axis camera — no cloud account needed
- Replace YOUR_CAMERA_IP with the camera's IP address on your network
- Use HTTP Digest auth with admin credentials
- Full VAPIX documentation at developer.axis.com/vapix/
- For cloud/enterprise: use AXIS Camera Application Platform (ACAP) or AXIS Body Worn API