<?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-newton-regext-rdap-simple-contact-00" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" consensus="true">

<front>
<title abbrev="rdap-simple-contact">RDAP Simple Contact</title><seriesInfo value="draft-newton-regext-rdap-simple-contact-00" 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="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 an extension to the Registry Data Access Protocol
for entity contact data using basic JSON values, objects, and arrays. The data
model defined by this document is purposefully limited to the data in-use by Internet
Number Registries and Domain Name Registries and does not attempt to model
the full data-set that can be expressed with other contact models such as jCard
or JSContact.</t>
</abstract>

</front>

<middle>

<section anchor="background"><name>Background</name>
<t><xref target="RFC9083"></xref> defines the contact data of an entity using jCard (<xref target="RFC7095"></xref>),
which is a JSON format for vCard (<xref target="RFC6350"></xref>). Experience has shown that jCard
is unsuitable for RDAP because its &quot;jagged&quot; array style is unlike any other
JSON in RDAP; it is more difficutl to deserialize into objects that are easy
to work with, it is error prone and difficult to debug, and it can express
far more information than is necessary for RDAP.</t>
<t>This document defines the SimpleContact extension for RDAP. This extension
intends to model JSON in the same style and manner as other RDAP structures
and is purposefully limited to the data in-use by Internet Number Registries
and Domain Name Registries.</t>
<t>The purposeful limitation of the contact data model defined in this document
is informed by <xref target="RFC5733"></xref>, the
<eref target="https://www.icann.org/en/system/files/files/rdap-response-profile-15feb19-en.pdf">ICANN gTLD RDAP Response Profile</eref>,
the <eref target="https://bitbucket.org/nroecg/nro-rdap-profile/raw/v1/nro-rdap-profile.txt">NRO RDAP Profile</eref>,
and <xref target="RFC7495"></xref>.</t>
</section>

<section anchor="simple-contact-extension-and-identifier"><name>Simple Contact Extension And Identifier</name>
<t>The RDAP extension identifier for this extension is &quot;sc&quot;. This extension
defines one JSON member named &quot;sc_data&quot; to be found in RDAP responses.
&quot;sc_data&quot; is a JSON object, and it has child members described in the following
sections. Each child member of &quot;sc_data&quot; is optional.</t>
<t>There are two common, optional JSON members of these child members: &quot;lang&quot; and &quot;masked&quot;.</t>
<t>The JSON member &quot;lang&quot; is the same as that defined by RDAP in <xref target="RFC9083" sectionFormat="bare" relative="#" section="Section 4.4"></xref>.</t>
<t>The JSON member &quot;masked&quot; is a boolean. When true, this indicates that the data of the
JSON object provided is to facilitate communication with the entity in a manner that
hides or obfuscates the identity of the entity. This serves the same purpose as
the vCard properties defined in <xref target="RFC8605"></xref>.</t>
<t>Most of the child members are arrays allowing the expression of multiple
variants of the same information. The order in which items appear in these
arrays denotes preference order for the variants.</t>

<section anchor="kind"><name>Kind</name>
<t>The &quot;kind&quot; JSON value is a string, that is either &quot;individual&quot;, &quot;role&quot; or
&quot;organization&quot;. An example:</t>

<artwork>&quot;kind&quot; : &quot;role&quot;
</artwork>
</section>

<section anchor="names"><name>Names</name>
<t>Names may be expressed as unstructured text and as structured data.
When names are given as structured data, it is RECOMMENDED to also
give unstructured names. This may require servers which store names
in structured data to synthesize the unstructured names.
Servers which store only unstructured names SHOULD NOT attempt to synthesize
and provide structured names from those values, because of the difficulty
of doing this correctly for all types of names.</t>
<t>Names can be expressed for each kind of the entity, as described in the
&quot;kind&quot; string. When describing an &quot;individual&quot;, the name of the individual's
role and organization may also be expressed. When describing a &quot;role&quot;, the
name of the role's organization may also be expressed. It is NOT RECOMMENDED
to express the name of a role or individual when the kind is &quot;organization&quot;.</t>
<t>Each type of name is expressed as a JSON array in which each item is an
object with the following optional members:</t>

<ul spacing="compact">
<li>&quot;name&quot; - the unstructured name as a string</li>
<li>&quot;lang&quot; - see above</li>
<li>&quot;masked&quot; - see above</li>
<li>&quot;parts&quot; - a JSON object that varies for each type of name.</li>
</ul>

<aside><t>The co-authors of this specification are skeptical of the need for
structured names in RDAP. None of the references in Section 1 indicate
that names are collected or published structurally. Additionally,
attempts to structure names for all contexts and languages is unlikely
to yield a complete solution
(see <eref target="https://mailarchive.ietf.org/arch/msg/calsify/3MR_gLO-1NuyQvE8DIl88KNglSs/">https://mailarchive.ietf.org/arch/msg/calsify/3MR_gLO-1NuyQvE8DIl88KNglSs/</eref>).</t>
</aside>

<section anchor="individual-names"><name>Individual Names</name>
<t>The name of an individual may be expressed with the JSON member named
&quot;individualNames&quot;. The &quot;parts&quot; object for &quot;individualNames&quot; has the
following optional members:</t>

<ul spacing="compact">
<li>&quot;prefixes&quot; - an array of strings holding honorifics, titles, and other signifiers that are
typically prefixed to a name.</li>
<li>&quot;firstNames&quot; - an array of strings holding the set of names that preceed other names. These are often called &quot;given&quot; names.</li>
<li>&quot;middleNames&quot; - an array of strings holding the set of names that succeed first names and preceed last names. These
are often referred to as &quot;additional&quot; names.</li>
<li>&quot;lastNames&quot; - an array of strings holding the set of names that succeed other names. These are often called &quot;sur&quot; names.</li>
<li>&quot;suffixes&quot; - an array of strings holding honorifics, titles, and other signifiers that are typically suffixed to a name.</li>
</ul>
<t>The following is an example:</t>

<artwork>&quot;individualNames&quot; : [
  {
    &quot;name&quot; : &quot;Dr. Bob Lee Aloysius Smurd, Ph.d.&quot;,
    &quot;lang&quot; : &quot;en-AU&quot;,
    &quot;parts&quot; : {
      &quot;prefixes&quot;: [ &quot;Dr.&quot;],
      &quot;firstNames&quot;: [ &quot;Bob&quot; ],
      &quot;middleNames&quot; : [ &quot;Lee&quot;, &quot;Aloysius&quot; ],
      &quot;lastNames&quot; : [ &quot;Smurd&quot; ],
      &quot;suffixes&quot; : [ &quot;Ph.d.&quot; ]
    }
  }
]
</artwork>
</section>

<section anchor="role-names"><name>Role Names</name>
<t>The name of a role may be expressed with the JSON member named
&quot;roleNames&quot;. The &quot;parts&quot; object for &quot;roleNames&quot; has one
member named &quot;roles&quot; which is an array of strings.</t>
<t>The following is an example:</t>

<artwork>&quot;roleNames&quot; : [
  {
    &quot;name&quot; : &quot;Abuse Prevention, Trust and Safety&quot;,
    &quot;lang&quot; : &quot;en-AU&quot;,
    &quot;parts&quot; : {
      &quot;roles&quot; : [ &quot;Abuse Prevention&quot;, &quot;Trust and Safety&quot;],
    }
  }
]
</artwork>
</section>

<section anchor="organization-names"><name>Organization Names</name>
<t>The name of an organization may be expressed with the JSON member named
&quot;organizationNames&quot;. The &quot;parts&quot; object for &quot;organizationNames&quot; has the
following optional members:</t>

<ul spacing="compact">
<li>&quot;name&quot; - a string holding the name of the organization without other qualifiers.</li>
<li>&quot;subDivisions&quot; - an array of strings, each the name of a subdivision of the organization.</li>
<li>&quot;suffixes&quot; - an array of strings, each signifying a legal status of the organization.</li>
<li>&quot;legalId&quot; - an array of strings, each containing a legal identifier of the organization.</li>
</ul>
<t>The following is an example:</t>

<artwork>&quot;organizationNames&quot; : [
  {
    &quot;name&quot; : &quot;ACME Pty, Floors and Windows, Direct Sales&quot;,
    &quot;lang&quot; : &quot;en-AU&quot;,
    &quot;parts&quot; : {
      &quot;name&quot; : &quot;ACME&quot;,
      &quot;subDivisions&quot;: [ &quot;Floors and Windows&quot;, &quot;Direct Sales&quot; ],
      &quot;suffixes&quot; : [ &quot;Pty&quot; ],
    }
  }
]
</artwork>
</section>
</section>

<section anchor="postal-addresses"><name>Postal Addresses</name>
<t>Like names, postal addresses can be expressed as either structured or unstructured.
When postal addresses are given as structured data, it is RECOMMENDED to also
give unstructured addresses. This may require servers which store addresses
in structured data to synthesize the unstructured addresses.
Servers which store only unstructured addresses SHOULD NOT attempt to synthesize
and provide structured addresses from those values, because of the difficulty of
doing this correctly for all types of addresses.</t>
<t>Postal addresses are expressed with the &quot;postalAddresses&quot; JSON member, which is an
array of objects each with the following optional members:</t>

<ul spacing="compact">
<li>&quot;completeAddress&quot; - holds the unstructured postal address as an array of strings
in which each string represents a line of a postal address.</li>
<li>&quot;deliveryLines&quot; - an array of strings in which each string represents a line of a
postal address specific to delivery within the locality of the address. This information
typically contains street names and numbers, apartment or suite names, and other information
necessary for the delivery of postal mail within a locality.</li>
<li>&quot;locality&quot; - a string representing the village, city, municipality, or similar
part of a postal address.</li>
<li>&quot;regionName&quot; - a string of the region name of a country, such as a state, province, or department.</li>
<li>&quot;regionCode&quot; - a string representing the ISO-3166-3 two letter code.</li>
<li>&quot;countryName&quot; - a string containing the country name.</li>
<li>&quot;countryCode&quot; - a string containing the ISO-3166-2 two letter code for the country.</li>
<li>&quot;postalCode&quot; - a string containing the postal code, sometimes referred to as a zip code or post code.</li>
<li>&quot;lang&quot; - see above</li>
<li>&quot;masked&quot; - see above</li>
</ul>
<t>The following is an example of a postal address:</t>

<artwork>&quot;postalAddresses&quot; : [
  {
    &quot;completeAddress&quot; : [
      &quot;Suite 300&quot;,
      &quot;123 Random Tree Name Street&quot;,
      &quot;Kalamazoo, MI 90125 US&quot;
    ]
    &quot;deliveryLines&quot; : [ 
      &quot;Suite 300&quot;,
      &quot;123 Random Tree Name Street&quot;,
    ],
    &quot;locality&quot; : &quot;Kalamazoo&quot;,
    &quot;regionName&quot; : &quot;Michigan&quot;,
    &quot;regionCode&quot; : &quot;MI&quot;,
    &quot;countryName&quot; : &quot;United States of America&quot;,
    &quot;countryCode&quot; : &quot;US&quot;,
    &quot;postalCode&quot; : &quot;90215&quot;,
    &quot;lang&quot; : &quot;en-US&quot;
  }
]
</artwork>
</section>

<section anchor="email-addresses"><name>Email Addresses</name>
<t>Email addresses can be expressed in a JSON array of objects named &quot;emails&quot;. Each
object contains the following members:</t>

<ul spacing="compact">
<li>&quot;email&quot; - a string containing the email address.</li>
<li>&quot;lang&quot; - optional, see above</li>
<li>&quot;masked&quot; - optional, see above</li>
</ul>
<t>If the string in &quot;email&quot; begins with &quot;mailto:&quot;, the string
MUST be conformant to the mailto URI specified in <xref target="RFC6068"></xref>. Otherwise, the string
MUST be conformant to the address specification of <xref target="RFC5322" sectionFormat="bare" relative="#" section="Section 3.4"></xref>.
This JSON value is optional.</t>

<artwork>&quot;emails&quot; : [
  {
    &quot;email&quot;: &quot;山田太郎 &lt;yamada.taro@example.net&gt;&quot;,
    &quot;lang&quot; : ja
  },
  {
    &quot;email&quot; : &quot;Yamada Taro &lt;yamada.taro@example.net&gt;&quot;
    &quot;lang&quot; : &quot;ja-Latn&quot;
  }
]
</artwork>
</section>

<section anchor="telephones"><name>Telephones</name>
<t>Telephones to be used for voice communication can be expressed in a JSON array of objects
named &quot;voicePhones&quot;. Telephones to be used for facsimile machine communications can be
expressed in a JSON array of objects named &quot;faxPhones&quot;. Each object has the following
members:</t>

<ul spacing="compact">
<li>&quot;phone&quot; - a string holding the phone number</li>
<li>&quot;masked&quot; - optional, see above</li>
</ul>
<t>If the string in &quot;phone&quot; begins with &quot;tel:&quot;, the string MUST be conformant to the tel URI specified in
<xref target="RFC3966"></xref>. Otherwise the string is considered unstructured text. If possible, the
unstructurued text SHOULD be conformant to the <xref target="ITU.E161.2001"></xref> format and the <xref target="ITU.E164.1991"></xref> numbering
plan.</t>
<t>The following are examples:</t>

<artwork>&quot;voicePhones&quot; : [
  {
    &quot;phone&quot;: &quot;tel:+1-201-555-0123&quot;,
    &quot;masked&quot; : false
  },
  {
    &quot;phone&quot; : &quot;+447040202&quot;,
  }
],
&quot;faxPhones&quot; : [
  {
    &quot;phone&quot; : &quot;tel:+1-201-555-9999;ext=123&quot;,
    &quot;masked&quot; : false
  }
]
</artwork>
</section>

<section anchor="web-contacts"><name>Web Contacts</name>
<t>Communications with the entity using a web browser, often by submitting data via a web form,
can be expressed using a JSON array of objects called &quot;webContacts&quot;. Each object has the following
members:</t>

<ul spacing="compact">
<li>&quot;uri&quot; - a string with an HTTPS URI as specified by <xref target="RFC9110" sectionFormat="bare" relative="#" section="Section 4.2.2"></xref>.</li>
<li>&quot;masked&quot; - optional, see above.</li>
</ul>
<t>An example:</t>

<artwork>&quot;webContacts&quot; : [
  {
    &quot;uri&quot; : &quot;https://example.com/contact-me&quot;
  }
]
</artwork>
</section>

<section anchor="geographic-locations"><name>Geographic Locations</name>
<t>Geographic locations can be expressed using the &quot;geo&quot; JSON value, which is an array
of strings. Each string MUST be conformant to the geo URI scheme as defined in <xref target="RFC5870"></xref>.</t>

<artwork>&quot;geo&quot; : [
  &quot;geo:37.786971,-122.399677&quot;
]
</artwork>
<t>&quot;geo&quot; values SHOULD NOT be used with contact data when &quot;kind&quot; is &quot;individual&quot;.</t>
</section>
</section>

<section anchor="epp-int-loc-data"><name>EPP Int/Loc Data</name>
<t><xref target="RFC5733"></xref> defines mechanisms to indicate data is &quot;localized&quot; or &quot;internationalized&quot;
using &quot;int&quot; and &quot;loc&quot; types. The &quot;int&quot; designates data as being 7-bit ASCII. To express
contact data with the &quot;int&quot; designation in SimpleContact, it is RECOMMENDED that a language
tag with the &quot;Latn&quot; script subtag (see <xref target="RFC5646"></xref>) be used.</t>
</section>

<section anchor="no-jcard-extension-and-identifier"><name>No jCard Extension and Identifier</name>
<t>This document also defines a second RDAP extension to signal the non-use of jCard in RDAP
responses. The identifier for this extension is &quot;noJCard&quot;. When used with the RDAP-X
media type <xref target="I-D.newton-regext-rdap-x-media-type"></xref> and the SimpleContact identifier,
a client can signal to a server that entities should substitute SimpleContact data for jCard data.
When used with queries containing large amounts of entity data, such as RDAP searches, this
can reduce the payload significantly (instead of sending both jCard and SimpleContact).</t>
<t>Use of the &quot;noJCard&quot; extension is independent of the SimpleContact extension, and may be
used for other purposes as is appropriate to server policy.</t>
</section>

</middle>

<back>
<references><name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.newton-regext-rdap-x-media-type.xml"/>
<reference anchor="ITU.E161.2001" target="">
  <front>
    <title>&#xA;Arrangement of digits, letters and symbols on telephones and other devices that can be used for gaining access to a telephone network&#xA;</title>
    <author>
      <organization>International Telecommunications Union</organization>
    </author>
    <date year="2001"></date>
  </front>
  <seriesInfo name="ITU-T" value="Recommendation E.161"></seriesInfo>
</reference>
<reference anchor="ITU.E164.1991" target="">
  <front>
    <title>&#xA;The International Public Telecommunication Numbering Plan&#xA;</title>
    <author>
      <organization>International Telecommunications Union</organization>
    </author>
    <date year="1991"></date>
  </front>
  <seriesInfo name="ITU-T" value="Recommendation E.164"></seriesInfo>
</reference>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3966.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5322.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5646.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5733.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5870.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6068.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7495.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8605.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9083.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml"/>
</references>
<references><name>Informative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6350.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7095.xml"/>
</references>

</back>

</rfc>
