message: delta

Namespace: microsoft.graph

Get a set of messages that have been added, deleted, or updated in a specified folder.

A delta function call for messages in a folder is similar to a GET request, except that by appropriately applying state tokens in one or more of these calls, you can query for incremental changes in the messages in that folder. This allows you to maintain and synchronize a local store of a user's messages without having to fetch the entire set of messages from the server every time.

Permissions

One of the following permissions is required to call this API. To learn more, including how to choose permissions, see Permissions.

Permission type Permissions (from least to most privileged)
Delegated (work or school account) Mail.ReadBasic, Mail.Read, Mail.ReadWrite
Delegated (personal Microsoft account) Mail.ReadBasic, Mail.Read, Mail.ReadWrite
Application Mail.ReadBasic.All , Mail.Read, Mail.ReadWrite

HTTP request

To get all changes in messages in the specified mailFolder:

GET /me/mailFolders/{id}/messages/delta
GET /users/{id}/mailFolders/{id}/messages/delta

To specifically get only created, updated or deleted messages in the specified mailFolder:

GET /me/mailfolders/{id}/messages/delta?changeType=created
GET /users/{id}/mailfolders/{id}/messages/delta?changeType=created

GET /me/mailfolders/{id}/messages/delta?changeType=updated
GET /users/{id}/mailfolders/{id}/messages/delta?changeType=updated

GET /me/mailfolders/{id}/messages/delta?changeType=deleted
GET /users/{id}/mailfolders/{id}/messages/delta?changeType=deleted

Query parameters

Tracking changes in messages incurs a round of one or more delta function calls. If you use any query parameter (other than $deltatoken and $skiptoken) that is an OData system query option or the custom query option changeType, you must specify it in the initial delta request. Microsoft Graph automatically encodes any specified parameters into the token portion of the @odata.nextLink or @odata.deltaLink URL provided in the response. You only need to specify any desired query parameters once upfront. In subsequent requests, simply copy and apply the @odata.nextLink or @odata.deltaLink URL from the previous response, as that URL already includes the encoded, desired parameters.

Query parameter Type Description
$deltatoken string A state token returned in the @odata.deltaLink URL of the previous delta function call for the same message collection, indicating the completion of that round of change tracking. Save and apply the entire @odata.deltaLink URL including this token in the first request of the next round of change tracking for that collection.
$skiptoken string A state token returned in the @odata.nextLink URL of the previous delta function call, indicating there are further changes to be tracked in the same message collection.
changeType string A custom query option to filter the delta response based on the type of change. Supported values are created, updated or deleted.

OData query parameters

  • You can use a $select query parameter as in any GET request to specify only the properties your need for best performance. The id property is always returned.
  • Delta query support $select, $top, and $expand for messages.
  • There is limited support for $filter and $orderby:
    • The only supported $filter expresssions are $filter=receivedDateTime+ge+{value} or $filter=receivedDateTime+gt+{value}.
    • The only supported $orderby expression is $orderby=receivedDateTime+desc. If you do not include an $orderby expression, the return order is not guaranteed.
  • There is no support for $search.

Request headers

Name Type Description
Authorization string Bearer {token}. Required.
Content-Type string application/json. Required.
Prefer string odata.maxpagesize={x}. Optional.

Response

If successful, this method returns a 200 OK response code and message collection object in the response body.

Example

Request

The following example shows how to make a single delta function call, and limit the maximum number of messages in the response body to 2.

To track changes in the messages in a folder, you would make one or more delta function calls to get the set of incremental changes since the last delta query. For an example that shows a round of delta query calls, see Get incremental changes to messages in a folder.

GET https://graph.microsoft.com/v1.0/me/mailFolders/AAMkAGVmMDEzMTM4LTZmYWUtNDdkNC1hMDZiLTU1OGY5OTZhYmY4OAAuAAAAAAAiQ8W967B7TKBjgx9rVEURAQAiIsqMbYjsT5e-T7KzowPTAAAAAAFNAAA=/messages/delta
Prefer: odata.maxpagesize=2
Response

If the request is successful, the response would include a state token, which is either a skipToken
(in an @odata.nextLink response header) or a deltaToken (in an @odata.deltaLink response header). Respectively, they indicate whether you should continue with the round or you have completed getting all the changes for that round.

The response below shows a skipToken in an @odata.nextLink response header.

Note: The response object shown here might be shortened for readability.

HTTP/1.1 200 OK
Content-type: application/json

{
  "@odata.nextLink":"https://graph.microsoft.com/v1.0/me/mailfolders/{id}/messages/delta?$skiptoken={_skipToken_}",
  "value": [
    {
      "receivedDateTime": "datetime-value",
      "sentDateTime": "datetime-value",
      "hasAttachments": true,
      "internetMessageId": "internetMessageId-value",
      "subject": "subject-value",
      "body": {
        "contentType": "contentType-value",
        "content": "content-value"
      }
    }
  ]
}

See also