The error “The property ‘__metadata’ does not exist on type ‘SP.List'” means your request body uses the verbose OData format, but the Content-Type header doesn’t say so. Change the header to application/json;odata=verbose, or remove __metadata and send both headers as odata=nometadata.
You’ll usually see it when you create a SharePoint list with the Send an HTTP request to SharePoint action in Power Automate. I reproduced it in a test flow that creates a Contoso Projects list, so below you’ll see the exact failing request, the error, and both fixes.
Quick answer: Set the headers to Accept: application/json;odata=verbose and Content-Type: application/json;odata=verbose, and keep "__metadata": { "type": "SP.List" } in the body. Or use odata=nometadata in both headers and delete the __metadata line.
Why this error happens
SharePoint’s REST API understands two JSON formats. The verbose format wraps type information in a __metadata object. The lighter format, called JSON light, doesn’t use __metadata at all.
The Content-Type header tells SharePoint which format your body uses. With plain application/json, SharePoint reads the body as JSON light. It then treats __metadata as a normal property of the list, can’t find it on SP.List, and rejects the request. If REST calls are new to you, start with this SharePoint REST API tutorial.
Interestingly, Microsoft’s own “create a list” REST sample sends a __metadata body with a plain application/json Content-Type. Copy it as is, and you’ll hit this error.
The request that fails
Here’s the action from my test flow. Method is POST, Uri is _api/web/lists, the Accept header is verbose, but Content-Type is only application/json:

The run fails with a BadRequest status and the full message:

Fix 1: Send the Content-Type as odata=verbose
Keep the body and change only the header. In the new designer, open Advanced parameters, show Headers, and use these values:
{
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose"
}
The body stays the same:
{
"__metadata": { "type": "SP.List" },
"BaseTemplate": 100,
"Title": "Contoso Projects",
"Description": "Project tracker for the Contoso team"
}

Run the flow again. This time the action returns statusCode 201 (Created), and the list appears in Site contents. The same header rule applies to the other calls in SharePoint REST API CRUD operations.

With the verbose format, the new list’s ID is in body('Send_an_HTTP_request_to_SharePoint')?['d']?['Id'].
Fix 2: Use nometadata and drop __metadata
I prefer this one for new flows. With odata=nometadata, you don’t send any type information, and the response is much shorter:
{
"Accept": "application/json;odata=nometadata",
"Content-Type": "application/json;odata=nometadata"
}
{
"BaseTemplate": 100,
"Title": "Contoso Projects",
"Description": "Project tracker for the Contoso team"
}
The response no longer has the d wrapper, so read the ID with body('Send_an_HTTP_request_to_SharePoint')?['Id']. To pick values out of a bigger response, see how to parse a JSON object in Power Automate.
Don’t mix the two formats. Verbose headers with a nometadata body, or the other way around, cause this error or a similar one.
The same error on other SharePoint types
The message changes with the object you’re creating, but the cause and the fix are the same:
| You’re creating | Uri | __metadata type |
|---|---|---|
| A list | _api/web/lists | SP.List |
| A column | _api/web/lists/getbytitle('Contoso Projects')/fields | SP.Field |
| A SharePoint group | _api/web/sitegroups | SP.Group |
| A list item | _api/web/lists/getbytitle('Contoso Projects')/items | SP.Data.Contoso_x0020_ProjectsListItem |
For list items, the type must match the list’s ListItemEntityTypeFullName, which you can read with _api/web/lists/getbytitle('Contoso Projects')?$select=ListItemEntityTypeFullName. If the type is missing completely, you’ll get a different message, covered in an entry without a type name was found.
BaseTemplate values for new lists
BaseTemplate decides what kind of list you get. The common values are 100 for a custom list, 101 for a document library, 106 for an events list and 107 for a tasks list. If you’d rather avoid REST, you can also create SharePoint lists from JSON with standard actions.
Still getting the error?
- Check both headers. Accept and Content-Type should use the same odata setting.
- Look for typos in the header value. It’s
application/json;odata=verbosewith no space and no trailing semicolon. - Check the __metadata type. It must match the object in the Uri, such as
SP.Listfor_api/web/lists. - Don’t add authentication headers. The SharePoint connector signs the request for you; you don’t need X-RequestDigest or Authorization.
- Check permissions. Creating lists needs at least Manage Lists on the site. Without it, you get an access denied error instead.
More SharePoint REST tutorials that use the same requests:
Frequently Asked Questions
What does ‘__metadata’ does not exist on type ‘SP.List’ mean?
SharePoint read your body as JSON light because the Content-Type header lacks odata=verbose, so it treated __metadata as an unknown list property. Microsoft documents the list REST calls in working with lists and list items with REST.
Which Content-Type should I use with __metadata?
application/json;odata=verbose. Use the same value in the Accept header.
Can I create a SharePoint list without __metadata?
Yes. Send Accept and Content-Type as application/json;odata=nometadata and leave __metadata out of the body.
Do I need X-RequestDigest in Power Automate?
No. The Send an HTTP request to SharePoint action handles authentication, so you only need the Accept and Content-Type headers.
What BaseTemplate creates a custom list?
100 creates a custom list and 101 creates a document library.

I have worked with Microsoft technologies for more than 18 years, including SharePoint, Microsoft 365 and the Power Platform (Power Apps, Power Automate and Power BI), at companies like HP, TCS and KPIT. I started EnjoySharePoint in 2011 to share the solutions I build in real projects with readers in the United States, Canada, the United Kingdom, Australia, New Zealand and beyond. Microsoft has recognized this work with the Microsoft MVP award 13 times since 2014.