Tutorials/Power Automate/Sending SharePoint Files for Review: Power Automate Approval Attachments
Power Automateintermediate

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.

NA
Narmer Abader
@narmer · Published June 3, 2026

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 CVs stores 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 Submissions tracks 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

  1. Trigger: When a file is created or modified (properties only)

    • Site: Choose your SharePoint site.
    • Library: Candidate CVs.
  2. Action: Get file content using path

    • File Path: Select Path from the trigger dynamic content.
  3. Action: Compose (optional but recommended for clarity)

    • Inputs (switch to the expression editor to build the array):
jsonAttachment JSON for a Document Library
[
{
  "name": "@{triggerOutputs()?['body/{FilenameWithExtension}']}",
  "content": "@{outputs('Get_file_content_using_path')?['body']}"
}
]
  1. 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').

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

  1. Trigger: When an item is created or modified

    • Site: Choose your SharePoint site.
    • List: Hiring Submissions.
  2. Action: Get attachments

    • Site: Your SharePoint site.
    • List Name: Hiring Submissions.
    • Item: ID (dynamic content from the trigger).
  3. Action: Initialize variable

    • Name: arrAttachmentCollection
    • Type: Array
    • Value: []
  4. Loop: Apply to each

    • Select an output from previous step: value from the Get attachments action.
    • 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:
jsonAppend to Array Variable
{
"name": "@items('Apply_to_each')?['DisplayName']",
"content": "@outputs('Get_attachment_content')?['body']"
}
  1. Action (Outside the loop): Start and wait for an approval
    • Attachments: variables('arrAttachmentCollection')
Why an Array Variable?

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 name and content properties. A bare string or an object without one of these keys will cause a silent failure.

  • Missing the Apply to each loop 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 approval action sits inside the Apply 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