<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.2 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sehgal-scim-delta-query-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="SCIM Delta Query">SCIM Delta Query</title>
    <seriesInfo name="Internet-Draft" value="draft-sehgal-scim-delta-query-00"/>
    <author initials="A." surname="Sehgal" fullname="Anjali Sehgal" role="editor">
      <organization>Amazon Web Services</organization>
      <address>
        <email>anjalisg@amazon.com</email>
      </address>
    </author>
    <author initials="D." surname="Zollner" fullname="Danny Zollner">
      <organization>Microsoft</organization>
      <address>
        <email>zollnerd@microsoft.com</email>
      </address>
    </author>
    <date year="2023" month="November" day="14"/>
    <area>IETF</area>
    <workgroup>SCIM</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>SCIM</keyword>
    <abstract>
      <?line 38?>

<t>This document defines extensions to the System for Cross-domain Identity Management (SCIM) standard <xref target="RFC7644">RFC7643</xref> to enable incremental retrieval of resources that have been updated or deleted in a SCIM service provider. This allows for more efficient interactions between SCIM clients and service providers and addresses problems that have inhibited large-scale implementation of use cases such as synchronization, entropy detection, and identity reconciliation.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    System for Cross-domain Identity Management Working Group mailing list (scim@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/scim/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/ietf-scim-wg/draft-sehgal-scim-delta-query"/>.</t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The document describes additions to the SCIM standard to provide a scalable and accurate method of change detection that allows a SCIM client to retrieve the current state of all resources that have changed since a prior point in time. Some of the possible use cases where this can be used is building identity reconciliation systems or incremental synchronization systems where a client periodically pulls data from the server. For example, synchronizing data from human capital management systems into a central identity management service.</t>
      <t>SCIM clients provision identity information such as Users, Groups and memberships to SCIM service providers that is then used for authorization decisions when attempts to access resources occur. Potential synchronization inaccuracies could lead to data divergence between the SCIM client and SCIM service provider. Undetected diverging data between a SCIM client and SCIM service provider can lead to undesirable authorization decisions. For instance, an undetected failure to synchronize group membership removal between a SCIM client and a SCIM service provider can lead to access being incorrectly granted to an application that should no longer be allowed. The SCIM standard does not provide any guidance for performing ongoing incremental data reconciliation or synchronization, and the existing functionality in the SCIM standard does not meet the accuracy, efficiency or scalability requirements of many implementers.</t>
      <t>A set of end-to-end reconciliation processes, reduces the risk of incorrect authorization decisions due to divergent states between client and server. Providing a mechanism to detect data divergence and reconciliation mechanism is of the utmost importance to avoid any authorization decisions being made with incorrect data. This data divergence detection may be used for reporting purposes or may be extended to either trigger provisioning of those resources in the target system or pulling changes from the target system into the source.</t>
      <t>This document proposes additions to the SCIM standard that can be implemented across SCIM service providers over time, allowing SCIM clients to build synchronization and reconciliation mechanisms that they can reuse across all SCIM service providers that support the capabilities proposed in this document. The logic for divergence detection as part of any synchronization or reconciliation mechanism is out of scope of this document and is left to the implementer.</t>
    </section>
    <section anchor="notational-conventions">
      <name>Notational Conventions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="delta-query-usage-in-divergence-detection">
      <name>Delta Query Usage in Divergence Detection</name>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>Full Scan - Retrieval of the current state of all resources that exist without providing a delta token or timestamp-based restriction on which resources should be returned. This may be a request such as GET /Users to retrieve all User resources, GET (baseurl)/ to retrieve all resources regardless of type, or a query with a filter such as GET /Users?filter=department eq "Accounting".</t>
        <t>Delta Scan - Retrieval of the current state of all resources modified (created, updated, deleted) since a previous full or delta Scan that returned a delta token.</t>
        <t>Delta Token - An opaque artifact generated by the server and provides a point of reference that can be used by the issuing SCIM service provider to identify a point after which modified (created, updated or deleted) resources should be returned.</t>
        <t>SCIM Client -
An HTTP client that initiates SCIM Protocol <xref target="RFC7644"/> requests and receives responses.</t>
        <t>SCIM Service Provider -
An HTTP server that implements SCIM Protocol <xref target="RFC7644"/> and SCIM Schema <xref target="RFC7643"/>.</t>
      </section>
      <section anchor="divergence-detection-via-full-scans">
        <name>Divergence Detection via Full Scans</name>
        <t>A simplistic implementation of a divergence detection tool may perform a full comparison of data between source and destination systems containing identity data. To do this, the divergence detection tool can perform a full Scan of all resources in both systems and then perform the following checks. First it will evaluate if there are any resources (Users, Groups..) in one of the systems that are missing in the other one, and then it will evaluate if attribute values for any resources present in both the source and destination systems have different values.</t>
        <t>This simplistic solution can quickly iterate across all of the resources in the source and destination systems and perform detailed data comparison, providing the highest accuracy. However, the speed at which this can be performed will be limited by factors such as system capacity, scheduling algorithms, API page sizes, and throughput limits. This makes an approach that utilizes only full Scans too slow (hours/days) for datasets spanning millions of resources, causing delayed detection of any data divergence. For instance, a data divergence check for a directory with 10 million resources could require 3 hours to scan one of the systems, while divergence detection within 30 to 60 minutes would be more optimal. To address this challenge for larger datasets, the approach utilizing only full Scans can be amended with an additional set of recurring delta Scans that would identify divergence in recently modified resources.</t>
      </section>
      <section anchor="divergence-detection-via-delta-scans">
        <name>Divergence Detection via Delta Scans</name>
        <t>A recurring set of delta Scans can be used to provide ongoing detection of of data divergence between source and destination systems. Each individual delta Scan will only retrieve data that has been modified after the issuance of the delta token value used by the SCIM client. Continuous successful delta Scans run over a given period of time allows for ongoing detection of data modified within that period. The process can be used to incrementally retrieve changes and identify and repair any divergences as needed, with only delta Scans being required after the first full Scan.</t>
        <t>A delta Scan can be done using the Delta Query functionality introduced in this document. The aim of these additions is to allow the client to instruct the service provider to only return the current state of objects that have changed (newly added, updated or deleted) since the issuance of the delta token provided by the client.</t>
      </section>
    </section>
    <section anchor="delta-query">
      <name>Delta Query</name>
      <t>A Delta Query is a query performed on underlying SCIM resources that enables the client to discover newly created, updated, or deleted resources without performing a full Scan from the server. This approach uses a delta token generated by a SCIM service provider. The delta token is an opaque artifact, or "watermark". It provides a point of reference that can be used by the issuing SCIM service provider to identify a point after which modified (created, updated or deleted) resources should be returned.</t>
      <section anchor="query-parameters-and-response-attributes">
        <name>Query Parameters and Response Attributes</name>
        <t>The following table describes the URL query parameters for delta query requests:</t>
        <table>
          <name>Query Parameters</name>
          <thead>
            <tr>
              <th align="left">Parameter</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">deltaQuery</td>
              <td align="left">A boolean type that indicates that the client is requesting the server to execute a full scan or delta scan and return a delta token with its response.</td>
            </tr>
            <tr>
              <td align="left">deltaToken</td>
              <td align="left">A string type that may be provided by the client to request only records modified after the point represented by the delta token's value. The value of deltaToken <bcp14>MUST</bcp14> be treated as opaque by the client. Token values must follow the unreserved characters set defined in section 2.3 of <xref target="RFC3986"/>.</td>
            </tr>
          </tbody>
        </table>
        <t>The following attribute is added to the schema of urn:ietf:params:scim:api:messages:2.0:ListResponse.</t>
        <dl>
          <dt>nextDeltaToken</dt>
          <dd>
            <t>A string type that <bcp14>MUST</bcp14> be returned by the server on the last page during a delta query response. If the SCIM service provider supports delta query, this attribute <bcp14>MUST</bcp14> be returned by a when the query parameter deltaQuery is True. Values must only contain characters from the unreserved characters set defined in section 2.3 of <xref target="RFC3986"/>.</t>
          </dd>
        </dl>
        <t>The following attribute is added to the sub-attributes of the common attribute "meta".</t>
        <dl>
          <dt>isDeleted</dt>
          <dd>
            <t>A boolean type. This attribute <bcp14>MUST</bcp14> be returned and <bcp14>MUST</bcp14> have a value of True when the resource has been deleted from the SCIM service provider and is being returned as part of a delta query response. This attribute has a "returned" property value of "request" when the associated resource has not been deleted.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="using-delta-query-to-track-changes">
      <name>Using Delta Query to track changes</name>
      <section anchor="obtaining-the-first-delta-token">
        <name>Obtaining the First Delta Token</name>
        <t>A client will typically prepare for establishing recurring delta query requests by first performing a full Scan on the SCIM service provider. The GET request used for the initial full Scan <bcp14>MUST</bcp14> include the deltaQuery parameter and <bcp14>MUST</bcp14> not include the deltaToken parameter.</t>
        <t>In response to the full scan query the server</t>
        <ol spacing="normal" type="1"><li>
            <t><bcp14>MUST</bcp14> return the resources that currently exist in the collection. Resources that have been created and deleted prior to the initial full scan query won't be returned. Resources returned will represent the latest state of the resource at the time processing of the request.</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> Return the nextDeltaToken on the last page of the full scan response.</t>
          </li>
        </ol>
        <artwork><![CDATA[
GET Users?deltaQuery&count=50
Host: example.com
Accept: application/scim+json
Authorization: Bearer U8YJcYYRMjbGeepD

HTTP/1.1 200 OK
Content-Type: application/scim+json
{
  "totalResults":45,
  "itemsPerPage":50,
  "nextDeltaToken": "VTHKLOUTREO",
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "Resources": [{
    ...
  }]
}
]]></artwork>
      </section>
      <section anchor="using-a-delta-token-to-perform-a-delta-scan">
        <name>Using a Delta Token to Perform a Delta Scan</name>
        <t>After a full Scan, the nextDeltaToken value returned by the service provider may be used by the client to perform a delta Scan, querying for resources modified since the issuance of the delta token. The GET request used for the delta Scan <bcp14>MUST</bcp14> include the deltaQuery parameter and <bcp14>MUST</bcp14> include the deltaToken parameter.</t>
        <t>In response to the delta scan query the server</t>
        <ol spacing="normal" type="1"><li>
            <t><bcp14>MUST</bcp14> Return the resources modified (created, updated or deleted) after the point represented by the delta token's value. The resources returned are represented in the response using their standard representation and reflect their current state.</t>
          </li>
          <li>
            <t><bcp14>MUST</bcp14> Return the nextDeltaToken on the last page of the delta scan response.</t>
          </li>
        </ol>
        <artwork><![CDATA[
GET Users?deltaQuery&deltaToken=VTHKLOUTREO&count=50
Host: example.com
Accept: application/scim+json
Authorization: Bearer U8YJcYYRMjbGeepD

HTTP/1.1 200 OK
Content-Type: application/scim+json
{
  "totalResults":13,
  "itemsPerPage":50,
  "nextDeltaToken": "OPUTREWSFDE",
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "Resources": [{
    ...
  }]
}
]]></artwork>
        <t>In the above example request and response, the query used in the full Scan example was repeated with the addition of the deltaToken parameter and the value of the delta token provided in the response to the full Scan via the nextDeltaToken attribute.</t>
      </section>
    </section>
    <section anchor="pagination">
      <name>Pagination</name>
      <section anchor="using-cursor-based-pagination-during-a-full-scan">
        <name>Using Cursor-based Pagination During a Full Scan</name>
        <t>When the total number of resources returned by the query is large enough, a paginated response may be required. In this scenario, a service provider supporting cursor-based pagination <bcp14>MAY</bcp14> return a value for the nextCursor attribute. The cursor can then be used by a client in a subsequent request to obtain the next page of results.</t>
        <artwork><![CDATA[
GET Users?deltaQuery&count=50
Host: example.com
Accept: application/scim+json
Authorization: Bearer U8YJcYYRMjbGeepD

HTTP/1.1 200 OK
Content-Type: application/scim+json
{
  "totalResults":457,
  "itemsPerPage":50,
  "nextCursor": "CVHNJKUYFRT",
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "Resources": [{
    ...
  }]
}
]]></artwork>
        <t>When the client is ready to retrieve the next page of results it <bcp14>SHOULD</bcp14> query the same service provider endpoint with all query parameters and values remaining identical to the initial query with the exception of the cursor parameter and its value.</t>
        <artwork><![CDATA[
GET Users?deltaQuery&count=50&cursor=CVHNJKUYFRT
Host: example.com
Accept: application/scim+json
Authorization: Bearer U8YJcYYRMjbGeepD

HTTP/1.1 200 OK
Content-Type: application/scim+json
{
  "totalResults":457,
  "itemsPerPage":50,
  "previousCursor:"CVHNJKUYFRT",
  "nextDeltaToken":VTHKLOUTREO",
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "Resources": [{
    ...
  }]
}
]]></artwork>
      </section>
      <section anchor="paginating-a-delta-scan-response">
        <name>Paginating a Delta Scan Response</name>
        <section anchor="cursor-based-pagination">
          <name>Cursor-based Pagination</name>
          <t>If the number or resources that were modified (Created, Updated, or Deleted) after the issuance of the delta token used in a delta Scan is large, a service provider supporting cursor-based-pagination <bcp14>MAY</bcp14> paginate the response and return a value for the nextCursor attribute. When the client is ready to retrieve the next page of results it <bcp14>SHOULD</bcp14> query the same service provider endpoint with all query parameters and values remaining identical to the initial query with the exception of the cursor parameter and its value.</t>
          <t>The below example request and response shows the first request to redeem a delta token as part of a delta Scan.</t>
          <artwork><![CDATA[
GET Users?deltaQuery&deltaToken=VTHKLOUTREO
Host: example.com
Accept: application/scim+json
Authorization: Bearer U8YJcYYRMjbGeepD

HTTP/1.1 200 OK
Content-Type: application/scim+json
{
  "totalResults":8649,
  "itemsPerPage":100,
  "nextCursor": "CVHNJKUYFRT",
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "Resources": [{
    ...
  }]
}
]]></artwork>
          <t>In the response portion of the above example, the response is limited in size by the service provider even though the client did not request a paginated response.</t>
          <t>In the below example, the client uses the cursor value obtained in the previous example to retrieve the next page of results.</t>
          <artwork><![CDATA[
GET Users?deltaQuery&deltaToken=VTHKLOUTREO&cursor=CVHNJKUYFRT
Host: example.com
Accept: application/scim+json
Authorization: Bearer U8YJcYYRMjbGeepD

HTTP/1.1 200 OK
Content-Type: application/scim+json
{
  "totalResults":8649,
  "itemsPerPage":63,
  "prevCursor": "CVHNJKUYFRT",
  "nextDeltaToken": ALEMQPXNAZX",
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "Resources": [{
    ...
  }]
}
]]></artwork>
          <t>The results of the query can be progressed through by repeating the original query while continuously updating the cursor value. When returning the last page of results, the service provider will omit the nextCursor value and will include the nextDeltaToken value.</t>
        </section>
        <section anchor="consistency-consideration-while-paginating-through-delta-query-responses">
          <name>Consistency Consideration while Paginating through Delta Query Responses</name>
          <t>Service providers <bcp14>MUST NOT</bcp14> prevent resources from being updated (locking resources) while implementing delta query. New items can be added or existing items can be removed or updated while paginating through the response of the delta queries. The result set will contain eventually consistent data, however some implementations may choose to enforce strongly consistent data. The delta query <bcp14>MUST</bcp14> guarantee that the records modified (created, updated, or deleted) after any query that generates a delta token are returned when that same delta token is provided back by the client.</t>
        </section>
        <section anchor="resource-representation-in-the-delta-query-response">
          <name>Resource Representation in the Delta Query Response</name>
          <t>Newly created resources are represented in the delta query response using their standard representation. Updated resources are represented using their standard representation, and their current state is returned.
Deleted instances <bcp14>MUST</bcp14> return common attribute id and complex attribute meta with sub attributes resourceType and meta.isDeleted attribute value with value True.</t>
          <section anchor="minimal-representation-for-a-deleted-resource">
            <name>Minimal Representation for a Deleted Resource</name>
            <t>Following is a non-normative example of the minimal required SCIM representation in JSON format for a deleted resource.</t>
            <artwork><![CDATA[
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "id": "2819c223-7f76-453a-919d-413861904646",
  "meta": {
    "resourceType": "User",
    "isDeleted": true
  }
}
]]></artwork>
            <t>#### Full Representation for a Deleted Resource</t>
            <t>Following is a non-normative example of the fully populated SCIM representation in JSON format for a deleted resource.</t>
            <artwork><![CDATA[
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "id": "2819c223-7f76-453a-919d-413861904646",
  "meta": {
    "resourceType": "User",
    "isDeleted": true,
    "created":"2011-08-01T10:29:49.793Z",
    "lastModified":"2011-08-01T18:29:49.793Z",
    "location": "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646",
    "version":"W\/\"f250dd84f0671c3\""
  }
}
]]></artwork>
            <t>#### Example Delta Query Response
Below example depicts a response with newly created, updated and deleted resources returned by the SCIM server in response to the Delta Query request for User resource.</t>
            <artwork><![CDATA[
GET Users?deltaQuery&count=50&deltaToken=VTHKLOUTREO
Host: example.com
Accept: application/scim+json
Authorization: Bearer U8YJcYYRMjbGeepD


HTTP/1.1 200 OK
Content-Type: application/scim+json
{
    "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults":3,
    "Resources":[
    {
        "id":"2819c223-7f76-453a-919d-413861904646",
        "externalId":"bjensen",
        "meta":{
        "resourceType":"User",
        "created":"2011-08-01T18:29:49.793Z",
        "lastModified":"2011-08-01T18:29:49.793Z",
        "location":
        "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646",
        "version":"W\/\"f250dd84f0671c3\""
        },
        "name":{
        "formatted":"Ms. Barbara J Jensen III",
        "familyName":"Jensen",
        "givenName":"Barbara"
        },
        "userName":"bjensen",
        "phoneNumbers":[
        {
        "value":"555-555-8377",
        "type":"work"
        }
        ],
        "emails":[
        {
        "value":"bjensen@example.com",
        "type":"work"
        }
        ]
    },
    {
       "id":"c75ad752-64ae-4823-840d-ffa80929976c",
       "externalId":"jsmith",
       "meta":{
       "isDeleted":"true",
        "resourceType":"User",
        "created":"2011-08-01T10:29:49.793Z",
        "lastModified":"2011-08-01T18:29:49.793Z",
        "location":
        "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646",
        "version":"W\/\"f250dd84f0671c3\""
        }
    },
    {
       "id":"c75ad752-64ae-4823-840d-ffa80929976c",
        "externalId":"xxxxxx",
       "meta":{
        "isDeleted":"true",
        "resourceType":"User",
        "created":"2011-08-01T10:29:49.793Z",
        "lastModified":"2011-08-01T18:29:49.793Z",
        "location":
        "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646",
        "version":"W\/\"f250dd84f0671c3\""
        }
    }
    ]
}
]]></artwork>
          </section>
        </section>
      </section>
      <section anchor="delta-query-errors">
        <name>Delta Query Errors</name>
        <t>If a Service Provider encounters an invalid delta query parameters (invalid delta token value, deltaQuery value, etc), or other error condition, the Service Provider <bcp14>SHOULD</bcp14> return the appropriate HTTP response status code and detailed JSON error response as defined in Section 3.12 of <xref target="RFC7644"/>.  Most deltaQuery error conditions would generate HTTP response with status code 400.  Since many deltaQuery error conditions are not user recoverable, error messages <bcp14>SHOULD</bcp14> focus on communicating error details to the SCIM client developer.</t>
        <t>For HTTP status code 400 (Bad Request) responses, the following detail error types are defined. These error types extend the list of error types defined in RFC 7644 Section 3.12, Table 9: SCIM Detail Error Keyword Values.</t>
        <table>
          <name>Delta Query Errors</name>
          <thead>
            <tr>
              <th align="left">scimType</th>
              <th align="left">Description</th>
              <th align="left">Applicability</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">invalidValue</td>
              <td align="left">The parameter deltaToken was provided without the deltaQuery parameter. Parameter "deltaToken" must be accompanied with deltaQuery parameter. OR Invalid value for "deltaToken" parameter. Value for "deltaToken" parameter must be the same as provided by the SCIM service provider in nextDeltaToken OR Invalid value for deltaQuery parameter. Value of "deltaQuery" parameter must be either true or false</td>
              <td align="left">GET (Section Delta Query Parameters of ([Delta Query Draft])), POST (Section Delta Query Using HTTP POST of ([Delta Query Draft]))</td>
            </tr>
            <tr>
              <td align="left">expiredDeltaToken</td>
              <td align="left">Delta Token has expired. Do not wait longer than deltaTokenExpiry (40 minutes) to request subsequent delta query requests.</td>
              <td align="left">GET (Section 3.4.2 of <xref target="RFC7644"/>), POST (Section Delta Query Using HTTP POST of ([Delta Query]))</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="filtering">
        <name>Filtering</name>
        <t>If filtering is implemented as described in Section 3.4.2.2 of <xref target="RFC7644"/>, then delta query results should be filtered.</t>
        <t>When the client makes a subsequent deltaQuery request, it should query the same Service Provider endpoint with all query parameters and values being identical to the initial query issued in the previous delta scan or full scan with the exception of the deltatoken value which should be set to a nextDeltaToken value that was returned by Service Provider in a previous delta query response.</t>
      </section>
      <section anchor="sorting">
        <name>Sorting</name>
        <t>If sorting is implemented as described Section 3.4.2.3 of <xref target="RFC7644"/>, then deltaQuery results <bcp14>SHOULD</bcp14> be sorted.</t>
      </section>
    </section>
    <section anchor="delta-query-using-http-post">
      <name>Delta Query using HTTP POST</name>
      <t>Section 3.4.2.4 of <xref target="RFC7644"/> defines how clients <bcp14>MAY</bcp14> execute the HTTP POST method combined with the "/.search" path extension to issue execute queries without passing parameters on the URL. When using "/.search", the client would pass the parameters defined in Section 2</t>
      <artwork><![CDATA[
POST /User/.search
Host: example.com
Accept: application/scim+json
Authorization: Bearer U8YJcYYRMjbGeepD

{
 "schemas": [
 "urn:ietf:params:scim:api:messages:2.0:SearchRequest"],
 "attributes": ["displayName", "userName"],
 "filter":
 "displayName sw \"smith\"",
 "deltaQuery": "true",
 "deltaToken": "VTHKLOUTREO"
}
]]></artwork>
      <t>Which would return a result containing a "nextDeltaToken" value which may
be used by the client in a subsequent delta scan call to return the next set of modified resources.
~~~
HTTP/1.1 200 OK
Content-Type: application/scim+json</t>
      <t>{
 "totalResults":10,
 "itemsPerPage":10,
 "nextdeltatoken":"OPUTREWSFDE",
 "schemas":["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
 "Resources":[{
  ...
}]
}
~~~</t>
    </section>
    <section anchor="service-provider-configuration">
      <name>Service Provider Configuration</name>
      <t>The /ServiceProviderConfig resource defined in Section 4 of <xref target="RFC7644"/> facilitates discovery of SCIM service provider features. A SCIM Service provider implementing delta query <bcp14>SHOULD</bcp14> include the following additional attribute in JSON document returned by the /ServiceProviderConfig endpoint:</t>
      <artwork><![CDATA[
  deltaQuery
      : A complex type that indicates delta query configuration options.  OPTIONAL.
  supported
  : A Boolean value specifying support of delta query.  REQUIRED.
  deltaTokenExpiry
  : Non-negative integer specifying the maximum number minutes that a deltaToken is valid between delta Scan requests.  Clients waiting too long between subsequent delta scan requests may receive an invalid delta token error response. OPTIONAL.
]]></artwork>
      <t>If the SCIM client issues a delta query to a SCIM service provider that does not support or implement delta query feature then SCIM service provider will respond with HTTP Status Code 501, Unsupported Feature - Delta Query. Server does not support delta query feature.</t>
      <t>Before using delta query, a SCIM client <bcp14>MAY</bcp14> fetch the Service Provider Configuration document from the SCIM service provider and verify that delta query is supported.</t>
      <t>For example:</t>
      <artwork><![CDATA[
GET /ServiceProviderConfig
Host: example.com
Accept: application/scim+json

]]></artwork>
      <t>A service provider supporting both delta query token would return a document similar to the following (full ServiceProviderConfig schema defined in Section 5 of <xref target="RFC7643"/> has been omitted for brevity):</t>
      <artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/scim+json

{
 "schemas": [
 "urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"],

        ...

 "deltaQuery": {
        "supported": true
        },

   ...

}
]]></artwork>
      <t>Service Provider implementors <bcp14>SHOULD</bcp14> ensure that misuse of delta query by a SCIM client does not deplete Service Provider resources or prevent valid requests from other clients being handled. Defenses for a SCIM Service Provider are similar those used to protect other Web API services -- including the use of a "Web API gateway" layer, to provide authentication, rate limiting, IP allow/block lists, logging and monitoring, response caching, etc.</t>
    </section>
    <section anchor="add-normative-references">
      <name>ADD NORMATIVE REFERENCES</name>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank Mike Kiser (Sailpoint) for his contributions to early design discussions for this draft.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC3986">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
          <author fullname="R. Fielding" initials="R." surname="Fielding"/>
          <author fullname="L. Masinter" initials="L." surname="Masinter"/>
          <date month="January" year="2005"/>
          <abstract>
            <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="66"/>
        <seriesInfo name="RFC" value="3986"/>
        <seriesInfo name="DOI" value="10.17487/RFC3986"/>
      </reference>
      <reference anchor="RFC7643">
        <front>
          <title>System for Cross-domain Identity Management: Core Schema</title>
          <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
          <author fullname="K. Grizzle" initials="K." surname="Grizzle"/>
          <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <date month="September" year="2015"/>
          <abstract>
            <t>The System for Cross-domain Identity Management (SCIM) specifications are designed to make identity management in cloud-based applications and services easier. The specification suite builds upon experience with existing schemas and deployments, placing specific emphasis on simplicity of development and integration, while applying existing authentication, authorization, and privacy models. Its intent is to reduce the cost and complexity of user management operations by providing a common user schema and extension model as well as binding documents to provide patterns for exchanging this schema using HTTP.</t>
            <t>This document provides a platform-neutral schema and extension model for representing users and groups and other resource types in JSON format. This schema is intended for exchange and use with cloud service providers.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7643"/>
        <seriesInfo name="DOI" value="10.17487/RFC7643"/>
      </reference>
      <reference anchor="RFC7644">
        <front>
          <title>System for Cross-domain Identity Management: Protocol</title>
          <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
          <author fullname="K. Grizzle" initials="K." surname="Grizzle"/>
          <author fullname="M. Ansari" initials="M." surname="Ansari"/>
          <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
          <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
          <date month="September" year="2015"/>
          <abstract>
            <t>The System for Cross-domain Identity Management (SCIM) specification is an HTTP-based protocol that makes managing identities in multi-domain scenarios easier to support via a standardized service. Examples include, but are not limited to, enterprise-to-cloud service providers and inter-cloud scenarios. The specification suite seeks to build upon experience with existing schemas and deployments, placing specific emphasis on simplicity of development and integration, while applying existing authentication, authorization, and privacy models. SCIM's intent is to reduce the cost and complexity of user management operations by providing a common user schema, an extension model, and a service protocol defined by this document.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7644"/>
        <seriesInfo name="DOI" value="10.17487/RFC7644"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
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
5+NW+JappcY2PxkUI4l9f0Ncq0C7ORHr696q4kbddiY5Bst5+chhraNLt8oq
/cJB4Ce71rGAfLq7u+ai79qnkRv8mp7wmiwBxLa35zb6CA8BV+DxHuPH0+8V
gFDE71kAo1XaMhiL4A3y1iNAnyBzHbkLz/5e8ndrGeQ/P0Vf4XU5LTyxPmVU
nIBP+VhWU2AC8YX4gpAsjo+P42VncqHz1QuaZvDFGh2o9dq+tVP1AwLBcGXH
9ZBzOS8L9YISfJ6FOmxEbgB8ff/+/RH+/9Huw4fxFDUTHm9KiiDwP72JmQvv
A/rQOhbKP0TE+5jlkggBfnaWhfThfZk9vL8zerAn1WjvEfDAo72tbDSbyUdb
+zv7+w8fpGGptih8byAUm0dvO4IQ25sB2psY5k+SkR6bRKN/5TLyd6NPh0Dv
6M9mAv0/hT6OQvTfuJYQ2+6jqiorgwUCuX6mUxVkpTlHDV4ACLbOWpFYlMW+
034fnVEZxu0n9omq07sUvfLpQIVgYKTMVXDOpKzBY1PuUf8adeQvK2xF5MOn
IX0NXnCDZ7Iyd2THHrojn5jXC9UDE7eanttW093x9o7rNaWzqmMhTvDuj2g7
HcDd+SwXdXeA4ogugmxvawsmPafuH7pa5aapMWzFrGrDPhadesAG+aEd6lwP
h6dZmTZ41I7izqYgtwaiCx7M+Ghfv+Gyt+oK/Msl9f3gGTk+1duGWtx5LDF4
Ic/vrt+hzYGFblxexq6JGp+3YbFNuRDAS/yaLy/hJBv2IOK9MtHriE5AFoF0
aRFsKC7o0MA+3/OHp8YQAOJz8SVf+mfbk8d4OAAdNwqmO2cDxAF7gvYenPeJ
ZW/6FF5jEqfTA825Ouzv8BkTd8xkUw/WODqcMAiTDLhzekp39OD50MKdsNow
y8szcWzFLxS/WhNGg7/+wAi/uK9qxVvqxgetXCdQpZO67IWsfxNf+47j8L4P
LH+lDY6uxEzmRr3nSxIcJ8QqLjp2AnPfeR2/oysf39wFVXT68nzD99z2QkJA
gzZO8j5R75aY8oi2/77Vn4g90nbMWByWJM3XUtfueql6LouIl45w6Erc2fPH
P+/GxzmiRpK+DudxBye7471xW5/9rG3ThsMxi3WjggctMAVCd0rAXGhkZu4X
zHG0LvYxonX9SgvoDthDbrDpZASpPBAOIPFK1ILeLfXaw8lr+GtFs0Os8drp
OjXeHjv5MTVeewvZzfVdLK33VLiiJkHkfN+CvLkcTF/EB0b5aFdAFObB6Sq+
3mZYbg+Q7fzAGgKozt8BsnPwICFmOOcCP7KCsbX+mxihzQW7G7ngqxYTWPOH
e4M1iAU6t840bd5O2uvstdbxV5DOy2t/kRQ2IrhTXojlICb2xknQ2lNdxB1+
g3tjo2SVzlGlwTN/oykdw0Ny+xltuSIcUpTcvB7xk+0ifXX23JaneEthkVYd
lZ0SnIbZKczT4/bscNaGdkM+qpvzH5aTAdc+Tj7Cb7dLr5wTWNYJofzKIKTK
KY2ZabPMJQffwyiEprGsItBRj8cJcy2+G1CQCM40jous0UT4gCO2nZ1W+NBM
hqJ2ba8FsM0ptvwU3RUi12qtLVFdyFXS327ebSeMtAOejbF18LgP2R2P7ztu
jyB/SnKMyNfp7sVWiLX+CHyGQASVBEFMp7X375Bja6XSMGrEcnLUTLWuvmCX
M33ZVDLcRnvPDnJjeEg4XtIjNx21MZN4+xrfUujOKK9wSL/nNIO4tKmwRnkg
WjfsBN9qQ1HV6bu4fhwdhwt3NUR1J1sa8HeidbO/G7bvDN0ksUFmEA0fdfIp
R1fS6jtKG8Oexqin6yzo6lDh7hEb23ltc5jKkrDGY3sij4XFLFWqZ3TIwl26
5++BsMVn4S5SG8fgR66Wn/wFFl/UJdde8Jo49M6iFajQJd/pRbNwXXXugg6+
BieOCDT1XunM3yQRdcR5Z03Yi5sMOYS0RsnXjoYLKHol3R9owzK0vbBpPVxn
D6Ad9o4jLCfxsVHfEmeaqG78gzu7t+nGVdq5v2bUEyHi3NZMluPZjPfPaA99
IbjWkpKhPedY9AnGove3tofiVeH5Qzy1045iiz8mccJArQteD0SAjcdqhter
+BtlwlnZ9gW06AfMVJ3O+xMWLcUSpO0WZzsBVjyVzyiNQMTudrdVG55bezwJ
xZZ+6f1o803zHdzYqEm3MLXZg2LgtsnzGzd6oXPpTwQGLXWHTyb0Kh17CLtH
496PNO7um3CGFpttansyCv+VAQjg71r0fLKBu4V/slYe7d0P2iivLNE0dT2M
KNHpSR3Kyza1x3PQ59aurTvlTurwsidrI8DjZJHDawO0aYzqKMno9gqXDXIS
k6klJl3XuTwUEbHv1HYOsfLxyolYnnN9zofmOAgi3iyncFjNsFxgr/0S/bfM
Ye7IMxFdXRvd6kO3+vIa+C8l4H1VlneNGI2sfXTa224dfC83FrS9upargcD7
o/COreh6+QaVVG1ZYygotUc9kjDdUByf8gUu96bYEUVpKzPEK1zpsm3q0igL
/EcYaLTPBqYyndMTUCB03ubgEC/lPDs5uDj++giM1dOjs6MXT47O6V36tiiv
AVN8Obq9KoNvG3ZZx1y/tQVaWbwVJ/jblxqThXfOpc7JcvOlWnRDFHA+uQPu
Fl5wpunuHKMvC/JYGsNXF3MjNV5og4mOcfI/JkrWq9ljAAA=

-->

</rfc>
