Introduction

OPC Expert Web Server (previously known as OPC Expert Rest API Server) enables end-users and developers to easily connect to OPC Expert and exchange data in real-time. This includes both reading and writing data across a wide range of industrial communication protocols.

OPC Expert Web Server enables client applications to interact with OPC Expert data in a seamless, standardized way.

Key Features

Data Access

  • Real-time data: Read all live data, create real-time trends, and display live updates.
  • Write data: Control setpoints and modify process values.
  • Historical data: Access and analyze historical records for trends and reporting.
  • JSON responses: All data exchanged with the Web Server is returned in a consistent JSON format.

Supported Interfaces

  • REST API: Standard HTTP-based interface for client-server communication.
  • SignalR: Enables real-time, push-based updates to client applications.

Communication Protocols

  • OPC Classic: Supports OPC DA (Data Access) and OPC HDA (Historical Data Access).
  • OPC UA: Supports OPC UA DA and OPC UA HA.
  • MQTT: Acts as Publisher, Subscriber, and Broker.
  • Modbus: Supports Modbus Master (client) and Modbus Slave (server).

Platform Support

  • Web Server (Windows-based):
    • Workstations: Windows XP through Windows 11
    • Servers: Windows Server 2003 through Windows Server 2022
  • Client Applications:
    • Runs on any hardware: PC, Mac, phone, PLC, etc.
    • Supports any operating system: Windows, Linux, macOS, Android, iOS, iPadOS, Unix.
    • Supports multiple programming languages: C, C++, Java, JavaScript, PHP, Python, VBA, VBScript, and more.

SignalR

OPC Expert Web Server offers a SignalR Hub with OPC-designed API functions. SignalR offers bidirectional communication between the Hub (Server) and the Hub Proxy (Client). The bidirectional feature enables asynchronous callbacks for server-side broadcasts and subscription updates for OPC capabilities.

Installation

To install OPC Expert Web Server, refer to OPC Expert’s main menu, and select Tools > Server & Services.

Ensure to check the Enabledbox for “OPC Expert UA Server” and “Web Server (HTTP/HTTPS)”. You may also check the Servicebox if you want OPC Expert Web Server to run in the background as a Windows service. Finally, click button “OK” to start installation.

After completing the installation, OPC Expert should display “Web Server” nodes on the left-hand tree (refer to image), if not, expand “This Computer” and the server nodes should populate. The Web Server nodes have the default server endpoints of “http://localhost” and “https://localhost”.

API Endpoints

OPC Expert Web Server contains multiple API endpoints such as browse, connect, history, ping, read, subscribe, write. These API endpoints enable clients to communicate with OPC Servers without the overhead and hassle of implementing third-party libraries or APIs.

The SignalR Hub in OPC Expert Web Server in under the Hub name “OPC”, which supports most Rest API endpoints, however, some SignalR endpoints are not available in Rest API. Refer to the table below for supported and not-supported APIs.

API

Rest API

SignalR Hub

Browse

Supported

Supported

Connect

Supported

Supported

History (Raw & Processed)

Supported

Supported

Ping

Supported

Supported

Read

Supported

Supported

Poll

Supported

Supported

Subscribe

Supported

Supported

Write

Supported

Supported

Response

OPC Expert Web Server, which includes both the SignalR Hub and REST API endpoints, returns responses in a standardized JSON structure to ensure consistency across all client interactions. Each response follows a “wrapper” format where the data object contains the primary object requested by the client, and the meta data provides supplementary information about the response, such as server details, timestamps, pagination, errors, or additional context.

{
  "data": {
    //object returned by the API call
  },
  "meta": {
    //metadata supporting the return object
  }
}

Metadata

In OPC Expert Web Server, metadata in the JSON response provides additional information about the data being returned, often related to pagination, errors, or context, without modifying the core data itself. All OPC Expert Web Server’s JSON responses contain these:

{
  "meta": {
    "WrapperId": "1839",
    "TotalPages": 1,
    "CurrentPage": 1,
    "NextPage": 1,
    "PreviousPage": 1,
    "TotalCount": 1,
    "ServerTimeStamp": "2026-03-20T15:11:36.2857439Z"
  }
}

Metadata

Description

TotalPages

Total result page count

CurrentPage

Current result page index

NextPage

Next result page index

PreviousPage

Previous result page index

ServerTimestamp

Current timestamp of server in UTC

Message

A string containing detailed messages from the server

Exception

An unhandled exception during API request

ErrorMessage

A string containing the Exception. Message from the Error object

SignalR Client (JavaScript)

Client-Side Dependencies

To use SignalR in a web application, the client must include the JavaScript dependencies. This library handles connection management, message transport, and communication with the SignalR hub on the server.

<script src="http://code.jquery.com/jquery-1.6.4.js"></script>
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.signalR/2.4.3/jquery.signalR.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.signalR/2.4.3/jquery.signalR.min.js"></script>

SignalR

Web clients can easily connect to OPC Expert Web Server’s SignalR Hub by creating a connection to the Hub name “OPC”. The snippet below shows a working example of how to create a connection to the SignalR Hub installed on a local machine.

function Initialize() {
  //create a connection to OPC Expert Web Server's SignalR Hub
  hub_connection = $.hubConnection('http://localhost');
  
  //create a proxy for OPC Expert Web Server under the Hub ‘OPC’
  hub_proxy = hub_connection.createHubProxy('OPC');
  
  //attach to the 'SubscriptionUpdate' callback
  //this receives OPC Subscription udpates from OPC Expert Web Server
  hub_proxy.on('SubscriptionUpdate', function (update) {
    
    //data contains the subsription update object which is an array of nodes
    for (let i = 0; i < update.data.length; i++) {
      console.log(update.data[i]);
    }
  
  });
  
  //IMPORTANT: starting a connection is not synchronous, use the "done" callback
  //to determine when a connection is ready to invoke method calls
  hub_connection.start({ withCredentials: false }).done(HubConnected);
}

Browse

The browse API uses the “browse” URL path parameter and is an HTTP GET method type request. The server allows clients to browse both local and remote OPC Servers, including their child nodes.

URL

https://localhost/browse?id=[node_id]

Parameters

Name

Required

Type

Description

computer

No

string

The target computer where the node resides. Defaults to “localhost”

separator

No

string

Separator string used to split apart node_id. Default “->”

id

No

String

The identifier string used to browse and locate the resource branch

SignalR

The Browse API can be invoked from the hub server with the “Browse” method name. This hub method can browse the root or a specific node from an OPC server.

function Browse() {
  //the 'Browse' API can browse root when called without a parameter
  _hub_proxy.invoke('Browse').then((response) => {
    //'data' contains the child nodes
    console.log(response.data);
  });
}
function Browse(node) {
  //the 'Browse' API can browse a specific node
  _hub_proxy.invoke('Browse', node).then((response) => {
    //'data' contains the child nodes
    console.log(response.data);
  });
}

Response

{
  "data": [
    {
      "Server": "opc.tcp://OPC01:57888/OpcExpert",
      "NodeIdentifier": {
        "ReferenceTypeId": "i=35",
        "IsForward": true,
        "NodeId": "ns=2;s=OPC01",
        "BrowseName": "2:OPC01",
        "DisplayName": "OPC01",
        "NodeClass": 1,
        "TypeDefinition": "i=5001"
      },
      "DirectoryPathSeparator": "->",
      "Browsed": false,
      "UserFriendlyName": "OPC01",
      "GetOriginalName": "OPC01",
      "BState": 3,
      "HasItems": false,
      "BrowsePath": "OPC01",
      "DirectoryPath": [
        "OPC01",
        "opc.tcp://OPC01:57888/OpcExpert",
        "OPC01"
      ]
    }
  ],
  "meta": {
    "WrapperId": "709",
    "TotalPages": 1,
    "CurrentPage": 1,
    "NextPage": 1,
    "PreviousPage": 1,
    "TotalCount": 1,
    "ServerTimeStamp": "2026-03-20T15:02:06.6913354Z"
  }
}

Connect API

The connect API uses “connect” URL path and is an HTTP GET method request and does not require any parameters

URL

http://localhost/connect

SignalR

The Connect API can be invoked from the hub server with the “Connect” method name. This method is optional and can be used to read the current settings of OPC Expert Web Server. The “Connect” Hub method does not require any parameters.

function Connect() {
  //the 'Connect' API does not require any parameters
  _hub_proxy.invoke('Connect').then((response) => {
    console.log(response);
  });
}

A client does not need to use the connect API to do other API operations, such as “read” and “write”. This API is retrieves OPC Expert Web Server configuration.

The response the server returns on “Connect” is data containing the properties of OPC Expert Web Server such as EndPoints, SubscriptionRate, PathSeparator, SubscriptionTImeout, ReadRequestTimeout, WriteRequestTimeout, WriteRequestTimeout and AcceptCertificateByDefault. Note, these properties are only configurable through OPC Expert client application “OPC Expert.exe”.

Response

{
  "data": {
    "Name": "OPC Expert Web Server",
    "SubscriptionRate": 1000,
    "PathSeparator": "->",
    "HttpPort": 80,
    "HttpsPort": 443,
    "SubscriptionTimeout": 120000,
    "ReadRequestTimeout": 60000,
    "WriteRequestTimeout": 60000,
    "BrowseRequestTimeout": 60000,
    "AcceptCertificatesByDefault": true,
    "HubName": "OPC",
    "Endpoints": [
      "http://192.168.1.79:80",
      "http://127.0.0.1:80",
      "http://localhost:80",
      "http://opc01:80",
      "http://192.168.1.79",
      "http://127.0.0.1",
      "http://localhost",
      "http://opc01",
      "https://192.168.1.79:443",
      "https://127.0.0.1:443",
      "https://localhost:443",
      "https://opc01:443",
      "https://192.168.1.79",
      "https://127.0.0.1",
      "https://localhost",
      "https://opc01"
    ]
  },
  "meta": {
    "WrapperId": "3654",
    "TotalPages": 1,
    "CurrentPage": 1,
    "NextPage": 1,
    "PreviousPage": 1,
    "TotalCount": 14,
    "ServerTimeStamp": "2026-03-19T18:06:11.3755925Z"
  }
}

History API (Raw & Processed)

OPC Expert Rest API Server provides two history APIs, the first one is processed history reads under the “history/processed” URL path parameter and the second one is under the “history/raw”.

Processed Request

The “history/processed” API is an HTTP GET method request and contains multiple optional parameters such as: “start”, “end”, “at”, “span”, “max”, “aggregate”, “slope_extrapolation”. The API requires the “item” parameter to be set at least once (it can be set multiple times for multiple OPC Items). The default values for the optional parameters can be found in the Parameters table (Figure 1.0)

URL

http://localhost/history/processed?item=[node-id]

Parameters

Name

Required

Type

Description

item

Yes

String

Node ID of OPC item. Can be used multiple times per request.

start

No

DateTime

Timestamp indicating the start time of the history request. The default value is NULL.

end

No

DateTime

Timestamp indicating the end time of the history request. The default value is NULL.

span

No

Int

The span of milliseconds after the start time. This indicates the end time. The default value is 0.

max

No

Int

The maximum count (number) of results between the start time and end time. The default value is 1000.

aggregate

No

Uint

Set the calculation aggregate for the server to use. Refer to OPC UA documentation for more details on aggregate types. The default value is 2341.

slope_extrapolation

No

Bool

Sets the server to request estimated values using slope extrapolation. The default value is false.

Raw Request

The “history/raw” API is an HTTP GET method request and contains multiple optional parameters such as: “start”, “end”, “at”, “span”, “max”, “unlimited_values”, “return_bounds”. The default values for the optional parameters can be found in the Parameters table (Figure 1.1)

URL

http://localhost:57080/history/raw?item=[node-id]

Parameters

Name

Required

Type

Description

item

Yes

String

Node ID of OPC item. Can be used multiple times per request.

start

No

DateTime

Timestamp indicating the start time of the history request. The default value is NULL.

end

No

DateTime

Timestamp indicating the end time of the history request. The default value is NULL.

span

No

Int

The span of milliseconds after the start time. This indicates the end time. The default value is 0.

max

No

Int

The maximum count (number) of results between the start time and end time. The default value is 1000.

aggregate

No

Uint

Set the calculation aggregate for the server to use. Refer to OPC UA documentation for more details on aggregate types. The default value is 2341.

slope_extrapolation

No

Bool

Sets the server to request estimated values using slope extrapolation. The default value is false.

Response

{
  "data": [
    {
      "Item": {
        "BufferSize": 0,
        "Active": false,
        "Enabled": false,
        "Properties": {
          "UpdateRate": -1,
          "Writeable": true,
          "ResultID": 0,
          "Value": 0,
          "SourceTimestamp": "2026-03-20T09:10:59.7775866-06:00",
          "ServerTimestamp": "0001-01-01T00:00:00",
          "DataType": "String",
          "Description": "0",
          "Validated": true,
          "BufferSize": 10000,
          "UseStatusCode": true,
          "StatusCode": 0,
          "StatusCodeDescription": "Good [0000]"
        },
        "Server": "opc.tcp://opc01:57890/opcexpertarchiveserver",
        "Computer": "opc01",
        "NodeIdentifier": {},
        "DirectoryPathSeparator": "->",
        "Browsed": false,
        "UserFriendlyName": "ns=2;s=bridging WriteCount(0000007) to WriteCount(0000008)",
        "GetOriginalName": "ns=2;s=bridging WriteCount(0000007) to WriteCount(0000008)",
        "BState": 3,
        "HasItems": false,
        "BrowsePath": "bridging WriteCount(0000007) to WriteCount(0000008)",
        "DirectoryPath": [
          "opc01",
          "opc.tcp://opc01:57890/opcexpertarchiveserver",
          "ns=2;s=bridging WriteCount(0000007) to WriteCount(0000008)"
        ]
      },
      "Updates": [
        {
          "Value": 0,
          "StatusCode": 1026,
          "SourceTimeStamp": "2026-03-20T21:00:06Z",
          "ServerTimeStamp": "2026-03-20T21:00:06Z"
        }
      ]
    }
  ],
  "meta": {
    "WrapperId": "1839",
    "TotalPages": 1,
    "CurrentPage": 1,
    "NextPage": 1,
    "PreviousPage": 1,
    "TotalCount": 1,
    "ServerTimeStamp": "2026-03-20T15:11:36.2857439Z"
  }
}

Ping API

The ping API uses “ping” URL path parameter and is an HTTP GET method request. The “ping” API allows clients to test the responsiveness of the server. This API requires no parameters.

URL

http://localhost/ping

SignalR

function Ping() {
  //the 'Ping' API does not require any parameters
  _hub_proxy.invoke('Ping').then((response) => {
    console.log(response);
  });
}

Response

{
  "data": "2026-03-20T11:28:12.1135285-06:00",
  "meta": {
    "WrapperId": "18048",
    "ServerTimeStamp": "2026-03-20T17:28:12.1135285Z"
  }
}

Read API / Poll API

OPC Expert Web Server provides a read API that uses “read” as the URL path parameter. The “read” API is an HTTP GET method request and contains multiple optional parameters.

OPC Expert Rest API Server can read OPC Items from both local and remote OPC Servers. The server does a read by connecting and subscribing (if not already) to the OPC Item at a rate of 1000 milliseconds by default. Note that on any initial “read” calls, the server must connect, subscribe, and poll the OPC Item first. A client may configure the subscription rate by setting the “rate” parameter with a number representing the update rate in milliseconds.

The response from a “read” request is a JSON containing an array of OPC Item properties. These properties include the ID, Value, Quality, SourceTimestamp, ServerTimestamp, DataType, StatusCode and UseStatusCode attributes.

For a smaller response payload, it is also possible to request for minimal properties by setting query parameter “values_only” to “true”. This results in a JSON response only containing attributes Value, Quality, SoureTimestamp and ServerTimestamp.

To read OPC Items using Read API:

  • Read multiple OPC Item using the Node-ID or Browse Path.
  • Read a remote OPC Item using the computer name or IP Address and Node-ID.
  • Read with an existing subscription ID.
    • Note: Implement the subscription API first to retrieve the necessary subscription ID.

URL

  • http://localhost/read?item=[node-id]
  • http://localhost/read?subscription=[subscription-id]

Parameters

Name

Required

Type

Description

item

Yes

String

Node ID of OPC item. Can be used multiple times per request.

values_only

No

Bool

Indicates the return result to only contain values.

rate

No

UInt

The value used to set the update rate of the item(s) during subscription.

separator

No

String

String used to separate the path parameter

SignalR

The Read API can be invoked from the hub server with the “Read” hub method name. This hub method requires an array of OPC item node identifiers.

function Read(nodes) {
  //the 'Read' API can read a collection nodes
  _hub_proxy.invoke('Read', nodes).then((response) => {
    //data will contain the array of node properties
    console.log(response.data);
  });
}

Response:

{
  "data": [
    {
      "BufferSize": 0,
      "Active": true,
      "Enabled": true,
      "Properties": {
        "UpdateRate": 1000,
        "Writeable": true,
        "ResultID": 0,
        "Value": 3.141592654,
        "SourceTimestamp": "2026-03-20T18:21:03.736Z",
        "ServerTimestamp": "2026-03-20T18:21:23.2534831Z",
        "DataType": "Double",
        "Description": "",
        "Validated": true,
        "BufferSize": 10000,
        "UseStatusCode": true,
        "StatusCode": 192,
        "StatusCodeDescription": "Good [00C0]"
      },
      "Server": "ICONICS.SimulatorOPCDA.2",
      "Computer": "opc01",
      "NodeIdentifier": {
        "IsForward": true,
        "NodeId": "ns=2;s=ICONICS.SimulatorOPCDA.2->Numeric.Memory",
        "BrowseName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
        "DisplayName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
        "NodeClass": 2
      },
      "DirectoryPathSeparator": "->",
      "Browsed": false,
      "UserFriendlyName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
      "GetOriginalName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
      "BState": 3,
      "HasItems": false,
      "BrowsePath": "Numeric.Memory",
      "DirectoryPath": [
        "opc01",
        "opc.tcp://opc01:57888/OpcExpert",
        "ICONICS.SimulatorOPCDA.2->Numeric.Memory"
      ],
      "ID": "ICONICS.SimulatorOPCDA.2->Numeric.Memory"
    }
  ],
  "meta": {
    "WrapperId": "247",
    "TotalPages": 1,
    "CurrentPage": 1,
    "NextPage": 1,
    "PreviousPage": 1,
    "TotalCount": 1,
    "ServerTimeStamp": "2026-03-20T18:21:23.2581079Z"
  }
}

Subscribe API

OPC Expert Rest API Server provides a subscribe / subscription API that uses the URL path parameter “subscribe”. The subscribe API is an HTTP GET method request only and the response is a JSON containing the subscription GUID. A subscription request should contain at least one Node ID in order for the server to create a subscription to the target OPC Server. A client may configure the subscription update rate (in milliseconds) by setting the “rate” query parameter, by default it is set to 1000 milliseconds.

OPC Expert Rest API Server also checks for any existing subscriptions with the same item collection first before making new subscriptions. This means multiple clients may have received the same subscription GUID.

There are two ways to implement the subscribe API.

  • Subscribe with an OPC item’s Node IDs
  • Subscribe with an existing subscription ID.
    • Note that subscriptions only exist per process. Once a process shuts down or gets killed then any existing subscriptions are disposed.

URL

  • http://localhost/subscribe?item=[node-id]
  • http://localhost/subscribe?id=[subscription -id]

Parameters

Name

Required

Type

Description

item

Yes

String

Node ID of an OPC item. Can be used multiple times per request

id

Yes

String

Indicates an existing subscription with a string or GUID

Exception

No

Bool

Poll, report-by-exception. Only return items that have updates.

SignalR

The Subscribe API can be invoked from the hub server with the “Subscribe” method name.

The “Subscribe” hub method can either be used with an array of OPC item node identifiers or with an existing subscription GUID.

function Subscribe(items, rate) {
  //the 'Subscribe' API can subscribe to a collection of nodes
  _hub_proxy.invoke('Subscribe', items, rate).then((response) => {
    //data will contain the subscription information and items
    console.log(response.data);
  });
}

Response

{
  "data": {
    "UpdateRate": 1000,
    "SubscribedItems": [
      {
        "BufferSize": 0,
        "Active": true,
        "Enabled": true,
        "Properties": {
          "UpdateRate": 1000,
          "Writeable": true,
          "ResultID": 0,
          "Value": 3.141592654,
          "SourceTimestamp": "2026-03-20T18:21:03.736Z",
          "ServerTimestamp": "2026-03-20T18:21:23.2311393Z",
          "DataType": "Double",
          "Description": "",
          "Validated": true,
          "BufferSize": 10000,
          "UseStatusCode": true,
          "StatusCode": 192,
          "StatusCodeDescription": "Good [00C0]"
        },
        "Server": "ICONICS.SimulatorOPCDA.2",
        "Computer": "opc01",
        "NodeIdentifier": {
          "IsForward": true,
          "NodeId": "ns=2;s=ICONICS.SimulatorOPCDA.2->Numeric.Memory",
          "BrowseName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
          "DisplayName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
          "NodeClass": 2
        },
        "DirectoryPathSeparator": "->",
        "Browsed": false,
        "UserFriendlyName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
        "GetOriginalName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
        "BState": 3,
        "HasItems": false,
        "BrowsePath": "Numeric.Memory",
        "DirectoryPath": [
          "opc01",
          "opc.tcp://opc01:57888/OpcExpert",
          "ICONICS.SimulatorOPCDA.2->Numeric.Memory"
        ],
        "ID": "ICONICS.SimulatorOPCDA.2->Numeric.Memory"
      }
    ],
    "ID": "a3eaf409",
    "ItemCount": 1,
    "LastReadTimestamp": "2026-03-20T12:29:51.2188202-06:00",
    "ReportByException": false
  },
  "meta": {
    "WrapperId": "1254",
    "ServerTimeStamp": "2026-03-20T18:29:51.2078892Z"
  }
}

Write API

The write API uses the “write” URL path parameter and is both an HTTP GET and HTTP POST method request. OPC Expert Rest API Server can write to local and remote OPC Items, and the response is a JSON containing an array of OPC Item properties after writing. Therefore, the “write” API is “write” and “read” request, the “read” is present to confirm the “write” executed properly. Hence, this is a form of a verified write.

To use the “write” API with an HTTP GET method request:

  • The “item” query parameter is set using the Node-ID of the OPC Item with a corresponding “value” query parameter which will contain the Value to set for the item.
  • This “item” and “value” pairing can be done multiple times in a single request and is order based. This means that these endpoints will yield the same result:
    • http://localhost/write?item=Item1&value=Value&item=Item2&value=Value2
    • http://localhost/write?item=Item1&item=Item2&value=Value1value=Value2
    • http://localhost/write?item=Item1&value=Value&value=Value2&item=Item2

To use the “write” API with an HTTP POST method request:

  • The body is an array of OPC Item properties which should at least include the ID and Value. Other properties can also be added, such as Quality, SourceTimestamp, ServerTimestamp, Description, and StatusCode.

URL

http://localhost/write?item=[node-id]&value=[node-value]

Parameters

Name

Required

Type

Description

item

Yes

String

Node ID of an OPC item. Can be used multiple times per request

value

Yes

String

Value of item as a string. Can be used multiple times per request

SignalR

The Write API can be invoked from the hub server with the “Write” hub method name. This hub method requires 2 array parameters. The first array is a collection of OPC item node identifiers. The second array is a collection of corresponding values for the items in the first array. The contents of the arrays must be in order of item-to-value pairing.

function Write(items, values) {
  //the 'Write' API can write to a collection nodes
  _hub_proxy.invoke('Write', items, values).then((response) => {
    //data will contain the array of node properties
    console.log(response.data);
  });
}

Response

{
  "data": [
    {
      "BufferSize": 0,
      "Active": false,
      "Enabled": false,
      "Properties": {
        "UpdateRate": 1000,
        "Writeable": true,
        "ResultID": 0,
        "Value": 0,
        "SourceTimestamp": "2026-03-20T15:20:39.4446167-06:00",
        "ServerTimestamp": "0001-01-01T00:00:00",
        "DataType": "Double",
        "Validated": false,
        "BufferSize": 10000,
        "UseStatusCode": true,
        "StatusCode": 0,
        "StatusCodeDescription": "Good [00C0]"
      },
      "Server": "ICONICS.SimulatorOPCDA.2",
      "Computer": "opc01",
      "NodeIdentifier": {
        "ReferenceTypeId": {},
        "IsForward": true,
        "NodeId": {
          "NamespaceIndex": 2,
          "IdType": 1,
          "Identifier": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
          "ServerIndex": 0,
          "IsNull": false,
          "IsAbsolute": false
        },
        "BrowseName": {
          "NamespaceIndex": 0,
          "Name": "ICONICS.SimulatorOPCDA.2->Numeric.Memory"
        },
        "DisplayName": {
          "Text": "ICONICS.SimulatorOPCDA.2->Numeric.Memory"
        },
        "NodeClass": 2,
        "TypeDefinition": {}
      },
      "ResourceType": "UAItem",
      "DirectoryPathSeparator": "->",
      "Browsed": false,
      "UserFriendlyName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
      "GetOriginalName": "ICONICS.SimulatorOPCDA.2->Numeric.Memory",
      "BState": 3,
      "HasItems": false,
      "BrowsePath": "Numeric.Memory",
      "DirectoryPath": [
        "opc01",
        "opc.tcp://opc01:57888/OpcExpert",
        "ICONICS.SimulatorOPCDA.2->Numeric.Memory"
      ],
      "ID": "ICONICS.SimulatorOPCDA.2->Numeric.Memory"
    }
  ],
  "meta": {
    "WrapperId": "11932",
    "TotalPages": 1,
    "CurrentPage": 1,
    "NextPage": 1,
    "PreviousPage": 1,
    "TotalCount": 1,
    "ServerTimeStamp": "2026-03-20T21:20:39.7981777Z"
  }
}

OPC Expert – Rest API Command Features

OPC Expert client application has a “Rest API Command” right-click menu, which only appears when users setup a local “OPC Expert Web Server”. The menu enables users to generate code snippets for OPC Expert Web Server APIs.

To use the “Rest API Command” menu, right-click on one or multiple OPC Items in OPC Expert and hover over “Rest API Command”.

HTTP (Non-Secure) / HTTPS Menu (Secure)

The “Rest API Command” menu contains sub-menus: “HTTP” or “HTTPS”. This allows the client to select the protocol to use when generating the URL / endpoint or code snippets.

Copy Item ID

This sub menu copies the OPC Item identifier to the clipboard. This menu item is mostly used for debugging or support purposes.

URL / Endpoint

The URL / Endpoint submenu allows the client to copy a (URL Encoded) API endpoint of one or multiple OPC Items. For example, in the diagram, the endpoint http://localhost/read?item=System-%3E_Calculations–HeartBeat can be copied to the clipboard, open directly on your local internet browser, or display as a QR code image.

Generate Code Snippet

OPC Expert can generate code snippets for 3rd party applications. In the diagram below, a client has the option to generate code snippets in C#, Java, JavaScript, VBA and Python. The code snippet is automatically copied onto the clipboard (as text), and the user can then add it to their application.

OPC Expert Trend Application

OPC Expert Client Application allows users to trend real-time and historical OPC items on Windows Forms.

OPC Expert Trend applications can be opened on OPC Expert or on your local web browsers like Google Chrome, Mozilla Firefox and Microsoft Edge. The trend can also be displayed on any smart devices connected to the local network.

OPC Expert Trend on Smart Devices

OPC Expert can display a QR code image containing the trending endpoint for an OPC Item. To display the trend as a QR Code, click on “Options” and select “QR Code”. A new window should pop up with the trend endpoint displayed as a QR Code.

To open on a smart device, simply capture the QR code on the camera app and a hyperlink will lead to OPC Expert Trend page. Ensure the smart device is connected to the same network as OPC Expert.