Related Objects Extension for EPP August 2026
Brown Informational [Page]
Published:
Author:
G. Brown

Extensible Provisioning Protocol (EPP) Extension for Related Objects

Abstract

This document describes an extension to the Extensible Provisioning Protocol (EPP) that allows EPP clients to request the inclusion of related objects in responses to <info> commands.

About this document

The source for this document, and an issue tracker, may can be found at https://github.com/gbxyz/epp-related-objects-extension.

Table of Contents

1. Introduction

The Extensible Provisioning Protocol (EPP) [RFC5730] is an object provisioning and management protocol, allowing clients to create, view and transform objects in a central repository.

The EPP <info> command allows clients to retrieve information (subject to authorisation) about objects in the repository. Since EPP operates on a strictly per-object basis, and since objects may be related to one another, a client may often need to issue multiple <info> commands in order to retrieve the data it needs to carry out its operation.

This document describes an extension to the <info> command that allows clients to request the inclusion of information about related objects in responses. This allows clients to retrieve all the required information about an object in a single round-trip to the server.

1.1. Conventions used in this document

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

In examples, C: represents lines sent by a protocol client and S: represents lines returned by a protocol server. Indentation and white space in examples are provided only to illustrate element relationships and are not REQUIRED features of this protocol.

A protocol client that is authorized to manage an existing object is described as a "sponsoring" client throughout this document.

XML is case sensitive. Unless stated otherwise, XML specifications and examples provided in this document MUST be interpreted in the character case presented in order to develop a conforming implementation.

EPP uses XML namespaces to provide an extensible object management framework and to identify schemas required for XML instance parsing and validation. These namespaces and schema definitions are used to identify both the base protocol schema and the schemas for managed objects.

The XML namespace prefixes used in examples (such as the string ro in ro:include) are solely for illustrative purposes. A conforming implementation MUST NOT require the use of these or any other specific namespace prefixes.

In accordance with Section 3.2.2.1 of XML Schema Part 2: Datatypes [XSD-DATATYPES] , the allowable lexical representations for the xs:boolean datatype are the strings " 0 " and " false " for the concept 'false' and the strings " 1 " and " true " for the concept 'true'. Implementations MUST support both styles of lexical representation.

2. EPP Command Mapping

2.1. EPP <info> command

This specification defines additional elements to extend the EPP <info> command and response. No other EPP commands and responses are extended.

Clients wishing to request related object information MUST include a <ro:info> element in the <extension> element of the <info> frame. The <ro:info> element contains a <ro:include> element which MUST contain one or more of the following child elements:

Example <info> command:

C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <info>
C:      <domain:info xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C:        <domain:name hosts="all">example.com</domain:name>
C:      </domain:info>
C:    </info>
C:    <extension>
C:      <ro:info
C:        xmlns:ro="https://gavinbrown.xyz/xmlns/epp/related-objects-1.0">
C:        <ro:include>
C:          <ro:registrant/>
C:          <ro:ns/>
C:          <ro:other/>
C:        </ro:include>
C:      </ro:info>
C:    </extension>
C:    <clTRID>ABC-12345</clTRID>
C:  </command>
C:</epp>

2.1.1. EPP <info> response

A server responding to an <info> command that has been extended with a <ro:info> element MAY include an <ro:infData> element in the <extension> element of the response.

If present, the <ro:infData> element MUST include one or more <infData> elements, scoped to the namespace URI of an EPP object mapping.

Example <info> response:

S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully</msg>
S:    </result>
S:    <resData>
S:      <domain:infData
S:        xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S:        <domain:name>example.com</domain:name>
S:        <domain:roid>EXAMPLE1-REP</domain:roid>
S:        <domain:status s="ok"/>
S:        <domain:registrant>jd1234</domain:registrant>
S:        <domain:contact type="admin">sh8013</domain:contact>
S:        <domain:contact type="tech">sh8013</domain:contact>
S:        <domain:ns>
S:          <domain:hostObj>ns1.example.com</domain:hostObj>
S:          <domain:hostObj>ns1.example.net</domain:hostObj>
S:        </domain:ns>
S:        <domain:host>ns1.example.com</domain:host>
S:        <domain:host>ns2.example.com</domain:host>
S:        <domain:clID>ClientX</domain:clID>
S:        <domain:crID>ClientY</domain:crID>
S:        <domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>
S:        <domain:upID>ClientX</domain:upID>
S:        <domain:upDate>1999-12-03T09:00:00.0Z</domain:upDate>
S:        <domain:exDate>2005-04-03T22:00:00.0Z</domain:exDate>
S:        <domain:trDate>2000-04-08T09:00:00.0Z</domain:trDate>
S:        <domain:authInfo>
S:          <domain:pw>2fooBAR</domain:pw>
S:        </domain:authInfo>
S:      </domain:infData>
S:    </resData>
S:    <extension>
S:      <ro:infData
S:        xmlns:ro="https://gavinbrown.xyz/xmlns/epp/related-objects-1.0">
S:        <contact:infData
S:          xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
S:          <contact:id>jd1234</contact:id>
S:          <contact:roid>JD1234-REP</contact:roid>
S:          <contact:status s="linked"/>
S:          <contact:status s="clientDeleteProhibited"/>
S:          <contact:postalInfo type="int">
S:            <contact:name>John Doe</contact:name>
S:            <contact:org>Example Inc.</contact:org>
S:            <contact:addr>
S:              <contact:street>123 Example Dr.</contact:street>
S:              <contact:street>Suite 100</contact:street>
S:              <contact:city>Dulles</contact:city>
S:              <contact:sp>VA</contact:sp>
S:              <contact:pc>20166-6503</contact:pc>
S:              <contact:cc>US</contact:cc>
S:            </contact:addr>
S:          </contact:postalInfo>
S:          <contact:voice x="1234">+1.7035555555</contact:voice>
S:          <contact:email>[email protected]</contact:email>
S:          <contact:clID>ClientY</contact:clID>
S:          <contact:crID>ClientX</contact:crID>
S:          <contact:crDate>1999-04-03T22:00:00.0Z</contact:crDate>
S:        </contact:infData>
S:        <host:infData
S:          xmlns:host="urn:ietf:params:xml:ns:host-1.0">
S:          <host:name>ns1.example.com</host:name>
S:          <host:roid>NS1_EXAMPLE1-REP</host:roid>
S:          <host:status s="linked"/>
S:          <host:addr ip="v4">192.0.2.2</host:addr>
S:          <host:clID>ClientY</host:clID>
S:          <host:crID>ClientX</host:crID>
S:          <host:crDate>1999-04-03T22:00:00.0Z</host:crDate>
S:        </host:infData>
S:        <host:infData
S:          xmlns:host="urn:ietf:params:xml:ns:host-1.0">
S:          <host:name>ns1.example.net</host:name>
S:          <host:roid>NS1_EXAMPLE2-REP</host:roid>
S:          <host:status s="linked"/>
S:          <host:addr ip="v4">192.0.2.29</host:addr>
S:          <host:clID>ClientY</host:clID>
S:          <host:crID>ClientX</host:crID>
S:          <host:crDate>1999-04-03T22:00:00.0Z</host:crDate>
S:        </host:infData>
S:      </ro:infData>
S:    </extension>
S:    <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54322-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>

3. Operational considerations

Servers MAY choose to include all, some, or none of the relevant requested objects in the <ro:infData> element, according to applicable policies.

When determining whether to include a related object in the <ro:infData> element, servers SHOULD apply the same access control rules that are used to determine whether a client is authorised to perform an <info> on those objects.

Since EPP does not provide a way for servers to indicate a partial success or failure of a command, servers MUST NOT return an error if a related object cannot be included in a response. Instead, the object should simply be omitted from the <ro:infData> element. An error response MUST only be used when the server cannot disclose the information about the "primary" object, that is, the object specified in the <info> command.

4. Security considerations

The extension described in this document does not provide any security services or introduce any additional considerations beyond those described by [RFC5730] or those caused by the protocol layers used by EPP.

5. IANA considerations

5.1. XML namespace

This document uses URIs to describe XML namespaces and XML schemas conforming to a registry mechanism described in [RFC3688]. IANA is requested to make the following registrations in the IETF XML Registry [IETF-XML-REGISTRY]:

Registration for the XML namespace ("ns" subregistry):

  • URI: https://gavinbrown.xyz/xmlns/epp/related-objects-1.0

  • Registrant Contact: See the author of this document

  • XML: None. Namespace URIs do not represent an XML specification

Registration for the XML schema ("schema" subregistry):

  • URI: https://gavinbrown.xyz/xmlns/epp/related-objects-1.0

  • Registrant Contact: See the author of this document

  • XML: See the "Formal specification" section of this document

5.2. EPP extension registry

IANA is requested to to make the following registration in the Extensions for the "Extensible Provisioning Protocol (EPP)" [EPP-EXTENSION-REGISTRY] registry described in [RFC7451]. The details of the registration are as follows:

  • Name of Extension: Extensible Provisioning Protocol (EPP) Extension for Related Objects

  • Document Status: Other

  • Reference: URL of this document

  • Registrant Name and Email Address: See the author of this document

  • TLDs: Any

  • IPR Disclosure: None

  • Status: Active

  • Notes: None

6. Formal specification

<?xml version="1.0" encoding="UTF-8"?>
<schema
  targetNamespace="https://gavinbrown.xyz/xmlns/epp/related-objects-1.0"
  xmlns:ro="https://gavinbrown.xyz/xmlns/epp/related-objects-1.0"
  xmlns="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified">
  <annotation>
    <documentation>
      Extensible Provisioning Protocol v1.0 extension schema for
      related objects.
    </documentation>
  </annotation>

  <element name="info" type="ro:info" />
  <element name="infData" type="ro:infData" />

  <complexType name="info">
    <sequence>
      <element name="include" type="ro:include" />
    </sequence>
  </complexType>

  <complexType name="include">
    <all>
      <element name="registrant" minOccurs="0" maxOccurs="1" />
      <element name="contacts" minOccurs="0" maxOccurs="1" />
      <element name="orgs" minOccurs="0" maxOccurs="1" />
      <element name="ns" minOccurs="0" maxOccurs="1" />
      <element name="hosts" minOccurs="0" maxOccurs="1" />
      <element name="other" minOccurs="0" maxOccurs="1" />
    </all>
  </complexType>

  <complexType name="infData">
    <sequence>
      <element name="infData" namespace="##other"
        minOccurs="1" maxOccurs="unbounded" />
    </sequence>
  </complexType>
</schema>

7. Normative references

[EPP-EXTENSION-REGISTRY]
IANA, "Extensions for the Extensible Provisioning Protocol (EPP)", <https://www.iana.org/assignments/epp-extensions>.
[IETF-XML-REGISTRY]
IANA, "IETF XML Registry", <https://www.iana.org/assignments/xml-registry>.
[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC3688]
Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, DOI 10.17487/RFC3688, , <https://www.rfc-editor.org/info/rfc3688>.
[RFC5730]
Hollenbeck, S., "Extensible Provisioning Protocol (EPP)", STD 69, RFC 5730, DOI 10.17487/RFC5730, , <https://www.rfc-editor.org/info/rfc5730>.
[RFC5731]
Hollenbeck, S., "Extensible Provisioning Protocol (EPP) Domain Name Mapping", STD 69, RFC 5731, DOI 10.17487/RFC5731, , <https://www.rfc-editor.org/info/rfc5731>.
[RFC5732]
Hollenbeck, S., "Extensible Provisioning Protocol (EPP) Host Mapping", STD 69, RFC 5732, DOI 10.17487/RFC5732, , <https://www.rfc-editor.org/info/rfc5732>.
[RFC5733]
Hollenbeck, S., "Extensible Provisioning Protocol (EPP) Contact Mapping", STD 69, RFC 5733, DOI 10.17487/RFC5733, , <https://www.rfc-editor.org/info/rfc5733>.
[RFC7451]
Hollenbeck, S., "Extension Registry for the Extensible Provisioning Protocol", RFC 7451, DOI 10.17487/RFC7451, , <https://www.rfc-editor.org/info/rfc7451>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
[RFC8544]
Zhou, L., Kong, N., Wei, J., Yao, J., and J. Gould, "Organization Extension for the Extensible Provisioning Protocol (EPP)", RFC 8544, DOI 10.17487/RFC8544, , <https://www.rfc-editor.org/info/rfc8544>.
[XSD-DATATYPES]
Biron, P., Ed. and A. Malhotra, Ed., "XML Schema Part 2: Datatypes Second Edition", W3C Recommendation, , <https://www.w3.org/TR/2004/REC-xmlschema-2-20041028/>. Latest version available at <https://www.w3.org/TR/xmlschema-2/>.

Author's Address

Gavin Brown