Introduction

Managing access to individual SharePoint list items is a common requirement for business applications. Instead of granting access to an entire list, you may want specific users or groups to view or edit only certain items. Power Automate makes this possible by using SharePoint REST APIs to break permission inheritance and assign unique permissions.

In this article, you'll learn how to configure item-level permissions in SharePoint using Send an HTTP request to SharePoint actions in Power Automate.

Why Use Item-Level Permissions?

Item-level permissions are useful when:

For example, when an invoice is created, only the Finance team and the requester should have access to it, while all other users are restricted.

Solution Overview

The process involves two main steps:

  1. Break the item's inherited permissions.

  2. Assign unique permissions to users or SharePoint groups.

The workflow looks like this:

Trigger
   │
   ▼
Break Permission Inheritance
   │
   ▼
Loop Through Required Users/Groups
   │
   ▼
Assign Permission Level
   │
   ▼
Item Now Has Unique Permissions

Prerequisites

Before you begin, ensure you have:

Step 1: Break Permission Inheritance

Add a Send an HTTP request to SharePoint action.

Configuration

PropertyValue
Site AddressYour SharePoint Site
MethodPOST

URI

_api/web/lists/getByTitle('InvoiceDetails')/items(ID)/breakroleinheritance(copyRoleAssignments=false,clearSubscopes=true)

Replace ID with the dynamic Item ID from your trigger.

What do these parameters mean?

ParameterDescription
copyRoleAssignments=falseRemoves inherited permissions completely.
clearSubscopes=trueClears unique permissions on child objects.

Headers

Accept : application/json;odata=verbose
Content-Type : application/json;odata=verbose

After this step, the item no longer inherits permissions from the parent list.

2

Step 2: Assign Unique Permissions

After breaking inheritance, add an Apply to each loop to iterate through the users or SharePoint groups that should receive access.

Inside the loop, add another Send an HTTP request to SharePoint action.

Configuration

PropertyValue
MethodPOST

URI

_api/web/lists/getByTitle('InvoiceDetails')/items(ID)/roleassignments/addroleassignment(principalid=GroupID,roledefid=RoleDefId)

Replace:

Common Role Definition IDs

Permission LevelRoleDefId
Full Control1073741829
Design1073741828
Edit1073741830
Contribute1073741827
Read1073741826
Limited Access1073741825

Example

Suppose:

The URI becomes:

_api/web/lists/getByTitle('InvoiceDetails')/items(25)/roleassignments/addroleassignment(principalid=18,roledefid=1073741826)

This grants the Finance group Read access to Item 25.

Getting a User's Principal ID

If assigning permissions to an individual user instead of a SharePoint group, first retrieve the user's Principal ID.

Use:

_api/web/siteusers/getbyemail('[email protected]')

Example response:

{
   "Id": 34
}

Then assign permissions:

_api/web/lists/getByTitle('InvoiceDetails')/items(25)/roleassignments/addroleassignment(principalid=34,roledefid=1073741830)

This grants the user Edit permission.

Complete Flow

  1. Trigger when an item is created or modified.

  2. Break permission inheritance.

  3. Retrieve the required SharePoint groups or users.

  4. Loop through each user or group.

  5. Assign the required permission level.

  6. End the flow.

Best Practices

Common Errors and Solutions

ErrorCauseSolution
403 ForbiddenInsufficient permissionsEnsure the flow connection has Full Control or Manage Permissions.
400 Bad RequestInvalid Group ID or Role Definition IDVerify the IDs are correct.
404 Not FoundIncorrect list name or item IDCheck the list title and dynamic Item ID.
Duplicate Role AssignmentPermission already existsRemove existing permissions or check before adding.

Advantages of This Approach

Conclusion

Power Automate and the SharePoint REST API provide a powerful way to implement item-level permissions. By breaking permission inheritance and assigning unique permissions programmatically, you can ensure that only authorized users or groups have access to sensitive list items. This approach is ideal for scenarios such as invoice tracking, HR records, contract management, and approval workflows, helping organizations improve security while reducing manual administration.