<?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-ietf-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="September" day="15"/>

    
    
    <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-ietf-jmap-object-history-00</strong></t>

<t><list style="symbols">
  <t>Uploaded with working-group adopted name.</t>
</list></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:
H4sIAAAAAAAAA81b63IbOXb+j6dAOD/WcpGyqPHMjpmt3aUlea0tS/JK8qYm
jisEu0ES42aj0+iWzNieykPkAfIseZQ8Sc4FQKNJyuNMkkr0wya7cT2X73zn
AByNRqIxTaEn8s8X09fyav6Tzhr50rjG1huh5vNa3+1/l9usVGvomNdq0YyM
bhajn9aqGllqN1pxu9HRkXDtfG2cM7a83VTQ4/zs9oXIVKOX0GAiXZOLtsrh
u5vIH74/PhJ27myh8bswVT2RTd265vjo6NnRsXivN/e2zmGUstF1qZvRKS5A
uEaV+T+qwpYww0Y7UZmJfNvYbCidrZtaLxx82qzxwzshVNusbD0RciQk/JkS
5n5+KP9ky/xelYoe8v6e17bsP7f1ciJfKNeslSnoicZPEzmHpss/LvybRqv1
YWbXQpS2XqvG3OkJtUZxjk6urs8m8vrFCe1YmHKxp9HF9PxVaDRO+17eTk9u
b+jVs+/H0H80Gkk1d02tskaI25Vmpc2V07KqLcjBFvKRn+4AH92ZXDu51iCH
3EmYHaRTZivYgvlnUy5FA2NkbV3rsgEVgXakXUjQkpKsYSfnurnXupRZYbAR
yF86Xd/p+lDKW9C/0B8aXaLepcphDhxRzU1hmo1srKx1Uxt9pyWbislUIaEz
tnc4l59mCLLJijaHNcWZm5Vq5EpB3zkuADbS1Haj86GcbyTNSs1xQrILVefi
hbVPlrrxOz5kka1NnhdaiG/QnGqbt1kD0wtBwnv08WNU1efP8j/+5V/ln2+u
LuWFBiFMq6qAJWNz+doLOJGrEmFikEmD20klrVW2Ylk25BF+bUP6kK1UudSw
b/ziwtN/anW9GZKQ49cTbkni1qDoMIWtdA0KE7C0vVr0YuR+6Zx+BNnoosA9
eM3erwysNwif5M4dUOBtI3MLXUvbhO3jrKIC6DC2dfJOFS0sUojzUq5VuZGq
E52TppHGydbpRVugVags087tswnRW/kLFOMHta4KDVLBAWoYfSPBSxscx2k0
/LCEZAglM1s24CZggBkgSaJm9qrPnw+G9A56QetcIxTlgnw8NkbPpIawDAXG
2cggQtyDdCtV61xil7n9cIgeCbvc8gcPkdK1VQUQhT1Tiw1WIbzFSvl3K80a
nbV1OUHInVSqVms3QeSd9JF3JjNVeXcTMDl7ESzK8Bi1BhtyzW8cjObAW2ZS
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

-->

</rfc>

