Validate or apply a mass write
Checks a mass write plan, or starts it as an operation that you poll until it finishes. Send validateOnly as true to check the plan without writing.
query and a list of writes. The query is the one you used in Discover mass write point groups. Each write lists groupKeys and actions. An action has an id, a field of the group, and a value. Every discovered group must be in exactly one write. Every action id must be a field of its groups. A value must fit the field dataType, and a SELECT field accepts only its options.
Validate first
With validateOnly set to true, the response holds validationReport and nothing is written. Read:
valid:truewhen the plan has no issue.summary: How many points, groups, and writes the plan reaches, with counts of errors and warnings.writes[]: The outcome of each write, in request order, with its ownissues.issues: Issues with the plan as a whole.unmatchedGroups: Groups that no write covers.etag: A fingerprint of the plan. It is present only when the plan is valid.
code, a pointer to the part of your request, and a message. The codes are NO_MATCHING_POINTS, UNKNOWN_GROUP, DUPLICATE_WRITE, WRITES_INCOMPLETE, and INVALID_ACTION. A validation lists every issue. A real apply stops with 400 on the first kind of issue.
Start the write
Send the same body without validateOnly, with a requestId of your choice and the etag from the report. The response holds operation. Keep the last segment of operation.name as the operationId, then poll Get a mass write operation.
- The response is
200, not202. - Sending the same
requestIdwith the same body within 24 hours returns the operation it already started. Sending it with a different body returns400. - If the plan changed since you validated it, the
etagno longer matches and the call returns400. Validate again to get a newetag. - A building can have only one mass write running. A second apply returns
400with “Another point mass write is running” until the first operation is finished. An operation finishes when you read it and every point has an outcome.
403. An override longer than the reason threshold without a reason returns 400. Names and reasons can have up to 255 characters, and notes up to 2,000.Authorizations
Paste an access token from Create an access token. Tokens expire, so request a new one if you receive 401.
Body
Selects the points to write. Use the same query you used to discover the groups.
Set to true to validate the plan and write nothing. The default is false, which starts the write.
false
Your id for this write, up to 128 characters. Sending it again with the same body within 24 hours returns the operation it started.
128[^\p{C}\p{Z}]{1,128}"2b7e9c1a-aaa-2026-10-14"
The etag from a validation report. The call fails with 400 if the plan has changed since.
128[^\p{C}\p{Z}]{1,128}"sha256:9f86d0818..."
Name of the operation, up to 255 characters.
255(?s)(?=.*[^\p{C}\p{Z}])[\P{Cc}\n\r\t]*"AAA"
Why you are writing, up to 255 characters. A role can require a reason for longer overrides.
255(?s)(?=.*[^\p{C}\p{Z}])[\P{Cc}\n\r\t]*Free text, up to 2,000 characters.
2000(?s)(?=.*[^\p{C}\p{Z}])[\P{Cc}\n\r\t]*Each write sets actions on one or more groups. Every discovered group must be in exactly one write.
10000
