<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-ietf-regext-rdap-extensions-11" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" updates="7480, 9082, 9083" indexInclude="true">

<front>
<title abbrev="rdap-extensions">RDAP Extensions</title><seriesInfo value="draft-ietf-regext-rdap-extensions-11" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="A." surname="Newton" fullname="Andy Newton"><organization>ICANN</organization><address><postal><street></street>
</postal><email>andy@hxr.us</email>
</address></author><author initials="J." surname="Singh" fullname="Jasdip Singh"><organization>ARIN</organization><address><postal><street></street>
</postal><email>jasdips@arin.net</email>
</address></author><author initials="T." surname="Harrison" fullname="Tom Harrison"><organization>APNIC</organization><address><postal><street></street>
</postal><email>tomh@apnic.net</email>
</address></author><date/>
<area>Applications and Real-Time Area (ART)</area>
<workgroup>Registration Protocols Extensions (regext)</workgroup>

<abstract>
<t>This document describes and clarifies the usage of extensions in RDAP.</t>
</abstract>

</front>

<middle>

<section anchor="background"><name>Background</name>
<t>The Registration Data Access Protocol (RDAP) defines a uniform protocol
for accessing data from Internet operations registries, specifically
Domain Name Registries (DNRs), Regional Internet Registries
(RIRs), and other registries in the Internet Number Registry System (INRS).
RDAP queries are defined in <xref target="RFC9082"></xref> and RDAP responses are defined
in <xref target="RFC9083"></xref>.</t>
<t>RDAP contains a means to define extensions for queries not found in
<xref target="RFC9082"></xref> and responses not found in <xref target="RFC9083"></xref>. RDAP extensions
are also described in <xref target="RFC7480"></xref>.  This document describes the
requirements for RDAP extension definition and use, clarifying
ambiguities and defining additional semantics and options that were
previously implicit or under-specified, and places some constraints
on the definition of RDAP extensions to prevent collisions with
various extension mechanisms.</t>
<t>As deployed, RDAP is an ecosystem of servers operated by separate
authorities of information, where information is interlinked from
one authority to another. Bootstrap servers issue HTTP redirects to
authoritative TLD and RIR servers, and those servers may directly refer
to information held by domain registrars or other Internet Number
registries. Each redirect and referral must be correctly interpreted
and followed by a client. Therefore, RDAP extensions must be constructed with regard
to the whole ecosystem, and be specified in such a manner as to
accommodate these interconnections and the various paths and mechanisms
used by clients to navigate them.</t>

<section anchor="summary_of_updates"><name>Summary of Updates</name>
<t>This document updates <xref target="RFC7480"></xref>, <xref target="RFC9082"></xref>, and <xref target="RFC9083"></xref> for the
purposes of constraining how extensions are defined. This document does
not update any core RDAP requests or responses nor does it update or obsolete
any existing RDAP extensions. The updates in this document should require no changes
to either client or server implementations.</t>
<t>This document describes the following methods for extending RDAP by registered extensions:</t>

<ol spacing="compact">
<li>JSON Names - The most common extension point for RDAP is the definition of new JSON Names. Guidance for JSON Names is provided in this document with regard to <xref target="RFC7480"></xref> and <xref target="RFC9083"></xref>.</li>
<li>URL Paths - New lookups and searches are defined using URL paths. This document clarifies the practice as described in <xref target="RFC9082"></xref>.</li>
<li>Query Strings and Parameters - Many queries use URL query strings and parameters to scope and/or enhance RDAP results. This document clarifies the practice as described in <xref target="RFC9082"></xref>.</li>
<li>HTTP Headers - Some extensions may use HTTP headers or header parameters not explicitly enumerated by <xref target="RFC7480"></xref>.</li>
<li>HTTP Status Codes - Some extensions may use HTTP status codes not explicitly enumerated by <xref target="RFC7480"></xref>.</li>
<li>Media type parameters - Some extensions may define additional media type parameters for the &quot;application/rdap+json&quot; media type.</li>
<li>Object Classes - Extensions may define new types of objects to be queried. This document clarifies this method as described in <xref target="RFC9082"></xref> and <xref target="RFC9083"></xref>.</li>
</ol>
<t>Additionally, this document updates the IANA registry practices for RDAP. See <xref target="iana_considerations"></xref>.</t>
</section>

<section anchor="document-terms"><name>Document Terms</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;,
&quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;,
&quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when, and only when, they
appear in all capitals, as shown here.</t>
</section>
</section>

<section anchor="extension_identifiers"><name>Extension Identifiers</name>

<section anchor="purpose"><name>Purpose</name>
<t><xref target="RFC7480" sectionFormat="of" section="6"></xref> describes the identifier used to signify RDAP
extensions and the IANA registry (<xref target="rdap-extensions"></xref>) into which RDAP extensions are to be
registered.</t>
<t>When in use in RDAP, extension identifiers are prepended to URL path
segments, URL query parameters, and JSON object member names.
They are also included in the &quot;rdapConformance&quot; array member of each
response that relies on the
extension, so that clients can determine the extensions being used by
the server for that response.  The &quot;/help&quot; query returns a response with an
&quot;rdapConformance&quot; member containing the identifiers for all extensions
used by the server.</t>
<t>The main purpose of the extension identifier is to act as a namespace,
preventing collisions between elements from different extensions.
Additionally, implementers and operators can use the extension
identifiers to find extension definitions via <xref target="rdap-extensions"></xref>.</t>

<section anchor="profiles"><name>Profile Extensions</name>
<t>While the RDAP extension mechanism was created to extend RDAP queries
and/or responses, extensions can also be used to signal server policy
(for example, specifying the conditions of use for existing response
structures). Extensions that are primarily about signaling server
policy are called &quot;profiles&quot;. Profile extensions are often used
by a class of RDAP server operators, such as the <xref target="icann-profile"></xref> used
by gTLD registries and registrars and the <xref target="nro-profile"></xref> used by RIRs.</t>
<t>Profile extensions may do the following:</t>

<ul spacing="compact">
<li>Specify some specific extensions (and versions thereof) as required.</li>
<li>Specify some specific optional queries, object classes, or JSON structures as required.</li>
<li>Limit or restrict the values of specific JSON structures.</li>
</ul>
<t>Some profile extensions exist to denote the usage of values placed into an
IANA registry, such as the IANA RDAP registries, or the usage of
extensions for specifications used in RDAP responses, such as extended
vCard/jCard properties.</t>
<t>For example, an extension may be used to signal desired processing of
a &quot;rel&quot; attribute in a &quot;links&quot; array, where the &quot;rel&quot; value is
registered in the <xref target="link-relations"></xref>:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "lunarNIC"
  ],
  "objectClassName": "domain",
  "ldhName": "example.com",
  "links": [
    {
      "value": "https://example.com/domain/example.com",
      "href": "https://example.com/sideways_href",
      "rel": "sideways",
      "type": "application/rdap+json"
    }
  ]
}
]]></artwork>
<t>When defining the usage of link relations, extensions MUST specify
the media types expected to be used with those link relations.</t>
<t>Profile extensions may also
leverage the appearance of their identifier in the &quot;rdapConformance&quot;
array (i.e., clients are signaled that a profile is in use).
Profile extensions that mandate the implementation of another
extension MUST require that the implementer include the extension
identifier for that other extension in the &quot;rdapConformance&quot; array.</t>
<t><xref target="RFC7480"></xref> mandates the implementation of HTTPS but does not mandate
its use. Some profile extensions, especially those used by classes of
server operators, specify the required use of HTTPS and disallow the
use of unencrypted HTTP. Similarly, some profile extensions specify
the availability of service over IPv6.</t>
<t>As described above, these characteristics are not exclusive to profile
extensions and may be found in extensions defining new queries, JSON, and
other RDAP extension points (see <xref target="summary_of_updates"></xref>).</t>
</section>

<section anchor="multiple-identifiers-in-single-extension"><name>Multiple Identifiers in Single Extension</name>
<t>Extension specifications MAY define more than one extension identifier.
The servers MUST list all extension identifiers used to generate a response
in the &quot;rdapConformance&quot; array. The server MUST list all supported
extension identifiers in the &quot;rdapConformance&quot; array of a response to a &quot;/help&quot; request.</t>
</section>
</section>

<section anchor="syntax"><name>Syntax</name>
<t>In brief, RDAP extension identifiers start with an alphabetic
character and may contain alphanumeric characters and &quot;_&quot; (underscore)
characters. This formulation was explicitly chosen to allow
compatibility with variable names in programming languages and
transliteration with XML. See <xref target="RFC7480" sectionFormat="bare" section="Section 6"></xref> and <xref target="RFC9083" sectionFormat="bare" section="Section 2.1"></xref>.</t>
<t>RDAP extension identifiers have no explicit structure, and are opaque
insofar as no inner-meaning can be &quot;seen&quot; in them.</t>
<t>RDAP extensions MUST NOT define an extension identifier that
may collide with an existing extension identifier. RDAP extensions
MUST NOT define an extension identifier, which when appended with
an underscore character would be a substring starting from the first
character of an existing extension identifier. Similarly RDAP extensions
MUST NOT define an extension identifier starting with a substring being
an existing extension identifier appended with an underscore.
For example, if there were a pre-existing
identifier of &quot;foo_bar&quot;, another extension could not define the
identifier &quot;foo&quot;. Likewise, if there were a pre-existing identifier of
&quot;foo_bar&quot;, another extension could not define the identifier
&quot;foo_bar_buzz&quot;.  However, an extension could define &quot;foo&quot; if there
were a pre-existing definition of &quot;foobar&quot;, and vice versa.</t>
<t>Extensions containing the word &quot;ietf&quot; in any mixed capitalization
MUST have IETF consensus.</t>
<t>For this reason, this document updates the guidance of
<xref target="RFC7480"></xref> regarding underscore characters: RDAP extensions MUST NOT use an underscore character
in their RDAP extension identifier. Implementers should be aware that many
existing extension identifiers do contain underscore characters.</t>
<t><xref target="RFC7480"></xref> does not explicitly state that extension identifiers are
case-sensitive.  This document clarifies the formulation in <xref target="RFC7480"></xref>
to explicitly note that extension identifiers are case-sensitive, and
extension identifiers MUST NOT be registered where a new identifier is
a mixed-case version of an existing identifier (see <xref target="rdap_extensions_registry"></xref>). For example, given
&quot;lunarNIC&quot; is already registered as an identifier, then a new registration
with &quot;lunarNic&quot; (note the lowercase &quot;ic&quot; in &quot;Nic&quot;) would not be
allowed.</t>
</section>

<section anchor="bare_extensions"><name>Bare Extension Identifiers</name>
<t><xref target="RFC9083" sectionFormat="of" section="2.1"></xref> states the following when using the names of JSON
members:</t>
<blockquote><t>Clients of these JSON responses SHOULD ignore unrecognized JSON members in responses.
Servers can insert members into the JSON responses, which are not specified in this
document, but that does not constitute an error in the response. Servers that insert
such unspecified members into JSON responses SHOULD have member names prefixed with
a short identifier followed by an underscore followed by a meaningful name. It has
been observed that these short identifiers aid software implementers with identifying
the specification of the JSON member, and failure to use one could cause an implementer
to assume the server is erroneously using a name from this specification. This allowance
does not apply to jCard <xref target="RFC7095"></xref> objects. The full JSON name (the prefix plus the
underscore plus the meaningful name) SHOULD adhere to the character and name limitations
of the prefix registry described in <xref target="RFC7480"></xref>. Failure to use these limitations
could result in slower adoption as these limitations have been observed to aid some client
programming models.</t>
</blockquote><t>Despite this, some RDAP extensions define only one JSON value and do not prefix it
with their RDAP extension identifier, instead using the extension
identifier as the JSON name for that JSON value. That is, the
extension identifier is used &quot;bare&quot; and not appended with an
underscore character and subsequent names.</t>
<t>Consider the example in <xref target="child_json_values"></xref>. Using the bare extension
identifier pattern, that example could be written as:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "lunarNIC"
  ],
  "objectClassName": "domain",
  "ldhName": "example.com",
  "remarks":
  [
    {
      "description":
      [
        "She sells sea shells down by the sea shore.",
        "Originally written by Terry Sullivan."
      ]
    }
  ],
  "lunarNIC":
  {
    "firstInitial": "R",
    "lastName": "Heinlein"
  }
}
]]></artwork>
<t>While <xref target="RFC9083"></xref> is specific to JSON, the use of a bare extension identifier also applies to other identifiers of RDAP extensions, such
as query parameters and object class names. Identifiers of an RDAP extension which need a prefix to avoid name collision with identifiers
of other RDAP extensions or RDAP as specified in <xref target="RFC7480"></xref>, <xref target="RFC9082"></xref>, and <xref target="RFC9083"></xref> are referred to as namespaced identifiers.</t>
<t>Usage of a bare extension identifier conflicts with the guidance in
<xref target="RFC9083" sectionFormat="of" section="2.1"></xref>. Previously, extension authors have used this
pattern when only one query path, JSON name, and/or object class is being
defined by the extension.</t>
<t>Implementation experience has shown that an extension using a bare
identifier can be interoperable, though more difficult to process and
parse in some instances.  Furthermore, prefixed identifiers are
clearly syntactically distinguishable from identifiers defined by the
core RDAP specifications, which provides more flexibility to
implementers and helps with debugging and similar.  Due to these
considerations, the bare extension identifier pattern MUST NOT be used
for any namespaced identifier.</t>
</section>

<section anchor="usage_in_requests"><name>Usage in Requests</name>

<section anchor="usage_in_paths"><name>Usage in Paths</name>
<t><xref target="RFC9082" sectionFormat="of" section="5"></xref> describes the use of extension identifiers in
formulating URLs for RDAP queries. The extension identifiers are
to be prepended to the path segments they use. For example, if an
extension uses the identifier &quot;foobar&quot;, then the path segments used in
that extension are prepended with &quot;foobar_&quot;.  If the &quot;foobar&quot;
extension defines paths &quot;fizz&quot; and &quot;fazz&quot;, the URLs for this extension
would be like so:</t>

<artwork><![CDATA[https://base.example/foobar_fizz
https://base.example/foobar_fazz
]]></artwork>
<t>While <xref target="RFC9082"></xref> describes the extension identifier as a prepended
string to a path segment, it does not describe the usage of the
extension identifier as a path segment.</t>
<t>Note that &quot;bare&quot; identifiers are now explicitly forbidden (see <xref target="bare_extensions"></xref>).</t>
<t>Extensions defining new URL paths MUST explicitly define the expected
responses for each new URL path. New URL paths may return existing
object classes or search results as defined in <xref target="RFC9083"></xref>, object
classes or search results defined by the extension (see
<xref target="object_classes_in_extensions"></xref> and <xref target="search_results_in_extensions"></xref>
below), or object classes or search results from other extensions.</t>
<t>Additionally, RDAP extensions MUST NOT append a path segment to an
existing path segment as this practice increases the likelihood of collisions
with the queries defined by an extension (e.g., extension &quot;foo&quot; defining
&quot;<eref target="https://base.example/domain/foo&quot;">https://base.example/domain/foo"</eref> or &quot;<eref target="https://base.example/fizz_fazz/foo&quot;)">https://base.example/fizz_fazz/foo")</eref>.</t>
</section>

<section anchor="usage_in_query_parameters"><name>Usage in Query Parameters</name>
<t>Although <xref target="RFC9082"></xref> describes the use of URL query strings, it does
not define their use with extensions. <xref target="RFC7480"></xref> instructs servers to
ignore unknown query parameters, where a query parameter is defined as
an explicitly named value in a query string. Therefore, the use of query
parameters, whether prefixed with an extension identifier or not, is
not supported by <xref target="RFC9082"></xref> and <xref target="RFC7480"></xref>.</t>
<t>Futhermore, <xref target="RFC3986"></xref> and <xref target="RFC9110"></xref> do not define the name=value pair
format of a query string. This is defined in <xref target="RFC1866"></xref>.</t>
<t>Despite this, there are several extensions that do specify query
parameters.  This document updates <xref target="RFC9082"></xref> with regard to the use
of RDAP extension identifiers in URL query parameters. Query parameters
are to follow the form for form-urlencoded media type as defined in
<xref target="RFC1866"></xref>.</t>
<t>When an RDAP extension defines query parameters, those query parameter
names MUST be constructed in the same manner as URL path segments
(that is, extension identifier + '_' + parameter name).</t>
<t>Note that &quot;bare&quot; identifiers are now explicitly forbidden (see <xref target="bare_extensions"></xref>).</t>
<t>See <xref target="redirects_author"></xref> and <xref target="referrals"></xref> for other guidance on the use of
query parameters, and see <xref target="security_considerations"></xref> and
<xref target="privacy_considerations"></xref> regarding constraints on the usage of query
parameters.</t>
<t>RDAP extensions MAY define other forms of URL query strings, but they
will be incompatible with RDAP extensions using query parameters and the
searches defined in <xref target="RFC9083"></xref>. The reverse is also true:
RDAP extensions using query parameters will be incompatible with extensions
using other forms of URL query strings.</t>
</section>
</section>

<section anchor="usage_in_responses"><name>Usage in Responses</name>

<section anchor="usage_in_responses-1"><name>Basic Requirements</name>
<t><xref target="RFC9083" sectionFormat="of" section="2"></xref> describes the use of extension identifiers in
the JSON returned by RDAP servers. Just as in URLs, the extension
identifier is prepended to JSON names to create a namespace so that
the JSON name from one extension will not collide with the JSON name
from another extension. Just as with unknown query parameters in URLs,
clients are to ignore unknown JSON names.</t>
<t>The example given in <xref target="RFC9083"></xref> is as follows:</t>

<artwork><![CDATA[{
  "handle": "ABC123",
  "lunarNIC_beforeOneSmallStep": "TRUE THAT!",
  "remarks":
  [
    {
      "description":
      [
        "She sells sea shells down by the sea shore.",
        "Originally written by Terry Sullivan."
      ]
    }
  ],
  "lunarNIC_harshMistressNotes":
  [
    "In space,",
    "nobody can hear you scream."
  ]
}
]]></artwork>
<t>In this example, the extension identified by &quot;lunarNIC&quot; is prepended
to the member names of both a JSON string and a JSON array.</t>
<t>Note that &quot;bare&quot; identifiers are now explicitly forbidden (see <xref target="bare_extensions"></xref>).</t>
<t>As <xref target="RFC9083" sectionFormat="of" section="4.1"></xref> requires the use of the &quot;rdapConformance&quot;
data structure, and the &quot;objectClassName&quot; string is required of all
object class instances, the complete example from above would be:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "lunarNIC"
  ],
  "objectClassName": "domain",
  "handle": "ABC123",
  "ldhName": "example.com",
  "lunarNIC_beforeOneSmallStep": "TRUE THAT!",
  "remarks":
  [
    {
      "description":
      [
        "She sells sea shells down by the sea shore.",
        "Originally written by Terry Sullivan."
      ]
    }
  ],
  "lunarNIC_harshMistressNotes":
  [
    "In space,",
    "nobody can hear you scream."
  ]
}
]]></artwork>
</section>

<section anchor="child_json_values"><name>Child JSON Values</name>
<t>Prefixing with the extension identifier is not required for children of
a prefixed JSON object defined by an RDAP extension.</t>
<t>The following example shows this use with a JSON object:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "lunarNIC"
  ],
  "objectClassName": "domain",
  "ldhName": "example.com",
  "remarks":
  [
    {
      "description":
      [
        "She sells sea shells down by the sea shore.",
        "Originally written by Terry Sullivan."
      ]
    }
  ],
  "lunarNIC_author":
  {
    "firstInitial": "R",
    "lastName": "Heinlein"
  }
}
]]></artwork>
<t>Here the JSON name &quot;lunarNIC_author&quot; will separate the JSON from other
extensions that may have an &quot;author&quot; structure. But the JSON contained
within &quot;lunarNIC_author&quot; need not be prepended, as collision is
avoided by the use of &quot;lunarNIC_author&quot;.</t>
</section>

<section anchor="object_classes_in_extensions"><name>Object Classes in Extensions</name>
<t>As described in <xref target="RFC9082"></xref> and <xref target="usage_in_requests"></xref>, an extension may
define new paths in URLs.  If the extension describes the behavior of
an RDAP query using that path to return an instance of a new class of
RDAP object, the JSON names are not required to be prepended with the
extension identifier as described in <xref target="child_json_values"></xref>. However,
the extension MUST define the value for the &quot;objectClassName&quot; string
which is used by clients to evaluate the type of the response.  To
avoid collisions with object classes defined in other extensions, the
value for the &quot;objectClassName&quot; MUST be prepended with the extension
identifier, in the same way as for URL paths, query parameters, and
JSON names:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "lunarNIC"
  ],
  "objectClassName": "lunarNIC_author",
  "author":
  {
    "firstInitial": "R",
    "lastName": "Heinlein"
  }
}
]]></artwork>
<t>Note that &quot;bare&quot; identifiers are now explicitly forbidden (see <xref target="bare_extensions"></xref>).</t>
<t>Extension authors are encouraged to use the &quot;camel case&quot; style described
in <xref target="camel_casing"></xref>.</t>
<t>Though &quot;objectClassName&quot; is a string and <xref target="RFC9083"></xref> does
define one object class name with a space separator (i.e., &quot;ip
network&quot;), this document disallows further use of
a space character in object class names. Extensions MUST NOT define
object class names using the space character or any other character that
requires URL-encoding.</t>
</section>

<section anchor="search_results_in_extensions"><name>Search Results in Extensions</name>
<t>As described in <xref target="RFC9082"></xref> and <xref target="usage_in_requests"></xref>, an extension may define
new paths in URLs.  If the extension describes the behavior of an
RDAP query using the path to return an RDAP search result for a
new object class, the JSON name of the search result MUST be
prepended with the extension identifier to avoid collision with
search results defined in other extensions.</t>
<t>If the search result contains object class instances
defined by the extension, each instance MUST have an &quot;objectClassName&quot;
string as defined in <xref target="object_classes_in_extensions"></xref>.  For example:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "lunarNIC"
  ],
  "lunarNIC_authorSearchResult": [
    {
      "objectClassName": "lunarNIC_author",
      "author":
      {
        "firstInitial": "R",
        "lastName": "Heinlein"
      }
    },
    {
      "objectClassName": "lunarNIC_author",
      "author":
      {
        "firstInitial": "J",
        "lastName": "Pournelle"
      }
    },
  ]
}
]]></artwork>
</section>

<section anchor="rdapconformance-population"><name>rdapConformance Population</name>
<t><xref target="RFC9083" sectionFormat="of" section="4.1"></xref> offers the following guidance on including
extension identifiers in the &quot;rdapConformance&quot; member of an RDAP
response:</t>

<artwork><![CDATA[A response to a "help" request will include identifiers for all of
the specifications supported by the server. A response to any
other request will include only identifiers for the specifications
used in the construction of the response.
]]></artwork>
<t>A strict interpretation of this wording where &quot;construction of the
response&quot; refers only to the JSON structure would rule out the use of
<xref target="profiles"></xref> extension identifiers, which are in common use
in RDAP.  This document clarifies the guidance. For responses to queries
other than &quot;/help&quot;, a response MUST include in the &quot;rdapConformance&quot;
array only those extension identifiers necessary for a client to
deserialize the JSON and understand the semantic meaning of the
content within the JSON, and each extension identifier MUST be free
from conflict with the other identifiers with respect to their syntax
and semantics.</t>
<t>Note that this document does not update the guidance from <xref target="RFC9083" sectionFormat="of" section="4.1"></xref>
regarding &quot;/help&quot; responses and the &quot;rdapConformance&quot; array.</t>
</section>

<section anchor="camel_casing"><name>Camel Casing</name>
<t>The styling convention used in <xref target="RFC9083"></xref> for JSON names is often
called &quot;camel casing&quot;, in reference to the hump of a camel. In this
style, the first letter of every word, except the first word,
composing a name is capitalized.  This convention was adopted to
visually separate the namespace from the name, with an underscore
between them.  Extension authors are encouraged to use camel casing for JSON
names defined in extensions.</t>
</section>
</section>
</section>

<section anchor="usage-with-http"><name>Usage with HTTP</name>
<t>Extensions MUST NOT redefine the meaning of HTTP semantics.
Extensions MAY require the use of specific HTTP headers but
MUST NOT redefine their meanings.</t>
<t>Extensions MAY require the use of HTTP status codes not explicitly enumerated
in <xref target="RFC7480"></xref>. However, extensions MUST NOT redefine the meaning of any HTTP
status codes in <xref target="http-status-codes"></xref>.</t>
<t>Extensions MAY define new media type parameters for the &quot;application/rdap+json&quot; media
type. Extensions MUST NOT redefine the meaning of existing media type parameters.
Media type parameters MUST be prefixed with an extension identifier
(see <xref target="bare_extensions"></xref>).</t>
<t>RDAP extensions defining the use of new HTTP headers, HTTP status codes,
or media type parameters MUST have IETF consensus.</t>
</section>

<section anchor="extension_implementer_considerations"><name>Extension Implementer Considerations</name>

<section anchor="redirects_implementer"><name>Redirects</name>
<t><xref target="RFC7480"></xref> describes the use of redirects in RDAP. Redirects are prominent
in the discovery of authoritative RIR servers, as the process outlined in
<xref target="RFC9224"></xref>, which uses IANA allocations, does not account for transfers of
resources between RIRs. <xref target="RFC7480" sectionFormat="of" section="4.3"></xref> instructs servers to ignore
unknown query parameters (where &quot;unknown&quot; generally means no defined implementation behavior).
As it relates to issuing URLs for redirects, servers
MUST NOT blindly copy query parameters from a request to a redirect URL as
query parameters may contain sensitive information, such as security credentials,
not relevant to the target server of the URL. Following the advice in <xref target="RFC7480"></xref>,
servers MUST only place query parameters in redirect URLs when it is known
by the origin server (the server issuing the redirect) that the target server
(the server referenced by the redirect) can process the query parameter and
is a proper target for the contents of the query parameter.</t>
</section>
</section>

<section anchor="extension_author_considerations"><name>Extension Author Considerations</name>

<section anchor="redirects_author"><name>Redirects</name>
<t>As it is unlikely that every server in a cross-authority, redirect
scenario will be upgraded to process every new extension, extensions
should not rely on query parameters alone to convey information about
a resource, as query parameters are not guaranteed to survive a
redirect.</t>
<t>This does not mean extensions are prohibited from using query
parameters, but rather that the use of query parameters must be
applied for the scenarios appropriate for the use of the extension.
Therefore, extensions MUST NOT rely on query parameters when the
extension is to be used in scenarios requiring clients to find
authoritative servers, or other scenarios using redirects among
servers of differing authorities.</t>
<t>Extensions MAY use query parameters in scenarios where the client has
a priori knowledge of the authoritative server to which queries are to
be sent, and will be sending queries to that server directly.
Searches (<xref target="RFC9083" sectionFormat="of" section="8"></xref>) are an example scenario where a
client will be operating in this way.</t>
<t>In general, extension authors should be mindful of situations
requiring clients to directly handle redirects at the RDAP layer. Some
clients may not be utilizing HTTP libraries that provide such an
option, and some HTTP client libraries that do provide the option do
not provide it as a default behavior. Additionally, requiring clients
to handle redirects at the RDAP layer adds complexity to the client in
that additional logic must be implemented to handle redirect loops,
parameter deconfliction, and URL encoding. The guidance given in
<xref target="RFC7480" sectionFormat="of" section="5.2"></xref> exists to simplify clients, especially those
constructed with shell scripts and HTTP command-line utilities.</t>
</section>

<section anchor="referrals"><name>Referrals</name>
<t>It is common in the RDAP ecosystem to link from one RDAP resource to
another, such as can be found in domain registrations in gTLD DNRs.
These are typically conveyed in the link structure defined in
<xref target="RFC9083" sectionFormat="of" section="4.2"></xref> and use the &quot;application/rdap+json&quot; media
type.  For example:</t>

<artwork><![CDATA[{
  "value": "https://regy.example/domain/foo.example",
  "rel": "related",
  "href": "https://regr.example/domain/foo.example",
  "type": "application/rdap+json"
}
]]></artwork>
<t>Extensions MUST explicitly define any required behavioral changes to
the processing of referrals.  If an extension does not make any
provision in this respect, clients MUST assume the information
provided by referrals requires no additional processing or
modification to use in the dereferencing of the referral.</t>
<t>Extensions MAY define referral processing behaviors of referrals
defined in other extensions or in <xref target="RFC9083"></xref>.</t>
<t>Servers MUST NOT use multiple extensions in a response with processing
requirements over the same referrals where clients would not
be able to process the referrals in a deterministic way.</t>
<t>Extensions MUST register new link relations in the <xref target="link-relations"></xref> registry.
The expert reviewers of this registry may require the relationship name
be prepended with &quot;rdap-&quot;.</t>
</section>

<section anchor="extension_referencing"><name>Extensions Referencing Other Extensions</name>
<t>As stated in <xref target="profiles"></xref>, extensions may rely on other extensions by stipulating
the usage of those other extensions.</t>
<t>For example, the extension &quot;bazz&quot; may require the usage of structures defined
in &quot;fuzz&quot; instead of redefining new, equivalent structures:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "bazz",
    "fuzz"
  ],
  "objectClassName": "autnum",
  "startAutnum": 64496,
  "endAutnum": 64497,
  "bazz_cones": [ 64498, 64499],
  "fuzz_adjacents": [ 64500, 64501 ]
}
]]></artwork>
</section>

<section anchor="versioning"><name>Extension Versioning</name>
<t>As stated in <xref target="purpose"></xref>, RDAP extension identifiers and RDAP
conformance strings are opaque, and
they possess no explicit version despite the fact that some extension
identifiers include trailing numbers. That is, RDAP extensions without
an explicitly-defined versioning scheme are opaquely versioned.</t>
<t>For example, &quot;fizzbuzz1&quot; may be the successor to &quot;fizzbuzz0&quot;, but it
may also be an extension for a completely separate purpose. Only
consultation of the definition of &quot;fizzbuzz1&quot; will determine its
relationship with &quot;fizzbuzz0&quot;. Additionally, &quot;fizzbuzz99&quot; may be the
predecessor of &quot;fizzbuzz0&quot;.</t>
<t>If an RDAP extension uses a versioning method, such as <xref target="I-D.ietf-regext-rdap-versioning"></xref>,
it MUST be explicitly described in its specification.</t>

<section anchor="breaking_changes"><name>Breaking Changes in Successors</name>
<t>With the current extension model, an extension with a
successor with breaking changes is indistinguishable from a new,
unrelated extension.  Additionally, there is no signaling
mechanism in RDAP to specify successors with breaking changes.
Implementers of such changes should consider the following:</t>

<ul spacing="compact">
<li>whether the new version of the extension can be provided alongside
the old version of the extension, so that a service can simply
support both during a transition period;</li>
<li>whether some sort of client signaling should be supported, so that
clients can opt for the old or new version of the extension in
responses that they receive (see
<xref target="I-D.ietf-regext-rdap-x-media-type"></xref> for an example of how this
might work); and</li>
<li>whether the extension itself should define how versioning is
handled within the extension documentation.</li>
</ul>
<t>When using a transition period between two versions of an extension by
using both versions, the successor must not conflict with the predecessor.
Typically, this is not an issue when the rules of RDAP namespaced identifiers
are followed (see <xref target="bare_extensions"></xref>), but care should be taken if the
extensions specify other behaviors not protected by namespaces, particularly
referrals (see <xref target="referrals"></xref>).</t>
<t>Another breaking change is to introduce a new object class where a client
previously expected another, such as:</t>

<ul spacing="compact">
<li>a query using a path and/or query parameters
(e.g., /domain/foo.example produces &quot;new_domain&quot; instead of &quot;domain&quot;);</li>
<li>a referral (e.g., &quot;related&quot; produces &quot;new_domain&quot; instead of &quot;domain&quot;);</li>
<li>search results; and</li>
<li>other JSON arrays and JSON members.</li>
</ul>
<t>Breaking changes may occur in requirements for processing of data in
protocol elements that appear in both a successor and a predecessor.
For example, a profile extension (see <xref target="profiles"></xref>) may require domain names
always end with a dot (&quot;.&quot;). Should its successor remove this requirement,
this could be considered a breaking change.</t>
</section>

<section anchor="nonbreaking_changes"><name>Non-breaking Changes in Successors</name>
<t>The following are considered non-breaking changes between a successor and
a predecessor.</t>

<ul spacing="compact">
<li>new referrals</li>
<li>new JSON members</li>
<li>new URL paths</li>
<li>new query parameters</li>
</ul>
<t>The use of a new HTTP header (i.e., one previously not in-use with the predecessor),
may either be a breaking change or a non-breaking change, depending on the usage of
the header with underlying HTTP software and infrastructure.</t>
</section>

<section anchor="non_overlapping_successors"><name>Non-overlapping Successors</name>
<t>Should an extension author desire to create a successor extension,
the simplest method is to create a new extension (with a new extension identifier, as required)
that replicates all the functionality of the previous extension.</t>
<t>Take for example this RDAP response for &quot;fizzbuzz0&quot;:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "fizzbuzz0"
  ],
  "objectClassName": "domain",
  "ldhName": "example.com",
  "fizzbuzz0_malwareReputationId": 1234
}
]]></artwork>
<t>A successor extension may define the same functionality with
equivalent structures.</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "fizzbuzz1"
  ],
  "objectClassName": "domain",
  "ldhName": "example.com",
  "fizzbuzz1_malwareReputationId": 1234,
  "fizzbuzz1_spamReputationId": 7890
}
]]></artwork>
<t>During a transition period, both extensions could be in use.</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "fizzbuzz0",
    "fizzbuzz1"
  ],
  "objectClassName": "domain",
  "ldhName": "example.com",
  "fizzbuzz0_malwareReputationId": 1234,
  "fizzbuzz1_malwareReputationId": 1234,
  "fizzbuzz1_spamReputationId": 7890
}
]]></artwork>
</section>

<section anchor="overlapping_successors"><name>Overlapping Successors</name>
<t>If extension authors are concerned about the size of responses for
successor extensions using non-overlapping structures (see <xref target="non_overlapping_successors"></xref>),
they may overlap the functionality by requiring the use of the
previous extension. For example:</t>

<artwork><![CDATA[{
  "rdapConformance": [
    "rdap_level_0",
    "fizzbuzz0",
    "fizzbuzz1"
  ],
  "objectClassName": "domain",
  "ldhName": "example.com",
  "fizzbuzz0_malwareReputationId": 1234,
  "fizzbuzz1_spamReputationId": 7890
}
]]></artwork>
<t>And at some future time, a successor such as &quot;fizzbuzz9&quot; may no longer
need the function provided by &quot;fizzbuzz0&quot; and may cease to reference it.</t>
<t>Note that because RDAP extension identifiers are opaque, overlapping
successors is indistinguishable from one extension referencing another
extension (see <xref target="extension_referencing"></xref>).</t>
</section>

<section anchor="evolving-extensions-without-signaled-changes"><name>Evolving Extensions without Signaled Changes</name>
<t>Because RDAP clients ignore unrecognized JSON names and query parameters, it is
possible to extend an RDAP extension by adding new JSON names or query parameters
within the same namespace of an existing RDAP extension without changing the
extension identifier or using other signaling methods.</t>
<t>In this scenario, clients that are not updated to recognize the new elements
would simply ignore them. This is true for all non-breaking changes
(see <xref target="nonbreaking_changes"></xref>).</t>
<t>However, when such changes are made, the extension MUST describe
mechanisms for the clients to recognize and properly process
such a changed response (e.g. by way of a signaling
method like <xref target="I-D.ietf-regext-rdap-versioning"></xref>).</t>
</section>
</section>

<section anchor="extension-specification-content"><name>Extension Specification Content</name>
<t>The primary purpose of an RDAP extension specification is to aid in
the implementation of RDAP clients. Extension authors should consider
the following content guidelines:</t>

<ol spacing="compact">
<li>Examples of RDAP JSON should be generously given, especially in
areas of the specification which may be complex or difficult to describe
with prose.</li>
<li>Normative references, i.e., references to materials that are
required for the interoperability of the extension, MUST be stable
and non-changing and MUST NOT be denoted as a &quot;work in progress&quot;
or similar description.</li>
<li>Extension specifications MUST NOT define request and response
exchanges over an unencrypted HTTP connection. Extensions
should also be compliant with the security considerations of <xref target="RFC7481"></xref>.</li>
<li>Extension specifications MUST NOT forbid the use of RDAP services over IPv6.</li>
<li>The use of the various RDAP extension points, as described in <xref target="summary_of_updates"></xref>,
should be clearly delineated.</li>
</ol>
<t>Extension specifications should also consider if <xref target="RFC9839" sectionFormat="of" section="2.2"></xref> is
applicable to the JSON data conveyed by the extension.</t>
</section>

<section anchor="extension-definitions"><name>Extension Definitions</name>
<t>Extensions must be documented in an RFC or in some other permanent, stable, and
readily available reference, in sufficient detail that
interoperability between independent implementations is possible.</t>
<t>Though RDAP gives each extension its own namespace, the definition of
an extension may reuse definitions found in the base RDAP
specification or in any other registered extension.</t>
<t><xref target="RFC9083"></xref> notes that the extension identifiers provide a &quot;hint&quot; to
the client as to how to interpret the response. This wording does not
intentionally restrict the extension to defining only JSON values
within the extension's namespace.  Therefore, an extension may define
the use of its own JSON values together with the use of JSON values
from other extensions or RDAP specifications. As with the
<xref target="icann-profile"></xref> and <xref target="nro-profile"></xref> extensions, the extension may
simply signal policy applied to previously-defined RDAP structures
(see <xref target="profiles"></xref>).</t>
</section>
</section>

<section anchor="existing_extension_registrations"><name>Existing Extension Registrations</name>
<t>The following extensions have been registered with IANA, but do not
comply with the requirements set out in the base specifications, as
clarified by this document:</t>

<ul>
<li><t>Extension identifier: fred</t>

<ul spacing="compact">
<li>RDAP conformance value: fred_version_0</li>
<li>Field/path prefix: fred</li>
</ul></li>
<li><t>Extension identifier: artRecord</t>

<ul spacing="compact">
<li>RDAP conformance value: artRecord_level_0</li>
<li>Field/path prefix: artRecord</li>
</ul></li>
<li><t>Extension identifier: platformNS</t>

<ul spacing="compact">
<li>RDAP conformance value: platformNS_level_0</li>
<li>Field/path prefix: platformNS</li>
</ul></li>
<li><t>Extension identifier: regType</t>

<ul spacing="compact">
<li>RDAP conformance value: regType_level_0</li>
<li>Field/path prefix: regType</li>
</ul></li>
</ul>
<t>Client authors should be aware that responses that make use of these
extensions may require special handling on the part of the client.
Also, while these extensions will be retained in the registry, future
extensions that are similarly non-compliant will not be registered.</t>
</section>

<section anchor="iana_considerations"><name>IANA Considerations</name>

<section anchor="rdap_extensions_registry"><name>RDAP Extensions Registry</name>
<t><xref target="RFC7480"></xref> defines the <xref target="rdap-extensions"></xref> registry.
This document does not change the purpose of this registry but does
update the structure and procedures to be used by its expert reviewers.</t>
</section>

<section anchor="example_extension"><name>Example Extension</name>
<t>The IETF requests the IANA to register the following extension in <xref target="rdap-extensions"></xref>:</t>
<t>Extension identifier: example</t>
<t>Registry operator: ALL</t>
<t>Published specification: This RFC Reference Once Published</t>
<t>Person &amp; email address to contact for further information:
The Internet Engineering Steering Group <eref target="mailto:iesg@ietf.org">iesg@ietf.org</eref></t>
<t>Intended usage: COMMON</t>

<section anchor="deprecation-date"><name>Deprecation Date</name>
<t>IANA is instructed to add a new &quot;Deprecation Date&quot; field to each registration
in the registry. This field is to remain empty unless IANA is given a date to
place in the field. A registrant, as denoted by the contact field of the registry,
may request of IANA to deprecate their RDAP extension. The IESG may request of the
IANA to deprecate any RDAP extension in the registry.
The &quot;Deprecation Date&quot; field should use the date format specified in <xref target="RFC3339"></xref>.</t>
<t>IANA is requested to record the RDAP extensions &quot;icann_rdap_response_profile_0&quot; and
&quot;icann_rdap_technical_implementation_guide_0&quot;, currently marked as obsolete,
with the deprecation date of 20250821.</t>
</section>

<section anchor="registration-procedures"><name>Registration Procedures</name>
<t>Extension authors are encouraged but not required to seek an informal review
of their extension by sending a request for review to regext@ietf.org or its
successor.</t>
<t>The registration template of this registry is found in <xref target="RFC7480"></xref> and is unchanged by this document.
It is requested of the IANA that all registrations be copied to regext@ietf.org
or its successor.</t>
<t>Extensions MUST be documented in a stable, non-changing, and
readily available reference, in sufficient detail that
interoperability between independent implementations is possible,
and MUST NOT be denoted as a &quot;work in progress&quot; or similar description.</t>
</section>

<section anchor="expert-review"><name>Expert Review</name>
<t>The RDAP Extensions Registry should have as a minimum three expert reviewers
and ideally four or five. An expert reviewer assigned to the review of an RDAP
extension registration must have another expert reviewer double-check any
submitted registration.</t>
<t>Expert reviewers are to use the following criteria for extensions
defined in this document, <xref target="RFC7480"></xref>, <xref target="RFC9082"></xref>, and <xref target="RFC9083"></xref>.
The following is a non-exhaustive checklist:</t>

<ol spacing="compact">
<li>Does the extension define an extension identifier following the naming
conventions described in <xref target="syntax"></xref> and <xref target="camel_casing"></xref>?</li>
<li>If the extension defines new queries, does it clearly describe the
expected results of each new query?</li>
<li>Does the extension follow the JSON naming requirements as described in <xref target="usage_in_responses"></xref>?</li>
<li>If the extension is a newer version of an older extension, does
the extension specification clearly describe if it is backwards-compatible
(see <xref target="versioning"></xref>)?</li>
<li>If the extension registers new values in an IANA registry used by RDAP,
does it describe how a client is to use those values?</li>
<li>If the extension is a new registration, is it a case-variant of an
existing registration (see <xref target="syntax"></xref>)?</li>
</ol>
<t>As noted in <xref target="syntax"></xref>:
* Any new registration that is a case-variant of an existing registration MUST be rejected.
* Any registration containing the word &quot;ietf&quot; MUST have IETF consensus.</t>
<t>RDAP clients SHOULD match values in this registry using
case-insensitive matching to handle server implementations incorrectly
using the wrong case.</t>
</section>
</section>

<section anchor="rdap_json_values_registry"><name>RDAP JSON Values Registry</name>
<t><xref target="RFC9083" sectionFormat="of" section="10.2"></xref> defines the <xref target="rdap-json-values"></xref>.
This registry contains values to be used in the JSON values of RDAP responses.
Registrations into this registry may occur in IETF-defined RDAP extensions
or via requests to the IANA. Authors of RDAP extensions not defined by the
IETF MAY register values in this registry via requests to the IANA. IANA
is requested to send a copy of any request not originating from the IETF to
regext@ietf.org or its successor.</t>
<t>This document does not change the <xref target="rdap-json-values"></xref> nor its purpose.
However, this document does update the procedures for registrations and the
processes to be used by its expert reviewers.</t>
<t>In addition to the registration of values, RDAP extensions defined by
the IETF and other IETF specifications MAY define additional value
types (the &quot;type&quot; field).  These specifications MUST describe the
specific JSON field to be used for each new value type.</t>
<t><xref target="RFC9083" sectionFormat="of" section="10.2"></xref> defines the criteria for the values. Of these, criteria two
states:</t>
<blockquote><t>Values must be strings. They should be multiple words separated by single
space characters. Every character should be lowercased. If possible, every
word should be given in English and each character should be US-ASCII.</t>
</blockquote><t>All registrations SHOULD meet these requirements. However, there may be scenarios
in which it is more appropriate for the values to follow other
requirements, such as for values also used in other specifications or documents.</t>
<t>Registrations MUST NOT contain problematic code points as defined by <xref target="RFC9839" sectionFormat="of" section="2.2"></xref>.</t>
<t>Registrations containing the word &quot;ietf&quot; MUST have IETF consensus.</t>
<t>In all cases, it should be understood that additional registrations of RDAP JSON values occurring
after the specification of the value's type in the registry may not be
recognized by clients, and therefore either ignored or passed on to users
without processing.</t>
<t>Designated experts MUST reject any registration that is a duplicate of an
existing registration, and all registrations are to be considered case-insensitive.
That is, any new registration that is a case-variant of an existing registration
MUST be rejected.</t>
<t>RDAP clients SHOULD match values in this registry using case-insensitive matching
to handle scenarios in which servers incorrectly use the wrong case.</t>
<t>Definitions of new types (see above) MAY additionally constrain the format of
values for those new types beyond the specification of this document and <xref target="RFC9083"></xref>.
Designated experts MUST evaluate registrations with those criteria.</t>
<t>The <xref target="rdap-json-values"></xref> registry should have as a minimum three expert reviewers
and ideally four or five. An expert reviewer assigned to the review of an RDAP
JSON values registration must have another expert reviewer double-check any
submitted registration.</t>
<t>Expert reviewers are to use the criteria defined in <xref target="RFC9083" sectionFormat="of" section="10.2"></xref>.</t>
</section>
</section>

<section anchor="security_considerations"><name>Security Considerations</name>
<t><xref target="usage_in_query_parameters"></xref> describes the usage of query parameters and <xref target="redirects_author"></xref> describes
the restrictions extensions must follow to use them.
<xref target="RFC7480" sectionFormat="of" section="4.3"></xref> instructs servers to ignore
unknown query parameters. As it relates to issuing URLs for redirects, servers
MUST NOT blindly copy query parameters from a request to a redirect URL as
query parameters may contain sensitive information, such as security credentials
or tracking information, not relevant to the target server of the URL. Following the advice in <xref target="RFC7480"></xref>,
servers MUST only place query parameters in redirect URLs when it is known
by the origin server (the server issuing the redirect) that the target server
(the server referenced by the redirect) can process the query parameter and the
contents of the query parameter are appropriate to be received by the target.</t>
</section>

<section anchor="privacy_considerations"><name>Privacy Considerations</name>
<t><xref target="usage_in_query_parameters"></xref> describes the usage of query parameters
and <xref target="redirects_author"></xref> describes the restrictions extensions must follow to
use them. As query parameters have been known to be used to subvert
the privacy preferences of users in HTTP-based protocols, server MUST
NOT blindly copy query parameters from a request to a redirect URL as
described in <xref target="security_considerations"></xref> and extensions MUST follow the
constraints of query parameter usage as defined in <xref target="redirects_author"></xref>.</t>
</section>

<section anchor="acknowledgments"><name>Acknowledgments</name>
<t>The following individuals have provided feedback and contributions to the
content and direction of this document: James Gould, Scott Hollenbeck,
Ties de Kock, Pawel Kowalik, Daniel Keathley, and Mario Loffredo.</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.1866.xml"/>
<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.3339.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7480.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7481.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.9082.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9083.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9224.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9839.xml"/>
</references>
<references><name>Informative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-regext-rdap-versioning.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-regext-rdap-x-media-type.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7095.xml"/>
<reference anchor="http-status-codes" target="https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml">
  <front>
    <title>Hypertext Transfer Protocol (HTTP) Status Code Registry</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
<reference anchor="icann-profile" target="https://www.icann.org/gtld-rdap-profile">
  <front>
    <title>gTLD RDAP Profile</title>
    <author>
      <organization>ICANN</organization>
    </author>
    <date year="2024"></date>
  </front>
</reference>
<reference anchor="link-relations" target="https://www.iana.org/assignments/link-relations/link-relations.xhtml">
  <front>
    <title>Link Relations</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
<reference anchor="nro-profile" target="https://bitbucket.org/nroecg/nro-rdap-profile/raw/v1/nro-rdap-profile.txt">
  <front>
    <title>NRO RDAP Profile</title>
    <author>
      <organization>NRO</organization>
    </author>
    <date year="2021"></date>
  </front>
</reference>
<reference anchor="rdap-extensions" target="https://www.iana.org/assignments/rdap-extensions/rdap-extensions.xhtml">
  <front>
    <title>RDAP Extensions</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
<reference anchor="rdap-json-values" target="https://www.iana.org/assignments/rdap-json-values/rdap-json-values.xhtml">
  <front>
    <title>RDAP JSON Values</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>
</references>
</references>

</back>

</rfc>
