<?xml version="1.0" encoding="UTF-8"?>

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

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-regext-rdap-ttl-extension-12" number="10037" ipr="trust200902" submissionType="IETF" consensus="true" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" version="3" xml:lang="en" updates="" obsoletes="">

  <front>
    <title abbrev="RDAP TTL Extension">Registration Data Access Protocol (RDAP) Extension for DNS Time-to-Live (TTL) Values</title>
    <seriesInfo name="RFC" value="10037"/>
    <author initials="G." surname="Brown" fullname="Gavin Brown">
      <organization>ICANN</organization>
      <address>
        <postal>
          <street>12025 Waterfront Drive, Suite 300</street>
          <city>Los Angeles</city>
          <code>90094-2536</code>
          <country>United States of America</country>
          <region>CA</region>
        </postal>
        <email>gavin.brown@icann.org</email>
      </address>
    </author>
    <date month="August" year="2026"/>
    <area>OPS</area>
    <workgroup>regext</workgroup>

    <keyword>Registrar</keyword>
    <keyword>Registry</keyword>
    <keyword>Internet resource</keyword>
    <keyword>domain name</keyword>
    <keyword>DNS configuration</keyword>
    <keyword>resource record</keyword>
    <keyword>validity</keyword>

    <abstract>
      <t>
This document specifies an extension to the Registration Data Access Protocol (RDAP), which allows the Time-to-Live (TTL) values for relevant DNS record types to be included in RDAP responses.
</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>
The Registration Data Access Protocol (RDAP) <xref target="STD95"/> provides access to information about Internet resources (domain names, autonomous system numbers, and IP addresses).
While <xref format="none" target="RFC9083">RFC 9083</xref> <xref target="STD95"/> allows RDAP server operators to provide information about the content of the "<tt>NS</tt>", "<tt>DS</tt>", "<tt>A</tt>", and "<tt>AAAA</tt>" RRset(s) (see <xref section="5" sectionFormat="of" target="RFC9499"/>), which are published in the DNS for a given registry object (domain or host object),
it does not provide a mechanism to allow the Time-to-Live (TTL) values (see <xref section="5" sectionFormat="of" target="RFC9499"/>) of those RRsets to be included in responses.
Inclusion of these values in RDAP responses (in addition to nameservers, glue IP addresses, and Delegation Signer (DS) records) allows out-of-band debugging of the DNS configuration of troublesome domain names.
</t>
      <t>
This document describes how TTL information can be included in domain and nameserver objects in RDAP responses. As per <xref section="5.2" sectionFormat="of" target="RFC2181"/>, TTL values are applicable to RRsets rather than individual records.
</t>
    </section>

    <section>
      <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&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
      <t>
This document uses terms defined in Section <xref section="1.1" sectionFormat="bare" target="RFC9083"/> of <xref format="none" target="RFC9083">RFC 9083</xref> <xref target="STD95"/>.
      </t>
    </section>

    <section anchor="rdap-response-specification">
      <name>RDAP Response Specification</name>
      <t>
Servers that support this extension <bcp14>MAY</bcp14> include a "<tt>ttl0_data</tt>" member in any domain (Section <xref section="5.3" sectionFormat="bare" target="RFC9083"/> of <xref format="none" target="RFC9083">RFC 9083</xref> <xref target="STD95"/>) and nameserver (Section <xref section="5.2" sectionFormat="bare" target="RFC9083"/> of <xref format="none" target="RFC9083">RFC 9083</xref> <xref target="STD95"/>) objects included in RDAP responses.
As per Section <xref section="2.1" sectionFormat="bare" target="RFC9083"/> of <xref format="none" target="RFC9083">RFC 9083</xref> <xref target="STD95"/>, clients that do not implement this specification <bcp14>SHOULD</bcp14> ignore the "<tt>ttl0_data</tt>" member.</t>

      <t>
The "<tt>ttl0_data</tt>" member is an object that has the following members:
</t>
      <ul>
        <li>A "<tt>values</tt>" member, which is an object that maps DNS record type mnemonics to TTL values; and</li>
        <li>An <bcp14>OPTIONAL</bcp14> "<tt>remarks</tt>" member, which is an array of remarks (see Section <xref section="4.3" sectionFormat="bare" target="RFC9083"/> of <xref format="none" target="RFC9083">RFC 9083</xref> <xref target="STD95"/>).</li>
      </ul>
      <t>
As specified in <xref section="8" sectionFormat="of" target="RFC2181"/>, a TTL value is "an unsigned number, with a minimum value of 0, and a maximum value of 2147483647. That is, a maximum of 2^31 - 1". TTL values <bcp14>MUST</bcp14> be represented as JSON numbers with no fractional component and no exponent notation.
</t>
      <t>
The TTL values included in "<tt>ttl0_data</tt>" members <bcp14>MUST</bcp14> reflect the TTL values as provisioned in the registry database, not the remaining TTL of DNS records as observed from live DNS queries.
</t>
      <t>
An example domain object with a valid "<tt>ttl0_data</tt>" member is provided below. Readers should refer to <xref format="none" target="RFC9083">RFC 9083</xref> <xref target="STD95"/> for a description of the other objects listed in the example.
</t>

      <sourcecode type="json"><![CDATA[
{
  "objectClassName": "domain",
  "rdapConformance": ["rdap_level_0", "ttl0"],
  "ldhName": "domain.example",
  "ttl0_data": {
    "values": {
      "NS": 3600,
      "DS": 300
    },
    "remarks": [
      {
        "description": [
          "For more information about the .example",
          " registry policy relating to DS record TTL changes,",
          "see https://domain.example"
        ],
        "links": [
          {
            "rel": "related",
            "title": ".Example Registry DNS TTL Policy",
            "href": "https://domain.example"
          }
        ]
      }
    ]
  }
}]]></sourcecode>
      <t>
An example nameserver object with a valid "<tt>ttl0_data</tt>" member is provided below.
</t>
      <sourcecode type="json"><![CDATA[
{
  "objectClassName": "nameserver",
  "rdapConformance": ["rdap_level_0", "ttl0"],
  "ldhName": "ns1.domain.example",
  "ttl0_data": {
    "values": {
      "A": 86400,
      "AAAA": 86400
    },
    "remarks": [
      {
        "description": [
          "The .example registry does not permit TTL ",
          "values for nameservers to be changed."
        ]
      }
    ]
  }
}]]></sourcecode>
      <section anchor="types-and-values">
        <name>DNS Record Types and TTL Values</name>
        <t>
The DNS record type mnemonics that appear as the member names in "<tt>values</tt>" objects <bcp14>MUST</bcp14> be in all capitals and <bcp14>MUST</bcp14> be registered with IANA in <xref target="IANA-RRTYPES"/>.
TTL values <bcp14>MUST</bcp14> be unsigned integers in the range 0-2147483647 as per <xref section="8" sectionFormat="of" target="RFC2181"/>.
</t>
      </section>

      <section anchor="rdap-conformance">
        <name>RDAP Conformance</name>
        <t>
Servers returning responses containing TTL values <bcp14>MUST</bcp14> include the string "<tt>ttl0</tt>" in the "<tt>rdapConformance</tt>" array.
</t>
      </section>

    </section>

    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <section anchor="rdap-servers">
        <name>RDAP Servers</name>
        <t>
This specification is complementary to the Extensible Provisioning Protocol (EPP) <xref target="RFC5730"/> and the EPP Mapping for DNS Time-to-Live (TTL) Values <xref target="RFC9803"/>,
but registry operators do not need to implement that extension in their EPP servers in order to implement this RDAP extension.
</t>
      </section>

      <section anchor="rdap-clients">
        <name>RDAP Clients</name>
        <t>
Many RDAP clients make use of frameworks, which automatically "hydrate" objects using JSON data received in RDAP responses.
As a result, RDAP clients that use these frameworks should explicitly carve out the "<tt>values</tt>" member of "<tt>ttl0_data</tt>" members.
</t>
        <t>
Since the list of record types appearing in "<tt>ttl0_data</tt>" members may change with time, clients that implement this extension <bcp14>MUST</bcp14> accept
responses containing values for all valid DNS record types and <bcp14>SHOULD</bcp14> periodically update the list of valid DNS record types to align with <xref target="IANA-RRTYPES"/>, to avoid discarding a recently added record type.
</t>
      </section>

    </section>

    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>
IANA has registered the following value in the "RDAP Extensions" registry <xref target="IANA-RDAP-EXTENSIONS"/>:</t>

<dl spacing="compact" newline="false">
  <dt>Extension Identifier:</dt><dd><tt>ttl0</tt></dd>
  <dt>Registry Operator:</dt><dd>Any</dd>
  <dt>Specification:</dt><dd>RFC 10037</dd>
  <dt>Contact:</dt><dd>IETF <eref target="mailto:iesg@ietf.org" brackets="angle"/></dd>
  <dt>Intended Usage:</dt><dd>This extension describes how DNS TTL values can be included in RDAP responses.</dd>
</dl>
    </section>

    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>
Security services for the extension specified in this document are described in <xref format="none" target="RFC7481">RFC 7481</xref> <xref target="STD95"/>.
</t>
      <t>
This document only concerns itself with the representation of configured TTL values for domain and host objects.
The security implications of how those TTL values are determined, assigned, or modified within a registry system are out of scope. Readers are referred to <xref section="6" sectionFormat="of" target="RFC9803"/> for further discussion.
</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2181.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9499.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml9/reference.STD.95.xml"/>
        <reference anchor="IANA-RRTYPES" target="https://www.iana.org/assignments/dns-parameters">
          <front>
            <title>Resource Record (RR) TYPEs</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA-RDAP-EXTENSIONS" target="https://www.iana.org/assignments/rdap-extensions">
          <front>
            <title>RDAP Extensions</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5730.xml"/>
	<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9803.xml"/>
      </references>
    </references>

    <section anchor="thx" numbered="false">
      <name>Acknowledgements</name>
      <t>
The author wishes to thank the following for their constructive feedback and advice during the development of this document: <contact fullname="Andy Newton"/>, <contact fullname="Pawel Kowalik"/>, <contact fullname="Maarten Wullink"/>, <contact fullname="Mohamed Boucadair"/>, <contact fullname="Vijay K. Gurbani"/>, <contact fullname="Di Ma"/>, <contact fullname="Nabeel Cocker"/>, <contact fullname="Ketan Talaulikar"/>, <contact fullname="Ralf Weber"/>, <contact fullname="Mike Bishop"/>, <contact fullname="Mahesh Jethanandani"/>, and <contact fullname="Éric Vyncke"/>.</t>
    </section>
  </back>
</rfc>
