curl --request POST \
--url https://acusight.io/api/device/checkin \
--header 'Content-Type: application/json' \
--header 'X-Device-Key: <api-key>' \
--data '
{
"agent_time": "<string>",
"current_model_id": "<string>",
"ip_address": "<string>",
"metrics": {},
"observed_configs": [
123
],
"observed_image_digest": "<string>",
"pipeline_states": [
{
"current_config": [
123
],
"current_topology": [
123
],
"metadata": [
123
],
"name": "<string>",
"nodes": [
123
],
"pipeline_id": "<string>",
"running_model_version_id": 123,
"stream_path": "<string>",
"video_source_url": "<string>"
}
],
"running_model_version_id": 123,
"state_version": "<string>",
"status": "healthy"
}
'import requests
url = "https://acusight.io/api/device/checkin"
payload = {
"agent_time": "<string>",
"current_model_id": "<string>",
"ip_address": "<string>",
"metrics": {},
"observed_configs": [123],
"observed_image_digest": "<string>",
"pipeline_states": [
{
"current_config": [123],
"current_topology": [123],
"metadata": [123],
"name": "<string>",
"nodes": [123],
"pipeline_id": "<string>",
"running_model_version_id": 123,
"stream_path": "<string>",
"video_source_url": "<string>"
}
],
"running_model_version_id": 123,
"state_version": "<string>",
"status": "healthy"
}
headers = {
"X-Device-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Device-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
agent_time: '<string>',
current_model_id: '<string>',
ip_address: '<string>',
metrics: {},
observed_configs: [123],
observed_image_digest: '<string>',
pipeline_states: [
{
current_config: [123],
current_topology: [123],
metadata: [123],
name: '<string>',
nodes: [123],
pipeline_id: '<string>',
running_model_version_id: 123,
stream_path: '<string>',
video_source_url: '<string>'
}
],
running_model_version_id: 123,
state_version: '<string>',
status: 'healthy'
})
};
fetch('https://acusight.io/api/device/checkin', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://acusight.io/api/device/checkin",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'agent_time' => '<string>',
'current_model_id' => '<string>',
'ip_address' => '<string>',
'metrics' => [
],
'observed_configs' => [
123
],
'observed_image_digest' => '<string>',
'pipeline_states' => [
[
'current_config' => [
123
],
'current_topology' => [
123
],
'metadata' => [
123
],
'name' => '<string>',
'nodes' => [
123
],
'pipeline_id' => '<string>',
'running_model_version_id' => 123,
'stream_path' => '<string>',
'video_source_url' => '<string>'
]
],
'running_model_version_id' => 123,
'state_version' => '<string>',
'status' => 'healthy'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Device-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://acusight.io/api/device/checkin"
payload := strings.NewReader("{\n \"agent_time\": \"<string>\",\n \"current_model_id\": \"<string>\",\n \"ip_address\": \"<string>\",\n \"metrics\": {},\n \"observed_configs\": [\n 123\n ],\n \"observed_image_digest\": \"<string>\",\n \"pipeline_states\": [\n {\n \"current_config\": [\n 123\n ],\n \"current_topology\": [\n 123\n ],\n \"metadata\": [\n 123\n ],\n \"name\": \"<string>\",\n \"nodes\": [\n 123\n ],\n \"pipeline_id\": \"<string>\",\n \"running_model_version_id\": 123,\n \"stream_path\": \"<string>\",\n \"video_source_url\": \"<string>\"\n }\n ],\n \"running_model_version_id\": 123,\n \"state_version\": \"<string>\",\n \"status\": \"healthy\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Device-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://acusight.io/api/device/checkin")
.header("X-Device-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"agent_time\": \"<string>\",\n \"current_model_id\": \"<string>\",\n \"ip_address\": \"<string>\",\n \"metrics\": {},\n \"observed_configs\": [\n 123\n ],\n \"observed_image_digest\": \"<string>\",\n \"pipeline_states\": [\n {\n \"current_config\": [\n 123\n ],\n \"current_topology\": [\n 123\n ],\n \"metadata\": [\n 123\n ],\n \"name\": \"<string>\",\n \"nodes\": [\n 123\n ],\n \"pipeline_id\": \"<string>\",\n \"running_model_version_id\": 123,\n \"stream_path\": \"<string>\",\n \"video_source_url\": \"<string>\"\n }\n ],\n \"running_model_version_id\": 123,\n \"state_version\": \"<string>\",\n \"status\": \"healthy\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://acusight.io/api/device/checkin")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Device-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agent_time\": \"<string>\",\n \"current_model_id\": \"<string>\",\n \"ip_address\": \"<string>\",\n \"metrics\": {},\n \"observed_configs\": [\n 123\n ],\n \"observed_image_digest\": \"<string>\",\n \"pipeline_states\": [\n {\n \"current_config\": [\n 123\n ],\n \"current_topology\": [\n 123\n ],\n \"metadata\": [\n 123\n ],\n \"name\": \"<string>\",\n \"nodes\": [\n 123\n ],\n \"pipeline_id\": \"<string>\",\n \"running_model_version_id\": 123,\n \"stream_path\": \"<string>\",\n \"video_source_url\": \"<string>\"\n }\n ],\n \"running_model_version_id\": 123,\n \"state_version\": \"<string>\",\n \"status\": \"healthy\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"actions": [
{
"config_payload": [
123
],
"download_url": "<string>",
"file_ext": "<string>",
"label_map": "<string>",
"model_config": "<string>",
"model_name": "<string>",
"model_version_id": 123,
"pipeline_id": "<string>",
"type": "<string>",
"version": "<string>"
}
],
"clock_drift_seconds": 123,
"poll_interval_seconds": 123,
"state_version": "<string>"
},
"error": {
"code": "<string>",
"details": "<string>",
"message": "<string>"
},
"meta": {
"count": 123,
"limit": 123,
"offset": 123,
"total": 123
},
"success": true
}{
"data": "<unknown>",
"error": {
"code": "<string>",
"details": "<string>",
"message": "<string>"
},
"meta": {
"count": 123,
"limit": 123,
"offset": 123,
"total": 123
},
"success": true
}{
"data": "<unknown>",
"error": {
"code": "<string>",
"details": "<string>",
"message": "<string>"
},
"meta": {
"count": 123,
"limit": 123,
"offset": 123,
"total": 123
},
"success": true
}Device health check-in
Reports device health status and model state. Returns deployment instructions if desired state differs from actual state.
curl --request POST \
--url https://acusight.io/api/device/checkin \
--header 'Content-Type: application/json' \
--header 'X-Device-Key: <api-key>' \
--data '
{
"agent_time": "<string>",
"current_model_id": "<string>",
"ip_address": "<string>",
"metrics": {},
"observed_configs": [
123
],
"observed_image_digest": "<string>",
"pipeline_states": [
{
"current_config": [
123
],
"current_topology": [
123
],
"metadata": [
123
],
"name": "<string>",
"nodes": [
123
],
"pipeline_id": "<string>",
"running_model_version_id": 123,
"stream_path": "<string>",
"video_source_url": "<string>"
}
],
"running_model_version_id": 123,
"state_version": "<string>",
"status": "healthy"
}
'import requests
url = "https://acusight.io/api/device/checkin"
payload = {
"agent_time": "<string>",
"current_model_id": "<string>",
"ip_address": "<string>",
"metrics": {},
"observed_configs": [123],
"observed_image_digest": "<string>",
"pipeline_states": [
{
"current_config": [123],
"current_topology": [123],
"metadata": [123],
"name": "<string>",
"nodes": [123],
"pipeline_id": "<string>",
"running_model_version_id": 123,
"stream_path": "<string>",
"video_source_url": "<string>"
}
],
"running_model_version_id": 123,
"state_version": "<string>",
"status": "healthy"
}
headers = {
"X-Device-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Device-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
agent_time: '<string>',
current_model_id: '<string>',
ip_address: '<string>',
metrics: {},
observed_configs: [123],
observed_image_digest: '<string>',
pipeline_states: [
{
current_config: [123],
current_topology: [123],
metadata: [123],
name: '<string>',
nodes: [123],
pipeline_id: '<string>',
running_model_version_id: 123,
stream_path: '<string>',
video_source_url: '<string>'
}
],
running_model_version_id: 123,
state_version: '<string>',
status: 'healthy'
})
};
fetch('https://acusight.io/api/device/checkin', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://acusight.io/api/device/checkin",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'agent_time' => '<string>',
'current_model_id' => '<string>',
'ip_address' => '<string>',
'metrics' => [
],
'observed_configs' => [
123
],
'observed_image_digest' => '<string>',
'pipeline_states' => [
[
'current_config' => [
123
],
'current_topology' => [
123
],
'metadata' => [
123
],
'name' => '<string>',
'nodes' => [
123
],
'pipeline_id' => '<string>',
'running_model_version_id' => 123,
'stream_path' => '<string>',
'video_source_url' => '<string>'
]
],
'running_model_version_id' => 123,
'state_version' => '<string>',
'status' => 'healthy'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Device-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://acusight.io/api/device/checkin"
payload := strings.NewReader("{\n \"agent_time\": \"<string>\",\n \"current_model_id\": \"<string>\",\n \"ip_address\": \"<string>\",\n \"metrics\": {},\n \"observed_configs\": [\n 123\n ],\n \"observed_image_digest\": \"<string>\",\n \"pipeline_states\": [\n {\n \"current_config\": [\n 123\n ],\n \"current_topology\": [\n 123\n ],\n \"metadata\": [\n 123\n ],\n \"name\": \"<string>\",\n \"nodes\": [\n 123\n ],\n \"pipeline_id\": \"<string>\",\n \"running_model_version_id\": 123,\n \"stream_path\": \"<string>\",\n \"video_source_url\": \"<string>\"\n }\n ],\n \"running_model_version_id\": 123,\n \"state_version\": \"<string>\",\n \"status\": \"healthy\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Device-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://acusight.io/api/device/checkin")
.header("X-Device-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"agent_time\": \"<string>\",\n \"current_model_id\": \"<string>\",\n \"ip_address\": \"<string>\",\n \"metrics\": {},\n \"observed_configs\": [\n 123\n ],\n \"observed_image_digest\": \"<string>\",\n \"pipeline_states\": [\n {\n \"current_config\": [\n 123\n ],\n \"current_topology\": [\n 123\n ],\n \"metadata\": [\n 123\n ],\n \"name\": \"<string>\",\n \"nodes\": [\n 123\n ],\n \"pipeline_id\": \"<string>\",\n \"running_model_version_id\": 123,\n \"stream_path\": \"<string>\",\n \"video_source_url\": \"<string>\"\n }\n ],\n \"running_model_version_id\": 123,\n \"state_version\": \"<string>\",\n \"status\": \"healthy\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://acusight.io/api/device/checkin")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Device-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agent_time\": \"<string>\",\n \"current_model_id\": \"<string>\",\n \"ip_address\": \"<string>\",\n \"metrics\": {},\n \"observed_configs\": [\n 123\n ],\n \"observed_image_digest\": \"<string>\",\n \"pipeline_states\": [\n {\n \"current_config\": [\n 123\n ],\n \"current_topology\": [\n 123\n ],\n \"metadata\": [\n 123\n ],\n \"name\": \"<string>\",\n \"nodes\": [\n 123\n ],\n \"pipeline_id\": \"<string>\",\n \"running_model_version_id\": 123,\n \"stream_path\": \"<string>\",\n \"video_source_url\": \"<string>\"\n }\n ],\n \"running_model_version_id\": 123,\n \"state_version\": \"<string>\",\n \"status\": \"healthy\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"actions": [
{
"config_payload": [
123
],
"download_url": "<string>",
"file_ext": "<string>",
"label_map": "<string>",
"model_config": "<string>",
"model_name": "<string>",
"model_version_id": 123,
"pipeline_id": "<string>",
"type": "<string>",
"version": "<string>"
}
],
"clock_drift_seconds": 123,
"poll_interval_seconds": 123,
"state_version": "<string>"
},
"error": {
"code": "<string>",
"details": "<string>",
"message": "<string>"
},
"meta": {
"count": 123,
"limit": 123,
"offset": 123,
"total": 123
},
"success": true
}{
"data": "<unknown>",
"error": {
"code": "<string>",
"details": "<string>",
"message": "<string>"
},
"meta": {
"count": 123,
"limit": 123,
"offset": 123,
"total": 123
},
"success": true
}{
"data": "<unknown>",
"error": {
"code": "<string>",
"details": "<string>",
"message": "<string>"
},
"meta": {
"count": 123,
"limit": 123,
"offset": 123,
"total": 123
},
"success": true
}Authorizations
Device API key for edge agent authentication. Format: adk_
Body
Check-in data with status, metrics, and running model
Agent's current UTC time — server computes clock drift
Agent compat: string version of model ID
Agent-reported LAN IP for live streaming
Key-value pairs of device metrics (cpu_usage, memory_usage, etc.)
ObservedConfigs is the {filename: yaml-string} map the agent read from the shared acusight-streamproc-configs volume. Optional; older agents that don't send this leave device_streamproc_state.observed_configs unchanged. Spec §6.6a, §7.
ObservedImageDigest is the docker-inspect digest of the streamproc container's image. Optional; same backward-compat rule as ObservedConfigs.
Per-pipeline model state
Show child attributes
Show child attributes
Actual model state reported by agent
Last state_version received — enables server-side short-circuit
"healthy"
Was this page helpful?