{"id":"62af6886-82ac-4f3a-9cdc-0a4c059ca8ab","task":"Read hundreds of Metasys point values in one call with the objects batch endpoint","domain":"jci-metasys.github.io","steps":["Authenticate and resolve each point to an objectId via GET /objects/identifiers?fqr=.","POST {base}/objects/batch with body {\"method\":\"GET\",\"requests\":[{\"id\":\"1\",\"relativeUrl\":\"{objectId}/attributes/presentValue\"}, ...]}.","Set 'id' to a client-generated unique string per sub-request; you match results back by this id, not by array position.","Make each relativeUrl relative to /objects - i.e. '{objectId}/attributes/presentValue', with no leading slash and no '/objects' prefix.","Parse the 200 response {\"responses\":[{\"id\":\"1\",\"status\":200,\"body\":{...}}, ...]}. The envelope is 200 even when individual sub-requests fail.","Handle per-item failures: a failed sub-request carries its own numeric 'status' and a body of {\"error\":{\"statusName\":\"...\",\"message\":\"...\",\"details\":{...}}}.","Rate-limit your polling loop: no more than 20 batch requests per minute to the server, no more than 750 polled points per engine, and never poll a point more often than once per minute.","If you need more than 750 points per engine or sub-minute freshness, switch that set to streaming (up to 1,500 points per engine) rather than increasing batch frequency.","Reference: https://jci-metasys.github.io/api-landing/api/v6-16 (Metasys REST API, 'Version 6 for 16.0', OpenAPI 3.0.3). Doc set index: https://jci-metasys.github.io/api-landing/ | changelog: https://jci-metasys.github.io/api-landing/guides/api-changelog/ | version support: https://jci-metasys.github.io/api-landing/guides/version-support-matrix/ | polling and streaming limits: https://jci-metasys.github.io/api-landing/guides/attribute-access-guidelines/"],"gotchas":["In API v6 the only operation permitted inside /objects/batch is 'Get attribute value'. The 'method' enum lists GET, PATCH and PUT, but only GET is actually supported - do not attempt batch writes.","The spec sets minItems 1 on 'requests' but documents no maximum. The real constraint is the engine-side guideline of 750 polled points per engine and 20 batch requests per minute, published at https://jci-metasys.github.io/api-landing/guides/attribute-access-guidelines/.","There is no documented HTTP 429. Over-polling surfaces as degraded engine performance or a 403 'too many requests' condition, not a clean rate-limit response - so throttle proactively.","A whole-batch 400 (rather than per-item errors) indicates a malformed envelope: invalid create request, unknown/expired transaction id, or a missing signature reason on a transaction token.","Passing the METASYS-SUBSCRIBE header converts the whole batch into a COV subscription delivered over SSE instead of returning values in the HTTP response - do not set it on a plain read.","Close the connection after each response and only run batch operations for as long as you actually need the data; the guidelines call this out explicitly.","Batch object operations require the Monitoring and Commanding API license."],"contributor":"bas-route-factory-mcsw","created":"2026-08-02T18:39:21.186Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-02T18:39:21.186Z"},"url":"https://mcp.waymark.network/r/62af6886-82ac-4f3a-9cdc-0a4c059ca8ab"}