9.18.2025 - API Updates
New Endpoints
The following resources have been added to the Eagle Eye API.
Switch Action
You can now use the API to perform actions on a specific switch. Currently, only the reboot action is supported.
curl --request POST \
--url https://api.cxxx.eagleeyenetworks.com/api/v3.0/switches/10058b7a/actions \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{"action":"reboot"}'
using RestSharp;
var options = new RestClientOptions("https://api.cxxx.eagleeyenetworks.com/api/v3.0/switches/10058b7a/actions");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"action\":\"reboot\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
import requests
url = "https://api.cxxx.eagleeyenetworks.com/api/v3.0/switches/10058b7a/actions"
payload = { "action": "reboot" }
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const url = 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/switches/10058b7a/actions';
const options = {
method: 'POST',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: JSON.stringify({action: 'reboot'})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
Updated Endpoints
The following Eagle Eye API resources have been updated.
Automations
New Alert Action: EBÜS
For our German-speaking customers, A new Alert action has been added to allow notifications through the EBÜS alarm receiving center software. This action can be configured by sending a POST request to the /alertActions
endpoint.
Alert Conditions: Cooldown Timers
Cooldown timers can now be set for Alert Conditions. Once an alert condition is triggered, any additional alerts will be suppressed until the cooldown period expires. In addition, a default cooldown time of 10 seconds will be applied to all new alert conditions.
POST - /eventAlertConditionRules
curl --request POST \
--url https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"enabled": true,
"cooldownSeconds": 30,
"humanValidation": {
"service": "eenV1",
"maxWaitTimeSeconds": 30
},
"eventFilter": {
"resourceFilter": {
"actors": [
"camera:100d4c41"
]
},
"eventTypes": [
"een.personDetectionEvent.v1"
]
},
"priority": 5,
"name": "Demo Alert"
}
'
using RestSharp;
var options = new RestClientOptions("https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"enabled\":true,\"cooldownSeconds\":30,\"humanValidation\":{\"service\":\"eenV1\",\"maxWaitTimeSeconds\":30},\"eventFilter\":{\"resourceFilter\":{\"actors\":[\"camera:100d4c41\"]},\"eventTypes\":[\"een.personDetectionEvent.v1\"]},\"priority\":5,\"name\":\"Demo Alert\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
import requests
url = "https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules"
payload = {
"enabled": True,
"cooldownSeconds": 30,
"humanValidation": {
"service": "eenV1",
"maxWaitTimeSeconds": 30
},
"eventFilter": {
"resourceFilter": { "actors": ["camera:100d4c41"] },
"eventTypes": ["een.personDetectionEvent.v1"]
},
"priority": 5,
"name": "Demo Alert"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const url = 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules';
const options = {
method: 'POST',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: JSON.stringify({
enabled: true,
cooldownSeconds: 30,
humanValidation: {service: 'eenV1', maxWaitTimeSeconds: 30},
eventFilter: {
resourceFilter: {actors: ['camera:100d4c41']},
eventTypes: ['een.personDetectionEvent.v1']
},
priority: 5,
name: 'Demo Alert'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
Alert Conditions: Location ID Filtering
Location IDs can now be used as a filter for an alert condition. If defined, the rule will only trigger on alerts about actors from the given locations.
POST - /eventAlertConditionRules
curl --request POST \
--url https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"enabled": true,
"humanValidation": {
"service": "eenV1",
"maxWaitTimeSeconds": 30
},
"eventFilter": {
"resourceFilter": {
"actors": [
"location:2428fda3-389f-48ce-b062-85875dd6b2e2"
]
},
"eventTypes": [
"een.personDetectionEvent.v1"
]
},
"priority": 5,
"name": "Location Alert"
}
'
using RestSharp;
var options = new RestClientOptions("https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"enabled\":true,\"humanValidation\":{\"service\":\"eenV1\",\"maxWaitTimeSeconds\":30},\"eventFilter\":{\"resourceFilter\":{\"actors\":[\"location:2428fda3-389f-48ce-b062-85875dd6b2e2\"]},\"eventTypes\":[\"een.personDetectionEvent.v1\"]},\"priority\":5,\"name\":\"Location Alert\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
import requests
url = "https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules"
payload = {
"enabled": True,
"humanValidation": {
"service": "eenV1",
"maxWaitTimeSeconds": 30
},
"eventFilter": {
"resourceFilter": { "actors": ["location:2428fda3-389f-48ce-b062-85875dd6b2e2"] },
"eventTypes": ["een.personDetectionEvent.v1"]
},
"priority": 5,
"name": "Location Alert"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const url = 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules';
const options = {
method: 'POST',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: JSON.stringify({
enabled: true,
humanValidation: {service: 'eenV1', maxWaitTimeSeconds: 30},
eventFilter: {
resourceFilter: {actors: ['location:2428fda3-389f-48ce-b062-85875dd6b2e2']},
eventTypes: ['een.personDetectionEvent.v1']
},
priority: 5,
name: 'Location Alert'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
Human Verification: Max Wait Time
The Maximum Wait Time can now be configured for Human validation of alerts. If the human validation is not completed within the selected time, the alert will be applied automatically.
POST - /eventAlertConditionRules
curl --request POST \
--url https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"enabled": true,
"humanValidation": {
"service": "eenV1",
"maxWaitTimeSeconds": 30,
"enabled": true
},
"eventFilter": {
"resourceFilter": {
"actors": [
"camera:100d4c41"
]
},
"eventTypes": [
"een.personDetectionEvent.v1"
]
},
"priority": 5,
"name": "Location Alert"
}
'
using RestSharp;
var options = new RestClientOptions("https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"enabled\":true,\"humanValidation\":{\"service\":\"eenV1\",\"maxWaitTimeSeconds\":30,\"enabled\":true},\"eventFilter\":{\"resourceFilter\":{\"actors\":[\"camera:100d4c41\"]},\"eventTypes\":[\"een.personDetectionEvent.v1\"]},\"priority\":5,\"name\":\"Location Alert\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
import requests
url = "https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules"
payload = {
"enabled": True,
"humanValidation": {
"service": "eenV1",
"maxWaitTimeSeconds": 30,
"enabled": True
},
"eventFilter": {
"resourceFilter": { "actors": ["camera:100d4c41"] },
"eventTypes": ["een.personDetectionEvent.v1"]
},
"priority": 5,
"name": "Location Alert"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const url = 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/eventAlertConditionRules';
const options = {
method: 'POST',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: JSON.stringify({
enabled: true,
humanValidation: {service: 'eenV1', maxWaitTimeSeconds: 30, enabled: true},
eventFilter: {
resourceFilter: {actors: ['camera:100d4c41']},
eventTypes: ['een.personDetectionEvent.v1']
},
priority: 5,
name: 'Location Alert'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
Media
Recorded Media: HLS Streaming
HLS (HTTPS Live Streaming) URLs can now be returned when requesting high-resolution recorded video via /media.
curl --request GET \
--url 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/media?deviceId=10058b7a&type=main&mediaType=video&startTimestamp__gte=2022-08-08T07%3A57%3A37.000%2B00%3A00&endTimestamp__lte=2022-08-08T08%3A57%3A37.000%2B00%3A00&coalesce=true&include=hlsUrl&pageSize=100' \
--header 'accept: application/json'
const url = 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/media?deviceId=10058b7a&type=main&mediaType=video&startTimestamp__gte=2022-08-08T07%3A57%3A37.000%2B00%3A00&endTimestamp__lte=2022-08-08T08%3A57%3A37.000%2B00%3A00&coalesce=true&include=hlsUrl&pageSize=100';
const options = {method: 'GET', headers: {accept: 'application/json'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
import requests
url = "https://api.cxxx.eagleeyenetworks.com/api/v3.0/media?deviceId=10058b7a&type=main&mediaType=video&startTimestamp__gte=2022-08-08T07%3A57%3A37.000%2B00%3A00&endTimestamp__lte=2022-08-08T08%3A57%3A37.000%2B00%3A00&coalesce=true&include=hlsUrl&pageSize=100"
headers = {"accept": "application/json"}
response = requests.get(url, headers=headers)
print(response.text)
using RestSharp;
var options = new RestClientOptions("https://api.cxxx.eagleeyenetworks.com/api/v3.0/media?deviceId=10058b7a&type=main&mediaType=video&startTimestamp__gte=2022-08-08T07%3A57%3A37.000%2B00%3A00&endTimestamp__lte=2022-08-08T08%3A57%3A37.000%2B00%3A00&coalesce=true&include=hlsUrl&pageSize=100");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
Recorded Image: Height and Width Selection
A target height and/or width can now be specified when requesting a recorded JPEG image via /media/recordedImage.jpeg.
curl --request GET \
--url 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/media/recordedImage.jpeg?deviceId=10058b7a×tamp__gte=2022-08-08T07%3A57%3A37.000%2B00%3A00&overlayId__in=&targetWidth=1920&targetHeight=1080' \
--header 'accept: image/jpeg'
using RestSharp;
var options = new RestClientOptions("https://api.cxxx.eagleeyenetworks.com/api/v3.0/media/recordedImage.jpeg?deviceId=10058b7a×tamp__gte=2022-08-08T07%3A57%3A37.000%2B00%3A00&overlayId__in=&targetWidth=1920&targetHeight=1080");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "image/jpeg");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
import requests
url = "https://api.cxxx.eagleeyenetworks.com/api/v3.0/media/recordedImage.jpeg?deviceId=10058b7a×tamp__gte=2022-08-08T07%3A57%3A37.000%2B00%3A00&overlayId__in=&targetWidth=1920&targetHeight=1080"
headers = {"accept": "image/jpeg"}
response = requests.get(url, headers=headers)
print(response.text)
const url = 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/media/recordedImage.jpeg?deviceId=10058b7a×tamp__gte=2022-08-08T07%3A57%3A37.000%2B00%3A00&overlayId__in=&targetWidth=1920&targetHeight=1080';
const options = {method: 'GET', headers: {accept: 'image/jpeg'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
Video Search
Person Detection: Secondary Clothing Colors
Person detection events may now classify the secondary color of the detected person's clothing.
Vehicle Detection: Display Ready Body Type
Vehicle Detection events will now include a UI ready display name for the body type of the vehicle
Vehicle Surveillance: User Tag Filtering
LPR Events, Vehicle Lists, and Vehicles (from a vehicle list) can now be filtered by UserTag
Locations: Location ID Filtering
ID lists can now be used as a filter for /locations and /locations/{id}/locations requests.
Bridge Settings: Measured Bandwidth
Measured bandwidth is now returned by a GET /bridges/{id}/settings/ request. This value is updated periodically and can be used to determine the current network conditions.
Authorization Tokens: Identity Tokens
Identity Tokens can now be generated by the /authorizationTokens endpoint.
import requests
url = "https://auth.eagleeyenetworks.com/api/v3.0/authorizationTokens"
payload = {
"scopes": ["vms.all"],
"type": "identity",
"targetType": "account",
"targetId": "00000123"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
using RestSharp;
var options = new RestClientOptions("https://auth.eagleeyenetworks.com/api/v3.0/authorizationTokens");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"scopes\":[\"vms.all\"],\"type\":\"identity\",\"targetType\":\"account\",\"targetId\":\"00000123\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
import requests
url = "https://auth.eagleeyenetworks.com/api/v3.0/authorizationTokens"
payload = {
"scopes": ["vms.all"],
"type": "identity",
"targetType": "account",
"targetId": "00000123"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const url = 'https://auth.eagleeyenetworks.com/api/v3.0/authorizationTokens';
const options = {
method: 'POST',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: JSON.stringify({
scopes: ['vms.all'],
type: 'identity',
targetType: 'account',
targetId: '00000123'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));
SSO: Brivo Security Suite
Brivo Security Suite has been added as an SSO option. The option is only available for BSS clients.
curl --request PATCH \
--url https://api.cxxx.eagleeyenetworks.com/api/v3.0/accounts/self/ssoAuthSettings \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"type": "bss",
"environment": "production"
}
'
using RestSharp;
var options = new RestClientOptions("https://api.cxxx.eagleeyenetworks.com/api/v3.0/accounts/self/ssoAuthSettings");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"type\":\"bss\",\"environment\":\"production\"}", false);
var response = await client.PatchAsync(request);
Console.WriteLine("{0}", response.Content);
import requests
url = "https://api.cxxx.eagleeyenetworks.com/api/v3.0/accounts/self/ssoAuthSettings"
payload = {
"type": "bss",
"environment": "production"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)
const url = 'https://api.cxxx.eagleeyenetworks.com/api/v3.0/accounts/self/ssoAuthSettings';
const options = {
method: 'PATCH',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: JSON.stringify({type: 'bss', environment: 'production'})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));