Overview
Infraspeak is a maintenance management platform (CMMS) for work orders, planned maintenance, assets, locations, stock and procurement. Its Public REST API v3 (https://api.infraspeak.com/v3) is documented on the Infraspeak Developer Portal, with an official OpenAPI spec behind the API Reference.
The API uses Infraspeak’s own names for some objects. A work order is a Failure (/failures), an asset is an Element (/elements), a planned job is a Work (/works), and a planned job order is a Scheduled Work (/works/scheduled). The topics below use the names you see in the Infraspeak app (work-order, asset, planned-job, planned-job-order).
The InfraspeakApi connector maps 22 MQTT topics onto that API. Typical uses: open a work order when an alarm is raised, add live readings to its observations, poll open work orders back onto the broker, read an asset’s metering statistics, and move a planned job order when a line stops. Each event publishes the Infraspeak reply on <topic>/response.
Prerequisites
- An Infraspeak account, and a Personal Access Token (PAT) from Infraspeak. Infraspeak issues tokens on request: ask for a sandbox token first (describe your application and integration), then for a production token once the integration is validated. Sandbox and production tokens are separate. A token from one environment does not work in the other.
- The PAT acts as a “System” user of your account. Changes it makes show up in the Infraspeak history as that user. It needs permission for the objects you call: work orders, assets, locations, clients, problems and planned jobs.
- The ids your account uses: a
client_id, aproblem_id(a Problem Type, not an Area), and alocal_id. Thelocal_idmust be a location of typelocation, not abuildingorlocation-folder. - Outbound HTTPS from the broker to
api.infraspeak.com(orapi.sandbox.infraspeak.com).
Authentication
Every event sendsAuthorization: {value.json.authorization}, so the payload carries the full header value Bearer <PAT>. Store it as a Hub secret, for example INFRASPEAK_AUTHORIZATION, and read it with GET SECRET in the action that publishes to the connector. A missing or invalid token returns 401 with "Authentication token invalid.". A valid token without permission returns 403.
The connector also sends Accept: application/json and a User-Agent that names the integration. Infraspeak asks integrations to identify themselves this way. Put your own contact in a fork.
Configuration
List events take the whole query string in
query. Infraspeak’s filter syntax:
Responses use a JSON:API shape:
{"data": {"type", "id", "attributes"}, "meta": {"pagination"}, "links"}. Errors look like {"status": "error", "error": {"http_code", "message", "properties"}}.
Basic Syntax
Examples
Publish directly to a connector topic:cmms/infraspeak/work-order/create, then read cmms/infraspeak/work-order/create/response. The new work order starts in state WAITING_APPROVAL.
Actions that feed the connector from plant data:
cmms/infraspeak/# with a rule. These payloads carry the token and can create and delete work orders.
Work order states
WAITING_APPROVAL → WAITING_RESOLUTION (approved) → IN_RESOLUTION (started) → PAUSED / COMPLETED. Deleting a work order moves it to ARCHIVED. ListOpenWorkOrders returns everything except COMPLETED and ARCHIVED. ListClosedWorkOrders returns COMPLETED. The public API has no call to approve, start, pause or close a work order. UpdateWorkOrder changes fields only, so technicians drive state changes in the Infraspeak app.
Priorities are integers: 1 low, 2 normal, 3 high (same day), 4 critical.
Webhooks
Infraspeak webhooks are set up in the Infraspeak web app (Settings → Integrations → Webhooks), not through the API. Events includeFAILURE_CREATED, FAILURE_STATE_CHANGED, FAILURE_CLOSED, ELEMENT_UPDATED and others. Deliveries are POST (or PUT) with the resource in data, an X-Is-Topic header naming the event, and an optional HMAC-SHA256 signature in X-Hook-Secret. Receiving them needs a separate connector with ENABLE_SERVER reachable from the internet. That connector is not packaged here.
Notes
- Rate limit: 60 requests per minute per token, on a rolling window. Above that the API returns
429withRetry-After. Poll every few minutes, or use webhooks. - Meter readings: the public v3 API documents no endpoint for writing meter readings.
GetAssetwithqueryshowMeteringData=truereturns each asset meter’s statistics (min, max, average, last value). Infraspeak’s IoT and meter ingestion is not in the public spec, so this connector does not package it. - Work orders and assets:
CreateWorkOrdertakes a location (local_id), not an asset. The public spec has no asset field on create. Put the asset code indescriptionorobservations. GetAssetcan answer302when the asset you asked for was merged into a network element.- Errors come back on the response topic:
400validation (field errors inerror.properties),401bad token,403permission,404unknown id or path,405wrong method (for examplePUT, which the API does not use),429rate limit.
Testing
The connector passes static checks against the official OpenAPI spec and a local contract mock that covers all 22 events. It was also probed against the real API without a token: every event returns401 Authentication token invalid., while unknown paths return 404. A run with a real token (sandbox or production) and a broker MQTT round-trip are still open.

