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.

/switches/{switchId}/actions

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&timestamp__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&timestamp__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&timestamp__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&timestamp__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));