<?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-rpp-data-objects-02" submissionType="IETF" category="std" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" tocDepth="4">

<front>
<title abbrev="RPP Data Objects">RESTful Provisioning Protocol (RPP) Data Objects</title><seriesInfo value="draft-ietf-rpp-data-objects-02" stream="IETF" status="standard" name="Internet-Draft"></seriesInfo>
<author initials="P." surname="Kowalik" fullname="Pawel Kowalik"><organization>DENIC</organization><address><postal><street></street>
</postal><email>pawel.kowalik@denic.de</email>
<uri>https://denic.de/</uri>
</address></author><author initials="M." surname="Wullink" fullname="Maarten Wullink"><organization>SIDN Labs</organization><address><postal><street></street>
</postal><email>maarten.wullink@sidn.nl</email>
<uri>https://sidn.nl/</uri>
</address></author><date year="2026" month="November" day="2"></date>
<area>Applications and Real-Time</area>
<workgroup>Network Working Group</workgroup>
<keyword>RPP</keyword>
<keyword>provisioning</keyword>
<keyword>registry</keyword>
<keyword>data model</keyword>

<abstract>
<t>This document defines data objects for the RESTful Provisioning Protocol (RPP) and sets up the IANA RPP Data Object Registry to describe and catalogue them. Specifically, it details the logical structure, constraints, and protocol operations (including their inputs, outputs, and business logic) for registry resources: domain names, contacts, hosts, organisations, users, and messages, as well as the discovery and profile objects that describe server capabilities. In accordance with the RPP architecture, these definitions focus entirely on the semantics, remaining independent of any specific data representation or media type (e.g., JSON or XML).</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>The RESTful Provisioning Protocol (RPP) defines a set of data objects used to represent and manage registry resources, including domain names, contacts, hosts, organisations, users, and messages, as well as the discovery and profile objects that describe server capabilities. This initial list is not exhaustive; additional resource and component objects MAY be defined in future revisions or introduced via IANA registration to support new features and operational needs.</t>
<t>In accordance with the RPP architecture <xref target="I-D.ietf-rpp-architecture"></xref>, a core architectural principle is the clear distinction between the abstract data model and its concrete data representation. The data model defines the logical structure, relationships, and constraints of the objects, independent of formatting. The data representation defines how these abstract concepts are expressed in specific formats (e.g., JSON, XML, or YAML).</t>
<t>This document focuses on the data model of RPP objects and operations on them, including the data model of operation inputs, outputs as well as the necessary business logic of state transitions. This separation of concerns ensures the protocol maintains a stable semantic foundation that can be consistently implemented across different media types and easily adapted to new representation formats. For instance, the model defines a contact's name as a required string type, but it remains agnostic as to whether that string is ultimately encoded as a JSON property or an XML element.</t>

<section anchor="conventions-and-terminology"><name>Conventions and Terminology</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>
<t>The following terms related to the relationship between host objects and domain objects are used as defined in <xref target="RFC5732" sectionFormat="of" section="1.1"></xref>:</t>

<dl spacing="compact">
<dt>Subordinate host</dt>
<dd>A host name object is a subordinate host of a domain when the host name consists of one or more labels followed by the name of that domain, for example, host <tt>ns1.domain.example</tt> is a subordinate host of domain <tt>domain.example</tt>.</dd>
<dt>Superordinate domain</dt>
<dd>A domain name object is the superordinate domain of a host when the name of the host consists of one or more labels followed by the name of that domain, for example, domain <tt>domain.example</tt> is the superordinate domain of host <tt>ns1.domain.example</tt>.</dd>
<dt>Internal host</dt>
<dd>A host whose name belongs to the namespace of the repository in which the host is being used for delegation purposes.</dd>
<dt>External host</dt>
<dd>A host whose name does not belong to the namespace of the repository in which the host is being used for delegation purposes.</dd>
<dt>Object Authorisation</dt>
<dd>Authorisation data related to the object beyond the default client-level authorisation accompanying the request, in order to authorise operations on the object. Typically it is a value related to or derived from an Authorisation Information Object provisioned with the object.</dd>
<dt>Data Object</dt>
<dd>A top-level provisioned resource object that has an independent lifecycle and identity in the registry. Data Objects carry data elements describing the resource and define the set of operations that can be performed on them.</dd>
<dt>Component Object</dt>
<dd>A reusable data structure that carries data only, with no operations of its own. Component Objects are embedded within Data Objects or other objects to avoid repetition of common data patterns.</dd>
<dt>Process Object</dt>
<dd>An object that represents a long-running or multi-step operation initiated on a Data Object. Process Objects carry operation-related state and data, and may define their own operations to interact with the process. They have no independent existence - their lifecycle is bound to the owning Data Object.</dd>
<dt>Owner Data Object</dt>
<dd>A Data Object which a process (represented as Process Object) was initiated upon and which owns this Process Object.</dd>
<dt>Unique Identifier</dt>
<dd>The data element of an object whose value uniquely identifies an instance of that object within its applicable scope. The scope is defined by the object: for a Data Object it is typically the server, whereas for a Process Object it is the Owner Data Object. An object definition names its Unique Identifier explicitly in the object preamble. Objects that have no independent identity, such as component objects embedded within another object, have no Unique Identifier.</dd>
<dt>Input Data Element</dt>
<dd>A data element that a client provides as input to a specific operation, in addition to the identifier or data elements of the object the operation targets, and that carries content the operation acts upon. An input data element is defined as part of the operation definition and is not part of the state of the object. An input data element is described using the attributes defined in <xref target="data-element-semantics"></xref>, except Direct Access, and Visibility, which do not apply.</dd>
</dl>
<t>Parameter
A data element that a client provides with an operation to control how the server performs the operation or which data it returns. Unlike an Input Data Element, a parameter does not carry content that the operation acts upon. A parameter is not part of the state of the object and is never returned as part of the object. A parameter is described using the same attributes as an Input Data Element, and its definition specifies the behaviour of the operation when the parameter is absent.</t>

<dl spacing="compact">
<dt>Label Generation Ruleset (LGR)</dt>
<dd>A set of rules defining the valid labels for a registry, including the permitted repertoire, contextual rules, and, where applicable, variant mappings. Also historically known as IDN tables.</dd>
</dl>
</section>
</section>

<section anchor="resource-definition-principles"><name>Resource Definition Principles</name>

<section anchor="primitive-data-types"><name>Primitive Data Types</name>
<t>RPP data elements use strict typing, meaning that each element must conform exactly to its declared primitive data type, and type violations MUST be treated as errors by implementations. The exact specifications for these types, including allowed ranges, encoding, and formatting, are determined by the representation format used (e.g., JSON, XML, CBOR). New RPP non-primitive data types based on existing primitive data types MAY be defined to support additional features.</t>

<section anchor="string"><name>String</name>
<t>A String is a sequence of Unicode characters. Usages MAY impose additional constraints on string values, such as maximum length or allowed character sets, based on specific data element definitions. An example of a string is <tt>&quot;host.example&quot;</tt>.</t>
</section>

<section anchor="integer"><name>Integer</name>
<t>An Integer is a whole number, positive or negative. Usages MAY impose additional constraints on integer values, such as minimum and maximum allowable values, based on specific data element definitions. An example of an integer is <tt>42</tt>.</t>
</section>

<section anchor="boolean"><name>Boolean</name>
<t>A Boolean represents a logical true or false value. An example of a boolean is <tt>true</tt> or <tt>false</tt>, but it MAY be different depending on the native encoding of boolean values in the representation.</t>
</section>

<section anchor="decimal"><name>Decimal</name>
<t>A Decimal is a number providing an exact, base-10 representation of fractional values within a defined precision. Usage of this type MUST impose additional constraints on decimal values, such as precision or range, based on specific data element definitions. An example of a decimal is 3.14159.</t>
</section>

<section anchor="date"><name>Date</name>
<t>A Date is a full-date calendar date as described in <xref target="RFC3339"></xref>, an example of a date is <tt>2025-10-27</tt>.</t>
</section>

<section anchor="timestamp"><name>Timestamp</name>
<t>Timestamp (Date and time attribute) values MUST be represented in Coordinated Universal Time (UTC) using the Gregorian calendar in date-time form as defined in <xref target="RFC3339"></xref>. In EPP Compatibility Profile upper case &quot;T&quot; and &quot;Z&quot; characters MUST be used. An example of a timestamp is <tt>2025-10-27T09:42:51Z</tt>.</t>
</section>

<section anchor="url"><name>URL</name>
<t>A Uniform Resource Locator (URL) as defined in <xref target="RFC1738"></xref>. An example of a URL is <tt>&quot;https://host.example&quot;</tt>.</t>
</section>

<section anchor="binary"><name>Binary</name>
<t>Raw binary data, implementations MAY choose how to encode the binary data, for example as base64 or hexadecimal string. An example of binary data encoded as base64 is <tt>&quot;UlBQIFNheXMgSGk=&quot;</tt>.</t>
</section>

<section anchor="dictionary"><name>Dictionary</name>
<t>Notation: Dictionary[Value Type]</t>
<t>A Dictionary is a collection of key-value pairs where keys are unique Strings and values are of the specified primitive data type. Usages MUST define the constraints on allowed keys and values. A Dictionary differs from an Dictionary Aggregation in that it maps String keys to primitive values rather than to Component or Resource Objects.</t>
</section>

<section anchor="object"><name>Object</name>
<t>An Object is a composite structure containing named properties. The set of allowed property names, their data types, and their constraints are determined by the data element definition that uses this type. Usages MUST specify the expected structure, including any required or optional properties. An Object differs from a Component Object in that it is defined inline as part of a data element rather than being a standalone reusable definition registered separately.</t>
</section>

<section anchor="fully-qualified-domain-name-fqdn"><name>Fully Qualified Domain Name (FQDN)</name>
<t>A String that represents a Fully Qualified Domain Name (FQDN) that conforms to the description included in section 2 of <xref target="RFC9499"></xref> and includes the following additional restrictions:</t>

<ul spacing="compact">
<li>The trailing dot required when these names are stored in a DNS zone is implicit and MUST NOT be used in RPP, with the exception of the <tt>name</tt> element of the DNS Resource Record Object.</li>
<li>Internationalized domain names MUST be represented in ASCII Compatible Encoding (ACE) using the A-label, defined in Section 2.3.2.1 of [RFC5890]</li>
<li>Case-insensitive comparison MUST be used when comparing two FQDNs.</li>
<li>All representations generated by the server are to be in lowercase.</li>
</ul>
</section>
</section>

<section anchor="data-element-abstraction"><name>Data Element Abstraction</name>
<t>Each data object is composed of logical data elements. A data element is a logical unit of information identified by a stable name, independent of its representation in any given media type. The definition for each element specifies its logical name, purpose, cardinality, data type, and constraints.
The data type of a data element may also be a reference to another data object, using the target object's stable name.</t>
</section>

<section anchor="extensibility"><name>Extensibility</name>
<t>The RPP data model is designed to be extensible. Extensions MAY introduce new data objects, add new data elements or associations to existing objects, define new processes on existing or new data objects, and define new operations or extend the inputs and outputs of existing operations.</t>

<section anchor="standardised-and-private-extensions"><name>Standardised and Private Extensions</name>
<t>RPP distinguishes between standardised and private extensions:</t>

<ul>
<li><t>Standardised extensions MUST be registered with IANA, as described in the IANA Considerations section of this document and in <xref target="I-D.ietf-rpp-architecture"></xref>. Registration ensures global uniqueness of extension identifiers and promotes interoperability across implementations.</t>
</li>
<li><t>Private (non-standardised) extensions MAY be defined for use within specific implementations or organisations. Private extensions are not required to be registered with IANA, but MUST still use unique identifiers that are unlikely to conflict with standardised extensions or other private extensions. The use of reverse domain notation as a prefix (e.g., <tt>org.example.rpp.myElement</tt>) is RECOMMENDED for private extension identifiers to avoid naming collisions.</t>
</li>
</ul>
</section>

<section anchor="extension-points"><name>Extension Points</name>
<t>The following aspects of the data model are extensible:</t>

<ul spacing="compact">
<li>New data objects: Additional resource or component objects MAY be defined by extensions and registered with IANA.</li>
<li>New data elements: Extensions MAY add new data elements to existing data objects. Such elements follow the same Data Element Semantics as core data elements.</li>
<li>New associations: Extensions MAY introduce new associations between existing or new objects.</li>
<li>New operations: Extensions MAY define entirely new operations on existing or new data objects.</li>
<li>New processes: Extensions MAY define new Process Objects and MAY declare that existing or new Data Objects support them. A new Process Object MUST extend the Base Process Object, either directly or through another Process Object.</li>
<li>Extended operation inputs and outputs: Extensions MAY add new data elements to the inputs or outputs of existing operations.</li>
</ul>
<t>When an extension adds data elements, input data elements, or parameters to a core object or operation, these additions MUST NOT alter the semantics or constraints of existing core data elements.</t>
</section>
</section>

<section anchor="data-element-semantics"><name>Data Element Semantics</name>
<t>The definition of each data element within an object consists of the following attributes:</t>

<ul spacing="compact">
<li>Name: A human-readable name for the data element.</li>
<li>Identifier: A machine-readable, unique identifier for the element, using camelCase notation.</li>
<li><t>Cardinality: Specifies the number of times an element may appear. The notation is as follows:</t>

<ul spacing="compact">
<li><tt>1</tt> for exactly one</li>
<li><tt>0-1</tt> for zero or one</li>
<li><tt>0+</tt> for zero or more</li>
<li><tt>1+</tt> for one or more</li>
<li>and <tt>X-Y</tt> for at least X and at most Y, where X and Y are non-negative integers, X is less than Y, and Y is greater than 1, e.g. <tt>1-2</tt> for one or two</li>
</ul></li>
<li>Data Type: Defines the element's data structure, which can be a primitive type, a Common Data Type or a reference to another component object.</li>
<li>Description: Explains the purpose of the data element and any other relevant information.</li>
<li>Constraints: Provides specific validation rules or limitations on top of the data type itself, such as value ranges.</li>
<li><t>Mutability: Defines the lifecycle of the data element's value. It MUST be one of the following:</t>

<ul spacing="compact">
<li>create-only: The element's value is provided during the object's creation and cannot be modified thereafter. After object's creation the element behaves like read-only element.</li>
<li>read-only: The element's value is managed by the server. It cannot be set or modified directly by the client, though it may change as a result of server-side operations.</li>
<li>read-write: The element's value can be set and modified by the client.</li>
</ul></li>
<li>Direct Access: An optional flag indicating whether the associated object or objects are additionally exposed as an addressable sub-resource of the containing object. When set to <tt>true</tt>, the associated object or objects are exposed as a sub-resource that can be addressed independently of the containing object, in addition to their inline representation within it. When absent or set to <tt>false</tt>, the element is accessed only inline. The default value is <tt>false</tt>.</li>
</ul>
<t>A data element is required when the lower bound of its cardinality is greater than zero (<tt>1</tt>, <tt>1+</tt>, or <tt>X-Y</tt> with X greater than 0); otherwise it is optional.</t>
<t>The Direct Access flag is applicable only to a data element whose Data Type is an association (Aggregation, Composition, Labelled Aggregation, Dictionary Aggregation, Labelled Composition, or Dictionary Composition) with a Data Object, Component Object, or Process Object, of any cardinality. Where such a data element has a cardinality greater than <tt>1</tt>, the associated object type MUST define a Unique Identifier, so that an individual associated object can be addressed unambiguously among the collection.
* Visibility: An optional attribute indicating whether the data element is included in operation output by default. It MUST be one of the following:
  * default: The element is included in the output of any operation returning the containing object, subject to authorisation and server policy. This value applies when the attribute is absent.
  * onDemand: The element is included in the output only when the client explicitly requests it using the Include Elements parameter (see <xref target="include-elements"></xref>), subject to authorisation and server policy.</t>
<t>The Visibility attribute affects operation output only. It does not affect whether a client can provide the element as input.</t>
</section>

<section anchor="inheritance"><name>Inheritance</name>
<t>A Data Object, Component Object or Process Object (the &quot;derived object&quot;) MAY inherit the data elements and operations of another object (the &quot;base object&quot;). Inheritance is denoted in the preamble of the derived object's definition using the <tt>Extends</tt> keyword, whose value is the name of the base object, for example:</t>

<artwork><![CDATA[* Name: Domain Create Process Object
* Identifier: domainCreateProcess
* Extends: Create Process Object
]]></artwork>
<t>The following rules apply:</t>

<ul spacing="compact">
<li>Single inheritance: an object MUST extend at most one base object.</li>
<li>Transitivity: the base object MAY itself extend another object. Inheritance is transitive, so a derived object inherits the data elements and operations of every ancestor in its chain. An object MUST NOT directly or indirectly extend itself.</li>
<li>Inherited content: a derived object has all data elements of its base object, including their cardinality, mutability, data type and constraints, and supports all operations of its base object. Inherited data elements and operations are not repeated in the derived object's definition.</li>
<li>Additions: a derived object MAY define additional data elements and operations. It MUST NOT define a data element whose identifier is already defined by any of its ancestors. A derived object MAY modify the inherited operation input and output data as needed.</li>
<li>Polymorphism: where a data element or operation refers to a base object, any object that directly or indirectly extends the base object MAY be used in its place.</li>
<li>Abstract objects: an object MAY be declared abstract using the <tt>Abstract</tt> keyword in the preamble of its definition, with the value <tt>true</tt>. When the <tt>Abstract</tt> keyword is absent or set to <tt>false</tt>, the object is not abstract. An abstract object serves only as a base object for its derived objects. Wherever a data element or operation refers to an abstract object, an instance of a non-abstract object that directly or indirectly extends it is used in its place. A client MUST NOT provide, and a server MUST NOT return, an instance whose own type is an abstract object. The <tt>Abstract</tt> keyword is not inherited.</li>
</ul>
</section>

<section anchor="reserved-property-names"><name>Reserved Property Names</name>
<t>Data object definitions MUST NOT define properties whose names begin with the <tt>@</tt> character. Names beginning with <tt>@</tt> are reserved for use by representation specifications. This prohibition applies to all data object types: resource objects, component objects, and process objects.</t>
</section>

<section anchor="operations"><name>Operations</name>
<t>For each data object a set of possible operations is defined together with their respective input and output data.</t>

<section anchor="authorisation"><name>Authorisation</name>
<t>For each operation authorisation requirements and operation behaviour are specified.</t>
<t>Wherever &quot;Object Authorisation&quot; is mentioned, it means that an operation MAY accept or require additional authorisation data related to the object beyond default client-level authorisation, or that an operation MAY result in different processing or response if such authorisation is provided.</t>
</section>

<section anchor="operation-io"><name>Operation Input and Output</name>
<t>The input and output of an operation are declared by the <tt>Input</tt> and <tt>Output</tt> attributes of the operation definition. The value of each attribute is either a literal <tt>(None)</tt> or a list of items, each of one of the following kinds:</t>

<ul>
<li>Reference: a reference to the context of operation or process. It can contain either a literal value <tt>This Object</tt> for the object that defines the operation, or literal value <tt>Owner Data Object</tt> for the Owner Data Object of a Process Object.</li>
<li><t>Object: The name of the object type in the input or output. It can contain either the type or a literal value <tt>This Object</tt> for the object type that defines the operation, or literal value <tt>Owner Data Object</tt> for the type of Owner Data Object of a Process Object. It specifies an additional attribute:</t>

<ul spacing="compact">
<li>Cardinality: [OPTIONAL] the number of representations, in the notation defined in <xref target="data-element-semantics"></xref>. The default value is <tt>1</tt>.</li>
</ul></li>
<li><t>Input Data Elements: the input data elements of the operation, listed in the same form as the Data Elements of an object: each entry is the Name of an input data element, followed by its attributes as defined in <xref target="data-element-semantics"></xref>, except Mutability, Direct Access and Visibility. It is allowed in Input only, at most once.</t>
</li>
<li><t>Parameters: the parameters of the operation, listed in the same form as Input Data Elements. It is allowed in Input only, at most once.</t>
</li>
</ul>
<t>For example:</t>

<artwork><![CDATA[* Input:
  * Reference: Owner Data Object
  * Object: Transfer Process Object
* Output:
  * Object: Transfer Process Object
]]></artwork>
</section>

<section anchor="include-elements"><name>Include Elements</name>
<t>The <tt>includeElements</tt> parameter is defined for every operation whose output contains one or more objects, including, but not limited to, the Uniform Interface operations and the operations of Process Objects. It allows a client to request specific data elements to be included in the operation output in addition to those included by default. Individual operation definitions do not repeat it.</t>

<ul spacing="compact">
<li><t>Include Elements</t>

<ul spacing="compact">
<li>Identifier: includeElements</li>
<li>Cardinality: 0-1</li>
<li>Data Type: String</li>
<li>Description: A comma-separated list of Identifiers of data elements that the client requests to be included in the operation output.</li>
<li>Constraints: Each list item is the Identifier of a top-level data element of the object or objects returned by the operation. Data elements nested within component objects or other associated objects cannot be listed. Identifiers are case-sensitive. The list contains no whitespace.</li>
</ul></li>
</ul>
<t>A listed Identifier refers to the data element as a whole. For a data element with a cardinality of <tt>0+</tt>, <tt>1+</tt>, or <tt>X-Y</tt>, it refers to the entire collection of values, and individual values cannot be selected. For a data element whose Data Type is a component object or an association, it refers to the complete associated object or objects.</t>
<t>The server processes this data element as follows:</t>

<ul spacing="compact">
<li>If <tt>includeElements</tt> is absent, the server MUST NOT include any data element with <tt>onDemand</tt> Visibility in the output.</li>
<li>If a listed Identifier is not the Identifier of a top-level data element defined for the returned object, including data elements defined by extensions not supported by the server, the server MUST reject the request with an error.</li>
<li>For each listed Identifier, the server MUST include the referenced data element in the output if it is present on the object and the client is authorised to view it. Otherwise the element is omitted without an error.</li>
</ul>
<t>Listing a data element that is already included in the output by default has no effect. The parameter thereby remains applicable where an operation or a representation defines an output that omits some elements by default.</t>
</section>

<section anchor="uniform-interface"><name>Uniform interface</name>
<t>For the Create, Read, Query, Update and Delete operations of a Data Object, the following Input and Output apply, using the notation defined in <xref target="operation-io"></xref>. An operation definition that declares its own Input or Output attribute replaces the corresponding default.</t>

<section anchor="create"><name>Create</name>

<ul spacing="compact">
<li><t>Input:</t>

<ul spacing="compact">
<li>Object: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: This Object</li>
</ul></li>
</ul>
</section>

<section anchor="read"><name>Read</name>

<ul spacing="compact">
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: This Object</li>
</ul></li>
</ul>
<t>The output Object MAY vary depending on the identity of the querying client, use of Object Authorisation information, and server policy towards unauthorised clients.</t>
<t>If the querying client is the sponsoring client, all available information MUST be returned, except data elements with <tt>onDemand</tt> Visibility not requested using <tt>includeElements</tt> (see <xref target="include-elements"></xref>).</t>
<t>If the querying client is not the sponsoring client but the client provides valid Object Authorisation information, all available information SHOULD be returned, however some optional elements MAY be reserved to the sponsoring client only.</t>
<t>If the querying client is not the sponsoring client and the client does not provide valid Object Authorisation information, server policy determines which OPTIONAL elements are returned, if any, or whether the entire request is rejected.</t>
</section>

<section anchor="query"><name>Query</name>

<ul spacing="compact">
<li>Input: (None)</li>
<li><t>Output:</t>

<ul spacing="compact">
<li><t>Object: This Object</t>

<ul spacing="compact">
<li>Cardinality: 0+</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="update"><name>Update</name>

<ul spacing="compact">
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
<li>Object: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: This Object</li>
</ul></li>
</ul>
</section>

<section anchor="delete"><name>Delete</name>

<ul spacing="compact">
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li><t>Object: This Object</t>

<ul spacing="compact">
<li>Cardinality: 0-1</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="uniform-availability"><name>Availability</name>

<ul spacing="compact">
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Base Availability Object</li>
</ul></li>
</ul>
<t>The Availability operation allows a client to determine whether the object identified by the Reference can be created using the Create operation at the time of the request. The referenced object does not need to exist. The operation does not create, reserve, or otherwise change the state of any object.</t>
<t>A Data Object that supports the Availability operation declares as its Output an Availability Object that extends the Base Availability Object (see <xref target="availability"></xref>).</t>
<t>Extensions MAY add parameters that further specify the check and data elements to the Availability Objects.</t>
</section>
</section>

<section anchor="offline-review"><name>Offline Review</name>
<t>RPP allows for offline review for operations that change the state of an object (Uniform Interface Create, Update, Delete, and the Renew and Transfer process operations) before the requested action is actually completed. In such situations, the response from the server MUST clearly indicate that the operation has been received, but that the requested action is pending. The state of the corresponding object MUST clearly reflect processing of the pending action, typically through a server-set pending status label (e.g. <tt>pendingCreate</tt>, <tt>pendingUpdate</tt>, <tt>pendingDelete</tt>, <tt>pendingRenew</tt>, <tt>pendingTransfer</tt>). The server MUST also notify the client when offline processing of the action has been completed, by sending a <tt>review-response</tt> message (see <xref target="messages"></xref>).</t>
</section>

<section anchor="operations-beyond-uniform-interface"><name>Operations Beyond Uniform Interface</name>
<t>For all other operations both input and output have to be fully specified.</t>
</section>

<section anchor="transfer-operations"><name>Transfer Operations</name>
<t>Transfer operations manage the change of sponsorship of a provisioned object from one client (the sponsoring client) to another (the gaining client). They are specified once in this section as the transfer model is common across all transferable resource objects. Individual object definitions reference this section and specify any object-specific extensions to the common pattern.</t>
<t>RPP supports two types of transfer:</t>

<ul spacing="compact">
<li>Pull Transfer: Initiated by the gaining client. The gaining client MUST provide valid Object Authorisation to initiate the request.</li>
<li>Push Transfer: Initiated by the sponsoring client, who designates a gaining client in the request.</li>
</ul>
<t>The transfer process MAY be immediate or follow a multi-step workflow depending on server policy. If the server implements immediate transfers, the Approve and Reject operations need not be supported; the server completes the transfer upon receipt of the Create operation.</t>
<t>The server MAY implement local policies to prevent transfers from stalling and implement a form of automated transfer escalation, approval or cancellation when such a stalled process is recognised.</t>
<t>All transfer operations act on or return the Transfer Process Object and are executed in the context of the Owner Data Object the operation is created upon.</t>
<t>If the server does not directly approve a pull transfer request and the current sponsoring client first approve the transfer request, the server MUST wait for the sponsoring client's decision before proceeding. If the sponsoring client approves, the server completes the transfer; if the sponsoring client rejects, the server cancels the transfer. The server MUST send a <tt>transfer-request</tt> message to the sponsoring client. For a pending push transfer, the server MUST send a <tt>transfer-request</tt> message to the designated gaining client that must act on it. If the server directly approves a transfer, it MUST send a <tt>transfer-outcome</tt> message to the client managing the object before the transfer. When a transfer is resolved after the currently managing client's decision, the server MUST send a <tt>transfer-outcome</tt> message to the requesting client.</t>

<section anchor="transfer-messages"><name>Transfer Messages</name>
<t>The <eref target="#fig-pull-transfer-direct-approval">Pull Transfer Direct Approval Message Diagram</eref> illustrates the sequence of messages exchanged during a pull transfer with direct approval. The <eref target="#fig-pull-transfer-pending-approval">Pull Transfer Pending Approval Message Diagram</eref> illustrates the sequence of messages exchanged during a pull transfer that requires approval.
The <eref target="#fig-push-transfer">Push Transfer Message Diagram</eref> illustrates the sequence of messages exchanged during a push transfer.</t>
<t>For a pull transfer, the requesting client is the gaining client; for a push transfer, the requesting client is the sponsoring client. The messages in the diagrams are surrounded by square brackets to indicate message types.</t>
<t>Pull transfer (direct approval):</t>
<figure anchor="fig-pull-transfer-direct-approval"><name>Pull Transfer Direct Approval Message  </name>
<sourcecode type="ascii"><![CDATA[   Gaining Client              Server                Sponsoring Client
         |                       |                          |
         |--- transferCreate --->|                          |
         |                       |                          |
         |                  Direct approval                 |
         |                       |--- [transfer-outcome] -->|
         |                       |                          |
]]></sourcecode>
</figure>
<t>Pull transfer (pending approval):</t>
<figure anchor="fig-pull-transfer-pending-approval"><name>Pull Transfer Pending Approval Message </name>
<sourcecode type="ascii"><![CDATA[   Gaining Client                Server                Sponsoring Client
         |                         |                          |
         |--- transferCreate ----->|                          |
         |                         |                          |
         |                         |                          |
         |                    Pending approval                |
         |                         |--- [transfer-request] -->|
         |                         |<-- approve / reject -----|
         |<-- [transfer-outcome] --|                          |
]]></sourcecode>
</figure>
<t>Push transfer:</t>
<figure anchor="fig-push-transfer"><name>Push Transfer Message Diagram </name>
<sourcecode type="ascii"><![CDATA[  Sponsoring Client               Server                 Gaining Client
         |                         |                           |
         |--- transferCreate ----->|                           |
         |                         |--- [transfer-request] --->|
         |                         |<-- approve / reject ------|
         |<-- [transfer-outcome] --|                           |
]]></sourcecode>
</figure>

<aside><t>TODO: Transfer-specific error conditions (object not eligible for transfer, object pending transfer, object not pending transfer) are not defined in this document.</t>
</aside>
</section>
</section>

<section anchor="restore-ops"><name>Restore Operations</name>
<t>Restore operations manage the recovery of an object that has entered the Redemption Grace Period (RGP). They are OPTIONAL and are only available when the RGP feature is supported by the server and MAY be supported only for a subset of Data Object types.</t>
<t>The RGP process MAY involve two distinct steps:</t>

<ul spacing="compact">
<li>Restore Request: (REQUIRED) Initiates the recovery of an object in the <tt>rgpRedemptionPeriod</tt> state, signalling to the registry the intent to restore. This corresponds to the Create operation on the Restore Process Object. On success, the object transitions to <tt>rgpPendingRestore</tt>.</li>
<li>Restore Report: (OPTIONAL) Submits a report documenting the circumstances of the deletion and restoration, as required by registry policy. This corresponds to the Update operation on the Restore Process Object. On success, the object is returned to its pre-deletion status and all RGP status labels are removed.</li>
</ul>
<t>Whether a restore report is required after a restore request is a matter of server policy. If the server does not require a restore report, the object returns to its pre-deletion status immediately upon a successful Create operation, bypassing the <tt>rgpPendingRestore</tt> state.</t>
<t>The Create operation MAY include the restore report, provided as the <tt>restoreReport</tt> data element, to complete both steps atomically in a single operation.</t>
<t>All restore operations act on or return the Restore Process Object and are executed in the context of the Owner Data Object the operation is created upon.</t>
</section>

<section anchor="renew-ops"><name>Renew Operations</name>
<t>Renew operations manage the validity period of a provisioned object. They are specified once in this section as the renewal model is common across all renewable resource objects. Individual object definitions reference this section and specify any object-specific extensions to the common pattern.</t>
</section>
</section>

<section anchor="epp-compatibility-profile"><name>EPP Compatibility Profile</name>
<t>RPP is designed to coexist with the Extensible Provisioning Protocol (EPP), often operating in parallel against a common backend provisioning system. While RPP is not inherently constrained by all of EPP's requirements, a specific set of rules is necessary to ensure seamless interoperability in such mixed environments.</t>
<t>To address this, this document defines an &quot;EPP Compatibility Profile&quot;. This profile specifies a set of additional constraints on RPP data objects and operations that a server MUST adhere to when supporting both RPP and EPP concurrently.</t>
<t>Throughout this document, all constraints that are part of this profile are explicitly marked with a reference to &quot;EPP Compatibility Profile&quot;. Implementers of systems in a mixed EPP/RPP environment MUST follow these specific constraints in addition to the base RPP requirements.</t>
</section>
</section>

<section anchor="internationalized-domain-names-idn"><name>Internationalized Domain Names (IDN)</name>
<t>Internationalized Domain Names (IDN) are domain names that include one or more non-ASCII characters. IDNs are represented in the Domain Name System (DNS) using ASCII Compatible Encoding (ACE), commonly known as Punycode. This allows the DNS to handle Unicode domain names while maintaining compatibility with the existing ASCII-based infrastructure.</t>
</section>

<section anchor="profiles"><name>Profiles</name>
<t>A profile is a named set of protocol features and versions that are used to define the compatibility and capabilities of RPP server implementations, allowing for better interoperability between different implementations. Using profiles helps to simplify the implementation and deployment of RPP by providing a clear and concise way for the client and server to communicate their capabilities and requirements.</t>
<t>A profile is identified by a unique name and may be published as a standard profile in the IANA registry for RPP profiles, to promote interoperability and standardisation across implementations. Standard profile names MUST use the RPP URN namespace defined in this document, for example: <tt>urn:ietf:params:rpp:profile:{profile_name}</tt>. The profile name MUST be unique within the RPP URN namespace and SHOULD be descriptive of the features and versions included in the profile.</t>
<t>A profile can also be defined as a private profile, which is not published in the IANA registry, but is used by specific server implementations only. A private profile can be defined by a server operator to specify the features and versions supported by their implementation. If the profile is not published in the IANA registry, then the server operator MUST ensure that the profile name is globally unique to avoid conflicts with other profiles, the use of reverse domain name notation is RECOMMENDED for private profiles to ensure uniqueness.</t>

<section anchor="inheritance-1"><name>Inheritance</name>
<t>A profile can include another profile, which is referred to as &quot;inheriting&quot; from that profile. When a profile inherits from another profile, it means that the features and versions defined in the inherited profile are also included in the inheriting profile. This allows for the creation of more complex profiles by building upon existing profiles. For example, a profile named &quot;example-profile&quot; could inherit from a base profile named &quot;base-profile&quot;, which includes a set of common features and versions. The &quot;example-profile&quot; could then add additional features and versions on top of the ones defined in the base profile, or it can override some of the features and versions from the base profile. This allows for greater flexibility and modularity in defining profiles, as well as promoting reuse of common features and versions across different profiles. However, it is important to note that the use of inheritance in profiles can also make things more complicated, as it can create dependencies between profiles and make it harder to understand the features and versions included in a profile. Therefore, it is recommended to use inheritance with caution and to clearly document the relationships between profiles. The depth of inheritance MUST be limited to 1 to prevent excessive complexity, and profile designers MUST NOT create circular dependencies between profiles, where a profile inherits from itself directly.</t>
</section>
</section>

<section anchor="messages"><name>Messages</name>
<t>Messages are used to communicate events, requests, and responses between clients and the server. They provide a mechanism for notifying clients about changes in the state of objects, the outcome of operations, and other relevant information.</t>
<t>For a message reporting completion of an offline review, the server MUST send a <tt>review-response</tt> message to each client involved in the transaction when the requested action has been completed and the pending status has been removed.</t>
<t>The server can send <tt>transfer-outcome</tt>, <tt>expiration-deletion</tt>, and <tt>auto-renewal</tt> messages to clients affected by those events. The <tt>service-notice</tt> conveys operational information to all clients. Extensions should use the <tt>Base Message Object</tt> as the foundation for defining new message types for notifications of changes to Data Objects.</t>
</section>

<section anchor="external-data-types"><name>External Data Types</name>
<t>The RPP object model is designed to be extensible and interoperable with existing standards. To reduce redundancy and improve consistency, RPP data objects MAY incorporate data types and structures defined in external specifications rather than redefining equivalent types within this specification.</t>
<t>An external data type is any type, structure, or format that is normatively defined in a separate standards document and referenced by this specification. When an external data type is used, RPP implementations MUST conform to the semantics, constraints, and encoding rules defined in the originating specification.</t>

<section anchor="referencing-external-data-types"><name>Referencing External Data Types</name>
<t>When this document or any RPP specification references an external data type, the reference MUST follow the requirements and guidelines for references described in <xref target="RFC2026"></xref>. The reference MUST include a clear description of the specific type or structure being used. For example, if referencing the JSContact format defined in <xref target="RFC9553"></xref>, the reference should specify that the <tt>Card</tt> data type is being used.
The reference MUST use the following format: <tt>External:&lt;specification-identifier&gt;:&lt;type-name&gt;</tt>. For example, <tt>External:RPP-JSContact-Profile:Card</tt> indicates that the <tt>Card</tt> type from the RPP JSContact Profile specification is being used. The syntax for the reference is defined using ABNF <xref target="RFC5234"></xref> as follows:</t>

<artwork><![CDATA[identifier = "External:" TYPEID ":" TYPEID

TYPEID = ALPHA *( ALPHA / DIGIT / "-" / "_" ) ( ALPHA / DIGIT )
]]></artwork>
</section>

<section anchor="versioning-and-compatibility"><name>Versioning and Compatibility</name>
<t>External data types are versioned by the specification that defines them. The RPP specifications are pinned to a single version of an external type.
If a newer version updates the defining specification, the RPP specification MUST be updated to indicate explicit support.</t>
</section>

<section anchor="jscontact"><name>JSContact</name>
<t>This specification references the RPP JSContact Profile for RPP defined in <xref target="I-D.wullink-rpp-jscontact-profile"></xref> as an external specification for representing contact information. The JSContact <tt>Card</tt> data type defined in <xref target="RFC9553"></xref> MUST be used for the representation of contact information. When referring to this type the following values MUST be used in the Data Type reference identifiers:</t>

<dl spacing="compact">
<dt>specification-identifier:</dt>
<dd>RPP-JSContact-Profile</dd>
<dt>type-name:</dt>
<dd>Card</dd>
<dt>Data Type:</dt>
<dd>External:RPP-JSContact-Profile:Card</dd>
</dl>
</section>
</section>

<section anchor="common-data-types"><name>Common Data Types</name>
<t>This section defines new shared data types and structures that are re-used across multiple data object definitions and are based on the existing Primitive Data Types.</t>

<section anchor="identifier"><name>Identifier</name>
<t>Identifiers are character strings with a specified minimum length, a specified maximum length, and a specified format outlined in <xref target="RFC5730" sectionFormat="of" section="2.8"></xref>. Identifiers for certain object types MAY have additional constraints imposed either by server policy, object-specific specifications or both.</t>
</section>

<section anchor="client-identifier"><name>Client Identifier</name>
<t>Client identifiers are character strings with a specified minimum length, a specified maximum length, and a specified format. Client identifiers use the &quot;clIDType&quot; client identifier syntax described in <xref target="RFC5730"></xref>.</t>

<aside><t>TBC: do we need this or is it a relation with an entity/RFC8543 organisation? If registrars are modelled as first class objects (organisations), then clID is nothing else but a reference to this organisation, so maybe no need to define syntax separately on identifier level (or in other words it would be defined on this object). R8.1 in the form of -02 RPP requirements includes RFC8543.</t>
</aside>
</section>

<section anchor="phone-number"><name>Phone Number</name>
<t>Telephone number syntax is derived from structures defined in <xref target="ITU.E164.2005"></xref>.  Telephone numbers described in this specification are character strings that MUST begin with a plus sign (&quot;+&quot;, ASCII value 0x002B), followed by a country code defined in <xref target="ITU.E164.2005"></xref>, followed by a dot (&quot;.&quot;, ASCII value 0x002E), followed by a sequence of digits representing the telephone number.  An optional &quot;x&quot; (ASCII value 0x0078) separator with additional digits representing extension information can be appended to the end of the value.</t>
</section>
</section>

<section anchor="associations"><name>Associations</name>
<t>RPP allows for different types of associations (relationships) between the objects. The association may be added between 2 objects with own independent lifecycle (UML aggregation) or in the relation when one object's existence and lifecycle is bound to the other parent/owner object (UML composition).
In both cases, especially if the relation allows for cardinality higher than one on either side, the association may be assigned additional attributes, not being part of an object on either side of relation. In many cases such relation would be attributed with a single text string label, describing a role or a type of relation. Depending on the context this value might be unique, which allows using such label as a key in a dictionary.</t>
<t>The following generic Association Types are defined for RPP:</t>

<section anchor="aggregation"><name>Aggregation</name>
<t>Notation: Aggregation[Type]</t>
<t>A relation between two independent objects.</t>
<t>If the cardinality of the target object is more than 1, this represents an unordered array.</t>
<t>The target object of an aggregation MUST already exist when the association is created. The target object MAY be only partially visible to the client, or not visible at all, for example when it is managed by the server or by another client and the client only knows its identifier. Limited visibility of the target object does not prevent the client from using it in the association. This rule also applies to Labelled Aggregation and Dictionary Aggregation.</t>
<t>Example aggregation having cardinality 1:</t>

<sourcecode type="ascii"><![CDATA[+-------------------+
|   (root parent)   |
|-------------------|
| foo:              |
|   |         +----------+
|   +-------- | [Object] |
|             |    ...   |
|             +----------+
+-------------------+
]]></sourcecode>
<t>Example aggregation having cardinality &gt;1:</t>

<sourcecode type="ascii"><![CDATA[+-------------------+
|   (root parent)   |
|-------------------|
| foo:              |
|   +-----[0] +----------+
|   |         | [Object] |
|   |         |    ...   |
|   |         +----------+
|   +-----[1] +----------+
|             | [Object] |
|             |    ...   |
|             +----------+
|         ...       |
+-------------------+
]]></sourcecode>
</section>

<section anchor="composition"><name>Composition</name>
<t>Notation: Type</t>
<t>A relation between an independent parent object and 1 or more dependent child object(s).</t>
<t>If the cardinality of the target object is more than 1, this represents an unordered array.</t>
<t>Example composition having cardinality 1:</t>

<sourcecode type="ascii"><![CDATA[+-------------------+
|      (root)       |
|-------------------|
| foo:              |
|   |  +-------+    |
|   +--| ...   |    |
|      +-------+    |
+-------------------+
]]></sourcecode>
<t>Example composition having cardinality &gt;1:</t>

<sourcecode type="ascii"><![CDATA[+-------------------+
|      (root)       |
|-------------------|
| foo:              |
|   +-[0] +-------+ |
|   |     | ...   | |
|   |     +-------+ |
|   +-[1] +-------+ |
|   |     | ...   | |
|   |     +-------+ |
|   ...             |
+-------------------+
]]></sourcecode>
</section>

<section anchor="labelled-aggregation"><name>Labelled Aggregation</name>
<t>Notation: LabelledAggregation[Type]</t>
<t>A relation between two independent objects with a single text string attribute. Multiple associations with the same label are allowed and represent an unordered array.</t>
<t>A type defining such association MUST define Label Description with semantics of the label and Label Constraints with constraints related to the label.</t>
<t>Example labelled aggregation:</t>

<sourcecode type="ascii"><![CDATA[+--------------------------------+
|             (root)             |
|--------------------------------|
| foo:                           |
|   |                            |
|   +---("label_A")--->  +----------+
|   |                    | [Object] |
|   |                    |   ...    |
|   |                    +----------+
|   +---("label_B")--->  +----------+
|   |                    | [Object] |
|   |                    |   ...    |
|   |                    +----------+
|   +---("label_A")--->  +----------+
|   |  (labels repeat)   | [Object] |
|   |                    |   ...    |
|   |                    +----------+
|   ...                          |
+--------------------------------+

]]></sourcecode>
</section>

<section anchor="dictionary-aggregation"><name>Dictionary Aggregation</name>
<t>Notation: DictionaryAggregation[Type]</t>
<t>A relation between two independent objects with a single text string attribute. Association labels MUST be unique, allowing them to be used as dictionary keys.</t>
<t>A type defining such association MUST define Label Description with semantics of the label and Label Constraints with constraints related to the label.</t>
<t>Example Dictionary Aggregation:</t>

<sourcecode type="ascii"><![CDATA[+--------------------------+
|         (root)           |
|--------------------------|
| foo:                     |
|   "key1" ->       +-----------+
|                   | [Object]  |
|                   |   ...     |
|                   +-----------+
|   "key2" ->       +-----------+
|                   | [Object]  |
|                   |   ...     |
|                   +-----------+
|     ...                  |
+--------------------------+
]]></sourcecode>
</section>

<section anchor="labelled-composition"><name>Labelled Composition</name>
<t>Notation: LabelledComposition[Type]</t>
<t>A relation between an independent parent object and a dependent child object with a single text string attribute. Multiple associations with the same label are allowed.</t>
<t>A type defining such association MUST define Label Description with semantics of the label and Label Constraints with constraints related to the label.</t>
<t>Example Labelled Composition:</t>

<sourcecode type="ascii"><![CDATA[+-------------------------------------+
|        (root parent)                |
|-------------------------------------|
| foo:                                |
|   |                                 |
|   +---("label_A")--->  +----------+ |
|   |                    | [Child]  | |
|   |                    |   ...    | |
|   |                    +----------+ |
|   +---("label_B")--->  +----------+ |
|   |                    | [Child]  | |
|   |                    |   ...    | |
|   |                    +----------+ |
|   +---("label_A")--->  +----------+ |
|   |  (labels repeat)   | [Child]  | |
|   |                    |   ...    | |
|   |                    +----------+ |
|   ...                               |
+-------------------------------------+
]]></sourcecode>
</section>

<section anchor="dictionary-composition"><name>Dictionary Composition</name>
<t>Notation: DictionaryComposition[Type]</t>
<t>A relation between an independent parent object and a dependent child object with a single text string attribute. Only a single association with the same label is allowed, allowing it to be used as a dictionary key.</t>
<t>A type defining such association MUST define Label Description with semantics of the label and Label Constraints with constraints related to the label.</t>
<t>Example Dictionary Composition:</t>

<sourcecode type="ascii"><![CDATA[+--------------------------+
|         (root)           |
|--------------------------|
| foo:                     |
|   "key1" -> +---------+  |
|             | [Child] |  |
|             |   ...   |  |
|             +---------+  |
|   "key2" -> +---------+  |
|             | [Child] |  |
|             |   ...   |  |
|             +---------+  |
|     ...                  |
+--------------------------+
]]></sourcecode>
</section>
</section>

<section anchor="component-objects"><name>Component Objects</name>
<t>This section defines the Component Objects used in this document.</t>

<section anchor="period-object"><name>Period Object</name>

<ul spacing="compact">
<li>Name: Period Object</li>
<li>Identifier: period</li>
<li>Description: Represents a duration of time.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Value</t>

<ul spacing="compact">
<li>Identifier: value</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: Integer</li>
<li>Description: The numeric value of the period.</li>
<li>Constraints: The value MUST be from 1 to 99, inclusive.</li>
</ul></li>
<li><t>Unit</t>

<ul spacing="compact">
<li>Identifier: unit</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: The unit of the period.</li>
<li>Constraints: The value MUST be one of: &quot;y&quot; (years) or &quot;m&quot; (months).</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="provisioning-metadata-object"><name>Provisioning Metadata Object</name>

<ul spacing="compact">
<li>Name: Provisioning Metadata Object</li>
<li>Identifier: provMetadata</li>
<li>Description: Contains standard metadata about the lifecycle and ownership of a provisioned object. This metadata is common across all resource objects in the registry system.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Repository ID</t>

<ul spacing="compact">
<li>Identifier: repositoryId</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Identifier</li>
<li>Description: A server-assigned unique identifier for the object.</li>
<li>Constraints: In EPP Compatibility Profile this data element MUST be provided.</li>
</ul></li>
<li><t>Sponsoring Client ID</t>

<ul spacing="compact">
<li>Identifier: spClientId</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Client Identifier</li>
<li>Description: The identifier of the client that is the current sponsor of the object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Creating Client ID</t>

<ul spacing="compact">
<li>Identifier: crClientId</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Client Identifier</li>
<li>Description: The identifier of the client that created the object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Creation Date</t>

<ul spacing="compact">
<li>Identifier: crDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time of object creation.</li>
<li>Constraints: The value is set by the server and cannot be specified by the client.</li>
</ul></li>
<li><t>Updating Client ID</t>

<ul spacing="compact">
<li>Identifier: upClientId</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Client Identifier</li>
<li>Description: The identifier of the client that last updated the object.</li>
<li>Constraints: This element MUST NOT be present if the object has never been modified.</li>
</ul></li>
<li><t>Update Date</t>

<ul spacing="compact">
<li>Identifier: upDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time of the most recent object modification.</li>
<li>Constraints: This element MUST NOT be present if the object has never been modified.</li>
</ul></li>
<li><t>Transfer Date</t>

<ul spacing="compact">
<li>Identifier: trDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time of the most recent successful object transfer.</li>
<li>Constraints: This element MUST NOT be provided if the object has never been transferred.</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="domain-name-status-object"><name>Domain Name Status Object</name>

<ul spacing="compact">
<li>Name: Domain Name Status Object</li>
<li>Identifier: domainStatus</li>
<li>Description: Represents one of the status values associated with a Domain Name Data Object</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Label</t>

<ul spacing="compact">
<li>Identifier: label</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: machine-readable enum label of a status</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Only status values defined in <eref target="#domain-status-values">Domain Status Values</eref> and <eref target="#rgp-status-values">Redemption Grace Period Status Values</eref> are allowed.</li>
</ul></li>
</ul></li>
<li><t>Reason</t>

<ul spacing="compact">
<li>Identifier: reason</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: a human-readable text that describes the rationale for the status applied to the object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Due</t>

<ul spacing="compact">
<li>Identifier: due</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Timestamp</li>
<li>Description: a timestamp, when this status is going to be removed automatically, or changed to other status. This field can be used to express lifecycle related information.</li>
<li>Constraints: servers MAY restrict possibility to set or update this value by the client.</li>
</ul></li>
</ul></li>
</ul>

<section anchor="domain-status-values"><name>Status Values</name>
<t>Status values that can be added or removed by a client are prefixed
with &quot;client&quot;.  Corresponding status values that can be added or
removed by a server are prefixed with &quot;server&quot;.  Status values that
do not begin with either &quot;client&quot; or &quot;server&quot; are server-managed. Status values that begin with &quot;rgp&quot; are related to the Redemption Grace Period (RGP) and are also server-managed. A client MUST NOT alter status values set by the server. A server MAY alter or override status values set by a client, subject to local server policies.</t>
<t>The Set By column identifies the entity that adds and removes each status value: <tt>client</tt>, <tt>server</tt>, or <tt>client, server</tt> for a value that the server manages and that a client can also manage where server policy permits. A server MUST assign at least one status value to the object. A client is not required to provide a status value when creating or updating the object.</t>
<table anchor="tbl-domain-status-values"><name>Domain Name Status Values</name>
<thead>
<tr>
<th>Status Value</th>
<th>Set By</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>clientDeleteProhibited</td>
<td>client</td>
<td>Requests to delete the object MUST be rejected.</td>
</tr>

<tr>
<td>serverDeleteProhibited</td>
<td>server</td>
<td>Requests to delete the object MUST be rejected.</td>
</tr>

<tr>
<td>clientHold</td>
<td>client</td>
<td>DNS delegation information MUST NOT be published for the object.</td>
</tr>

<tr>
<td>serverHold</td>
<td>server</td>
<td>DNS delegation information MUST NOT be published for the object.</td>
</tr>

<tr>
<td>clientRenewProhibited</td>
<td>client</td>
<td>Requests to renew the object MUST be rejected.</td>
</tr>

<tr>
<td>serverRenewProhibited</td>
<td>server</td>
<td>Requests to renew the object MUST be rejected.</td>
</tr>

<tr>
<td>clientTransferProhibited</td>
<td>client</td>
<td>Requests to transfer the object MUST be rejected.</td>
</tr>

<tr>
<td>serverTransferProhibited</td>
<td>server</td>
<td>Requests to transfer the object MUST be rejected.</td>
</tr>

<tr>
<td>clientUpdateProhibited</td>
<td>client</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
</tr>

<tr>
<td>serverUpdateProhibited</td>
<td>server</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
</tr>

<tr>
<td>inactive</td>
<td>server</td>
<td>Delegation information has not been associated with the object. This is the default status when a domain object is first created and there are no associated host objects for the DNS delegation. This status can also be set by the server when all host-object associations are removed.</td>
</tr>

<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for an object that has no pending operations or prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
</tr>

<tr>
<td>pendingCreate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingRenew</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingTransfer</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>
</tbody>
</table></section>

<section anchor="allowed-transitions"><name>Allowed Transitions</name>
<t>The following diagram describes the allowed status transitions for a domain object, excluding the &quot;rgp&quot; status values, which follow the separate Redemption Grace Period State Diagram below. The <tt>clientHold</tt>, <tt>serverHold</tt>, <tt>clientDeleteProhibited</tt>, <tt>serverDeleteProhibited</tt>, <tt>clientRenewProhibited</tt>, <tt>serverRenewProhibited</tt>, <tt>clientTransferProhibited</tt>, <tt>serverTransferProhibited</tt>, <tt>clientUpdateProhibited</tt>, and <tt>serverUpdateProhibited</tt> status values are additive flags that MAY be combined with the states shown below (subject to the Status Exclusions rules) and are not depicted as separate states; while present, the corresponding flag blocks the associated transition (delete, renew, transfer, or update, respectively) from being initiated.</t>
<figure><name>Domain Object State Diagram
</name>
<sourcecode type="ascii"><![CDATA[                                       |
                                       v
                      +-----------------------------------+
                      |     status: pendingCreate       (1)|
                      +-----------------------------------+
                                       |
                         create action completed (2)
                                       v
                      +-----------------------------------+
         +----------->|     status: ok / inactive       (3)|<-----------+
         |            +-----------------------------------+             |
         |              |            |             |                    |
         |     <update> | <renew>    | <transfer                        |
         |         (4)  |    (5)     |  create> (6)                     |
         |              v            v             v                    |
         |  +-------------+  +-------------+  +--------------------+    |
         |  |   status:   |  |   status:   |  |     status:        |    |
         |  |pendingUpdate|  |pendingRenew |  |  pendingTransfer   |    |
         |  |         (4) |  |         (5) |  |                 (6)|    |
         |  +-------------+  +-------------+  +--------------------+    |
         |         |                |                    |              |
         |         +----------------+--------------------+              |
         |                action completed (7)                          |
         +--------------------------------------------------------------+

                      +-----------------------------------+
                      |     status: ok / inactive      (3)|
                      +-----------------------------------+
                                       |
                                 <delete> (8)
                                       v
                      +-----------------------------------+
                      |     status: pendingDelete      (8)|
                      +-----------------------------------+
                            |                         |
              no RGP support (9)             RGP support (9)
                            v                         v
                 +------------------+   +-----------------------------------+
                 | Deleted (purged) |   |  status: pendingDelete +           |
                 |             (10) |   |  rgpRedemptionPeriod               |
                 +------------------+   |  (see Redemption Grace Period      |
                                        |  State Diagram below)          (10)|
                                        +-----------------------------------+
]]></sourcecode>
</figure>
<t>State descriptions:</t>

<ol spacing="compact">
<li>A create operation is received and processed. If the server defers completion, the object enters <tt>pendingCreate</tt> state.</li>
<li>The create action completes. The object transitions to <tt>ok</tt> if one or more nameservers are associated with the domain, or to <tt>inactive</tt> if none are associated.</li>
<li>The object is in normal operation, either as <tt>ok</tt> (nameservers associated) or <tt>inactive</tt> (no nameservers associated). The object toggles between these two sub-states as nameserver associations are added to or removed from the domain, independently of the transitions described below.</li>
<li>An update operation is received. If the server defers completion, the object enters <tt>pendingUpdate</tt> state.</li>
<li>A renew operation is received to extend the domain's registration period. If the server defers completion, the object enters <tt>pendingRenew</tt> state.</li>
<li>A transfer Create operation is received, initiating a transfer request. The object enters <tt>pendingTransfer</tt> state while the request awaits approval, rejection, or automated server action.</li>
<li>Once the pending update, renew, or transfer action completes, the corresponding pending status is removed and the object returns to its <tt>ok</tt> or <tt>inactive</tt> state, as determined by its current nameserver associations.</li>
<li>A delete operation is received and processed. The object enters <tt>pendingDelete</tt> state.</li>
<li>Whether RGP is supported for the domain determines the next transition upon completion of the pending delete action.</li>
<li>If RGP is not supported, the object is purged once the delete action completes. If RGP is supported, the object instead continues into the <tt>rgpRedemptionPeriod</tt> state, following the <eref target="#fig-rgp-state-diagram">Redemption Grace Period State Diagram</eref> below.</li>
</ol>
</section>

<section anchor="pending-status-removal"><name>Pending Status Removal</name>
<t>When the requested action has been completed, the pendingCreate,
pendingDelete, pendingRenew, pendingTransfer, or pendingUpdate status
value MUST be removed.  All clients involved in the transaction MUST
be notified using a service message that the action has been
completed and that the status of the object has changed.</t>
</section>

<section anchor="status-exclusions"><name>Status Exclusions</name>
<table anchor="tbl-status-exclusions"><name>Status Exclusions</name>
<thead>
<tr>
<th>Status Value</th>
<th>MUST NOT be combined with</th>
</tr>
</thead>

<tbody>
<tr>
<td>ok</td>
<td>Any other status</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>clientDeleteProhibited, serverDeleteProhibited</td>
</tr>

<tr>
<td>pendingRenew</td>
<td>clientRenewProhibited, serverRenewProhibited</td>
</tr>

<tr>
<td>pendingTransfer</td>
<td>clientTransferProhibited, serverTransferProhibited</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>clientUpdateProhibited, serverUpdateProhibited</td>
</tr>

<tr>
<td>pendingCreate, pendingDelete, pendingRenew, pendingTransfer, pendingUpdate</td>
<td>Each other (mutually exclusive)</td>
</tr>
</tbody>
</table><t>Other status combinations not expressly prohibited MAY be used.</t>
</section>

<section anchor="rgp-status-values"><name>Redemption Grace Period</name>
<t>Status values that begin with &quot;rgp&quot; are related to the Redemption Grace Period (RGP) and are server-managed.</t>
<t>The Set By column identifies the entity that adds and removes each status value: <tt>client</tt>, <tt>server</tt>, or <tt>client, server</tt> for a value that the server manages and that a client can also manage where server policy permits.</t>
<table anchor="tbl-rgp-status-values"><name>Redemption Grace Period Status Values</name>
<thead>
<tr>
<th>Status Value</th>
<th>Set By</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>rgpAddPeriod</td>
<td>server</td>
<td>This grace period is provided after the initial registration of a domain name. If the domain name is deleted by the registrar during this period, the registry provides a credit to the registrar for the cost of the registration.</td>
</tr>

<tr>
<td>rgpAutoRenewPeriod</td>
<td>server</td>
<td>This grace period is provided after a domain name registration period expires and is extended (renewed) automatically by the registry. If the domain name is deleted by the registrar during this period, the registry provides a credit to the registrar for the cost of the renewal.</td>
</tr>

<tr>
<td>rgpRenewPeriod</td>
<td>server</td>
<td>This grace period is provided after a domain name registration period is explicitly extended (renewed) by the registrar. If the domain name is deleted by the registrar during this period, the registry provides a credit to the registrar for the cost of the renewal.</td>
</tr>

<tr>
<td>rgpTransferPeriod</td>
<td>server</td>
<td>This grace period is provided after the successful transfer of domain name registration sponsorship from one registrar to another registrar. If the domain name is deleted by the new sponsoring registrar during this period, the registry provides a credit to the registrar for the cost of the transfer.</td>
</tr>

<tr>
<td>rgpRedemptionPeriod</td>
<td>server</td>
<td>This status value is used to describe a domain for which a delete operation has been received, but the domain has not yet been purged because an opportunity exists to restore the domain and abort the deletion process.</td>
</tr>

<tr>
<td>rgpPendingRestore</td>
<td>server</td>
<td>This status value is used to describe a domain that is in the process of being restored after being in the rgpRedemptionPeriod state.</td>
</tr>

<tr>
<td>rgpPendingDelete</td>
<td>server</td>
<td>This status value is used to describe a domain that has entered the purge processing state after completing the rgpRedemptionPeriod state.  A domain in this status MUST also be in the pendingDelete status described above.</td>
</tr>
</tbody>
</table>
<section anchor="allowed-transitions-1"><name>Allowed Transitions</name>
<t>The following state diagram describes the object lifecycle when the Redemption Grace Period (RGP) feature is supported. It adapts the diagram from <xref target="RFC3915" sectionFormat="of" section="2"></xref> to the RPP data model, using RPP status labels and operations instead of EPP command names.</t>
<t>In the diagram below, each state box shows the values of the <tt>status</tt> data element of the Domain Name Data Object. The values <tt>ok</tt> and <tt>pendingDelete</tt> are defined in <xref target="domain-status-values"></xref>, and the values beginning with &quot;rgp&quot; are defined in <xref target="rgp-status-values"></xref>. The <tt>&lt;delete&gt;</tt> label refers to the Delete operation on the Domain Name Data Object. The <tt>&lt;create&gt;</tt> and <tt>&lt;update&gt;</tt> labels refer to the Create operation (<xref target="restore-create"></xref>) and the Update operation (<xref target="restore-report"></xref>) of the Restore Process Object.</t>
<figure anchor="fig-rgp-state-diagram"><name>Redemption Grace Period State Diagram</name>
<sourcecode type="ascii"><![CDATA[              |                    (2)
              v                   Domain
+----------------------------+   <delete>   +-------------------------------+
| status: ok              (1)|------------->| status: pendingDelete      (3)|
|                            |              |         rgpRedemptionPeriod   |
+----------------------------+              +-------------------------------+
   ^   ^             restore, no report      | ^  |                |
   |   |             and report required  (4)| |  |        No (9)  |
   |   |                 Restore <create>    | |  |       restore  |
   |   |                  +------------------+ |  |                |
   |   |                  v                    |  |                v
   |   |  +------------------+                 |  | +-----------------------+
   |   |  | status:       (6)|                 |  | | status:           (10)|
   |   |  | pendingDelete    |-----------------+  | |   pendingDelete       |
   |   |  | rgpPendingRestore|   report not (7)   | |   rgpPendingDelete    |
   |   |  +------------------+   received         | +-----------------------+
   |   |                (8) |                     |                |
   |   |   report received  |                     |     purge (11) |
   |   |   Restore <update> |    restore (5)      |                v
   |   +--------------------+    with report      | +-----------------------+
   |                             or not req.      | |      Purged       (12)|
   |                             Restore <create> | +-----------------------+
   +----------------------------------------------+
]]></sourcecode>
</figure>
<t>State descriptions:</t>

<ol spacing="compact">
<li>The object is in normal operation (<tt>ok</tt> or other status allowing a delete operation).</li>
<li>A delete operation is received and processed.</li>
<li>RGP begins. The object enters <tt>pendingDelete</tt> + <tt>rgpRedemptionPeriod</tt> state. The object remains here until a restore operation is requested or the redemption period elapses.</li>
<li>A restore Create operation is submitted. The registry accepts the request. Go to step 9 if the redemption period elapses before a restore is received (4a).</li>
<li>If the server does not require a restore report, the object returns to its pre-deletion status (1) immediately upon a successful Create operation. If the server requires a report but the client includes it inline in the Create operation, the server processes both atomically and the object transitions directly from <tt>rgpRedemptionPeriod</tt> to its pre-deletion status (1), bypassing the <tt>rgpPendingRestore</tt> state.</li>
<li>The object enters <tt>pendingDelete</tt> + <tt>rgpPendingRestore</tt> state. The registry awaits a restore report from the sponsoring client.</li>
<li>If no restore report is received within the registry-defined time, the object returns to <tt>rgpRedemptionPeriod</tt> state (step 3).</li>
<li>If a restore report is received and accepted, the object returns to its pre-deletion status and all RGP status labels are removed.</li>
<li>The redemption period elapses without a restore request being received.</li>
<li>The object enters <tt>pendingDelete</tt> + <tt>rgpPendingDelete</tt> state and awaits final purge processing.</li>
<li>The pending delete period elapses and the object is purged.</li>
<li>The object is purged and available for re-registration.</li>
</ol>

<aside><t>TBD: Idea - model status object as Labelled Composition using &quot;Label&quot;? Con: Generic Constraints for Label will be repeated.</t>
</aside>
</section>
</section>
</section>

<section anchor="host-status-object"><name>Host Status Object</name>

<ul spacing="compact">
<li>Name: Host Status Object</li>
<li>Identifier: hostStatus</li>
<li>Description: Represents one of the status values associated with a Host Data Object</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Label</t>

<ul spacing="compact">
<li>Identifier: label</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: machine-readable enum label of a status</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Only status values defined in <eref target="#host-status-values">Status Values</eref> are allowed.</li>
</ul></li>
</ul></li>
<li><t>Reason</t>

<ul spacing="compact">
<li>Identifier: reason</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: a human-readable text that describes the rationale for the status applied to the object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>

<section anchor="host-status-values"><name>Status Values</name>
<t>Status values that can be added or removed by a client are prefixed
with &quot;client&quot;.  Corresponding status values that can be added or
removed by a server are prefixed with &quot;server&quot;.  Status values that
do not begin with either &quot;client&quot; or &quot;server&quot; are server-managed. A client MUST NOT alter status values set by the server. A server MAY alter or override status values set by a client, subject to local server policies.</t>
<t>The Set By column identifies the entity that adds and removes each status value: <tt>client</tt>, <tt>server</tt>, or <tt>client, server</tt> for a value that the server manages and that a client can also manage where server policy permits. A server MUST assign at least one status value to the object. A client is not required to provide a status value when creating or updating the object.</t>
<table anchor="tbl-host-status-values"><name>Host Status Values</name>
<thead>
<tr>
<th>Status Value</th>
<th>Set By</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>clientDeleteProhibited</td>
<td>client</td>
<td>Requests to delete the object MUST be rejected.</td>
</tr>

<tr>
<td>serverDeleteProhibited</td>
<td>server</td>
<td>Requests to delete the object MUST be rejected.</td>
</tr>

<tr>
<td>clientUpdateProhibited</td>
<td>client</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
</tr>

<tr>
<td>serverUpdateProhibited</td>
<td>server</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
</tr>

<tr>
<td>linked</td>
<td>server</td>
<td>The host object has at least one active association with another object, such as a domain object. Servers SHOULD provide services to determine existing object associations.</td>
</tr>

<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for an object that has no pending operations or prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
</tr>

<tr>
<td>pendingCreate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingTransfer</td>
<td>server</td>
<td>A transform command has been processed for the object's superordinate domain object (i.e. a transfer of the domain object is pending), but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>
</tbody>
</table></section>

<section anchor="allowed-transitions-2"><name>Allowed Transitions</name>
<t>The following diagram describes the allowed status transitions for a host object, based on the status values defined in <xref target="RFC5732" sectionFormat="of" section="2.3"></xref>. The <tt>clientDeleteProhibited</tt>, <tt>serverDeleteProhibited</tt>, <tt>clientUpdateProhibited</tt>, and <tt>serverUpdateProhibited</tt> status values are additive flags that MAY be combined with the states shown below (subject to the Status Exclusions rules) and are not depicted as separate states; while present, the corresponding flag blocks the associated transition (delete or update, respectively) from being initiated. The <tt>linked</tt> status is set and removed by the server as associations with other objects are added or removed, independently of the transitions described below.</t>
<figure anchor="fig-host-state-diagram"><name>Host Object State Diagram</name>
<sourcecode type="ascii"><![CDATA[                                |
                                v
              +-----------------------------------+
              | status: pendingCreate         (1) |
              +-----------------------------------+
                                |  create action completed (2)
                                v
              +-----------------------------------+
   +--------->| status: ok                    (3) |<---------+
   |          +-----------------------------------+          |
   |                |                       |                |
   |   <update> (4) | <domain transfer> (5) |                |
   |                v                       v                |
   |       +--------------------+   +--------------------+   |
   |       | status:            |   | status:            |   |
   |       | pendingUpdate  (4) |   | pendingTransfer(5) |   |
   |       +--------------------+   +--------------------+   |
   |                 |                        |              |
   |                 +------------------------+              |
   |                  action completed (6)                   |
   +---------------------------------------------------------+

              +-----------------------------------+
              | status: ok                    (3) |
              +-----------------------------------+
                                |
                                |  <delete> (7)
                                v
              +-----------------------------------+
              | status: pendingDelete         (7) |
              +-----------------------------------+
                                |
                                |  delete action completed (8)
                                v
                       +------------------+
                       | Deleted (purged) |
                       |              (9) |
                       +------------------+
]]></sourcecode>
</figure>
<t>State descriptions:</t>

<ol spacing="compact">
<li>A create operation is received and processed. If the server defers completion, the object enters <tt>pendingCreate</tt> state.</li>
<li>The create action completes and the <tt>pendingCreate</tt> status is removed. The object enters the <tt>ok</tt> state.</li>
<li>The object is in normal operation with the <tt>ok</tt> status. The <tt>linked</tt> status MAY accompany <tt>ok</tt> while the host has an active association with another object, such as a domain object.</li>
<li>An update operation is received. If the server defers completion, the object enters <tt>pendingUpdate</tt> state.</li>
<li>A transfer of the superordinate domain object is initiated. The server sets the <tt>pendingTransfer</tt> status on the subordinate host object while the domain transfer request is pending. This status is not set by a client.</li>
<li>Once the pending update or transfer action completes, the corresponding pending status is removed and the object returns to its <tt>ok</tt> state.</li>
<li>A delete operation is received and processed. The object enters <tt>pendingDelete</tt> state.</li>
<li>The pending delete action completes.</li>
<li>The object is purged.</li>
</ol>
</section>

<section anchor="pending-status-removal-1"><name>Pending Status Removal</name>
<t>When the requested action has been completed, the pendingCreate,
pendingDelete, pendingTransfer, or pendingUpdate status value MUST be
removed. All clients involved in the transaction MUST be notified
using a service message that the action has been completed and that
the status of the object has changed.</t>
</section>

<section anchor="status-exclusions-1"><name>Status Exclusions</name>
<table anchor="tbl-host-status-exclusions"><name>Host Status Exclusions</name>
<thead>
<tr>
<th>Status Value</th>
<th>MUST NOT be combined with</th>
</tr>
</thead>

<tbody>
<tr>
<td>ok</td>
<td>Any status other than <tt>linked</tt></td>
</tr>

<tr>
<td>pendingDelete</td>
<td>clientDeleteProhibited, serverDeleteProhibited</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>clientUpdateProhibited, serverUpdateProhibited</td>
</tr>

<tr>
<td>pendingCreate, pendingDelete, pendingTransfer, pendingUpdate</td>
<td>Each other (mutually exclusive)</td>
</tr>
</tbody>
</table><t>The <tt>linked</tt> status MAY be combined with any status. Other status combinations not expressly prohibited MAY be used.</t>
</section>
</section>

<section anchor="contact-status-object"><name>Contact Status Object</name>

<ul spacing="compact">
<li>Name: Contact Status Object</li>
<li>Identifier: contactStatus</li>
<li>Description: Represents one of the status values associated with a Contact Data Object</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Label</t>

<ul spacing="compact">
<li>Identifier: label</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: machine-readable enum label of a status</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Only status values defined in <eref target="#contact-status-values">Status Values</eref> are allowed.</li>
</ul></li>
</ul></li>
<li><t>Reason</t>

<ul spacing="compact">
<li>Identifier: reason</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: a human-readable text that describes the rationale for the status applied to the object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>

<section anchor="contact-status-values"><name>Status Values</name>
<t>Status values that can be added or removed by a client are prefixed
with &quot;client&quot;.  Corresponding status values that can be added or
removed by a server are prefixed with &quot;server&quot;.  Status values that
do not begin with either &quot;client&quot; or &quot;server&quot; are server-managed. A client MUST NOT alter status values set by the server. A server MAY alter or override status values set by a client, subject to local server policies.</t>
<t>The Set By column identifies the entity that adds and removes each status value: <tt>client</tt>, <tt>server</tt>, or <tt>client, server</tt> for a value that the server manages and that a client can also manage where server policy permits. A server MUST assign at least one status value to the object. A client is not required to provide a status value when creating or updating the object.</t>
<table anchor="tbl-contact-status-values"><name>Contact Status Values</name>
<thead>
<tr>
<th>Status Value</th>
<th>Set By</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>clientDeleteProhibited</td>
<td>client</td>
<td>Requests to delete the object MUST be rejected.</td>
</tr>

<tr>
<td>serverDeleteProhibited</td>
<td>server</td>
<td>Requests to delete the object MUST be rejected.</td>
</tr>

<tr>
<td>clientTransferProhibited</td>
<td>client</td>
<td>Requests to transfer the object MUST be rejected.</td>
</tr>

<tr>
<td>serverTransferProhibited</td>
<td>server</td>
<td>Requests to transfer the object MUST be rejected.</td>
</tr>

<tr>
<td>clientUpdateProhibited</td>
<td>client</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
</tr>

<tr>
<td>serverUpdateProhibited</td>
<td>server</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
</tr>

<tr>
<td>linked</td>
<td>server</td>
<td>The contact object has at least one active association with another object, such as a domain object. Servers SHOULD provide services to determine existing object associations.</td>
</tr>

<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for an object that has no pending operations or prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
</tr>

<tr>
<td>pendingCreate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingTransfer</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>
</tbody>
</table></section>

<section anchor="allowed-transitions-3"><name>Allowed Transitions</name>
<t>The following diagram describes the allowed status transitions for a contact object, based on the status values defined in <xref target="RFC5733" sectionFormat="of" section="2.2"></xref>. The <tt>clientDeleteProhibited</tt>, <tt>serverDeleteProhibited</tt>, <tt>clientTransferProhibited</tt>, <tt>serverTransferProhibited</tt>, <tt>clientUpdateProhibited</tt>, and <tt>serverUpdateProhibited</tt> status values are additive flags that MAY be combined with the states shown below (subject to the Status Exclusions rules) and are not depicted as separate states; while present, the corresponding flag blocks the associated transition (delete, transfer, or update, respectively) from being initiated. The <tt>linked</tt> status is set and removed by the server as associations with other objects are added or removed, independently of the transitions described below.</t>
<figure anchor="fig-contact-state-diagram"><name>Contact Data Object State Diagram</name>
<sourcecode type="ascii"><![CDATA[                                |
                                v
              +-----------------------------------+
              | status: pendingCreate         (1) |
              +-----------------------------------+
                                |  create action completed (2)
                                v
              +-----------------------------------+
   +--------->| status: ok                    (3) |<---------+
   |          +-----------------------------------+          |
   |                |                       |                |
   |   <update> (4) | <transfer create> (5) |                |
   |                v                       v                |
   |       +--------------------+   +--------------------+   |
   |       | status:            |   | status:            |   |
   |       | pendingUpdate  (4) |   | pendingTransfer(5) |   |
   |       +--------------------+   +--------------------+   |
   |                 |                        |              |
   |                 +------------------------+              |
   |                  action completed (6)                   |
   +---------------------------------------------------------+

              +-----------------------------------+
              | status: ok                    (3) |
              +-----------------------------------+
                                |
                                |  <delete> (7)
                                v
              +-----------------------------------+
              | status: pendingDelete         (7) |
              +-----------------------------------+
                                |
                                |  delete action completed (8)
                                v
                       +------------------+
                       | Deleted (purged) |
                       |              (9) |
                       +------------------+
]]></sourcecode>
</figure>
<t>State descriptions:</t>

<ol spacing="compact">
<li>A create operation is received and processed. If the server defers completion, the object enters <tt>pendingCreate</tt> state.</li>
<li>The create action completes and the <tt>pendingCreate</tt> status is removed. The object enters the <tt>ok</tt> state.</li>
<li>The object is in normal operation with the <tt>ok</tt> status. The <tt>linked</tt> status MAY accompany <tt>ok</tt> while the contact has an active association with another object, such as a domain object.</li>
<li>An update operation is received. If the server defers completion, the object enters <tt>pendingUpdate</tt> state.</li>
<li>A transfer Create operation is received for the contact, initiating a transfer request. The object enters <tt>pendingTransfer</tt> state while the request awaits approval, rejection, cancellation, or automated server action.</li>
<li>Once the pending update or transfer action completes, the corresponding pending status is removed and the object returns to its <tt>ok</tt> state. A transfer that is approved changes the sponsoring client of the contact.</li>
<li>A delete operation is received and processed. The object enters <tt>pendingDelete</tt> state.</li>
<li>The pending delete action completes.</li>
<li>The object is purged.</li>
</ol>
</section>

<section anchor="pending-status-removal-2"><name>Pending Status Removal</name>
<t>When the requested action has been completed, the pendingCreate,
pendingDelete, pendingTransfer, or pendingUpdate status value MUST be
removed. All clients involved in the transaction MUST be notified
using a service message that the action has been completed and that
the status of the object has changed.</t>
</section>

<section anchor="status-exclusions-2"><name>Status Exclusions</name>
<table anchor="tbl-contact-status-exclusions"><name>Contact Status Exclusions</name>
<thead>
<tr>
<th>Status Value</th>
<th>MUST NOT be combined with</th>
</tr>
</thead>

<tbody>
<tr>
<td>ok</td>
<td>Any status other than <tt>linked</tt></td>
</tr>

<tr>
<td>pendingDelete</td>
<td>clientDeleteProhibited, serverDeleteProhibited</td>
</tr>

<tr>
<td>pendingTransfer</td>
<td>clientTransferProhibited, serverTransferProhibited</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>clientUpdateProhibited, serverUpdateProhibited</td>
</tr>

<tr>
<td>pendingCreate, pendingDelete, pendingTransfer, pendingUpdate</td>
<td>Each other (mutually exclusive)</td>
</tr>
</tbody>
</table><t>The <tt>linked</tt> status MAY be combined with any status. Other status combinations not expressly prohibited MAY be used.</t>
</section>
</section>

<section anchor="organisation-role-status-object"><name>Organisation Role Status Object</name>

<ul spacing="compact">
<li>Name: Organisation Role Status Object</li>
<li>Identifier: organisationRoleStatus</li>
<li>Description: Represents one of the status values associated with an Organisation Role Object. A role SHOULD have at least one associated status value.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Label</t>

<ul spacing="compact">
<li>Identifier: label</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: machine-readable enum label of a status</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Only status values defined in <eref target="#organisation-role-status-values">Status Values</eref> are allowed.</li>
</ul></li>
</ul></li>
<li><t>Reason</t>

<ul spacing="compact">
<li>Identifier: reason</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: a human-readable text that describes the rationale for the status applied to the role.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>

<section anchor="organisation-role-status-values"><name>Status Values</name>
<t>Status values that can be added or removed by a client are prefixed
with &quot;client&quot;.  Corresponding status values that can be added or
removed by a server are prefixed with &quot;server&quot;.  Status values that
do not begin with either &quot;client&quot; or &quot;server&quot; are server-managed.</t>
<t>The Set By column identifies the entity that adds and removes each status value: <tt>client</tt>, <tt>server</tt>, or <tt>client, server</tt> for a value that the server manages and that a client can also manage where server policy permits.</t>
<table anchor="tbl-organisation-role-status-values"><name>Organisation Role Status Values</name>
<thead>
<tr>
<th>Status Value</th>
<th>Set By</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>clientLinkProhibited</td>
<td>client</td>
<td>Requests to add new links to the role MUST be rejected.</td>
</tr>

<tr>
<td>serverLinkProhibited</td>
<td>server</td>
<td>Requests to add new links to the role MUST be rejected.</td>
</tr>

<tr>
<td>linked</td>
<td>server</td>
<td>The role has at least one active association with another object. This value is set and removed by the server and is not explicitly set by the client.</td>
</tr>

<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for a role that has no active prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
</tr>
</tbody>
</table></section>

<section anchor="allowed-transitions-4"><name>Allowed Transitions</name>
<t>The following diagram describes the allowed status transitions for an organisation role. The <tt>ok</tt> status is mutually exclusive with <tt>clientLinkProhibited</tt> and <tt>serverLinkProhibited</tt>, and the <tt>linked</tt> status MAY be combined with either <tt>ok</tt> or the link prohibition statuses (subject to the Status Exclusions rules). The <tt>linked</tt> status is set and removed by the server as associations with other objects are added or removed, independently of link prohibition changes, so the transitions in the top row apply equally to the bottom row. The <tt>clientLinkProhibited</tt> and <tt>serverLinkProhibited</tt> status values MAY be set at the same time.</t>
<figure anchor="fig-organisation-role-state-diagram"><name>Organisation Role State Diagram</name>
<sourcecode type="ascii"><![CDATA[                 |
                 |  role created (1)
                 v
    +------------------------+            +------------------------+
    |                        |            | status:                |
    |   status: ok           |---(2)----->| clientLinkProhibited   |
    |                        |<----(3)----| and/or                 |
    |                        |            | serverLinkProhibited   |
    +------------------------+            +------------------------+
            |         ^                         |           ^
        (4) |         | (5)                 (4) |           | (5)
            v         |                         v           |
    +------------------------+            +------------------------+
    |                        |            | status: linked,        |
    | status: ok, linked     |---(2)----->| clientLinkProhibited   |
    |                        |<----(3)----| and/or                 |
    |                        |            | serverLinkProhibited   |
    +------------------------+            +------------------------+
]]></sourcecode>
</figure>
<t>State descriptions:</t>

<ol spacing="compact">
<li>A role is added to an organisation. The role starts with the <tt>ok</tt> status.</li>
<li>A <tt>clientLinkProhibited</tt> or <tt>serverLinkProhibited</tt> status is set, by the client or the server respectively, and the <tt>ok</tt> status is removed. Requests to add new links to the role MUST be rejected while a link prohibition is present.</li>
<li>The last link prohibition status is removed and the server sets the <tt>ok</tt> status.</li>
<li>The role gets its first active association with another object and the server sets the <tt>linked</tt> status.</li>
<li>The last active association of the role is removed and the server removes the <tt>linked</tt> status.</li>
</ol>
</section>

<section anchor="status-exclusions-3"><name>Status Exclusions</name>
<table anchor="tbl-organisation-role-status-exclusions"><name>Organisation Role Status Exclusions</name>
<thead>
<tr>
<th>Status Value</th>
<th>MUST NOT be combined with</th>
</tr>
</thead>

<tbody>
<tr>
<td>ok</td>
<td>Any status other than <tt>linked</tt></td>
</tr>
</tbody>
</table><t>Other status combinations not expressly prohibited MAY be used.</t>
</section>
</section>

<section anchor="organisation-status-object"><name>Organisation Status Object</name>

<ul spacing="compact">
<li>Name: Organisation Status Object</li>
<li>Identifier: organisationStatus</li>
<li>Description: Represents one of the status values associated with an Organisation Data Object, as defined in <xref target="RFC8543" sectionFormat="of" section="3.4"></xref>. An Organisation Data Object MUST always have at least one associated status value.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Label</t>

<ul spacing="compact">
<li>Identifier: label</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: machine-readable enum label of a status</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Only status values defined in <eref target="#organisation-status-values">Status Values</eref> are allowed.</li>
</ul></li>
</ul></li>
<li><t>Reason</t>

<ul spacing="compact">
<li>Identifier: reason</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: a human-readable text that describes the rationale for the status applied to the object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>

<section anchor="organisation-status-values"><name>Status Values</name>
<t>Status values that can be added or removed by a client are prefixed with &quot;client&quot;.  Corresponding status values that can be added or removed by a server are prefixed with &quot;server&quot;.  The <tt>hold</tt> and <tt>terminated</tt> status values are server-managed when the organisation has no parent organisation and otherwise MAY be client-managed based on server policy.  Other status values that do not begin with either &quot;client&quot; or &quot;server&quot; are server-managed.</t>
<t>The Set By column identifies the entity that adds and removes each status value: <tt>client</tt>, <tt>server</tt>, or <tt>client, server</tt> for a value that the server manages and that a client can also manage where server policy permits. A server MUST assign at least one status value to the object. A client is not required to provide a status value when creating or updating the object.</t>
<table anchor="tbl-organisation-status-values"><name>Organisation Status Values</name>
<thead>
<tr>
<th>Status Value</th>
<th>Set By</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for an object that has no pending operations or prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
</tr>

<tr>
<td>hold</td>
<td>client, server</td>
<td>Organisation transform commands and new links MUST be rejected.</td>
</tr>

<tr>
<td>terminated</td>
<td>client, server</td>
<td>The organisation has been terminated and MUST NOT be linked. Organisation transform commands and new links MUST be rejected.</td>
</tr>

<tr>
<td>linked</td>
<td>server</td>
<td>The organisation object has at least one active association with another object. This value is not explicitly set by the client. Servers SHOULD provide services to determine existing object associations.</td>
</tr>

<tr>
<td>clientLinkProhibited</td>
<td>client</td>
<td>Requests to add new links to the organisation MUST be rejected.</td>
</tr>

<tr>
<td>serverLinkProhibited</td>
<td>server</td>
<td>Requests to add new links to the organisation MUST be rejected.</td>
</tr>

<tr>
<td>clientUpdateProhibited</td>
<td>client</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
</tr>

<tr>
<td>serverUpdateProhibited</td>
<td>server</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
</tr>

<tr>
<td>clientDeleteProhibited</td>
<td>client</td>
<td>Requests to delete the object MUST be rejected.</td>
</tr>

<tr>
<td>serverDeleteProhibited</td>
<td>server</td>
<td>Requests to delete the object MUST be rejected.</td>
</tr>

<tr>
<td>pendingCreate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
</tr>
</tbody>
</table></section>

<section anchor="allowed-transitions-5"><name>Allowed Transitions</name>
<t>The following diagram describes the allowed status transitions for an organisation object. The <tt>linked</tt>, <tt>clientLinkProhibited</tt>, <tt>serverLinkProhibited</tt>, <tt>clientUpdateProhibited</tt>, <tt>serverUpdateProhibited</tt>, <tt>clientDeleteProhibited</tt>, and <tt>serverDeleteProhibited</tt> status values are additive flags that MAY be combined with the states shown below (subject to the Status Exclusions rules) and are not depicted as separate states; while present, the corresponding flag blocks the associated transition (new link, update, or delete, respectively) from being initiated. The <tt>linked</tt> status is set and removed by the server as associations with other objects are added or removed, independently of the transitions described below.</t>
<figure anchor="fig-organisation-state-diagram"><name>Organisation Object State Diagram</name>
<sourcecode type="ascii"><![CDATA[                            |
                            v
              +----------------------------+
              | status: pendingCreate (1)  |
              +----------------------------+
                            |  create action completed (2)
                            v
  +--------------------------------------------------------+
  | Operational state (3) - exactly one of:                |
  |                                                        |
  |   +------+  (4)             +------+                   |
  |   |  ok  |----------------->| hold |                   |
  |   |      |<-----------------|      |                   |
  |   +------+            (5)   +------+                   |
  |                                                        |
  |      |                         |                       |
  |      | (6)                     | (6)                   |
  |      v                         v                       |
  |   +--------------------------------+                   |
  |   |           terminated           |                   |
  |   +--------------------------------+                   |
  |                                                        |
  +--------------------------------------------------------+
        |       ^                       |       ^
   (7)  |       | (8)              (9)  |       | (10)
        v       |                       v       |
    +---------------+               +---------------+
    | pendingUpdate |               | pendingDelete |
    +---------------+               +---------------+
                                            |
                                            |  delete completed (11)
                                            v
                                      +-----------+
                                      |  Purged   |
                                      +-----------+
]]></sourcecode>
</figure>
<t>State descriptions:</t>

<ol spacing="compact">
<li>A create operation is received and processed. If the server defers completion, the object enters <tt>pendingCreate</tt> state. If the server completes the create immediately, the object enters the <tt>ok</tt> state directly.</li>
<li>The create action completes and the <tt>pendingCreate</tt> status is removed. The object enters the operational state (3), normally <tt>ok</tt>.</li>
<li>The object is in exactly one of the mutually exclusive operational states <tt>ok</tt>, <tt>hold</tt>, or <tt>terminated</tt>. The pending states (7) and (9) are entered from, and return to, this operational state.</li>
<li>A <tt>hold</tt> status is set. Organisation transform operations and new links MUST be rejected while the object is in <tt>hold</tt>. The <tt>hold</tt> status is set by the server, or by the client if the organisation has a parent organisation and server policy allows it.</li>
<li>The <tt>hold</tt> status is removed and the object returns to <tt>ok</tt>, by the same parties that are allowed to set it.</li>
<li>A <tt>terminated</tt> status is set, from either <tt>ok</tt> or <tt>hold</tt>, by the same parties that are allowed to set <tt>hold</tt>. A terminated organisation MUST NOT be linked, and organisation transform operations and new links MUST be rejected. Whether and how an object can leave the <tt>terminated</tt> state is subject to server policy.</li>
<li>An update operation is received. If the server defers completion, the object enters <tt>pendingUpdate</tt> state.</li>
<li>The pending update completes, the <tt>pendingUpdate</tt> status is removed, and the object returns to its operational state.</li>
<li>A delete operation is received. If the server defers completion, the object enters <tt>pendingDelete</tt> state.</li>
<li>The pending delete is rejected by the server, the <tt>pendingDelete</tt> status is removed, and the object returns to its operational state.</li>
<li>The pending delete completes and the object is purged.</li>
</ol>
</section>

<section anchor="pending-status-removal-3"><name>Pending Status Removal</name>
<t>When the requested action has been completed, the pendingCreate, pendingDelete, or pendingUpdate status value MUST be removed.  All clients involved in the transaction MUST be notified using a service message that the action has been completed and that the status of the object has changed.</t>
</section>

<section anchor="status-exclusions-4"><name>Status Exclusions</name>
<table anchor="tbl-organisation-status-exclusions"><name>Organisation Status Exclusions</name>
<thead>
<tr>
<th>Status Value</th>
<th>MUST NOT be combined with</th>
</tr>
</thead>

<tbody>
<tr>
<td>pendingCreate, ok, hold, terminated</td>
<td>Each other (mutually exclusive); an organisation MUST have exactly one of these statuses</td>
</tr>

<tr>
<td>ok</td>
<td>Any status other than <tt>linked</tt></td>
</tr>

<tr>
<td>pendingDelete</td>
<td>clientDeleteProhibited, serverDeleteProhibited</td>
</tr>

<tr>
<td>pendingCreate, pendingDelete, pendingUpdate</td>
<td>Each other (mutually exclusive)</td>
</tr>
</tbody>
</table><t>The <tt>linked</tt> status MAY be combined with <tt>clientLinkProhibited</tt> or <tt>serverLinkProhibited</tt> if new links must be prohibited.</t>
<t>Other status combinations not expressly prohibited MAY be used.</t>
</section>
</section>

<section anchor="user-status-object"><name>User Status Object</name>

<ul spacing="compact">
<li>Name: User Status Object</li>
<li>Identifier: userStatus</li>
<li>Description: Represents the status value associated with a User Data Object. A User Data Object MUST always have exactly one associated status value.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Label</t>

<ul spacing="compact">
<li>Identifier: label</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: machine-readable enum label of a status</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Only status values defined in <eref target="#user-status-values">Status Values</eref> are allowed.</li>
</ul></li>
</ul></li>
<li><t>Reason</t>

<ul spacing="compact">
<li>Identifier: reason</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: a human-readable text that describes the rationale for the status applied to the object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>

<section anchor="user-status-values"><name>Status Values</name>
<t>The <tt>pending</tt> status value is server-managed. The <tt>suspended</tt> and <tt>deactivated</tt> status values are server-managed and MAY additionally be client-managed by a client with permission to manage users in the owning organisation, based on server policy. The <tt>active</tt> status value is set and removed by the server as other status values are added or removed.</t>
<t>The Set By column identifies the entity that adds and removes each status value: <tt>client</tt>, <tt>server</tt>, or <tt>client, server</tt> for a value that the server manages and that a client can also manage where server policy permits. A server MUST assign at least one status value to the object. A client is not required to provide a status value when creating or updating the object.</t>
<table anchor="tbl-user-status-values"><name>User Status Values</name>
<thead>
<tr>
<th>Status Value</th>
<th>Set By</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>active</td>
<td>server</td>
<td>This is the normal status value for a user that is permitted to authenticate and act within the permissions of its roles.</td>
</tr>

<tr>
<td>pending</td>
<td>server</td>
<td>The user has been created, but activation has not been completed by the server. Server operators can delay activation for a variety of reasons, such as to allow for verification of the user's details or human review. Requests authenticated as the user MUST be rejected.</td>
</tr>

<tr>
<td>suspended</td>
<td>client, server</td>
<td>The user has been temporarily suspended. Requests authenticated as the user MUST be rejected.</td>
</tr>

<tr>
<td>deactivated</td>
<td>client, server</td>
<td>The user has been deactivated. Requests authenticated as the user MUST be rejected.</td>
</tr>
</tbody>
</table></section>

<section anchor="allowed-transitions-6"><name>Allowed Transitions</name>
<t>The following diagram describes the allowed status transitions for a user object.</t>
<figure anchor="fig-user-state-diagram"><name>User Object State Diagram</name>
<sourcecode type="ascii"><![CDATA[                    |
                    v
        +------------------------+
        |  status: pending (1)   |
        +------------------------+
                    |  activation completed (2)
                    v
   +--------+       (3)       +-----------+
   | active |---------------->| suspended |
   |        |<----------------|           |
   +--------+       (4)       +-----------+
        |                           |
        | (5)                       | (5)
        v                           v
   +-------------------------------------+
   |             deactivated             |
   +-------------------------------------+
                    |
                    |  delete completed (6)
                    v
              +-----------+
              |  Purged   |
              +-----------+
]]></sourcecode>
</figure>
<t>State descriptions:</t>

<ol spacing="compact">
<li>A create operation is received and processed. If the server defers activation, the object enters the <tt>pending</tt> state. If the server activates the user immediately, the object enters the <tt>active</tt> state directly.</li>
<li>Activation completes and the <tt>pending</tt> status is replaced by <tt>active</tt>.</li>
<li>A <tt>suspended</tt> status is set, replacing <tt>active</tt>.</li>
<li>The <tt>suspended</tt> status is removed and the object returns to <tt>active</tt>, by the same parties that are allowed to set it.</li>
<li>A <tt>deactivated</tt> status is set, from either <tt>active</tt> or <tt>suspended</tt>. Whether and how an object can leave the <tt>deactivated</tt> state is subject to server policy.</li>
<li>A delete operation completes and the object is purged. A delete operation can be received in any state; only the transition from <tt>deactivated</tt> is depicted.</li>
</ol>
</section>

<section anchor="pending-status-removal-4"><name>Pending Status Removal</name>
<t>When activation has been completed, the <tt>pending</tt> status value MUST be replaced by <tt>active</tt>. The client that created the user MUST be notified using a service message that activation has been completed and that the status of the object has changed.</t>
</section>

<section anchor="status-exclusions-5"><name>Status Exclusions</name>
<table anchor="tbl-user-status-exclusions"><name>User Status Exclusions</name>
<thead>
<tr>
<th>Status Value</th>
<th>MUST NOT be combined with</th>
</tr>
</thead>

<tbody>
<tr>
<td>active, pending, suspended, deactivated</td>
<td>Each other (mutually exclusive); a user MUST have exactly one of these statuses</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="dns-resource-record-object"><name>DNS Resource Record Object</name>

<ul spacing="compact">
<li>Name: DNS Resource Record Object</li>
<li>Identifier: dnsRecord</li>
<li>Description: Represents a single DNS resource record. The structure follows the top-level format of a DNS resource record as described in Section 3.2.1 of <xref target="RFC1035"></xref>, adapted for use in provisioning. The RDATA field is represented as a structured object whose fields depend on the record type, following the RDATA presentation format described by the corresponding RFC defining the record type. This approach is aligned with <xref target="I-D.simmen-rpp-dns-data"></xref>.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Name</t>

<ul spacing="compact">
<li>Identifier: name</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: The owner name of the DNS entry. This MAY be the domain itself or a subordinate host name.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The value MUST be a syntactically valid DNS host name.</li>
<li>Absolute FQDNs (with trailing dot) and relative host names are allowed, as well as the &quot;@&quot; symbol representing the domain name itself.</li>
</ul></li>
</ul></li>
<li><t>Class</t>

<ul spacing="compact">
<li>Identifier: class</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: The DNS resource record class.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>If present, the value MUST be chosen from Section 3.2.4 (CLASS values) of <xref target="RFC1035"></xref>.</li>
<li>A client SHOULD omit this element. The server MUST assume &quot;IN&quot; as the default class and MAY decline other values.</li>
</ul></li>
</ul></li>
<li><t>Type</t>

<ul spacing="compact">
<li>Identifier: type</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: The DNS resource record type, indicating the format of the RDATA field.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The value MUST be a valid string representation of a resource record type as defined in <xref target="RFC1035"></xref> or other RFC describing the record type.</li>
<li>Allowed values MAY be constrained by server policies. For domain provisioning, the type would typically be constrained to the allowed parent-side entries.</li>
<li>Values MUST be converted to lowercase.</li>
<li>In EPP Compatibility Profile (<xref target="RFC5732"></xref>), the following record types MUST be supported: <tt>ns</tt>, <tt>a</tt>, and <tt>aaaa</tt>.</li>
<li>In EPP Compatibility Profile with DNSSEC Extension <xref target="RFC5910"></xref>, the following record types MUST additionally be supported: <tt>ds</tt> and <tt>dnskey</tt>.</li>
</ul></li>
</ul></li>
<li><t>RDATA</t>

<ul spacing="compact">
<li>Identifier: rdata</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: Object</li>
<li>Description: The actual payload data of the DNS record. The structure of this object depends on the record type and MUST follow the RDATA presentation format described by the corresponding RFC. Property names MUST be written in camelCase. All property values MUST be represented as Strings encoding the presentation format of the value.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The fields within RDATA MUST match the expected structure for the given record type.</li>
<li>See <xref target="rdata-structures"></xref> for required structures in the EPP Compatibility Profile.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>

<section anchor="rdata-structures"><name>RDATA Structures in EPP Profile</name>
<t>This section defines the RDATA field structures required for interoperability in the EPP Compatibility Profile.</t>
<t>In EPP Compatibility Profile (<xref target="RFC5732"></xref>), the following RDATA structures MUST be supported:</t>

<ul spacing="compact">
<li>For NS records (<xref target="RFC1035"></xref>, Section 3.3.11): <tt>nsdname</tt> (the fully qualified domain name of the nameserver).</li>
<li>For A records (<xref target="RFC1035"></xref>, Section 3.4.1): <tt>address</tt> (the IPv4 address in dotted-decimal notation).</li>
<li>For AAAA records (<xref target="RFC3596"></xref>, Section 2.2): <tt>address</tt> (the IPv6 address in text representation as defined in <xref target="RFC5952"></xref>).</li>
</ul>
<t>In EPP Compatibility Profile with DNSSEC Extension (<xref target="RFC5910"></xref>), the following RDATA structures MUST additionally be supported:</t>

<ul spacing="compact">
<li>For DS records (<xref target="RFC4034"></xref>, Section 5): <tt>keyTag</tt> (key tag value), <tt>algorithm</tt> (algorithm number), <tt>digestType</tt> (digest algorithm type), and <tt>digest</tt> (digest value).</li>
<li>For DNSKEY records (<xref target="RFC4034"></xref>, Section 2): <tt>flags</tt> (flags field value), <tt>protocol</tt> (protocol field value), <tt>algorithm</tt> (algorithm number), and <tt>publicKey</tt> (encoded public key value).</li>
</ul>

<aside><t>TBC: Optional keyData inside dsData (RFC 5910 Section 4.1): In the DS Data Interface, a DS record MAY optionally contain a nested keyData element used for server-side validation of the DS hash. The draft doesn't describe this pattern - a client submitting a DS record with accompanying DNSKEY for validation.</t>
</aside>
</section>
</section>

<section anchor="dns-operational-controls-object"><name>DNS Operational Controls Object</name>

<ul spacing="compact">
<li>Name: DNS Operational Controls Object</li>
<li>Identifier: dnsControls</li>
<li>Description: Contains operational control parameters that a client MAY use to influence server-side DNS behaviour for a set of DNS records. A server MAY ignore these values, e.g. for policy reasons. This structure is aligned with <xref target="I-D.simmen-rpp-dns-data"></xref>.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>TTL</t>

<ul spacing="compact">
<li>Identifier: ttl</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Dictionary[Integer]</li>
<li>Description: Controls the caching behaviour of DNS resource records. The dictionary is keyed by lowercase record type name, with values representing the TTL in seconds for that record type.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The keys MUST be valid DNS resource record type names in lowercase.</li>
<li>The values MUST be positive Integers.</li>
<li>The allowed value ranges MAY be constrained by server policy.</li>
<li>A server MAY ignore client-specified TTL values and apply default or policy-defined values.</li>
</ul></li>
</ul></li>
<li><t>Maximum Signature Lifetime</t>

<ul spacing="compact">
<li>Identifier: maxSigLifetime</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Dictionary[Integer]</li>
<li>Description: Specifies a child's preference for the maximum number of seconds after signature generation when the parent's signature on signed DNS information should expire. The dictionary is keyed by lower-case record type name, with values representing the maximum signature lifetime in seconds for that record type. The value applies to the RRSIG resource record over the signed DNS RRset. See Section 3 of <xref target="RFC4034"></xref> for information on the RRSIG resource record. This corresponds to the maxSigLife concept from <xref target="RFC5910"></xref>.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The keys MUST be valid DNS resource record type names in lowercase.</li>
<li>The values MUST be positive Integers (minimum value of 1).</li>
<li>A server MAY ignore client-specified values and apply its own default signature expiration policy.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="dns-data-object"><name>DNS Data Object</name>

<ul spacing="compact">
<li>Name: DNS Data Object</li>
<li>Identifier: dnsData</li>
<li>Description: A container for DNS resource records and associated operational controls for a provisioned object. This structure groups DNS records together with control parameters that influence server-side DNS behaviour. The structure is aligned with <xref target="I-D.simmen-rpp-dns-data"></xref>.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Records</t>

<ul spacing="compact">
<li>Identifier: records</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-write</li>
<li>Data Type: DNS Resource Record Object</li>
<li>Description: An array of DNS resource records associated with the provisioned object.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Allowed record types MAY be constrained by server policy.</li>
<li>In EPP Compatibility Profile with DNSSEC Extension <xref target="RFC5910"></xref>, records of type DS and DNSKEY MUST be supported in addition to NS, A, and AAAA.</li>
<li>A server MUST support either DS or DNSKEY or both record types for DNSSEC provisioning. If provided with only DNSKEY, a server MUST calculate the DS record. If both record types are provided, a server MAY use the DNSKEY to validate the DS record.</li>
</ul></li>
</ul></li>
<li><t>Controls</t>

<ul spacing="compact">
<li>Identifier: controls</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: DNS Operational Controls Object</li>
<li>Description: Operational control parameters for the DNS records.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="authorisation-information-object"><name>Authorisation Information Object</name>

<ul spacing="compact">
<li>Name: Authorisation Information Object</li>
<li>Identifier: authInfo</li>
<li>Description: Contains information used to authorise operations on a data object. It may hold different kinds of authorisation information.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Method</t>

<ul spacing="compact">
<li>Identifier: method</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: The identifier of the RPP authorisation method.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The value MUST be one of the values registered at IANA as defined in [I-D.draft-wullink-rpp-core].</li>
<li>In EPP Compatibility Profile this value MUST be set to <tt>authinfo</tt> if standard password-based authorisation is used</li>
</ul></li>
</ul></li>
<li><t>Authorisation Information</t>

<ul spacing="compact">
<li>Identifier: authdata</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: The value of the authorisation information. It might be as simple as a password string, but also more complex values like public key certificates or tokens encoded as string are possible.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Authorisation Information object is immutable. If the information changes (for example password is updated) a new instance MUST be created.</li>
<li>Depending on the method and server policy Authorisation Information MAY not be available for read or any other operation responding with this data element.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="disclose-object"><name>Disclose Object</name>

<aside><t>TODO: Model Disclose in universal (extendible) way</t>
</aside>

<ul spacing="compact">
<li>Name: Disclose Object</li>
<li>Identifier: disclose</li>
<li>Description: TBD</li>
</ul>
</section>

<section anchor="restore-report-object"><name>Restore Report Object</name>

<ul spacing="compact">
<li>Name: Restore Report Object</li>
<li>Identifier: restoreReport</li>
<li>Description: Contains the redemption grace period restore report submitted by the sponsoring client as required by the RGP process (<xref target="RFC3915"></xref>). A restore report documents the state of the object before and after deletion, provides the reason for restoration, and includes mandatory client statements. This object is OPTIONAL and is only required when the RGP feature is supported and a restore report is being submitted.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Pre-Delete Data</t>

<ul spacing="compact">
<li>Identifier: preData</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: A copy of the registration data that existed for the object prior to the object being deleted.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Post-Restore Data</t>

<ul spacing="compact">
<li>Identifier: postData</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: A copy of the registration data that exists for the object at the time the restore report is submitted.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Delete Time</t>

<ul spacing="compact">
<li>Identifier: deleteTime</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time when the object delete request was sent to the server.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Restore Time</t>

<ul spacing="compact">
<li>Identifier: restoreTime</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time when the original restore request operation was sent to the server.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>This element MAY be omitted when the restore report is submitted inline within the restore request in a single-step process.</li>
<li>In EPP Compatibility Profile this element MUST be present as defined in <xref target="RFC3915"></xref>.</li>
</ul></li>
</ul></li>
<li><t>Restore Reason</t>

<ul spacing="compact">
<li>Identifier: restoreReason</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: A brief explanation of the reason for restoring the object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Statements</t>

<ul spacing="compact">
<li>Identifier: statements</li>
<li>Cardinality: 1-2</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: Client statements required by the RGP process.</li>
<li>Constraints: In EPP Compatibility Profile exactly two statements MUST be present as defined in <xref target="RFC3915"></xref>.</li>
</ul></li>
<li><t>Other</t>

<ul spacing="compact">
<li>Identifier: other</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: Any additional information needed to support the statements provided by the client.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="organisation-role-object"><name>Organisation Role Object</name>

<ul spacing="compact">
<li>Name: Organisation Role Object</li>
<li>Identifier: organisationRole</li>
<li>Description: Represents a role that an organisation has within the registry ecosystem. An organisation object MUST always have at least one associated role. A single organisation MAY have multiple roles with different role types.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Role Identifier</t>

<ul spacing="compact">
<li>Identifier: roleId</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: A third-party-assigned identifier for the role, such as an IANA ID for registrars.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Role Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-write</li>
<li>Data Type: Organisation Role Status Object</li>
<li>Description: The status of this particular role. A role SHOULD have at least one associated status value.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Possible values and combinations are specified in <eref target="#organisation-role-status-values">Organisation Role Status Values</eref>.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>

<aside><t>TBC: IANA registry for role types and statuses? must be compat with EPP</t>
</aside>
</section>

<section anchor="processes-object"><name>Processes Object</name>

<ul spacing="compact">
<li>Name: Processes Object</li>
<li>Identifier: processes</li>
<li>Description: A container grouping the Process Objects <xref target="process-objects"></xref> currently or recently initiated on a Data Object. Each data element MUST be named after the identifier of a Process Object and MUST be of type Aggregation of that Process Object. The data elements below are the process types defined in this document. Extensions MUST add further data elements for the Process Objects they define.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Transfer Processes</t>

<ul spacing="compact">
<li>Identifier: transferProcess</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Aggregation[Transfer Process Object]</li>
<li>Direct Access: true</li>
<li>Description: The transfer processes initiated on the owning Data Object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Renew Processes</t>

<ul spacing="compact">
<li>Identifier: renewProcess</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Aggregation[Renew Process Object]</li>
<li>Direct Access: true</li>
<li>Description: The renew processes initiated on the owning Data Object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Restore Processes</t>

<ul spacing="compact">
<li>Identifier: restoreProcess</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Aggregation[Restore Process Object]</li>
<li>Direct Access: true</li>
<li>Description: The restore processes initiated on the owning Data Object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Create Processes</t>

<ul spacing="compact">
<li>Identifier: createProcess</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Aggregation[Create Process Object]</li>
<li>Direct Access: true</li>
<li>Description: The create processes initiated on the owning Data Object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="base-process"><name>Base Process Object</name>

<ul spacing="compact">
<li>Name: Base Process Object</li>
<li>Identifier: baseProcess</li>
<li>Abstract: true</li>
<li>Description: Base structure for all Process Objects, containing the data elements common to every process. Each Process Object extends this object.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Process ID</t>

<ul spacing="compact">
<li>Identifier: processId</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: A server-assigned identifier of the process instance, unique within the scope of the Owner Data Object.</li>
<li>Constraints: The value is set by the server and cannot be specified by the client.</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="availability"><name>Availability</name>
<t>The Availability Objects define the output of the Availability operation (see <xref target="uniform-availability"></xref>). Each Data Object that supports the Availability operation defines its own Availability Object extending the Base Availability Object. Extensions add availability information, for example pricing, as data elements of these objects.</t>

<section anchor="base-availability-object"><name>Base Availability Object</name>

<ul spacing="compact">
<li>Name: Base Availability Object</li>
<li>Identifier: baseAvailability</li>
<li>Abstract: true</li>
<li>Description: Base structure for the result of an Availability operation, indicating whether the referenced object can be created.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Available</t>

<ul spacing="compact">
<li>Identifier: available</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Boolean</li>
<li>Description: Indicates whether the referenced object can be created at the time the operation is completed. The value <tt>true</tt> means that the object can be created. It does not guarantee that a subsequent Create operation for the same object succeeds, as the state of the server can change between the two operations. The value <tt>false</tt> means that the object cannot be created.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Reason</t>

<ul spacing="compact">
<li>Identifier: reason</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: Server-specific text explaining why the referenced object cannot be created.</li>
<li>Constraints: The element is present only when <tt>available</tt> is <tt>false</tt>.</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="domain-name-availability-object"><name>Domain Name Availability Object</name>

<ul spacing="compact">
<li>Name: Domain Name Availability Object</li>
<li>Identifier: domainNameAvailability</li>
<li>Extends: Base Availability Object</li>
<li>Description: The result of an Availability operation on a Domain Name Data Object.</li>
<li>Data Elements: (None)</li>
</ul>
</section>

<section anchor="contact-availability-object"><name>Contact Availability Object</name>

<ul spacing="compact">
<li>Name: Contact Availability Object</li>
<li>Identifier: contactAvailability</li>
<li>Extends: Base Availability Object</li>
<li>Description: The result of an Availability operation on a Contact Data Object.</li>
<li>Data Elements: (None)</li>
</ul>
</section>

<section anchor="host-availability-object"><name>Host Availability Object</name>

<ul spacing="compact">
<li>Name: Host Availability Object</li>
<li>Identifier: hostAvailability</li>
<li>Extends: Base Availability Object</li>
<li>Description: The result of an Availability operation on a Host Data Object.</li>
<li>Data Elements: (None)</li>
</ul>
</section>
</section>

<section anchor="messages-1"><name>Messages</name>
<t>The Message Components define the structure and data elements for all message objects used in the protocol. Each specific message type extends the Base Message Object to include additional data elements relevant to that message type. Any of the types defined in this section may be used for the <tt>data</tt> data element defined for the Message Data Object.</t>

<section anchor="base-message-object"><name>Base Message Object</name>

<ul spacing="compact">
<li>Name: Base Message Object</li>
<li>Identifier: baseMessage</li>
<li>Abstract: true</li>
<li>Description: Base structure for all message objects, containing common data elements such as the object type and object identifier.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Object Type</t>

<ul spacing="compact">
<li>Identifier: objectType</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The object identifier of the object affected by the requested action (e.g., &quot;domainName&quot;, &quot;host&quot;, &quot;contact&quot;).</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Must only be used when the <tt>objectId</tt> field is present.</li>
</ul></li>
</ul></li>
<li><t>Object Identifier</t>

<ul spacing="compact">
<li>Identifier: objectId</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The unique identifier of the object affected by the requested operation.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Must be a valid unique identifier for the object type specified in the <tt>objectType</tt> field.</li>
<li>For &quot;domainName&quot; and &quot;host&quot; the <tt>objectId</tt> must be a valid fully qualified domain name (FQDN).</li>
<li>For &quot;contact&quot; the <tt>objectId</tt> must be a valid contact identifier.</li>
<li>When the message is not related to a specific object, the <tt>objectId</tt> field may be empty.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="review-response-object"><name>Review Response Object</name>
<t>The Review Response Object defines the data elements for returning the result of an offline review. Offline review is optional for the create, update, delete, transfer, renew and restore actions, where the server may want to perform an offline review before completing the requested action.</t>

<ul spacing="compact">
<li>Name: Review Response Object</li>
<li>Identifier: reviewResponseMessage</li>
<li>Extends: Base Message Object</li>
<li>Description: Notification of the result of an offline review of a requested operation.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Approval Result</t>

<ul spacing="compact">
<li>Identifier: approved</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Boolean</li>
<li>Description: Whether the requested action was approved and completed.</li>
<li>Constraints: <tt>false</tt> means the action was denied and not performed.</li>
</ul></li>
<li><t>Client Transaction ID</t>

<ul spacing="compact">
<li>Identifier: clientTransactionId</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The client transaction identifier from the original request, if supplied.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Server Transaction ID</t>

<ul spacing="compact">
<li>Identifier: serverTransactionId</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The server transaction identifier returned for the original request.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Completion Date</t>

<ul spacing="compact">
<li>Identifier: completionDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time when review of the requested action was completed.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Message</t>

<ul spacing="compact">
<li>Identifier: message</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: Human-readable message associated with the review response.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Process</t>

<ul spacing="compact">
<li>Identifier: process</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Base Process Object</li>
<li>Description: The process whose operation was subject to the offline review.</li>
<li>Constraints: Present when the reviewed operation was performed through a Process Object (create, renew, transfer, or restore) and the server exposes that Process Object; absent otherwise, including for update and delete operations.</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="transfer-request-message-object"><name>Transfer Request Message Object</name>

<ul spacing="compact">
<li>Name: Transfer Request Message Object</li>
<li>Identifier: transferRequestMessage</li>
<li>Extends: Base Message Object</li>
<li>Description: Notification for losing client of started transfer request, where the client expected to act on the pending transfer request.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Transfer Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The current state of the transfer request.</li>
<li>Constraints: The value MUST be <tt>pending</tt>.</li>
</ul></li>
<li><t>Request Date</t>

<ul spacing="compact">
<li>Identifier: requestDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time the transfer was requested.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Action Date</t>

<ul spacing="compact">
<li>Identifier: actionDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The deadline for responding before the server takes an automated action.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The action date MUST be later than the request date and is subject to server policy.</li>
</ul></li>
</ul></li>
<li><t>Process</t>

<ul spacing="compact">
<li>Identifier: process</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Transfer Process Object</li>
<li>Description: The transfer process the message pertains to.</li>
<li>Constraints: Absent if the server does not expose the Transfer Process Object.</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="transfer-outcome-message-object"><name>Transfer Outcome Message Object</name>

<ul spacing="compact">
<li>Name: Transfer Outcome Message Object</li>
<li>Identifier: transferOutcomeMessage</li>
<li>Extends: Base Message Object</li>
<li>Description: Notification for a client affected by the completion of a transfer request.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Transfer Status</t>

<ul spacing="compact">
<li>Identifier: trStatus</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The final state of the transfer request.</li>
<li>Constraints: The value MUST be one of <tt>clientApproved</tt>, <tt>clientCancelled</tt>, <tt>clientRejected</tt>, <tt>serverApproved</tt>, or <tt>serverCancelled</tt>.</li>
</ul></li>
<li><t>Request Date</t>

<ul spacing="compact">
<li>Identifier: requestDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time the transfer was requested.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Action Date</t>

<ul spacing="compact">
<li>Identifier: actionDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time the transfer request was resolved.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Expiry Date</t>

<ul spacing="compact">
<li>Identifier: expiryDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The end of the object's validity period if the operation causes a change in the validity period.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Process</t>

<ul spacing="compact">
<li>Identifier: process</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Transfer Process Object</li>
<li>Description: The transfer process the message pertains to.</li>
<li>Constraints: Absent if the server does not expose the Transfer Process Object.</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="expiration-deletion-message-object"><name>Expiration Deletion Message Object</name>

<ul spacing="compact">
<li>Name: Expiration Deletion Message Object</li>
<li>Identifier: expirationDeletionMessage</li>
<li>Extends: Base Message Object</li>
<li>Description: Notification for the sponsoring client that an object was deleted following expiration.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Deletion Date</t>

<ul spacing="compact">
<li>Identifier: deletionDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time the server deleted the object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="auto-renewal-message-object"><name>Auto-Renewal Message Object</name>

<ul spacing="compact">
<li>Name: Auto-Renewal Message Object</li>
<li>Identifier: autoRenewalMessage</li>
<li>Extends: Base Message Object</li>
<li>Description: Notification for the sponsoring client that the server automatically renewed an object.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Renewal Date</t>

<ul spacing="compact">
<li>Identifier: renewalDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time the server renewed the object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Expiry Date</t>

<ul spacing="compact">
<li>Identifier: expiryDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The new expiration date of the object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="service-notice-message-object"><name>Service Notice Message Object</name>
<t>The Service Notice Message Object is not linked to a specific object or process and can be used to convey general information to the client.</t>

<ul spacing="compact">
<li>Name: Service Notice Message Object</li>
<li>Identifier: serviceNoticeMessage</li>
<li>Extends: Base Message Object</li>
<li>Description: Generic text-based message containing information not covered by any other message type.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Message</t>

<ul spacing="compact">
<li>Identifier: message</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: Human-readable service information for the receiving organisation.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The server MUST NOT misuse this field by using it for transmitting structured data or machine-readable information.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<t><strong>TODO</strong> Complete the Service Notice Message Object definition, do we need it at all?</t>
</section>
</section>

<section anchor="discovery"><name>Discovery</name>

<section anchor="version-object"><name>Version Object</name>

<ul spacing="compact">
<li>Name: Discovery Version Object</li>
<li>Identifier: discoveryVersion</li>
<li>Description: Describes a version of RPP supported by the server.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Version</t>

<ul spacing="compact">
<li>Identifier: version</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The RPP version, for example &quot;1.0&quot;.</li>
<li>Constraints: The value MUST use the Semantic Versioning format.</li>
</ul></li>
<li><t>Base URL</t>

<ul spacing="compact">
<li>Identifier: baseUrl</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: URL</li>
<li>Description: The base URL specific for the version, used as a prefix for all endpoint URL templates.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="environment-object"><name>Environment Object</name>

<ul spacing="compact">
<li>Name: Discovery Environment Object</li>
<li>Identifier: discoveryEnvironment</li>
<li>Description: Describes the environment of the RPP server.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Name</t>

<ul spacing="compact">
<li>Identifier: name</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The name of the RPP server, for example &quot;rpp.example&quot;.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The operational status of the RPP server, for example &quot;production&quot;, &quot;test&quot;, or &quot;development&quot;.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="extension-object"><name>Extension Object</name>

<ul spacing="compact">
<li>Name: Extension Object</li>
<li>Identifier: extension</li>
<li>Description: Describes an extension supported by the server.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Name</t>

<ul spacing="compact">
<li>Identifier: name</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: A short name for the extension, for example &quot;registry fee extension&quot;.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Extension ID</t>

<ul spacing="compact">
<li>Identifier: id</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: A unique URN identifier for the extension, for example &quot;urn:ietf:params:rpp:extension:registry-fee&quot;.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Version</t>

<ul spacing="compact">
<li>Identifier: version</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The version of the extension that is supported or required for the profile, for example &quot;1.0&quot;.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>URL</t>

<ul spacing="compact">
<li>Identifier: url</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: URL</li>
<li>Description: The location of the extension specification.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>For standard extensions, the value MUST be the URL of the extension in the IANA registry.</li>
<li>For private extensions, the value MUST be the URL of the extension specification. The domain name used in the URL MUST resolve and the URL MUST be accessible to the client.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="idn-lgr-object"><name>IDN LGR Object</name>

<ul spacing="compact">
<li>Name: Discovery IDN LGR Object</li>
<li>Identifier: discoveryIdnLgr</li>
<li>Description: Describes a Label Generation Ruleset (LGR) supported by the server for internationalized domain names.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>TLDs</t>

<ul spacing="compact">
<li>Identifier: tld</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The top-level domains (TLDs) to which the LGR applies.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Name</t>

<ul spacing="compact">
<li>Identifier: name</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The IANA-registered name of the LGR.</li>
<li>Constraints: The value MUST be a valid LGR name as listed in the IANA IDN Tables registry [IDN-Tables].</li>
</ul></li>
<li><t>URL</t>

<ul spacing="compact">
<li>Identifier: url</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: URL</li>
<li>Description: The location of the LGR specification in the IANA IDN Tables registry [IDN-Tables].</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Default</t>

<ul spacing="compact">
<li>Identifier: default</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Boolean</li>
<li>Description: Indicates whether this LGR is the default for the specified TLDs.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="notice-object"><name>Notice Object</name>

<ul spacing="compact">
<li>Name: Discovery Notice Object</li>
<li>Identifier: discoveryNotice</li>
<li>Description: Describes a notice from the server operator.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Publication Time</t>

<ul spacing="compact">
<li>Identifier: pubTime</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The publication time of the notice.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Text</t>

<ul spacing="compact">
<li>Identifier: text</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: A human-readable description of the notice.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="process-objects"><name>Process Objects</name>
<t>This section defines the Process Objects used in this document.</t>
<t>Each Process Object extends the Base Process Object <xref target="base-process"></xref> and therefore carries its OPTIONAL Process ID data element.</t>

<section anchor="transfer-process-object"><name>Transfer Process Object</name>

<ul spacing="compact">
<li>Name: Transfer Process Object</li>
<li>Identifier: transferProcess</li>
<li>Unique Identifier: processId</li>
<li>Extends: Base Process Object</li>
<li>Description: Represents a transfer request for a provisioned object. Creating this object initiates a transfer. The object supports approve and reject as additional operations, and delete as the cancel operation. Reading the object returns the current transfer status.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Transfer Direction</t>

<ul spacing="compact">
<li>Identifier: transferDir</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: Indicates whether the transfer is a &quot;pull&quot; or &quot;push&quot; transfer. Per policy, servers usually support only one model. If omitted, server policy determines the default.</li>
<li>Constraints: The value MUST be one of: &quot;pull&quot; (initiated by the gaining client) or &quot;push&quot; (initiated by the sponsoring client).</li>
</ul></li>
<li><t>Gaining Client ID</t>

<ul spacing="compact">
<li>Identifier: gainingClientId</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: Client Identifier</li>
<li>Description: The identifier of the designated gaining client. This element is REQUIRED for push transfers and MUST NOT be provided for pull transfers.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Transfer Status</t>

<ul spacing="compact">
<li>Identifier: trStatus</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The state of the transfer request.</li>
<li>Constraints: The value MUST be one of: &quot;pending&quot;, &quot;clientApproved&quot;, &quot;clientCancelled&quot;, &quot;clientRejected&quot;, &quot;serverApproved&quot;, &quot;serverCancelled&quot;.</li>
</ul></li>
<li><t>Requesting Client ID</t>

<ul spacing="compact">
<li>Identifier: reqClientId</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Client Identifier</li>
<li>Description: The identifier of the client that initiated the transfer request.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Request Date</t>

<ul spacing="compact">
<li>Identifier: requestDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time that the transfer was requested.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Acting Client ID</t>

<ul spacing="compact">
<li>Identifier: actClientId</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Client Identifier</li>
<li>Description: For a pending pull transfer, the identifier of the sponsoring client that SHOULD act upon the request. For a pending push transfer, the identifier of the designated gaining client that SHOULD act upon the request. For all other statuses, the identifier of the client that took the indicated action.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Action Date</t>

<ul spacing="compact">
<li>Identifier: actionDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: For a pending request, the date and time by which a response is required before an automated response action SHOULD be taken by the server. For all other statuses, the date and time when the request was completed.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul></li>
</ul>

<section anchor="operations-1"><name>Operations</name>

<section anchor="transfer-create"><name>Create (Transfer Request)</name>

<ul spacing="compact">
<li>Identifier: transferCreate</li>
</ul>
<t>The Create operation initiates a transfer by creating a Transfer Process Object associated with the provisioned object. The transfer direction and gaining client (for push transfers) are provided as <tt>create-only</tt> data elements of the Transfer Process Object.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li><t>Pull transfer:</t>

<ul spacing="compact">
<li>The requesting client (gaining client) MUST provide valid Object Authorisation.</li>
</ul></li>
<li><t>Push transfer:</t>

<ul spacing="compact">
<li>Only the sponsoring client is authorised to initiate a push transfer.</li>
</ul></li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: Owner Data Object</li>
<li>Object: Transfer Process Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Transfer Process Object</li>
</ul></li>
</ul>
</section>

<section anchor="transfer-read"><name>Read (Transfer Query)</name>

<ul spacing="compact">
<li>Identifier: transferRead</li>
</ul>
<t>The Read operation allows a client to determine the real-time status of a pending or recently completed transfer request.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>This operation MUST be accessible to both the sponsoring client and the gaining client.</li>
<li>Server policy determines whether other clients may query transfer status and what information is returned.</li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Transfer Process Object</li>
</ul></li>
</ul>
</section>

<section anchor="transfer-delete"><name>Delete (Transfer Cancel)</name>

<ul spacing="compact">
<li>Identifier: transferDelete</li>
</ul>
<t>The Delete operation allows the initiating client to cancel its own pending transfer request.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only the initiating client (the client that originally requested the transfer).</li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li><t>Object: Transfer Process Object</t>

<ul spacing="compact">
<li>Cardinality: 0-1</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="transfer-approve"><name>Approve</name>

<ul spacing="compact">
<li>Identifier: transferApprove</li>
</ul>
<t>The Approve operation allows the appropriate client to accept a pending transfer request.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li><t>Pull transfer:</t>

<ul spacing="compact">
<li>only the sponsoring client</li>
</ul></li>
<li><t>Push transfer:</t>

<ul spacing="compact">
<li>only the designated gaining client</li>
</ul></li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Transfer Process Object</li>
</ul></li>
</ul>
</section>

<section anchor="transfer-reject"><name>Reject</name>

<ul spacing="compact">
<li>Identifier: transferReject</li>
</ul>
<t>The Reject operation allows the appropriate client to decline a pending transfer request.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li><t>Pull transfer:</t>

<ul spacing="compact">
<li>only the sponsoring client</li>
</ul></li>
<li><t>Push transfer:</t>

<ul spacing="compact">
<li>only the designated gaining client</li>
</ul></li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
<li><t>Input Data Elements:</t>

<ul spacing="compact">
<li><t>Reason</t>

<ul spacing="compact">
<li>Identifier: reason</li>
<li>Cardinality: 0-1</li>
<li>Data Type: String</li>
<li>Description: A human-readable text describing the rationale for rejecting the transfer request.</li>
<li>Constraints: In EPP Compatibility Profile this data element MUST NOT be used</li>
</ul></li>
</ul></li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Transfer Process Object</li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="restore-process-object"><name>Restore Process Object</name>

<ul spacing="compact">
<li>Name: Restore Process Object</li>
<li>Identifier: restoreProcess</li>
<li>Unique Identifier: processId</li>
<li>Extends: Base Process Object</li>
<li>Description: Represents the current state of a restore request for an object that has entered the Redemption Grace Period (RGP).</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Restore Status</t>

<ul spacing="compact">
<li>Identifier: restoreStatus</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The current state of the restore process.</li>
<li>Constraints: The value MUST be one of: <tt>&quot;pendingRestore&quot;</tt>, <tt>&quot;restored&quot;</tt>, <tt>&quot;rgpPendingDelete&quot;</tt></li>
</ul></li>
<li><t>Request Date</t>

<ul spacing="compact">
<li>Identifier: requestDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time when the restore request was submitted.</li>
<li>Constraints: MUST NOT be present if no restore request has been submitted yet.</li>
</ul></li>
<li><t>Report Date</t>

<ul spacing="compact">
<li>Identifier: reportDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time when the most recent restore report was accepted by the server.</li>
<li>Constraints: MUST NOT be present if no restore report has been accepted yet.</li>
</ul></li>
<li><t>Report Due Date</t>

<ul spacing="compact">
<li>Identifier: reportDueDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time by which a restore report must be submitted before the object reverts to <tt>rgpRedemptionPeriod</tt> state. Only present when the object is in <tt>rgpPendingRestore</tt> state.</li>
<li>Constraints: MUST NOT be present when <tt>restoreStatus</tt> is not <tt>&quot;pendingRestore&quot;</tt>.</li>
</ul></li>
<li><t>Restore Report</t>

<ul spacing="compact">
<li>Identifier: restoreReport</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Restore Report Object</li>
<li>Visibility: onDemand</li>
<li>Description: The restore report submitted by the sponsoring client as required by the RGP process. A client MAY provide it in the Create operation, so that the restore request and the report are processed atomically, or in a later Update operation while the object is in <tt>rgpPendingRestore</tt> state. A report provided in an Update operation replaces any previously submitted report.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>MUST NOT be provided if the server does not require a restore report.</li>
<li>In EPP Compatibility Profile, the restore report is write-only: the server does not return it in the output of any operation, because <xref target="RFC3915"></xref> provides no means to retrieve a submitted report.</li>
<li>In EPP Compatibility Profile, providing this element in the Create operation corresponds to <tt>op=&quot;report&quot;</tt>, omitting it corresponds to <tt>op=&quot;request&quot;</tt>, and providing it in the Update operation corresponds to <tt>op=&quot;report&quot;</tt> as defined in <xref target="RFC3915"></xref>.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>

<section anchor="operations-2"><name>Operations</name>

<section anchor="restore-create"><name>Create (Restore Request)</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation initiates the recovery of an object in the <tt>rgpRedemptionPeriod</tt> state by creating a Restore Process Object. The server MUST reject this operation if the owning object is not in the <tt>rgpRedemptionPeriod</tt> state.</t>
<t>If the server requires a restore report and <tt>restoreReport</tt> is absent, the object transitions to <tt>rgpPendingRestore</tt> state awaiting a subsequent Update operation. Otherwise the restore is completed immediately.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only the sponsoring client is authorised to perform this operation.</li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: Owner Data Object</li>
<li>Object: Restore Process Object</li>
<li><t>Input Data Elements:</t>

<ul spacing="compact">
<li><t>Restore Report</t>

<ul spacing="compact">
<li>Identifier: restoreReport</li>
<li>Cardinality: 0-1</li>
<li>Data Type: Restore Report Object</li>
<li>Description: An OPTIONAL inline restore report. If provided, the server processes the request and the report atomically. If the server does not require a restore report, this element MUST NOT be present and the restore is completed immediately. If the server requires a report and this element is absent, the object transitions to <tt>pendingRestore</tt> state awaiting a subsequent Report operation.</li>
<li>Constraints:</li>
<li>MUST NOT be provided if the server does not require a restore report.</li>
<li>In EPP Compatibility Profile, corresponds to <tt>op=&quot;request&quot;</tt> (without report) or a combined <tt>op=&quot;request&quot;</tt> followed immediately by <tt>op=&quot;report&quot;</tt> as defined in <xref target="RFC3915"></xref>.</li>
</ul></li>
</ul></li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Restore Process Object</li>
</ul></li>
</ul>
</section>

<section anchor="restore-read"><name>Read (Restore Query)</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation allows the sponsoring client to retrieve the current state of the RGP process for an object.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only the sponsoring client is authorised to perform this operation.</li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Restore Process Object</li>
</ul></li>
</ul>
<t>In EPP Compatibility Profile this operation is not supported.</t>
</section>

<section anchor="restore-report"><name>Update (Restore Report)</name>

<ul spacing="compact">
<li>Identifier: update</li>
</ul>
<t>This operation is OPTIONAL, only for servers which support or require submission of a restore report.</t>
<t>The Update operation submits the restore report required by the RGP process for an object in the <tt>rgpPendingRestore</tt> state. Since <tt>restoreReport</tt> is the only read-write data element of the Restore Process Object, the client MUST provide it in this operation. A report MAY be submitted more than once if corrections are required. The server MUST reject this operation if the object is not in the <tt>rgpPendingRestore</tt> state.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only the sponsoring client is authorised to perform this operation.</li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
<li><t>Input Data Elements:</t>

<ul spacing="compact">
<li><t>Restore Report</t>

<ul spacing="compact">
<li>Identifier: restoreReport</li>
<li>Cardinality: 1</li>
<li>Data Type: Restore Report Object</li>
<li>Description: The restore report to be submitted as part of the RGP process.</li>
<li>Constraints:</li>
<li>In EPP Compatibility Profile, corresponds to <tt>op=&quot;report&quot;</tt> as defined in <xref target="RFC3915"></xref>.</li>
</ul></li>
</ul></li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Restore Process Object</li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="renew-process-object"><name>Renew Process Object</name>

<ul spacing="compact">
<li>Name: Renew Process Object</li>
<li>Identifier: renewProcess</li>
<li>Unique Identifier: processId</li>
<li>Extends: Base Process Object</li>
<li>Description: Represents a renew request for a provisioned object. Creating this object initiates a renewal process that extends the registration period of the object. Reading this object returns the new expiry date if the renewal has been completed.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Expiry Date</t>

<ul spacing="compact">
<li>Identifier: expiryDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The current expiry date of the object. The server MUST validate this against the object's current <tt>expiryDate</tt> to prevent unintended duplicate renewals.</li>
</ul></li>
<li><t>Renewal Period</t>

<ul spacing="compact">
<li>Identifier: renewalPeriod</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: Period Object</li>
<li>Description: The duration to be added to the object's registration period. This value is used by the server to calculate the new <tt>expiryDate</tt>. The default value MAY be defined by server policy. The number of units available MAY be subject to limits imposed by the server.</li>
</ul></li>
</ul></li>
</ul>

<section anchor="operations-3"><name>Operations</name>

<section anchor="renew-create"><name>Create (Renew Request)</name>

<ul spacing="compact">
<li>Identifier: renewCreate</li>
</ul>
<t>The renew operation extends the validity period of an existing object by creating a Renew Process Object.</t>

<ul>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: Owner Data Object</li>
<li>Object: Renew Process Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Renew Process Object</li>
</ul></li>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only the sponsoring client is authorised to perform this operation.</li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="create-process"><name>Create Process Object</name>

<ul spacing="compact">
<li>Name: Create Process Object</li>
<li>Identifier: createProcess</li>
<li>Unique Identifier: processId</li>
<li>Extends: Base Process Object</li>
<li>Description: Represents the process initiated when a resource creation operation is performed. It carries creation-specific inputs that are consumed during the creation operation and are not stored as persistent attributes of the created resource object.</li>
<li>Data Elements: (None)</li>
</ul>
<t>Beyond the data elements of the Base Process Object, the generic Create Process Object defines no additional data elements. Individual object definitions extend it with object-specific creation inputs (such as the Domain Create Process Object <xref target="domain-create-process"></xref>, which adds the registration period).</t>

<section anchor="operations-4"><name>Operations</name>

<section anchor="create-process-create"><name>Create</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation is invoked implicitly as a side effect of the resource object create operation and is never invoked directly. It carries the creation-specific inputs consumed during the creation of the owning resource object.</t>

<ul>
<li><t>Input:</t>

<ul spacing="compact">
<li>Object: Create Process Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Create Process Object</li>
</ul></li>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Inherited from the resource object create operation that initiates this process.</li>
</ul></li>
</ul>
</section>

<section anchor="create-process-read"><name>Read</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation retrieves the result or status of the creation, if the server exposes the process resource.</t>

<ul>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Create Process Object</li>
</ul></li>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only the sponsoring client is authorised to perform this operation.</li>
</ul></li>
</ul>
</section>
</section>
</section>
</section>

<section anchor="domain-name-data-object"><name>Domain Name Data Object</name>

<section anchor="object-description"><name>Object Description</name>

<ul spacing="compact">
<li>Name: Domain Name Data Object</li>
<li>Identifier: domainName</li>
<li>Unique Identifier: name</li>
<li>Description: A Domain Name data object represents a domain name and contains the data required for its provisioning and management in the registry.</li>
</ul>
</section>

<section anchor="data-elements"><name>Data Elements</name>
<t>The following data elements are defined for the Domain Name Data Object.</t>

<ul>
<li><t>Name</t>

<ul spacing="compact">
<li>Identifier: name</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: Fully Qualified Domain Name</li>
<li>Description: The fully qualified name of the domain object.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>A server MAY restrict allowable domain names to a particular top-level domain, second-level domain, or other domain for which the server is authoritative.</li>
<li>If the domain name is an internationalized domain name (IDN), the value MUST be a valid ACE-encoded string representing the Unicode Name (uName).</li>
</ul></li>
</ul></li>
<li><t>Unicode Name</t>

<ul spacing="compact">
<li>Identifier: uName</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: The fully qualified name of the domain using the Unicode character set.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The value MUST be a fully qualified domain name in Unicode Normalization Form C (NFC) as defined in [UNICODE.NFC].</li>
<li>The server MUST validate the Unicode Name using the procedure described in section 4.2 of [RFC5891].</li>
<li>Every code point in the value MUST be classified as a candidate for inclusion by the rules defined in <xref target="RFC5892"></xref>.</li>
<li>If the value contains a code point from a script with Right-to-Left directionality, the value MUST satisfy the Bidi Rule defined in <xref target="RFC5893"></xref>.</li>
<li>The Unicode (U-label) form of the domain name, when converted according to the procedures defined in Section 2.3.2.4 of <xref target="RFC5890"></xref>, MUST be equal to the corresponding A-label representation.</li>
<li>Any code point valid under IDNA2003 but disallowed under IDNA2008 MUST NOT be allowed in the Unicode Name (uName).</li>
</ul></li>
</ul></li>
<li><t>LGR</t>

<ul spacing="compact">
<li>Identifier: lgr</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: String</li>
<li>Description: The name of the Label Generation Ruleset (LGR) containing the valid code points used for the Unicode Name (uName).</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>MUST NOT be empty when the Unicode Name (uName) is provided.</li>
<li>MUST be a valid LGR name registered in the IANA IDN Tables registry [IDN-Tables].</li>
</ul></li>
</ul></li>
<li><t>Provisioning Metadata</t>

<ul spacing="compact">
<li>Identifier: provMetadata</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Provisioning Metadata Object</li>
<li>Description: Standard metadata about the object's lifecycle and ownership.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-write</li>
<li>Data Type:  Domain Name Status Object</li>
<li>Description: The current status descriptors associated with the domain.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Possible combinations of Status Object Labels are specified in <xref target="domain-name-status-object"></xref>.</li>
</ul></li>
</ul></li>
<li><t>Registrant</t>

<ul spacing="compact">
<li>Identifier: registrant</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Aggregation[Contact Data Object]</li>
<li>Description: The contact object associated with the domain as the registrant.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The relation MUST correspond to a valid Contact Data Object known to the server.</li>
<li>Servers MAY restrict association of a Contact Data Object of a different sponsoring client.</li>
</ul></li>
</ul></li>
</ul>

<aside><t>TBC: leave registrant here or move it to contacts with a type?</t>
</aside>

<ul spacing="compact">
<li><t>Contacts</t>

<ul spacing="compact">
<li>Identifier: contacts</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-write</li>
<li><t>Data Type: LabelledAggregation[Contact Data Object]</t>

<ul spacing="compact">
<li>Label Description: The role of the associated contact.</li>
<li><t>Label Constraints:</t>

<ul spacing="compact">
<li>List of supported roles is defined by server policy</li>
<li>In the EPP Compatibility Profile, the value MUST be one of: &quot;admin&quot;, &quot;billing&quot;, or &quot;tech&quot;</li>
</ul></li>
</ul></li>
<li>Description: A collection of other contact objects associated with the domain object.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Each associated contact MUST correspond to a valid Contact Data Object known to the server before it can be associated with the domain.</li>
<li>Maximum number of associated contacts (per role) MAY be restricted by server policy</li>
</ul></li>
</ul></li>
</ul>

<aside><t>TBC: IANA registry for contact role label?</t>
</aside>

<ul>
<li><t>Nameservers</t>

<ul spacing="compact">
<li>Identifier: nameservers</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-write</li>
<li>Data Type: Aggregation[Host Data Object]</li>
<li>Description: A collection of nameservers associated with the domain.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>A Host Data Object MUST be known to the server before it can be associated with the domain.</li>
<li>MUST not be used when 1 or more DNS Data entries are specified through the DNS Data element.</li>
</ul></li>
</ul></li>
<li><t>DNS Data</t>

<ul spacing="compact">
<li>Identifier: dns</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: DNS Data Object</li>
<li>Description: DNS resource records and operational controls related to the domain name. This structure follows the unified DNS data model defined in <xref target="I-D.simmen-rpp-dns-data"></xref>, providing a single container for all DNS-related provisioning data including delegation, DNSSEC, and other record types.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The type of the record entries MAY be constrained by the server policy. Typically the values would be limited to allowed parent-side resource record types.</li>
<li>In EPP Compatibility Profile, a server MUST support NS, A, and AAAA record types for delegation, and with DNSSEC Extension <xref target="RFC5910"></xref> a server MUST additionally support DS and/or DNSKEY record types.</li>
<li>The names of DNS entries MUST be the domain name itself or subordinate to the domain name and MUST NOT be below zone cut in case of present delegation.</li>
<li>A server MAY forbid use of NS/A/AAAA record types if the server only supports host object model through Nameserver property defining those records.</li>
<li>MUST not be used when 1 or more nameservers are specified through the Nameserver element.</li>
</ul></li>
</ul></li>
<li><t>Subordinate Hosts</t>

<ul spacing="compact">
<li>Identifier: subordinateHosts</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Aggregation[Host Data Object]</li>
<li>Description: A collection of subordinate host objects that exist under this domain.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Expiry Date</t>

<ul spacing="compact">
<li>Identifier: expiryDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time identifying the end of the domain object's registration period.</li>
<li>Constraints: The value is set by the server and cannot be specified by the client.</li>
</ul></li>
<li><t>Authorisation Information</t>

<ul spacing="compact">
<li>Identifier: authInfo</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Authorisation Information Object</li>
<li>Visibility: onDemand</li>
<li>Description: Authorisation information associated with the domain object.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>This element MUST only be returned if the querying client is the sponsoring client or if the client supplied valid Object Authorisation with the operation.</li>
</ul></li>
</ul></li>
<li><t>Processes</t>

<ul spacing="compact">
<li>Identifier: processes</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Processes Object</li>
<li>Direct Access: true</li>
<li>Description: The Process Objects currently or recently initiated on the domain object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul>
</section>

<section anchor="operations-5"><name>Operations</name>

<section anchor="availability-operation"><name>Availability Operation</name>

<ul spacing="compact">
<li>Identifier: availability</li>
</ul>
<t>The Availability operation allows a client to determine whether a Domain Name resource with the given name can be created.</t>
<t>The operation has no input data elements and takes no object representation as input. The client identifies the resource by its Reference only, i.e. only the Unique Identifier (Name) is taken into consideration.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any authenticated client is authorised to perform this operation.</li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
<li><t>Parameters:</t>

<ul spacing="compact">
<li><t>Unicode Name</t>

<ul spacing="compact">
<li>Identifier: uName</li>
<li>Cardinality: 0-1</li>
<li>Data Type: String</li>
<li>Description: The Unicode Name (uName) of the domain name for which availability is determined. If the parameter is absent, the server determines availability from the referenced domain name only.</li>
<li>Constraints:</li>
<li>The value MUST satisfy the constraints of the Unicode Name data element of the Domain Name Data Object.</li>
<li>If the value does not map to the referenced domain name, the server MUST return an error indicating the mismatch.</li>
</ul></li>
<li><t>LGR</t>

<ul spacing="compact">
<li>Identifier: lgr</li>
<li>Cardinality: 0-1</li>
<li>Data Type: String</li>
<li>Description: The name of the Label Generation Ruleset (LGR) against which the server determines availability of the domain name. If the parameter is absent, the server uses its default LGR for the top-level domain, as indicated by the Discovery IDN LGR Object.</li>
<li>Constraints:</li>
<li>The value MUST be a valid LGR name registered in the IANA IDN Tables registry [IDN-Tables].</li>
<li>If the domain name contains a code point not available in the specified LGR, the server MUST return an error indicating the invalid code point.</li>
</ul></li>
</ul></li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Domain Name Availability Object</li>
</ul></li>
</ul>
</section>

<section anchor="create-operation"><name>Create Operation</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation allows a client to provision a new Domain Name resource. The operation accepts as input all create-only and read-write data elements defined for the Domain Name Data Object.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Generally each client is authorised to create new domain objects becoming a sponsoring client. This can be however constrained by the server policy in many ways, i.e. by applying rate limiting, billing-related constraints or compliance locks.</li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Object: This Object</li>
<li>Object: Domain Create Process Object</li>
</ul></li>
</ul>
<t>The Create operation implicitly initiates the Domain Create Process Object <xref target="domain-create-process"></xref>, which carries the creation-specific inputs that are consumed during creation and not persisted as part of the domain object's state.</t>
<t>The server MUST validate the name using the procedure described in section 4.2 of [RFC5891]. If the validation of the IDN name failed because it contained a code point not available in the specified IDN table, the server MUST return an error indicating the invalid code point. If the name does not map to the provided Unicode Name (uName), the server MUST respond with an appropriate error indicating the mismatch.</t>
</section>

<section anchor="read-operation"><name>Read Operation</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation allows a client to retrieve the data elements of a Domain Name resource. The server's response MAY vary depending on client authorisation and server policy.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li><t>Sponsoring client:</t>

<ul spacing="compact">
<li>Full object</li>
</ul></li>
<li><t>Other client:</t>

<ul spacing="compact">
<li><t>Without Object Authorisation:</t>

<ul spacing="compact">
<li>Limited object (non-confidential properties) or operation denied</li>
</ul></li>
<li><t>With Object Authorisation:</t>

<ul spacing="compact">
<li>Full object, however some properties only authorised to the sponsoring client MAY be redacted according to server policy</li>
</ul></li>
</ul></li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
<li><t>Parameters:</t>

<ul spacing="compact">
<li><t>Hosts Filter</t>

<ul spacing="compact">
<li>Identifier: hostsFilter</li>
<li>Cardinality: 0-1</li>
<li>Data Type: String</li>
<li>Description: Controls which host information is returned with the object.</li>
<li>Constraints: The value MUST be one of &quot;all&quot;, &quot;del&quot; (delegated), &quot;sub&quot; (subordinate), or &quot;none&quot;. The default value is &quot;all&quot;.</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="update-operation"><name>Update Operation</name>

<ul spacing="compact">
<li>Identifier: update</li>
</ul>
<t>The Update operation allows a client to modify the read-write data elements of an existing Domain Name resource.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only sponsoring client is authorised to perform this operation</li>
</ul></li>
</ul>
<t>At least one change to a read-write data element MUST be provided, unless the operation is extended. The registrant and the Authorisation Information MAY be removed. Contacts, nameservers, and the registrant to be added MUST be known to the server.</t>
</section>

<section anchor="delete-operation"><name>Delete Operation</name>

<ul spacing="compact">
<li>Identifier: delete</li>
</ul>
<t>The Delete operation allows a client to remove an existing Domain Name resource. The operation targets a specific data object identified by its name.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only sponsoring client is authorised to perform this operation</li>
</ul></li>
</ul>
<t>The server SHOULD reject a delete request if subordinate host objects are associated with the domain name.</t>
<t>The error response SHOULD indicate the related subordinate host objects.</t>
</section>
</section>

<section anchor="processes"><name>Processes</name>
<t>The Domain Name Data Object supports the following Process Objects <xref target="process-objects"></xref> unmodified:</t>

<ul spacing="compact">
<li>Renew Process</li>
<li><t>Restore Process</t>

<ul spacing="compact">
<li>Constraints: OPTIONAL; available only when the RGP feature is supported.</li>
</ul></li>
</ul>
<t>The Domain Name Data Object supports the following Process Objects extended by an object-specific definition:
* Domain Create Process <xref target="domain-create-process"></xref>
* Domain Transfer Process <xref target="domain-transfer-process"></xref></t>

<section anchor="domain-create-process"><name>Domain Create Process Object</name>

<ul spacing="compact">
<li>Name: Domain Create Process Object</li>
<li>Identifier: domainCreateProcess</li>
<li>Extends: Create Process Object</li>
<li>Unique Identifier: processId</li>
<li>Description: The domain-specific Create Process Object <xref target="create-process"></xref>. It is implicitly initiated by the Domain Name Data Object create operation and carries the domain creation-specific inputs, namely the requested initial registration period, that are consumed during creation and not persisted as part of the domain object's state.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Period</t>

<ul spacing="compact">
<li>Identifier: period</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: Period Object</li>
<li>Description: The initial registration period for the domain name. This value is used by the server to calculate the initial <tt>expiryDate</tt> of the object.</li>
<li>Constraints: The default value MAY be defined by server policy. The number of units available MAY be subject to limits imposed by the server.</li>
</ul></li>
</ul></li>
</ul>

<section anchor="operations-6"><name>Operations</name>

<section anchor="domain-create-process-create"><name>Create</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation is invoked implicitly as a side effect of the Domain Name Data Object create operation and is never invoked directly. It carries the registration period consumed during domain creation.</t>

<ul>
<li><t>Input:</t>

<ul spacing="compact">
<li>Object: Domain Create Process Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Domain Create Process Object</li>
</ul></li>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Inherited from the Domain Name Data Object create operation that initiates this process.</li>
</ul></li>
</ul>
</section>

<section anchor="domain-create-process-read"><name>Read</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation retrieves the result or status of the domain creation, if the server exposes the process resource.</t>

<ul>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: This Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Domain Create Process Object</li>
</ul></li>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only the sponsoring client is authorised to perform this operation.</li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="domain-transfer-process"><name>Domain Transfer Process Object</name>

<ul spacing="compact">
<li>Name: Domain Transfer Process Object</li>
<li>Identifier: domainTransferProcess</li>
<li>Extends: Transfer Process Object</li>
<li>Unique Identifier: processId</li>
<li>Description: The domain-specific Transfer Process Object <xref target="transfer-operations"></xref>. It carries the domain-specific transfer inputs and outputs (the requested transfer period and the resulting expiry date) that extend the common transfer process.</li>
<li><t>Data Elements:</t>

<ul spacing="compact">
<li><t>Expiry Date</t>

<ul spacing="compact">
<li>Identifier: expiryDate</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The end of the domain object's registration period if the transfer caused or causes a change in the validity period.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Transfer Period</t>

<ul spacing="compact">
<li>Identifier: transferPeriod</li>
<li>Cardinality: 0-1</li>
<li>Mutability: create-only</li>
<li>Data Type: Period Object</li>
<li>Description: The number of units to be added to the registration period of the domain object upon successful completion of the transfer. The number of units available MAY be subject to limits imposed by the server.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>In EPP Compatibility Profile, Transfer Period cannot be read from the Transfer Process Object</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<t>Transfer of a Domain Name Data Object MUST implicitly transfer all Host Data Objects that are subordinate to the domain object. For example, if domain object &quot;example.com&quot; is transferred and host object &quot;ns1.example.com&quot; exists, the host object MUST be transferred as part of the &quot;example.com&quot; transfer process. Actions that do not preserve the relationship between a domain object and its subordinate host objects MUST be disallowed.</t>

<section anchor="operations-7"><name>Operations</name>

<section anchor="domain-transfer-process-create"><name>Create</name>

<ul spacing="compact">
<li>Identifier: transferCreate</li>
</ul>
<t>The Create operation initiates a transfer of the Domain Name Data Object by creating a Domain Transfer Process Object, extending the common Transfer Create Operation <xref target="transfer-create"></xref>.</t>

<ul>
<li><t>Input:</t>

<ul spacing="compact">
<li>Reference: Owner Data Object</li>
<li>Object: Domain Transfer Process Object</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Domain Transfer Process Object</li>
</ul></li>
<li><t>Authorisation: as defined in <xref target="transfer-create"></xref>.</t>
</li>
</ul>
</section>
</section>
</section>
</section>
</section>

<section anchor="contact-data-object"><name>Contact Data Object</name>

<section anchor="object-description-1"><name>Object Description</name>

<ul spacing="compact">
<li>Name: Contact Data Object</li>
<li>Identifier: contact</li>
<li>Unique Identifier: id</li>
<li>Description: A Contact Data Object represents the contact information for an individual or organisation associated with other objects.</li>
</ul>
</section>

<section anchor="data-elements-1"><name>Data Elements</name>
<t>The following data elements are defined for the Contact Data Object.</t>

<ul>
<li><t>Handle ID</t>

<ul spacing="compact">
<li>Identifier: id</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: Identifier</li>
<li>Description: External unique identifier of the contact object.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>This value MUST be supported to be provided by the client.</li>
<li>Servers MAY support server-side generation of this value.</li>
</ul></li>
</ul></li>
<li><t>Provisioning Metadata</t>

<ul spacing="compact">
<li>Identifier: provMetadata</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Provisioning Metadata Object</li>
<li>Description: Standard metadata about the object's lifecycle and ownership.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-write</li>
<li>Data Type: Contact Status Object</li>
<li>Description: Status descriptors associated with the contact.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Possible combinations of Contact Status Labels are specified in <eref target="#contact-status-values">Contact Status Values</eref>.</li>
</ul></li>
</ul></li>
<li><t>Contact Information</t>

<ul spacing="compact">
<li>Identifier: contactInfo</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: External:RPP-JSContact-Profile:Card</li>
<li>Description: Contains contact information.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>In EPP Compatibility Profile, at most one internationalised and one localised form of the contact information are provided. The internationalised form MUST be represented in a subset of UTF-8 that can be represented in the 7-bit US-ASCII character set, while the localised form MAY be represented in unrestricted UTF-8.</li>
<li>In EPP Compatibility Profile, a postal address consists of up to three street lines, a city, an OPTIONAL state or province, an OPTIONAL postal code, and a country code that is a two-character identifier as specified in ISO 3166-1.</li>
<li>In EPP Compatibility Profile, telephone numbers MUST begin with a plus sign (&quot;+&quot;), followed by a country code defined in ITU-T E.164, followed by a dot (&quot;.&quot;), followed by a sequence of digits, and MAY note an extension. Email addresses MUST conform to the syntax defined in <xref target="RFC5322"></xref>.</li>
</ul></li>
</ul></li>
<li><t>Authorisation Information</t>

<ul spacing="compact">
<li>Identifier: authInfo</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Authorisation Information Object</li>
<li>Visibility: onDemand</li>
<li>Description: Authorisation information associated with the contact object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Disclose</t>

<ul spacing="compact">
<li>Identifier: disclose</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Disclose Object</li>
<li>Description: Identifies elements that require exceptional server-operator handling to allow or restrict disclosure to third parties.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>A server MUST reject any transaction that requests disclosure practices that do not conform to the server's announced data-collection policy.</li>
</ul></li>
</ul></li>
<li><t>Processes</t>

<ul spacing="compact">
<li>Identifier: processes</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Processes Object</li>
<li>Direct Access: true</li>
<li>Description: The Process Objects currently or recently initiated on the contact object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul>

<aside><t>TBC: IANA registry for statuses?</t>
</aside>
</section>

<section anchor="operations-8"><name>Operations</name>

<section anchor="availability-operation-1"><name>Availability Operation</name>

<ul spacing="compact">
<li>Identifier: availability</li>
</ul>
<t>The Availability operation allows a client to determine whether a Contact resource with the given Handle ID can be created.</t>
<t>The operation has no input data elements and takes no object representation as input. The client identifies the resource by its Reference only, i.e. only the Unique Identifier (Handle ID) is taken into consideration.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any authenticated client is authorised to perform this operation.</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Contact Availability Object</li>
</ul></li>
</ul>
</section>

<section anchor="create-operation-1"><name>Create Operation</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation allows a client to provision a new Contact resource. The operation accepts as input all create-only and read-write data elements defined for the Contact Data Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Generally each client is authorised to create new contact objects becoming a sponsoring client. This can be however constrained by the server policy, e.g. by applying rate limiting or compliance locks.</li>
</ul></li>
</ul>
<t>In EPP Compatibility Profile, the following data elements MUST be provided:</t>

<ul spacing="compact">
<li>Handle ID (<tt>id</tt>)</li>
<li>At least one Contact Information entry (<tt>contactInfo</tt>) containing a Name (<tt>name</tt>) and an Address (<tt>addr</tt>) with City (<tt>city</tt>) and Country Code (<tt>cc</tt>)</li>
<li>Email (<tt>email</tt>)</li>
<li>Authorisation Information (<tt>authInfo</tt>)</li>
</ul>
</section>

<section anchor="read-operation-1"><name>Read Operation</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation allows a client to retrieve the data elements of a Contact resource. The server's response MAY vary depending on client authorisation and server policy.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li><t>Sponsoring client:</t>

<ul spacing="compact">
<li>Full object</li>
</ul></li>
<li><t>Other client:</t>

<ul spacing="compact">
<li><t>Without Object Authorisation:</t>

<ul spacing="compact">
<li>Limited object (non-confidential properties) or operation denied</li>
</ul></li>
<li><t>With Object Authorisation:</t>

<ul spacing="compact">
<li>Full object, however some properties only authorised to the sponsoring client MAY be redacted according to server policy</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<t>Authorisation Information (<tt>authInfo</tt>) MUST NOT be provided in the response if the querying client is not the current sponsoring client.</t>
<t>When constructing the response, the server MUST respect the disclosure policies defined by the Disclose Object (<tt>disclose</tt>), whether set by the server operator's default data-collection policy or by the sponsoring client for the contact. Data elements marked for non-disclosure MUST NOT be included in responses to unauthorised clients.</t>
</section>

<section anchor="update-operation-1"><name>Update Operation</name>

<ul spacing="compact">
<li>Identifier: update</li>
</ul>
<t>The Update operation allows a client to modify the attributes of an existing Contact resource.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only sponsoring client is authorised to perform this operation</li>
</ul></li>
</ul>
<t>The following aspects of the contact object MAY be modified:</t>

<ul spacing="compact">
<li>Status values that are client-manageable (prefixed with &quot;client&quot;) MAY be added or removed.</li>
<li>Contact Information, Voice Phone Number, Fax Phone Number, Email, Authorisation Information, and Disclose preferences MAY be changed.</li>
</ul>
<t>At least one change MUST be provided, unless the operation is extended.</t>
</section>

<section anchor="delete-operation-1"><name>Delete Operation</name>

<ul spacing="compact">
<li>Identifier: delete</li>
</ul>
<t>The Delete operation allows a client to remove an existing Contact resource. The operation targets a specific data object identified by its Handle ID.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only sponsoring client is authorised to perform this operation</li>
</ul></li>
</ul>
<t>The server SHOULD reject a delete request if the contact object is associated with other known objects (e.g., domain names). An associated contact SHOULD NOT be deleted until associations with other known objects have been broken.</t>
<t>The error response SHOULD indicate the existing object associations.</t>
</section>
</section>

<section anchor="processes-1"><name>Processes</name>
<t>The Contact Data Object supports the following Process Objects <xref target="process-objects"></xref> unmodified:</t>

<ul spacing="compact">
<li>Transfer Process</li>
</ul>
<t>The Contact Data Object supports no Process Objects extended by an object-specific definition.</t>
</section>
</section>

<section anchor="host-data-object"><name>Host Data Object</name>

<section anchor="object-description-2"><name>Object Description</name>

<ul spacing="compact">
<li>Name: Host Data Object</li>
<li>Identifier: host</li>
<li>Unique Identifier: hostName</li>
<li>Description: A Host Data Object represents a nameserver that provides DNS services for a domain name.</li>
</ul>
</section>

<section anchor="data-elements-2"><name>Data Elements</name>
<t>The following data elements are defined for the Host Data Object.</t>

<ul>
<li><t>Host Name</t>

<ul spacing="compact">
<li>Identifier: hostName</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: Fully Qualified Domain Name</li>
<li>Description: Fully qualified name of a host.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>An Internal host MUST be treated as a subordinate host when it is used as a nameserver for a domain other than its superordinate domain.</li>
<li>Actions that do not preserve the relationship between a host object and its superordinate domain object MUST be disallowed.</li>
</ul></li>
</ul></li>
<li><t>Provisioning Metadata</t>

<ul spacing="compact">
<li>Identifier: provMetadata</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Provisioning Metadata Object</li>
<li>Description: Standard metadata about the object's lifecycle and ownership.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-write</li>
<li>Data Type:  Host Status Object</li>
<li>Description: The current status descriptors associated with the host.</li>
<li>Constraints: Possible combinations of Host Status Labels are specified in <eref target="#host-status-values">Host Status Values</eref></li>
</ul></li>
<li><t>DNS Data</t>

<ul spacing="compact">
<li>Identifier: dns</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: DNS Data Object</li>
<li>Description: DNS resource records and operational controls related to the host. This structure follows the unified DNS data model defined in <xref target="I-D.simmen-rpp-dns-data"></xref>.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The names of DNS entries MUST be the host name itself or subordinate to the host name.</li>
<li>In EPP Compatibility Profile the record entries MUST be limited to A and AAAA entries for IPv4 and IPv6 glue records respectively.</li>
<li>In EPP Compatibility Profile, IPv4 addresses MUST conform to <xref target="RFC0791"></xref> and IPv6 addresses MUST conform to <xref target="RFC4291"></xref>. A server MAY reject IP addresses that have not been allocated for public use by IANA.</li>
</ul></li>
</ul></li>
<li><t>Processes</t>

<ul spacing="compact">
<li>Identifier: processes</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Processes Object</li>
<li>Direct Access: true</li>
<li>Description: The Process Objects currently or recently initiated on the host object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul>
</section>

<section anchor="operations-9"><name>Operations</name>

<section anchor="availability-operation-2"><name>Availability Operation</name>

<ul spacing="compact">
<li>Identifier: availability</li>
</ul>
<t>The Availability operation allows a client to determine whether a Host Data Object with the given host name can be created.</t>
<t>The operation has no input data elements and takes no object representation as input. The client identifies the resource by its Reference only, i.e. only the Unique Identifier (Host Name) is taken into consideration.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any authenticated client is authorised to perform this operation.</li>
</ul></li>
<li><t>Output:</t>

<ul spacing="compact">
<li>Object: Host Availability Object</li>
</ul></li>
</ul>
</section>

<section anchor="create-operation-2"><name>Create Operation</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation allows a client to provision a new Host Data Object. The operation accepts as input all create-only and read-write data elements defined for the Host Data Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Generally each client is authorised to create new host objects becoming a sponsoring client. This can be however constrained by the server policy, e.g. by applying rate limiting or compliance locks.</li>
</ul></li>
</ul>
<t>If the host name exists in a namespace for which the server is authoritative, then the superordinate domain of the host MUST be known to the server before the host object can be created.</t>
<t>In EPP Compatibility Profile, IP addresses are REQUIRED only as needed to produce DNS glue records. If the host name exists in a namespace for which the server is authoritative and is subordinate to an existing domain, IP addresses SHOULD be provided. If the host name is external to the server's namespace, IP addresses are not required by the DNS and MAY be omitted.</t>
</section>

<section anchor="read-operation-2"><name>Read Operation</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation allows a client to retrieve the data elements of a Host Data Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any client is authorised to retrieve the full object. In EPP Compatibility Profile, host objects do not carry authorisation information and there is no distinction based on client identity as described in <xref target="RFC5732" sectionFormat="of" section="3.1.2"></xref>.</li>
</ul></li>
</ul>
</section>

<section anchor="update-operation-2"><name>Update Operation</name>

<ul spacing="compact">
<li>Identifier: update</li>
</ul>
<t>The Update operation allows a client to modify the attributes of an existing Host Data Object. The operation targets a specific data object identified by its host name.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only sponsoring client is authorised to perform this operation</li>
</ul></li>
</ul>
<t>Host name changes MAY require the addition or removal of IP addresses to be accepted by the server. IP address association MAY be subject to server policies for provisioning hosts as nameservers. The IP address restrictions described for the Create operation apply to updates as well.</t>
<t>At least one change to a data element MUST be provided, unless the operation is extended.</t>
<t>Host name changes can have an impact on associated objects that refer to the host object. A Host Name change SHOULD NOT require additional updates of associated objects to preserve existing associations, with one exception: changing an External host object that has associations with objects that are sponsored by a different client. Attempts to update such hosts directly MUST fail. The change can be provisioned by creating a new External host with a new name and any needed new attributes, and subsequently updating the other objects sponsored by the client.</t>
</section>

<section anchor="delete-operation-2"><name>Delete Operation</name>

<ul spacing="compact">
<li>Identifier: delete</li>
</ul>
<t>The Delete operation allows a client to remove an existing Host Data Object. The operation targets a specific data object identified by its host name.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only sponsoring client is authorised to perform this operation</li>
</ul></li>
</ul>
<t>The server SHOULD reject a delete request if the host object is associated with any other object, such as a domain name object. Deleting a host object without first breaking existing associations can cause DNS resolution failure for domain objects that refer to the deleted host object.</t>

<aside><t>TODO: consider RFC 9874 / BCP 244 for host deletions practices</t>
</aside>
<t>The error response SHOULD indicate the related associated objects.</t>
</section>
</section>

<section anchor="processes-2"><name>Processes</name>
<t>The Host Data Object supports the following Process Objects <xref target="process-objects"></xref> unmodified:</t>

<ul spacing="compact">
<li><t>Transfer Process</t>

<ul spacing="compact">
<li>Constraints: Host objects MUST NOT be transferred directly. They are transferred implicitly when their superordinate domain object is transferred.</li>
</ul></li>
</ul>
<t>The Host Data Object supports no Process Objects <xref target="process-objects"></xref> extended by an object-specific definition.</t>
</section>
</section>

<section anchor="organisation-data-object"><name>Organisation Data Object</name>

<section anchor="object-description-3"><name>Object Description</name>

<ul spacing="compact">
<li>Name: Organisation Data Object</li>
<li>Identifier: organisation</li>
<li>Unique Identifier: id</li>
<li>Description: An Organisation Data Object represents an entity, such as a registrar or reseller that is involved in the domain registration process. This object is based on the EPP Organisation Mapping defined in <xref target="RFC8543"></xref>.</li>
</ul>
</section>

<section anchor="data-elements-3"><name>Data Elements</name>
<t>The following data elements are defined for the Organisation Data Object.</t>

<ul>
<li><t>Organisation ID</t>

<ul spacing="compact">
<li>Identifier: id</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: Identifier</li>
<li>Description: A server-unique identifier for the organisation object.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>This value MUST be supported to be provided by the client.</li>
<li>Servers MAY support server-side generation of this value.</li>
</ul></li>
</ul></li>
<li><t>Provisioning Metadata</t>

<ul spacing="compact">
<li>Identifier: provMetadata</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Provisioning Metadata Object</li>
<li>Description: Standard metadata about the object's lifecycle and ownership.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-write</li>
<li>Data Type: Organisation Status Object</li>
<li>Description: The current operational status descriptors associated with the organisation. An organisation object MUST always have at least one associated status value.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Possible combinations of Organisation Status Labels are specified in <eref target="#organisation-status-values">Organisation Status Values</eref>.</li>
<li>A client MUST NOT alter server status values set by the server itself.</li>
</ul></li>
</ul></li>
<li><t>Roles</t>

<ul spacing="compact">
<li>Identifier: roles</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-write</li>
<li><t>Data Type: DictionaryComposition[Organisation Role Object]</t>

<ul spacing="compact">
<li>Label Description: type of role</li>
<li>Label Constraints: The value MUST be one of the role types registered in the IANA &quot;EPP Organisation Role Values&quot; registry as defined in <xref target="RFC8543" sectionFormat="of" section="7.3"></xref>. Initial values include <tt>registrar</tt>, <tt>reseller</tt>, <tt>privacyproxy</tt>, and <tt>dns-operator</tt>.</li>
</ul></li>
<li>Description: One or more roles describing the relationship the organisation has within the registry ecosystem. An organisation object MUST always have at least one associated role.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>An organisation MAY have multiple roles with different role types.</li>
<li>Role types are registered in the IANA &quot;EPP Organisation Role Values&quot; registry as defined in <xref target="RFC8543" sectionFormat="of" section="7.3"></xref>. Initial values include <tt>registrar</tt>, <tt>reseller</tt>, <tt>privacyproxy</tt>, and <tt>dns-operator</tt>.</li>
</ul></li>
</ul></li>
<li><t>Parent Organisation</t>

<ul spacing="compact">
<li>Identifier: parent</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: Aggregation[Organisation Data Object]</li>
<li>Description: The parent organisation in a hierarchical organisation structure (e.g., a reseller's parent registrar).</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Loops MUST be prohibited. If organisation A has organisation B as its parent, organisation B MUST NOT have organisation A as its parent, directly or transitively.</li>
</ul></li>
</ul></li>
<li><t>Contact Information</t>

<ul spacing="compact">
<li>Identifier: contactInfo</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: External:RPP-JSContact-Profile:Card</li>
<li>Description: Contact information for the organisation.</li>
</ul></li>
<li><t>Contacts</t>

<ul spacing="compact">
<li>Identifier: contacts</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-write</li>
<li><t>Data Type: LabelledAggregation[Contact Data Object]</t>

<ul spacing="compact">
<li>Label Description: type of contact</li>
<li>Label Constraints: The value MUST be one of the contact types registered in the IANA &quot;EPP Organisation Contact Types&quot; registry as defined in <xref target="RFC8543" sectionFormat="of" section="7.4"></xref>. Initial values include <tt>admin</tt>, <tt>tech</tt>, <tt>billing</tt>, <tt>abuse</tt>, and <tt>custom</tt>.<br />
</li>
</ul></li>
<li>Description: Identifiers of contact objects associated with the organisation.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Contact object identifiers MUST be known to the server before the contact can be associated.</li>
</ul></li>
</ul></li>
</ul>

<aside><t>TODO: how handle the &quot;custom&quot; contact type?</t>
</aside>

<ul>
<li><t>Users</t>

<ul spacing="compact">
<li>Identifier: users</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-write</li>
<li><t>Data Type: LabelledAggregation[User Data Object]</t>

<ul spacing="compact">
<li>Label Description: RBAC role of the user</li>
<li>Label Constraints: The value MUST be one of the role types registered in the IANA &quot;RPP User Role Values&quot; registry.</li>
</ul></li>
<li>Direct Access: true</li>
<li>Description: One or more RBAC roles assigned to the user.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Each role value MUST be a non-empty string.</li>
<li>Allowed role values MAY be constrained by server policy.</li>
</ul></li>
</ul></li>
<li><t>Processes</t>

<ul spacing="compact">
<li>Identifier: processes</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Processes Object</li>
<li>Direct Access: true</li>
<li>Description: The Process Objects currently or recently initiated on the organisation object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul>

<aside><t>TODO: define an IANA registry for user roles?</t>
</aside>
</section>

<section anchor="operations-10"><name>Operations</name>

<section anchor="create-operation-3"><name>Create Operation</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation allows a client to provision a new Organisation Data Object. The operation accepts as input all create-only and read-write data elements defined for the Organisation Data Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Generally only registry clients are authorised to create new organisation objects.</li>
</ul></li>
</ul>
<t>An organisation object MUST include at least one role on creation. The server MAY defer completing the action and return a <tt>pendingCreate</tt> status if human or third-party review is required.</t>
</section>

<section anchor="read-operation-3"><name>Read Operation</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation allows a client to retrieve the data elements of an Organisation Data Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any client is authorised to retrieve organisation object information. The server MAY restrict the information returned based on client identity and server policy.</li>
</ul></li>
</ul>
</section>

<section anchor="update-operation-3"><name>Update Operation</name>

<ul spacing="compact">
<li>Identifier: update</li>
</ul>
<t>The Update operation allows a client to modify the attributes of an existing Organisation Data Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Generally only registry clients are authorised to update organisation objects.</li>
</ul></li>
</ul>
<t>The following aspects of the organisation object MAY be modified:</t>

<ul spacing="compact">
<li>Contacts MAY be added or removed.</li>
<li>Roles MAY be added or removed.</li>
<li>Status values that are client-manageable (prefixed with &quot;client&quot;) MAY be added or removed.</li>
<li>Parent Organisation ID and Contact Information MAY be changed.</li>
<li>Users MAY be added or removed.</li>
</ul>
<t>A client MUST NOT add, delete, or alter values for statuses managed by the server (prefixed with &quot;server&quot;). A server MAY add, delete, or alter status values set by a client, subject to server policy.</t>
</section>

<section anchor="delete-operation-3"><name>Delete Operation</name>

<ul spacing="compact">
<li>Identifier: delete</li>
</ul>
<t>The Delete operation allows a client to remove an existing Organisation Data Object. The operation targets a specific data object identified by its Organisation ID.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Generally only registry clients are authorised to delete organisation objects.</li>
</ul></li>
</ul>
<t>An organisation object MUST NOT be deleted if it is associated with other known objects (e.g., domain names, contacts, or child organisations). The server MUST reject such a delete request and notify the client that object relationships exist.</t>
<t>The error response SHOULD indicate the related associated objects.</t>
</section>
</section>
</section>

<section anchor="message-data-object"><name>Message Data Object</name>

<section anchor="object-description-4"><name>Object Description</name>

<ul spacing="compact">
<li>Name: Message Data Object</li>
<li>Identifier: message</li>
<li>Unique Identifier: id</li>
<li>Description: A Message Data Object represents a message which is inserted in the message queue of an organisation and retrieved by clients associated with that organisation.</li>
</ul>
</section>

<section anchor="data-elements-4"><name>Data Elements</name>
<t>The following data elements are defined for the Message Data Object.</t>

<ul>
<li><t>Message ID</t>

<ul spacing="compact">
<li>Identifier: id</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Identifier</li>
<li>Description: A server-unique identifier for the message object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Creation Date</t>

<ul spacing="compact">
<li>Identifier: creationDate</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The date and time when the message object was created and inserted into the queue.</li>
<li>Constraints: The value is set by the server.</li>
</ul></li>
<li><t>Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The current lifecycle status of the message object.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Possible values: <tt>queued</tt>, <tt>delivered</tt> and <tt>removed</tt></li>
</ul></li>
</ul></li>
<li><t>Data</t>

<ul spacing="compact">
<li>Identifier: data</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: Base Message Object</li>
<li>Description: The data related to a specific message type, such as a transfer request or a review response.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul>
</section>

<section anchor="operations-11"><name>Operations</name>

<section anchor="create-operation-4"><name>Create Operation</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation allows a server to insert a new message into the queue for a registrar. The operation accepts as input all create-only and read-write data elements defined for the Message Data Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Only the server is authorised to create new message objects.</li>
</ul></li>
</ul>
</section>

<section anchor="read-operation-4"><name>Read Operation</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation allows a client to retrieve the data elements of a Message Data Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any client is authorised to retrieve message object information. The server MAY restrict the information returned based on client identity and server policy.</li>
</ul></li>
</ul>
<t>Organisation ID (<tt>owner</tt>) MUST NOT be provided in the response, since a client can only ever retrieve messages linked to its own organisation.</t>
</section>

<section anchor="query-operation"><name>Query Operation</name>

<ul spacing="compact">
<li>Identifier: query</li>
</ul>
<t>The Query operation allows a client to retrieve a collection of Message Data Object instances based on specified criteria.</t>

<ul>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any client is authorised to retrieve message object information. The server MAY restrict the information returned based on client identity and server policy.</li>
</ul></li>
<li><t>Input:</t>

<ul spacing="compact">
<li><t>Parameters:</t>

<ul spacing="compact">
<li><t>Message Type</t>

<ul spacing="compact">
<li>Identifier: type</li>
<li>Cardinality: 0-1</li>
<li>Data Type: String</li>
<li>Description: The type of the message to use as a filter when retrieving message objects.</li>
<li>Constraints:</li>
<li>The type value MUST be a valid identifier for an RPP message component (e.g. reviewResponse).</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="delete-operation-4"><name>Delete Operation</name>

<ul spacing="compact">
<li>Identifier: delete</li>
</ul>
<t>The Delete operation allows a client to remove an existing Message Data Object. The operation targets a specific data object identified by its Message ID.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Generally clients are authorised to delete message objects linked to the organisation the client belongs to.</li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="user-object"><name>User Object</name>

<section anchor="object-description-5"><name>Object Description</name>

<ul spacing="compact">
<li>Name: User Data Object</li>
<li>Identifier: user</li>
<li>Unique Identifier: id</li>
<li>Description: Represents a user linked to an Organisation Object. Each user carries a set of RBAC roles that define the user's permissions within the context of the owning Organisation Object. The lifecycle of a User Object is bound to its Organisation Object.</li>
</ul>
</section>

<section anchor="data-elements-5"><name>Data Elements</name>
<t>The following data elements are defined for the User Data Object.</t>

<ul spacing="compact">
<li><t>User Identifier</t>

<ul spacing="compact">
<li>Identifier: id</li>
<li>Cardinality: 1</li>
<li>Mutability: create-only</li>
<li>Data Type: Identifier</li>
<li>Description: A unique identifier for the user</li>
<li>Constraints: MUST be globally unique in the server scope</li>
</ul></li>
<li><t>Details</t>

<ul spacing="compact">
<li>Identifier: details</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: External:RPP-JSContact-Profile:Card</li>
<li>Description: The details of the user, such as name, email, and phone number</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Description</t>

<ul spacing="compact">
<li>Identifier: description</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-write</li>
<li>Data Type: String</li>
<li>Description: A description of the user</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Status</t>

<ul spacing="compact">
<li>Identifier: status</li>
<li>Cardinality: 1</li>
<li>Mutability: read-write</li>
<li>Data Type: User Status Object</li>
<li>Description: The current status of the user.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Allowed status values and transitions are specified in <eref target="#user-status-values">User Status Values</eref>.</li>
<li>A client MUST NOT alter server status values set by the server itself.</li>
</ul></li>
</ul></li>
<li><t>Organisation</t>

<ul spacing="compact">
<li>Identifier: organisation</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Aggregation[Organisation Data Object]</li>
<li>Description: A reference to the owner organisation object.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Processes</t>

<ul spacing="compact">
<li>Identifier: processes</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Processes Object</li>
<li>Direct Access: true</li>
<li>Description: The Process Objects currently or recently initiated on the user object.</li>
<li>Constraints: (None)</li>
</ul></li>
</ul>

<aside><t>TODO: what other data elements should be included for the User Data Object?</t>
</aside>
</section>

<section anchor="operations-12"><name>Operations</name>

<section anchor="create-operation-5"><name>Create Operation</name>

<ul spacing="compact">
<li>Identifier: create</li>
</ul>
<t>The Create operation creates a new user, which is associated with an existing Organisation Object. The operation accepts as input all create-only and read-write data elements of the User Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Client can only create users in the context of the organisation linked to the client, and only if the client has the necessary permissions to create users in that organisation.</li>
</ul></li>
</ul>
</section>

<section anchor="read-operation-5"><name>Read Operation</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation retrieves the data of a specific User Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Client can only read users in the context of the organisation linked to the client, and only if the client has the necessary permissions to read users in that organisation.</li>
</ul></li>
</ul>
</section>

<section anchor="update-operation-4"><name>Update Operation</name>

<ul spacing="compact">
<li>Identifier: update</li>
</ul>
<t>The Update operation modifies the read-write data elements.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Client can only update users in the context of the organisation linked to the client, and only if the client has the necessary permissions to update users in that organisation.</li>
</ul></li>
</ul>
</section>

<section anchor="delete-operation-5"><name>Delete Operation</name>

<ul spacing="compact">
<li>Identifier: delete</li>
</ul>
<t>The Delete operation removes a specific User Object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Client can only delete users in the context of the organisation linked to the client, and only if the client has the necessary permissions to delete users in that organisation.</li>
</ul></li>
</ul>
<t>The server MUST reject this operation if the target User Object is the last user of the owning organisation that is permitted to manage users.</t>
<t>User Objects are deleted together with their owning Organisation Object.</t>
</section>
</section>
</section>

<section anchor="discovery-data-object"><name>Discovery Data Object</name>

<section anchor="object-description-6"><name>Object Description</name>

<ul spacing="compact">
<li>Name: Discovery Data Object</li>
<li>Identifier: discovery</li>
<li>Unique Identifier: (None)</li>
<li>Description: A Discovery Data Object describes the capabilities of an RPP server, such as the supported versions, TLDs, extensions, profiles, resource collections, authentication methods and endpoints. The server provides a single Discovery Data Object, which is therefore not identified by a Unique Identifier.</li>
</ul>
</section>

<section anchor="data-elements-6"><name>Data Elements</name>
<t>The following data elements are defined for the Discovery Data Object.</t>

<ul>
<li><t>Versions</t>

<ul spacing="compact">
<li>Identifier: versions</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-only</li>
<li>Data Type: Discovery Version Object</li>
<li>Description: The versions of RPP supported by the server.</li>
<li>Constraints: An operator that supports more than one incompatible version MUST deploy them on distinct base URLs and announce each of them.</li>
</ul></li>
<li><t>Environment</t>

<ul spacing="compact">
<li>Identifier: environment</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Discovery Environment Object</li>
<li>Description: Information about the RPP server.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>TLDs</t>

<ul spacing="compact">
<li>Identifier: tlds</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The TLDs supported by the server, for example &quot;example&quot; or &quot;org&quot;.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Extensions</t>

<ul spacing="compact">
<li>Identifier: extensions</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Extension Object</li>
<li>Description: The extensions supported by the server.</li>
<li>Constraints: The server MUST include the version of each extension.</li>
</ul></li>
<li><t>Profiles</t>

<ul spacing="compact">
<li>Identifier: profiles</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The names of the profiles supported by the server.</li>
</ul></li>
<li><t>Objects</t>

<ul spacing="compact">
<li>Identifier: objects</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The list of identifiers of data objects supported by the server</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Date and Time</t>

<ul spacing="compact">
<li>Identifier: datetime</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Timestamp</li>
<li>Description: The current date and time of the server.</li>
<li>Constraints: The value MUST be expressed in UTC using the <tt>Z</tt> suffix, for example <tt>2026-06-01T10:00:00Z</tt>, and MUST NOT use a numeric UTC offset or any other time zone.</li>
</ul></li>
<li><t>Links</t>

<ul spacing="compact">
<li>Identifier: links</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li><t>Data Type: LabelledAggregation[String]</t>

<ul spacing="compact">
<li>Label Description: The relation type of the link.</li>
<li>Label Constraints: The value MUST be a link relation type registered in the IANA &quot;Link Relation&quot; registry.</li>
</ul></li>
<li>Description: Links to documents related to the use of RPP with the server, such as policies and terms. Each value is the location of a linked document, labelled with its relation type.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>Each value MUST be an absolute URL using the HTTPS scheme.</li>
<li>The document MUST be accessible to the client without authentication.</li>
<li>A server SHOULD provide a link for each of the <tt>privacy-policy</tt> and <tt>terms-of-service</tt> relation types, defined in <xref target="RFC6903"></xref>.</li>
</ul></li>
</ul></li>
<li><t>IDN LGRs</t>

<ul spacing="compact">
<li>Identifier: idnLgr</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Discovery IDN LGR Object</li>
<li>Description: The Label Generation Rulesets (LGRs) supported by the server.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Notices</t>

<ul spacing="compact">
<li>Identifier: notices</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Discovery Notice Object</li>
<li>Description: Notices from the server operator.</li>
<li>Constraints: (None)</li>
<li>Description: The objects allowed for provisioning operations, for example &quot;domainName&quot;, &quot;host&quot; or &quot;contact&quot;.</li>
<li>Constraints: The values MUST be valid object identifiers as defined in the RPP Data Object Registry.</li>
</ul></li>
</ul>
</section>

<section anchor="operations-13"><name>Operations</name>

<section anchor="read-operation-6"><name>Read Operation</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation allows a client to retrieve the Discovery Data Object. It is the only operation supported for this object.</t>

<ul>
<li><t>Input: (None)</t>
</li>
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any client is authorised to perform this operation. The operation MUST be available without authentication, so that a client can retrieve it before authenticating with the server.</li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="profile-data-object"><name>Profile Data Object</name>

<section anchor="object-description-7"><name>Object Description</name>

<ul spacing="compact">
<li>Name: Profile Data Object</li>
<li>Identifier: profile</li>
<li>Unique Identifier: name</li>
<li>Description: A Profile Data Object represents a named set of protocol features and versions that defines the compatibility and capabilities of RPP server implementations. A profile is published by the server, and a client can retrieve it to determine which features, objects and extensions it can use.</li>
</ul>
</section>

<section anchor="data-elements-7"><name>Data Elements</name>
<t>The following data elements are defined for the Profile Data Object. All data elements are managed by the server.</t>

<ul>
<li><t>Name</t>

<ul spacing="compact">
<li>Identifier: name</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: A unique name that identifies the profile.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The name of a standard profile, which is published in the IANA registry for RPP profiles, MUST use the RPP URN namespace, for example <tt>urn:ietf:params:rpp:profile:{profile_name}</tt>, and MUST be unique within that namespace. It SHOULD be descriptive of the features and versions included in the profile.</li>
<li>The name of a private profile, which is not published in the IANA registry, MUST be globally unique. The use of reverse domain name notation is RECOMMENDED.</li>
</ul></li>
</ul></li>
<li><t>Description</t>

<ul spacing="compact">
<li>Identifier: description</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: A human-readable description of the profile and its intended use.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Version</t>

<ul spacing="compact">
<li>Identifier: version</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The version of the profile.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>RPP Version</t>

<ul spacing="compact">
<li>Identifier: rppVersion</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The minimum version of the RPP protocol that is supported or required for the profile.</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Objects</t>

<ul spacing="compact">
<li>Identifier: objects</li>
<li>Cardinality: 1+</li>
<li>Mutability: read-only</li>
<li>Data Type: String</li>
<li>Description: The list of identifiers of data objects supported by the server</li>
<li>Constraints: (None)</li>
</ul></li>
<li><t>Extensions</t>

<ul spacing="compact">
<li>Identifier: extensions</li>
<li>Cardinality: 0+</li>
<li>Mutability: read-only</li>
<li>Data Type: Extension Object</li>
<li>Description: The extensions, including their names and versions, that are supported or required for the profile.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>A profile MUST NOT list the same extension name more than once.</li>
<li>The server MUST support all extensions listed in the profile.</li>
</ul></li>
</ul></li>
<li><t>Base Profile</t>

<ul spacing="compact">
<li>Identifier: baseProfile</li>
<li>Cardinality: 0-1</li>
<li>Mutability: read-only</li>
<li>Data Type: Aggregation[Profile Data Object]</li>
<li>Description: A base profile that is extended by this profile. The features and versions of the base profile are included in this profile, which MAY add to them or override them, for example the version of an extension.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The base profile MUST be published in the IANA registry for RPP profiles, or be made available to the client using other means.</li>
<li>The depth of inheritance MUST be limited to 1: the base profile MUST NOT itself have a base profile.</li>
<li>A profile MUST NOT be its own base profile.</li>
</ul></li>
</ul></li>
<li><t>Default Profile</t>

<ul spacing="compact">
<li>Identifier: defaultProfile</li>
<li>Cardinality: 1</li>
<li>Mutability: read-only</li>
<li>Data Type: Boolean</li>
<li>Description: The default profile that is used when no specific profile is requested by the client.</li>
<li><t>Constraints:</t>

<ul spacing="compact">
<li>The default profile MUST be published in the IANA registry for RPP profiles, or be made available to the client using other means.</li>
<li>Only one profile MUST be designated as the default profile.</li>
</ul></li>
</ul></li>
</ul>
</section>

<section anchor="operations-14"><name>Operations</name>

<section anchor="read-operation-7"><name>Read Operation</name>

<ul spacing="compact">
<li>Identifier: read</li>
</ul>
<t>The Read operation allows a client to retrieve the Profile Data Object identified by its name. It is the only operation supported for this object.</t>

<ul spacing="compact">
<li><t>Authorisation:</t>

<ul spacing="compact">
<li>Any authenticated client is authorised to perform this operation.</li>
</ul></li>
</ul>
</section>
</section>
</section>

<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="rpp-registry-group"><name>RPP Registry Group</name>
<t>The IANA is requested to create a new registry group for RPP, this will be used to group together all the RPP-related registries such as those for discovery URLs, extensions and profiles.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RESTful Provisioning Protocol (RPP)
Reference: This Document
IANA Registry Reference: TODO
]]></sourcecode>
</section>

<section anchor="rpp-data-object-registry"><name>RPP Data Object Registry</name>
<t>Name of the registry: RPP Data Object Registry
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Specification Required</t>
<t>This document establishes the &quot;RESTful Provisioning Protocol (RPP) Data Object Registry&quot;. This registry serves as a catalogue of all data objects, component objects, data elements, and operations used within RPP.</t>

<section anchor="registration-policy"><name>Registration Policy</name>
<t>The policy for adding new objects, data elements, or operations to this registry is &quot;Specification Required&quot; <xref target="RFC8126"></xref>.</t>
<t>Standardised RPP extensions that introduce new data objects, add data elements to existing objects, or define new operations, operation input data elements, or operation parameters MUST register these additions in this registry. Each such registration MUST reference the specification that defines the extension.</t>
<t>Private (non-standardised) extensions are not required to register in this registry.</t>
</section>

<section anchor="registry-structure"><name>Registry Structure</name>
<t>The registry is organised as a collection of Object definitions. Each Object definition MUST include:</t>

<ul>
<li><t>A header containing the Object Identifier, Object Name, Object Type (Resource, Process or Component), the identifier of the object it extends (if any), a brief description, and a reference to its defining specification.</t>
</li>
<li><t>A &quot;Data Elements&quot; table listing all persisted data elements associated with the object. Each entry MUST specify the element's Identifier, Name, Cardinality, Mutability, Data Type, description, and a reference to the specification that defines it.</t>
</li>
<li><t>An &quot;Operations&quot; section (applicable only for Object Types Resource or Process). For each operation, the
registry MUST provide:</t>

<ul spacing="compact">
<li>The Operation's Name, a description, and a reference to the specification that defines it.</li>
<li>An &quot;Input Data Elements&quot; table listing all input data elements of the operation. Each entry MUST specify the input data element's Identifier, Name, Cardinality, Data Type, description, and a reference to the specification that defines it.</li>
<li>A &quot;Parameters&quot; table listing all parameters of the operation. Each entry MUST specify the parameter's Identifier, Name, Cardinality, Data Type, description, and a reference to the specification that defines it.</li>
</ul></li>
</ul>
<t>Extensions MAY add new data elements, operations, operation input data elements, or operation parameters to existing Object definitions in the registry. Each such addition MUST reference the extension specification that introduces it, allowing implementations to distinguish core protocol elements from extension-defined elements.</t>
</section>

<section anchor="initial-registrations"><name>Initial Registrations</name>
<t>The initial contents of the RPP Data Object Registry are defined below.</t>
<t>Object: period</t>
<t>Object Name: Period Object</t>
<t>Object Type: Component</t>
<t>Description: Represents a duration of time.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>value</td>
<td>Value</td>
<td>1</td>
<td>read-write</td>
<td>Integer</td>
<td>The numeric value of the period.</td>
</tr>

<tr>
<td>unit</td>
<td>Unit</td>
<td>1</td>
<td>read-write</td>
<td>String</td>
<td>The unit of the period.</td>
</tr>
</tbody>
</table><t>Object: dnsRecord</t>
<t>Object Name: DNS Resource Record Object</t>
<t>Object Type: Component</t>
<t>Description: Represents a single DNS resource record.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>name</td>
<td>Name</td>
<td>1</td>
<td>read-write</td>
<td>String</td>
<td>The owner name of the DNS entry.</td>
</tr>

<tr>
<td>class</td>
<td>Class</td>
<td>0-1</td>
<td>read-write</td>
<td>String</td>
<td>The DNS resource record class.</td>
</tr>

<tr>
<td>type</td>
<td>Type</td>
<td>1</td>
<td>read-write</td>
<td>String</td>
<td>The DNS resource record type, indicating the format of the RDATA field.</td>
</tr>

<tr>
<td>rdata</td>
<td>RDATA</td>
<td>1</td>
<td>read-write</td>
<td>Object</td>
<td>The actual payload data of the DNS record. Structure depends on the record type.</td>
</tr>
</tbody>
</table><t>Object: dnsControls</t>
<t>Object Name: DNS Operational Controls Object</t>
<t>Object Type: Component</t>
<t>Description: Contains operational control parameters that a client MAY use to influence server-side DNS behaviour for a set of DNS records.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>ttl</td>
<td>TTL</td>
<td>0-1</td>
<td>read-write</td>
<td>Dictionary [Integer]</td>
<td>Controls the caching behaviour of DNS resource records, keyed by lowercase record type name.</td>
</tr>

<tr>
<td>maxSigLifetime</td>
<td>Maximum Signature Lifetime</td>
<td>0-1</td>
<td>read-write</td>
<td>Dictionary [Integer]</td>
<td>Maximum number of seconds after signature generation when the parent's signature on signed DNS data should expire, keyed by lower-case record type name.</td>
</tr>
</tbody>
</table><t>Object: dnsData</t>
<t>Object Name: DNS Data Object</t>
<t>Object Type: Component</t>
<t>Description: A container for DNS resource records and associated operational controls for a provisioned object.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>records</td>
<td>Records</td>
<td>0+</td>
<td>read-write</td>
<td>DNS Resource Record Object</td>
<td>An array of DNS resource records associated with the provisioned object.</td>
</tr>

<tr>
<td>controls</td>
<td>Controls</td>
<td>0-1</td>
<td>read-write</td>
<td>DNS Operational Controls Object</td>
<td>Operational control parameters for the DNS records.</td>
</tr>
</tbody>
</table><t>Object: authInfo</t>
<t>Object Name: Authorisation Information Object</t>
<t>Object Type: Component</t>
<t>Description: Contains authorisation credentials for an operation.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>method</td>
<td>Method</td>
<td>1</td>
<td>create-only</td>
<td>String</td>
<td>The identifier of the RPP authorisation method.</td>
</tr>

<tr>
<td>authdata</td>
<td>Authorisation Information</td>
<td>1</td>
<td>create-only</td>
<td>String</td>
<td>The value of the authorisation information. It might be as simple as a password string, but also more complex values like public key certificates or tokens encoded as string are possible.</td>
</tr>
</tbody>
</table><t>Object: domainStatus</t>
<t>Object Name: Domain Name Status Object</t>
<t>Object Type: Component</t>
<t>Description: Represents one of the status values associated with a Domain Name Data Object</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>label</td>
<td>Label</td>
<td>1</td>
<td>create-only</td>
<td>String</td>
<td>machine-readable enum label of a status</td>
</tr>

<tr>
<td>reason</td>
<td>Reason</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>a human-readable text that describes the rationale for the status applied to the object.</td>
</tr>

<tr>
<td>due</td>
<td>Due</td>
<td>0-1</td>
<td>read-write</td>
<td>Timestamp</td>
<td>a timestamp, when this status is going to be removed automatically, or changed to other status. This field can be used to express lifecycle related information.</td>
</tr>
</tbody>
</table><t>Object: hostStatus</t>
<t>Object Name: Host Status Object</t>
<t>Object Type: Component</t>
<t>Description: Represents one of the status values associated with a Host Data Object</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>label</td>
<td>Label</td>
<td>1</td>
<td>create-only</td>
<td>String</td>
<td>machine-readable enum label of a status</td>
</tr>

<tr>
<td>reason</td>
<td>Reason</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>a human-readable text that describes the rationale for the status applied to the object.</td>
</tr>
</tbody>
</table><t>Object: contactStatus</t>
<t>Object Name: Contact Status Object</t>
<t>Object Type: Component</t>
<t>Description: Represents one of the status values associated with a Contact Data Object</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>label</td>
<td>Label</td>
<td>1</td>
<td>create-only</td>
<td>String</td>
<td>machine-readable enum label of a status</td>
</tr>

<tr>
<td>reason</td>
<td>Reason</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>a human-readable text that describes the rationale for the status applied to the object.</td>
</tr>
</tbody>
</table><t>Object: organisationRoleStatus</t>
<t>Object Name: Organisation Role Status Object</t>
<t>Object Type: Component</t>
<t>Description: Represents one of the status values associated with an Organisation Role Object. A role SHOULD have at least one associated status value.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>label</td>
<td>Label</td>
<td>1</td>
<td>create-only</td>
<td>String</td>
<td>machine-readable enum label of a status</td>
</tr>

<tr>
<td>reason</td>
<td>Reason</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>a human-readable text that describes the rationale for the status applied to the role.</td>
</tr>
</tbody>
</table><t>Object: organisationStatus</t>
<t>Object Name: Organisation Status Object</t>
<t>Object Type: Component</t>
<t>Description: Represents one of the status values associated with an Organisation Data Object, as defined in <xref target="RFC8543" sectionFormat="of" section="3.4"></xref>. An Organisation Data Object MUST always have at least one associated status value.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>label</td>
<td>Label</td>
<td>1</td>
<td>create-only</td>
<td>String</td>
<td>machine-readable enum label of a status</td>
</tr>

<tr>
<td>reason</td>
<td>Reason</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>a human-readable text that describes the rationale for the status applied to the object.</td>
</tr>
</tbody>
</table><t>Object: userStatus</t>
<t>Object Name: User Status Object</t>
<t>Object Type: Component</t>
<t>Description: Represents the status value associated with a User Data Object. A User Data Object MUST always have exactly one associated status value.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>label</td>
<td>Label</td>
<td>1</td>
<td>create-only</td>
<td>String</td>
<td>machine-readable enum label of a status</td>
</tr>

<tr>
<td>reason</td>
<td>Reason</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>a human-readable text that describes the rationale for the status applied to the object.</td>
</tr>
</tbody>
</table><t>Object: provMetadata</t>
<t>Object Name: Provisioning Metadata Object</t>
<t>Object Type: Component</t>
<t>Description: Contains standard metadata about the lifecycle and ownership of a provisioned object.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>repositoryId</td>
<td>Repository ID</td>
<td>0-1</td>
<td>read-only</td>
<td>Identifier</td>
<td>A server-assigned unique identifier for the object.</td>
</tr>

<tr>
<td>spClientId</td>
<td>Sponsoring Client ID</td>
<td>1</td>
<td>read-only</td>
<td>Client Identifier</td>
<td>The identifier of the client that is the current sponsor of the object.</td>
</tr>

<tr>
<td>crClientId</td>
<td>Creating Client ID</td>
<td>0-1</td>
<td>read-only</td>
<td>Client Identifier</td>
<td>The identifier of the client that created the object.</td>
</tr>

<tr>
<td>crDate</td>
<td>Creation Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time of object creation.</td>
</tr>

<tr>
<td>upClientId</td>
<td>Updating Client ID</td>
<td>0-1</td>
<td>read-only</td>
<td>Client Identifier</td>
<td>The identifier of the client that last updated the object.</td>
</tr>

<tr>
<td>upDate</td>
<td>Update Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time of the most recent object modification.</td>
</tr>

<tr>
<td>trDate</td>
<td>Transfer Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time of the most recent successful object transfer.</td>
</tr>
</tbody>
</table><t>Object: processes</t>
<t>Object Name: Processes Object</t>
<t>Object Type: Component</t>
<t>Description: A container grouping the Process Objects currently or recently initiated on a Data Object, structured as a dictionary keyed by process type where each element holds an unordered array of Process Objects of that type. The set of process-type data elements is extensible; extensions MAY register additional process-type elements.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>transferProcess</td>
<td>Transfer Processes</td>
<td>0+</td>
<td>read-only</td>
<td>Aggregation [Transfer Process Object]</td>
<td>The transfer processes initiated on the owning Data Object.</td>
</tr>

<tr>
<td>renewProcess</td>
<td>Renew Processes</td>
<td>0+</td>
<td>read-only</td>
<td>Aggregation [Renew Process Object]</td>
<td>The renew processes initiated on the owning Data Object.</td>
</tr>

<tr>
<td>restoreProcess</td>
<td>Restore Processes</td>
<td>0+</td>
<td>read-only</td>
<td>Aggregation [Restore Process Object]</td>
<td>The restore processes initiated on the owning Data Object.</td>
</tr>

<tr>
<td>createProcess</td>
<td>Create Processes</td>
<td>0+</td>
<td>read-only</td>
<td>Aggregation [Create Process Object]</td>
<td>The create processes initiated on the owning Data Object.</td>
</tr>
</tbody>
</table><t>Object: baseProcess</t>
<t>Object Name: Base Process Object</t>
<t>Object Type: Component</t>
<t>Description: Base structure for all Process Objects, containing the data elements common to every process.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>processId</td>
<td>Process ID</td>
<td>0-1</td>
<td>read-only</td>
<td>String</td>
<td>A server-assigned identifier of the process instance, unique within the Owner Data Object.</td>
</tr>
</tbody>
</table><t>Object: baseAvailability</t>
<t>Object Name: Base Availability Object</t>
<t>Object Type: Component</t>
<t>Description: Base structure for the result of an Availability operation, indicating whether the referenced object can be created.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>available</td>
<td>Available</td>
<td>1</td>
<td>read-only</td>
<td>Boolean</td>
<td>Indicates whether the referenced object can be created at the time the operation is completed.</td>
</tr>

<tr>
<td>reason</td>
<td>Reason</td>
<td>0-1</td>
<td>read-only</td>
<td>String</td>
<td>Server-specific text explaining why the referenced object cannot be created.</td>
</tr>
</tbody>
</table><t>Object: domainNameAvailability</t>
<t>Object Name: Domain Name Availability Object</t>
<t>Object Type: Component</t>
<t>Extends: baseAvailability</t>
<t>Description: The result of an Availability operation on a Domain Name Data Object.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements: (None)</t>
<t>Object: contactAvailability</t>
<t>Object Name: Contact Availability Object</t>
<t>Object Type: Component</t>
<t>Extends: baseAvailability</t>
<t>Description: The result of an Availability operation on a Contact Data Object.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements: (None)</t>
<t>Object: hostAvailability</t>
<t>Object Name: Host Availability Object</t>
<t>Object Type: Component</t>
<t>Extends: baseAvailability</t>
<t>Description: The result of an Availability operation on a Host Data Object.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements: (None)</t>
<t>Object: baseMessage</t>
<t>Object Name: Base Message Object</t>
<t>Object Type: Component</t>
<t>Description: Base structure for all message objects, containing common data elements such as the object type and object identifier.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>objectType</td>
<td>Object Type</td>
<td>0-1</td>
<td>read-only</td>
<td>String</td>
<td>The object identifier of the object affected by the requested action.</td>
</tr>

<tr>
<td>objectId</td>
<td>Object Identifier</td>
<td>0-1</td>
<td>read-only</td>
<td>String</td>
<td>The unique identifier of the object affected by the requested operation.</td>
</tr>
</tbody>
</table><t>Object: reviewResponseMessage</t>
<t>Object Name: Review Response Object</t>
<t>Object Type: Component</t>
<t>Extends: baseMessage</t>
<t>Description: Notification of the result of an offline review of a requested operation.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>approved</td>
<td>Approval Result</td>
<td>1</td>
<td>read-only</td>
<td>Boolean</td>
<td>Whether the requested action was approved and completed.</td>
</tr>

<tr>
<td>clientTransactionId</td>
<td>Client Transaction ID</td>
<td>0-1</td>
<td>read-only</td>
<td>String</td>
<td>The client transaction identifier from the original request, if supplied.</td>
</tr>

<tr>
<td>serverTransactionId</td>
<td>Server Transaction ID</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The server transaction identifier returned for the original request.</td>
</tr>

<tr>
<td>completionDate</td>
<td>Completion Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time when review of the requested action was completed.</td>
</tr>

<tr>
<td>message</td>
<td>Message</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>Human-readable message associated with the review response.</td>
</tr>

<tr>
<td>process</td>
<td>Process</td>
<td>0-1</td>
<td>read-only</td>
<td>Base Process Object</td>
<td>The process whose operation was subject to the offline review.</td>
</tr>
</tbody>
</table><t>Object: transferRequestMessage</t>
<t>Object Name: Transfer Request Message Object</t>
<t>Object Type: Component</t>
<t>Extends: baseMessage</t>
<t>Description: Notification for losing client of started transfer request, where the client expected to act on the pending transfer request.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>status</td>
<td>Transfer Status</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The current state of the transfer request.</td>
</tr>

<tr>
<td>requestDate</td>
<td>Request Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time the transfer was requested.</td>
</tr>

<tr>
<td>actionDate</td>
<td>Action Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The deadline for responding before the server takes an automated action.</td>
</tr>

<tr>
<td>process</td>
<td>Process</td>
<td>0-1</td>
<td>read-only</td>
<td>Transfer Process Object</td>
<td>The transfer process the message pertains to.</td>
</tr>
</tbody>
</table><t>Object: transferOutcomeMessage</t>
<t>Object Name: Transfer Outcome Message Object</t>
<t>Object Type: Component</t>
<t>Extends: baseMessage</t>
<t>Description: Notification for a client affected by the completion of a transfer request.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>trStatus</td>
<td>Transfer Status</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The final state of the transfer request.</td>
</tr>

<tr>
<td>requestDate</td>
<td>Request Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time the transfer was requested.</td>
</tr>

<tr>
<td>actionDate</td>
<td>Action Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time the transfer request was resolved.</td>
</tr>

<tr>
<td>expiryDate</td>
<td>Expiry Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The end of the object's validity period if the operation causes a change in the validity period.</td>
</tr>

<tr>
<td>process</td>
<td>Process</td>
<td>0-1</td>
<td>read-only</td>
<td>Transfer Process Object</td>
<td>The transfer process the message pertains to.</td>
</tr>
</tbody>
</table><t>Object: expirationDeletionMessage</t>
<t>Object Name: Expiration Deletion Message Object</t>
<t>Object Type: Component</t>
<t>Extends: baseMessage</t>
<t>Description: Notification for the sponsoring client that an object was deleted following expiration.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>deletionDate</td>
<td>Deletion Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time the server deleted the object.</td>
</tr>
</tbody>
</table><t>Object: autoRenewalMessage</t>
<t>Object Name: Auto-Renewal Message Object</t>
<t>Object Type: Component</t>
<t>Extends: baseMessage</t>
<t>Description: Notification for the sponsoring client that the server automatically renewed an object.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>renewalDate</td>
<td>Renewal Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time the server renewed the object.</td>
</tr>

<tr>
<td>expiryDate</td>
<td>Expiry Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The new expiration date of the object.</td>
</tr>
</tbody>
</table><t>Object: serviceNoticeMessage</t>
<t>Object Name: Service Notice Message Object</t>
<t>Object Type: Component</t>
<t>Extends: baseMessage</t>
<t>Description: Generic text-based message containing information not covered by any other message type.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>message</td>
<td>Message</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>Human-readable service information for the receiving organisation.</td>
</tr>
</tbody>
</table><t>Object: transferProcess</t>
<t>Object Name: Transfer Process Object</t>
<t>Object Type: Process</t>
<t>Extends: baseProcess</t>
<t>Description: Represents a transfer request for a provisioned object. Creating this object initiates the transfer. Approve and Reject are additional operations; Delete corresponds to cancel.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>transferDir</td>
<td>Transfer Direction</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>The direction of the transfer (&quot;pull&quot; or &quot;push&quot;). If omitted, server policy determines default.</td>
</tr>

<tr>
<td>gainingClientId</td>
<td>Gaining Client ID</td>
<td>0-1</td>
<td>create-only</td>
<td>Client Identifier</td>
<td>The designated gaining client. REQUIRED for push transfers; MUST NOT be provided for pull.</td>
</tr>

<tr>
<td>trStatus</td>
<td>Transfer Status</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The state of the transfer request.</td>
</tr>

<tr>
<td>reqClientId</td>
<td>Requesting Client ID</td>
<td>1</td>
<td>read-only</td>
<td>Client Identifier</td>
<td>The identifier of the client that initiated the transfer request.</td>
</tr>

<tr>
<td>requestDate</td>
<td>Request Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time that the transfer was requested.</td>
</tr>

<tr>
<td>actClientId</td>
<td>Acting Client ID</td>
<td>1</td>
<td>read-only</td>
<td>Client Identifier</td>
<td>The identifier of the client that should or did act on the request.</td>
</tr>

<tr>
<td>actionDate</td>
<td>Action Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The response deadline (if pending) or completion date.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Create</t>
<t>Operation Identifier: transferCreate</t>
<t>Description: Initiates a transfer of a provisioned object by creating a Transfer Process Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Transfer Read</t>
<t>Operation Identifier: transferRead</t>
<t>Description: Queries the status of a transfer of a provisioned object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Transfer Delete</t>
<t>Operation Identifier: transferDelete</t>
<t>Description: Cancels a pending transfer of a provisioned object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Transfer Approve</t>
<t>Operation Identifier: transferApprove</t>
<t>Description: Approves a pending transfer of a provisioned object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Transfer Reject</t>
<t>Operation Identifier: transferReject (on Transfer Process Object)</t>
<t>Description: Rejects a pending transfer of a provisioned object.</t>
<t>Input Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>reason</td>
<td>Reason</td>
<td>0-1</td>
<td>String</td>
<td>A human-readable text describing the rationale for rejection.</td>
</tr>
</tbody>
</table><t>Parameters: (None)</t>
<t>Object: renewProcess</t>
<t>Object Name: Renew Process Object</t>
<t>Object Type: Process</t>
<t>Extends: baseProcess</t>
<t>Description: Represents a renewal request for a provisioned object. Creating this object initiates the renewal.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>expiryDate</td>
<td>Expiry Date</td>
<td>0-1</td>
<td>create-only</td>
<td>Timestamp</td>
<td>The expiry date of the object after the renewal is completed.</td>
</tr>

<tr>
<td>renewalPeriod</td>
<td>Renewal Period</td>
<td>0-1</td>
<td>create-only</td>
<td>Period Object</td>
<td>The duration to be added to the object's registration period. This value is used by the server to calculate the new <tt>expiryDate</tt>. The default value MAY be defined by server policy. The number of units available MAY be subject to limits imposed by the server.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Create</t>
<t>Operation Identifier: renewCreate</t>
<t>Description: Initiates a renewal of a provisioned object by creating a Renew Process Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: createProcess</t>
<t>Object Name: Create Process Object</t>
<t>Object Type: Process</t>
<t>Extends: baseProcess</t>
<t>Description: Represents the process initiated when a resource creation operation is performed. Carries creation-specific inputs that are consumed during creation and not stored as persistent attributes of the created resource object.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements: (None)</t>
<t>Operations</t>
<t>Operation: Create</t>
<t>Operation Identifier: create</t>
<t>Description: Invoked implicitly as a side effect of the resource object create operation; never invoked directly. Carries creation-specific inputs consumed during creation of the owning resource object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Read</t>
<t>Operation Identifier: read</t>
<t>Description: Retrieves the result or status of the creation, if the server exposes the process resource.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: domainCreateProcess</t>
<t>Object Name: Domain Create Process Object</t>
<t>Object Type: Process</t>
<t>Extends: baseProcess</t>
<t>Description: The Create Process Object specific to the Domain Name Data Object. Implicitly initiated by the domain create operation; carries the requested initial registration period consumed during creation and not persisted as part of the domain object's state.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>period</td>
<td>Period</td>
<td>0-1</td>
<td>create-only</td>
<td>Period Object</td>
<td>The initial registration period for the domain name.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Create</t>
<t>Operation Identifier: create</t>
<t>Description: Invoked implicitly as a side effect of the Domain Name Data Object create operation; never invoked directly. Carries the registration period consumed during domain creation.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Read</t>
<t>Operation Identifier: read</t>
<t>Description: Retrieves the result or status of the domain creation, if the server exposes the process resource.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: domainTransferProcess</t>
<t>Object Name: Domain Transfer Process Object</t>
<t>Object Type: Process</t>
<t>Description: The Transfer Process Object specific to the Domain Name Data Object. Carries the domain-specific transfer inputs and outputs, namely the requested transfer period and the resulting expiry date, that extend the common transfer process.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>expiryDate</td>
<td>Expiry Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The end of the domain object's registration period if the transfer caused or causes a change in the validity period.</td>
</tr>

<tr>
<td>transferPeriod</td>
<td>Transfer Period</td>
<td>0-1</td>
<td>create-only</td>
<td>Period Object</td>
<td>The number of units to be added to the registration period of the domain object upon successful completion of the transfer. The number of units available MAY be subject to limits imposed by the server.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Create</t>
<t>Operation Identifier: transferCreate</t>
<t>Description: Initiates a transfer of a Domain Name Data Object by creating a Domain Transfer Process Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: disclose</t>
<t>Object Name: Disclose Object</t>
<t>Object Type: Component</t>
<t>Description: TBD</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table><t>Object: restoreProcess</t>
<t>Object Name: Restore Process Object</t>
<t>Object Type: Process</t>
<t>Extends: baseProcess</t>
<t>Description: Represents the current state of a restore request for an object that has entered the Redemption Grace Period (RGP). Returned as output of all restore operations. This object is OPTIONAL and is only used when the RGP feature is supported.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>restoreStatus</td>
<td>Restore Status</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The current state of the restore process.</td>
</tr>

<tr>
<td>requestDate</td>
<td>Request Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time when the restore request was submitted. Absent if no request has been submitted.</td>
</tr>

<tr>
<td>reportDate</td>
<td>Report Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time when the most recent restore report was accepted. Absent if no report has been accepted.</td>
</tr>

<tr>
<td>reportDueDate</td>
<td>Report Due Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The deadline for submitting a restore report before the object reverts to rgpRedemptionPeriod. Present only when status is rgpPendingRestore.</td>
</tr>

<tr>
<td>restoreReport</td>
<td>Restore Report</td>
<td>0-1</td>
<td>read-write</td>
<td>Restore Report Object</td>
<td>The restore report submitted as required by the RGP process.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Restore Create</t>
<t>Operation Identifier: create</t>
<t>Description: Initiates recovery of a domain name in the rgpRedemptionPeriod state by creating a Restore Process Object. This operation is OPTIONAL and is only available when the RGP feature is supported.</t>
<t>Input Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>restoreReport</td>
<td>Restore Report</td>
<td>0-1</td>
<td>Restore Report Object</td>
<td>An OPTIONAL inline restore report. If provided, the server processes the request and the report atomically. If the server does not require a restore report, this element MUST NOT be present and the restore is completed immediately. If the server requires a report and this element is absent, the object transitions to <tt>pendingRestore</tt> state awaiting a subsequent Report operation.</td>
</tr>
</tbody>
</table><t>Parameters: (None)</t>
<t>Operation: Restore Read</t>
<t>Operation Identifier: read (on Restore Process Object)</t>
<t>Description: Retrieves the current state of the RGP restore process for a domain name. This operation is OPTIONAL and is only available when the RGP feature is supported.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Restore Update</t>
<t>Operation Identifier: update</t>
<t>Description: Submits or replaces the restore report for a domain name in the rgpPendingRestore state. This operation is OPTIONAL and is only available when the RGP feature is supported and the server requires a restore report.</t>
<t>Input Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>restoreReport</td>
<td>Restore Report</td>
<td>1</td>
<td>Restore Report Object</td>
<td>The restore report to be submitted as part of the RGP process.</td>
</tr>
</tbody>
</table><t>Parameters: (None)</t>
<t>Object: restoreReport</t>
<t>Object Name: Restore Report Object</t>
<t>Object Type: Component</t>
<t>Description: Contains the redemption grace period restore report submitted by the sponsoring client as required by the RGP process. This object is OPTIONAL and is only used when the RGP feature is supported and a restore report is required by server policy.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>preData</td>
<td>Pre-Delete Data</td>
<td>0-1</td>
<td>read-write</td>
<td>String</td>
<td>A copy of the registration data that existed for the object prior to deletion.</td>
</tr>

<tr>
<td>postData</td>
<td>Post-Restore Data</td>
<td>0-1</td>
<td>read-write</td>
<td>String</td>
<td>A copy of the registration data that exists for the object at the time the restore report is submitted.</td>
</tr>

<tr>
<td>deleteTime</td>
<td>Delete Time</td>
<td>0-1</td>
<td>read-write</td>
<td>Timestamp</td>
<td>The date and time when the object delete request was sent to the server.</td>
</tr>

<tr>
<td>restoreTime</td>
<td>Restore Time</td>
<td>0-1</td>
<td>read-write</td>
<td>Timestamp</td>
<td>The date and time when the original restore request operation was sent to the server.</td>
</tr>

<tr>
<td>restoreReason</td>
<td>Restore Reason</td>
<td>0-1</td>
<td>read-write</td>
<td>String</td>
<td>A brief explanation of the reason for restoring the object.</td>
</tr>

<tr>
<td>statements</td>
<td>Statements</td>
<td>1-2</td>
<td>read-write</td>
<td>String</td>
<td>Mandatory client statements required by the RGP process.</td>
</tr>

<tr>
<td>other</td>
<td>Other</td>
<td>0-1</td>
<td>read-write</td>
<td>String</td>
<td>Any additional information needed to support the statements provided by the client.</td>
</tr>
</tbody>
</table><t>Object: domainName</t>
<t>Object Name: Domain Name Data Object</t>
<t>Object Type: Resource</t>
<t>Description: Represents a domain name and its associated data.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>name</td>
<td>Name</td>
<td>1</td>
<td>create-only</td>
<td>Fully Qualified Domain Name</td>
<td>The fully qualified name of the domain object.</td>
</tr>

<tr>
<td>uName</td>
<td>Unicode Name</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>The fully qualified name of the domain using the Unicode character set.</td>
</tr>

<tr>
<td>lgr</td>
<td>LGR</td>
<td>0-1</td>
<td>create-only</td>
<td>String</td>
<td>The name of the Label Generation Ruleset (LGR) containing the valid code points used for the Unicode Name (uName).</td>
</tr>

<tr>
<td>provMetadata</td>
<td>Provisioning Metadata</td>
<td>1</td>
<td>read-only</td>
<td>Provisioning Metadata Object</td>
<td>Standard metadata about object lifecycle and ownership.</td>
</tr>

<tr>
<td>status</td>
<td>Status</td>
<td>1+</td>
<td>read-write</td>
<td>Domain Name Status Object</td>
<td>The current status descriptors for the domain.</td>
</tr>

<tr>
<td>registrant</td>
<td>Registrant</td>
<td>0-1</td>
<td>read-write</td>
<td>Aggregation[Contact Data Object]</td>
<td>The registrant contact ID.</td>
</tr>

<tr>
<td>contacts</td>
<td>Contacts</td>
<td>0+</td>
<td>read-write</td>
<td>LabelledAggregation [Contact Data Object]</td>
<td>Associated contact objects.</td>
</tr>

<tr>
<td>nameservers</td>
<td>Nameservers</td>
<td>0+</td>
<td>read-write</td>
<td>Aggregation [Host Data Object]</td>
<td>A collection of nameservers associated with the domain.</td>
</tr>

<tr>
<td>dns</td>
<td>DNS Data</td>
<td>0-1</td>
<td>read-write</td>
<td>DNS Data Object</td>
<td>DNS resource records and operational controls related to the domain name.</td>
</tr>

<tr>
<td>subordinateHosts</td>
<td>Subordinate Hosts</td>
<td>0+</td>
<td>read-only</td>
<td>Aggregation [Host Data Object]</td>
<td>Subordinate host names.</td>
</tr>

<tr>
<td>expiryDate</td>
<td>Expiry Date</td>
<td>0-1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>Expiry timestamp.</td>
</tr>

<tr>
<td>authInfo</td>
<td>Authorisation Information</td>
<td>0-1</td>
<td>read-write</td>
<td>Authorisation Information Object</td>
<td>Authorisation information for the object.</td>
</tr>

<tr>
<td>processes</td>
<td>Processes</td>
<td>0-1</td>
<td>read-only</td>
<td>Processes Object</td>
<td>Process Objects initiated on the domain object.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Availability</t>
<t>Operation Identifier: availability</t>
<t>Description: Determines whether a Domain Name resource can be created.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>uName</td>
<td>Unicode Name</td>
<td>0-1</td>
<td>String</td>
<td>The Unicode Name of the domain name for which availability is determined.</td>
</tr>

<tr>
<td>lgr</td>
<td>LGR</td>
<td>0-1</td>
<td>String</td>
<td>The LGR against which availability of the domain name is determined.</td>
</tr>
</tbody>
</table><t>Operation: Create</t>
<t>Operation Identifier: create</t>
<t>Description: Provisions a new Domain Name resource.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Read</t>
<t>Operation Identifier: read</t>
<t>Description: Retrieves the data elements of a Domain Name resource.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>hostsFilter</td>
<td>Hosts Filter</td>
<td>0-1</td>
<td>String</td>
<td>Controls which host information is returned.</td>
</tr>
</tbody>
</table><t>Operation: Update</t>
<t>Description: Modifies the read-write data elements of a Domain Name resource.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Delete</t>
<t>Operation Identifier: delete</t>
<t>Description: Removes an existing Domain Name resource.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: contact</t>
<t>Object Name: Contact Data Object</t>
<t>Object Type: Resource</t>
<t>Description: A Contact Data Object represents the contact information for an individual or organisation associated with other objects.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>id</td>
<td>Handle ID</td>
<td>1</td>
<td>create-only</td>
<td>Identifier</td>
<td>External unique identifier of the contact object.</td>
</tr>

<tr>
<td>provMetadata</td>
<td>Provisioning Metadata</td>
<td>1</td>
<td>read-only</td>
<td>Provisioning Metadata Object</td>
<td>Standard metadata about the object's lifecycle and ownership.</td>
</tr>

<tr>
<td>status</td>
<td>Status</td>
<td>1+</td>
<td>read-write</td>
<td>Contact Status Object</td>
<td>Status descriptors associated with the contact.</td>
</tr>

<tr>
<td>contactInfo</td>
<td>Contact Information</td>
<td>1</td>
<td>read-write</td>
<td>External:RPP-JSContact-Profile:Card</td>
<td>JSContact Card information.</td>
</tr>

<tr>
<td>authInfo</td>
<td>Authorisation Information</td>
<td>0-1</td>
<td>read-write</td>
<td>Authorisation Information Object</td>
<td>Authorisation information associated with the contact object.</td>
</tr>

<tr>
<td>disclose</td>
<td>Disclose</td>
<td>0-1</td>
<td>read-write</td>
<td>Disclose Object</td>
<td>Identifies elements that require exceptional server-operator handling to allow or restrict disclosure to third parties.</td>
</tr>

<tr>
<td>processes</td>
<td>Processes</td>
<td>0-1</td>
<td>read-only</td>
<td>Processes Object</td>
<td>Process Objects initiated on the contact object.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Availability</t>
<t>Operation Identifier: availability</t>
<t>Description: Determines whether a Contact resource can be created.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Create Operation</t>
<t>Operation Identifier: create</t>
<t>Description: The Create operation allows a client to provision a new Contact resource. The operation accepts as input all create-only and read-write data elements defined for the Contact Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Read Operation</t>
<t>Operation Identifier: read</t>
<t>Description: The Read operation allows a client to retrieve the data elements of a Contact resource. The server's response MAY vary depending on client authorisation and server policy.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Update Operation</t>
<t>Operation Identifier: update</t>
<t>Description: The Update operation allows a client to modify the attributes of an existing Contact resource.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Delete Operation</t>
<t>Operation Identifier: delete</t>
<t>Description: The Delete operation allows a client to remove an existing Contact resource. The operation targets a specific data object identified by its Handle ID.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: host</t>
<t>Object Name: Host Data Object</t>
<t>Object Type: Resource</t>
<t>Description: Represents a nameserver that provides DNS services for a domain name.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>hostName</td>
<td>Host Name</td>
<td>1</td>
<td>read-write</td>
<td>Fully Qualified Domain Name</td>
<td>Fully qualified name of a host.</td>
</tr>

<tr>
<td>provMetadata</td>
<td>Provisioning Metadata</td>
<td>1</td>
<td>read-only</td>
<td>Provisioning Metadata Object</td>
<td>Standard metadata about object lifecycle and ownership.</td>
</tr>

<tr>
<td>status</td>
<td>Status</td>
<td>1+</td>
<td>read-write</td>
<td>Host Status Object</td>
<td>The current status descriptors for the host.</td>
</tr>

<tr>
<td>dns</td>
<td>DNS Data</td>
<td>0-1</td>
<td>read-write</td>
<td>DNS Data Object</td>
<td>DNS resource records and operational controls related to the host.</td>
</tr>

<tr>
<td>processes</td>
<td>Processes</td>
<td>0-1</td>
<td>read-only</td>
<td>Processes Object</td>
<td>Process Objects initiated on the host object.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Availability</t>
<t>Operation Identifier: availability</t>
<t>Description: Determines whether a Host Data Object can be created.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Create</t>
<t>Description: Provisions a new Host Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Read</t>
<t>Description: Retrieves the data elements of a Host Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Update</t>
<t>Description: Modifies the attributes of a Host Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Delete</t>
<t>Description: Removes an existing Host Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: organisationRole</t>
<t>Object Name: Organisation Role Object</t>
<t>Object Type: Component</t>
<t>Description: Represents a role that an organisation has within the registry ecosystem, as defined in <xref target="RFC8543" sectionFormat="of" section="3.2"></xref>. An organisation object MUST always have at least one associated role.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>status</td>
<td>Role Status</td>
<td>0+</td>
<td>read-write</td>
<td>Organisation Role Status Object</td>
<td>The status of this role.</td>
</tr>

<tr>
<td>roleId</td>
<td>Role Identifier</td>
<td>0-1</td>
<td>read-write</td>
<td>String</td>
<td>A third-party-assigned identifier for this role, such as an IANA registrar ID.</td>
</tr>
</tbody>
</table><t>Object: organisation</t>
<t>Object Name: Organisation Data Object</t>
<t>Object Type: Resource</t>
<t>Description: Represents an entity, such as a registrar, reseller, DNS service operator, or privacy proxy, involved in the domain registration process. Based on the EPP Organisation Mapping defined in <xref target="RFC8543"></xref>.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>id</td>
<td>Organisation ID</td>
<td>1</td>
<td>create-only</td>
<td>Identifier</td>
<td>A server-unique identifier for the organisation object.</td>
</tr>

<tr>
<td>provMetadata</td>
<td>Provisioning Metadata</td>
<td>1</td>
<td>read-only</td>
<td>Provisioning Metadata Object</td>
<td>Standard metadata about the object's lifecycle and ownership.</td>
</tr>

<tr>
<td>status</td>
<td>Status</td>
<td>1+</td>
<td>read-write</td>
<td>Organisation Status Object</td>
<td>The current operational status descriptors for the organisation.</td>
</tr>

<tr>
<td>roles</td>
<td>Roles</td>
<td>1+</td>
<td>read-write</td>
<td>DictionaryComposition [Organisation Role Object]</td>
<td>One or more roles describing the organisation's relationship within the registry ecosystem.</td>
</tr>

<tr>
<td>parent</td>
<td>Parent Organisation</td>
<td>0-1</td>
<td>read-write</td>
<td>Aggregation [Organisation Data Object]</td>
<td>The parent organisation in a hierarchical organisation structure.</td>
</tr>

<tr>
<td>contactInfo</td>
<td>Contact Information</td>
<td>0-1</td>
<td>read-write</td>
<td>External:RPP-JSContact-Profile:Card</td>
<td>Contact information.</td>
</tr>

<tr>
<td>contacts</td>
<td>Contacts</td>
<td>0+</td>
<td>read-write</td>
<td>LabelledAggregation[Contact Data Object]</td>
<td>Identifiers of contact objects associated with the organisation.</td>
</tr>

<tr>
<td>users</td>
<td>Users</td>
<td>0+</td>
<td>read-write</td>
<td>LabelledAggregation [User Data Object]</td>
<td>Identifiers of user objects associated with the organisation.</td>
</tr>

<tr>
<td>processes</td>
<td>Processes</td>
<td>0-1</td>
<td>read-only</td>
<td>Processes Object</td>
<td>Process Objects initiated on the organisation object.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Create</t>
<t>Operation Identifier: create</t>
<t>Description: Provisions a new Organisation Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Read</t>
<t>Operation Identifier: read</t>
<t>Description: Retrieves the data elements of an Organisation Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Update</t>
<t>Operation Identifier: update</t>
<t>Description: Modifies the attributes of an existing Organisation Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Delete</t>
<t>Operation Identifier: delete</t>
<t>Description: Removes an existing Organisation Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: message</t>
<t>Object Name: Message Data Object</t>
<t>Object Type: Resource</t>
<t>Description: Represents a message placed into an organisation's queue by the server and retrieved by the client.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>id</td>
<td>Message ID</td>
<td>1</td>
<td>read-only</td>
<td>Identifier</td>
<td>A server-unique identifier for the message object.</td>
</tr>

<tr>
<td>creationDate</td>
<td>Creation Date</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The date and time when the message object was created and inserted into the queue.</td>
</tr>

<tr>
<td>status</td>
<td>Status</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The current lifecycle status of the message object (<tt>queued</tt>, <tt>delivered</tt>, <tt>removed</tt>).</td>
</tr>

<tr>
<td>data</td>
<td>Data</td>
<td>1</td>
<td>create-only</td>
<td>Base Message Object</td>
<td>The data related to a specific message, such as a transfer request or a review response.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Create</t>
<t>Operation Identifier: create</t>
<t>Description: Inserts a new message into the queue for an organisation.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Read</t>
<t>Operation Identifier: read</t>
<t>Description: Retrieves the data elements of one or more Message Data Objects.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Query</t>
<t>Operation Identifier: query</t>
<t>Description: Retrieves zero or more Message Data Objects, optionally filtered by the specified parameters.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>type</td>
<td>Message Type</td>
<td>0-1</td>
<td>String</td>
<td>The type of the message to use as a filter when retrieving message objects.</td>
</tr>
</tbody>
</table><t>Operation: Delete</t>
<t>Operation Identifier: delete</t>
<t>Description: Removes a specific Message Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: user</t>
<t>Object Name: User Data Object</t>
<t>Object Type: Resource</t>
<t>Description: Represents a user linked to an Organisation Data Object. Each user carries a set of RBAC roles that define the user's permissions within the context of the owning organisation. The lifecycle of a User Object is bound to its Organisation Object.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>id</td>
<td>User Identifier</td>
<td>1</td>
<td>create-only</td>
<td>Identifier</td>
<td>A unique identifier for the user. MUST be globally unique in the server scope.</td>
</tr>

<tr>
<td>details</td>
<td>Details</td>
<td>1</td>
<td>read-write</td>
<td>External:RPP-JSContact-Profile:Card</td>
<td>The details of the user.</td>
</tr>

<tr>
<td>status</td>
<td>Status</td>
<td>1</td>
<td>read-write</td>
<td>User Status Object</td>
<td>The current status of the user.</td>
</tr>

<tr>
<td>processes</td>
<td>Processes</td>
<td>0-1</td>
<td>read-only</td>
<td>Processes Object</td>
<td>Process Objects initiated on the user object.</td>
</tr>

<tr>
<td>description</td>
<td>Description</td>
<td>0-1</td>
<td>read-write</td>
<td>String</td>
<td>A description of the user</td>
</tr>

<tr>
<td>organisation</td>
<td>Organisation</td>
<td>1</td>
<td>read-only</td>
<td>Aggregation [Organisation Data Object]</td>
<td>A reference to the owner organisation object.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Create</t>
<t>Operation Identifier: create</t>
<t>Description: Creates a new User Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Read</t>
<t>Operation Identifier: read</t>
<t>Description: Retrieves the data elements of a specific User Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Update</t>
<t>Operation Identifier: update</t>
<t>Description: Modifies the read-write data elements (e.g., roles) of a specific User Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Operation: Delete</t>
<t>Operation Identifier: delete</t>
<t>Description: Removes a specific User Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: profile</t>
<t>Object Name: Profile Data Object</t>
<t>Object Type: Resource</t>
<t>Description: Represents a named set of protocol features and versions that defines the compatibility and capabilities of RPP server implementations.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>name</td>
<td>Name</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>A unique name that identifies the profile.</td>
</tr>

<tr>
<td>description</td>
<td>Description</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>A human-readable description of the profile and its intended use.</td>
</tr>

<tr>
<td>version</td>
<td>Version</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The version of the profile.</td>
</tr>

<tr>
<td>rppVersion</td>
<td>RPP Version</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The minimum version of the RPP protocol that is supported or required for the profile.</td>
</tr>

<tr>
<td>objects</td>
<td>Objects</td>
<td>1+</td>
<td>read-only</td>
<td>String</td>
<td>The objects allowed for provisioning operations.</td>
</tr>

<tr>
<td>extensions</td>
<td>Extensions</td>
<td>0+</td>
<td>read-only</td>
<td>Extension Object</td>
<td>The extensions, including their names and versions, that are supported or required for the profile.</td>
</tr>

<tr>
<td>baseProfile</td>
<td>Base Profile</td>
<td>0-1</td>
<td>read-only</td>
<td>Aggregation [Profile Data Object]</td>
<td>A base profile that is extended by this profile.</td>
</tr>

<tr>
<td>defaultProfile</td>
<td>Default Profile</td>
<td>1</td>
<td>read-only</td>
<td>Boolean</td>
<td>Indicates whether this profile is the default profile.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Read</t>
<t>Operation Identifier: read</t>
<t>Description: Retrieves the Profile Data Object identified by its name.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
<t>Object: discoveryVersion</t>
<t>Object Name: Discovery Version Object</t>
<t>Object Type: Component</t>
<t>Description: Describes a version of RPP supported by the server.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>version</td>
<td>Version</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The RPP version, for example &quot;1.0&quot;.</td>
</tr>

<tr>
<td>baseUrl</td>
<td>Base URL</td>
<td>1</td>
<td>read-only</td>
<td>URL</td>
<td>The base URL specific for the version, used as a prefix for all endpoint URL templates.</td>
</tr>
</tbody>
</table><t>Object: discoveryEnvironment</t>
<t>Object Name: Discovery Environment Object</t>
<t>Object Type: Component</t>
<t>Description: Describes the environment of the RPP server.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>name</td>
<td>Name</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The name of the RPP server.</td>
</tr>

<tr>
<td>status</td>
<td>Status</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The operational status of the RPP server.</td>
</tr>
</tbody>
</table><t>Object: extension</t>
<t>Object Name: Extension Object</t>
<t>Object Type: Component</t>
<t>Description: Describes an extension supported by the server.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>name</td>
<td>Name</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>A short name for the extension.</td>
</tr>

<tr>
<td>id</td>
<td>Extension ID</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>A unique URN identifier for the extension.</td>
</tr>

<tr>
<td>version</td>
<td>Version</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The version of the extension supported by the server.</td>
</tr>

<tr>
<td>url</td>
<td>URL</td>
<td>1</td>
<td>read-only</td>
<td>URL</td>
<td>The location of the extension specification.</td>
</tr>
</tbody>
</table><t>Object: discoveryIdnLgr</t>
<t>Object Name: Discovery IDN LGR Object</t>
<t>Object Type: Component</t>
<t>Description: Describes a Label Generation Ruleset (LGR) supported by the server for internationalized domain names.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>tld</td>
<td>TLDs</td>
<td>1+</td>
<td>read-only</td>
<td>String</td>
<td>The top-level domains to which the LGR applies.</td>
</tr>

<tr>
<td>name</td>
<td>Name</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>The IANA-registered name of the LGR.</td>
</tr>

<tr>
<td>url</td>
<td>URL</td>
<td>1</td>
<td>read-only</td>
<td>URL</td>
<td>The location of the LGR specification.</td>
</tr>

<tr>
<td>default</td>
<td>Default</td>
<td>1</td>
<td>read-only</td>
<td>Boolean</td>
<td>Indicates whether this LGR is the default for the specified TLDs.</td>
</tr>
</tbody>
</table><t>Object: discoveryNotice</t>
<t>Object Name: Discovery Notice Object</t>
<t>Object Type: Component</t>
<t>Description: Describes a notice from the server operator.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Element Identifier</th>
<th>Element Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>pubTime</td>
<td>Publication Time</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The publication time of the notice.</td>
</tr>

<tr>
<td>text</td>
<td>Text</td>
<td>1</td>
<td>read-only</td>
<td>String</td>
<td>A human-readable description of the notice.</td>
</tr>
</tbody>
</table><t>Object: discovery</t>
<t>Object Name: Discovery Data Object</t>
<t>Object Type: Resource</t>
<t>Description: Describes the capabilities of an RPP server.</t>
<t>Reference: [This-ID]</t>
<t>Data Elements</t>
<table>
<thead>
<tr>
<th>Identifier</th>
<th>Name</th>
<th>Card.</th>
<th>Mutability</th>
<th>Data Type</th>
<th>Description</th>
</tr>
</thead>

<tbody>
<tr>
<td>versions</td>
<td>Versions</td>
<td>1+</td>
<td>read-only</td>
<td>Discovery Version Object</td>
<td>The versions of RPP supported by the server.</td>
</tr>

<tr>
<td>environment</td>
<td>Environment</td>
<td>1</td>
<td>read-only</td>
<td>Discovery Environment Object</td>
<td>Information about the RPP server.</td>
</tr>

<tr>
<td>tlds</td>
<td>TLDs</td>
<td>1+</td>
<td>read-only</td>
<td>String</td>
<td>The TLDs supported by the server.</td>
</tr>

<tr>
<td>extensions</td>
<td>Extensions</td>
<td>0+</td>
<td>read-only</td>
<td>Extension Object</td>
<td>The extensions supported by the server.</td>
</tr>

<tr>
<td>profiles</td>
<td>Profiles</td>
<td>0+</td>
<td>read-only</td>
<td>String</td>
<td>The profiles supported by the server.</td>
</tr>

<tr>
<td>objects</td>
<td>Objects</td>
<td>1+</td>
<td>read-only</td>
<td>String</td>
<td>The resource collections supported by the server.</td>
</tr>

<tr>
<td>datetime</td>
<td>Date and Time</td>
<td>1</td>
<td>read-only</td>
<td>Timestamp</td>
<td>The current date and time of the server.</td>
</tr>

<tr>
<td>links</td>
<td>Links</td>
<td>0+</td>
<td>read-only</td>
<td>LabelledAggregation [String]</td>
<td>Links to documents related to the use of RPP with the server, labelled with a relation type registered in the IANA &quot;Link Relation Types&quot; registry.</td>
</tr>

<tr>
<td>idnLgr</td>
<td>IDN LGRs</td>
<td>0+</td>
<td>read-only</td>
<td>Discovery IDN LGR Object</td>
<td>The Label Generation Rulesets supported by the server.</td>
</tr>

<tr>
<td>notices</td>
<td>Notices</td>
<td>0+</td>
<td>read-only</td>
<td>Discovery Notice Object</td>
<td>Notices from the server operator.</td>
</tr>
</tbody>
</table><t>Operations</t>
<t>Operation: Read</t>
<t>Operation Identifier: read</t>
<t>Description: Retrieves the Discovery Data Object.</t>
<t>Input Data Elements: (None)</t>
<t>Parameters: (None)</t>
</section>
</section>

<section anchor="rpp-user-role-values-registry"><name>RPP User Role Values Registry</name>
<t>This document establishes the &quot;RESTful Provisioning Protocol (RPP) User Role Values Registry&quot;. This registry serves as a catalogue of all user role values used within RPP.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP User Role Values
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Expert Review
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>name</tt>: The name of the user role, for example &quot;RPP example role&quot;.</li>
<li><tt>url</tt>: The URL for the user role specification, for example &quot;<eref target="https://www.iana.org/assignments/rpp-user-roles/rpp-example-role-1.0&quot;">https://www.iana.org/assignments/rpp-user-roles/rpp-example-role-1.0"</eref>.</li>
<li><tt>permission</tt>: The permission level associated with the user role, for example &quot;read-only&quot;, &quot;read-write&quot;, or &quot;admin&quot;.</li>
<li><tt>description</tt>: A human-readable description of the user role and its intended use.</li>
</ul>
</section>

<section anchor="rpp-domain-name-status-values-registry"><name>RPP Domain Name Status Values Registry</name>
<t>This document establishes the &quot;RESTful Provisioning Protocol (RPP) Domain Name Status Values Registry&quot;.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP Domain Name Status Values
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Specification Required
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>value</tt>: The machine-readable status label, for example &quot;clientDeleteProhibited&quot;.</li>
<li><tt>description</tt>: A human-readable description of the status and the conditions under which it applies.</li>
<li><tt>set-by</tt>: The entity that adds and removes the status value: &quot;client&quot;, &quot;server&quot;, or &quot;client, server&quot; for a value that the server manages and that a client can also manage where server policy permits.</li>
<li><tt>reference</tt>: A reference to the specification that defines the status value.</li>
</ul>

<section anchor="initial-registrations-1"><name>Initial Registrations</name>
<t>The initial registrations for the RPP Domain Name Status Values registry are the status values defined in <xref target="tbl-domain-status-values"></xref>, reproduced below with their reference.</t>
<table anchor="tbl-domain-status-registry"><name>Initial RPP Domain Name Status Values Registrations</name>
<thead>
<tr>
<th>Value</th>
<th>Set By</th>
<th>Description</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td>clientDeleteProhibited</td>
<td>client</td>
<td>Requests to delete the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverDeleteProhibited</td>
<td>server</td>
<td>Requests to delete the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientHold</td>
<td>client</td>
<td>DNS delegation information MUST NOT be published for the object.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverHold</td>
<td>server</td>
<td>DNS delegation information MUST NOT be published for the object.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientRenewProhibited</td>
<td>client</td>
<td>Requests to renew the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverRenewProhibited</td>
<td>server</td>
<td>Requests to renew the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientTransferProhibited</td>
<td>client</td>
<td>Requests to transfer the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverTransferProhibited</td>
<td>server</td>
<td>Requests to transfer the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientUpdateProhibited</td>
<td>client</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverUpdateProhibited</td>
<td>server</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>inactive</td>
<td>server</td>
<td>Delegation information has not been associated with the object. This is the default status when a domain object is first created and there are no associated host objects for the DNS delegation. This status can also be set by the server when all host-object associations are removed.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for an object that has no pending operations or prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingCreate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingRenew</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingTransfer</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>rgpAddPeriod</td>
<td>server</td>
<td>This grace period is provided after the initial registration of a domain name. If the domain name is deleted by the registrar during this period, the registry provides a credit to the registrar for the cost of the registration.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>rgpAutoRenewPeriod</td>
<td>server</td>
<td>This grace period is provided after a domain name registration period expires and is extended (renewed) automatically by the registry. If the domain name is deleted by the registrar during this period, the registry provides a credit to the registrar for the cost of the renewal.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>rgpRenewPeriod</td>
<td>server</td>
<td>This grace period is provided after a domain name registration period is explicitly extended (renewed) by the registrar. If the domain name is deleted by the registrar during this period, the registry provides a credit to the registrar for the cost of the renewal.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>rgpTransferPeriod</td>
<td>server</td>
<td>This grace period is provided after the successful transfer of domain name registration sponsorship from one registrar to another registrar. If the domain name is deleted by the new sponsoring registrar during this period, the registry provides a credit to the registrar for the cost of the transfer.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>rgpRedemptionPeriod</td>
<td>server</td>
<td>This status value is used to describe a domain for which a delete operation has been received, but the domain has not yet been purged because an opportunity exists to restore the domain and abort the deletion process.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>rgpPendingRestore</td>
<td>server</td>
<td>This status value is used to describe a domain that is in the process of being restored after being in the rgpRedemptionPeriod state.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>rgpPendingDelete</td>
<td>server</td>
<td>This status value is used to describe a domain that has entered the purge processing state after completing the rgpRedemptionPeriod state.  A domain in this status MUST also be in the pendingDelete status described above.</td>
<td>[This-ID]</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="rpp-host-status-values-registry"><name>RPP Host Status Values Registry</name>
<t>This document establishes the &quot;RESTful Provisioning Protocol (RPP) Host Status Values Registry&quot;.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP Host Status Values
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Specification Required
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>value</tt>: The machine-readable status label, for example &quot;clientDeleteProhibited&quot;.</li>
<li><tt>description</tt>: A human-readable description of the status and the conditions under which it applies.</li>
<li><tt>set-by</tt>: The entity that adds and removes the status value: &quot;client&quot;, &quot;server&quot;, or &quot;client, server&quot; for a value that the server manages and that a client can also manage where server policy permits.</li>
<li><tt>reference</tt>: A reference to the specification that defines the status value.</li>
</ul>

<section anchor="initial-registrations-2"><name>Initial Registrations</name>
<t>The initial registrations for the RPP Host Status Values registry are the status values defined in <xref target="tbl-host-status-values"></xref>, reproduced below with their reference.</t>
<table anchor="tbl-host-status-registry"><name>Initial RPP Host Status Values Registrations</name>
<thead>
<tr>
<th>Value</th>
<th>Set By</th>
<th>Description</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td>clientDeleteProhibited</td>
<td>client</td>
<td>Requests to delete the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverDeleteProhibited</td>
<td>server</td>
<td>Requests to delete the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientUpdateProhibited</td>
<td>client</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverUpdateProhibited</td>
<td>server</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>linked</td>
<td>server</td>
<td>The host object has at least one active association with another object, such as a domain object. Servers SHOULD provide services to determine existing object associations.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for an object that has no pending operations or prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingCreate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingTransfer</td>
<td>server</td>
<td>A transform command has been processed for the object's superordinate domain object (i.e. a transfer of the domain object is pending), but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="rpp-contact-status-values-registry"><name>RPP Contact Status Values Registry</name>
<t>This document establishes the &quot;RESTful Provisioning Protocol (RPP) Contact Status Values Registry&quot;.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP Contact Status Values
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Specification Required
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>value</tt>: The machine-readable status label, for example &quot;clientDeleteProhibited&quot;.</li>
<li><tt>description</tt>: A human-readable description of the status and the conditions under which it applies.</li>
<li><tt>set-by</tt>: The entity that adds and removes the status value: &quot;client&quot;, &quot;server&quot;, or &quot;client, server&quot; for a value that the server manages and that a client can also manage where server policy permits.</li>
<li><tt>reference</tt>: A reference to the specification that defines the status value.</li>
</ul>

<section anchor="initial-registrations-3"><name>Initial Registrations</name>
<t>The initial registrations for the RPP Contact Status Values registry are the status values defined in <xref target="tbl-contact-status-values"></xref>, reproduced below with their reference.</t>
<table anchor="tbl-contact-status-registry"><name>Initial RPP Contact Status Values Registrations</name>
<thead>
<tr>
<th>Value</th>
<th>Set By</th>
<th>Description</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td>clientDeleteProhibited</td>
<td>client</td>
<td>Requests to delete the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverDeleteProhibited</td>
<td>server</td>
<td>Requests to delete the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientTransferProhibited</td>
<td>client</td>
<td>Requests to transfer the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverTransferProhibited</td>
<td>server</td>
<td>Requests to transfer the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientUpdateProhibited</td>
<td>client</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverUpdateProhibited</td>
<td>server</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>linked</td>
<td>server</td>
<td>The contact object has at least one active association with another object, such as a domain object. Servers SHOULD provide services to determine existing object associations.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for an object that has no pending operations or prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingCreate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingTransfer</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="rpp-organisation-role-status-values-registry"><name>RPP Organisation Role Status Values Registry</name>
<t>This document establishes the &quot;RESTful Provisioning Protocol (RPP) Organisation Role Status Values Registry&quot;.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP Organisation Role Status Values
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Specification Required
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>value</tt>: The machine-readable status label, for example &quot;clientLinkProhibited&quot;.</li>
<li><tt>description</tt>: A human-readable description of the status and the conditions under which it applies.</li>
<li><tt>set-by</tt>: The entity that adds and removes the status value: &quot;client&quot;, &quot;server&quot;, or &quot;client, server&quot; for a value that the server manages and that a client can also manage where server policy permits.</li>
<li><tt>reference</tt>: A reference to the specification that defines the status value.</li>
</ul>

<section anchor="initial-registrations-4"><name>Initial Registrations</name>
<t>The initial registrations for the RPP Organisation Role Status Values registry are the status values defined in <xref target="tbl-organisation-role-status-values"></xref>, reproduced below with their reference.</t>
<table anchor="tbl-organisation-role-status-registry"><name>Initial RPP Organisation Role Status Values Registrations</name>
<thead>
<tr>
<th>Value</th>
<th>Set By</th>
<th>Description</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td>clientLinkProhibited</td>
<td>client</td>
<td>Requests to add new links to the role MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverLinkProhibited</td>
<td>server</td>
<td>Requests to add new links to the role MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>linked</td>
<td>server</td>
<td>The role has at least one active association with another object. This value is set and removed by the server and is not explicitly set by the client.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for a role that has no active prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
<td>[This-ID]</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="rpp-organisation-status-values-registry"><name>RPP Organisation Status Values Registry</name>
<t>This document establishes the &quot;RESTful Provisioning Protocol (RPP) Organisation Status Values Registry&quot;.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP Organisation Status Values
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Specification Required
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>value</tt>: The machine-readable status label, for example &quot;clientDeleteProhibited&quot;.</li>
<li><tt>description</tt>: A human-readable description of the status and the conditions under which it applies.</li>
<li><tt>set-by</tt>: The entity that adds and removes the status value: &quot;client&quot;, &quot;server&quot;, or &quot;client, server&quot; for a value that the server manages and that a client can also manage where server policy permits.</li>
<li><tt>reference</tt>: A reference to the specification that defines the status value.</li>
</ul>

<section anchor="initial-registrations-5"><name>Initial Registrations</name>
<t>The initial registrations for the RPP Organisation Status Values registry are the status values defined in <xref target="tbl-organisation-status-values"></xref>, reproduced below with their reference.</t>
<table anchor="tbl-organisation-status-registry"><name>Initial RPP Organisation Status Values Registrations</name>
<thead>
<tr>
<th>Value</th>
<th>Set By</th>
<th>Description</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td>ok</td>
<td>server</td>
<td>This is the normal status value for an object that has no pending operations or prohibitions. This value is set and removed by the server as other status values are added or removed.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>hold</td>
<td>client, server</td>
<td>Organisation transform commands and new links MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>terminated</td>
<td>client, server</td>
<td>The organisation has been terminated and MUST NOT be linked. Organisation transform commands and new links MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>linked</td>
<td>server</td>
<td>The organisation object has at least one active association with another object. This value is not explicitly set by the client. Servers SHOULD provide services to determine existing object associations.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientLinkProhibited</td>
<td>client</td>
<td>Requests to add new links to the organisation MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverLinkProhibited</td>
<td>server</td>
<td>Requests to add new links to the organisation MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientUpdateProhibited</td>
<td>client</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverUpdateProhibited</td>
<td>server</td>
<td>Requests to update the object (other than to remove this status) MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>clientDeleteProhibited</td>
<td>client</td>
<td>Requests to delete the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>serverDeleteProhibited</td>
<td>server</td>
<td>Requests to delete the object MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingCreate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingUpdate</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pendingDelete</td>
<td>server</td>
<td>A transform command has been processed for the object, but the action has not been completed by the server. Server operators can delay action completion for a variety of reasons, such as to allow for human review or third-party action.</td>
<td>[This-ID]</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="rpp-user-status-values-registry"><name>RPP User Status Values Registry</name>
<t>This document establishes the &quot;RESTful Provisioning Protocol (RPP) User Status Values Registry&quot;.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP User Status Values
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Specification Required
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>value</tt>: The machine-readable status label, for example &quot;suspended&quot;.</li>
<li><tt>description</tt>: A human-readable description of the status and the conditions under which it applies.</li>
<li><tt>set-by</tt>: The entity that adds and removes the status value: &quot;client&quot;, &quot;server&quot;, or &quot;client, server&quot; for a value that the server manages and that a client can also manage where server policy permits.</li>
<li><tt>reference</tt>: A reference to the specification that defines the status value.</li>
</ul>

<section anchor="initial-registrations-6"><name>Initial Registrations</name>
<t>The initial registrations for the RPP User Status Values registry are the status values defined in <xref target="tbl-user-status-values"></xref>, reproduced below with their reference.</t>
<table anchor="tbl-user-status-registry"><name>Initial RPP User Status Values Registrations</name>
<thead>
<tr>
<th>Value</th>
<th>Set By</th>
<th>Description</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td>active</td>
<td>server</td>
<td>This is the normal status value for a user that is permitted to authenticate and act within the permissions of its roles.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>pending</td>
<td>server</td>
<td>The user has been created, but activation has not been completed by the server. Server operators can delay activation for a variety of reasons, such as to allow for verification of the user's details or human review. Requests authenticated as the user MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>suspended</td>
<td>client, server</td>
<td>The user has been temporarily suspended. Requests authenticated as the user MUST be rejected.</td>
<td>[This-ID]</td>
</tr>

<tr>
<td>deactivated</td>
<td>client, server</td>
<td>The user has been deactivated. Requests authenticated as the user MUST be rejected.</td>
<td>[This-ID]</td>
</tr>
</tbody>
</table></section>
</section>

<section anchor="urn-sub-namespace-for-rpp-urn-ietf-params-rpp"><name>URN Sub-namespace for RPP (urn:ietf:params:rpp)</name>
<t>The IANA is requested to add the following value to the &quot;IETF URN Sub-namespace for Registered Protocol Parameter Identifiers&quot; registry, following the template in <xref target="RFC3553"></xref>:
TODO: add filled in template, if we decide to use URN for profile identification, for example &quot;urn:ietf:params:rpp:profile:example-profile&quot;</t>

<sourcecode type="text"><![CDATA[Registry name: rpp 
Specification: This Document
Repository: ?
Index value: ?
]]></sourcecode>
</section>

<section anchor="rpp-discovery-registry"><name>RPP Discovery Registry</name>
<t>The IANA is requested to create a new registry for RPP discovery URLs, this registry will be used to register the well-known URLs for RPP discovery endpoints, used by RPP clients to discover the capabilities of an RPP server.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP Discovery URLs
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Expert Review
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>tld</tt>: The top-level domain (TLD) for which the discovery URL is applicable, for example &quot;example&quot;.</li>
<li><tt>url</tt>: The URL for the discovery endpoint, for example &quot;<eref target="https://rpp.example/.well-known/rpp.json&quot;">https://rpp.example/.well-known/rpp.json"</eref>.</li>
<li><tt>description</tt>: A human-readable description of the discovery URL and its intended use.</li>
</ul>
</section>

<section anchor="rpp-extension-registry"><name>RPP Extension Registry</name>
<t>The IANA is requested to create a new registry for RPP extensions, this registry will be used to register standardised extensions to the RPP protocol. Extensions are defined as additional features or capabilities that can be added to the base RPP protocol, for example support for additional resource types, additional operations or additional authentication methods.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP Extensions
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Expert Review
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>name</tt>: The name of the extension, for example &quot;RPP example extension&quot;.</li>
<li><tt>version</tt>: The version of the extension, for example &quot;1.0&quot;.</li>
<li><tt>url</tt>: The URL for the extension specification, for example &quot;<eref target="https://www.iana.org/assignments/rpp-extensions/rpp-example-extension&quot;">https://www.iana.org/assignments/rpp-extensions/rpp-example-extension"</eref>.</li>
<li><tt>description</tt>: A human-readable description of the extension and its intended use.</li>
</ul>
</section>

<section anchor="rpp-profile-registry"><name>RPP Profile Registry</name>
<t>The IANA is requested to create a new registry for RPP profiles, this registry will be used to register standardised profiles for the RPP protocol. Profiles are defined as specific configurations of the RPP protocol that are designed to meet the needs of specific use cases or environments, for example an EPP compatibility profile that defines a set of RPP features and behaviours that are compatible with the Extensible Provisioning Protocol (EPP) <xref target="RFC5730"></xref>.</t>

<sourcecode type="text"><![CDATA[Name of the registry: RPP Profiles
Registry group: RESTful Provisioning Protocol (RPP)
Registration procedure: Expert Review
]]></sourcecode>
<t>Fields to be registered:</t>

<ul spacing="compact">
<li><tt>name</tt>: The name of the profile, for example &quot;EPP compatibility profile&quot;.</li>
<li><tt>id</tt>: A unique URN identifier for the profile, for example &quot;urn:ietf:params:rpp:profile:epp-compatibility&quot;.</li>
<li><tt>version</tt>: The version of the profile, for example &quot;1.0&quot;.</li>
<li><tt>url</tt>: The URL for the profile specification, for example &quot;<eref target="https://www.iana.org/assignments/rpp-profiles/epp-compatibility-profile&quot;">https://www.iana.org/assignments/rpp-profiles/epp-compatibility-profile"</eref>.</li>
<li><tt>description</tt>: A human-readable description of the profile and its intended use.</li>
</ul>
</section>
</section>

<section anchor="security-considerations"><name>Security Considerations</name>

<aside><t>TODO: write security considerations, if any</t>
</aside>
</section>

<section anchor="changes-history" toc="exclude"><name>Changes History</name>

<section anchor="draft-ietf-rpp-data-objects-01-02" numbered="false"><name>draft-ietf-rpp-data-objects -01 - -02</name>

<ul spacing="compact">
<li>added Availability operation to the Uniform Interface and to the Domain Name, Contact and Host Data Objects #46</li>
<li>add Abstract keyword to flag objects used only as base objects; Base Process Object and Base Message Object declared abstract #188</li>
<li>clarified the Processes a Data Object supports or extends, and allowed extensions to define new processes</li>
<li>moved restore report from operation input to read-write element of Restore Process Object and replaced Report operation with Update</li>
<li>added a Status Object per Data Object, including the User Status Object, with status values, allowed transitions, and IANA registries, replacing the inline user status definition #118</li>
<li>fixed User Object delete operation constraint that prevented any user from being deleted</li>
<li>added <tt>X-Y</tt> bounded cardinality notation and set cardinality of Restore Report <tt>statements</tt> to <tt>1-2</tt> #183</li>
<li>defined a structured notation for operation input and output, with input data elements and parameters (replacing transient data elements) inside the Input attribute, and split IANA operation tables into &quot;Input Data Elements&quot; and &quot;Parameters&quot; #147</li>
<li>moved process data element from Base Message Object to Review Response, Transfer Request and Transfer Outcome message objects, using specific process types where possible; registered all message objects in IANA #179</li>
<li>create-only definition clarified about reading #80</li>
<li>moved requests for IANA registrations to here, from rpp-core document #151</li>
<li>added Profile Data Object, including the Default Profile element #140 #155</li>
<li>added Discovery Data Object, with links labelled by IANA link relation types #136 #137</li>
<li>added Visibility data element attribute and generic includeElements parameter. Set authInfo of domain and contact to onDemand visibility #57</li>
<li>added &quot;Inheritance&quot; section to describe how objects can use inheritance #134</li>
<li>removed the urgent parameter from the update operation for Domain Object #52</li>
<li>removed all mandatory ordering requirements for arrays, making them unordered #30</li>
<li>added support for IDN (Internationalized Domain Names) #124</li>
<li>added Message Data Object and new Uniform Interface &quot;Query&quot; operation #116</li>
<li>removed the redefined processId data element from the Domain Transfer Process Object</li>
<li>added Set By column and set-by registry field for status values, and required the server to assign at least one status value #186</li>
<li>renamed Authorisation Information and Disclose component objects to &quot;Authorisation Information Object&quot; and &quot;Disclose Object&quot; to match their references</li>
<li>updated document metadata, and Abstract and Introduction scope</li>
<li>editorial fixes to spelling, hyphenation, capitalisation, and terminology consistency</li>
</ul>
</section>

<section anchor="draft-ietf-rpp-data-objects-00-01" numbered="false"><name>draft-ietf-rpp-data-objects -00 - -01</name>

<ul spacing="compact">
<li>Added Organisation, Organisation Role and User Objects, based on RFC8543 (Issue #25)</li>
<li>Added Renew Process Object and operations (Issue #76)</li>
<li>reserve property names beginning with <tt>@</tt> for representation specifications #89</li>
<li>add generic Create Process Object and Domain Create Process Object carrying the registration period #89</li>
<li>add optional processId to all Process Objects #89</li>
<li>add extensible Processes Object component and processes element to all Data Objects #89</li>
<li>declare the unique identifier element explicitly in every object preamble #89</li>
<li>add &quot;Direct Access&quot; flag exposing association data elements as addressable sub-resources #89</li>
<li>editorial pass: fix spelling, grammar, subject-verb agreement, missing articles, cross-reference wording, and copy-paste object names</li>
<li>Add External Data Types section and JSContact (Issue #83)</li>
<li>restructure object processes: per-object &quot;Processes&quot; sections, process objects extending generic ones, add Domain Transfer Process Object, with IANA updates #119</li>
</ul>
</section>

<section anchor="draft-kowalik-rpp-data-objects-04-draft-ietf-rpp-data-objects-00" numbered="false"><name>draft-kowalik-rpp-data-objects-04 - draft-ietf-rpp-data-objects-00</name>

<ul spacing="compact">
<li>RPP working group adoption</li>
</ul>
</section>

<section anchor="draft-kowalik-rpp-data-objects-03-04" numbered="false"><name>draft-kowalik-rpp-data-objects -03 - -04</name>

<ul spacing="compact">
<li>correct <tt>&quot;postalInfo&quot;</tt> to be DictionaryComposition not DictionaryAggregation</li>
<li>Added missing IANA tables for Contact, Postal Address and Postal Info. Added missing Operations. Added missing operation identifiers. Fixes #17, #18, #19, #20, #21.</li>
</ul>
</section>

<section anchor="draft-kowalik-rpp-data-objects-02-03" numbered="false"><name>draft-kowalik-rpp-data-objects -02 - -03</name>

<ul spacing="compact">
<li>add Object and Dictionary[Value Type] primitive data types</li>
<li>change &quot;Aggregation/Composition Dictionary&quot; to &quot;Dictionary Aggregation/Composition&quot; (Issue #32)</li>
<li>describe operations for contacts #15</li>
<li>describe operations for hosts #16</li>
<li>add Domain Update operation with urgent transient parameter from <xref target="RFC5910"></xref></li>
<li>add identifiers to all operations</li>
<li>abstract common provisioning metadata into reusable component object</li>
<li>define common RGP/restore process and Restore Process Object</li>
<li>define common transfer operations and Transfer Process Object with support for pull and push transfers #23</li>
<li>add domain-specific transfer operations with implicit renewal and subordinate host transfer</li>
<li>add host/domain relationship terminology from RFC 5732</li>
<li>restructure DNS data model aligned with draft-simmen-rpp-dns-data-01: redefine DNS Resource Record Object, add DNS Operational Controls Object, add DNS Data Object; update Domain, Host, and Nameserver objects to use it</li>
<li>add DNSSEC support based on <xref target="RFC5910"></xref>: DS and DNSKEY record types with structured RDATA fields</li>
<li>add NS, A, and AAAA RDATA structures and record type constraints to EPP compatibility profile for DNS Resource Record Object</li>
<li>expand extensibility section with standardised/private extension mechanisms, extension points, and operation extensibility</li>
<li>update IANA registration policy and registry structure to accommodate extension registrations</li>
</ul>
</section>

<section anchor="draft-kowalik-rpp-data-objects-01-02" numbered="false"><name>draft-kowalik-rpp-data-objects -01 - -02</name>

<ul spacing="compact">
<li>ontology of allowed basic datatypes #4</li>
<li>add examples of associations #31</li>
</ul>
</section>
</section>

</middle>

<back>
<references><name>References</name>
<references><name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-rpp-architecture.xml"/>
<reference anchor="I-D.wullink-rpp-jscontact-profile" target="">
  <front>
    <title>JSContact Profile for the RESTful Provisioning Protocol (RPP)</title>
    <author fullname="Maarten Wullink" initials="M." surname="Wullink">
      <organization>SIDN Labs</organization>
    </author>
    <author fullname="Pawel Kowalik" initials="P." surname="Kowalik">
      <organization>DENIC eG</organization>
    </author>
    <date year="2026"></date>
  </front>
  <seriesInfo name="Internet-Draft" value="draft-wullink-rpp-jscontact-profile"></seriesInfo>
</reference>
<reference anchor="ITU.E164.2005" target="">
  <front>
    <title>The international public telecommunication numbering plan</title>
    <author>
      <organization>International Telecommunication Union</organization>
    </author>
    <date year="2005" month="02"></date>
  </front>
  <seriesInfo name="ITU-T Recommendation" value="E.164"></seriesInfo>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0791.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1738.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2026.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.3553.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3915.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5322.xml"/>
<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.5732.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5733.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5890.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5892.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5893.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5952.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6903.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8126.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.8543.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9499.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9553.xml"/>
</references>
<references><name>Informative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.simmen-rpp-dns-data.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3596.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4034.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5910.xml"/>
</references>
</references>

</back>

</rfc>
