8.3 Client Permission Error - Tag Historian Query

When using the new system.Historian modules scripting functions in Ignition 8.3, I'm running into an error around client permissions when running in a Vision client.

I'm currently in a dev environment running Ignition 8.3.5-Snapshot.

I believe my project permissions are set up correctly. As I said, I'm in a dev environment, so I've enabled all project permissions with no required roles/users/etc. See here:

Here is the snippet of the function I'm using:

    query_results = system.historian.queryRawPoints(tag_paths, start, end, includeBounds=False)
    LOGGER.info("Raw query returned '{}' rows".format(len(query_results)))

On that same window, I've also created a test custom property and used a historical tag binding. That custom property and tag history binding executes with no client permission issues, which leads me further to believe that this is specifically a problem specifically with the new system.historian module.

To further prove that last point, I changed the project permissions and disabled tag history. The tag history binding stopped working, as expected.

Here is client console before disabling project permissions:

09:22:52.091 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- <HTML>Error executing script for event:&nbsp;<code><b>propertyChange</b></code><BR>on component:&nbsp;<code><b>Date Range</b></code>.
com.inductiveautomation.ignition.common.script.JythonExecException: Traceback (most recent call last):
  File "<event:propertyChange>", line 24, in <module>
  File "<module:Utils.History.HistoryUtils>", line 432, in get_daily_last_values
  File "<module:Utils.History.HistoryUtils>", line 282, in _get_last_values_by_period
	at com.inductiveautomation.historian.client.scripting.ClientHistorianFunctions.queryDataPoints(ClientHistorianFunctions.kt:76)
	at com.inductiveautomation.historian.common.scripting.AbstractHistorianFunctions.queryRawPoints(AbstractHistorianFunctions.kt:166)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
com.inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Unable to invoke gateway function 'com.inductiveautomation.historian.Historian.queryDataPoints' - client is missing required permission

	at org.python.core.Py.JavaError(Py.java:545)
	at org.python.core.Py.JavaError(Py.java:536)
	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:192)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.__call__(ScriptManager.java:561)
	at org.python.core.PyObject.__call__(PyObject.java:400)
	at org.python.pycode._pyx17._get_last_values_by_period$6(<module:Utils.History.HistoryUtils>:337)
	at org.python.pycode._pyx17.call_function(<module:Utils.History.HistoryUtils>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:187)
	at org.python.core.PyFunction.__call__(PyFunction.java:449)
	at org.python.pycode._pyx17.get_daily_last_values$10(<module:Utils.History.HistoryUtils>:439)
	at org.python.pycode._pyx17.call_function(<module:Utils.History.HistoryUtils>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:168)
	at org.python.core.PyFunction.__call__(PyFunction.java:437)
	at org.python.pycode._pyx71.f$0(<event:propertyChange>:31)
	at org.python.pycode._pyx71.call_function(<event:propertyChange>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyCode.call(PyCode.java:18)
	at org.python.core.Py.runCode(Py.java:1703)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:817)
	at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:208)
	at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter$ActionRunner.run(ActionAdapter.java:316)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.python.core.PyException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Unable to invoke gateway function 'com.inductiveautomation.historian.Historian.queryDataPoints' - client is missing required permission
	... 36 common frames omitted
Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Unable to invoke gateway function 'com.inductiveautomation.historian.Historian.queryDataPoints' - client is missing required permission
	at com.inductiveautomation.historian.client.scripting.ClientHistorianFunctions.queryDataPoints(ClientHistorianFunctions.kt:76)
	at com.inductiveautomation.historian.common.scripting.AbstractHistorianFunctions.queryRawPoints(AbstractHistorianFunctions.kt:166)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:190)
	... 33 common frames omitted
Caused by: com.inductiveautomation.ignition.common.rpc.RpcException: Unable to invoke gateway function 'com.inductiveautomation.historian.Historian.queryDataPoints' - client is missing required permission
	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:178)
	at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:355)
	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:117)
	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:151)
	at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
	at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1385)
	at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:751)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)
	at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:119)
	at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)
	at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)
	at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:823)
	at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:440)
	at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)
	at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)
	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)
	at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)
	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)
	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)
	at org.eclipse.jetty.server.Server.handle(Server.java:182)
	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:677)
	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)
	at java.lang.Thread.run(:0)

And here is the client console after disabling tag history in the project permissions (note both custom scripting failure as well as tag history binding failure):

09:27:40.554 [AWT-EventQueue-0] ERROR com.inductiveautomation.ignition.client.util.gui.ErrorUtil -- <HTML>Error executing script for event:&nbsp;<code><b>propertyChange</b></code><BR>on component:&nbsp;<code><b>Date Range</b></code>.
com.inductiveautomation.ignition.common.script.JythonExecException: Traceback (most recent call last):
  File "<event:propertyChange>", line 24, in <module>
  File "<module:Utils.History.HistoryUtils>", line 432, in get_daily_last_values
  File "<module:Utils.History.HistoryUtils>", line 282, in _get_last_values_by_period
	at com.inductiveautomation.historian.client.scripting.ClientHistorianFunctions.queryDataPoints(ClientHistorianFunctions.kt:76)
	at com.inductiveautomation.historian.common.scripting.AbstractHistorianFunctions.queryRawPoints(AbstractHistorianFunctions.kt:166)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
com.inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Unable to invoke gateway function 'com.inductiveautomation.historian.Historian.queryDataPoints' - client is missing required permission

	at org.python.core.Py.JavaError(Py.java:545)
	at org.python.core.Py.JavaError(Py.java:536)
	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:192)
	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.__call__(ScriptManager.java:561)
	at org.python.core.PyObject.__call__(PyObject.java:400)
	at org.python.pycode._pyx17._get_last_values_by_period$6(<module:Utils.History.HistoryUtils>:337)
	at org.python.pycode._pyx17.call_function(<module:Utils.History.HistoryUtils>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:187)
	at org.python.core.PyFunction.__call__(PyFunction.java:449)
	at org.python.pycode._pyx17.get_daily_last_values$10(<module:Utils.History.HistoryUtils>:439)
	at org.python.pycode._pyx17.call_function(<module:Utils.History.HistoryUtils>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyBaseCode.call(PyBaseCode.java:168)
	at org.python.core.PyFunction.__call__(PyFunction.java:437)
	at org.python.pycode._pyx83.f$0(<event:propertyChange>:31)
	at org.python.pycode._pyx83.call_function(<event:propertyChange>)
	at org.python.core.PyTableCode.call(PyTableCode.java:173)
	at org.python.core.PyCode.call(PyCode.java:18)
	at org.python.core.Py.runCode(Py.java:1703)
	at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:817)
	at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:208)
	at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter$ActionRunner.run(ActionAdapter.java:316)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.python.core.PyException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Unable to invoke gateway function 'com.inductiveautomation.historian.Historian.queryDataPoints' - client is missing required permission
	... 36 common frames omitted
Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Unable to invoke gateway function 'com.inductiveautomation.historian.Historian.queryDataPoints' - client is missing required permission
	at com.inductiveautomation.historian.client.scripting.ClientHistorianFunctions.queryDataPoints(ClientHistorianFunctions.kt:76)
	at com.inductiveautomation.historian.common.scripting.AbstractHistorianFunctions.queryRawPoints(AbstractHistorianFunctions.kt:166)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:190)
	... 33 common frames omitted
Caused by: com.inductiveautomation.ignition.common.rpc.RpcException: Unable to invoke gateway function 'com.inductiveautomation.historian.Historian.queryDataPoints' - client is missing required permission
	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:178)
	at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:355)
	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:117)
	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:151)
	at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
	at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1385)
	at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:751)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)
	at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:119)
	at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)
	at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)
	at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:823)
	at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:440)
	at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)
	at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)
	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)
	at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)
	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)
	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)
	at org.eclipse.jetty.server.Server.handle(Server.java:182)
	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:677)
	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)
	at java.lang.Thread.run(:0)
09:27:40.599 [AWT-EventQueue-0] WARN Vision.Binding.TagHistoryAdapter -- Error running query:
TagHistory(paths=[histprov:SqlHistorian:/prov:default:/tag:/cp_001/tot_flow_fit_001/ind/ind_total_tod], start=Tue Mar 03 00:00:00 EST 2026, end=Sat Mar 07 00:00:00 EST 2026, flags=8)@0ms
On: TotalizerTrend.Root Container.TestData
java.lang.Exception: Error running query:
TagHistory(paths=[histprov:SqlHistorian:/prov:default:/tag:/cp_001/tot_flow_fit_001/ind/ind_total_tod], start=Tue Mar 03 00:00:00 EST 2026, end=Sat Mar 07 00:00:00 EST 2026, flags=8)@0ms
On: TotalizerTrend.Root Container.TestData
	at com.inductiveautomation.factorypmi.application.gateway.QueryManager$QueryExecutor.run(QueryManager.java:320)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Unable to invoke gateway function 'ignition.historian.queryTagHistory' - client is missing required permission
	at com.inductiveautomation.ignition.client.rpc.PlatformRpcInstances.runTagHistoryQuery(PlatformRpcInstances.java:330)
	at com.inductiveautomation.ignition.client.rpc.PlatformRpcInstances.runTagHistoryQuery(PlatformRpcInstances.java:276)
	at com.inductiveautomation.factorypmi.application.gateway.GwiTagHistoryProvider.query(GwiTagHistoryProvider.java:11)
	at com.inductiveautomation.ignition.common.sqltags.history.cache.StandardCacheBucket.loadData(StandardCacheBucket.java:238)
	at com.inductiveautomation.ignition.common.sqltags.history.cache.StandardCacheBucket.getData(StandardCacheBucket.java:196)
	at com.inductiveautomation.ignition.common.sqltags.history.cache.SubCache$BucketHit.getData(SubCache.java:232)
	at com.inductiveautomation.ignition.common.sqltags.history.cache.SubCache.getData(SubCache.java:172)
	at com.inductiveautomation.ignition.common.sqltags.history.cache.TagHistoryCache.query(TagHistoryCache.java:294)
	at com.inductiveautomation.factorypmi.application.gateway.TagHistoryQuery.execute(TagHistoryQuery.java:37)
	at com.inductiveautomation.factorypmi.application.gateway.QueryManager$Query.execute(QueryManager.java:695)
	at com.inductiveautomation.factorypmi.application.gateway.QueryManager$QueryExecutor.run(QueryManager.java:317)
	... 1 common frames omitted
Caused by: com.inductiveautomation.ignition.common.rpc.proto.ProtoWrappedException: Unable to invoke gateway function 'ignition.historian.queryTagHistory' - client is missing required permission
	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:178)
	at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:355)
	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:117)
	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:151)
	at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
	at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1385)
	at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:751)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1622)
	at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:119)
	at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)
	at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:205)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1594)
	at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1555)
	at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:823)
	at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:440)
	at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:470)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)
	at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)
	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1071)
	at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)
	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)
	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)
	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)
	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)
	at org.eclipse.jetty.server.Server.handle(Server.java:182)
	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:677)
	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:416)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:480)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:443)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)
	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:981)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1211)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1166)
	at java.lang.Thread.run(:0)

Looks like a bug. You should open a support ticket to get it fixed.

Will do, thank you pturmel.

Hello Zachary, thank you for bringing this to our attention. A bug has been filed to fixed this.

1 Like