<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-degennaro-jmap-refplus-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="JMAP Enhanced Result References">JMAP Enhanced Result References</title>

    <author initials="M." surname="De Gennaro" fullname="Mauro De Gennaro">
      <organization abbrev="Stalwart Labs">Stalwart Labs LLC</organization>
      <address>
        <postal>
          <street>1309 Coffeen Avenue, Suite 1200</street>
          <city>Sheridan</city>
          <region>WY</region>
          <code>82801</code>
          <country>USA</country>
        </postal>
        <email>mauro@stalw.art</email>
        <uri>https://stalw.art</uri>
      </address>
    </author>

    <date year="2025" month="November" day="02"/>

    
    <workgroup>JMAP</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 40?>

<t>This document specifies an extension to the JSON Meta Application Protocol (JMAP) that enhances the result reference mechanism defined in <xref target="RFC8620"/>. The extension allows result references to be used in additional contexts beyond method call arguments, specifically within object properties during JMAP /set operations and within FilterCondition objects used in /query operations. Additionally, this specification extends result references to support JSON Path expressions (<xref target="RFC9535"/>) as an alternative to JSON Pointer (<xref target="RFC6901"/>), providing more expressive query capabilities for extracting values from previous method call results. These enhancements enable more efficient data reuse patterns across JMAP method calls, reducing the need for multiple round trips between client and server.</t>



    </abstract>



  </front>

  <middle>


<?line 44?>

<section anchor="introduction"><name>Introduction</name>

<t>JMAP (<xref target="RFC8620"/> — JSON Meta Application Protocol) is a generic protocol for synchronizing data, such as mail, calendars or contacts, between a client and a server. It is optimized for mobile and web environments, and aims to provide a consistent interface to different data types.</t>

<t>One of JMAP's core design principles is its ability to build efficient request chains that minimize the number of round trips between client and server. This is achieved through the result reference mechanism defined in <xref section="3.7" sectionFormat="of" target="RFC8620"/>, which allows method call arguments to reference the results of previous method calls within the same request. When processing a request, the server executes method calls sequentially, and any argument prefixed with "#" (an octothorpe) is resolved by extracting the specified value from a previous method call's result before the current method is executed.</t>

<t>Since the publication of JMAP Core (<xref target="RFC8620"/>) and JMAP for Mail (<xref target="RFC8621"/>), the JMAP ecosystem has expanded significantly with the definition of multiple additional data types and extensions, including JMAP for Calendars (<xref target="I-D.ietf-jmap-calendars"/>), JMAP for Contacts (<xref target="RFC9610"/>), and others. This growth has revealed practical limitations in the current result reference mechanism. Many real-world use cases require creating JMAP objects that incorporate data from other JMAP objects. For example, when creating a CalendarEvent, it is often necessary to copy "Participant" or "Location" objects from an existing event. Similarly, when creating Email objects, reusing attachment information or recipient lists from other messages would be beneficial.</t>

<t>The current result reference mechanism, however, is limited to method call arguments. This restriction prevents result references from being used within the object structures passed to /set methods for creating or updating records, or within FilterCondition objects used in /query methods. These limitations force clients to either make additional round trips to fetch intermediate data or to duplicate data within the request, both of which reduce efficiency.</t>

<t>Furthermore, JMAP Core exclusively uses JSON Pointer (<xref target="RFC6901"/>) syntax for navigating result structures. While JSON Pointer is simple and efficient, it has limited expressive power for certain selection patterns. JSON Path (<xref target="RFC9535"/>), a more recent standard, provides a richer query language for extracting values from JSON structures, including support for filters, array slicing, and more sophisticated selection patterns.</t>

<t>Therefore, this document aims to extend the result references defined in <xref target="RFC8620"/> to be usable in multiple additional contexts, specifically within JMAP /set method calls for object property values and within FilterCondition objects used in /query methods. Additionally, this specification defines support for JSON Path (<xref target="RFC9535"/>) expressions as an optional alternative to JSON Pointer, enabling more powerful value extraction capabilities while maintaining backward compatibility with existing implementations.</t>

<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="addition-to-the-capabilities-object"><name>Addition to the Capabilities Object</name>

<t>The capabilities object is returned as part of the JMAP Session object; see <xref section="2" sectionFormat="of" target="RFC8620"/>. This document defines one additional capability URI.</t>

<section anchor="urnietfparamsjmaprefplus"><name>urn:ietf:params:jmap:refplus</name>

<t>This capability indicates that the server supports enhanced result references as defined in this specification. When this capability is present, clients may use result references within /set method object properties and FilterCondition objects, in addition to the standard method call argument usage defined in <xref target="RFC8620"/>.</t>

<t>The value of this property in the JMAP Session "capabilities" property is an empty object.</t>

<t>The value of this property in an account's "accountCapabilities" property is an object that <bcp14>MUST</bcp14> contain the following information on server capabilities and permissions for that account:</t>

<dl newline="true">
  <dt><strong>jsonPath</strong>: <spanx style="verb">Boolean</spanx></dt>
  <dd>
    <t>Whether the server supports JSON Path expressions in result references. If true, result references may use JSON Path (<xref target="RFC9535"/>) syntax in addition to JSON Pointer (<xref target="RFC6901"/>) syntax. If false or absent, only JSON Pointer syntax is supported.</t>
  </dd>
</dl>

</section>
</section>
</section>
<section anchor="enhanced-result-references"><name>Enhanced Result References</name>

<t>Enhanced result references extend the existing result reference mechanism defined in <xref section="3.7" sectionFormat="of" target="RFC8620"/> to enable broader applicability and more expressive value extraction. Specifically, enhanced result references support two key extensions to the base mechanism:</t>

<t>First, enhanced result references may be used in additional contexts beyond method call arguments. They may be used anywhere within a "Foo" object when creating or updating such an object via the Foo/set method, allowing property values to be derived from previous method call results. They may also be used within FilterCondition objects in Foo/query method calls, enabling dynamic query construction based on prior results.</t>

<t>Second, enhanced result references optionally support JSON Path (<xref target="RFC9535"/>) expressions as an alternative to JSON Pointer (<xref target="RFC6901"/>) for extracting values from result structures. JSON Path provides more sophisticated query capabilities, including array filtering, recursive descent, and complex selection patterns, while JSON Pointer remains the baseline requirement for all implementations.</t>

<t>The syntax and resolution mechanism for enhanced result references follows the same fundamental pattern as standard result references, with extensions to accommodate the new contexts and optional JSON Path support. Backward compatibility is maintained: clients that do not use enhanced result references, and servers that do not advertise the <spanx style="verb">urn:ietf:params:jmap:refplus</spanx> capability, interoperate normally using the base result reference mechanism from <xref target="RFC8620"/>.</t>

<section anchor="json-path-support"><name>JSON Path Support</name>

<t>JSON Path (<xref target="RFC9535"/>) is a query language for JSON that provides powerful capabilities for selecting and extracting values from JSON structures. While JSON Pointer (<xref target="RFC6901"/>) provides a simple notation for referencing a specific value within a JSON document using a sequence of reference tokens, JSON Path offers a more expressive syntax that supports complex queries including filters, recursive descent, array slicing, and wildcard selections.</t>

<section anchor="comparison-with-json-pointer"><name>Comparison with JSON Pointer</name>

<t>The key differences between JSON Pointer and JSON Path include:</t>

<t><list style="symbols">
  <t>JSON Pointer uses a simple path syntax with "/" separators and identifies exactly one value. JSON Path uses a richer syntax with multiple selector types and can return zero, one, or multiple values.</t>
  <t>JSON Pointer is deterministic and always produces the same result for a given document. JSON Path queries may be order-dependent when multiple values match.</t>
  <t>JSON Pointer has no conditional or filtering capabilities. JSON Path supports filter expressions, enabling selection based on value predicates.</t>
  <t>JSON Pointer requires exact knowledge of the structure. JSON Path supports recursive descent (..) allowing queries to find values at any depth.</t>
</list></t>

</section>
<section anchor="support-and-capabilities"><name>Support and Capabilities</name>

<t>Enhanced result references extend the base result reference mechanism to optionally support JSON Path expressions. This support is indicated by the "jsonPath" property in the account capabilities being set to true. Servers <bcp14>MAY</bcp14> implement JSON Path support, as it can be more resource-intensive than JSON Pointer due to the potential for complex query evaluation.</t>

<t>When a server supports JSON Path, enhanced result references may use JSON Path syntax as an alternative to JSON Pointer syntax in the "path" property of a ResultReference object. To indicate that a path should be interpreted as a JSON Path expression rather than a JSON Pointer, the path <bcp14>MUST</bcp14> begin with "$" (dollar sign), which is the root node identifier in JSON Path syntax. Paths not beginning with "$" are interpreted as JSON Pointer expressions following the rules in <xref target="RFC8620"/>.</t>

</section>
<section anchor="validation-requirements"><name>Validation Requirements</name>

<t>If the JSON Path expression is syntactically invalid according to <xref target="RFC9535"/>, the server <bcp14>MUST</bcp14> reject the method call with an "invalidResultReference" error. The error description <bcp14>SHOULD</bcp14> indicate the syntax error where possible.</t>

<t>If a client attempts to use a JSON Path expression (path beginning with "$") but the server does not support JSON Path (jsonPath capability is false or absent), the server <bcp14>MUST</bcp14> reject the method call with an "invalidResultReference" error. The error description <bcp14>SHOULD</bcp14> indicate that JSON Path is not supported.</t>

<t>Servers supporting JSON Path <bcp14>SHOULD</bcp14> implement the complete JSON Path specification as defined in <xref target="RFC9535"/>, including all standard function extensions. However, servers <bcp14>MAY</bcp14> limit the complexity of JSON Path expressions for security or performance reasons, for example by restricting maximum expression length, maximum result set size, or computational complexity. If a server rejects a valid JSON Path expression due to such limitations, it <bcp14>SHOULD</bcp14> return an "invalidResultReference" error with a description indicating the specific limitation encountered.</t>

</section>
</section>
<section anchor="resolution-algorithm"><name>Resolution Algorithm</name>

<t>This section defines the algorithm for resolving enhanced result references, which extends the base resolution mechanism defined in <xref section="3.7" sectionFormat="of" target="RFC8620"/> to handle both JSON Path expressions and extended JSON Pointer expressions (including wildcard support).</t>

<t>When processing a ResultReference object, the server <bcp14>MUST</bcp14> follow these steps:</t>

<t><list style="numbers" type="1">
  <t>Resolve the "resultOf" and "name" properties to identify the target method response, as defined in <xref section="3.7" sectionFormat="of" target="RFC8620"/>.</t>
  <t>Identify the second element of the method response array (the arguments object) as the target JSON structure for path evaluation.</t>
  <t>Determine whether the "path" property uses JSON Path or JSON Pointer syntax:
  <list style="symbols">
      <t>If the path begins with "$" (dollar sign), treat it as a JSON Path expression.</t>
      <t>Otherwise, treat it as a JSON Pointer expression.</t>
    </list></t>
  <t>Evaluate the path expression against the target JSON structure according to the appropriate specification (<xref target="RFC9535"/> for JSON Path, <xref target="RFC6901"/> for JSON Pointer).</t>
  <t>Apply the type-specific resolution rules defined in this section to produce the final resolved value.</t>
</list></t>

<section anchor="resolving-json-path-references"><name>Resolving JSON Path References</name>

<t>When processing a ResultReference with a JSON Path expression, the server <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Apply the JSON Path expression (the "path" value) to the arguments object of the identified response.</t>
  <t>Evaluate the JSON Path expression according to <xref target="RFC9535"/> to produce a nodelist.</t>
  <t>Determine the expected type of the property being set and resolve the nodelist according to the following type-specific rules.</t>
</list></t>

<t>The nodelist produced by JSON Path evaluation <bcp14>MUST</bcp14> be resolved according to the expected type of the target property:</t>

<t>For properties that expect <strong>JSON primitive types</strong> (String, Boolean, Number as defined in <xref target="RFC8259"/>, or null) or a <strong>single JMAP object</strong> type:</t>

<t><list style="symbols">
  <t>If the nodelist contains exactly one node, use that node's value as the resolved value.</t>
  <t>If the nodelist contains zero nodes, use null as the resolved value.</t>
  <t>If the nodelist contains more than one node, the result reference resolution fails with an "invalidResultReference" error.</t>
</list></t>

<t>For properties that expect an <strong>array type</strong> (denoted as "A[]" in <xref section="1.1" sectionFormat="of" target="RFC8620"/>, where A[] is an array of values of type A):</t>

<t><list style="symbols">
  <t>Map the nodelist to an array containing the value of each node in the nodelist, in the order specified by <xref target="RFC9535"/>.</t>
  <t>If the nodelist contains zero nodes, use an empty array as the resolved value.</t>
  <t>If the nodelist contains one or more nodes, use an array containing all node values as the resolved value.</t>
</list></t>

<t>For properties that expect a <strong>map type</strong> (denoted as "A[B]" in <xref section="1.1" sectionFormat="of" target="RFC8620"/>, where the keys are of type A and the values are of type B):</t>

<t><list style="symbols">
  <t>If the nodelist contains exactly one node and that node's value is a JSON object conforming to the A[B] type, use that object as the resolved value.</t>
  <t>If the nodelist contains zero nodes, use an empty object {} as the resolved value.</t>
  <t>If the nodelist contains more than one node, or if the single node's value is not a JSON object, the result reference resolution fails with an "invalidResultReference" error.</t>
</list></t>

</section>
<section anchor="resolving-json-pointer-references"><name>Resolving JSON Pointer References</name>

<t>JSON Pointer expressions, as defined in <xref target="RFC6901"/>, provide a deterministic path to a single value within a JSON structure. However, <xref target="RFC8620"/> extends JSON Pointer syntax to support wildcards ("*") in certain contexts, allowing a single pointer to match multiple values. This extension is maintained in enhanced result references.</t>

<t>When processing a ResultReference with a JSON Pointer expression, the server <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Apply the JSON Pointer expression (the "path" value) to the arguments object of the identified response.</t>
  <t>Evaluate the JSON Pointer expression according to <xref target="RFC6901"/>, with wildcard extensions as defined in <xref target="RFC8620"/>.</t>
  <t>Determine the expected type of the property being set and resolve according to the following type-specific rules.</t>
</list></t>

<t>The result produced by JSON Pointer evaluation (which may be a single value or multiple values when wildcards are used) <bcp14>MUST</bcp14> be resolved according to the expected type of the target property:</t>

<t>For properties that expect <strong>JSON primitive types</strong> (String, Boolean, Number as defined in <xref target="RFC8259"/>, or null) or a <strong>single JMAP object</strong> type:</t>

<t><list style="symbols">
  <t>If the pointer identifies exactly one value, use that value as the resolved value.</t>
  <t>If the pointer contains wildcards and matches zero values, use null as the resolved value.</t>
  <t>If the pointer contains wildcards and matches more than one value, the result reference resolution fails with an "invalidResultReference" error.</t>
  <t>If the pointer does not contain wildcards and does not match any value, the result reference resolution fails with an "invalidResultReference" error (per <xref target="RFC6901"/>).</t>
</list></t>

<t>For properties that expect an <strong>array type</strong> (denoted as "A[]" in <xref section="1.1" sectionFormat="of" target="RFC8620"/>, where A[] is an array of values of type A):</t>

<t><list style="symbols">
  <t>If the pointer identifies a single value that is already an array, use that array as the resolved value.</t>
  <t>If the pointer contains wildcards and matches multiple values, collect all matched values into an array in the order they appear in the document structure.</t>
  <t>If the pointer contains wildcards and matches zero values, use an empty array as the resolved value.</t>
  <t>If the pointer identifies a single value that is not an array, create an array containing that single value as the resolved value.</t>
</list></t>

<t>For properties that expect a <strong>map type</strong> (denoted as "A[B]" in <xref section="1.1" sectionFormat="of" target="RFC8620"/>, where the keys are of type A and the values are of type B):</t>

<t><list style="symbols">
  <t>If the pointer identifies exactly one value and that value is a JSON object conforming to the A[B] type, use that object as the resolved value.</t>
  <t>If the pointer contains wildcards and matches zero values, use an empty object {} as the resolved value.</t>
  <t>If the pointer contains wildcards and matches more than one value, or if the single identified value is not a JSON object, the result reference resolution fails with an "invalidResultReference" error.</t>
</list></t>

</section>
<section anchor="type-validation"><name>Type Validation</name>

<t>After applying the type-specific resolution rules, the server <bcp14>MUST</bcp14> validate that the resolved value conforms to the expected type for the property. If type validation fails after resolution, the server <bcp14>MUST</bcp14> reject the operation with an "invalidProperties" error (for /set operations) or an "invalidArguments" error (for /query operations).</t>

</section>
</section>
<section anchor="usage-in-set-methods"><name>Usage in /set Methods</name>

<t>Enhanced result references may be used anywhere within object property values when creating or updating objects via the Foo/set method. This enables efficient reuse of data from previous method calls when constructing new objects or modifying existing ones.</t>

<t>To use an enhanced result reference within an object property, the property name is prefixed with "#" (an octothorpe), and the value is set to a ResultReference object as defined in <xref section="3.7" sectionFormat="of" target="RFC8620"/>. This follows the same pattern as using result references in method call arguments. For example, to set a property "participants" to a value from a previous result, the object would include a property "#participants" with a ResultReference value.</t>

<t>Enhanced result references may be used at any depth within the object structure, not just at the top level. For nested objects and arrays, result references can be applied to properties at any level of nesting. The server <bcp14>MUST</bcp14> recursively process all levels of object and array nesting to resolve all result references before validating the complete object structure.</t>

<t>When processing a Foo/set method call, the server <bcp14>MUST</bcp14> examine all objects in the "create" and "update" arguments for properties with names beginning with "#". For each such property found, the server <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Remove the "#" prefix to determine the actual property name.</t>
  <t>Resolve the ResultReference value following the resolution algorithm defined in <xref section="3.7" sectionFormat="of" target="RFC8620"/>, with the extensions defined in this specification.</t>
  <t>Set the actual property to the resolved value.</t>
  <t>Remove the property with the "#" prefix from the object.</t>
</list></t>

<t>If a result reference fails to resolve, the server <bcp14>MUST</bcp14> reject the creation or update of that specific object with a SetError of type "invalidResultReference". The SetError <bcp14>SHOULD</bcp14> include a description indicating which property reference failed and why.</t>

<t>If an object contains both a property name with "#" prefix and the same property name without the prefix (e.g., both "#participants" and "participants"), the server <bcp14>MUST</bcp14> reject the creation or update with a SetError of type "invalidProperties", as this represents an ambiguous specification.</t>

<t>The resolved value <bcp14>MUST</bcp14> be of a type appropriate for the property being set. If the resolved value does not match the expected type for the property, the server <bcp14>MUST</bcp14> reject the creation or update with a SetError of type "invalidProperties". Type validation occurs after result reference resolution but before other property validation.</t>

<section anchor="usage-in-patch-objects"><name>Usage in Patch Objects</name>

<t>Enhanced result references may also be used as values within patch objects, as defined in <xref section="5.3" sectionFormat="of" target="RFC8620"/>. A patch object is used to update specific properties of an existing object without having to send the entire object. When using result references in patch objects, special syntax rules apply:</t>

<t>The patch object key (the path to the property being patched) <bcp14>MUST</bcp14> be a JSON Pointer as specified in <xref target="RFC6901"/>, and <bcp14>MUST</bcp14> be prefixed with "#" to indicate that the value is a result reference. For example, to patch a property "locations/a1/city" with a value from a previous result, the patch object would include a key "#/locations/a1/city" with a ResultReference value.</t>

<t>The value associated with the prefixed JSON Pointer key is a ResultReference object. This ResultReference may use either JSON Pointer or JSON Path (if supported by the server) in its "path" property to extract the value from the previous method result.</t>

<t>When processing patch objects, the server <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Identify keys in the patch object that begin with "#".</t>
  <t>Remove the "#" prefix to obtain the JSON Pointer path to be patched.</t>
  <t>Resolve the ResultReference value according to the resolution algorithm.</t>
  <t>Apply the resolved value to the location specified by the JSON Pointer path in the target object.</t>
</list></t>

<t>If a result reference in a patch object fails to resolve, the server <bcp14>MUST</bcp14> reject the update with a SetError of type "invalidResultReference".</t>

<t>It is important to note that while the patch object key (the path) <bcp14>MUST</bcp14> use JSON Pointer syntax, the ResultReference value's "path" property may use either JSON Pointer or JSON Path syntax (if the server supports JSON Path).</t>

</section>
</section>
<section anchor="usage-in-filtercondition-objects"><name>Usage in FilterCondition Objects</name>

<t>Enhanced result references may be used within FilterCondition objects in Foo/query method calls. This enables dynamic query construction where filter criteria are derived from the results of previous method calls in the same request.</t>

<t>To use an enhanced result reference within a FilterCondition, the filter property name is prefixed with "#" (an octothorpe), and the value is set to a ResultReference object. For example, to filter based on a dynamically determined mailbox id, the FilterCondition would include "#inMailbox" rather than "inMailbox".</t>

<t>When processing a Foo/query method call, the server <bcp14>MUST</bcp14> examine the "filter" argument and any nested FilterCondition objects for properties with names beginning with "#". For each such property found, the server <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Remove the "#" prefix to determine the actual filter property name.</t>
  <t>Resolve the ResultReference value following the resolution algorithm defined in <xref section="3.7" sectionFormat="of" target="RFC8620"/>, with the extensions defined in this specification.</t>
  <t>Replace the property with "#" prefix with a property of the actual name, having the resolved value.</t>
</list></t>

<t>If a result reference in a FilterCondition fails to resolve, the server <bcp14>MUST</bcp14> reject the entire query method call with an error response of type "invalidResultReference". The error response <bcp14>SHOULD</bcp14> include a description indicating which filter property reference failed and why.</t>

<t>If a FilterCondition contains both a property name with "#" prefix and the same property name without the prefix (e.g., both "#inMailbox" and "inMailbox"), the server <bcp14>MUST</bcp14> reject the query with an "invalidArguments" error, as this represents an ambiguous filter specification.</t>

<t>The resolved value <bcp14>MUST</bcp14> be of a type appropriate for the filter property being set. If the resolved value does not match the expected type for that filter property, the server <bcp14>MUST</bcp14> reject the query with an "invalidArguments" error.</t>

<t>Enhanced result references in FilterConditions support the full range of filter compositions defined by JMAP specifications, including nested FilterCondition objects combined with FilterOperators. The server <bcp14>MUST</bcp14> recursively process all levels of FilterCondition nesting to resolve all result references before evaluating the query.</t>

</section>
</section>
<section anchor="examples"><name>Examples</name>

<t>This section provides additional examples demonstrating the use of enhanced result references in various contexts.</t>

<section anchor="usage-in-set"><name>Usage in /set</name>

<t>Example using JSON Path (assuming server supports jsonPath capability):</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["CalendarEvent/query", {
    "accountId": "a1",
    "filter": {
      "uid": "meeting-template-001"
    }
  }, "c0"],
  ["CalendarEvent/get", {
    "accountId": "a1",
    "#ids": {
      "resultOf": "c0",
      "name": "CalendarEvent/query",
      "path": "/ids"
    },
    "properties": ["participants", "locations"]
  }, "c1"],
  ["CalendarEvent/set", {
    "accountId": "a1",
    "create": {
      "new-event": {
        "calendarIds": {"cal-1": true},
        "title": "Team Sync",
        "start": "2025-11-01T14:00:00Z",
        "duration": "PT1H",
        "#participants": {
          "resultOf": "c1",
          "name": "CalendarEvent/get",
          "path": "$.list[0].participants"
        },
        "#locations": {
          "resultOf": "c1",
          "name": "CalendarEvent/get",
          "path": "$.list[0].locations"
        }
      }
    }
  }, "c2"]
]
]]></sourcecode></figure>

<t>In this example, the new calendar event reuses the participants and locations from a template event retrieved in previous calls. The server would resolve the result references before creating the event, effectively copying those complex object values without requiring the client to extract and reformat them.</t>

</section>
<section anchor="usage-in-set-patch-objects"><name>Usage in /set patch objects</name>

<t>Example of using result references in a patch object (assuming server supports jsonPath capability):</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["CalendarEvent/get", {
    "accountId": "a1",
    "ids": ["event-template"],
    "properties": [ "locations", 
                    "organizerCalendarAddress",
                    "participants"]
  }, "c0"],
  ["CalendarEvent/set", {
    "accountId": "a1",
    "update": {
      "event-123": {
        "#/locations/a1": {
          "resultOf": "c0",
          "name": "CalendarEvent/get",
          "path": "$.list[0].locations.loc1"
        },
        "#/organizerCalendarAddress": {
          "resultOf": "c0",
          "name": "CalendarEvent/get",
          "path": "$.list[0].organizerCalendarAddress"
        },
        "#/participants/p1": {
          "resultOf": "c0",
          "name": "CalendarEvent/get",
          "path": "$.list[0].participants[?@.roles.chair]"
        }
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>In this example, the patch object updates specific properties of event-123 using values extracted from a template event. The patch updates a single location entry ("locations/a1"), copies the organizer's calendar address, and adds a participant ("participants/p1") by extracting a participant with the "chair" role from the template using a JSON Path filter expression. The patch keys "#/locations/a1", "#/organizerCalendarAddress", and "#/participants/p1" use JSON Pointer syntax (prefixed with "#"), while the ResultReference path properties use a mix of JSON Path expressions (including the filter expression for selecting the chair participant) and simple paths.</t>

</section>
<section anchor="usage-in-query-filtercondition"><name>Usage in /query FilterCondition</name>

<t>Example using JSON Path for array extraction (assuming server supports jsonPath capability):</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/query", {
    "accountId": "a1",
    "filter": {
      "role": "inbox"
    }
  }, "c0"],
  ["Email/query", {
    "accountId": "a1",
    "filter": {
      "#inMailboxOtherThan": {
        "resultOf": "c0",
        "name": "Mailbox/query",
        "path": "$.ids[0]"
      },
      "from": "boss@example.com"
    },
    "sort": [{"property": "receivedAt", "isAscending": false}],
    "limit": 50
  }, "c1"]
]
]]></sourcecode></figure>

<t>In this example, the Email/query uses a dynamically resolved mailbox id from the previous Mailbox/query call. The JSON Path expression <spanx style="verb">$.ids[0]</spanx> extracts the first mailbox id from the query result. The server resolves this reference before executing the email query, effectively filtering emails that are not in the user's inbox and are from a specific sender.</t>

</section>
<section anchor="extracting-multiple-values-with-json-path"><name>Extracting Multiple Values with JSON Path</name>

<t>Example demonstrating JSON Path for extracting multiple values:</t>

<figure><artwork><![CDATA[
[
  ["Email/get", {
    "accountId": "a1",
    "ids": ["template-email-id"],
    "properties": ["attachments"],
    "bodyProperties": ["blobId", "name", "type"]
  }, "c0"],
  ["Email/set", {
    "accountId": "a1",
    "create": {
      "new-email": {
        "mailboxIds": {
          "inbox-id": true
        },
        "subject": "Quarterly Reports",
        "from": [{"email": "sender@example.com"}],
        "to": [{"email": "recipient@example.com"}],
        "#attachments": {
          "resultOf": "c0",
          "name": "Email/get",
          "path": "$.list[0].attachments[?@.name && 
                @.name.toLowerCase().endsWith('.pdf')]"
        }
      }
    }
  }, "c1"]
]
]]></artwork></figure>

<t>In this example, the JSON Path expression <spanx style="verb">$.list[0].attachments[?@.name &amp;&amp; @.name.toLowerCase().endsWith('.pdf')]</spanx> extracts all EmailBodyPart objects from the attachments array that have a "name" property ending with ".pdf" (case-insensitive). The result would be an array of EmailBodyPart objects (each containing <spanx style="verb">blobId</spanx>, <spanx style="verb">name</spanx> and <spanx style="verb">type</spanx>) that is then used to populate the attachments property of the new email, effectively copying only the PDF attachments from the template email.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The security considerations described in <xref target="RFC8620"/> and <xref target="RFC9535"/> apply to this specification. This section discusses additional security implications introduced by allowing result references to be used in object properties and FilterCondition objects, and by supporting JSON Path expressions.</t>

<section anchor="denial-of-service-considerations"><name>Denial of Service Considerations</name>

<t>Enhanced result references, particularly when combined with JSON Path support, introduce additional denial of service (DoS) vectors that implementations must address.</t>

<section anchor="computational-complexity-of-json-path"><name>Computational Complexity of JSON Path</name>

<t>JSON Path expressions can be significantly more computationally expensive to evaluate than JSON Pointer references. Servers supporting JSON Path <bcp14>MUST</bcp14> implement appropriate safeguards against excessive resource consumption:</t>

<t><list style="symbols">
  <t>Servers <bcp14>SHOULD</bcp14> enforce limits on the complexity of JSON Path expressions, such as maximum expression length, maximum nesting depth of selectors, or maximum number of filter predicates.</t>
  <t>Servers <bcp14>SHOULD</bcp14> enforce timeouts on JSON Path evaluation to prevent indefinitely long computations.</t>
  <t>Servers <bcp14>SHOULD</bcp14> limit the size of nodelists that can be produced by a single JSON Path expression. An expression that matches a very large number of nodes could consume excessive memory.</t>
  <t>Servers <bcp14>SHOULD</bcp14> consider the cumulative cost of evaluating multiple result references in a single request. An attacker might attempt to overwhelm the server by including many complex JSON Path expressions in a single request.</t>
</list></t>

<t>Servers that implement these limitations <bcp14>MUST</bcp14> return an "invalidResultReference" error when a limit is exceeded, with a description that indicates the nature of the limitation where possible without revealing sensitive operational details.</t>

</section>
<section anchor="resource-exhaustion-through-reference-chains"><name>Resource Exhaustion Through Reference Chains</name>

<t>Enhanced result references enable longer and more complex chains of dependent method calls within a single request. While this is a design goal that improves efficiency, it also creates opportunities for resource exhaustion:</t>

<t><list style="symbols">
  <t>An attacker might construct requests with deeply nested result reference dependencies that require the server to maintain large amounts of intermediate state.</t>
  <t>The expanded use of result references in /set operations means that a single method call might need to resolve many result references across complex nested object structures.</t>
  <t>Result references in FilterCondition objects might require repeated evaluation of the same reference multiple times during query execution.</t>
</list></t>

<t>Servers <bcp14>SHOULD</bcp14> enforce reasonable limits on the complexity of result reference usage, such as:</t>

<t><list style="symbols">
  <t>Maximum number of result references per request</t>
  <t>Maximum number of result references per method call</t>
  <t>Maximum depth of property nesting when resolving result references in /set operations</t>
  <t>Maximum number of FilterCondition objects containing result references in a single query</t>
</list></t>

<t>These limits <bcp14>SHOULD</bcp14> be documented and consistent with other JMAP request limits defined in <xref target="RFC8620"/>.</t>

</section>
<section anchor="algorithmic-complexity-attacks"><name>Algorithmic Complexity Attacks</name>

<t>Certain combinations of JSON Path expressions and data structures can exhibit pathological performance characteristics. For example:</t>

<t><list style="symbols">
  <t>Recursive descent (..) combined with wildcard selectors on deeply nested structures can produce very large intermediate results.</t>
  <t>Filter expressions with complex predicates applied to large arrays can require substantial computation.</t>
  <t>JSON Path expressions that produce large nodelists, when used multiple times within a single request, can cause quadratic or worse time complexity.</t>
</list></t>

<t>Servers <bcp14>SHOULD</bcp14> implement query cost analysis and impose limits on expensive operations. When possible, servers <bcp14>SHOULD</bcp14> detect potentially problematic patterns before full evaluation and reject them proactively.</t>

</section>
</section>
<section anchor="data-integrity-and-validation-concerns"><name>Data Integrity and Validation Concerns</name>

<t>The use of result references in /set operations creates additional considerations for data validation and integrity.</t>

<section anchor="type-confusion"><name>Type Confusion</name>

<t>Result references resolve to values of arbitrary JSON types. When these values are used to populate object properties or filter conditions, type mismatches can occur. While this specification requires servers to validate types after resolution, implementations must be careful to avoid type confusion vulnerabilities:</t>

<t><list style="symbols">
  <t>Type validation <bcp14>MUST</bcp14> occur after result reference resolution but before the value is used in any security-sensitive operation.</t>
  <t>Servers <bcp14>MUST NOT</bcp14> make assumptions about the type of a resolved value based on the context. The value type must be explicitly checked.</t>
  <t>String-to-number or string-to-boolean coercions <bcp14>MUST NOT</bcp14> be performed automatically, as these can lead to unexpected behavior and potential security issues.</t>
</list></t>

</section>
<section anchor="injection-attacks"><name>Injection Attacks</name>

<t>When result references are used to populate FilterCondition properties, there is a potential for filter injection attacks. Consider a scenario where a result reference is used to set a filter property that expects a simple string value, but the resolution produces a complex object or an array:</t>

<t><list style="symbols">
  <t>Servers <bcp14>MUST</bcp14> validate that resolved values match the expected type and structure for the property or filter being populated.</t>
  <t>Servers <bcp14>MUST NOT</bcp14> attempt to serialize complex objects to strings or perform other automatic conversions that might enable injection attacks.</t>
  <t>When a resolved value is used in a filter that performs string matching or other operations, the server <bcp14>MUST</bcp14> ensure that the value is properly sanitized and does not alter the semantic meaning of the filter.</t>
</list></t>

</section>
<section anchor="circular-reference-prevention"><name>Circular Reference Prevention</name>

<t>While JMAP's sequential processing model prevents direct circular references (a method cannot reference a method that comes after it), enhanced result references in nested object structures could potentially create complex data copying patterns that consume excessive memory or lead to unexpected behavior. Servers <bcp14>SHOULD</bcp14> implement safeguards against pathological data copying patterns.</t>

</section>
</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>Enhanced result references can affect user privacy in several ways:</t>

<section anchor="data-leakage-across-contexts"><name>Data Leakage Across Contexts</name>

<t>The ability to copy data from one JMAP object to another using result references creates potential for unintended data leakage. For example:</t>

<t><list style="symbols">
  <t>Private or sensitive data from one context might be inadvertently copied into a more widely shared context.</t>
  <t>Metadata or structural information might be leaked through the types and structures of resolved values.</t>
</list></t>

<t>Implementations <bcp14>SHOULD</bcp14> provide mechanisms for administrators and users to understand and control how data flows between different contexts through result references.</t>

</section>
<section anchor="audit-and-logging"><name>Audit and Logging</name>

<t>The use of result references can obscure the true source of data in audit logs. When an object is created or modified using result references, audit logs <bcp14>SHOULD</bcp14> record not just the final object state but also information about which data was derived from result references. This enables proper forensic analysis and compliance with data protection regulations.</t>

</section>
</section>
<section anchor="implementation-considerations"><name>Implementation Considerations</name>

<t>Implementers should be aware of several security-relevant implementation challenges:</t>

<section anchor="parser-security"><name>Parser Security</name>

<t>JSON Path parsers are complex and may contain vulnerabilities. Servers implementing JSON Path support <bcp14>SHOULD</bcp14>:</t>

<t><list style="symbols">
  <t>Use well-tested, maintained JSON Path libraries rather than custom implementations.</t>
  <t>Keep JSON Path libraries up to date with security patches.</t>
  <t>Consider sandboxing or isolating JSON Path evaluation from critical server components.</t>
</list></t>

</section>
<section anchor="cache-security"><name>Cache Security</name>

<t>To improve performance, servers might cache the results of result reference resolution. Such caches <bcp14>MUST</bcp14> respect all security boundaries:</t>

<t><list style="symbols">
  <t>Cached results <bcp14>MUST NOT</bcp14> be shared across different users or security contexts.</t>
  <t>Cache entries <bcp14>MUST</bcp14> be invalidated when relevant access control policies change.</t>
  <t>Cache implementations <bcp14>MUST</bcp14> be resistant to timing attacks that might reveal the presence or contents of cached data.</t>
</list></t>

</section>
<section anchor="backward-compatibility"><name>Backward Compatibility</name>

<t>Servers that support enhanced result references <bcp14>MUST</bcp14> continue to correctly handle requests from clients that do not use this extension. In particular:</t>

<t><list style="symbols">
  <t>Servers <bcp14>MUST</bcp14> correctly reject enhanced result references from clients that have not included the <spanx style="verb">urn:ietf:params:jmap:refplus</spanx> capability in the "using" property of the request.</t>
  <t>The presence of properties with "#" prefixes in contexts where standard JMAP does not allow result references <bcp14>MUST</bcp14> be handled appropriately (typically as invalid property names).</t>
</list></t>

</section>
</section>
</section>
<section anchor="iana-considerations"><name>IANA considerations</name>

<section anchor="jmap-capability-registration-for-refplus"><name>JMAP Capability Registration for "refplus"</name>

<t>IANA will register the "refplus" JMAP Capability as follows:</t>

<t><strong>Capability Name:</strong> urn:ietf:params:jmap:refplus<br />
<strong>Specification document:</strong> this document<br />
<strong>Intended use:</strong> common<br />
<strong>Change Controller:</strong> IETF<br />
<strong>Security and privacy considerations:</strong> this document, <xref target="security-considerations"></xref></t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC8620">
  <front>
    <title>The JSON Meta Application Protocol (JMAP)</title>
    <author fullname="N. Jenkins" initials="N." surname="Jenkins"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="July" year="2019"/>
    <abstract>
      <t>This document specifies a protocol for clients to efficiently query, fetch, and modify JSON-based data objects, with support for push notification of changes and fast resynchronisation and for out-of- band binary data upload/download.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8620"/>
  <seriesInfo name="DOI" value="10.17487/RFC8620"/>
</reference>

<reference anchor="RFC8621">
  <front>
    <title>The JSON Meta Application Protocol (JMAP) for Mail</title>
    <author fullname="N. Jenkins" initials="N." surname="Jenkins"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="August" year="2019"/>
    <abstract>
      <t>This document specifies a data model for synchronising email data with a server using the JSON Meta Application Protocol (JMAP). Clients can use this to efficiently search, access, organise, and send messages, and to get push notifications for fast resynchronisation when new messages are delivered or a change is made in another client.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8621"/>
  <seriesInfo name="DOI" value="10.17487/RFC8621"/>
</reference>

<reference anchor="RFC9535">
  <front>
    <title>JSONPath: Query Expressions for JSON</title>
    <author fullname="S. Gössner" initials="S." role="editor" surname="Gössner"/>
    <author fullname="G. Normington" initials="G." role="editor" surname="Normington"/>
    <author fullname="C. Bormann" initials="C." role="editor" surname="Bormann"/>
    <date month="February" year="2024"/>
    <abstract>
      <t>JSONPath defines a string syntax for selecting and extracting JSON (RFC 8259) values from within a given JSON value.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9535"/>
  <seriesInfo name="DOI" value="10.17487/RFC9535"/>
</reference>

<reference anchor="RFC6901">
  <front>
    <title>JavaScript Object Notation (JSON) Pointer</title>
    <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
    <author fullname="K. Zyp" initials="K." surname="Zyp"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <date month="April" year="2013"/>
    <abstract>
      <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6901"/>
  <seriesInfo name="DOI" value="10.17487/RFC6901"/>
</reference>

<reference anchor="RFC8259">
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
    <date month="December" year="2017"/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="90"/>
  <seriesInfo name="RFC" value="8259"/>
  <seriesInfo name="DOI" value="10.17487/RFC8259"/>
</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>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC9610">
  <front>
    <title>JSON Meta Application Protocol (JMAP) for Contacts</title>
    <author fullname="N. Jenkins" initials="N." role="editor" surname="Jenkins"/>
    <date month="December" year="2024"/>
    <abstract>
      <t>This document specifies a data model for synchronising contact data with a server using the JSON Meta Application Protocol (JMAP).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9610"/>
  <seriesInfo name="DOI" value="10.17487/RFC9610"/>
</reference>


<reference anchor="I-D.ietf-jmap-calendars">
   <front>
      <title>JSON Meta Application Protocol (JMAP) for Calendars</title>
      <author fullname="Neil Jenkins" initials="N." surname="Jenkins">
         <organization>Fastmail</organization>
      </author>
      <author fullname="Michael Douglass" initials="M." surname="Douglass">
         <organization>Spherical Cow Group</organization>
      </author>
      <date day="8" month="October" year="2025"/>
      <abstract>
	 <t>   This document specifies a data model for synchronizing calendar data
   with a server using JMAP.  Clients can use this to efficiently read,
   write, and share calendars and events, receive push notifications for
   changes or event reminders, and keep track of changes made by others
   in a multi-user environment.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-jmap-calendars-25"/>
   
</reference>




    </references>

</references>


<?line 579?>

<section anchor="changes"><name>Changes</name>

<t>[[This section to be removed by RFC Editor]]</t>

<t><strong>draft-degennaro-jmap-refplus-00</strong></t>

<t><list style="symbols">
  <t>Initial version</t>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAJcMB2kAA+Vd63LcRnb+P0+BjFIxyZoZkbK9sZlUdmlKyiqRLEWU49rI
qqgH6CFhYYBZNEBq7NJWHiIPkGfJo+RJcm59w2U4tLROUkltxdQA6Mvpc/nO
6dOn5/P5pMmbQp8m//Ds7EXyqLxSZaqz5KU2bdHAf1a61vCLmajlstbXt7+X
VWmp1tBgVqtVM8/0pS5LVVfzH9dqM6/1alO0Zn58PDHtcp0bk1flq+0G3n/y
6NXjSaoafVnV29PENNmk3WTwb3OaTKqlqQqNf0/yTX2aNHVrmgfHx18fP5i8
09ubqs6ghbLRdamb+UPsemIaVWb/qoqqhNa3MDR4691lXbUbnsVkk58mr5sq
nSWmqhsYmoG/tmv8481kotrmqqpPJ8l8ksD/5SWM49kieaiTv+cZ0c8812eq
ravuo6q+PE0uGlXcqLpJnqqlSZ4+PadHlpjRU3piYBy6OU1OPj/+OjmvViut
y+TsWpetniUXbd7o5ATmTe+meQOEurjSdZ6pkn6q9SUQ9DT5/g/8RpXB6L56
8NXxify7LRuk7ncXZ/SDXqu8OE3WOP7fGRzNAoZDj9oayHPVNBtzev++fzQp
q3qtmvxaA2mSl4/Pv/rNg+NT+4f76cT+dMI/ff3l51+e2j/4p998fcxv4R/y
4YMvvz61f0wmebnqdPb1b064M/wDfnoyf7jIdbNi7kpVoctM1bBSIw8mk/l8
DuQHMqsUJvPqKjcJsGy71mWTmI1O81WuTaLKRL9vdInsmTRV0lzp5B8unn+b
PNONSs42myIHVsWHL+oKWKgqkgPkqUN4UzWJZvkw9F3NMlJbGUnWOoXHuVkn
mV7lJYhRXiY//ywk/PBhkbyCz3z/qiiqG9Nrx+DAljppDbegsizHIakC1hlE
4X1j4PG2KjPoEXg5S4AMRaLqS5otMjvPF3/eJjd5cwWtVMsfddokm7ra6LpB
WmTACeUlC/59o5sEn9DkkU6Z/fBxXoD4nUN3NAppyLjh3f9jq+tt8PEiOXMj
LrYzoBWshRsStUE0yEambtrNBuSW1+WFaq7g9Q28aWhkB0RQ5LYPHw4TRUuq
cIQl8RM2wB9WOaoNeR9ZEd6f4fyv8wznva5q7VqGD3kaqdqoZV7kRCHgUhwq
shR+ca2KFn+tqzW0o6/zqjXREvB0DK2z0ZZbaFHgH2pZaOl1BZTIkTNBDyr4
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

-->

</rfc>

