Update SharePoint List Columns Without Touching Mandatory Fields in Power Automate
The Problem
If you've ever tried to update a single column in a SharePoint list using Power Automate's standard "Update item" action, you know the frustration — it demands values for every mandatory column, even when you only want to change one field.
There's a cleaner way.
The Solution — Send an HTTP Request to SharePoint (MERGE)
Instead of using the Update item action, use "Send an HTTP request to SharePoint" in Power Automate. This lets you send only the columns you want to update — nothing more.
Action Setup
Site Address : Your SharePoint site URL
Method : POST
Uri : _api/web/lists/getbytitle('YourListName')/items(<ItemID>)
Headers:
Content-Type → application/json;odata=verbose
IF-MATCH → *
X-HTTP-Method → MERGE
⚠️ UsePOSTas the method (not PATCH). SharePoint tunnels the MERGE operation over POST via theX-HTTP-Methodheader.
Column-by-Column Syntax Reference
All examples below use the same action setup above. Only the Body changes per column type.
1. Single Line of Text
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"Title": "Updated value"
}
2. Multi-line Text (Plain Text)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"Description": "Line one\nLine two"
}
3. Number
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"Quantity": 150
}
4. Currency
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"Budget": 15000.50
}
Currency uses the same plain numeric format — no currency symbol or formatting needed.
5. Yes/No (Boolean)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"IsActive": true
}
6. Date / Date & Time
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"DueDate": "2026-04-30T00:00:00Z"
}
Always use ISO 8601 format in UTC. For date-only columns, T00:00:00Z is safe.7. Choice (Single Select)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"Status": "Approved"
}
The value must match the choice label exactly — it is case-sensitive.
8. Choice (Multi-Select)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"Tags": {
"__metadata": { "type": "Collection(Edm.String)" },
"results": ["Option1", "Option2"]
}
}
9. Lookup (Single)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"ProjectId": 5
}
Note the Id suffix on the internal field name. The value is the numeric ID of the target list item — not the display title.10. Lookup (Multi-Value)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"ProjectId": {
"__metadata": { "type": "Collection(Edm.Int32)" },
"results": [5, 12]
}
}
11. Person or Group — User Column (Single)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"AssignedToId": 42
}
Like Lookup columns, Person columns use the Id suffix and require the user's SharePoint numeric ID — not the email or display name.To get the user's numeric ID dynamically in your flow, call:
_api/web/siteusers?$filter=Email eq 'user@domain.com'&$select=Id
Then use the Id value returned in the body.
12. Person or Group — User Column (Multi-Value)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"AssignedToId": {
"__metadata": { "type": "Collection(Edm.Int32)" },
"results": [42, 75]
}
}
13. Hyperlink / Picture
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"ProjectLink": {
"__metadata": { "type": "SP.FieldUrlValue" },
"Url": "https://example.com",
"Description": "Project Site"
}
}
14. Managed Metadata (Taxonomy)
{
"__metadata": { "type": "SP.Data.YourListNameListItem" },
"DepartmentId": {
"__metadata": { "type": "SP.Taxonomy.TaxonomyFieldValue" },
"Label": "Finance",
"TermGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"WssId": -1
}
}
WssIdis always-1for write operations. TheTermGuidcomes from the Term Store in SharePoint Admin.
Fix the eTag Conflict Error
SharePoint uses optimistic concurrency and will throw an eTag conflict error if you skip the IF-MATCH header. Fix it by adding a wildcard value to bypass the version check:
IF-MATCH → *
Column Type Quick Reference
| Column Type | Field Name Pattern | Value Format |
|---|---|---|
| Single line text | FieldName | "string" |
| Multi-line text | FieldName | "string" |
| Number | FieldName | 123 |
| Currency | FieldName | 123.45 |
| Yes/No | FieldName | true / false |
| Date / DateTime | FieldName | "2026-04-30T00:00:00Z" |
| Choice (single) | FieldName | "Label" (case-sensitive) |
| Choice (multi) | FieldName | { "results": ["A", "B"] } |
| Lookup (single) | FieldNameId | 5 |
| Lookup (multi) | FieldNameId | { "results": [5, 12] } |
| Person (single) | FieldNameId | 42 (SP numeric user ID) |
| Person (multi) | FieldNameId | { "results": [42, 75] } |
| Hyperlink | FieldName | { "Url": "...", "Description": "..." } |
| Managed Metadata | FieldNameId | { "Label": "...", "TermGuid": "...", "WssId": -1 } |
Why This Approach Beats "Update Item"
| Standard Update Item | HTTP Request (MERGE) |
|---|---|
| Requires all mandatory fields | Send only what you need |
| Needs a "Get item" call first | Single action |
| Hard to maintain as list grows | Clean, minimal payload |
| Brittle when schema changes | Isolated field updates |
Quick Tip — Get the Correct __metadata Type
To get the exact __metadata type value for your list, run this URL in your browser:
https://yourtenant.sharepoint.com/sites/yoursite/_api/web/lists/getbytitle('YourListName')?$select=ListItemEntityTypeFullName
Summary
Stop wrestling with mandatory fields. Use "Send an HTTP request to SharePoint", set IF-MATCH: *, use X-HTTP-Method: MERGE, and pass only the columns you need. The key rules to remember:
- Lookup, Person, and Managed Metadata columns use the
Idsuffix on the internal field name - Multi-value columns (lookup, person, multi-choice) always use the
resultsarray pattern - Person columns require the SharePoint numeric user ID — use the
siteusersREST API to resolve it from an email - Dates must be UTC ISO 8601 format
- Choice values are case-sensitive — match the label exactly
No comments:
Post a Comment