<?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.32 (Ruby 3.3.0) -->


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

]>


<rfc ipr="trust200902" docName="draft-gondwana-jmap-object-history-00" category="std" consensus="true" submissionType="IETF" updates="8620" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="JMAP Object History">JMAP Object History</title>

    <author initials="B." surname="Gondwana" fullname="Bron Gondwana">
      <organization>Fastmail</organization>
      <address>
        <email>brong@fastmailteam.com</email>
      </address>
    </author>

    <date year="2026" month="March" day="18"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 28?>

<t>The JMAP base protocol (RFC8620) provides methods for synchronizing
the current state of data objects between client and server.  This
extension adds the ability to retrieve historical versions of objects,
including objects that have been destroyed, by extending the standard
Foo/get method.</t>



    </abstract>



  </front>

  <middle>


<?line 36?>

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

<t>JMAP (<xref target="JMAP-CORE"/> — JSON Meta Application Protocol) provides a
standard set of methods for each data type: Foo/get, Foo/changes,
Foo/set, Foo/query, and Foo/queryChanges.  These methods operate
on the current state of objects.  The Foo/changes method tells a
client which objects have changed, but does not provide the
previous values.</t>

<t>In many applications it is useful to access historical versions
of objects.  For example, a user may want to see previous versions
of a contact record (<xref target="JMAP-CONTACTS"/>), recover a deleted
email (<xref target="JMAP-MAIL"/>), or audit changes to a shared mailbox.</t>

<t>This extension adds history support to the standard Foo/get
method.  When the <spanx style="verb">urn:ietf:params:jmap:object-history</spanx> capability
is included in the request's <spanx style="verb">using</spanx> array, Foo/get gains
additional parameters that allow the client to request previous
versions of objects, including objects that have been destroyed.</t>

<section anchor="conventions-used-in-this-document"><name>Conventions Used in This Document</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>
<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 target="JMAP-CORE"/>, Section 2.</t>

<t>This document defines an additional capability URI.</t>

<section anchor="urnietfparamsjmapobject-history"><name>urn:ietf:params:jmap:object-history</name>

<t>The capability <spanx style="verb">urn:ietf:params:jmap:object-history</spanx> being present
in the "accountCapabilities" property of an account represents
support for retrieving historical object versions in that account.
Servers that include the capability in one or more
"accountCapabilities" properties <bcp14>MUST</bcp14> also include the property in
the "capabilities" property.</t>

<t>The value of this property in the JMAP session "capabilities"
property <bcp14>MUST</bcp14> be 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 for that account:</t>

<t><list style="symbols">
  <t>maxHistoryDuration: "UnsignedInt|null"  <vspace blankLines='1'/>
The maximum number of seconds after replacement that the
  server retains old versions, or null if the server does not
  impose a time-based limit.  A version whose <spanx style="verb">replaced</spanx>
  timestamp is more than this many seconds ago may have been
  discarded.</t>
</list></t>

</section>
</section>
<section anchor="extensions-to-fooget"><name>Extensions to Foo/get</name>

<t>When this capability is included in the request's <spanx style="verb">using</spanx> array,
the standard Foo/get method (<xref target="JMAP-CORE"/>, Section 5.1) accepts
the following additional request arguments:</t>

<t><list style="symbols">
  <t>includeReplaced: "Boolean" (default: false)  <vspace blankLines='1'/>
If true, the server returns previous versions of the
  requested objects in addition to the current version.
  Each previous version appears as a separate entry in the
  <spanx style="verb">list</spanx> array, with the same <spanx style="verb">id</spanx> as the current version.
  Every entry includes an <spanx style="verb">objectHistory</spanx> property (see
  below).  Entries with the same <spanx style="verb">id</spanx> <bcp14>MUST</bcp14> be ordered by
  <spanx style="verb">objectHistory.version</spanx> (ascending).  Entries for
  different objects <bcp14>MAY</bcp14> be interleaved.</t>
  <t>includeDestroyed: "Boolean" (default: false)  <vspace blankLines='1'/>
If true, the server also returns objects that have been
  destroyed.  If <spanx style="verb">includeReplaced</spanx> is false, only the final
  version before destruction is returned.  If <spanx style="verb">includeReplaced</spanx>
  is true, all retained historical versions of destroyed
  objects are returned.  For destroyed objects, every entry
  has a non-null <spanx style="verb">objectHistory.replaced</spanx> value, since every
  version has been superseded (the final version was replaced
  by destruction).</t>
  <t>historyAfter: "UTCDate|null" (default: null)  <vspace blankLines='1'/>
If supplied, only versions with an <spanx style="verb">objectHistory.replaced</spanx>
  value strictly after this date are returned, plus the
  current (live) version which has a null <spanx style="verb">replaced</spanx> value.
  If null, no time-based filter is applied.</t>
  <t>historyLimit: "UnsignedInt|null" (default: null)  <vspace blankLines='1'/>
If supplied, the maximum total number of entries to return
  in the <spanx style="verb">list</spanx> array.  The server <bcp14>MUST</bcp14> return the most
  recent entries (those with the highest version numbers),
  not the oldest.  If the limit is reached for any
  requested id, the response includes a <spanx style="verb">hasMoreHistory</spanx>
  property set to true.  A client that needs to know which
  specific objects have more history available must fetch
  each id individually.</t>
</list></t>

<section anchor="the-objecthistory-property"><name>The objectHistory property</name>

<t>When <spanx style="verb">includeReplaced</spanx> or <spanx style="verb">includeDestroyed</spanx> is true, each object
in the <spanx style="verb">list</spanx> array includes an additional property:</t>

<t><list style="symbols">
  <t>objectHistory: "ObjectHistoryInfo"  <vspace blankLines='1'/>
An ObjectHistoryInfo object with the following properties:  <list style="symbols">
      <t>version: "UnsignedInt"
A per-object monotonically increasing number that
provides ordering among the versions of a single object
within a response.  Version numbers <bcp14>MAY</bcp14> have gaps (e.g.,
a server may use internal sequence numbers such as modseq
values).  The current (live) version of an object always
has the highest version number.  Servers <bcp14>SHOULD</bcp14> return
consistent version numbers across requests, but clients
<bcp14>MUST NOT</bcp14> rely on this — version numbers exist primarily
to provide ordering within a single response.</t>
      <t>replaced: "UTCDate|null"
The date and time at which this version was superseded,
either by a subsequent update or by destruction.  If null,
this is the current live version of the object.  For
destroyed objects, every version has a non-null <spanx style="verb">replaced</spanx>
value — the final version's <spanx style="verb">replaced</spanx> is the time of
destruction.</t>
    </list></t>
</list></t>

<t>When <spanx style="verb">includeReplaced</spanx> and <spanx style="verb">includeDestroyed</spanx> are both false
(the default), the <spanx style="verb">objectHistory</spanx> property is not included in
the response, and the behaviour is identical to standard Foo/get.</t>

<t>The server is not required to create a new version for every
individual change to an object.  For example, rapid successive
updates may be collapsed into a single version.  The server <bcp14>MAY</bcp14>
also prune old versions in any order, so there can be gaps in the
version history available to the client.  Clients <bcp14>MUST NOT</bcp14> assume
that the version history is complete or contiguous.</t>

<t>If the server does not retain history for a particular data type,
it <bcp14>MUST</bcp14> still return the current version with an <spanx style="verb">objectHistory</spanx>
property when requested.  In this case, the server <bcp14>MAY</bcp14> return a
<spanx style="verb">version</spanx> of 1 for every object and a <spanx style="verb">replaced</spanx> of null, and
ignore the <spanx style="verb">includeReplaced</spanx> flag (since there are no previous
versions to return).  The <spanx style="verb">includeDestroyed</spanx> flag may still be
honoured if the server tracks destroyed object ids even without
full history.</t>

</section>
<section anchor="additional-response-properties"><name>Additional response properties</name>

<t>When <spanx style="verb">includeReplaced</spanx> or <spanx style="verb">includeDestroyed</spanx> is true, the
response includes:</t>

<t><list style="symbols">
  <t>hasMoreHistory: "Boolean"  <vspace blankLines='1'/>
If true, there are older entries available for at least one
  requested id.  The client can make a wider request (e.g.,
  a larger <spanx style="verb">historyLimit</spanx> or individual id requests) to
  retrieve more versions.  If false, the server has returned
  all retained history for the requested ids.  The server <bcp14>MAY</bcp14>
  return false even if more history exists (e.g., if it
  cannot efficiently determine whether older versions remain).
  If the server returns true, the client <bcp14>MUST NOT</bcp14> assume the
  history will still be available in a subsequent request, as
  the server may purge history at any time.</t>
</list></t>

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

<section anchor="contact-history"><name>Contact history</name>

<t>Requesting the history of a contact, including all versions:</t>

<figure><sourcecode type="json"><![CDATA[
[["ContactCard/get", {
  "accountId": "abc",
  "ids": ["contact1"],
  "properties": ["name", "emails"],
  "includeReplaced": true,
  "historyLimit": 10
}, "0"]]
]]></sourcecode></figure>

<t>The response includes three versions: the original creation,
a name update, and the current version with an additional email
address:</t>

<figure><sourcecode type="json"><![CDATA[
[["ContactCard/get", {
  "accountId": "abc",
  "state": "abc123",
  "list": [
    {
      "id": "contact1",
      "name": {"full": "Robert Smith"},
      "emails": {
        "e1": {"address": "bob@example.com"}
      },
      "objectHistory": {
        "version": 1,
        "replaced": "2026-02-20T14:15:00Z"
      }
    },
    {
      "id": "contact1",
      "name": {"full": "Bob Smith"},
      "emails": {
        "e1": {"address": "bob@example.com"}
      },
      "objectHistory": {
        "version": 2,
        "replaced": "2026-03-01T09:00:00Z"
      }
    },
    {
      "id": "contact1",
      "name": {"full": "Bob Smith"},
      "emails": {
        "e1": {"address": "bob@example.com"},
        "e2": {"address": "bob@personal.example"}
      },
      "objectHistory": {
        "version": 3,
        "replaced": null
      }
    }
  ],
  "notFound": [],
  "hasMoreHistory": false
}, "0"]]
]]></sourcecode></figure>

</section>
<section anchor="recovering-destroyed-emails"><name>Recovering destroyed emails</name>

<t>A client can use Email/changes to discover which emails have been
destroyed, then use a backreference to fetch their final state.
This is useful for displaying a "recently deleted" view:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Email/changes", {
    "accountId": "abc",
    "sinceState": "state42"
  }, "0"],
  ["Email/get", {
    "accountId": "abc",
    "#ids": {
      "resultOf": "0",
      "name": "Email/changes",
      "path": "/destroyed"
    },
    "properties": ["subject", "from", "receivedAt"],
    "includeDestroyed": true
  }, "1"]
]
]]></sourcecode></figure>

<t>The Email/get response returns the final state of each
destroyed email.  The <spanx style="verb">objectHistory.replaced</spanx> value is the
time of destruction:</t>

<figure><sourcecode type="json"><![CDATA[
[["Email/get", {
  "accountId": "abc",
  "state": "state43",
  "list": [
    {
      "id": "email42",
      "subject": "Meeting notes",
      "from": [{"name": "Alice",
        "email": "alice@example.com"}],
      "receivedAt": "2026-03-10T09:00:00Z",
      "objectHistory": {
        "version": 1,
        "replaced": "2026-03-15T16:30:00Z"
      }
    },
    {
      "id": "email57",
      "subject": "Project update",
      "from": [{"name": "Bob",
        "email": "bob@example.com"}],
      "receivedAt": "2026-03-12T14:00:00Z",
      "objectHistory": {
        "version": 1,
        "replaced": "2026-03-15T16:31:00Z"
      }
    }
  ],
  "notFound": [],
  "hasMoreHistory": false
}, "1"]]
]]></sourcecode></figure>

<t>Since <spanx style="verb">includeReplaced</spanx> was not set, only the final version of
each destroyed email is returned.  The non-null <spanx style="verb">replaced</spanx>
value indicates when each email was destroyed.</t>

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

<section anchor="jmap-capability-registration-for-urnietfparamsjmapobject-history"><name>JMAP Capability Registration for urn:ietf:params:jmap:object-history</name>

<t>IANA is requested to register the "Object History" Capability
as follows:</t>

<t>Capability Name: urn:ietf:params:jmap:object-history</t>

<t>Intended use: common</t>

<t>Change Controller: IETF</t>

<t>Specification document: this document</t>

<t>Security and privacy considerations: this document,
Security Considerations</t>

</section>
<section anchor="update-to-the-jmap-data-types-registry"><name>Update to the JMAP Data Types Registry</name>

<t>This document adds a "Supports History" column to the "JMAP Data
Types" registry defined in <xref target="JMAP-CORE"/>, Section 9.4.  The value
is "Yes" or "No", indicating whether the data type supports the
history extensions defined in this document.</t>

<t>The initial values for existing registrations are:</t>

<texttable>
      <ttcol align='left'>Type Name</ttcol>
      <ttcol align='left'>Supports History</ttcol>
      <c>Core/Echo</c>
      <c>No</c>
      <c>Mailbox</c>
      <c>Yes</c>
      <c>Thread</c>
      <c>No</c>
      <c>Email</c>
      <c>Yes</c>
      <c>SearchSnippet</c>
      <c>No</c>
      <c>Identity</c>
      <c>Yes</c>
      <c>EmailSubmission</c>
      <c>No</c>
      <c>VacationResponse</c>
      <c>Yes</c>
      <c>ContactCard</c>
      <c>Yes</c>
      <c>AddressBook</c>
      <c>Yes</c>
      <c>Principal</c>
      <c>No</c>
      <c>Quota</c>
      <c>No</c>
      <c>FileNode</c>
      <c>Yes</c>
</texttable>

<t>The default value for this column is "No".  New registrations
that do not explicitly include a value are assumed not to
support history.</t>

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

<t>All security considerations from <xref target="JMAP-CORE"/> apply to this
document.</t>

<section anchor="storage-and-resource-consumption"><name>Storage and Resource Consumption</name>

<t>Retaining historical versions of objects can consume significant
server storage.  Servers <bcp14>SHOULD</bcp14> impose reasonable limits on
history retention, either by duration (advertised via
<spanx style="verb">maxHistoryDuration</spanx>) or by total storage.  Servers <bcp14>MAY</bcp14>
silently discard history entries when storage limits are
reached.</t>

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

<t>Historical versions of an object <bcp14>MUST</bcp14> respect the same access
controls as the current version.  A user who does not have
permission to read an object <bcp14>MUST NOT</bcp14> be able to read its
history.  If an object's access permissions have changed over
time, the server <bcp14>MUST</bcp14> only return versions for which the
requesting user would have had read access.</t>

</section>
<section anchor="information-disclosure"><name>Information Disclosure</name>

<t>Object history may reveal information that the user or an
administrator intended to remove.  For example, a contact
record that was updated to remove a phone number will still
have that phone number visible in its history.  Servers
<bcp14>SHOULD</bcp14> provide administrators with the ability to purge
history for specific objects when required for privacy or
compliance reasons.</t>

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

<t>EDITOR: please remove this section before publication.</t>

<t>The source of this document exists on github at: https://github.com/brong/draft-gondwana-jmap-object-history/</t>

<t><strong>draft-gondwana-jmap-object-history-00</strong></t>

<t><list style="symbols">
  <t>initial proposal</t>
</list></t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>TODO</t>

<t>{backmatter}</t>

</section>


  </middle>

  <back>


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

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



<reference anchor="JMAP-CORE">
  <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="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="JMAP-MAIL">
  <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="JMAP-CONTACTS">
  <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>




    </references>

</references>



  </back>

<!-- ##markdown-source:
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

-->

</rfc>

