Five tools under one repo, all docs organized per DOCS-GUIDE.md: - aalogcli: .NET 4.8 / x86 CliFx CLI for reading System Platform binary logs (*.aaLGX) for LLM debugging, built on aaOpenSource/aaLog. Commands: last, tail, range, unread, fields. Stable JSON envelope under --llm-json. Build template under lib/build/ for rebuilding aaLogReader.dll. - aot: ArchestrA Object Toolkit 2014 v4.0 reference material. Dev guide (Markdown converted from CHM), API reference for the ArchestrA.Toolkit namespace, and the Monitor / Watchdog VS sample solutions. - graccesscli: .NET 4.8 / x86 CliFx CLI that automates Galaxy configuration via the ArchestrA GRAccess COM interop. Includes session daemon, IPC protocol, and llm-json envelope contract. - grdb: SQL/DDL exploration of the Galaxy Repository database. DDL captures, reusable queries, hierarchy / contained-name <-> tag-name translation notes. - histdb: LLM-oriented reference for AVEVA Historian retrieval. INSQL linked-server, extension tables, every wwXxx time-domain extension, every retrieval mode, alarm/event SQL recipes, REST API. Distilled from the 243-page Historian Retrieval Guide. Root contains: - CLAUDE.md: thin index pointing into each tool's README. - DOCS-GUIDE.md: doctrine for organizing docs for LLM consumption. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.7 KiB
Historian Data REST API
For when the consumer can't (or shouldn't) speak SQL — browsers, Excel, Power BI, Tableau, web frontends. Same data as the SQL extension tables, exposed as OData over HTTPS.
Versions
Two API versions are supported by AVEVA Insight:
| Version | Recommended? | Notes |
|---|---|---|
v2 |
Yes | TagFilter (POST/GET) on ProcessValues, AnalogSummary, StateSummary. Single quotes are NOT used around DateTime in $filter (except for events). Summary entities use StartDateTime / EndDateTime; raw / process value entities use DateTime. |
v1 |
Legacy | Still works. Uses datetimeoffset'...' quoting. Includes summary entities (Summary, Daily, Hourly, Minutely) that are v1-only. |
Pick v2 for new code unless you need a v1-only summary entity.
Authentication
Two flavors:
- AVEVA Historian Insight (on-premises) — Windows integrated security via Negotiate. The user must belong to
aaAdministrators,aaPowerUsers, oraaUsers. Most modern browsers and Excel handle this transparently. - AVEVA Insight (cloud) — OpenID Connect bearer-token, or Basic auth (
usernameis treated as the API key). Some clients (older Excel) lack OIDC support; Basic remains as a fallback.
There's also a "solution-specific retrieval token" path: include the token in the URL and skip the s/<solution_id> segment.
Endpoint shape
https://online.wonderware.com/s/<solution_id>/apis/historian/<api_version>/<resource>?<query_parameters>
<solution_id>— your Insight solution. Omitted when using a solution-specific retrieval token.<api_version>—v1orv2.<resource>— one of the resources below.<query_parameters>— OData ($filter,$top,$skip,$orderby,$select,$skiptoken) or REST-style (TagFilter=...&Resolution=...).
In the URL: %20 is space, %27 is a single quote. The Chrome JSONView viewer also accepts + for space, which makes URLs more readable.
OData operators
eq, ne, gt, ge, lt, le, and, or, not. Use parentheses for grouping. A $filter may contain at most one time clause combined with one filter clause via and. The filter clause itself may use any combination of operators internally.
If you need multiple values for the same field, use or:
((Priority eq 100 or Priority eq 200 or Priority eq 500) and (Severity le 2))
TagFilter (REST-style)
Supported on ProcessValues, AnalogSummary, StateSummary (v2+). OData filter notation, with hard limits:
- Up to 20
ANDclauses. - Up to 20
ORclauses. - Up to 2 UDF (user-defined function) clauses.
- Cannot mix
ANDandORin the sameTagFilter. - Operators must be lowercase (
and, notAnd). - Most attribute searches are case-insensitive; case-sensitive ones are:
InterpolationType,MessageOn,MessageOff.
Valid:
.../v2/ProcessValues?TagFilter=startswith(Source,'MVDS') and TagType eq 'string'
Invalid (mixed-case operator):
.../v2/ProcessValues?TagFilter=startswith(Source,'MVDS') And TagType eq 'string'
Retrieval resources (the catalog)
| Resource | Verb(s) | Purpose |
|---|---|---|
/ProcessValues |
GET | Raw value+time+quality (VTQ) records for one or more tags. |
/AnalogSummary |
GET | Aggregated analog statistics (min/max/avg/integral/etc.) over a window. |
/StateSummary |
GET | Time-in-state summaries for discrete/string/integer tags. |
/Events |
GET | Events and alarms (same content as the SQL Events table). |
/Tags |
GET / POST / DELETE | Tag metadata; v2 also returns extended properties. POST manages tags in bulk. |
/TagProperties |
GET | List of property names available on tags. |
/TagPropertyValues |
GET | Distinct values seen for a given tag property. |
/TagGroups |
GET | Groups of tags. |
/TagSuggest |
GET | Autocomplete-style tag-name suggestions. |
/TagSearch |
GET | Search tags by partial name / property. |
/TagExtendedProperties |
GET | Extended (custom) tag properties. |
/Summary |
GET | v1-only. Generic summary. |
/Daily, /Hourly, /Minutely |
GET | v1-only. Pre-bucketed summary periods. |
/SystemParameters |
GET | On-premises only. Server config. |
RetrievalMode and Resolution (REST-side names)
Same modes as the SQL wwRetrievalMode. The REST query parameter is named RetrievalMode. Supported values from the v2 spec: BestFit, Counter, Delta, Full, Interpolated, Maximum, Slope (and Cyclic, the default for analog).
Resolution is in milliseconds, applies to Raw, ProcessValues, and the summary entities — picks the granularity of the returned data.
ProcessValues — VTQ records
GET /v2/ProcessValues?$filter=FQN+eq+'plant12.pump6'+and+DateTime+gt+2017-07-13T00:00:00Z
Required: FQN (datasource.tagname), and a time predicate (DateTime for v2). Optional: OPCQuality, Value, Text (string tags / discrete-tag message text). Returns 200 with { fqn, datetime, ... }. 404 / 401 on missing FQN / unauthorized.
AnalogSummary — windowed analog stats
GET /v2/AnalogSummary
?$filter=FQN+eq+'Depot.Train09'
+and+StartDateTime+ge+2017-06-09T09:00:00-07:00
+and+EndDateTime+le+2017-06-09T10:00:00-07:00
&Resolution=3600000
Required: FQN, StartDateTime, EndDateTime (RFC 3339 / ISO 8601, UTC Z or explicit offset). Optional: RetrievalMode (Cyclic/Full, default Cyclic), Resolution, SliceBy (split summary by another tag's value at the same time, up to 10 SliceBy tags), SliceByValue (filter criterion for SliceBy), OPCQuality. Quality logic mirrors the SQL wwQualityRule = 'Good': all-Good → Good, full gap → Bad, mixed → Doubtful (64).
StateSummary — windowed time-in-state
Same shape as AnalogSummary but for state-tag data. Use RetrievalMode=Cyclic and a Resolution to bucket by time.
Events — alarms and events
GET /v2/Events?$filter=EventTime+gt+'2017-07-13T00:00:00'
Note the single quotes around the datetime for events specifically — events break the v2 "no quotes" rule because EventTime is treated as a string-style column.
Filterable optional parameters include ID (alarm GUID), EventTime, Type (Alarm.Set / Alarm.Acknowledge / Alarm.Clear / Alarm.Write / User.Write / User.Write.Secured / User.Write.Verified / Application.Write), Priority (1-999, lower = higher), Namespace, Severity (1=Critical, 2=Major, 3=Minor, 4=Informational), EventTimeUTCOffsetMins, ReceivedTime, IsAlarm. Property values are case-sensitive.
Pagination — $skiptoken
Responses larger than ~5000 records are paginated. The response body includes a nextLink containing $skiptoken=... — follow it to fetch the next page. You don't need to construct $skiptoken yourself.
Worked browser query
https://online.wonderware.com/s/ik97r5/apis/historian/v2/ProcessValues
?$filter=FQN+eq+'Baytown.tank_level'
+and+DateTime+gt+2017-07-13T00:00:00
&$top=200
Returns up to 200 raw VTQ records since the timestamp.
Excel / Power BI hookups
The PDF chapter (pp. 232-240) walks through:
- Excel —
Data → Get Data → From Web, paste the OData URL, sign in. Excel can refresh the connection on demand. - Postman — pick GET, paste URL, set Auth (Basic for cloud / Negotiate for on-prem), Send.
- Power BI —
Get Data → OData feed, paste the resource root (.../v2/ProcessValuesor similar), authenticate, then build the report.
The shape of the data Power BI sees is identical to a JSON pull, so any aggregation you'd do in Power Query mirrors what $filter would have selected server-side.
SSRS — Reporting Services extension
The AVEVA Historian SQL Server Reporting Services Extension lets SSRS report builders consume the same INSQL linked server queries documented in 05-query-recipes.md. PDF p. 241. Useful when the consumer is corporate reporting infrastructure rather than ad-hoc analysts.
Errors
| Code | Meaning |
|---|---|
| 200 | OK with body. |
| 401 Unauthorized | Token expired / missing membership in the aa* Windows groups. |
| 404 Not Found | FQN doesn't exist, or solution / resource path wrong. |
| 5xx | Historian / Insight server-side issue. Retry with backoff. |
Cross-references
- For the full property catalog of each resource, see PDF chapter "Browser-Friendly Data Retrieval" pp. 183-240.
- For SQL equivalents of every retrieval mode the REST API exposes, see
03-retrieval-modes.md. - For options that map across (
Resolution↔wwResolution,RetrievalMode↔wwRetrievalMode), see04-retrieval-options.md.