<?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.34 (Ruby 3.3.8) -->


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

]>


<rfc ipr="trust200902" docName="draft-ietf-jmap-metadata-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="JMAP Object Metadata">JMAP Object Metadata</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="2026" month="October" day="17"/>

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

    <abstract>


<?line 48?>

<t>This document defines an extension to the JSON Meta Application Protocol (JMAP) that lets clients and servers attach metadata to objects of existing JMAP data types. Each data type the server lists gains two new properties, <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>, whose values are objects keyed by <em>namespace identifier</em>. A namespace identifier is either a name registered with IANA or a domain name controlled by the vendor providing the namespace; the latter allows vendors and applications to extend the metadata schema without prior coordination. Because metadata is carried as a property on the related object, clients use the existing <spanx style="verb">/get</spanx>, <spanx style="verb">/set</spanx>, <spanx style="verb">/changes</spanx>, and <spanx style="verb">/query</spanx> methods to read, modify, and synchronize it.</t>



    </abstract>



  </front>

  <middle>


<?line 52?>

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

<t>The JSON Meta Application Protocol (JMAP) <xref target="RFC8620"/> 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>Metadata, or annotations, are auxiliary data elements that provide additional context, user-defined properties, or system-specific information about primary data objects. They enable user annotations, application-specific settings, collaborative tagging, and similar functionality. Other protocols have addressed this need with mechanisms such as the IMAP METADATA extension <xref target="RFC5464"/> and WebDAV dead properties <xref target="RFC4918"/>; this specification provides an analogous facility within JMAP. The term "metadata" in this document refers only to the properties defined here, not to the Email properties described in <xref section="4.1.1" sectionFormat="of" target="RFC8621"/>.</t>

<t>This document defines a uniform mechanism for managing such metadata. Each listed JMAP data type gains a <spanx style="verb">metadata</spanx> property (shared metadata) and, optionally, a <spanx style="verb">privateMetadata</spanx> property (per-user metadata). The value of each property is an object keyed by <em>namespace identifier</em>. This document defines no initial namespaces; vendors use domain-name identifiers for proprietary extensions, and additional registered identifiers may be defined by future specifications.</t>

<t>Because metadata is carried as a property on the related object, the existing JMAP methods for that data type apply unchanged. Clients fetch metadata with the type's <spanx style="verb">/get</spanx> method, modify it through <spanx style="verb">/set</spanx> patches, learn of changes through <spanx style="verb">/changes</spanx>, and search across metadata and primary properties together through <spanx style="verb">/query</spanx>.</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?>

<t>The definitions of JSON keys and datatypes in this document follow the conventions described in <xref section="1.1" sectionFormat="of" target="RFC8620"/>. The terms "Foo", "SetError", "PatchObject" and "state string" are used as defined in <xref target="RFC8620"/>. This document also uses the following terms:</t>

<t><list style="symbols">
  <t><em>related object</em>: the JMAP object carrying the <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> properties.</t>
  <t><em>listed data type</em>: a data type that appears in the <spanx style="verb">dataTypes</spanx> field of the account capability (<xref target="capability"></xref>).</t>
  <t><em>user</em>: the authenticated identity of the session, which is not necessarily the owner of the account.</t>
</list></t>

</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="capability"><name>urn:ietf:params:jmap:metadata</name>

<t>This capability represents support for the metadata extension defined in this document. Servers that include this capability provide the <spanx style="verb">metadata</spanx> and (optionally) <spanx style="verb">privateMetadata</spanx> properties on the data types they list.</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 containing the following field:</t>

<dl newline="true">
  <dt><strong>dataTypes</strong>: <spanx style="verb">String[DataTypeMetadataInfo]</spanx></dt>
  <dd>
    <t>An object whose keys are the names of JMAP data types for which the server supports metadata in this account. A type that does not appear in this object does not gain the <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> properties in this account. The value associated with each type is a <spanx style="verb">DataTypeMetadataInfo</spanx> object as defined below.</t>
  </dd>
</dl>

<t>A <strong>DataTypeMetadataInfo</strong> object has the following fields:</t>

<dl newline="true">
  <dt><strong>namespaces</strong>: <spanx style="verb">String[]</spanx></dt>
  <dd>
    <t>The set of IANA-registered metadata namespace names (as defined in <xref target="namespaces-registry"></xref>) that the server supports on this data type. Each value <bcp14>MUST</bcp14> be a registered name (<xref target="namespaces"></xref>). A registered namespace <bcp14>MUST NOT</bcp14> be listed for a data type, or written under a property, that its registration does not allow. Vendor (domain-name) namespaces <bcp14>MUST NOT</bcp14> appear in this list; their support is signalled by <spanx style="verb">supportsVendorNamespaces</spanx> instead.</t>
  </dd>
  <dt><strong>supportsVendorNamespaces</strong>: <spanx style="verb">Boolean</spanx> (default: false)</dt>
  <dd>
    <t>Indicates whether the server accepts vendor (domain-name) namespaces on this data type. If true, any well-formed domain-name namespace (<xref target="namespaces"></xref>) may be written by clients, subject to the other constraints of this specification (access control, <spanx style="verb">maxDepth</spanx>, quota). If false, any <spanx style="verb">/set</spanx> operation that targets a domain-name namespace <bcp14>MUST</bcp14> be rejected with an "invalidProperties" SetError, and any subselector or filter condition referencing such a namespace <bcp14>MUST</bcp14> be treated as unsupported per the rules of <xref target="get-extension"></xref> and <xref target="filter-conditions"></xref>.</t>
  </dd>
  <dt><strong>supportsPrivate</strong>: <spanx style="verb">Boolean</spanx> (default: false)</dt>
  <dd>
    <t>Indicates whether this account, on this data type, supports per-user <spanx style="verb">privateMetadata</spanx>. This is a server feature flag, not a per-user permission. If false, the <spanx style="verb">privateMetadata</spanx> property <bcp14>MUST</bcp14> be absent from response objects of this type, all <spanx style="verb">privateMetadata*</spanx> filter conditions (<xref target="filter-conditions"></xref>) <bcp14>MUST</bcp14> be rejected with an "unsupportedFilter" error, and any <spanx style="verb">/set</spanx> operation that targets <spanx style="verb">privateMetadata</spanx> <bcp14>MUST</bcp14> be rejected with an "invalidProperties" SetError. Per-user authorization of a <spanx style="verb">privateMetadata</spanx> write that the server otherwise supports is defined in <xref target="access-control"></xref>.</t>
  </dd>
  <dt><strong>maxDepth</strong>: <spanx style="verb">UnsignedInt|null</spanx> (default: null)</dt>
  <dd>
    <t>Maximum depth of nested objects within a namespace value on this data type. A depth of 1 indicates only flat properties are supported; a depth of 2 allows one level of nesting; and so forth. If not <spanx style="verb">null</spanx>, the value <bcp14>MUST</bcp14> be at least 1. A value of <spanx style="verb">null</spanx> means there is no server-enforced depth limit beyond quota and size limits. Depth is defined in <xref target="namespaces"></xref>.</t>
  </dd>
</dl>

<t>A server <bcp14>SHOULD NOT</bcp14> advertise a data type that supports neither registered namespaces (empty <spanx style="verb">namespaces</spanx>) nor vendor namespaces (<spanx style="verb">supportsVendorNamespaces: false</spanx>), since such an entry advertises support for nothing. If no data type would be listed in <spanx style="verb">dataTypes</spanx>, the server <bcp14>SHOULD NOT</bcp14> include the capability in the account's "accountCapabilities".</t>

<t>A worked example of the capability object appears in <xref target="example-capability"></xref>.</t>

</section>
</section>
</section>
<section anchor="the-metadata-properties"><name>The Metadata Properties</name>

<t>This extension introduces two properties on each listed data type:</t>

<dl newline="true">
  <dt><strong>metadata</strong>: <spanx style="verb">String[Object]</spanx> (default: <spanx style="verb">{}</spanx>)</dt>
  <dd>
    <t>An object containing shared metadata associated with the object. Each key is a namespace identifier (see <xref target="namespaces"></xref>) and each value is structured according to the namespace's definition. Shared metadata is visible to every user with read access to the related object, subject to <xref target="access-control"></xref>. When returned, its value <bcp14>MUST</bcp14> be an object (<spanx style="verb">{}</spanx> when no metadata is set), never <spanx style="verb">null</spanx>.</t>
  </dd>
  <dt><strong>privateMetadata</strong>: <spanx style="verb">String[Object]</spanx> (default: <spanx style="verb">{}</spanx>)</dt>
  <dd>
    <t>An object containing per-user metadata associated with the object, with the same structure as <spanx style="verb">metadata</spanx>. Private metadata is visible only to the user who set it; the server <bcp14>MUST</bcp14> filter responses so that each user sees only their own <spanx style="verb">privateMetadata</spanx> content, as described in <xref target="access-control"></xref>. When returned, its value <bcp14>MUST</bcp14> be an object (<spanx style="verb">{}</spanx> if the user has set no private metadata on the object), never <spanx style="verb">null</spanx>. When <spanx style="verb">supportsPrivate</spanx> is false for the data type, this property <bcp14>MUST NOT</bcp14> be returned.</t>
  </dd>
</dl>

<t>Both properties are mutable and behave like any other property of the related object. They appear in <spanx style="verb">/get</spanx> responses, accept patches through <spanx style="verb">/set</spanx>, contribute to the related type's state string (<xref target="state-behavior"></xref>), and may be searched through the <spanx style="verb">/query</spanx> filter conditions defined in <xref target="filter-conditions"></xref>.</t>

<section anchor="namespaces"><name>Namespaces</name>

<t>The keys of the <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> objects are <em>namespace identifiers</em>. Each identifier <bcp14>MUST</bcp14> be one of:</t>

<t><list style="symbols">
  <t>A <em>registered name</em>: a sequence of lowercase US-ASCII letters, digits, hyphens, and underscores, with no dot ("."). Registered names may be registered using the procedure in <xref target="namespaces-registry"></xref>; this document defines no registered names.</t>
  <t>A <em>domain name</em> controlled by the vendor providing the namespace, in DNS form (containing at least one ".", e.g., <spanx style="verb">example.com</spanx>, <spanx style="verb">acme.example.org</spanx>). Vendors <bcp14>MAY</bcp14> use domain-name namespaces for proprietary metadata without registration; the dot in the name guarantees no collision with registered names. Domain-name identifiers <bcp14>MUST</bcp14> be in lowercase, with internationalized labels in A-label form. Servers <bcp14>MUST</bcp14> reject, with an "invalidProperties" SetError, a <spanx style="verb">/set</spanx> operation that uses a key that is not a valid namespace identifier, including a domain name containing uppercase ASCII letters.</t>
</list></t>

<t>A namespace is <em>supported</em> on a data type if it is a registered name listed in that type's <spanx style="verb">namespaces</spanx>, or a domain name and the type's <spanx style="verb">supportsVendorNamespaces</spanx> is true.</t>

<t>The value associated with each namespace key <bcp14>MUST</bcp14> be a JSON object, whose internal structure is defined by the specification or vendor owning that namespace; a namespace set to <spanx style="verb">{}</spanx> remains stored until it is removed with <spanx style="verb">null</spanx>. Property names within the namespace object follow normal JSON conventions; they do not need to be domain-prefixed, since cross-namespace isolation is already provided by the top-level key.</t>

<t>Example:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "metadata": {
    "acme.example.com": {
      "color": "blue",
      "priority": "high",
      "project": {
        "id": "ALPHA-2024",
        "deadline": "2024-12-31"
      }
    }
  }
}
]]></sourcecode></figure>

<t>The depth of a value is defined recursively: a scalar (string, number, boolean or null) has depth 0; an array has the maximum depth of its elements (0 if empty); an object has depth 1 plus the maximum depth of its member values (1 if empty). For example, <spanx style="verb">{"a": 1}</spanx> has depth 1 and <spanx style="verb">{"x": [{"y": 1}]}</spanx> has depth 2. If the account capability specifies a <spanx style="verb">maxDepth</spanx> for a data type, the depth of a namespace value <bcp14>MUST NOT</bcp14> exceed it; servers <bcp14>MUST</bcp14> reject writes that would exceed it with an "invalidProperties" SetError.</t>

<t>A patch that targets one namespace <bcp14>MUST NOT</bcp14> remove or alter any other namespace, including namespaces that are not supported on the data type.</t>

<t>Vendors are encouraged to register namespace identifiers that are likely to be useful beyond the vendor's own products, using the procedure in <xref target="namespaces-registry"></xref>. Registration enhances interoperability and avoids fragmentation.</t>

<section anchor="namespace-removal"><name>Data in Unsupported Namespaces</name>

<t>Data can be stored under a namespace that is not supported on the data type, for example after a server reconfiguration, after a vendor withdraws support, or when the data was copied from another account (<xref target="copy"></xref>). Such data <bcp14>MUST</bcp14> continue to be returned by <spanx style="verb">/get</spanx> for read-only access. Any <spanx style="verb">/set</spanx> operation that targets the namespace, other than a patch that removes the namespace entirely (<spanx style="verb">"metadata/&lt;namespace&gt;": null</spanx> or <spanx style="verb">"privateMetadata/&lt;namespace&gt;": null</spanx>), <bcp14>MUST</bcp14> be rejected with an "invalidProperties" SetError. A complete replacement of <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> <bcp14>MAY</bcp14> include such a namespace only with a value equal to the stored one, where two JSON objects are equal when they have the same members with equal values, regardless of member order; omitting the namespace from a complete replacement removes it. This ensures clients can always migrate data off an unsupported namespace, but cannot continue to extend it.</t>

</section>
</section>
<section anchor="state-behavior"><name>State Behavior</name>

<t>Changes to <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> are changes to the related object. They advance the related type's state string, appear in the related type's <spanx style="verb">/changes</spanx> response, and are otherwise indistinguishable from changes to any other property of that type, with the following clarification:</t>

<t>Because <spanx style="verb">privateMetadata</spanx> is filtered per viewer, a change made by user A to <spanx style="verb">privateMetadata</spanx> on a shared object <bcp14>MUST</bcp14> advance the related type's state string for user A and <bcp14>MUST NOT</bcp14> advance it for any other user. The same rule applies to <spanx style="verb">/queryChanges</spanx>: a change to user B's <spanx style="verb">privateMetadata</spanx> <bcp14>MUST NOT</bcp14> cause user A's <spanx style="verb">Foo/queryChanges</spanx> to consider the object changed for filter purposes, since the change is not visible to A. A server that cannot provide per-viewer state <bcp14>MUST</bcp14> set <spanx style="verb">supportsPrivate</spanx> to false for every data type, since cross-viewer state advancement leaks the existence of another user's private write (see <xref target="security-considerations"></xref>).</t>

<t>Changes to <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> alone <bcp14>MUST NOT</bcp14> update server-maintained modification timestamps of the related object, such as the <spanx style="verb">changed</spanx> property of FileNode <xref target="I-D.ietf-jmap-filenode"/> or the <spanx style="verb">updated</spanx> property of CalendarEvent <xref target="I-D.ietf-jmap-calendars"/>. This overrides any requirement of those specifications that the timestamp change on every update.</t>

</section>
</section>
<section anchor="standard-method-extensions"><name>Standard Method Extensions</name>

<t>For each data type listed in the <spanx style="verb">dataTypes</spanx> field of the account capability, the standard JMAP methods for that type are extended as described in the following subsections; a server <bcp14>MUST</bcp14> implement these extensions for every listed data type.</t>

<t>These extensions apply to requests whose <spanx style="verb">using</spanx> includes <spanx style="verb">urn:ietf:params:jmap:metadata</spanx>. For other requests, <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> are not default properties of <spanx style="verb">Foo/get</spanx> (although they are still returned when requested by name), <spanx style="verb">Foo/set</spanx> <bcp14>MUST</bcp14> reject any write to them with an "invalidProperties" SetError, and <spanx style="verb">Foo/changes</spanx> <bcp14>MUST</bcp14> behave as if <spanx style="verb">ignoreMetadataOnlyChanges</spanx> were true. The state string is the same as for requests that use this capability.</t>

<t>This document does not extend methods that create or parse objects from uploaded data, such as <spanx style="verb">Email/import</spanx> and <spanx style="verb">Email/parse</spanx> (<xref target="RFC8621"/>). Objects created or returned by such methods have empty <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>.</t>

<section anchor="get-extension"><name>/get</name>

<t>For a listed data type, when <spanx style="verb">properties</spanx> is omitted or <spanx style="verb">null</spanx>, the server <bcp14>MUST</bcp14> include <spanx style="verb">metadata</spanx> and, where <spanx style="verb">supportsPrivate</spanx> is true, <spanx style="verb">privateMetadata</spanx> in each returned object, except for <spanx style="verb">Email/get</spanx>, whose default property list (<xref section="4.2" sectionFormat="of" target="RFC8621"/>) is unchanged. The two properties may also be requested explicitly by name in the <spanx style="verb">properties</spanx> array, like any other JMAP property.</t>

<t>When a client wants only a subset of the metadata, it <bcp14>MAY</bcp14> request individual namespaces using slash-separated subselector paths in the <spanx style="verb">properties</spanx> argument. The following rules apply to subselectors introduced by this specification:</t>

<t><list style="symbols">
  <t>A subselector has the form <spanx style="verb">metadata/&lt;namespace&gt;</spanx> or <spanx style="verb">privateMetadata/&lt;namespace&gt;</spanx>, where <spanx style="verb">&lt;namespace&gt;</spanx> is a non-empty namespace identifier. Any other <spanx style="verb">properties</spanx> entry beginning with <spanx style="verb">metadata/</spanx> or <spanx style="verb">privateMetadata/</spanx> <bcp14>MUST</bcp14> be rejected with an "invalidArguments" method-level error.</t>
  <t>Multiple subselectors with the same root combine by union. For example, <spanx style="verb">["metadata/x", "metadata/y"]</spanx> returns <spanx style="verb">{"metadata": {"x": ..., "y": ...}}</spanx> (and nothing else under <spanx style="verb">metadata</spanx>).</t>
  <t>An explicit root entry supersedes subselectors with the same root. For example, <spanx style="verb">["metadata", "metadata/x"]</spanx> returns the complete <spanx style="verb">metadata</spanx> object; the <spanx style="verb">metadata/x</spanx> entry is redundant rather than restrictive.</t>
  <t>A subselector naming a namespace that is not supported (<xref target="namespaces"></xref>) on the data type <bcp14>MUST</bcp14> be silently omitted from the response, unless the object has data stored under that namespace (<xref target="namespace-removal"></xref>), which is then returned. This lets clients perform capability-tolerant fetches without first consulting the session capability.</t>
  <t>This specification defines slash-path subselectors only for <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>. The use of slash-path subselectors with any other property name is outside the scope of this document.</t>
</list></t>

</section>
<section anchor="set"><name>/set</name>

<t>The <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> properties are mutable.</t>

<t>In a <spanx style="verb">create</spanx> entry of <spanx style="verb">Foo/set</spanx>, each property's value <bcp14>MUST</bcp14> be a complete JSON object (possibly the empty object <spanx style="verb">{}</spanx>). A value of <spanx style="verb">null</spanx> for either property <bcp14>MUST</bcp14> be rejected with an "invalidProperties" SetError; the canonical "no metadata" form is <spanx style="verb">{}</spanx>. In an <spanx style="verb">update</spanx>, <spanx style="verb">null</spanx> is equivalent to <spanx style="verb">{}</spanx>.</t>

<t>In an <spanx style="verb">update</spanx> entry of <spanx style="verb">Foo/set</spanx>, clients <bcp14>MAY</bcp14> either send a complete object as the value of <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> (replacing the previous value entirely), or use the PatchObject form (<xref section="5.3" sectionFormat="of" target="RFC8620"/>). Patch paths start with <spanx style="verb">metadata/&lt;namespace&gt;</spanx> or <spanx style="verb">privateMetadata/&lt;namespace&gt;</spanx> (replacing or removing an entire namespace value) and <bcp14>MAY</bcp14> continue to any depth below it (for example, <spanx style="verb">metadata/&lt;namespace&gt;/&lt;key&gt;/&lt;subkey&gt;</spanx>), with the semantics of <xref section="5.3" sectionFormat="of" target="RFC8620"/>: the parent of the target <bcp14>MUST</bcp14> exist, and a path that traverses an array is rejected with an "invalidPatch" SetError.</t>

<t>Setting a patch value to <spanx style="verb">null</spanx> removes the targeted key, per standard PatchObject semantics (<xref section="5.3" sectionFormat="of" target="RFC8620"/>). Setting a path to a complete object value replaces whatever was previously at that path; in particular, a patch of the shape <spanx style="verb">"metadata/&lt;namespace&gt;": { ... }</spanx> replaces the entire content of that namespace, deleting any keys not present in the new value. Clients that want to add or update individual properties without removing others need to patch the specific keys.</t>

<t>The server <bcp14>MUST</bcp14> validate every write against the account capability for the data type. When more than one of the following rules applies, the server <bcp14>MUST</bcp14> evaluate them in the order listed; the first matching rule determines the SetError:</t>

<t><list style="numbers" type="1">
  <t>If the user cannot read the related object, reject with "notFound". If the user lacks write access to the related object and the write targets <spanx style="verb">metadata</spanx>, reject with "forbidden".</t>
  <t>If the path begins with <spanx style="verb">privateMetadata</spanx> and <spanx style="verb">supportsPrivate</spanx> is false for this data type, reject with "invalidProperties".</t>
  <t>If the targeted namespace is not supported on this data type, reject with "invalidProperties" (except for the migration case in <xref target="namespace-removal"></xref>).</t>
  <t>If a namespace value would exceed <spanx style="verb">maxDepth</spanx>, reject with "invalidProperties".</t>
</list></t>

<t>Patch errors that can be determined from the request alone (for example, two paths where one is a prefix of the other) <bcp14>MUST</bcp14> be reported with "invalidPatch" before rule 1 is evaluated. Patch errors that depend on the current value of the property (a missing parent, or a path through an array) <bcp14>MUST</bcp14> be reported with "invalidPatch" after rule 3 and before rule 4.</t>

<section anchor="quota-enforcement-on-set"><name>Quota Enforcement on /set</name>

<t>Servers <bcp14>SHOULD</bcp14> enforce quota limits on the total storage consumed by metadata within an account, as described in <xref target="quota"></xref>. If a create, update, or copy would cause the account to exceed its metadata quota, the server <bcp14>MUST</bcp14> reject the operation with an "overQuota" SetError.</t>

</section>
</section>
<section anchor="changes-extension"><name>/changes</name>

<t>For each data type listed in <spanx style="verb">dataTypes</spanx>, the <spanx style="verb">Foo/changes</spanx> request accepts the following additional optional argument:</t>

<dl newline="true">
  <dt><strong>ignoreMetadataOnlyChanges</strong>: <spanx style="verb">Boolean</spanx> (default: false)</dt>
  <dd>
    <t>If true, the server <bcp14>MUST</bcp14> exclude from the <spanx style="verb">updated</spanx> array any id whose only changes since <spanx style="verb">sinceState</spanx>, from the viewer's perspective, are confined to <spanx style="verb">metadata</spanx> and/or <spanx style="verb">privateMetadata</spanx>. Ids with any other change remain in <spanx style="verb">updated</spanx>. If the server cannot determine that an id's changes are metadata-only, it <bcp14>MUST</bcp14> include the id. Excluded ids do not count toward <spanx style="verb">maxChanges</spanx>. The state string still advances normally, so a client using this argument continues to see correct synchronization for all non-metadata-only changes; metadata-only changes are simply not reported to this client. When this argument is true, <spanx style="verb">updatedProperties</spanx> (defined below) <bcp14>MUST NOT</bcp14> list <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx>. For <spanx style="verb">Mailbox/changes</spanx> it may list the count properties (<xref section="2.2" sectionFormat="of" target="RFC8621"/>); for other types it <bcp14>MUST</bcp14> be <spanx style="verb">null</spanx>.</t>
  </dd>
</dl>

<t>The response is extended to include the following additional argument:</t>

<dl>
  <dt><strong>updatedProperties</strong>: <spanx style="verb">String[]|null</spanx></dt>
  <dd>
    <t>This argument is determined <em>per viewer</em>: each user's <spanx style="verb">Foo/changes</spanx> response is computed against the changes visible to that user (in particular, <spanx style="verb">privateMetadata</spanx> written by other users is invisible). If, from the viewer's perspective, the only properties that have changed on every id in the <spanx style="verb">updated</spanx> array since the old state are <spanx style="verb">metadata</spanx> and/or <spanx style="verb">privateMetadata</spanx>, this argument <bcp14>MUST</bcp14> be set to a list containing only those property names (e.g., <spanx style="verb">["metadata"]</spanx>, <spanx style="verb">["privateMetadata"]</spanx>, or <spanx style="verb">["metadata", "privateMetadata"]</spanx>). If any other property (apart from the Mailbox count properties described below) of any id in the array may also have changed (from the viewer's perspective), or if the server cannot determine the answer for any id in the array, this argument <bcp14>MUST</bcp14> be <spanx style="verb">null</spanx>. The argument applies uniformly to all ids in <spanx style="verb">updated</spanx>; per-id granularity is not provided. It is always present, and is <spanx style="verb">null</spanx> when <spanx style="verb">updated</spanx> is empty.</t>
  </dd>
</dl>

<t>This argument follows the same convention used by <spanx style="verb">Mailbox/changes</spanx> in <xref section="2.2" sectionFormat="of" target="RFC8621"/>. For <spanx style="verb">Mailbox/changes</spanx>, when every id in <spanx style="verb">updated</spanx> changed only in its counts (as defined there) and/or in <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx>, the value is the union of the count property names and the metadata property names that may have changed.</t>

</section>
<section anchor="copy"><name>/copy</name>

<t><spanx style="verb">Foo/copy</spanx> copies <spanx style="verb">metadata</spanx> to the new object. The copying user's <spanx style="verb">privateMetadata</spanx> on the source object becomes that user's <spanx style="verb">privateMetadata</spanx> on the new object; other users' <spanx style="verb">privateMetadata</spanx> <bcp14>MUST NOT</bcp14> be copied. When the request does not use this capability, only <spanx style="verb">metadata</spanx> is copied. The create object <bcp14>MAY</bcp14> include <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> to override the copied values, with the same rules as a create in <spanx style="verb">Foo/set</spanx>; for <spanx style="verb">Email/copy</spanx>, this extends the list of properties that may be set in <xref section="4.7" sectionFormat="of" target="RFC8621"/>. Copied metadata counts against quota (<xref target="quota"></xref>) as any other write.</t>

<t>Copied values are not revalidated against the destination account: data in a copied namespace that is not supported there is handled as described in <xref target="namespace-removal"></xref>, and <spanx style="verb">maxDepth</spanx> applies only to values supplied in the create object. <spanx style="verb">privateMetadata</spanx> is not copied when the destination does not support it, and neither property is copied when the data type is not listed in the destination account. With <spanx style="verb">onSuccessDestroyOriginal</spanx>, other users' <spanx style="verb">privateMetadata</spanx> on the source object is destroyed together with it.</t>

</section>
<section anchor="querychanges"><name>/queryChanges</name>

<t><spanx style="verb">Foo/queryChanges</spanx> is unchanged in its method signature and follows the per-viewer rule in <xref target="state-behavior"></xref>.</t>

</section>
<section anchor="filter-conditions"><name>/query</name>

<t>For each data type listed in <spanx style="verb">dataTypes</spanx>, the FilterCondition object for <spanx style="verb">Foo/query</spanx> is extended with the optional fields defined below. Several of those fields take a <spanx style="verb">MetadataTextMatch</spanx> value.</t>

<t>A <strong>MetadataTextMatch</strong> object has the following fields:</t>

<dl newline="true">
  <dt><strong>path</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The path within the metadata object to match against: a namespace identifier, optionally followed by a JSON Pointer <xref target="RFC6901"/> into the namespace value (for example, <spanx style="verb">&lt;namespace&gt;</spanx>, <spanx style="verb">&lt;namespace&gt;/&lt;key&gt;</spanx> or <spanx style="verb">&lt;namespace&gt;/&lt;key&gt;/&lt;subkey&gt;</spanx>). Object members are addressed by name; a path that would traverse an array or a scalar addresses no value. A path that is not well formed (for example, one with an invalid <spanx style="verb">~</spanx> escape) <bcp14>MUST</bcp14> be rejected with an "invalidArguments" error.</t>
  </dd>
  <dt><strong>value</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The string to search for at <spanx style="verb">path</spanx>. The interpretation of this string (substring containment versus exact equality) is determined by the FilterCondition field that carries the <spanx style="verb">MetadataTextMatch</spanx>.</t>
  </dd>
</dl>

<t>The extended FilterCondition fields are:</t>

<dl newline="true">
  <dt><strong>metadataExists</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>A path, with the syntax defined for <spanx style="verb">MetadataTextMatch</spanx>. Matches an object if and only if a value is present at the given path within the object's <spanx style="verb">metadata</spanx> property. A namespace-only path matches if the namespace key is present and its value is not the empty object <spanx style="verb">{}</spanx>.</t>
  </dd>
  <dt><strong>privateMetadataExists</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>As <spanx style="verb">metadataExists</spanx>, but matches against the authenticated user's <spanx style="verb">privateMetadata</spanx>.</t>
  </dd>
  <dt><strong>metadataTextContains</strong>: <spanx style="verb">MetadataTextMatch</spanx></dt>
  <dd>
    <t>Matches an object if the <spanx style="verb">metadata</spanx> value at the supplied <spanx style="verb">path</spanx> is a string that contains the supplied <spanx style="verb">value</spanx> as a substring under the "i;unicode-casemap" collation <xref target="RFC5051"/>. The condition does not match if the path does not exist within <spanx style="verb">metadata</spanx>, or if the value at the path is not a string.</t>
  </dd>
  <dt><strong>privateMetadataTextContains</strong>: <spanx style="verb">MetadataTextMatch</spanx></dt>
  <dd>
    <t>As <spanx style="verb">metadataTextContains</spanx>, but searches the authenticated user's <spanx style="verb">privateMetadata</spanx>.</t>
  </dd>
  <dt><strong>metadataTextEquals</strong>: <spanx style="verb">MetadataTextMatch</spanx></dt>
  <dd>
    <t>Matches an object if the <spanx style="verb">metadata</spanx> value at the supplied <spanx style="verb">path</spanx> is a string that is exactly equal to the supplied <spanx style="verb">value</spanx>, comparing Unicode code points without case folding or normalization. The condition does not match if the path does not exist within <spanx style="verb">metadata</spanx>, or if the value at the path is not a string.</t>
  </dd>
  <dt><strong>privateMetadataTextEquals</strong>: <spanx style="verb">MetadataTextMatch</spanx></dt>
  <dd>
    <t>As <spanx style="verb">metadataTextEquals</spanx>, but searches the authenticated user's <spanx style="verb">privateMetadata</spanx>.</t>
  </dd>
</dl>

<t>The following availability rules apply to all six conditions:</t>

<t><list style="symbols">
  <t>Servers <bcp14>MUST</bcp14> support <spanx style="verb">metadataExists</spanx> and <spanx style="verb">privateMetadataExists</spanx> (where <spanx style="verb">supportsPrivate</spanx> is true).</t>
  <t>Servers <bcp14>MAY</bcp14> reject any of the four text-match conditions with an "unsupportedFilter" error if implementation cost or storage layout makes them infeasible. Clients need to be prepared to fall back to a client-side scan in this case.</t>
  <t>Any <spanx style="verb">privateMetadata*</spanx> condition (existence or text) <bcp14>MUST</bcp14> be rejected with an "unsupportedFilter" error if <spanx style="verb">supportsPrivate</spanx> is false for the data type.</t>
  <t>Conditions are evaluated against the stored data whether or not the namespace is supported on the data type, so data stored under an unsupported namespace (<xref target="namespace-removal"></xref>) can still be found. A condition naming an unsupported namespace with no stored data, or a string that is not a valid namespace identifier, matches no objects; it does not produce an error.</t>
</list></t>

<t>These conditions compose with the data type's existing filter conditions through the usual <spanx style="verb">AND</spanx>/<spanx style="verb">OR</spanx>/<spanx style="verb">NOT</spanx> operators (<xref section="5.5" sectionFormat="of" target="RFC8620"/>). For example, a client may query for Email objects in a particular mailbox whose vendor metadata contains a search term in a single server-side query, as shown in <xref target="example-query"></xref>.</t>

</section>
</section>
<section anchor="access-control"><name>Access Control</name>

<t>Access control for metadata follows the access control of the related object. The two properties are governed by different rules:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">metadata</spanx> property is shared. A user who has read access to the related object can read the object's <spanx style="verb">metadata</spanx>. A user who has write access to the related object can modify the object's <spanx style="verb">metadata</spanx>. For the data types listed in <xref target="rights-table"></xref>, "read" and "write" are the rights given there. For other shareable data types (<xref section="4" sectionFormat="of" target="RFC9670"/>), they are the rights the type's specification defines in <spanx style="verb">myRights</spanx> for reading the object and for modifying its properties. For other data types, read and write access are those of the account, and write access additionally requires that the account is not read-only (<spanx style="verb">isReadOnly</spanx> is false, <xref section="2" sectionFormat="of" target="RFC8620"/>).</t>
  <t>The <spanx style="verb">privateMetadata</spanx> property is per-user. The server <bcp14>MUST</bcp14> filter responses so that each user sees only the <spanx style="verb">privateMetadata</spanx> content they themselves wrote. Private metadata written by another user on the same related object <bcp14>MUST NOT</bcp14> be visible. To write <spanx style="verb">privateMetadata</spanx> on a related object, the user needs only read access to the related object; write access on the related object is not required.</t>
</list></t>

<t>For the following data types, "read" and "write" are defined as shown. When an object belongs to more than one container (an Email in several Mailboxes, a CalendarEvent in several Calendars, or a ContactCard in several AddressBooks), read access requires the right on at least one of the containers, and write access requires it on every container the object belongs to; when the same update changes the object's containers, write access requires it on every container both before and after the change. On create, the rights apply to the containers given in the create.</t>

<texttable title="Read and write rights by data type" anchor="rights-table">
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Read</ttcol>
      <ttcol align='left'>Write</ttcol>
      <c>Email <xref target="RFC8621"/></c>
      <c><spanx style="verb">mayReadItems</spanx> on a containing Mailbox</c>
      <c><spanx style="verb">maySetKeywords</spanx> on every containing Mailbox</c>
      <c>Mailbox <xref target="RFC8621"/></c>
      <c>the Mailbox is returned to the user by <spanx style="verb">Mailbox/get</spanx></c>
      <c><spanx style="verb">mayRename</spanx></c>
      <c>CalendarEvent <xref target="I-D.ietf-jmap-calendars"/></c>
      <c><spanx style="verb">mayReadItems</spanx> on a containing Calendar</c>
      <c><spanx style="verb">mayWriteAll</spanx>, or <spanx style="verb">mayWriteOwn</spanx> if the user is an owner of the event or the event has no owner, on every containing Calendar</c>
      <c>Calendar <xref target="I-D.ietf-jmap-calendars"/></c>
      <c>the Calendar is returned to the user by <spanx style="verb">Calendar/get</spanx></c>
      <c><spanx style="verb">mayWriteAll</spanx></c>
      <c>ContactCard <xref target="RFC9610"/></c>
      <c><spanx style="verb">mayRead</spanx> on a containing AddressBook</c>
      <c><spanx style="verb">mayWrite</spanx> on every containing AddressBook</c>
      <c>AddressBook <xref target="RFC9610"/></c>
      <c>the AddressBook is returned to the user by <spanx style="verb">AddressBook/get</spanx></c>
      <c><spanx style="verb">mayWrite</spanx></c>
      <c>FileNode <xref target="I-D.ietf-jmap-filenode"/></c>
      <c><spanx style="verb">mayRead</spanx></c>
      <c><spanx style="verb">mayRename</spanx></c>
      <c>SieveScript <xref target="RFC9661"/></c>
      <c>access to the account</c>
      <c>the account is not read-only</c>
</texttable>

<t>[[Open issue: Several of these mappings reuse rights defined for other purposes (for example, <spanx style="verb">maySetKeywords</spanx>, <spanx style="verb">mayRename</spanx>, or <spanx style="verb">mayWriteAll</spanx> for a Calendar's own properties), and JMAP for Calendars and JMAP for Contacts define no right for modifying the properties of a Calendar or AddressBook. The working group needs to decide whether to keep these mappings or to define a dedicated right, such as <spanx style="verb">mayWriteMetadata</spanx>, for every data type that supports metadata. WebDAV (the DAV:write-properties privilege of <xref target="RFC3744"/>) and IMAP ANNOTATE (the "n" right of <xref target="RFC5257"/>) both separate this right from the right to modify content. Similarly, JMAP for Calendars defines <spanx style="verb">mayUpdatePrivate</spanx> for per-user event properties, whereas this document lets any user with read access write <spanx style="verb">privateMetadata</spanx>.]]</t>

<t>The server <bcp14>MUST</bcp14> enforce these rules consistently across <spanx style="verb">/get</spanx>, <spanx style="verb">/set</spanx>, <spanx style="verb">/query</spanx>, <spanx style="verb">/queryChanges</spanx>, and <spanx style="verb">/changes</spanx>. An object the user cannot read is treated for <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> exactly as for its other properties (for example, it is reported in <spanx style="verb">notFound</spanx>). A write to an object the user cannot read <bcp14>MUST</bcp14> be rejected with a "notFound" SetError, so that the existence of the object is not revealed. A write to <spanx style="verb">metadata</spanx> without write permission on the related object <bcp14>MUST</bcp14> be rejected with a "forbidden" SetError.</t>

<t>When sharing permissions on a related object change, the visibility of its <spanx style="verb">metadata</spanx> changes accordingly. <spanx style="verb">privateMetadata</spanx> belonging to a user remains visible to that user as long as the user retains read access to the related object. If read access is revoked, the object, including the user's <spanx style="verb">privateMetadata</spanx>, becomes inaccessible to that user; the server <bcp14>MAY</bcp14> delete that <spanx style="verb">privateMetadata</spanx>, and if it does not and access is restored, it is visible again. A user's <spanx style="verb">privateMetadata</spanx> is destroyed together with the related object.</t>

<section anchor="account-delegation-and-administrative-access"><name>Account Delegation and Administrative Access</name>

<t><spanx style="verb">privateMetadata</spanx> is keyed by the authenticated identity of the session. A delegate, an impersonating administrator, or any other session authenticated as a different identity than the account owner <bcp14>MUST</bcp14> see and write only its own <spanx style="verb">privateMetadata</spanx>, never the account owner's. Exposing the account owner's <spanx style="verb">privateMetadata</spanx> to such a session is outside the scope of this document.</t>

</section>
</section>
<section anchor="quota"><name>Quota</name>

<t>Servers <bcp14>SHOULD</bcp14> enforce quota limits on the storage consumed by metadata within an account. Unbounded metadata growth could be exploited to exhaust resources, particularly because <spanx style="verb">privateMetadata</spanx> is per-user and so a single shared object can carry one private payload per user with access to it.</t>

<t>Servers that support the JMAP Quotas extension <xref target="RFC9425"/> <bcp14>SHOULD</bcp14> integrate metadata storage into the quota framework defined there. Servers that do not implement <xref target="RFC9425"/> <bcp14>SHOULD</bcp14> still enforce implementation-defined limits and reject overruns with an "overQuota" SetError.</t>

<t>The size metric used for metadata quota is implementation-defined; clients cannot assume that two servers compute identical sizes for the same data. Servers can document the metric they use.</t>

<t>A server that also exposes the related object over other protocols (for example, as WebDAV dead properties <xref target="RFC4918"/> or IMAP METADATA <xref target="RFC5464"/>) <bcp14>MAY</bcp14> count data that is not visible through JMAP against the quota and limits described in this section. Clients therefore need to be prepared for a limit error on an object whose visible metadata is small.</t>

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

<section anchor="example-capability"><name>Capability</name>

<t>A session for an account whose server supports metadata on four data types, with varying private-metadata and depth settings:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "capabilities": {
    "urn:ietf:params:jmap:metadata": {}
  },
  "accounts": {
    "A1": {
      "accountCapabilities": {
        "urn:ietf:params:jmap:metadata": {
          "dataTypes": {
            "Email": {
              "namespaces": [],
              "supportsVendorNamespaces": true,
              "supportsPrivate": true,
              "maxDepth": 4
            },
            "Mailbox": {
              "namespaces": [],
              "supportsVendorNamespaces": true,
              "supportsPrivate": true,
              "maxDepth": null
            },
            "CalendarEvent": {
              "namespaces": [],
              "supportsVendorNamespaces": true,
              "supportsPrivate": false,
              "maxDepth": 2
            },
            "FileNode": {
              "namespaces": ["photography"],
              "supportsVendorNamespaces": false,
              "supportsPrivate": false,
              "maxDepth": 3
            }
          }
        }
      }
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="fetching-a-mailbox-with-its-metadata"><name>Fetching a Mailbox with Its Metadata</name>

<t>Request the shared metadata and the user's private metadata for a single Mailbox:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/get", {
    "accountId": "A1",
    "ids": ["MB1"],
    "properties": [
      "id", "name",
      "metadata/acme.example.com",
      "privateMetadata/acme.example.com"
    ]
  }, "c1"]
]
]]></sourcecode></figure>

<t>Response:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/get", {
    "accountId": "A1",
    "state": "mb-100",
    "list": [
      {
        "id": "MB1",
        "name": "Team Inbox",
        "metadata": {
          "acme.example.com": {
            "color": "blue",
            "owner": "team-alpha"
          }
        },
        "privateMetadata": {
          "acme.example.com": {
            "workflowState": "pending-review"
          }
        }
      }
    ],
    "notFound": []
  }, "c1"]
]
]]></sourcecode></figure>

</section>
<section anchor="patching-a-single-property-within-a-namespace"><name>Patching a Single Property within a Namespace</name>

<t>Update one property inside a namespace without disturbing the others:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/set", {
    "accountId": "A1",
    "update": {
      "MB1": {
        "metadata/acme.example.com/color": "green"
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>Removing a single property uses a patch to <spanx style="verb">null</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/set", {
    "accountId": "A1",
    "update": {
      "MB1": {
        "metadata/acme.example.com/color": null
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

</section>
<section anchor="creating-an-email-with-private-metadata"><name>Creating an Email with Private Metadata</name>

<t>Create a draft Email and attach a private workflow annotation atomically. The metadata is just another property on the create:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Email/set", {
    "accountId": "A1",
    "create": {
      "draft1": {
        "mailboxIds": { "MB1": true },
        "keywords": { "$draft": true },
        "subject": "Project Update",
        "from": [{ "email": "alice@example.com" }],
        "to":   [{ "email": "bob@example.com" }],
        "bodyStructure": {
          "type": "text/plain",
          "partId": "1"
        },
        "bodyValues": {
          "1": { "value": "Here is the project update..." }
        },
        "privateMetadata": {
          "acme.example.com": {
            "workflowState": "pending-review",
            "assignedTo": "carol@example.com"
          }
        }
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>The response is a single <spanx style="verb">Email/set</spanx> response; there is no separate metadata response, because metadata is part of the Email object.</t>

</section>
<section anchor="attaching-photography-metadata-to-a-filenode"><name>Attaching Photography Metadata to a FileNode</name>

<t>This example uses a <em>fictional</em> IANA-registered namespace <spanx style="verb">photography</spanx>, assumed for the purpose of this example to be specified for photographic information about image files and applicable to the <spanx style="verb">FileNode</spanx> data type. The capability for the account in <xref target="example-capability"></xref> advertises FileNode as supporting <spanx style="verb">photography</spanx> and no vendor namespaces.</t>

<t>Request:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["FileNode/set", {
    "accountId": "A1",
    "update": {
      "F456": {
        "metadata/photography": {
          "geoLocation": {
            "latitude": 46.362,
            "longitude": 14.090
          },
          "cameraMake": "Canon",
          "cameraModel": "EOS R5",
          "aperture": "f/2.8",
          "shutterSpeed": "1/250",
          "iso": 400,
          "focalLength": "50mm",
          "dateTaken": "2023-10-01T01:14:00Z",
          "imageSize": {
            "width": 6000,
            "height": 4000
          }
        }
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>Subsequent retrieval of the FileNode, requesting only the relevant metadata namespace:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["FileNode/get", {
    "accountId": "A1",
    "ids": ["F456"],
    "properties": [
      "id", "name", "type", "size",
      "metadata/photography"
    ]
  }, "c2"]
]
]]></sourcecode></figure>

<t>Response:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["FileNode/get", {
    "accountId": "A1",
    "state": "f-200",
    "list": [
      {
        "id": "F456",
        "name": "lake-island.jpg",
        "type": "image/jpeg",
        "size": 2458624,
        "metadata": {
          "photography": {
            "geoLocation": {
              "latitude": 46.362,
              "longitude": 14.090
            },
            "cameraMake": "Canon",
            "cameraModel": "EOS R5",
            "aperture": "f/2.8",
            "shutterSpeed": "1/250",
            "iso": 400,
            "focalLength": "50mm",
            "dateTaken": "2023-10-01T01:14:00Z",
            "imageSize": {
              "width": 6000,
              "height": 4000
            }
          }
        }
      }
    ],
    "notFound": []
  }, "c2"]
]
]]></sourcecode></figure>

</section>
<section anchor="updating-a-calendarevent-and-its-metadata-atomically"><name>Updating a CalendarEvent and Its Metadata Atomically</name>

<t>This example updates a primary property of a CalendarEvent and two vendor metadata properties in the same <spanx style="verb">/set</spanx> call. As with any update entry, either all of these changes apply or none do.</t>

<t>Request:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["CalendarEvent/set", {
    "accountId": "A1",
    "update": {
      "CE789": {
        "title": "Quarterly Review Meeting",
        "start": "2024-12-15T14:00:00",
        "metadata/acme.example.com/lastModifiedReason":
            "Rescheduled per manager request",
        "metadata/acme.example.com/approvalStatus": "pending"
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>A successful response is a single <spanx style="verb">CalendarEvent/set</spanx> response; metadata changes do not produce a separate response because they are properties of the event itself:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["CalendarEvent/set", {
    "accountId": "A1",
    "oldState": "c-200",
    "newState": "c-201",
    "updated": {
      "CE789": null
    }
  }, "c1"]
]
]]></sourcecode></figure>

</section>
<section anchor="example-query"><name>Querying by Metadata and a Primary Property Together</name>

<t>Find all Email objects in a particular Mailbox whose private vendor <spanx style="verb">memo</spanx> contains the text "follow up":</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Email/query", {
    "accountId": "A1",
    "filter": {
      "operator": "AND",
      "conditions": [
        { "inMailbox": "MB-inbox" },
        {
          "privateMetadataTextContains": {
            "path":  "acme.example.com/memo",
            "value": "follow up"
          }
        }
      ]
    }
  }, "c1"]
]
]]></sourcecode></figure>

</section>
<section anchor="detecting-a-metadata-only-change-through-changes"><name>Detecting a Metadata-Only Change through /changes</name>

<t>After another client updates the shared metadata of two Emails, the next <spanx style="verb">Email/changes</spanx> call returns:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Email/changes", {
    "accountId": "A1",
    "oldState": "e-100",
    "newState": "e-103",
    "hasMoreChanges": false,
    "created": [],
    "updated": ["EM1", "EM2"],
    "destroyed": [],
    "updatedProperties": ["metadata"]
  }, "c1"]
]
]]></sourcecode></figure>

<t>The client knows it only needs to refetch the <spanx style="verb">metadata</spanx> property of <spanx style="verb">EM1</spanx> and <spanx style="verb">EM2</spanx>, not the full Email objects.</t>

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

<section anchor="metadata-confidentiality"><name>Metadata Confidentiality</name>

<t>Metadata may contain sensitive information: personal notes, workflow states, application-specific data, and other user-generated content. Servers <bcp14>MUST</bcp14> enforce the access-control rules in <xref target="access-control"></xref>. Failures here are direct privacy breaches.</t>

<t><spanx style="verb">privateMetadata</spanx> is per-user. The server <bcp14>MUST</bcp14> ensure that each user sees only their own content, even on shared related objects. This is the most common implementation pitfall in this specification: a query or <spanx style="verb">/get</spanx> implementation that returns another user's <spanx style="verb">privateMetadata</spanx> is a serious bug. Servers <bcp14>MUST</bcp14> verify that result filtering applies uniformly to <spanx style="verb">/get</spanx>, <spanx style="verb">/query</spanx>, <spanx style="verb">/changes</spanx>, <spanx style="verb">/queryChanges</spanx>, and to any cached or denormalized representation.</t>

<t>Per-viewer state (<xref target="state-behavior"></xref>) interacts with confidentiality. A server that advances the related type's state for user B in response to user A's private write is not leaking the metadata content, but it is leaking a signal that <em>something</em> private to A changed on the related object. The specification therefore requires per-viewer state, and requires <spanx style="verb">supportsPrivate</spanx> to be false where the server cannot provide it.</t>

</section>
<section anchor="user-identity-and-authentication"><name>User Identity and Authentication</name>

<t>The private-metadata model relies on accurate user identification. Servers need to identify the authenticated user reliably for every metadata operation and keep each <spanx style="verb">privateMetadata</spanx> value associated with the user that wrote it, so that identity spoofing or authentication bypass cannot expose another user's private metadata. Delegated and administrative sessions are covered in <xref target="account-delegation-and-administrative-access"></xref>.</t>

</section>
<section anchor="untrusted-namespace-values"><name>Untrusted Namespace Values</name>

<t>Namespace values are arbitrary client-supplied content. Servers and clients need to treat them as untrusted input: validate them before use, apply context-appropriate output encoding (for example, when rendering them in a web page or storing them in a database), and never interpret them as code. Servers store namespace values as given; they do not alter them, since clients and <spanx style="verb">metadataTextEquals</spanx> rely on exact values.</t>

<t>Clients that render metadata need appropriate sandboxing and Content Security Policy, and need to distinguish clearly in their user interface between <spanx style="verb">metadata</spanx> (visible to others) and <spanx style="verb">privateMetadata</spanx> (visible only to the user), so that users do not inadvertently disclose private notes. Clients also cannot assume the structure of a namespace value without checking it.</t>

</section>
<section anchor="resource-exhaustion"><name>Resource Exhaustion</name>

<t>Without controls, metadata can be abused for denial of service:</t>

<t><list style="symbols">
  <t>Storage exhaustion: bulk creation of large metadata payloads, particularly under <spanx style="verb">privateMetadata</spanx>, where every user with access to a shared object can independently consume space.</t>
  <t>Processing exhaustion: deeply nested or pathologically large namespace values.</t>
  <t>Query complexity: text-match filter conditions (<spanx style="verb">metadataTextContains</spanx>/<spanx style="verb">metadataTextEquals</spanx> and their private variants) that require expensive scanning, particularly when combined with per-user filtering across many users. Servers <bcp14>MAY</bcp14> reject such conditions with "unsupportedFilter" (<xref target="filter-conditions"></xref>) to bound the cost.</t>
</list></t>

<t>Servers <bcp14>SHOULD</bcp14> apply the quota mechanism in <xref target="quota"></xref>, and can also bound value sizes, enforce <spanx style="verb">maxDepth</spanx>, time out long-running queries, rate-limit metadata writes, and monitor for unusual usage patterns (for example, a single user creating private metadata on unusually many objects). Per-user filtering of <spanx style="verb">privateMetadata</spanx> needs to be efficient so that it does not itself become a denial-of-service vector.</t>

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

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

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

<t><strong>Capability Name:</strong> urn:ietf:params:jmap:metadata<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 anchor="namespaces-registry"><name>Creation of the "JMAP Metadata Namespaces" Registry</name>

<t>IANA is requested to create the "JMAP Metadata Namespaces" registry to record metadata namespace identifiers used as top-level keys in the <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> properties defined by this specification.</t>

<t>This registry uses the Expert Review process (<xref section="4.5" sectionFormat="of" target="RFC8126"/>). Registrants must propose a name without a dot ("."), since names containing a dot are reserved for vendor domain-name namespaces and need no registration. The designated expert <bcp14>MUST</bcp14> ensure that the proposed name does not collide with an existing registration and that the specification provides sufficient detail for interoperability (in particular, the structure of the namespace's value).</t>

<t>Registrations may be of Intended Use "common", "reserved", or "obsolete". A "reserved" registration reserves a name without assigning semantics; an "obsolete" registration marks a name that should no longer be used by up-to-date implementations.</t>

<section anchor="preliminary-community-review"><name>Preliminary Community Review</name>

<t>Notice of a potential new registration <bcp14>SHOULD</bcp14> be sent to the JMAP mailing list <eref target="mailto:jmap@ietf.org">jmap@ietf.org</eref> for review. The intent is to solicit comments on the namespace identifier, the clarity of the specification, and any interoperability or security considerations. The submitter <bcp14>MAY</bcp14> revise or withdraw the proposal at any time.</t>

</section>
<section anchor="change-procedures"><name>Change Procedures</name>

<t>The change controller for a registration <bcp14>MAY</bcp14> request changes to its definition using the same procedure as the original registration. Significant changes that would invalidate existing data <bcp14>SHOULD</bcp14> be made only to correct serious errors. Registrations <bcp14>MUST NOT</bcp14> be deleted; namespaces that are no longer appropriate for use can be marked obsolete by a change to their intended-use field.</t>

<t>The change controller of a registration <bcp14>MAY</bcp14> transfer responsibility to another person or agency by informing IANA.</t>

</section>
<section anchor="jmap-metadata-namespaces-registry-template"><name>"JMAP Metadata Namespaces" Registry Template</name>

<dl newline="true">
  <dt><strong>Namespace Identifier</strong>:</dt>
  <dd>
    <t>The name registered for use as a key in the <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> object. <bcp14>MUST</bcp14> consist of lowercase US-ASCII letters, digits, hyphens, and underscores, and <bcp14>MUST NOT</bcp14> contain a dot.</t>
  </dd>
  <dt><strong>Value Type</strong>:</dt>
  <dd>
    <t>A description of the structure of values stored under this namespace key (for example, "object whose values are strings").</t>
  </dd>
  <dt><strong>Applicable Properties</strong>:</dt>
  <dd>
    <t>One of: <spanx style="verb">"metadata"</spanx> (this namespace may appear only under <spanx style="verb">metadata</spanx>), <spanx style="verb">"privateMetadata"</spanx> (only under <spanx style="verb">privateMetadata</spanx>), or <spanx style="verb">"both"</spanx> (under either).</t>
  </dd>
  <dt><strong>Applicable Data Types</strong>:</dt>
  <dd>
    <t>A list of JMAP data type names on which this namespace is meaningful, or <spanx style="verb">"any"</spanx> if the namespace is not restricted.</t>
  </dd>
  <dt><strong>Reference or Description</strong>:</dt>
  <dd>
    <t>A brief description, or an RFC number and section reference, describing the namespace's contents. May be omitted for "reserved" entries.</t>
  </dd>
  <dt><strong>Intended Use</strong>:</dt>
  <dd>
    <t><spanx style="verb">"common"</spanx>, <spanx style="verb">"reserved"</spanx>, or <spanx style="verb">"obsolete"</spanx>.</t>
  </dd>
  <dt><strong>Change Controller</strong>:</dt>
  <dd>
    <t>Who may request changes to this entry (IETF for RFCs from the IETF stream).</t>
  </dd>
</dl>

</section>
<section anchor="submit-request-to-iana"><name>Submit Request to IANA</name>

<t>Registration requests can be sent to <eref target="mailto:iana@iana.org">iana@iana.org</eref>.</t>

</section>
<section anchor="designated-expert-review"><name>Designated Expert Review</name>

<t>The designated expert (DE) is primarily concerned with preventing name collisions and ensuring that the specification provides enough detail for interoperability. For common-use registrations, the DE is expected to confirm that suitable documentation (per <xref section="4.6" sectionFormat="of" target="RFC8126"/>) is available. A published specification is not required for reserved or obsolete registrations.</t>

<t>The DE will either approve or deny the registration and publish a notice of the decision to the JMAP working group mailing list (or its successor) and to IANA. A denial <bcp14>MUST</bcp14> be justified and <bcp14>SHOULD</bcp14> include concrete suggestions for how the request can be modified to become acceptable.</t>

</section>
<section anchor="initial-contents"><name>Initial Contents</name>

<t>This document defines no initial entries for the "JMAP Metadata Namespaces" registry. Future specifications may register entries through the procedure defined in this section.</t>

</section>
</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="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>
<reference anchor="RFC9670">
  <front>
    <title>JSON Meta Application Protocol (JMAP) Sharing</title>
    <author fullname="N. Jenkins" initials="N." role="editor" surname="Jenkins"/>
    <date month="November" year="2024"/>
    <abstract>
      <t>This document specifies a data model for sharing data between users using the JSON Meta Application Protocol (JMAP). Future documents can reference this document when defining data types to support a consistent model of sharing.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9670"/>
  <seriesInfo name="DOI" value="10.17487/RFC9670"/>
</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="RFC5051">
  <front>
    <title>i;unicode-casemap - Simple Unicode Collation Algorithm</title>
    <author fullname="M. Crispin" initials="M." surname="Crispin"/>
    <date month="October" year="2007"/>
    <abstract>
      <t>This document describes "i;unicode-casemap", a simple case-insensitive collation for Unicode strings. It provides equality, substring, and ordering operations. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5051"/>
  <seriesInfo name="DOI" value="10.17487/RFC5051"/>
</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="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="RFC9661">
  <front>
    <title>The JSON Meta Application Protocol (JMAP) for Sieve Scripts</title>
    <author fullname="K. Murchison" initials="K." surname="Murchison"/>
    <date month="September" year="2024"/>
    <abstract>
      <t>This document specifies a data model for managing Sieve scripts on a server using the JSON Meta Application Protocol (JMAP). Clients can use this protocol to efficiently search, access, organize, and validate Sieve scripts.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9661"/>
  <seriesInfo name="DOI" value="10.17487/RFC9661"/>
</reference>
<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="RFC3744">
  <front>
    <title>Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol</title>
    <author fullname="G. Clemm" initials="G." surname="Clemm"/>
    <author fullname="J. Reschke" initials="J." surname="Reschke"/>
    <author fullname="E. Sedlar" initials="E." surname="Sedlar"/>
    <author fullname="J. Whitehead" initials="J." surname="Whitehead"/>
    <date month="May" year="2004"/>
    <abstract>
      <t>This document specifies a set of methods, headers, message bodies, properties, and reports that define Access Control extensions to the WebDAV Distributed Authoring Protocol. This protocol permits a client to read and modify access control lists that instruct a server whether to allow or deny operations upon a resource (such as HyperText Transfer Protocol (HTTP) method invocations) by a given principal. A lightweight representation of principals as Web resources supports integration of a wide range of user management repositories. Search operations allow discovery and manipulation of principals using human names. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3744"/>
  <seriesInfo name="DOI" value="10.17487/RFC3744"/>
</reference>
<reference anchor="RFC5257">
  <front>
    <title>Internet Message Access Protocol - ANNOTATE Extension</title>
    <author fullname="C. Daboo" initials="C." surname="Daboo"/>
    <author fullname="R. Gellens" initials="R." surname="Gellens"/>
    <date month="June" year="2008"/>
    <abstract>
      <t>The ANNOTATE extension to the Internet Message Access Protocol permits clients and servers to maintain "meta data" for messages, or individual message parts, stored in a mailbox on the server. For example, this can be used to attach comments and other useful information to a message. It is also possible to attach annotations to specific parts of a message, so that, for example, they could be marked as seen, or important, or a comment added.</t>
      <t>Note that this document was the product of a WG that had good consensus on how to approach the problem. Nevertheless, the WG felt it did not have enough information on implementation and deployment hurdles to meet all of the requirements of a Proposed Standard. The IETF solicits implementations and implementation reports in order to make further progress.</t>
      <t>Implementers should be aware that this specification may change in an incompatible manner when going to Proposed Standard status. However, any incompatible changes will result in a new capability name being used to prevent problems with any deployments of the experimental extension. This memo defines an Experimental Protocol for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5257"/>
  <seriesInfo name="DOI" value="10.17487/RFC5257"/>
</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="13" month="October" year="2026"/>
      <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-33"/>
   
</reference>

<reference anchor="I-D.ietf-jmap-filenode">
   <front>
      <title>JMAP File Storage extension</title>
      <author fullname="Bron Gondwana" initials="B." surname="Gondwana">
         <organization>Fastmail</organization>
      </author>
      <date day="16" month="October" year="2026"/>
      <abstract>
	 <t>   The JMAP base protocol (RFC8620) provides the ability to upload and
   download arbitrary binary data.  This binary data is called a &quot;blob&quot;,
   and can be used in all other JMAP extensions.

   This extension adds a method to expose blobs as a filesystem along
   with the types of metadata that are provided by other remote
   filesystem protocols.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-jmap-filenode-16"/>
   
</reference>
<reference anchor="RFC9425">
  <front>
    <title>JSON Meta Application Protocol (JMAP) for Quotas</title>
    <author fullname="R. Cordier" initials="R." role="editor" surname="Cordier"/>
    <date month="June" year="2023"/>
    <abstract>
      <t>This document specifies a data model for handling quotas on accounts with a server using the JSON Meta Application Protocol (JMAP).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9425"/>
  <seriesInfo name="DOI" value="10.17487/RFC9425"/>
</reference>
<reference anchor="RFC5464">
  <front>
    <title>The IMAP METADATA Extension</title>
    <author fullname="C. Daboo" initials="C." surname="Daboo"/>
    <date month="February" year="2009"/>
    <abstract>
      <t>The METADATA extension to the Internet Message Access Protocol permits clients and servers to maintain "annotations" or "metadata" on IMAP servers. It is possible to have annotations on a per-mailbox basis or on the server as a whole. For example, this would allow comments about the purpose of a particular mailbox to be "attached" to that mailbox, or a "message of the day" containing server status information to be made available to anyone logging in to the server. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5464"/>
  <seriesInfo name="DOI" value="10.17487/RFC5464"/>
</reference>
<reference anchor="RFC4918">
  <front>
    <title>HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)</title>
    <author fullname="L. Dusseault" initials="L." role="editor" surname="Dusseault"/>
    <date month="June" year="2007"/>
    <abstract>
      <t>Web Distributed Authoring and Versioning (WebDAV) consists of a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, URL namespace manipulation, and resource locking (collision avoidance).</t>
      <t>RFC 2518 was published in February 1999, and this specification obsoletes RFC 2518 with minor revisions mostly due to interoperability experience. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4918"/>
  <seriesInfo name="DOI" value="10.17487/RFC4918"/>
</reference>



    </references>

</references>


<?line 774?>

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

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

<t><strong>draft-ietf-jmap-metadata-03</strong></t>

<t><list style="symbols">
  <t>Clarified that metadata-only changes do not update server-maintained modification timestamps.</t>
  <t>Defined behavior for requests that do not use the capability.</t>
  <t>Allowed patch paths at any depth, and placed "invalidPatch" in the <spanx style="verb">/set</spanx> validation order.</t>
  <t>Defined the interaction of <spanx style="verb">updatedProperties</spanx> and <spanx style="verb">ignoreMetadataOnlyChanges</spanx> with the Mailbox count properties.</t>
  <t>Added <spanx style="verb">/copy</spanx> behavior; excluded <spanx style="verb">/import</spanx> and <spanx style="verb">/parse</spanx> style methods.</t>
  <t>Excluded metadata from the <spanx style="verb">Email/get</spanx> default property list.</t>
  <t>Specified the "i;unicode-casemap" collation for <spanx style="verb">metadataTextContains</spanx>.</t>
  <t>Required lowercase domain-name namespace identifiers.</t>
  <t>Defined read and write rights for the data types of JMAP Mail, Calendars, Contacts, FileNode and Sieve, and the rule for objects in several containers.</t>
  <t>Clarified handling of data in unsupported namespaces in subselectors, filters, complete replacements and copies.</t>
  <t>Allowed filter condition paths at any depth below a namespace.</t>
  <t>Added terminology, defined depth recursively, and made editorial clarifications throughout.</t>
  <t>Recommended omitting the capability when no data type is listed, and noted that limits may count data from other protocols.</t>
</list></t>

<t><strong>draft-ietf-jmap-metadata-02</strong></t>

<t><list style="symbols">
  <t>Redesigned the extension around two properties (<spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>) on each opted-in JMAP data type, rather than a separate <spanx style="verb">Metadata</spanx> data type with its own methods. Removed the <spanx style="verb">Metadata</spanx> data type, all <spanx style="verb">Metadata/*</spanx> methods, the related object types, the extended <spanx style="verb">/get</spanx>/<spanx style="verb">/set</spanx> arguments, and the uniqueness and cascading-deletion machinery.</t>
  <t>Added a per-data-type capability advertising IANA-registered namespace support (<spanx style="verb">namespaces</spanx>), vendor (domain-name) namespace support (<spanx style="verb">supportsVendorNamespaces</spanx>), private-metadata support (<spanx style="verb">supportsPrivate</spanx>), and a nesting limit (<spanx style="verb">maxDepth</spanx>).</t>
  <t>Added <spanx style="verb">updatedProperties</spanx> to <spanx style="verb">Foo/changes</spanx> for opted-in types, modelled on <spanx style="verb">Mailbox/changes</spanx> in RFC 8621. Specified per-viewer behavior for <spanx style="verb">/changes</spanx> and <spanx style="verb">/queryChanges</spanx> on shared objects carrying per-user private metadata.</t>
  <t>Added FilterCondition fields to <spanx style="verb">Foo/query</spanx>: <spanx style="verb">metadataExists</spanx>, <spanx style="verb">privateMetadataExists</spanx>, <spanx style="verb">metadataTextContains</spanx>, <spanx style="verb">metadataTextEquals</spanx>, and the corresponding private variants. Servers <bcp14>MAY</bcp14> reject the text-match conditions with "unsupportedFilter" when implementation cost is prohibitive.</t>
  <t>Added an <spanx style="verb">ignoreMetadataOnlyChanges</spanx> argument to <spanx style="verb">Foo/changes</spanx>, letting metadata-uninterested clients skip wakeups for metadata-only changes on data types they otherwise care about.</t>
  <t>Specified PatchObject semantics for <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>, including handling of unknown namespaces, error ordering on <spanx style="verb">/set</spanx>, and the migration case where a namespace is removed from the server's advertised set after data has been written.</t>
  <t>Replaced the previous metadata-types and metadata-properties registries with a single "JMAP Metadata Namespaces" registry. This document defines no initial entries; bindings to other protocols (e.g., IMAP METADATA, WebDAV dead properties) are expected to be defined in separate specifications.</t>
</list></t>

<t><strong>draft-ietf-jmap-metadata-01</strong></t>

<t><list style="symbols">
  <t>Renamed <spanx style="verb">parentType</spanx> and <spanx style="verb">parentId</spanx> properties to <spanx style="verb">relatedType</spanx> and <spanx style="verb">relatedId</spanx> throughout the document to better reflect their purpose and avoid implying a strict hierarchy.</t>
  <t>Added <spanx style="verb">filterRelatedType</spanx> and <spanx style="verb">filterMetadataType</spanx> optional parameters to Metadata/changes method to allow filtering changes by related object type and metadata type.</t>
  <t>Changed the error type from "invalidProperties" to "alreadyExists" when a client attempts to create a Metadata object that violates the uniqueness constraint.</t>
  <t>Added requirement that <spanx style="verb">relatedType</spanx> must be specified in the same FilterCondition object whenever <spanx style="verb">relatedIds</spanx> is used in Metadata/query.</t>
  <t>Added <spanx style="verb">id</spanx> as a <bcp14>MUST</bcp14> support property for sorting in Metadata/query; other properties changed to <bcp14>SHOULD</bcp14> support.</t>
  <t>Replaced the <spanx style="verb">metadataTypes</spanx> argument with a <spanx style="verb">fetchMetadata</spanx> Boolean argument (default: false) in the extended /get method.</t>
  <t>Added <spanx style="verb">onSuccessCreateMetadata</spanx> and <spanx style="verb">onSuccessUpdateMetadata</spanx> arguments to the extended /set method to enable transactional metadata operations that are conditional on the success of the related object operation.</t>
</list></t>

<t><strong>draft-ietf-jmap-metadata-00</strong></t>

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

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA81963Lb2Jngfz4Flr1VLalIWlLbTjeVzUQtqyeabdmOJacr
23EtQfJQRAwCDA4oWXErz7LPsk+23/VcAJCSO1M72ZpNy8TBwbl89+twOOzV
WZ2bcfIfl6dvkzfTv5pZnVyaOp2nddpLp9PK3G55OC9nRbqCV+dVuqiHmakX
w7+u0vVwJSOGh9/07Ga6yqzNyuL6fg1jL86vf+jN0trclNX9OLH1vLdZw2Bj
x71yasvc0J/ZuhondbWx9fHh4XeHx72P5v6urOYwQVGbqjD18BV+tWfrtJj/
7zQvC5j83tgejPp4U5WbNa+6t87Gyc91ORsktqzqyiws/HW/wj8+9Hrppl6W
1biXDHsJ/L+ssOPkcpS8Msm/m6JIq5J+5m1eppuqbD4qq5txclWn+V1a1cmP
6dQmP/54Ro/08KKn9MTCOkw9To6+OfwuOSsXC2OK5PTWFBszSK42WW2SI9g3
jZ1lNZzT1dJU2Twt6KfK3MB5jpOf/swjyjms7tvjbw+P5N+bosbDfX91Sj+Y
VZrl42SF6/+9xdWMYDn0aFPB8Szrem3Hz575R72irFZpnd0aOJrk3Q9n3748
PhzrH/LT0fHLsf7BP3338jc8Cv/gn15+d3g01j/4pxeHL/gn/KPXy4pF+2NH
+rEjnfnl0Vj/0J+O9GNH8rFvfvP8+Vj/kI8dv/jNWP+Any6Gr0YeUmdpbop5
Wtlx69Eig0d4svK158cvxvqHTP38JX8N/+Cfnn939O1Y/+j1hsMhQAHcdjqD
M71eZjYBpNmsTFEnc7PICmOTtEjMp9oUiCJJXSb10iT/cfXmNeFZcrpe5xmg
Cz58W5UAx2We7CFg78PItE4AX2wyyzOYEueaJ9ZUt6aCv+s6nS0TxUWcuiQE
tkm5gE9mts6KG8ZsHgD4aUfJOb7lfqDl8JRJDq/Y5CYFJEnquzIpzF2yrsq1
qerMAFZN9FsTWshkXWW3gNhKLyaD5G5ZWpPcpvkGN14ZtyLAbjNPpvfJAaKa
Xaczk2Rz2FO2yEx1MEpOk64HCRyoyWCJVZLSAEINCwQCZruDB8nF6etTwFF4
PC8BCwoeNSsBQco852/iFgH35jAMtnObzfFc8Ef3yRP6Zw5Hil/K8/LOyht8
5qm/JYsHTRc6p5fc+dvZEvCQVlVuavhSBt+blUDTsoLeHCXfm1m6scE7sL1Z
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
ld3AUIwaeATbOlGbxCmaiGQ5KYnIqVfqiQnD7oTsxJF4oadf6St7YblYDefj
FvOIHwRxdKSuyyU38inDJQDpa2VEfrE6ypUxzly1FJe5UwUxhpNIxPUpx6qT
cgGlRi0mUKKBXqS5DxWTYXWKMQrAs+QqrmHmSzRgTMQ0y1WcWo+/uIQTmlIC
GVpLN5GFJUhb8qm/Ll2cLJyK1+MtyfBhlVZZCrNwSel6W1L2AFcLxKrvWNa5
aCbBC8NsODniqINJy9XBHHiXB0QjfVxgNtVTduWDJZbkJHJmsJVFXRreo0GG
KckY0ikoxVFM6afBHILAWMMokRpG8d7QKqc2FzFfJZN/TBIgb+na7Cro0o5t
kHAGuGtaScdli2pNejGVQyURE1RLXLGIjq4oqKvLwhElktaM/lz+U2R8kuXw
iDaIFSmcMcW7Y4GIhj4mSWhNJONoRTF1YkFaCfpsY4Somg73Omeiu91SO+Ic
3Va2cTB8XyHTvoeNfXIITNjfsZjkUhLFfSpXtvD1ULMo8Uw9LxIPegPqQNHC
PZ7l60hWc/FKYbF7NkfQ6ytZhKgVcVpl+OFiHtQFELjsdFF3VWzoPrhgoTxg
wokDuqbIeRNVwtwmJ3KRnuCszxjI+NPtS6AKPR23EAWgTDQPVWoIKb9nqJcy
UIIZBIXyzcZommTCcpzHAo0BMYCRJyDhY9uNIToOVum6z4XOa19j/PDFkdZh
9TW5nLDAhDYL3C1BgCRKgAIroePGa5TRJultl5LMa+262KedcXjT4Rty31LJ
wP4zF32OROP/6zVnQq8Ak+IEoMaND8golNKL7/mCqblKsi6pYJx6QMlbBJxv
Lk5/tliKsfFf7c4fO+7mjfP4f+q+r2ML4C3oO66MaxzdiPYJm30Kil9QCGOU
xK+CdZMCdSps+mzvkZhYiqhzn6FATxeA7ZzIG0B3OJEh31xQoOPRWmuUl6/B
8OJiLFGxq5zvKE/vS6KgH/l40f28MCkZCb2XPkgPB/q+psQeTifJk2k6+yjR
CzR6SBFVdkYChurIluPsMJWwXW/OQ+lekFbCu/41JeYozPwLqsTg0s78sVIS
gjoaI54iYXjsX5P6gFxyq8ELM9t0EUdZorbsCOvblhu3NcCPHLXstZgSnBRz
zmHU09RAxm0TaxWTYFviBm2QrcfrTCgHLlx7nxO03DvSwqnBJNSq1HhN2RYB
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

-->

</rfc>

