
Hi,
I’ve run into this before with older SharePoint REST-based templates. The issue isn’t actually the Compose action itself it’s that the SP_HTTP_Create_list step is returning a string, not a JSON object, so the expression can’t access ['d']['id'].
Here’s how you can fix it.
Step 1: Check the HTTP action headers
Open your flow → edit → expand SP_HTTP_Create_list and make sure these headers exist:
Accept: application/json;odata=verbose
Content-Type: application/json;odata=verbose
Save and test again. This alone fixes it in many cases because it forces SharePoint to return the expected structure.
Step 2: If it still fails, adjust the Compose expression
Sometimes Power Automate treats the HTTP response as text. In that case, update your ListGUID (Compose) action from:
@body('SP_HTTP_Create_list')?['d']?['id']
to:
@json(body('SP_HTTP_Create_list'))?['d']?['Id']
Note: SharePoint often returns Id (capital I), not id.
Step 3: Confirm what SharePoint actually returned
If you're unsure, check a failed run:
Go to Run history
Open the failed run
Expand SP_HTTP_Create_list
Look at Body
You should see something like:
{
"d": {
"Id": "..."
}
}
Use whatever field name appears there (Id vs id) in your Compose expression.
This usually happens because the template was built against a specific SharePoint REST response format, and newer environments sometimes return slightly different metadata unless the verbose headers are explicitly set.
Once the Compose step can read the ID correctly, the rest of the template install flow should continue normally.