Updating SharePoint Lookup Field Values with Microsoft Graph

I'm a .NET/M365 developer, trainer, author, MVP & MCT Alumni
Working with SharePoint lookup fields through Microsoft Graph can be confusing if you’re not familiar with how SharePoint represents lookup metadata. In this post, we’ll walk through how to set or update both single‑select and multi‑select lookup fields using Microsoft Graph, including complete request examples you can copy directly into Graph Explorer.
Scenario Overview
The target of the lookups will be a list named Colors with three items: Red, Green, and Blue. These items have list item ids of 1, 2, and 3 respectively.
The list containing the lookup fields is called LookupTest. It has two lookup fields: a single-select lookup field named Color, and a multi-select lookup field named Colors. The name of each of these fields is both their display name and their internal name.
Single-value Lookup Fields
When setting a single-select lookup field value, you set a property with the field's internal name plus LookupId to the list item id of the item in the target list. To set the value of the Color field to Green, I would use the following request body. Please note that you would need to set the values of other fields if you were creating an item rather than updating an item.
{
"fields": {
"ColorLookupId": 2
}
}
Multi-value Lookup Fields
When setting a multi-select lookup field value, you set a property with the field's internal name plus LookupId to an array of list item ids of the item(s) in the target list. You also need to include a metadata element that specifies the OData type of the array. To set the value of the Colors field to Red and Blue, I would use the following request body. Please note that you would need to set the values of other fields if you were creating an item rather than updating an item.
{
"fields": {
"ColorsLookupId@odata.type": "Collection(Edm.Int32)",
"ColorsLookupId": [1, 3]
}
}
Both of these payloads are sent in the body of a request against the list's items collection:
POST https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items
Content-Type: application/json
The same LookupId pattern works with a PATCH to /items/{item-id} when you want to update an existing item rather than create a new one.
Creating a new list item and setting both lookup field values in addition to the value of title field in Graph Explorer looks something like this:
Tips and Considerations
Make sure you use the internal names of the fields. If the display name was changed after creation, the internal name will differ.
For multi‑lookup fields, the OData type annotation is mandatory.
To clear a lookup value, set a single-select
…LookupIdproperty tonull, or set a multi-select…LookupIdproperty to an empty array ([]).Ensure the lookup target IDs exist. Referencing a list item id that doesn't exist in the target list will cause the request to return a
400 Bad Request.



