Sending SharePoint Files for Review: Power Automate Approval Attachments
Attach files directly to your Power Automate approvals. Master the distinct patterns needed for SharePoint Document Libraries and List Item Attachments.
A meaningful approval request gives the reviewer immediate access to the supporting documentation. When your Power Automate flow pulls files from SharePoint, the technique for attaching those files depends heavily on the source: a Document Library or a List Item Attachment. Both have different internal structures, and the connectors handle them differently.
This article breaks down both methods using a simple HR hiring scenario. You will learn exactly which actions to use, how to build the required JSON payloads, and where the common stumbling blocks hide.
The HR Hiring Scenario
Imagine your company uses SharePoint to manage a hiring pipeline.
- A Document Library named
Candidate CVsstores resume files. When a recruiter uploads a new CV, the hiring manager receives an approval request with that single PDF attached. - A SharePoint List named
Hiring Submissionstracks each application. Attachments are enabled on this list so recruiters can upload interview scorecards, writing samples, and reference checks. When the item is updated, the manager should receive all of those attachments in one approval request.
These two sources require different flow patterns.
Method 1: Attaching a File from a Document Library
A Document Library stores its file content directly. The Power Automate connector can fetch that binary data in a single action.
Build the Flow
-
Trigger:
When a file is created or modified (properties only)- Site: Choose your SharePoint site.
- Library:
Candidate CVs.
-
Action:
Get file content using path- File Path: Select
Pathfrom the trigger dynamic content.
- File Path: Select
-
Action:
Compose(optional but recommended for clarity)- Inputs (switch to the expression editor to build the array):
[
{
"name": "@{triggerOutputs()?['body/{FilenameWithExtension}']}",
"content": "@{outputs('Get_file_content_using_path')?['body']}"
}
]- Action:
Start and wait for an approval- Approval Type: Choose your preference (e.g.,
Approve/Reject – First to respond). - Attachments: Reference the output of your Compose action:
outputs('Compose').
- Approval Type: Choose your preference (e.g.,
That is all it takes for a single document library file. The Get file content using path action returns the binary stream, and the mapping above wraps it into the name / content object that the approval action expects.
Method 2: Attaching Multiple Files from a List Item
List item attachments are metadata records. The Get attachments action returns a list of identifiers (file names, IDs), but not the file contents. To attach the real files you must iterate through that list, fetch each file, and assemble the array yourself.
Build the Flow
-
Trigger:
When an item is created or modified- Site: Choose your SharePoint site.
- List:
Hiring Submissions.
-
Action:
Get attachments- Site: Your SharePoint site.
- List Name:
Hiring Submissions. - Item:
ID(dynamic content from the trigger).
-
Action:
Initialize variable- Name:
arrAttachmentCollection - Type:
Array - Value:
[]
- Name:
-
Loop:
Apply to each- Select an output from previous step:
valuefrom theGet attachmentsaction. - Inner Action:
Get attachment content- Site: Your SharePoint site.
- List Name:
Hiring Submissions. - Item:
ID(from the trigger). - File:
ID(dynamic content from the current attachment).
- Inner Action:
Append to array variable- Name:
arrAttachmentCollection - Value:
- Name:
- Select an output from previous step:
{
"name": "@items('Apply_to_each')?['DisplayName']",
"content": "@outputs('Get_attachment_content')?['body']"
}- Action (Outside the loop):
Start and wait for an approval- Attachments:
variables('arrAttachmentCollection')
- Attachments:
A Compose action placed inside an Apply to each loop will only ever hold the value from the very last iteration. The Append to array variable action reliably accumulates every attachment object. Always place the Start an approval action outside the loop so it receives the complete collection as one payload.
Common Pitfalls and Troubleshooting
-
Incorrect JSON structure The approval attachment field requires an array of objects with
nameandcontentproperties. A bare string or an object without one of these keys will cause a silent failure. -
Missing the
Apply to eachloop Without the loop the flow never fetches the actual binary content of the list attachments. You will see file names in the approval but the attachments themselves will not be accessible. -
Approval created inside the loop If the
Start an approvalaction sits inside theApply to each, the flow generates a separate approval request for every single attachment. Keep the approval action after the loop unless you intentionally want multiple requests. -
File size limits Approval attachments sent via the standard connector have a size limit (typically 5–10 MB for the content body). Larger files should be delivered via a sharing link instead of binary content.
-
Permissions are missing The connection used by the flow must have read access to the library or list. Check the flow's connection references if the attachments fail to load.
Final Thoughts
Choosing the right pattern for SharePoint attachments keeps your Power Automate approval flows reliable and easy to maintain. Use the direct Get file content approach for Document Libraries and the Array Variable + loop approach for List Item Attachments. Test with a single file first, then scale up to your full document review process.
References
- Original source article by Matthew Devaney: How To Add Power Automate Approval Attachments (SharePoint)
- Microsoft Learn – Power Automate documentation: https://learn.microsoft.com/en-us/power-automate/ (See the Create approvals section for the latest attachment schema requirements)
Core principles for resilient, maintainable, and efficient cloud flows, distilled from real-world implementations.
Build flows that gracefully handle failures and automatically notify you with run details.
Discover the trade-offs between Content-ID, Base64, and the Microsoft Graph API for embedding images in Power Automate emails. This guide covers which method works best for Outlook, Gmail, and more.