Working with SharePoint sites in Microsoft Graph

The SharePoint API in Microsoft Graph supports the following core scenarios:

  • Access to SharePoint sites, lists, and drives (document libraries)
  • Read-only support for site resources (no ability to create new sites)
  • Read-write support for lists, listItems, and driveItems
  • Read-write support for tenant-level SharePointSettings
  • Address resources by SharePoint ID, URL, or relative path

The SharePoint API exposes three major resource types:

The following is an example of a listItem resource.

{
  "fields": {
    "Title": "Access card",
    "Employee": "Ryan Gregg",
    "EmployeeId": "10",
    "CardSerial": "01235492",
    "Alias": "RGregg",
    "ID": 1,
    "ContentType": "Item",
    "Modified": "2016-09-19T23:15:25-07:00",
    "Created": "2016-09-19T23:15:25-07:00"
  },
  "createdBy": {
    "user": {
      "id": "b757fdcb-0271-4807-b243-504139e4ba04",
      "displayName": "Ryan Gregg"
    }
  },
  "createdDateTime": "2016-09-20T06:15:25Z",
  "eTag": "48e941c3-9515-4c48-9760-c07c90c79d48,1",
  "id": "4",
  "lastModifiedBy": {
    "user": {
      "id": "b757fdcb-0271-4807-b243-504139e4ba04",
      "displayName": "Ryan Gregg"
    }
  },
  "lastModifiedDateTime": "2016-09-20T06:15:25Z",
}

Resources expose data in three different ways:

  • Properties (like id and name) expose simple values.
  • Facets (like fields and createdBy) expose complex values.
  • References (like items) point to collections of other resources.

You can expand references in your URL with the expand query parameter; for example, ?expand=fields. You can request specific properties and facets with the select query parameter; for example, ?select=id,name. By default, most properties and facets are returned while all references are hidden. For efficiency, we recommend that you specify select and expand to only return the data you care about.

SharePoint API root resources

The following examples are relative to https://graph.microsoft.com/beta.

Path Description
/sites/root Organization's default site.
/sites/{site-id} Access a specific site by its ID.
/sites/{site-id}/drive Access the default drive (document library) for the given site.
/sites/{site-id}/drives Enumerate the drives (document libraries) under the site.
/sites/{site-id}/sites Enumerate the sub-sites under the site.
/sites/{site-id}/lists Enumerate the lists under the site.
/sites/{site-id}/lists/{list-id}/items Enumerate the listItems under the list.
/groups/{group-id}/sites/root Access a group's team site.
/admin/sharepoint/settings Access the organization's admin level settings.

Sites can also be addressed by path by using the SharePoint hostname, followed by a colon and the relative path to the site. You can optionally transition back to addressing the resource model by putting another colon at the end.

Path Description
/sites/contoso.sharepoint.com:/teams/hr The site associated with https://contoso.sharepoint.com/teams/hr
/sites/contoso.sharepoint.com:/teams/hr:/drive Access the default drive for this site.

Note for existing SharePoint developers

The Microsoft Graph SharePoint API has a few key differences with the CSOM APIs. The site resource maps to SPWeb. The root site (SPWeb) in a site collection has a siteCollection facet, which contains information about the SPSite. Because IDs for sites are only unique within their site collection, addressing a site by ID requires providing both the site collection identifier and the site identifier.

GET https://graph.microsoft.com/beta/sites/{hostname},{spsite-id},{spweb-id}/

A URL constructed with only the hostname points to the root site (SPWeb) in the default site collection.

GET https://graph.microsoft.com/beta/sites/{hostname}

A URL constructed with only the hostname and siteCollection (SPSite) ID points to the root site (SPWeb) in the given site collection.

GET https://graph.microsoft.com/beta/sites/{hostname},{spsite-id}

A URL constructed with only the siteCollection (SPSite) ID points to the root site (SPWeb) in the given site collection.

GET https://graph.microsoft.com/beta/sites/{spsite-id}

Mapping from SharePoint REST v1 API URLs to Microsoft Graph API URLs

The following examples help developers familiar with SharePoint REST v1 API URL patterns adapt their use cases to similar Microsoft Graph API URL patterns.

Pattern 1

Access the site associated with the specified SPWeb URL.

GET https://graph.microsoft.com/beta/sites/{hostname}:/{site-server-relative-url}

Example 1

The following example returns information about the site associated with the SPWeb URL https://contoso.sharepoint.com/teams/hr/benefits. Note that benefits is an SPWeb within the site collection (SPSite) at https://contoso.sharepoint.com/teams/hr.

GET https://graph.microsoft.com/beta/sites/contoso.sharepoint.com:/teams/hr/benefits

Pattern 2

Access the list item associated with the following components.

Component Description
{hostname} The hostname of the site.
{site-server-relative-url} The server-relative URL of the site (SPWeb).
{list-id} The GUID ID of the list (SPList) in the site.
{item-id} The GUID or integer ID of the list item (SPListItem) in the list.

The following is an example of a request that contains the previous components.

GET https://graph.microsoft.com/beta/sites/{hostname}:/{site-server-relative-url}:/lists/{list-id}/items/{item-id}

Example 2

The following example returns information about the SPListItem with integer ID 42 that belongs to the list with GUID ID 5771e865-4e91-48b8-a0de-35a25d4e52fe. This list belongs to the site associated with the SPWeb URL https://contoso.sharepoint.com/teams/hr/benefits.

GET https://graph.microsoft.com/beta/sites/contoso.sharepoint.com:/teams/hr/benefits:/lists/5771e865-4e91-48b8-a0de-35a25d4e52fe/items/42