> For the complete documentation index, see [llms.txt](https://docs.customer-alliance.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.customer-alliance.com/nodes.md).

# Nodes

Hierarchy discovery, and the property attributes that group your properties.

## List hierarchy nodes within the key's scope

> Requires \`nodes:read\`. Each property carries its value of every property attribute (\`attributes\`), as the reports group it. A group's list is empty. See \*\*Property attributes\*\*.

```json
{"openapi":"3.1.0","info":{"title":"Customer Alliance API","version":"4.2.0"},"tags":[{"name":"Nodes","description":"Hierarchy discovery, and the property attributes that group your properties."}],"servers":[{"url":"https://app.customer-alliance.com/api/v4","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key created in Settings → API (`ca_live_…`)."}},"schemas":{"Node":{"type":"object","description":"A hierarchy node (business unit / property) within the key's scope.","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"parent_id":{"type":["string","null"],"format":"uuid"},"type":{"type":"string"},"attributes":{"type":"array","description":"A property's value of every property attribute on the account, in the order of `GET /property-attributes`. A group (any node that is not a `property`) holds none, so its list is empty. See **Property attributes**.","items":{"$ref":"#/components/schemas/NodeAttribute"}}}},"NodeAttribute":{"type":"object","description":"One attribute's value at a property: the value the reports group it by. That is the property's own, or, when it holds none, the value of the nearest property above it. `value_id` and `value` are null when it holds none.","properties":{"attribute_id":{"type":"string","format":"uuid"},"attribute":{"type":"string"},"value_id":{"type":["string","null"],"format":"uuid"},"value":{"type":["string","null"]}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}},"responses":{"Unauthorized":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The key lacks the required scope, or the account's plan does not include it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/nodes":{"get":{"summary":"List hierarchy nodes within the key's scope","description":"Requires `nodes:read`. Each property carries its value of every property attribute (`attributes`), as the reports group it. A group's list is empty. See **Property attributes**.","operationId":"listNodes","tags":["Nodes"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Node"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}}}}
```

## List the account's property attributes and their values

> Requires \`nodes:read\`. The attributes the account has defined (brand, operating model, region…) and each one's values, in the order the account set them. Account-wide: which property holds which value is on \`GET /nodes\`, within the key's subtree. See \*\*Property attributes\*\*.

```json
{"openapi":"3.1.0","info":{"title":"Customer Alliance API","version":"4.2.0"},"tags":[{"name":"Nodes","description":"Hierarchy discovery, and the property attributes that group your properties."}],"servers":[{"url":"https://app.customer-alliance.com/api/v4","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key created in Settings → API (`ca_live_…`)."}},"schemas":{"PropertyAttribute":{"type":"object","description":"A property attribute the account has defined, with its values in the order the account set them.","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"values":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"}}}}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}},"responses":{"Unauthorized":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The key lacks the required scope, or the account's plan does not include it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/property-attributes":{"get":{"summary":"List the account's property attributes and their values","description":"Requires `nodes:read`. The attributes the account has defined (brand, operating model, region…) and each one's values, in the order the account set them. Account-wide: which property holds which value is on `GET /nodes`, within the key's subtree. See **Property attributes**.","operationId":"listPropertyAttributes","tags":["Nodes"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PropertyAttribute"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}}}}}}
```
