Download the contents of a DriveItem

Important: APIs under the /beta version in Microsoft Graph are in preview and are subject to change. Use of these APIs in production applications is not supported.

Download the contents for a driveItem. Only driveItem with the file property can be downloaded.


One of the following scopes is required to execute this API:

  • Files.Read
  • Files.ReadWrite
  • Files.Read.All
  • Files.ReadWrite.All
  • Sites.Read.All
  • Sites.ReadWrite.All

HTTP request

GET /me/drive/root:/{item-path}:/content
GET /me/drive/items/{item-id}/content
GET /drives/items/{item-id}/content
GET /groups/{group-id}/drive/items/{item-id}/content

Request headers

Name Value Description
if-none-match String If this request header is included and the eTag (or cTag) provided matches the current tag on the file, an HTTP 304 Not Modified response is returned.

Request body

Do not supply a request body for this method.


Here is an example of how to call this API.


Returns a 302 Found response redirecting to a pre-authenticated download URL for the file. This is the same URL available through the @microsoft.graph.downloadUrl property on the DriveItem.

To download the contents of the file your application will need to follow the Location header in the response. Many HTTP client libraries will automatically follow the 302 redirection and start downloading the file immedately.

Pre-authenticated download URLs are only valid for a short period of time (a few minutes) and do not require an Authorization header to download.

HTTP/1.1 302 Found

Partial range downloads

To download a partial range of bytes from the file, your app can use the Range header as specified in RFC 2616. Note that you must append the Range header to the actual @microsoft.graph.downloadUrl URL and not to the request for /content.

Range: bytes=0-1023

This will return an HTTP 206 Partial Content response with the request range of bytes from the file. If the range cannot be generated the Range header may be ignored and an HTTP 200 response would be returned with the full contents of the file.

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/2048

<first 1024 bytes of file>