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
Sample Requests
Get firmware version from an Axis camera.
Hover any highlighted part to learn what it does
| 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));Access the live MJPEG video stream directly from the camera.
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));Move a PTZ camera 10° right and 5° up.
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
What can you build with Axis VAPIX / ACAP API?
Axis VAPIX / ACAP API is a Security API. Developers commonly use security APIs for:
- adding multi-factor authentication to your app
- validating identity documents and biometrics
- monitoring for data breaches and leaked credentials
- running background checks and fraud screening
- scanning code and infrastructure for vulnerabilities
Basic authentication. Send your username and password (Base64-encoded) in the Authorization header. Always use HTTPS — Basic auth over plain HTTP exposes your credentials. Axis VAPIX / ACAP API is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide · Learn about API keys · What is REST?