Batching helps you in optimizing the performance of your application by combining multiple requests into a single request. SharePoint Online & MS Graph APIs supports the OData batch query option. Batch requests MUST be submitted as a single HTTP POST request to the batch endpoint of a service as below for
- SharePoint REST API: POST https://domain.sharepoint.com/sites/sitename/ _api/$batch
- Graph API: POST https://graph.microsoft.com/v1.0/$batch
The request body of the above POST request must be made up of an ordered series of query operations [GET] and/or ChangeSets [POST or PATCH or DELETE]. You can have different combination of change sets.
In this blog post, I am going to show you how to batch multiple SharePoint requests for Creating, Reading, Updating & Deleting List items in
- PowerAutomate
- MS Graph
Pre-Requisites:
Have the following items ready to follow along this post
- SharePoint Site
- Site Id [GUID of the Site]
- Create a SharePoint List by the Name EmployeeInformation with the schema
- Title [Default]
- Location [Custom: Single Line of Text]
- List Id [GUID of the above list]
- Graph Explorer to test the Graph batching
Batch SharePoint requests in PowerAutomate:
If there is a requirement for multiple requests to be performed in SharePoint from your flow, the batch request with SharePoint Online REST API helps in reducing the execution time of your flow by combining many operations into a single request to SharePoint. Create an Instant Flow with trigger “Manually trigger a Flow” and the action Send an HTTP request to SharePoint to send the batch requests.
Lets now prepare the parameters to be passed for the Send an HTTP request to SharePoint action:
Site Address: https://mydevashiq.sharepoint.com/sites/test77
Method: POST
Headers:
- Key: accept Value: application/json;odata=verbose
- Key: content-type Value: multipart/mixed; boundary=batch_cd329ee8-ca72-4acf-b3bf-6699986af544
The boundary specification with batch_guid used on the content type header can be any random guid. In the request body the batch_guid will be used. To understand more about the OData batch operation, go through this documentation.
Body:
The request body given below is for reading all the items [GET], creating a list item, deleting an existing item & updating an existing item on the EmployeeInformation List using REST API endpoints. A ChangeSet (random guid) is used to group one or more of the insert/update/delete operations and MUST NOT contain query operations [GET]. For the query operation there must be separate batch as per the example below
--batch_cd329ee8-ca72-4acf-b3bf-6699986af544
Content-Type: application/http
Content-Transfer-Encoding: binary
GET https://domain.sharepoint.com/sites/sitename/_api/web/lists/GetByTitle('EmployeeInformation')/items?$select=Title,Location HTTP/1.1
Accept: application/json;odata=nometadata
--batch_cd329ee8-ca72-4acf-b3bf-6699986af544
Content-Type: multipart/mixed; boundary="changeset_64c72699-6e7c-49c4-8d9b-6b16be92f7fc"
Content-Transfer-Encoding: binary
--changeset_64c72699-6e7c-49c4-8d9b-6b16be92f7fc
Content-Type: application/http
Content-Transfer-Encoding: binary
POST https://domain.sharepoint.com/sites/sitename/_api/web/lists/GetByTitle('EmployeeInformation')/items HTTP/1.1
Content-Type: application/json;odata=verbose
{
"__metadata": {
"type": "SP.Data.EmployeeInformationListItem"
},
"Title": "Mohamed Shaahid Faleel",
"Location": "England"
}
--changeset_64c72699-6e7c-49c4-8d9b-6b16be92f7fc
Content-Type: application/http
Content-Transfer-Encoding: binary
DELETE https://domain.sharepoint.com/sites/sitename/_api/web/lists/GetByTitle('EmployeeInformation')/items(37) HTTP/1.1
If-Match: *
--changeset_64c72699-6e7c-49c4-8d9b-6b16be92f7fc
Content-Type: application/http
Content-Transfer-Encoding: binary
PATCH https://domain.sharepoint.com/sites/sitename/_api/web/lists/GetByTitle('EmployeeInformation')/items(30) HTTP/1.1
Content-Type: application/json;odata=nometadata
If-Match: *
{
"Title": "Mohamed Faleel",
"Location": "USA
}
--changeset_64c72699-6e7c-49c4-8d9b-6b16be92f7fc--
--batch_cd329ee8-ca72-4acf-b3bf-6699986af544--
Once the above action is executed the response can be parsed to get the required information if you’ve used a GET request as per this documentation from Microsoft. PFB the screenshot of the action

The request body can be generated dynamically based on the requirement.
Batch SharePoint requests in MS Graph:
As we have done batching using the SharePoint REST APIs, in a similar manner you can combine multiple requests in one HTTP call using JSON batching for MS Graph. Here I will use the MS Graph explorer to test the batch request. Find the request parameters
Endpoint URL: https://graph.microsoft.com/v1.0/$batch
Method: POST
Body:
I’ve used the Site Id and List Id for the EmployeeInformation list to construct the SP endpoint URL’s as per the documentation for Creating, Reading, Updating & Deleting SP list items.
{
"requests": [
{
"id": "1",
"method": "POST",
"url": "/sites/{77b3a8c8-549f-4848-b82c-8bb6f4864918}/lists/{2f923934-d474-4473-8fc0-3486bd0c15c5}/items",
"body": {
"fields":{"Title":"Test from Graph","Location":"Oslo"}
},
"headers": {
"Content-Type": "application/json"
}
},
{
"id": "2",
"method": "GET",
"url": "/sites/{77b3a8c8-549f-4848-b82c-8bb6f4864918}/lists/{2f923934-d474-4473-8fc0-3486bd0c15c5}/items"
},
{
"id": "3",
"url": "/sites/{77b3a8c8-549f-4848-b82c-8bb6f4864918}/lists/{2f923934-d474-4473-8fc0-3486bd0c15c5}/items/44",
"method": "PATCH",
"body": {
"fields":{"Title":"Mohamed Ashiq Faleel","Location":"Stockholm"}
},
"headers": {
"Content-Type": "application/json"
}
},
{
"id": "4",
"url": "/sites/{77b3a8c8-549f-4848-b82c-8bb6f4864918}/lists/{2f923934-d474-4473-8fc0-3486bd0c15c5}/items/50",
"method": "DELETE"
}
]
}
On a same way you can batch different APIs endpoint from MS Graph. JSON batching also allows you to sequence the requests. Find below the screenshot from Graph explorer

Graph explorer also generates code snippets for the different programming languages

Summary: On this post we have seen how to batch SharePoint requests using PowerAutomate & MS Graph. Microsoft has used request batching on many first party features. Hope you have found this informational & helpful in some way. Let me know any feedback or comments on the comment section below
Great article, would you know how to post to a person/user group field ? Thanks.
LikeLike
Hi Mohamed, you absolutely saved my life yesterday with this. So little effective documentation, I was struggling for ages. THANK YOU.
LikeLiked by 1 person