Create a system
const url = 'https://example.com/api/v1/systems';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"expected_name":"example","label":"example","location":"example","name":"example","parent":"example","standard_id":"example","system_type_id":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/v1/systems \ --header 'Content-Type: application/json' \ --data '{ "expected_name": "example", "label": "example", "location": "example", "name": "example", "parent": "example", "standard_id": "example", "system_type_id": "example" }'Creates a system, optionally under a parent (a root needs an all-scoped grant), at a location, conforming to a standard, and classified as a system_type. Gated by system:create; the location reference resolves within the caller’s location:read scope, because the label this stores is rendered from it, and a location outside that scope is refused (422) exactly as :renderLabel refuses to preview it.
Request Body required
Section titled “Request Body required ”object
A URL to the JSON Schema for this object.
The name a create form previewed (POST /systems:renderLabel returns it). The create is refused with a 409 naming what it would produce instead, rather than silently landing a different name, if the number was taken or the system_type’s stem moved while the form was open. It does not name the row (the platform still does, and the row is still name_generated): it only asserts what that name will be. Applies only when the platform names the row: sending it beside a name is a 422.
What an operator reads; the name is the address
Location name this system is placed at
Name, unique within its placement (the address; lowercase letters, digits, hyphens). Omit to have the platform generate one from the system_type’s stem.
Parent system name; omit for a root system
The standard it conforms to, by handle or uuid; omit for a one-off system
The system_type it is classified as (what kind of space it is), by name or uuid; omit to leave it unclassified
Responses
Section titled “ Responses ”Created
object
A URL to the JSON Schema for this object.
The scope-aware actions the caller may perform on this row (create a child, update, delete); a UI hint, the server still enforces.
The resolved effective tags (key -> winning value) that cascade onto this system (platform, its location, its system tree); for the Tags column.
object
Whether the platform rendered this label from a label rule rather than an operator typing it. Read-only: write label to claim it, write an empty label to hand it back.
The location’s name, for display
The location’s id, the canonical handle
How many components are bound into this system
Whether the platform picked this name (from the system_type’s stem) rather than an operator typing it.
The parent system’s name, for display; absent for a root system
The parent system’s id, the canonical handle
The dotted address (e.g. boi.17c.$sys.av). Set on a GET or LIST response; empty on a create/update/move/rename response (refetch the row to see it).
Path split on ’.’, accessors included, so the round trip through the resolver stays lossless.
Two display-only compact forms of path, dash and bare. Neither is accepted back by the resolver: stripping/compacting is lossy.
object
The dash render’s segments concatenated with no separator, with the final stem-ordinal segment compacted to
The path’s non-accessor segments joined with ’-’ (e.g. boi-17c-216b-display-1). Display only; not accepted by the resolver.
The standard’s handle, for display; omitted for a one-off system
The standard’s uuid; the stable form of standard
The system_type’s name, for display: what kind of space this is (board, class, video-wall). Omitted for an unclassified system. Distinct from standard, which is the blueprint it is built to.
The system_type’s uuid; the stable form of system_type
Example
{ "$schema": "/api/v1/schemas/SystemBody.json"}default
Section titled “default ”Error
object
A URL to the JSON Schema for this object.
A human-readable explanation specific to this occurrence of the problem.
Optional list of individual error details
object
Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’
Error message text
The value at the given location
A URI reference that identifies the specific occurrence of the problem.
HTTP status code
A short, human-readable summary of the problem type. This value should not change between occurrences of the error.
A URI reference to human-readable documentation for the error.
Example
{ "$schema": "/api/v1/schemas/ErrorModel.json", "detail": "Property foo is required but is missing.", "instance": "https://example.com/error-log/abc123", "status": 400, "title": "Bad Request", "type": "about:blank"}