Matter Cluster 31 — Access Control
Matter Cluster 31 (0x001F) Access Control: attributes, commands, events, data types, shadow paths and bridge payload examples.
Matter Cluster 31 — Access Control Cluster
Matter Cluster 31, also written as 0x001F, is the Access Control Cluster.
The Access Control Cluster exposes a data model view of a Node's Access Control List (ACL), which codifies the rules used to manage and enforce Access Control for the Node's endpoints and their associated cluster instances. Access to this Access Control Cluster itself requires a special Administer privilege level, such that only Nodes granted such privilege (hereafter termed "Administrators") can manage the Access Control Cluster. The Access Control Cluster is present on the root node endpoint of each Node, and must NOT be present on any other Endpoint of any Node.
Cluster Identity
| Field | Value |
|---|---|
| Cluster ID decimal | 31 |
| Cluster ID hex | 0x001F |
| Cluster name | Access Control |
| Cluster revision (Matter 1.6.1) | 3 |
| Role | utility |
| Scope | Node |
| PICS code | ACL |
| Typical endpoint | 0 |
Revision history
| Revision | Change |
|---|---|
| 1 | Initial revision |
| 2 | Added Managed Device feature, Extension feature, fixed conformance |
| 3 | Added Auxiliary feature and AuxiliaryACL attribute |
Shadow Path Format
Cluster 31 values in the device shadow use this format:
endpoint_id / 31 / attribute_id
Example:
{
"0/31/2": 4
}
| Part | Meaning |
|---|---|
0 | Endpoint ID |
31 | Access Control cluster |
2 | SubjectsPerAccessControlEntry attribute |
Cluster 31 Features
The FeatureMap attribute (0/31/65532) is a bitmap. Each bit set means the device implements that feature and the attributes and commands that depend on it.
| Bit | Code | Feature | Conformance | Meaning |
|---|---|---|---|---|
| 0 | EXTS | Extension | O | Device provides ACL Extension attribute |
| 1 | MNGD | ManagedDevice | desc | Device is managed |
| 2 | AUX | Auxiliary | desc | Some auxiliary ACL entries may be auto-generated by other features |
Example: FeatureMap = 0 means no optional feature is enabled; 7 means every feature listed above is enabled.
Data Types
AccessControlAuxiliaryTypeEnum
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 0 | System | M | This ACL entry exists because of some system reason and is likely non-revocable |
| 1 | Groupcast | M | Synthesized via Groupcast Cluster administrator-configured group membership |
AccessControlEntryAuthModeEnum
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 1 | PASE | M | Passcode authenticated session |
| 2 | CASE | M | Certificate authenticated session |
| 3 | Group | M | Group authenticated session |
AccessControlEntryPrivilegeEnum
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 1 | View | M | Can read and observe all (except Access Control Cluster) |
| 2 | ProxyView | D | — |
| 3 | Operate | M | View privileges, and can perform the primary function of this Node (except Access Control Cluster) |
| 4 | Manage | M | Operate privileges, and can modify persistent configuration of this Node (except Access Control Cluster) |
| 5 | Administer | M | Manage privileges, and can observe and modify the Access Control Cluster |
AccessRestrictionTypeEnum
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 0 | AttributeAccessForbidden | M | Clients on this fabric are currently forbidden from reading and writing an attribute |
| 1 | AttributeWriteForbidden | M | Clients on this fabric are currently forbidden from writing an attribute |
| 2 | CommandForbidden | M | Clients on this fabric are currently forbidden from invoking a command |
| 3 | EventForbidden | M | Clients on this fabric are currently forbidden from reading an event |
ChangeTypeEnum
| Value | Name | Conformance | Meaning |
|---|---|---|---|
| 0 | Changed | M | Entry or extension was changed |
| 1 | Added | M | Entry or extension was added |
| 2 | Removed | M | Entry or extension was removed |
AccessControlEntryStruct (struct) — fabric-scoped
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 1 | Privilege | AccessControlEntryPrivilegeEnum | M | — | The privilege field specifies the level of privilege granted by this Access Control Entry. |
| 2 | AuthMode | AccessControlEntryAuthModeEnum | M | — | The AuthMode field specifies the authentication mode required by this Access Control Entry. |
| 3 | Subjects | list of subject-id (nullable) | M | max SubjectsPerAccessControlEntry entries | The subjects field specifies a list of Subject IDs, to which this Access Control Entry grants access. |
| 4 | Targets | list of AccessControlTargetStruct (nullable) | M | max TargetsPerAccessControlEntry entries | The targets field specifies a list of AccessControlTargetStruct, which define the clusters on this Node to which this Access Control Entry grants access. |
| 5 | AuxiliaryType | AccessControlAuxiliaryTypeEnum | O | — | This field, if present, indicates the type of AuxiliaryACL entry stored. |
AccessControlExtensionStruct (struct) — fabric-scoped
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 1 | Data | octstr | M | max length 128 | This field may be used by manufacturers to store arbitrary TLV-encoded data related to a fabric's Access Control Entries. |
AccessControlTargetStruct (struct)
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 0 | Cluster | cluster-id (nullable) | M | — | — |
| 1 | Endpoint | endpoint-no (nullable) | M | — | — |
| 2 | DeviceType | devtype-id (nullable) | M | — | — |
AccessRestrictionEntryStruct (struct) — fabric-scoped
This structure describes a current access restriction on the fabric.
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 0 | Endpoint | endpoint-no | M | — | Indicates the endpoint having associated access restrictions scoped to the associated fabric of the list containing the entry. |
| 1 | Cluster | cluster-id | M | — | Indicates the cluster having associated access restrictions under the entry's Endpoint, scoped to the associated fabric of the list containing the entry. |
| 2 | Restrictions | list of AccessRestrictionStruct | M | min 1 entries | Indicates the set of restrictions applying to the Cluster under the given Endpoint, scoped to the associated fabric of the list containing the entry. |
AccessRestrictionStruct (struct)
This structure describes an access restriction that would be applied to a specific data model element on a given endpoint/cluster pair.
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 0 | Type | AccessRestrictionTypeEnum | M | — | Indicates the type of restriction, for example, AttributeAccessForbidden. |
| 1 | ID | uint32 (nullable) | M | — | — |
CommissioningAccessRestrictionEntryStruct (struct)
This structure describes a current access restriction when there is no accessing fabric.
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 0 | Endpoint | endpoint-no | M | — | Indicates the endpoint having associated access restrictions scoped to the associated fabric of the list containing the entry. |
| 1 | Cluster | cluster-id | M | — | Indicates the cluster having associated access restrictions under the entry's Endpoint, scoped to the associated fabric of the list containing the entry. |
| 2 | Restrictions | list of AccessRestrictionStruct | M | min 1 entries | Indicates the set of restrictions applying to the Cluster under the given Endpoint, scoped to the associated fabric of the list containing the entry. |
Cluster 31 Attributes
Cluster 31 defines 8 attributes plus the global attributes. Conformance: M mandatory, O optional, a feature code means "mandatory when that feature is present", square brackets mean "optional when …".
| ID | Hex | Attribute | Type | Conformance | Access | Qualities | Default |
|---|---|---|---|---|---|---|---|
| 0 | 0x0000 | ACL | list of AccessControlEntryStruct | M | R/W (read: admin, write: admin, fabric-scoped) | — | — |
| 1 | 0x0001 | Extension | list of AccessControlExtensionStruct | EXTS | R/W (read: admin, write: admin, fabric-scoped) | — | — |
| 2 | 0x0002 | SubjectsPerAccessControlEntry | uint16 | M | R (read: view) | — | — |
| 3 | 0x0003 | TargetsPerAccessControlEntry | uint16 | M | R (read: view) | — | — |
| 4 | 0x0004 | AccessControlEntriesPerFabric | uint16 | M | R (read: view) | — | — |
| 5 | 0x0005 | CommissioningARL | list of CommissioningAccessRestrictionEntryStruct | MNGD | R (read: view) | — | — |
| 6 | 0x0006 | ARL | list of AccessRestrictionEntryStruct | MNGD | R (read: view, fabric-scoped) | — | — |
| 7 | 0x0007 | AuxiliaryACL | list of AccessControlEntryStruct | AUX | R (read: admin, fabric-scoped) | change omitted | — |
Global attributes
| ID | Hex | Attribute | Meaning |
|---|---|---|---|
| 65528 | 0xFFF8 | GeneratedCommandList | Response command IDs this server generates. |
| 65529 | 0xFFF9 | AcceptedCommandList | Command IDs this server accepts. |
| 65531 | 0xFFFB | AttributeList | Attribute IDs implemented. |
| 65532 | 0xFFFC | FeatureMap | Implemented optional features (see above). |
| 65533 | 0xFFFD | ClusterRevision | Cluster revision implemented; 3 for a Matter 1.6.1 device. |
Attribute Details
Attribute 0 / 0x0000 — ACL
Path example:
0/31/0
No condensed specification text is available for ACL; use the type, conformance and constraint below together with the cluster description above.
| Property | Value |
|---|---|
| Type | list of AccessControlEntryStruct |
| Conformance | M |
| Access | R/W (read: admin, write: admin, fabric-scoped) |
| Constraint | desc |
Each entry is a AccessControlEntryStruct (see Data Types).
Example:
{
"0/31/0": []
}
Attribute 1 / 0x0001 — Extension
Path example:
0/31/1
If present, the Access Control Extensions may be used by Administrators to store arbitrary data related to fabric's Access Control Entries. The Access Control Extension list must support a single extension entry per supported fabric.
| Property | Value |
|---|---|
| Type | list of AccessControlExtensionStruct |
| Conformance | EXTS |
| Access | R/W (read: admin, write: admin, fabric-scoped) |
| Constraint | desc |
Each entry is a AccessControlExtensionStruct (see Data Types).
Example:
{
"0/31/1": []
}
Attribute 2 / 0x0002 — SubjectsPerAccessControlEntry
Path example:
0/31/2
This attribute provides the minimum number of Subjects per entry that are supported by this server. Since reducing this value over time may invalidate ACL entries already written, this value must NOT decrease across time as software updates occur that could impact this value. If this is a concern for a given implementation, it is recommended to only use the minimum value required and avoid reporting a higher value than the required minimum.
| Property | Value |
|---|---|
| Type | uint16 |
| Conformance | M |
| Access | R (read: view) |
| Constraint | 4 to 65534 |
Example:
{
"0/31/2": 4
}
Attribute 3 / 0x0003 — TargetsPerAccessControlEntry
Path example:
0/31/3
This attribute provides the minimum number of Targets per entry that are supported by this server. Since reducing this value over time may invalidate ACL entries already written, this value must NOT decrease across time as software updates occur that could impact this value. If this is a concern for a given implementation, it is recommended to only use the minimum value required and avoid reporting a higher value than the required minimum.
| Property | Value |
|---|---|
| Type | uint16 |
| Conformance | M |
| Access | R (read: view) |
| Constraint | 3 to 65534 |
Example:
{
"0/31/3": 3
}
Attribute 4 / 0x0004 — AccessControlEntriesPerFabric
Path example:
0/31/4
This attribute provides the minimum number of ACL Entries per fabric that are supported by this server. Since reducing this value over time may invalidate ACL entries already written, this value must NOT decrease across time as software updates occur that could impact this value. If this is a concern for a given implementation, it is recommended to only use the minimum value required and avoid reporting a higher value than the required minimum.
| Property | Value |
|---|---|
| Type | uint16 |
| Conformance | M |
| Access | R (read: view) |
| Constraint | 4 to 65534 |
Example:
{
"0/31/4": 4
}
Attribute 5 / 0x0005 — CommissioningARL
Path example:
0/31/5
No condensed specification text is available for CommissioningARL; use the type, conformance and constraint below together with the cluster description above.
| Property | Value |
|---|---|
| Type | list of CommissioningAccessRestrictionEntryStruct |
| Conformance | MNGD |
| Access | R (read: view) |
| Constraint | desc |
Each entry is a CommissioningAccessRestrictionEntryStruct (see Data Types).
Example:
{
"0/31/5": []
}
Attribute 6 / 0x0006 — ARL
Path example:
0/31/6
No condensed specification text is available for ARL; use the type, conformance and constraint below together with the cluster description above.
| Property | Value |
|---|---|
| Type | list of AccessRestrictionEntryStruct |
| Conformance | MNGD |
| Access | R (read: view, fabric-scoped) |
| Constraint | desc |
Each entry is a AccessRestrictionEntryStruct (see Data Types).
Example:
{
"0/31/6": []
}
Attribute 7 / 0x0007 — AuxiliaryACL
Path example:
0/31/7
No condensed specification text is available for AuxiliaryACL; use the type, conformance and constraint below together with the cluster description above.
| Property | Value |
|---|---|
| Type | list of AccessControlEntryStruct |
| Conformance | AUX |
| Access | R (read: admin, fabric-scoped) |
| Qualities | change omitted |
| Constraint | max 2000 entries |
Each entry is a AccessControlEntryStruct (see Data Types).
Example:
{
"0/31/7": []
}
Cluster 31 Commands
Cluster 31 has 1 client-to-server command and 1 response.
| ID | Hex | Command | Direction | Conformance | Response | Description |
|---|---|---|---|---|---|---|
| 0 | 0x00 | ReviewFabricRestrictions | client → server | MNGD | ReviewFabricRestrictionsResponse | This command signals to the service associated with the device vendor that the fabric administrator would like a review of the current restrictions on the accessing fabric. |
| 1 | 0x01 | ReviewFabricRestrictionsResponse | server → client | MNGD | — | Returns the review token for the request, which can be used to correlate with a FabricRestrictionReviewUpdate event. |
AcceptedCommandList
The AcceptedCommandList attribute lists the command IDs the endpoint actually implements:
endpoint_id / 31 / 65529
{
"0/31/65529": [
0
]
}
Before sending a Cluster 31 command, check that the command ID exists in endpoint/31/65529. Optional commands are only present when the matching feature is set in FeatureMap.
Bridge Command Payload Format
The bridge accepts Matter commands in this structure:
{
"message_id": "1",
"command": "device_command",
"args": {
"endpoint_id": 0,
"cluster_id": 31,
"command_name": "ReviewFabricRestrictions",
"payload": {},
"timed_request_timeout_ms": 1000
}
}
For Cluster 31, always use "cluster_id": 31. Payload keys are the command field names in lowerCamelCase. Octet-string fields are base64-encoded. timed_request_timeout_ms is required for timed commands and ignored otherwise.
Command: ReviewFabricRestrictions
Purpose
This command signals to the service associated with the device vendor that the fabric administrator would like a review of the current restrictions on the accessing fabric. This command includes an optional list of ARL entries that the fabric administrator would like removed. In response, a ReviewFabricRestrictionsResponse is sent which contains a token that can be used to correlate a review request with a FabricRestrictionReviewUpdate event. Within 1 hour of the ReviewFabricRestrictionsResponse, the FabricRestrictionReviewUpdate event is generated, in order to indicate completion of the review and any additional steps required by the user for the review.
Command Identity
| Field | Value |
|---|---|
| Command ID | 0 |
| Command hex | 0x00 |
| Command name | ReviewFabricRestrictions |
| Direction | client → server |
| Conformance | MNGD |
| Response | ReviewFabricRestrictionsResponse |
| Access | (invoke: admin, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | ARL | arl | list of CommissioningAccessRestrictionEntryStruct | M | desc | — |
Bridge Command Example
{
"message_id": "1",
"command": "device_command",
"args": {
"endpoint_id": 0,
"cluster_id": 31,
"command_name": "ReviewFabricRestrictions",
"payload": {
"arl": []
}
}
}
The device answers with ReviewFabricRestrictionsResponse (see below).
Command: ReviewFabricRestrictionsResponse
Purpose
Returns the review token for the request, which can be used to correlate with a FabricRestrictionReviewUpdate event.
Command Identity
| Field | Value |
|---|---|
| Command ID | 1 |
| Command hex | 0x01 |
| Command name | ReviewFabricRestrictionsResponse |
| Direction | server → client (response) |
| Conformance | MNGD |
Response Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | Token | token | uint64 | M | — | This field specifies a Token that can be used to correlate a ReviewFabricRestrictionsResponse with a FabricRestrictionReviewUpdate event. |
Cluster 31 Events
| ID | Hex | Event | Priority | Conformance | Description |
|---|---|---|---|---|---|
| 0 | 0x00 | AccessControlEntryChanged | info | M | The server must generate AccessControlEntryChanged events whenever its ACL attribute data is changed by an Administrator. - Each added entry must generate an event with ChangeType Added. - Each … |
| 1 | 0x01 | AccessControlExtensionChanged | info | EXTS | The server must generate AccessControlExtensionChanged events whenever its extension attribute data is changed by an Administrator. - Each added extension must generate an event with ChangeType … |
| 2 | 0x02 | FabricRestrictionReviewUpdate | info | MNGD | The server must generate a FabricRestrictionReviewUpdate event to indicate completion of a fabric restriction review. |
| 3 | 0x03 | AuxiliaryAccessUpdated | info | AUX | The server must generate AuxiliaryAccessUpdated events whenever its AuxiliaryACL attribute data changes due to system management operations. |
Event 0 — AccessControlEntryChanged
The server must generate AccessControlEntryChanged events whenever its ACL attribute data is changed by an Administrator. - Each added entry must generate an event with ChangeType Added. - Each changed entry must generate an event with ChangeType Changed. - Each removed entry must generate an event with ChangeType Removed.
| ID | Field | Type | Conformance | Meaning |
|---|---|---|---|---|
| 1 | AdminNodeID | node-id (nullable) | M | — |
| 2 | AdminPasscodeID | uint16 (nullable) | M | — |
| 3 | ChangeType | ChangeTypeEnum | M | The type of change as appropriate. |
| 4 | LatestValue | AccessControlEntryStruct (nullable) | M | The latest value of the changed entry. This field should be set if resources are adequate for it; otherwise it is set to null if resources are scarce. |
Event 1 — AccessControlExtensionChanged
The server must generate AccessControlExtensionChanged events whenever its extension attribute data is changed by an Administrator. - Each added extension must generate an event with ChangeType Added. - Each changed extension must generate an event with ChangeType Changed. - Each removed extension must generate an event with ChangeType Removed.
| ID | Field | Type | Conformance | Meaning |
|---|---|---|---|---|
| 1 | AdminNodeID | node-id (nullable) | M | — |
| 2 | AdminPasscodeID | uint16 (nullable) | M | — |
| 3 | ChangeType | ChangeTypeEnum | M | The type of change as appropriate. |
| 4 | LatestValue | AccessControlExtensionStruct (nullable) | M | The latest value of the changed extension. This field should be set if resources are adequate for it; otherwise it is set to null if resources are scarce. |
Event 2 — FabricRestrictionReviewUpdate
The server must generate a FabricRestrictionReviewUpdate event to indicate completion of a fabric restriction review. Due to the requirement to generate this event within a bound time frame of successful receipt of the ReviewFabricRestrictions command, this event may include additional steps that the client may present to the user in order to help the user locate the user interface for the Managed Device feature.
| ID | Field | Type | Conformance | Meaning |
|---|---|---|---|---|
| 0 | Token | uint64 | M | Indicates the Token that can be used to correlate a ReviewFabricRestrictionsResponse with a FabricRestrictionReviewUpdate event. |
| 1 | Instruction | string | O | This field provides human readable text that may be displayed to the user to help them locate the user interface for managing access restrictions for each fabric. |
| 2 | ARLRequestFlowUrl | string | O | — |
Event 3 — AuxiliaryAccessUpdated
The server must generate AuxiliaryAccessUpdated events whenever its AuxiliaryACL attribute data changes due to system management operations. This event should be generated only once per batch of changes, if many changes are done together. Administrators may use this event to trigger re-evaluation of overall access control currently granted to the node.
| ID | Field | Type | Conformance | Meaning |
|---|---|---|---|---|
| 0 | AdminNodeID | node-id (nullable) | M | — |
SmartphoneKey Notes
- Cluster 31 is present on SmartphoneKey devices or hubs today. See Matter Bridge Clusters — Detailed Reference and Matter Device Attributes & Commands for the values the bridge actually reports.
- Shadow paths follow
endpoint/31/attribute; attribute values that the device reports as unreadable are written asn/a. - Attribute IDs, command IDs and enum values on this page come from the CSA Matter 1.6.1 data model; descriptions are condensed from the specification text.