Adding multiple attachments to an approval flow in Power Automate is a common requirement. The method is slightly different between the Create an Approval action and the Send an email(V2) action. I will demonstrate both methods in one flow, using a SharePoint list as an example:
First, create the trigger action and initialize two array variables. There are separate arrays for the email action and the approval action:

Next, use the Get attachments action and provide the same site and list address as before. Use the ID from the trigger action.

Now use the Get attachment Content action and again supply the site and list name. For the ID field use the ID from When an Item is created. Finally, for the File identifier, use the Id from the Get attachments step:

This action will now change to be inside an Apply to Each action.
Fill the arrays with the attachment content
The next step is to populate the arrays with the contents of the attachments. Use the append to Append to array variable action. Here is how to build the approvals attachment array.

The code for the approval attachment array is:
{ "content": { "$content-type": "@{body('Get_attachment_content')['$content-type']}", "$content": "@{body('Get_attachment_content')['$content']}" }, "Name": "@{items('Build_Attachment_array')?['DisplayName']}" }
Now populate the email attachment array:

The code for the email attachment array is:
{ "ContentBytes": { "$content-type": "@{body('Get_attachment_content')['$content-type']}", "$content": "@{body('Get_attachment_content')['$content']}" }, "Name": "@{items('Build_attachment_array')?['DisplayName']}" }
Notice how the required code is slightly different on line two.
Use the arrays as the attachment content
Now you can simply insert these arrays into the “Create an Approval” or “Send an email(V2)” actions.

Here is an image of my entire flow that shows how to send multiple attachments in approvals in a flow from a SharePoint list (click to expand).
Corrupt attachments
Slightly different solutions to this problem have been discussed in the Power Automate forums but for me, they resulted in corrupted attachments. Adding the correct content type for each of the file attachments fixes the corruption.
I also found that sometimes the file size would increase dramatically.
I’d like to understand why the different array format works for some people and generates corrupt attachments for others.
Jenna R. says
I’ve been struggling for weeks to get SP list item attachments to successfully attach to a power automate approvals flow email notification. I kept creeping closer and closer via other blog posts and forum threads, but still ran into the corrupted file issue. This post was the final piece of the puzzle by adding the content-type component to the appended array. THANK YOU — my entire household celebrated with me (I think my vocal frustrations had been bleeding into others’ work and learn from home experiences). Thanks again!
Paulie says
Thanks for your comment – appreciated as I also spent a long time figuring this out (even though the solution is quite simple) and got very frustrated to the point of almost giving up. Other solutions I’ve seen were on the right scent but didn’t provide a working solution.
Harry Teguh says
Wow! Your solution works great! I’ve been tearing up my hair for days just to solve this issue. Thank you!
Paulie says
Welcome to the hair loss club! I experienced the same and exactly the reason I wrote it up!
Silvia says
Thank you so much! I was going crazy with this!!
Gillian Eastwood says
I followed your instructions to a tee….. and I am getting “Flow save failed with code ‘InvalidTemplate’ and message ‘The template validation failed: ‘The reprtition actions(s) ‘Build_attachment_array referenced by ‘inputs’ in action ‘Append to array variable’ are not defined in the template”.
I have literally spend probably 40 hours trying to figure this out….so any help would be GREALT appreciated 🙂
Dan says
YEAH!!! Thanks for the detailed guide.
Premalatha says
@Gillian Eastwood Im getting the same error. Got any resolution?
Premalatha says
Got resolved finally after spending around 40 hours in dealing with corrupted attachments—
Now. Append Array code looks like :
{
“inputs”: {
“name”: “AttachmentArray”,
“value”: {
“name”: “@items(‘Apply_to_each’)?[‘DisplayName’]”,
“content”: “@body(‘Get_attachment_content’)?[‘body’]”
}
}
}
Chris says
I followed this exactly for approvals and the attachment arrives with the approval but it is corrupt and can’t be opened. Same as every other method.
Paulie says
Chris, would love to do a quick remote session with you to have a look at why it’s not working for you. Let me know if you’re up for it
Chris says
I’m the same “Chris” from December 22nd – Not sure what I screwed up the first time around but I can confirm that this does work for approvals (I spent almost 8 hours trying to figure this out before finding this blog). What I think I was doing wrong, when I thought this didn’t work, was saving and “Testing” it using old Flow runs over and over and each would fail. When I tried adding a new item to my SharePoint test list, it worked.
Paulie says
Glad you got it sorted and it worked for you. One lady that arrived here had literally spent 20 hours!
Farhaan says
This has been a great help – Thank you Paulie! – Can i add one more complexity? What if i wanted to build a name for each file in the array?
e.g.
for each file
– uses the InvoiceNo. field from the list
– uses the vendorname field from the list
– adds a _n at the end of the file – starting with 1 for the first file
e.g. of file name built
5555_XYZ_1
5555_XYZ_2
would i have have to append the file extension at the end of the built file name?
any help is appreciated!
Thanks
Bron says
I am stuck on the same approval error as Gillian.
Gillian Eastwood says
December 4, 2020 at 6:05 am
I followed your instructions to a tee….. and I am getting “Flow save failed with code ‘InvalidTemplate’ and message ‘The template validation failed: ‘The reprtition actions(s) ‘Build_attachment_array referenced by ‘inputs’ in action ‘Append to array variable’ are not defined in the template”.
I tried this (below) but i am getting an invalid JSON error. Can anyone help?
{
“inputs”: {
“name”: “AttachmentArray”,
“value”: {
“name”: “@items(‘Apply_to_each’)?[‘DisplayName’]”,
“content”: “@body(‘Get_attachment_content’)?[‘body’]”
}
}
}
Paulie says
I believe it is because you are using @items(‘Apply_to_each’) when the each loop I created was called Build Attachment array, which would mean your code would need to be @items(‘Build_Attachment_array’)
Bron says
that is exactly what I was doing. thanks