Live training: next batches coming soon. Join the waitlist:Waitlists open:Developer Training →Developer →Copilot Studio Training →Copilot Studio →

SharePoint REST API: Endpoints, Examples and CRUD (2026 Guide)

The SharePoint REST API lets you read and change SharePoint data with plain HTTP calls to the /_api/ address of any site. This GET request returns five orders from a list:

GET https://spguides.sharepoint.com/sites/SPGuides/_api/web/lists/getbytitle('SPGDemo Orders')/items?$select=ID,Title,OrderTotal&$top=5
Accept: application/json;odata=nometadata

Send it signed in to the site and you get the rows back as JSON, with no SDK or library involved.

In this tutorial, we’ll run every common sharepoint rest api call on a real SharePoint Online site: the endpoint cheat sheet, headers, OData filters, list and item CRUD, folders and files, groups, and the errors you’ll hit.

What is the SharePoint REST API?

It’s a web service built into SharePoint (client.svc) that exposes sites, lists, items, files, users and groups as URLs. You call it with GET, POST and the other HTTP methods, and it answers in JSON or XML using the OData standard.

It covers the same objects as the CSOM client object model and JSOM in SharePoint, so anything that speaks HTTP can use it: browser JavaScript, SPFx, Power Automate, PowerShell, C# or Python.

It works in SharePoint Online and SharePoint Server. More developer guides sit on the SharePoint tutorials hub.

Every URL starts with the site address plus /_api/. From there you walk the object model: _api/site is the site collection and _api/web is the current site.

SharePoint REST API endpoints cheat sheet

Here are the endpoints I use most. Add them after https://spguides.sharepoint.com/sites/SPGuides/_api/; I tested each one on our site for this post:

What you wantMethodEndpoint
Site collectionGETsite
Current site (title, language, URL)GETweb?$select=Title,Language
All lists and librariesGETweb/lists
One list by title or GUIDGETweb/lists/getbytitle('Orders') or web/lists(guid'...')
List columnsGETweb/lists/getbytitle('Orders')/fields
List itemsGETweb/lists/getbytitle('Orders')/items
One item by IDGETweb/lists/getbytitle('Orders')/items(2)
Create a listPOSTweb/lists
Create / update / delete an itemPOST / MERGE / DELETE.../items, .../items(3)
Send an item to the recycle binPOST.../items(3)/recycle()
Create a folderPOSTweb/folders
Upload a filePOSTweb/GetFolderByServerRelativeUrl('...')/Files/add(url='a.txt',overwrite=true)
Download file contentGETweb/GetFileByServerRelativeUrl('...')/$value
Current userGETweb/currentuser
Site users / groupsGETweb/siteusers, web/sitegroups
Members of a groupGETweb/sitegroups(30)/users
Form digest for writesPOSTcontextinfo

HTTP methods and headers the REST API expects

GET reads and POST creates. Updates and deletes are also sent as POST, with an X-HTTP-Method header that says what you really mean:

HeaderWhenValue
AcceptEvery callapplication/json;odata=nometadata (lean) or odata=verbose (old d.results shape)
Content-TypeCalls with a bodySame family as Accept
X-RequestDigestWrites from a browser sessionFormDigestValue from /_api/contextinfo
X-HTTP-MethodUpdate or deleteMERGE, PUT or DELETE
IF-MATCHUpdate or deleteThe item’s ETag, or * to overwrite any version

MERGE changes only the fields you send. PUT replaces the whole object, so optional fields you leave out go back to their defaults. I use MERGE for list items almost every time.

A missing or stale digest is the classic 403. The full fix is in the security validation error guide. Calls signed with an OAuth token, like PnP PowerShell, skip the digest.

How do I test a SharePoint REST API call in the browser?

Sign in to the site, then paste a GET URL in the address bar:

https://spguides.sharepoint.com/sites/SPGuides/_api/web/lists/getbytitle('SPGDemo Orders')/items?$select=ID,Title,CustomerName,OrderTotal&$top=3

The browser doesn’t send a JSON Acc