Changelog: Litmus Edge 4.0.x to 4.4.x

You are at https://api.litmus.io/reference/changelog-le.md. Parent: https://api.litmus.io/agents.md (product router: /le/agents.md) What changed in the LE API between 4.0.x and 4.4.x. This tree documents 4.4.x only; 4.0.x endpoints live only in the full collection JSON.

This document describes the API differences between LitmusEdge 4.0.x and 4.4.x, for installations and integrations upgrading from 4.0.x. Every entry was checked against live 4.0.x and 4.4.x devices. Changes are grouped by service; anything not listed is unchanged.

Breaking changes at a glance

Fourteen classes of change can break an existing 4.0.x client. They are listed in the order you should act on them; the detail for each is in its service section below. Most of them are invisible to a GraphQL schema check: they live in the driver and provider catalogues, in REST routing, or in nullability, and no GraphQL type, field or enum value was removed outside Analytics.

# Severity What breaks Service Action
1 Critical Every Integration ProviderID changed: all 43 providers that exist in both releases were re-keyed from readable slugs to UUIDs, and 39 of them also changed name Integration Map each 4.0.x slug to its 4.4.x UUID with the table in the Integration section. Do not look providers up by their 4.0.x name
2 Critical Instance.ProviderID retyped String! to UUID! Integration Anything that stores or compares a ProviderID as an arbitrary string must accept a UUID
3 High Mark (3) and Space (4) parity options removed from 14 serial drivers, and from the register-level parity of three of them DeviceHub Audit device and tag configs for parity 3 or 4 and re-point to 0, 1 or 2
4 High Five /apps routes became strict about the trailing slash Applications Use the exact form per route. The failure is a bare 404, not an error payload
5 High Analytics global parameters removed: GetParameters and SetParameter no longer exist Analytics Move parameter values onto the processor instances that use them, or to variables
6 Medium 12 Digital Twins input fields became required Digital Twins Requests that omitted these now fail GraphQL validation
7 Medium Subscription.DataAccess(input:) became required Digital Twins Callers that omitted input now fail validation
8 Medium The Configuration API rejects unknown request fields, and template option marketplaceV2 is gone System Remove marketplaceV2 from template options; send only documented fields
9 Medium IDEC Serial moved bit access to new *_bit registers and narrowed four address ranges DeviceHub Re-create bit tags on the *_bit registers; check addresses on I, Q, M, R
10 Low Toyopuc CMP-Link Serial dropped the accessType register property DeviceHub Remove accessType from tag definitions
11 Low AB CompactLogix Ethernet Advanced dropped pollPLCProgramChecksum (replaced by PLCProgramChangeAction); AB Logix Ethernet register R dropped value types byte and dword DeviceHub Re-express the setting; re-type affected tags
12 Low AWS IoT Core no longer offers QoS 2 for qos and willQoS Integration Use QoS 0 or 1
13 Low CIP Ethernet register property classId is now unsigned DeviceHub Send values in 0-65535 only
14 Low Five Modbus-family drivers recased their parity labels and retyped parity from String to SignedInteger DeviceHub Values are unchanged; match on the value, not the label

Summary

Service Impact Highlights
Integration Breaking Every ProviderID re-keyed; Instance.ProviderID retyped; catalogue 48 to 64 providers; Gen 2 providers take the plain names and the originals become "(Gen 1)"; IsExperimental, ExecCommandEnabled, InstanceState and per-property Required added
DeviceHub Breaking GraphQL additive, but the driver catalogue changed: parity options, IDEC Serial bit registers, removed properties; catalogue 153 to 207 drivers; bulk-selection mutations; one deprecation
Digital Twins Breaking 13 nullability tightenings; nested model attributes; asset hierarchy; paging on attribute lists; Playground subscription
Analytics Breaking Global parameters removed; workspaces, groups, AI Suite and component variables added; two log operations deprecated
Applications Breaking Five /apps routes strict about the trailing slash; new dashboard endpoint
System Breaking Configuration API strict about request fields; saved templates and snapshots added; new log query service and log forwarding
OPC UA Additive 62 to 90 types, 22 new operations: paged navigation, node versioning, staged bulk upload, worker sync, server settings; 4 deprecations
Dashboard, DataHub, Flows Manager None Unchanged

Deprecations

Eight operations and fields are deprecated in 4.4.x that were not deprecated in 4.0.x. All still work and all have replacements. Two are scheduled for removal after 2027-09-01.

Deprecated Replacement Reason
Query.GetNodes (OPC UA) GetNodesByRef Node IDs can collide across the tree, making ID-only addressing ambiguous
Mutation.UpdateNode (OPC UA) UpdateNodeByRef Same
Mutation.DeleteNode (OPC UA) DeleteNodeByRef Same
Mutation.UploadHierarchy (OPC UA) UploadHierarchyWithResult Returns no result; the replacement reports Added/Removed/Modified/RestartRequired counts
UploadStatus.Warnings (DeviceHub) UploadStatus.Stats and FailDetails Warnings reported problems but not what actually landed
Query.GetAnalyticsLogs (Analytics) GET /logs/query Local logs superseded by central logging; removal after 2027-09-01
Subscription.SubscribeToAnalyticsLogs (Analytics) Poll GET /logs/query with the returned cursor Same; removal after 2027-09-01
Config.Required (Integration) SchemaProperty.Required Required-ness moves onto each property in GetProviderSchema

Integration

Breaking: every ProviderID changed

This is the largest breaking change on this upgrade path, and it affects every client that creates or inspects an Integration instance.

In 4.0.x a ProviderID was a readable slug. In 4.4.x it is a UUID, and most providers also have a new name. The table maps every provider present in both releases from its 4.0.x slug to its 4.4.x UUID and name.

4.0.x name 4.0.x ProviderID 4.4.x ProviderID 4.4.x name
AMQP SSL amqp-ssl 900f51b2-936b-43c2-9af8-d65046f312a5 AMQP SSL (Gen 1)
AMQP TCP amqp-tcp 800bfae1-9d30-4e90-932c-e646a7771c1b AMQP TCP (Gen 1)
Aveva Data Hub aveva-datahub 1486437a-8208-4ec8-bb50-cf7f394fcf51 Aveva Data Hub (Gen 1)
AWS IoT SiteWise aws-sitewise 493124c6-c9c0-4583-a10f-c100fbfd9f42 AWS IoT SiteWise (Gen 1)
Azure Event Hubs azure-event-hubs e37d3ef0-888c-480c-ad85-14e98c8162cb Azure Event Hubs (Gen 1)
Cognite Connector cognite aa838ac1-a31e-4166-b9c9-aeb7973bd122 Cognite Connector (Gen 1)
Databricks Zerobus Ingest databricks-zerobus-ingest 0fb51adf-9e8c-49a7-80ac-1f232159a457 Databricks Zerobus Ingest
DB - Databricks SQL databricks 133c003c-2310-472d-95fe-991b74049311 DB - Databricks SQL (Gen 1)
DB - InfluxDB v1.7.x SSL influxdb-ssl f9fda829-c2e0-47a0-83bc-7a20f3ff897a DB - InfluxDB v1.7.x SSL (Gen 1)
DB - InfluxDB v1.7.x TCP influxdb-tcp a2ead4a5-d7de-41b4-a69b-76800fe6b978 DB - InfluxDB v1.7.x TCP (Gen 1)
DB - InfluxDB v2.x TCP influxdb-v2-tcp a2796f78-bab4-429a-9b18-47bcf104adb7 DB - InfluxDB v2.x TCP (Gen 1)
DB - InfluxDB v2.x+ SSL influxdb-v2-ssl 7ee2ff5b-9f5f-4299-83f8-9b3617d79ace DB - InfluxDB v2.x+ SSL (Gen 1)
DB - Microsoft SQL Server mssql b49b6e76-5c8f-4ca8-93b4-901edf3b2857 DB - Microsoft SQL Server (Gen 1)
DB - Microsoft SQL Server SSL mssql-ssl 5121e79f-4e74-4048-b5f0-3a7f1242b148 DB - Microsoft SQL Server SSL (Gen 1)
DB - MongoDB mongodb abc92242-1591-49b2-a747-439c72ecf68d DB - MongoDB (Gen 1)
DB - MongoDB v4+ mongodb-v4 363c6939-b6dc-409b-a6d6-b553692bcf2a DB - MongoDB v4+ (Gen 1)
DB - MySQL mysql 2dff6cc6-c383-4744-a78b-e2892ae05c49 DB - MySQL (Gen 1)
DB - MySQL SSL mysql-ssl e4aa0200-3dae-4292-b7bf-499e293c7b33 DB - MySQL SSL (Gen 1)
DB - PostgreSQL postgresql 13e1ec1f-4774-4515-8af9-26fccd4590a8 DB - PostgreSQL (Gen 1)
DB - PostgreSQL SSL postgresql-ssl b3c894c3-f11b-4d06-b720-68a52d1f6835 DB - PostgreSQL SSL (Gen 1)
DB - Snowflake snowflake a870453f-e1bc-4c04-ba9f-b8f8224646a9 DB - Snowflake (Gen 1)
Google Cloud Pub/Sub Connector gcloud-pubsub 962fa4a8-3c82-4e3a-af50-9603b179d435 Google Cloud Pub/Sub Connector (Gen 1)
InfluxDB v3 influxDB-v3 a55ebcc8-3ec9-4a10-8f2b-ff615d480e36 InfluxDB v3
Kafka SSL kafka-ssl d2413da3-fd32-48dd-ab66-6e62090a5f6d Kafka SSL (Gen 1)
Kafka TCP kafka-tcp 8e2f6527-519b-484c-ae51-226d67036e86 Kafka TCP (Gen 1)
Litmus UNS litmus-uns 2a7e325f-0dc5-4069-be4b-a6ba88d6f8a4 Litmus UNS (Gen 1)
MQTT - Amazon AWS IoT Core over SSL aws-iotcore-mqtt-ssl f0df18e2-9ef9-480a-87e8-0510ef27d21d MQTT - AWS IoT Core over SSL (Gen 1)
MQTT - AWS IoT Core Gen 2 aws-iot-core-mqtt-gen-2 8a7829cb-95cc-4ab8-9ed3-94fa99a8e4db AWS IoT Core
MQTT - AWS IoT SiteWise Edge aws-sitewise-edge 69d06521-c16f-4f38-a9e9-4cd0f0edbfe7 MQTT - AWS IoT SiteWise Edge (Gen 1)
MQTT - AWS IoT SiteWise Edge Gen 2 aws-iot-sitewise-edge-gen-2 3de888ec-a6cf-4de8-9ed7-b87b70b98e7c AWS IoT SiteWise Edge
MQTT - Azure IoT Hub using Device Certificates azure-iothub-mqtt-device-cert 395bf3a8-17f9-4ebf-8bd9-23d1b88d887e MQTT - Azure IoT Hub using Device Certificates (Gen 1)
MQTT - Azure IoT Hub using SAS Key azure-iothub-mqtt-sas-key 02fcf6e4-fcdf-490e-b578-1e8b4cf03684 MQTT - Azure IoT Hub using SAS Key (Gen 1)
MQTT - Generic generic-mqtt-tcp 91d5953e-91bd-4564-acf8-05d662ddb090 MQTT - Generic (Gen 1)
MQTT - Generic Gen 2 generic-mqtt-gen-2 0e04a6f5-dc0c-4bd8-84b9-dc2b1b74b110 MQTT - Generic
MQTT - Generic over SSL generic-mqtt-ssl 53efdc1f-4e02-413f-b28d-b69334041718 MQTT - Generic over SSL (Gen 1)
MQTT - IBM Watson over SSL ibm-watson-mqtt-ssl 3f87d2be-a30e-4304-b618-b9f1b48d21a3 MQTT - IBM Watson over SSL (Gen 1)
MQTT - v5 Generic Gen 2 generic-mqtt-v5-tcp-gen-2 6d460871-d540-491d-89ea-909b783a222a MQTT - v5 Generic
NATS nats 286b6ec7-4069-4022-81c4-6e4826a9662c NATS (Gen 1)
NATS Gen 2 nats-gen-2 b281db24-2092-4e8d-b735-f774bde9bd62 NATS
Oracle Smart Operations in Fusion Cloud SCM rest-oracle-smart-operations-fusion 943ecb8a-b215-4d48-ab51-2855302a3916 Oracle Smart Operations in Fusion Cloud SCM
OSI PI Historian osi-pi-web 88a54a10-322a-4b9b-99e0-5a7b82a2f193 OSI PI Historian (Gen 1)
REST API rest 1532a2b5-590f-43d3-9faf-35df646890de REST API (Gen 1)
Splunk splunk-http aa1886dd-260d-4aad-b0d1-b9c49e814956 Splunk (Gen 1)

48 providers in 4.0.x, 64 in 4.4.x, 43 present in both. None of those 43 kept its ProviderID.

The schema records the same change: Instance.ProviderID is retyped from String! to UUID!. CreateInstance takes a ProviderID, so every hard-coded ID fails. There is no alias or compatibility mapping: the old slug is simply not a valid ID.

Action required: migrate stored ProviderIDs with the table above, keyed on the 4.0.x slug, and treat the result as an opaque UUID.

Do not resolve by the 4.0.x name. The Gen 2 providers took the plain names and the originals became "(Gen 1)". A 4.0.x client that looks up MQTT - Generic on 4.4.x gets the Gen 2 provider 0e04a6f5-dc0c-4bd8-84b9-dc2b1b74b110, a different implementation from the generic-mqtt-tcp it used on 4.0.x, which is now MQTT - Generic (Gen 1). The same applies to NATS, REST API, Splunk, OSI PI Historian, AWS IoT SiteWise and the other renamed providers. The lookup succeeds, so nothing reports the mistake.

Five providers present in 4.0.x are gone in 4.4.x: Azure IoT Hub using SAS Key over SSL Gen 2, Kafka SSL Gen 2, Kafka TCP Gen 2, MQTT - v5 Generic over SSL Gen 2 and Snowpipe Streaming. The first four are covered by single Gen 2 providers that select the transport through a connectionType config property.

Breaking: AWS IoT Core QoS 2

AWS IoT Core (4.0.x MQTT - AWS IoT Core Gen 2) no longer offers QoS 2 for qos and willQoS. A config that sets either to 2 is invalid; use 0 or 1.

Deprecated

Config.Required is deprecated in favour of SchemaProperty.Required: GetProviderSchema now states on each property whether it is required.

Behaviour changes

On Databricks Zerobus Ingest, proxyValue is required when a proxy is configured, and on MQTT - Generic (the 4.0.x MQTT - Generic Gen 2), caCert is required for TLS connections. On Azure IoT Hub and MQTT - Generic, credentials that only apply to one connectionType are not required for the other.

New

Provider catalogue. 21 new providers: AMQP, AWS IoT SiteWise, Aveva DataHub, Azure Event Hubs, Azure IoT Hub, Cognite, Google Cloud Pub/Sub, Kafka, Litmus Unify (7c1f3a92-5b8e-4d6a-9f27-0a4c8e35b1d3), MQTT - IBM Watson over SSL, MaintainX API, Microsoft SQL Server, MongoDB v4+, MySQL, OSI PI Historian, PostgreSQL, REST API, SAP Hana Cloud, Snowflake Snowpipe Stream, Splunk and TimescaleDB.

Experimental providers. Provider, GroupedProvider and ProviderSchema gain IsExperimental: Boolean!, marking providers shipped for evaluation rather than production. It is independent of Hidden: an experimental provider is still listed and selectable unless separately hidden, so a production-only picker must filter on both. In 4.4.x, Aveva DataHub and OSI PI Historian are flagged.

Provider configuration. 37 optional properties were added across 9 providers, all with defaults, so existing configs are unaffected. They include connectTimeout, pingTimeout, reconnectInterval and publishWaitTimeout on the Gen 1 MQTT-family providers.

Instances. Instance gains ExecCommandEnabled: Boolean and ProviderName: String!. GetInstanceStatusResponse gains InstanceState: InstanceState!, backed by a new InstanceState enum.


DeviceHub

Breaking: the Mark and Space parity options are gone

Fourteen serial drivers dropped two values from their parity device property, and Generic Device, IND256x and Scale dropped them from the register-level parity as well.

4.0.x label Value Status in 4.4.x
None 0 Kept
Odd 1 Kept
Even 2 Kept
Mark 3 Removed
Space 4 Removed

Affected drivers: AB DF1 Serial, AB Logix Serial, Enron Modbus, Generic Device, IDEC Serial, IND256x, Mitsubishi A Series Serial, Modbus Multi-Station RTU to TCP Converter, Omron Fins Ethernet, Omron Fins Serial, Omron HostLink, Scale, Siemens S7-200 Serial, Toyopuc CMP-Link Serial.

The surviving options keep their value codes, so a device configured with 0, 1 or 2 needs no action. Action required: audit device and tag configurations for parity 3 or 4 on these drivers and re-point each to 0, 1 or 2. Mark and Space parity have no equivalent among the survivors, so this is a decision about what the physical device expects rather than a relabelling.

Breaking: IDEC Serial bit registers

The bit value type moved out of registers I, Q, M, R, C and T into six new registers, I_bit, Q_bit, M_bit, R_bit, C_bit and T_bit. A tag that reads a bit through, for example, I with value type bit must be re-created on I_bit. The address ranges also narrowed: I and Q from 0-37 to 0-20, M from 0-317 to 0-300, R from 0-63 to 0-48.

Breaking: removed driver properties and value types

Driver Change Action
AB CompactLogix Ethernet Advanced Device property pollPLCProgramChecksum removed; PLCProgramChangeAction added Re-express the setting with PLCProgramChangeAction
Toyopuc CMP-Link Serial Register property accessType (Block / Random memory access) removed from all 28 registers Drop accessType from tag definitions
AB Logix Ethernet Register R no longer offers value types byte and dword Re-type affected tags
CIP Ethernet Register property classId retyped from signed to unsigned integer (range 0-65535 unchanged) Send non-negative values only

Breaking: parity labels on five Modbus-family drivers

Cutler-Hammer ELC Serial, Modbus ASCII, Modbus ASCII Advanced, Modbus RTU and Modbus RTU Advanced changed their parity labels from none / even / odd to None / Even / Odd, and the property type from String to SignedInteger. The values 0, 1, 2 are unchanged, so this only affects a client that matches on the label string.

These five drivers do not use the same value mapping as the fourteen above: for them 1 is Even and 2 is Odd, the reverse of the fourteen. Always read the mapping from the driver's own ListValues.

Deprecated

UploadStatus.Warnings is deprecated in favour of UploadStatus.Stats and FailDetails.

Behaviour changes

Default values changed on these driver properties. Devices that set the property explicitly are unaffected; devices that relied on the default behave differently after the upgrade.

Property 4.0.x default 4.4.x default Drivers
requestTimeoutMs 2000 1500 Cutler-Hammer ELC Ethernet, Cutler-Hammer ELC Serial, Modbus ASCII, Modbus ASCII Advanced, Modbus RTU, Modbus RTU Advanced, Modbus RTU over TCP, Modbus TCP, Modbus UDP
KeepAlive 60 5 Generic Device, IND256x, Keyence Nano, Opto22 CONT Protocol Ethernet, Scale, Toyopuc Ethernet, Yokogawa DX Ethernet; register level on Generic Device, IND256x, Scale
accessMode 0 1 AB CompactLogix Ethernet Advanced, AB Logix Ethernet
DefaultDataFile (register) 0 1 AB EthernetIP Ethernet
responseTimeout 5000 1500 Modbus Multi-Station RTU to TCP Converter
retryRequestCount 3 2 Modbus Multi-Station RTU to TCP Converter
retryRequestCount 0 2 Modbus RTU over TCP

Sparkplug B Client Namespace is now required, with default spBv1.0. Generator widened the address range of registers M, S and Ssub from 1-32768 to 0-65535.

New

Driver catalogue. 153 drivers to 207. No driver was removed or renamed. The 54 new drivers are: AB ControlLogix Unsolicited, ABB Totalflow DB2, ABB Totalflow DB2 Serial, Beckhoff TwinCAT2/3 Ethernet Absolute, Beckhoff TwinCAT3 Ethernet Symbolic, Brother Ethernet, CAN Raw, CODESYS V2 Ethernet Absolute, CODESYS V2 Ethernet Symbolic, Delta DVP Ethernet, Excel, Fanuc CNC Ethernet, Fuji NB Serial, Fuji SPH2000 Ethernet, GE Fanuc 90-30 Ethernet, GE Fanuc RX3i Serial, GE Fanuc SNP Serial, GE Fanuc SNPX Serial, HID Device, Heidenhain 530 Ethernet, Heidenhain 640 Ethernet, Hitachi EH Serial, IEC60870-5-102 Ethernet, IEC60870-5-104 Ethernet, Keyence KV-10 Serial, Keyence Serial, Koyo Click Serial, Koyo Direct Serial, Koyo Ethernet, LS Serial, MTConnect Ethernet, Mitsubishi F Ethernet, Mitsubishi F Serial, Mitsubishi Q Serial, Mitsubishi iQ-F Serial (FX5U), Oemax Serial, Opto22 MMIO Protocol Ethernet, Panasonic FP Ethernet, Panasonic FP Serial, Panasonic FP7 Ethernet, Parker ACR9000 Ethernet, Ping, SEW Drive Ethernet, SICK Flexi Soft, Saia S-Bus Ethernet, Siemens Logo Ethernet, Siemens S7-300 Serial, Siemens Sinumerik 808D Serial, Siemens TI505 Ethernet, Siemens TI505 Serial, Toshiba Computer Link Ethernet, VIPA 300S Ethernet, Yaskawa MP2300 Ethernet, Yokogawa FA-M3 Ethernet.

Additions to existing drivers. Open Protocol Ethernet gains 50 register types and useGenericSubscribe; OPC UA Client Advanced can call OPC UA methods (value type Method, with DefaultInputArgumentsOPCUAMethod); AB Logix Ethernet gains array and unsigned value types on register R plus fwVersion and PLCProgramChangeAction; CIP Ethernet gains serviceType and register properties data, respDataOffset and respDataEndianness; Siemens S5 Ethernet gains value type sint; Fanuc CNC Ethernet (Gen1.3) gains register cnc_rdprgnum; Siemens S7CommPlus gains ReconnectInterval; AB Logix Serial gains readTimeout; Ignition Module gains publishStat.

GraphQL. The schema is additive: 125 types to 130, nothing removed. BrowseTask_CreateRegistersByFoldersSelection and Cart_AddItemsByFoldersSelection, both taking CreateRegistersByFoldersSelectionRequest, let a caller onboard tags by selecting folders rather than enumerating registers. UploadStatus gains Stats: UploadStats! and FailDetails: [UploadLineDetail], which report per-import counts and per-line failures; check Stats.Failed rather than trusting the absence of warnings. Smaller additions: BrowseTaskItem.DeviceID, Topic.Description, TableColumn.ReadOnly, TableColumn.AllowEmpty, FormatEnum values Call and CallResponse, ValueTypeEnum value RowFixedTable.


Digital Twins

Breaking: optional fields became required

Twelve input fields and one subscription argument went from optional to required. Nothing was removed, but any request that omitted these now fails GraphQL validation before it reaches the resolver.

Type Field 4.0.x 4.4.x
CreateModelRequest Name String String!
CreateModelRequest Assets String String!
DeleteDynamicAttributeRequest ID UUID UUID!
DeleteHierarchyNodeRequest ID UUID UUID!
DeleteInstanceRequest ID UUID UUID!
DeleteModelRequest ID UUID UUID!
DeleteStaticAttributeRequest ID UUID UUID!
DeleteTransformationRequest ID UUID UUID!
UpdateHierarchyNodeRequest ID UUID UUID!
UpdateInstanceRequest ID UUID UUID!
UpdateModelRequest ID UUID UUID!
UpdateTransformationRequest ID UUID UUID!
Subscription.DataAccess input argument DataAccessRequest DataAccessRequest!

Most of these were already semantically required: a delete without an ID could never succeed. What changes is where the failure happens: validation now rejects the document before execution, so the error shape differs. CreateModelRequest.Name and Assets are the two worth checking properly, since a model create that relied on a server-side default for either is now invalid.

New

Nested model attributes. DynamicAttributeType gains nestedModel, and CreateDynamicAttributeRequest, UpdateDynamicAttributeRequest and DynamicAttribute gain NestedModelID and NestedInstanceID. One model can now reference another instead of restating its attributes. Set one of the two, leave the other null. Nothing prevents a nesting cycle, and a cycle surfaces when the twin is resolved rather than when the attribute is saved.

Asset hierarchy. SetInstanceAssetHierarchy(input: SetInstanceAssetHierarchyRequest!) places instances in a hierarchy path with optional metadata, batch-first via an Items list. AttributeType gains AssetHierarchy, so it is now Regular | UNS | AssetHierarchy. An exhaustive match on AttributeType written against 4.0.x will meet a third member; check the default branch.

Instance source. Instance and CreateInstanceRequest gain Source: InstanceSource (local | external). There is no server-side filter by source; filter client-side.

Paging on attribute lists. ListStaticAttributeRequest and ListDynamicAttributeRequest gain Limit and Offset.

Counts and nested instances. Model gains InstanceCount, StaticAttributeCount, DynamicAttributeCount, ParameterCount and Instances. Instance gains the three attribute counts.

Playground. New PlaygroundMessages subscription for live topic inspection.


OPC UA

The schema grew from 62 types to 90, with 22 new operations and no breaking change.

Deprecated

GetNodes, UpdateNode and DeleteNode are deprecated in favour of GetNodesByRef, UpdateNodeByRef and DeleteNodeByRef, and UploadHierarchy in favour of UploadHierarchyWithResult. UpdateNode and DeleteNode are simultaneously extended: both gained originId, and DeleteNode gained expectedVersion, so callers who cannot move to the ByRef variants immediately still get versioning and origin tracking.

New

Hierarchy navigation and search. GetFolderItems, GetChildFolders, GetChildFoldersPage, GetFolderSkeleton and SearchNodes replace unpaged traversal with cursor-paged access. GetFolderItems returns a node's tag children only, and GetChildFolders returns its folder and device children; neither returns both.

Node versioning and unambiguous addressing. NodeItem gains Version, SyncState, SyncFailureReason, HasChildren and AccessControl. GetNodesByRef, UpdateNodeByRef and DeleteNodeByRef address nodes by reference rather than by an ID that can collide. DeleteNodeByRef and DeleteNode take expectedVersion for optimistic concurrency, and the mutations take originId for change attribution.

Staged bulk upload. StageHierarchy, CommitStagedHierarchy and CancelStagedHierarchy turn a bulk upload into a two-phase operation. UploadHierarchyWithResult returns applied counts where UploadHierarchy returned nothing.

Worker sync. SyncNodes, GetSyncStatus, GetCurrentSync and SubscribeSyncStatus. GetCurrentSync falls back to the most recent terminal sync, so a non-null result does not mean a sync is currently running; check the state.

Server settings and access control. GetServerSettings, UpdateServerSettings and BulkUpdateTagAccessControl.

Subscriptions. SubscribeNodeStateChanged, SubscribeTreeChanged and SubscribeSyncStatus.


Analytics

Analytics changes are stated against the operations in the LitmusEdge 4.0.x API documentation.

Breaking: global parameters removed

GetParameters and SetParameter no longer exist, and there are no global parameters in 4.4.x. Parameters now belong to individual processor instances: CreateProcessorInstanceRequest, UpdateProcessorInstanceRequest and ProcessorInstance carry Parameters. Global values that processors read and write are handled by variables (GetVariables, GetVariable, SetVariable). Action required: move each global parameter onto the processor instances that use it, or into a variable.

Deprecated

GetAnalyticsLogs and SubscribeToAnalyticsLogs are superseded by central logging (GET /logs/query) and scheduled for removal after 2027-09-01.

New

46 operations not in the 4.0.x documentation:

Area Operations
Workspaces GetWorkspaces, GetWorkspace, CreateWorkspace, UpdateWorkspace, DeleteWorkspace, ExportWorkspace, ImportWorkspace, GetWorkspaceGroups, GetWorkspaceProcessors, GetWorkspacePositions, DeleteWorkspaceGroupsAndProcessorInstances
Groups GetGroup, CreateGroup, UpdateGroup, DeleteGroup, AddProcessorsToGroup, RemoveProcessorsFromGroup, DeleteAllGroupsAndProcessorInstances
Processor instances DeleteProcessorInstance, DeleteAllProcessorInstances, CopyProcessorInstances, RenameProcessorInstance, ReconnectProcessorInstances, SetProcessorInstancesPositionMap, TestProcessorScript, ValidateProcessorScript
Variables GetVariable, GetComponentVariable, GetComponentVariables, SetComponentVariable, DeleteComponentVariable
AI Suite ExportAISuite, ImportAISuite, GetAISuiteFiles, GetAISuiteFileContent, DeleteAISuiteFile, CreateAISuiteUploadSession, ResumeAISuiteUploadSession, CloseAISuiteUploadSession, TestAISuiteMCPServer, ListProviderModels
Models CreateModelUploadSession, ResumeModelUploadSession, CloseModelUploadSession, GetModelUploadSession
Metrics SubscribeServerMetrics

Applications

Breaking: five /apps routes became strict about the trailing slash

In 4.0.x both the slashed and unslashed form of these routes returned the list. In 4.4.x each route matches its path exactly, and the strictness runs in both directions.

Route 4.0.x 4.4.x Required form in 4.4.x
/apps 200 either way 404 without slash with trailing slash
/apps/dc/containers 200 either way 404 without slash with trailing slash
/apps/dc/networks 200 either way 404 without slash with trailing slash
/apps/images 200 either way 400 without slash with trailing slash
/apps/registries 200 either way 404 with slash without trailing slash

Action required: do not apply a blanket rule. /apps/registries requires the absence of the trailing slash while the other four require its presence. The failure is a bare 404 page not found rather than an error payload, so a client that joins a base path without a separator fails silently.

New

GET /apps/overview/dashboard (query parameter cpuHistorySeconds) returns an application overview. GET /apps/registries/schemas gained schema.properties.region.minLength on the registry schema entries.


System

Breaking: the Configuration API rejects unknown request fields

The Configuration service now decodes request bodies strictly: an unknown field fails with 400 and failed to decode request body: json: unknown field "<name>". Template option marketplaceV2 (datastruct.MarketplaceOptionsV2) was removed, so a template download or create that sends it now fails this way. Use marketplace.

New: saved templates and snapshots

The Configuration API grew from 6 paths to 14, with 14 new operations and nothing removed. In 4.0.x only the session-based /config/template flow existed; templates are now first-class saved objects.

Method Route Purpose
GET / POST /config/templates List saved templates; create one from current config
GET / PUT / DELETE /config/templates/{id} Read, update metadata, delete
POST /config/templates/delete Bulk delete
GET / POST /config/templates/{id}/download Download a saved template
POST /config/templates/{id}/apply Apply a saved template
POST /config/templates/{id}/preview Report what an apply would do, without applying
POST /config/templates/{id}/merge Save the union of current config and a template as a new template
GET / POST / DELETE /config/snapshots List, capture and prune configuration snapshots

Apply and preview take a mode: legacy (the default), use or merge-apply; any other value is 400. use hard-resets each section in the template to exactly the template's contents, deleting what is not in it. merge-apply restarts most services, and a merge that would overwrite existing configuration is refused with 409 confirm_required unless confirm_overwrite is set. Applying a snapshot with no mode or legacy rolls back to it. parameters is an object keyed by section, not an array. DELETE /config/snapshots keeps the most recent snapshot and deletes the rest, oldest first, bounded per call; repeat while truncated is true. The most recent snapshot cannot be deleted.

The session-based apply (Step 3: Apply Uploaded Template) accepts optional name, description, encryptionKey, failFast and saveOnly; a non-empty name also saves the template, and saveOnly saves it without applying. {} still applies the whole uploaded template.

New: log query service

GET /logs/query and GET /logs/version are new. GET /logs/query returns entries, count and cursor; each entry carries timestamp, level, message, component and a fields object with the underlying journald metadata. Query parameters: limit (default 100), level, component (the exact service name, such as loopedge-dh), search, start and cursor. The response cursor is the RFC3339 timestamp of the newest entry in the page: send it back as start to tail forward, or as cursor to page backwards. cursor=0 is rejected with 400, while start=0 and unrecognised parameters are silently ignored, so confirm a filter applied by inspecting the entries.

New: log forwarding

Five Device Management v2 operations: GET and PUT /dm/v2/log-forwarding/config, GET /dm/v2/log-forwarding/status, POST /dm/v2/log-forwarding/start and POST /dm/v2/log-forwarding/stop.

Other changes

GET /dm/ifconfig accepts an optional show_bridges query parameter. High availability (/dm/v2/ha/role), static routes (/dm/v2/routes) and the rest of Device Management are unchanged. Cloud storage sync (/cloudstorage/*) moved from service version 0.14.0 to 0.16.1 with no API difference.


Unchanged

Dashboard, DataHub and Flows Manager have no API changes between 4.0.x and 4.4.x.

Upgrade checklist

  1. Replace every hard-coded Integration ProviderID using the slug-to-UUID table, and accept a UUID wherever you store one. Do not resolve by the 4.0.x provider name.
  2. Audit device and tag configurations for parity 3 or 4 on the fourteen drivers listed under DeviceHub.
  3. Use the exact trailing-slash form for the five /apps routes.
  4. Move Analytics global parameters onto processor instances or variables.
  5. Confirm your Digital Twins mutations always send the now-required IDs, and that CreateModelRequest sends Name and Assets.
  6. Remove marketplaceV2 and any other undocumented field from Configuration API requests.
  7. Re-create IDEC Serial bit tags on the *_bit registers and check their addresses; drop accessType from Toyopuc CMP-Link Serial tags; re-express pollPLCProgramChecksum on AB CompactLogix Ethernet Advanced; re-type byte / dword tags on AB Logix Ethernet register R.
  8. Set QoS 0 or 1 on AWS IoT Core instances that used QoS 2.
  9. Set driver properties explicitly where you relied on a default that changed (requestTimeoutMs, KeepAlive, accessMode, DefaultDataFile, the Modbus Multi-Station timeouts).
  10. Find exhaustive matches on AttributeType and handle the third member.
  11. Switch CSV-import checks from UploadStatus.Warnings to Stats and FailDetails.
  12. Plan the move from GetAnalyticsLogs / SubscribeToAnalyticsLogs to GET /logs/query before 2027-09-01, and to the OPC UA ByRef operations when convenient.

View this page as Markdown