https://www.brainiac.software/api/v1/robotics-intelligence/rosbag-telemetry-parse$0.04 USDCParse ROS bag telemetry exports
Parse caller-supplied ROS bag topic CSV/JSON exports into labeled telemetry samples. Binary .bag/.mcap files are not fully decoded and live robots are not contacted.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"samples": [
{
"id": "S1",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:00.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S2",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:01.000Z",
"field": "position[0]",
"value": 0.13,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S3",
"robotId": "R1",
"topic": "/tcp_force",
"at": "2026-11-01T10:00:00.000Z",
"field": "force_z",
"value": 12,
"unit": "N",
"source": "Caller-supplied bag export"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "parsed",
"topicCount": 2,
"sampleCount": 3,
"topics": [
{
"topic": "/joint_states",
"sampleCount": 2,
"fieldCount": 1,
"robotIds": [
"R1"
],
"firstAt": "2026-11-01T10:00:00.000Z",
"lastAt": "2026-11-01T10:00:01.000Z"
},
{
"topic": "/tcp_force",
"sampleCount": 1,
"fieldCount": 1,
"robotIds": [
"R1"
],
"firstAt": "2026-11-01T10:00:00.000Z",
"lastAt": "2026-11-01T10:00:00.000Z"
}
],
"samples": [
{
"id": "S1",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:00.000Z",
"field": "position[0]",
"value": 0.12,
"valueSupplied": true,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S2",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:01.000Z",
"field": "position[0]",
"value": 0.13,
"valueSupplied": true,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S3",
"robotId": "R1",
"topic": "/tcp_force",
"at": "2026-11-01T10:00:00.000Z",
"field": "force_z",
"value": 12,
"valueSupplied": true,
"unit": "N",
"source": "Caller-supplied bag export"
}
],
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"paidProviderUsed": false,
"apiKeyRequired": false,
"findings": [],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/rosbag-telemetry-parse" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"samples": [
{
"id": "S1",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:00.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S2",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:01.000Z",
"field": "position[0]",
"value": 0.13,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S3",
"robotId": "R1",
"topic": "/tcp_force",
"at": "2026-11-01T10:00:00.000Z",
"field": "force_z",
"value": 12,
"unit": "N",
"source": "Caller-supplied bag export"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/ros-topic-schema-diff$0.03 USDCDiff ROS topic schemas
Compare caller-supplied left/right ROS topic message types and fields. Missing schemas are not invented.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"schemas": [
{
"id": "A1",
"topic": "/joint_states",
"side": "left",
"messageType": "sensor_msgs/JointState",
"fields": [
{
"name": "position",
"type": "float64[]"
},
{
"name": "velocity",
"type": "float64[]"
}
],
"source": "Caller-supplied"
},
{
"id": "B1",
"topic": "/joint_states",
"side": "right",
"messageType": "sensor_msgs/JointState",
"fields": [
{
"name": "position",
"type": "float64[]"
},
{
"name": "effort",
"type": "float64[]"
}
],
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "compared",
"topicCount": 1,
"items": [
{
"topic": "/joint_states",
"matched": true,
"messageTypeMatch": true,
"leftMessageType": "sensor_msgs/JointState",
"rightMessageType": "sensor_msgs/JointState",
"leftFieldCount": 2,
"rightFieldCount": 2,
"addedFields": [
"effort"
],
"removedFields": [
"velocity"
],
"typeChanges": []
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"findings": [
{
"kind": "conflict",
"code": "schema_diff",
"subject": "/joint_states",
"detail": "Caller-supplied left/right topic schemas differ."
}
],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/ros-topic-schema-diff" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"schemas": [
{
"id": "A1",
"topic": "/joint_states",
"side": "left",
"messageType": "sensor_msgs/JointState",
"fields": [
{
"name": "position",
"type": "float64[]"
},
{
"name": "velocity",
"type": "float64[]"
}
],
"source": "Caller-supplied"
},
{
"id": "B1",
"topic": "/joint_states",
"side": "right",
"messageType": "sensor_msgs/JointState",
"fields": [
{
"name": "position",
"type": "float64[]"
},
{
"name": "effort",
"type": "float64[]"
}
],
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/telemetry-anomaly-detect$0.04 USDCDetect robot telemetry anomalies
Flag caller-supplied telemetry samples whose z-score is outside ±3 of the supplied series mean. Live equipment is not contacted.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"samples": [
{
"id": "S1",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:00.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S2",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:01.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S3",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:02.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S4",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:03.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S5",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:04.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S6",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:05.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S7",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:06.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S8",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:07.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S9",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:08.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S10",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:09.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S11",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:10.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S12",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:11.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S13",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:12.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S14",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:13.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S15",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:14.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S16",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:15.000Z",
"field": "position[0]",
"value": 2,
"unit": "rad",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "detected",
"seriesCount": 1,
"anomalyCount": 1,
"items": [
{
"id": "S16",
"robotId": "R1",
"topic": "/joint_states",
"field": "position[0]",
"at": "2026-11-01T10:00:15.000Z",
"value": 2,
"mean": 0.2375,
"stdev": 0.47,
"zScore": 3.75,
"anomalous": true,
"source": "Caller-supplied",
"liveEquipmentConnected": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"findings": [
{
"kind": "conflict",
"code": "telemetry_anomaly",
"subject": "S16",
"detail": "Sample z-score 3.75 is outside ±3 from the supplied series mean."
}
],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/telemetry-anomaly-detect" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"samples": [
{
"id": "S1",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:00.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S2",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:01.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S3",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:02.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S4",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:03.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S5",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:04.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S6",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:05.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S7",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:06.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S8",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:07.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S9",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:08.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S10",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:09.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S11",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:10.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S12",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:11.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S13",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:12.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S14",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:13.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S15",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:14.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied"
},
{
"id": "S16",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:15.000Z",
"field": "position[0]",
"value": 2,
"unit": "rad",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/cycle-time-analyze$0.04 USDCAnalyze robot cycle time
Summarize caller-supplied robot cycle durations by robot, workcell, and program. Missing durations are not invented when start/end times are absent.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"cycles": [
{
"id": "C1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:00:00.000Z",
"endedAt": "2026-11-01T10:00:45.000Z",
"program": "pick_place",
"source": "Caller-supplied"
},
{
"id": "C2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:01:00.000Z",
"endedAt": "2026-11-01T10:01:50.000Z",
"program": "pick_place",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "analyzed",
"groupCount": 1,
"items": [
{
"robotId": "R1",
"program": "pick_place",
"cycleCount": 2,
"averageSec": 47.5,
"averageSecSupplied": true,
"minSec": 45,
"minSecSupplied": true,
"maxSec": 50,
"maxSecSupplied": true,
"liveEquipmentConnected": false
}
],
"cycles": [
{
"id": "C1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:00:00.000Z",
"endedAt": "2026-11-01T10:00:45.000Z",
"durationSec": 45,
"durationSupplied": true,
"program": "pick_place",
"source": "Caller-supplied"
},
{
"id": "C2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:01:00.000Z",
"endedAt": "2026-11-01T10:01:50.000Z",
"durationSec": 50,
"durationSupplied": true,
"program": "pick_place",
"source": "Caller-supplied"
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"findings": [],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/cycle-time-analyze" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"cycles": [
{
"id": "C1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:00:00.000Z",
"endedAt": "2026-11-01T10:00:45.000Z",
"program": "pick_place",
"source": "Caller-supplied"
},
{
"id": "C2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:01:00.000Z",
"endedAt": "2026-11-01T10:01:50.000Z",
"program": "pick_place",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/downtime-root-cause$0.04 USDCCluster robot downtime root causes
Cluster caller-supplied downtime events by code/message category signals. Live PLCs and robots are not contacted.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"downtime": [
{
"id": "D1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T11:00:00.000Z",
"endedAt": "2026-11-01T11:15:00.000Z",
"code": "ESTOP",
"message": "Operator e-stop",
"source": "Caller-supplied"
},
{
"id": "D2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T12:00:00.000Z",
"durationSec": 300,
"code": "SERVO01",
"message": "Servo overtemperature",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "clustered",
"causeCount": 2,
"items": [
{
"category": "safety",
"code": "ESTOP",
"message": "Operator e-stop",
"eventCount": 1,
"totalDurationSec": 900,
"totalDurationSecSupplied": true,
"robotIds": [
"R1"
],
"liveEquipmentConnected": false
},
{
"category": "motion",
"code": "SERVO01",
"message": "Servo overtemperature",
"eventCount": 1,
"totalDurationSec": 300,
"totalDurationSecSupplied": true,
"robotIds": [
"R1"
],
"liveEquipmentConnected": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"findings": [],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/downtime-root-cause" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"downtime": [
{
"id": "D1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T11:00:00.000Z",
"endedAt": "2026-11-01T11:15:00.000Z",
"code": "ESTOP",
"message": "Operator e-stop",
"source": "Caller-supplied"
},
{
"id": "D2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T12:00:00.000Z",
"durationSec": 300,
"code": "SERVO01",
"message": "Servo overtemperature",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/opcua-tag-map-normalize$0.03 USDCNormalize OPC UA tag maps
Normalize caller-supplied OPC UA node exports into a consistent tag map. Live OPC UA servers are not contacted.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"opcuaTags": [
{
"id": "T1",
"nodeId": "ns=2;s=Robot1.Speed",
"browseName": "Speed",
"displayName": "Robot Speed",
"dataType": "Double",
"path": "Robot1/Speed",
"unit": "mm/s",
"source": "Caller-supplied export"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "normalized",
"tagCount": 1,
"items": [
{
"id": "T1",
"nodeId": "ns=2;s=Robot1.Speed",
"browseName": "Speed",
"displayName": "Robot Speed",
"dataType": "Double",
"path": "Robot1/Speed",
"normalizedPath": "Robot1/Speed",
"normalizedName": "Speed",
"unit": "mm/s",
"source": "Caller-supplied export",
"liveEquipmentConnected": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"findings": [],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/opcua-tag-map-normalize" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"opcuaTags": [
{
"id": "T1",
"nodeId": "ns=2;s=Robot1.Speed",
"browseName": "Speed",
"displayName": "Robot Speed",
"dataType": "Double",
"path": "Robot1/Speed",
"unit": "mm/s",
"source": "Caller-supplied export"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/plc-alarm-cluster$0.04 USDCCluster PLC alarms
Cluster caller-supplied PLC alarm log events by controller, code, and area. Live PLCs are not contacted.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"plcAlarms": [
{
"id": "A1",
"controllerId": "PLC1",
"at": "2026-11-01T11:00:00.000Z",
"code": "E101",
"message": "Door open",
"severity": "high",
"area": "Cell",
"source": "Caller-supplied"
},
{
"id": "A2",
"controllerId": "PLC1",
"at": "2026-11-01T11:05:00.000Z",
"code": "E101",
"message": "Door open",
"severity": "high",
"area": "Cell",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "clustered",
"clusterCount": 1,
"items": [
{
"code": "E101",
"message": "Door open",
"area": "Cell",
"severity": "high",
"eventCount": 2,
"controllers": [
"PLC1"
],
"firstAt": "2026-11-01T11:00:00.000Z",
"lastAt": "2026-11-01T11:05:00.000Z",
"liveEquipmentConnected": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"findings": [],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/plc-alarm-cluster" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"plcAlarms": [
{
"id": "A1",
"controllerId": "PLC1",
"at": "2026-11-01T11:00:00.000Z",
"code": "E101",
"message": "Door open",
"severity": "high",
"area": "Cell",
"source": "Caller-supplied"
},
{
"id": "A2",
"controllerId": "PLC1",
"at": "2026-11-01T11:05:00.000Z",
"code": "E101",
"message": "Door open",
"severity": "high",
"area": "Cell",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/maintenance-interval-estimate$0.04 USDCEstimate robot maintenance intervals
Estimate remaining hours/cycles to caller-supplied maintenance intervals. OEM schedules are not invented.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"maintenance": [
{
"id": "M1",
"robotId": "R1",
"component": "gearbox",
"runtimeHours": 9800,
"intervalHours": 10000,
"cycleCount": 1200000,
"intervalCycles": 1500000,
"lastServiceAt": "2025-01-01",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "estimated",
"itemCount": 1,
"dueCount": 0,
"items": [
{
"id": "M1",
"robotId": "R1",
"component": "gearbox",
"runtimeHours": 9800,
"runtimeHoursSupplied": true,
"cycleCount": 1200000,
"cycleCountSupplied": true,
"intervalHours": 10000,
"intervalHoursSupplied": true,
"intervalCycles": 1500000,
"intervalCyclesSupplied": true,
"hoursRemaining": 200,
"hoursRemainingSupplied": true,
"cyclesRemaining": 300000,
"cyclesRemainingSupplied": true,
"due": false,
"dueSupplied": true,
"lastServiceAt": "2025-01-01",
"source": "Caller-supplied",
"liveEquipmentConnected": false,
"machineCommandsIssued": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"findings": [],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/maintenance-interval-estimate" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"maintenance": [
{
"id": "M1",
"robotId": "R1",
"component": "gearbox",
"runtimeHours": 9800,
"intervalHours": 10000,
"cycleCount": 1200000,
"intervalCycles": 1500000,
"lastServiceAt": "2025-01-01",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/protocol-compatibility-check$0.03 USDCCheck industrial protocol compatibility
Compare caller-supplied required versus available industrial protocol names, versions, and features. Protocol specifications are not invented.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"protocols": [
{
"id": "P1",
"name": "EtherNet/IP",
"version": "1.2",
"role": "required",
"features": [
"implicit",
"explicit"
],
"source": "Caller-supplied"
},
{
"id": "P2",
"name": "EtherNet/IP",
"version": "1.2",
"role": "available",
"features": [
"implicit",
"explicit"
],
"source": "Caller-supplied"
},
{
"id": "P3",
"name": "OPC UA",
"version": "1.04",
"role": "required",
"features": [
"subscriptions"
],
"source": "Caller-supplied"
},
{
"id": "P4",
"name": "OPC UA",
"version": "1.03",
"role": "available",
"features": [
"subscriptions"
],
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "checked",
"protocolCount": 2,
"compatibleCount": 1,
"items": [
{
"name": "EtherNet/IP",
"requiredVersion": "1.2",
"availableVersion": "1.2",
"availableSupplied": true,
"versionMatch": true,
"missingFeatures": [],
"compatible": true,
"source": "Caller-supplied",
"liveEquipmentConnected": false,
"machineCommandsIssued": false
},
{
"name": "OPC UA",
"requiredVersion": "1.04",
"availableVersion": "1.03",
"availableSupplied": true,
"versionMatch": false,
"missingFeatures": [],
"compatible": false,
"source": "Caller-supplied",
"liveEquipmentConnected": false,
"machineCommandsIssued": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"findings": [
{
"kind": "conflict",
"code": "protocol_mismatch",
"subject": "P3",
"detail": "Protocol OPC UA version/features differ between required and available declarations."
}
],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/protocol-compatibility-check" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"protocols": [
{
"id": "P1",
"name": "EtherNet/IP",
"version": "1.2",
"role": "required",
"features": [
"implicit",
"explicit"
],
"source": "Caller-supplied"
},
{
"id": "P2",
"name": "EtherNet/IP",
"version": "1.2",
"role": "available",
"features": [
"implicit",
"explicit"
],
"source": "Caller-supplied"
},
{
"id": "P3",
"name": "OPC UA",
"version": "1.04",
"role": "required",
"features": [
"subscriptions"
],
"source": "Caller-supplied"
},
{
"id": "P4",
"name": "OPC UA",
"version": "1.03",
"role": "available",
"features": [
"subscriptions"
],
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/robotics-intelligence/workcell-performance-report$0.08 USDCBuild robot workcell performance report
Aggregate rosbag parse, schema diff, anomalies, cycle time, downtime, OPC UA tags, PLC alarms, maintenance, and protocol compatibility from caller-supplied records only.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
samples | No | array; Array |
schemas | No | array; Array |
cycles | No | array; Array |
downtime | No | array; Array |
opcuaTags | No | array; Array |
plcAlarms | No | array; Array |
maintenance | No | array; Array |
protocols | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"samples": [
{
"id": "S1",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:00.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S2",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:01.000Z",
"field": "position[0]",
"value": 0.13,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S3",
"robotId": "R1",
"topic": "/tcp_force",
"at": "2026-11-01T10:00:00.000Z",
"field": "force_z",
"value": 12,
"unit": "N",
"source": "Caller-supplied bag export"
}
],
"schemas": [
{
"id": "A1",
"topic": "/joint_states",
"side": "left",
"messageType": "sensor_msgs/JointState",
"fields": [
{
"name": "position",
"type": "float64[]"
},
{
"name": "velocity",
"type": "float64[]"
}
],
"source": "Caller-supplied"
},
{
"id": "B1",
"topic": "/joint_states",
"side": "right",
"messageType": "sensor_msgs/JointState",
"fields": [
{
"name": "position",
"type": "float64[]"
},
{
"name": "effort",
"type": "float64[]"
}
],
"source": "Caller-supplied"
}
],
"cycles": [
{
"id": "C1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:00:00.000Z",
"endedAt": "2026-11-01T10:00:45.000Z",
"program": "pick_place",
"source": "Caller-supplied"
},
{
"id": "C2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:01:00.000Z",
"endedAt": "2026-11-01T10:01:50.000Z",
"program": "pick_place",
"source": "Caller-supplied"
}
],
"downtime": [
{
"id": "D1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T11:00:00.000Z",
"endedAt": "2026-11-01T11:15:00.000Z",
"code": "ESTOP",
"message": "Operator e-stop",
"source": "Caller-supplied"
},
{
"id": "D2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T12:00:00.000Z",
"durationSec": 300,
"code": "SERVO01",
"message": "Servo overtemperature",
"source": "Caller-supplied"
}
],
"opcuaTags": [
{
"id": "T1",
"nodeId": "ns=2;s=Robot1.Speed",
"browseName": "Speed",
"displayName": "Robot Speed",
"dataType": "Double",
"path": "Robot1/Speed",
"unit": "mm/s",
"source": "Caller-supplied export"
}
],
"plcAlarms": [
{
"id": "A1",
"controllerId": "PLC1",
"at": "2026-11-01T11:00:00.000Z",
"code": "E101",
"message": "Door open",
"severity": "high",
"area": "Cell",
"source": "Caller-supplied"
},
{
"id": "A2",
"controllerId": "PLC1",
"at": "2026-11-01T11:05:00.000Z",
"code": "E101",
"message": "Door open",
"severity": "high",
"area": "Cell",
"source": "Caller-supplied"
}
],
"maintenance": [
{
"id": "M1",
"robotId": "R1",
"component": "gearbox",
"runtimeHours": 9800,
"intervalHours": 10000,
"cycleCount": 1200000,
"intervalCycles": 1500000,
"lastServiceAt": "2025-01-01",
"source": "Caller-supplied"
}
],
"protocols": [
{
"id": "P1",
"name": "EtherNet/IP",
"version": "1.2",
"role": "required",
"features": [
"implicit",
"explicit"
],
"source": "Caller-supplied"
},
{
"id": "P2",
"name": "EtherNet/IP",
"version": "1.2",
"role": "available",
"features": [
"implicit",
"explicit"
],
"source": "Caller-supplied"
},
{
"id": "P3",
"name": "OPC UA",
"version": "1.04",
"role": "required",
"features": [
"subscriptions"
],
"source": "Caller-supplied"
},
{
"id": "P4",
"name": "OPC UA",
"version": "1.03",
"role": "available",
"features": [
"subscriptions"
],
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "reported",
"asOf": "2026-11-04T21:00:00.000Z",
"sections": {
"rosbag": {
"topicCount": 2,
"sampleCount": 3
},
"schemaDiff": {
"topicCount": 1
},
"anomalies": {
"seriesCount": 2,
"anomalyCount": 0
},
"cycleTime": {
"groupCount": 1
},
"downtime": {
"causeCount": 2
},
"opcua": {
"tagCount": 1
},
"plcAlarms": {
"clusterCount": 1
},
"maintenance": {
"itemCount": 1,
"dueCount": 0
},
"protocols": {
"protocolCount": 2,
"compatibleCount": 1
}
},
"liveEquipmentConnected": false,
"machineCommandsIssued": false,
"paidProviderUsed": false,
"apiKeyRequired": false,
"findings": [
{
"kind": "conflict",
"code": "schema_diff",
"subject": "/joint_states",
"detail": "Caller-supplied left/right topic schemas differ."
},
{
"kind": "missing",
"code": "anomaly_sample",
"subject": "r1|/tcp_force|force_z",
"detail": "Fewer than three numeric samples were available for anomaly detection on this series."
},
{
"kind": "conflict",
"code": "protocol_mismatch",
"subject": "P3",
"detail": "Protocol OPC UA version/features differ between required and available declarations."
}
],
"limitations": [
"ROS bag topic samples, schemas, cycles, downtime, OPC UA tags, PLC alarms, maintenance records, and protocol declarations are copied only from labeled fields or text/CSV/JSON exports supplied by the caller.",
"No live industrial equipment connection is opened and no machine commands are issued.",
"Binary .bag/.mcap files are not fully decoded here. Supply topic CSV/JSON exports or labeled sample rows. Missing values are not invented.",
"Anomaly, cycle-time, downtime, and maintenance estimates use only supplied measurements and intervals.",
"Protocol compatibility compares caller-supplied required versus available protocol names, versions, and features only. Protocol specifications are not invented."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/robotics-intelligence/workcell-performance-report" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"samples": [
{
"id": "S1",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:00.000Z",
"field": "position[0]",
"value": 0.12,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S2",
"robotId": "R1",
"topic": "/joint_states",
"at": "2026-11-01T10:00:01.000Z",
"field": "position[0]",
"value": 0.13,
"unit": "rad",
"source": "Caller-supplied bag export"
},
{
"id": "S3",
"robotId": "R1",
"topic": "/tcp_force",
"at": "2026-11-01T10:00:00.000Z",
"field": "force_z",
"value": 12,
"unit": "N",
"source": "Caller-supplied bag export"
}
],
"schemas": [
{
"id": "A1",
"topic": "/joint_states",
"side": "left",
"messageType": "sensor_msgs/JointState",
"fields": [
{
"name": "position",
"type": "float64[]"
},
{
"name": "velocity",
"type": "float64[]"
}
],
"source": "Caller-supplied"
},
{
"id": "B1",
"topic": "/joint_states",
"side": "right",
"messageType": "sensor_msgs/JointState",
"fields": [
{
"name": "position",
"type": "float64[]"
},
{
"name": "effort",
"type": "float64[]"
}
],
"source": "Caller-supplied"
}
],
"cycles": [
{
"id": "C1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:00:00.000Z",
"endedAt": "2026-11-01T10:00:45.000Z",
"program": "pick_place",
"source": "Caller-supplied"
},
{
"id": "C2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T10:01:00.000Z",
"endedAt": "2026-11-01T10:01:50.000Z",
"program": "pick_place",
"source": "Caller-supplied"
}
],
"downtime": [
{
"id": "D1",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T11:00:00.000Z",
"endedAt": "2026-11-01T11:15:00.000Z",
"code": "ESTOP",
"message": "Operator e-stop",
"source": "Caller-supplied"
},
{
"id": "D2",
"robotId": "R1",
"workcellId": "WC1",
"startedAt": "2026-11-01T12:00:00.000Z",
"durationSec": 300,
"code": "SERVO01",
"message": "Servo overtemperature",
"source": "Caller-supplied"
}
],
"opcuaTags": [
{
"id": "T1",
"nodeId": "ns=2;s=Robot1.Speed",
"browseName": "Speed",
"displayName": "Robot Speed",
"dataType": "Double",
"path": "Robot1/Speed",
"unit": "mm/s",
"source": "Caller-supplied export"
}
],
"plcAlarms": [
{
"id": "A1",
"controllerId": "PLC1",
"at": "2026-11-01T11:00:00.000Z",
"code": "E101",
"message": "Door open",
"severity": "high",
"area": "Cell",
"source": "Caller-supplied"
},
{
"id": "A2",
"controllerId": "PLC1",
"at": "2026-11-01T11:05:00.000Z",
"code": "E101",
"message": "Door open",
"severity": "high",
"area": "Cell",
"source": "Caller-supplied"
}
],
"maintenance": [
{
"id": "M1",
"robotId": "R1",
"component": "gearbox",
"runtimeHours": 9800,
"intervalHours": 10000,
"cycleCount": 1200000,
"intervalCycles": 1500000,
"lastServiceAt": "2025-01-01",
"source": "Caller-supplied"
}
],
"protocols": [
{
"id": "P1",
"name": "EtherNet/IP",
"version": "1.2",
"role": "required",
"features": [
"implicit",
"explicit"
],
"source": "Caller-supplied"
},
{
"id": "P2",
"name": "EtherNet/IP",
"version": "1.2",
"role": "available",
"features": [
"implicit",
"explicit"
],
"source": "Caller-supplied"
},
{
"id": "P3",
"name": "OPC UA",
"version": "1.04",
"role": "required",
"features": [
"subscriptions"
],
"source": "Caller-supplied"
},
{
"id": "P4",
"name": "OPC UA",
"version": "1.03",
"role": "available",
"features": [
"subscriptions"
],
"source": "Caller-supplied"
}
]
}
JSON