8.0 KiB
Executable File
Device API Endpoints
Manage a single device by its MAC address. Operations include retrieval, updates, deletion, resetting properties, and copying data between devices. All endpoints require authorization via Bearer token.
1. Retrieve Device Details
-
GET
/device/<mac>Fetch all details for a single device, including: -
Computed status (
devStatus) →On-line,Off-line, orDown -
Session and event counts (
devSessions,devEvents,devDownAlerts) -
Presence hours (
devPresenceHours) -
Children devices (
devChildrenDynamic) and NIC children (devChildrenNicsDynamic)
Special case: mac=new returns a template for a new device with default values.
Response (success):
{
"devMac": "AA:BB:CC:DD:EE:FF",
"devName": "Net - Huawei",
"devOwner": "Admin",
"devType": "Router",
"devVendor": "Huawei",
"devStatus": "On-line",
"devSessions": 12,
"devEvents": 5,
"devDownAlerts": 1,
"devPresenceHours": 32,
"devChildrenDynamic": [...],
"devChildrenNicsDynamic": [...],
...
}
Error Responses:
- Device not found → HTTP 404
- Unauthorized → HTTP 403
MCP Integration: Available as get_device_info and set_device_alias tools. See MCP Server Bridge API.
2. Update Device Fields
- POST
/device/<mac>Create or update a device record.
⚠️ Full-replace (PUT) semantics. Every editable field is written on each call. Any field omitted from the payload is reset to its default (empty string or
0). This matches how the frontend edit form works — it always sends the complete device state.To update a single field without affecting others, use
POST /device/<mac>/update-columninstead.
Request Body:
{
"devName": "New Device",
"devOwner": "Admin",
"createNew": true
}
Behavior:
- If
createNew=true→ inserts a new device row - Otherwise → replaces all editable fields on the existing device
Response:
{
"success": true
}
Error Responses:
- Unauthorized → HTTP 403
3. Delete a Device
- DELETE
/device/<mac>/deleteDeletes the device with the given MAC.
Response:
{
"success": true
}
Error Responses:
- Unauthorized → HTTP 403
4. Delete All Events for a Device
- DELETE
/device/<mac>/events/deleteRemoves all events associated with a device.
Response:
{
"success": true
}
5. Reset Device Properties
- POST
/device/<mac>/reset-propsResets the device's custom properties to default values.
Request Body: Optional JSON for additional parameters.
Response:
{
"success": true
}
6. Copy Device Data
- POST
/device/copyCopy all data from one device to another. If a device exists withmacTo, it is replaced.
Request Body:
{
"macFrom": "AA:BB:CC:DD:EE:FF",
"macTo": "11:22:33:44:55:66"
}
Response:
{
"success": true,
"message": "Device copied from AA:BB:CC:DD:EE:FF to 11:22:33:44:55:66"
}
Error Responses:
- Missing
macFromormacTo→ HTTP 400 - Unauthorized → HTTP 403
7. Update a Single Column
- POST
/device/<mac>/update-columnUpdate exactly one field for a device without touching any other fields.
✅ Partial-update (PATCH) semantics. Only the specified column is written. All other fields are left unchanged. Use this for automation, integrations, and any workflow that needs to update a single attribute.
To replace all fields at once (e.g. saving from the edit form), use
POST /device/<mac>.
Allowed columnName values: devName, devOwner, devType, devVendor, devGroup, devLocation, devComments, devIcon, devFavorite, devAlertEvents, devAlertDown, devCanSleep, devSkipRepeated, devReqNicsOnline, devForceStatus, devParentMAC, devParentPort, devParentRelType, devSSID, devSite, devVlan, devStaticIP, devIsNew, devIsArchived, devCustomProps.
Request Body:
{
"columnName": "devName",
"columnValue": "Updated Device Name"
}
Response (success):
{
"success": true
}
Error Responses:
- Device not found → HTTP 404
- Missing
columnNameorcolumnValue→ HTTP 400 - Unauthorized → HTTP 403
8. Lock / Unlock a Device Field
- POST
/device/<mac>/field/lockLock a field to prevent plugin overwrites, or unlock it to allow overwrites again.
Request Body:
{
"fieldName": "devName",
"lock": true
}
| Field | Type | Required | Description |
|---|---|---|---|
fieldName |
string | ✅ | Field to lock/unlock (e.g. devName, devVendor) |
lock |
boolean | ❌ | true to lock, false to unlock (default when omitted) |
Response (success):
{
"success": true,
"fieldName": "devName",
"locked": true,
"message": "Field devName locked"
}
Error Responses:
- Field does not support locking → HTTP 400
- Unauthorized → HTTP 403
9. Unlock / Clear Device Fields (Bulk)
- POST
/devices/fields/unlockUnlock fields (clearLOCKED/USERsources) for one device, a list of devices, or all devices.
Request Body:
{
"mac": "AA:BB:CC:DD:EE:FF",
"fields": ["devName", "devVendor"],
"clearAll": false
}
| Field | Type | Required | Description |
|---|---|---|---|
mac |
string or array | ❌ | Single MAC, list of MACs, or omit for all devices |
fields |
array of strings | ❌ | Fields to unlock. Omit to unlock all tracked fields |
clearAll |
boolean | ❌ | true clears all sources; false (default) clears only LOCKED/USER |
Response (success):
{
"success": true
}
Error Responses:
fieldsis not a list → HTTP 400- Unauthorized → HTTP 403
10. Set Device Alias
- POST
/device/<mac>/set-aliasConvenience wrapper to update the device display name (devName).
Request Body:
{
"alias": "My Router"
}
Response (success):
{
"success": true
}
Error Responses:
- Missing
alias→ HTTP 400 - Device not found → HTTP 404
- Unauthorized → HTTP 403
Example curl Requests
Get Device Details:
curl -X GET "http://<server_ip>:<GRAPHQL_PORT>/device/AA:BB:CC:DD:EE:FF" \
-H "Authorization: Bearer <API_TOKEN>"
Update Device Fields:
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/device/AA:BB:CC:DD:EE:FF" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
--data '{"devName": "New Device Name"}'
Delete Device:
curl -X DELETE "http://<server_ip>:<GRAPHQL_PORT>/device/AA:BB:CC:DD:EE:FF/delete" \
-H "Authorization: Bearer <API_TOKEN>"
Copy Device Data:
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/device/copy" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
--data '{"macFrom":"AA:BB:CC:DD:EE:FF","macTo":"11:22:33:44:55:66"}'
Update Single Column:
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/device/AA:BB:CC:DD:EE:FF/update-column" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
--data '{"columnName":"devName","columnValue":"Updated Device"}'
Lock a Field:
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/device/AA:BB:CC:DD:EE:FF/field/lock" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
--data '{"fieldName":"devName","lock":true}'
Unlock Fields (all devices):
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/devices/fields/unlock" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
--data '{"fields":["devName","devVendor"]}'
Set Device Alias:
curl -X POST "http://<server_ip>:<GRAPHQL_PORT>/device/AA:BB:CC:DD:EE:FF/set-alias" \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
--data '{"alias":"My Router"}'