Skip to main content
Technical Preview

Overview

HxGN EAM (Hexagon’s enterprise asset management, formerly Infor EAM; newer hosts brand it Attune EAM) exposes every screen and tab as a REST web service under https://<EAM host>/axis/restservices, defined in OpenAPI 3 and browsable at https://<EAM host>/web/swagger/index.html. See the HxGN EAM Rest Web Services guide. The HxgnEamApi connector maps 22 MQTT topics onto those services. Typical uses: open a work order when an alarm is raised, push runtime hours or cycle counts as asset meter readings so meter-based PM fires, set an asset out of service from the machine state, and poll released work orders back onto the broker. Each event publishes the EAM reply on <topic>/response.

Prerequisites

  • An HxGN EAM tenant (HxGN SmartCloud, for example eu1.eam.hxgnsmartcloud.com or us1.eam.hxgnsmartcloud.com, or an on-premise server) and its tenant id.
  • An EAM user with the Connector checkbox selected (HxGN EAM Products section of the user record). Install parameter LGNCON decides how that user signs in (STD, LDAP or EXTERN).
  • A user group whose Interface Permissions grant Query, Insert, Update or Delete on each web service you call (Work Order, Work Order Activity, Comments, Meter Readings, Parts, Asset, Part, Grid).
  • Default Dataspys that include the fields the services need (GET collections return the default Dataspy of the screen).
  • Outbound HTTPS from the broker to the EAM host.

Authentication

Every event sends three headers taken from the payload: Store the Authorization value as a Hub secret, for example HXGN_EAM_AUTHORIZATION, and read it with GET SECRET in the action that publishes to the connector. The spec also accepts an API key in X-API-Key: fork the connector and replace the Authorization line with ADD "X-API-Key" "{value.json.api_key}". Optional EAM headers (role, apiversion, keepsession / sessionid, clonedscreen, cursorposition, authenticationmode) are not sent. Add them under WITH HEADERS in a fork if your tenant needs them, for example ADD "role" "<role>". A missing tenant returns 400 with NoTenantException; an unknown tenant returns 400 Invalid Tenant ID: ....

Configuration

Record keys are <code>#<organization>, and the # must be URL-encoded as %23 in id and parentid, for example "10000%23ORG1" for work order 10000 in ORG1 or "PUMP-101%23ORG1" for an asset. A raw # starts a URL fragment, so the organization never reaches EAM and the call fails with 404.
  • Lists. ListWorkOrders, ListAssets and ListParts take no filters: they return the screen’s default Dataspy, RSCLROWS rows at a time. To filter (for example work orders in status R), use QueryGrid (POST /grids) with GRID_NAME WSJOBS and an ADDON_FILTER, or a Dataspy id. Grid alias names and Dataspy ids depend on your tenant; check them in the grid response.
  • Writes. POST adds a record. PATCH changes only the fields you send; include the key block (WORKORDERID or ASSETID) as in the Swagger patch example. If you send recordid, it must match the stored value, or EAM answers “This record has been modified by another user”. PUT (Sync, full replace that blanks missing fields) is not packaged.
  • Required fields. Work orders: WORKORDERID, STATUS, DEPARTMENTID, FIXED. Asset meter readings: EQUIPMENTID, UOMID, READINGTYPEID, READINGDATE, NEWVALUE. Comments: ENTITYCOMMENTID, COMMENTTEXT, PRINT. GetWorkOrderDefaults returns the defaults for an organization.
  • Numbers and dates. Quantities are {"VALUE", "NUMOFDEC", "SIGN", "UOM"} objects (VALUE 128750 with NUMOFDEC 2 is 1287.50). Date objects carry YEAR as epoch milliseconds unless install parameter RSYRYYYY is YES (EAM 12.3+).

Basic Syntax

Examples

Publish directly to a connector topic:
to cmms/hxgn-eam/work-order/get, then read cmms/hxgn-eam/work-order/get/response. Actions that feed the connector from plant data:
Restrict who can publish to cmms/hxgn-eam/# with a rule: its payloads carry EAM credentials and can create and delete work orders.

Responses

Every reply uses the EAM envelope: Result.ResultData holds the data on 200, Result.InfoAlert / WarningAlert carry messages, and ErrorAlert or ConfirmationAlert is set on 400. 404 means an unknown service or record, 500 an internal error. With keepsession: true (fork), Result.SessionID can be reused in a sessionid header.

Notes

  • The catalog listed OAuth 2.0 through the Infor ION API gateway. Current HxGN EAM tenants publish basicAuth, apiKey (X-API-Key) and bearerAuth (OIDC) in their OpenAPI files; the ION gateway only applies to legacy Infor-hosted tenants and is not packaged.
  • Work order statuses, types (BRKD, …), departments, UOMs and reading types are tenant codes. The values in the examples are placeholders.
  • HxGN EAM has no webhook API in the REST guide. Poll with QueryGrid or the list events.
  • SOAP web services (/axis/services/EWSConnector) also exist; this connector uses REST only.

Testing

Static checks against the official OpenAPI files, a local contract mock covering all 22 events with negative controls, and real unauthenticated probes against HxGN SmartCloud (fake tenant, 400 Invalid Tenant ID on every event before any login) pass. A run against a real tenant and a broker MQTT round-trip are still open.

Not covered

PUT (Sync) and DELETE on child records, work order book labor, checklists, schedules, purchasing, stores, PM schedules, cases, documents and the CSV grid service. All are in the EAM Swagger and can be added to a fork.
Last modified on October 21, 2026