Skip to main content
  • Registry

CIRA Fury-2.1 EPP Extension

CIRA Fury-2.1 EPP Extension

Contents
  1. Introduction
  2. Conventions Used in This Document
  3. Extension Elements
    1. Secondary Error Codes
    2. Properties
      1. Property Attributes
      2. Property Value Attributes
      3. <fury:info>
      4. <fury:check>
    3. Administrative Bundle
  4. EPP Command Mapping
    1. EPP Query Commands
    2. EPP <info> Command
    3. EPP Transform Commands
    4. EPP <create> Command
    5. EPP <update> Command
  5. Formal Syntax (XML Schema)
  6. Security Considerations
  7. References
  8. Acknowledgments

1. Introduction

This document describes the Canadian Internet Registration Authority (CIRA)’s Fury‑2.1 extension mapping for version 1.0 of the Extensible Provisioning Protocol (EPP) [RFC5730]. The Fury‑2.1 extension introduces a set of enhancements designed to support advanced registry operations through a unified interface. Specifically, it enables:

  • The association and management of custom metadata (properties) with EPP objects such as domains, contacts, and hosts.
  • The ability to query the registry for supported property definitions and localized values.
  • Enhanced error reporting via secondary error codes for improved diagnostics.
  • The grouping of domains into administrative bundles to enforce registrant consistency across related domain names.

These capabilities are exposed through additional elements in EPP commands and responses when the extension is declared during the <login> negotiation. The extension is intended to provide flexible, scalable mechanisms for registrars to interact with registry-specific features while maintaining compatibility with the EPP protocol.

 

2. Conventions Used in This Document

The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119 [1].

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

3. Extension Elements

3.1. Secondary Error Codes

Additional error tracking is provided via a numeric <fury:ciraCode> value when an EPP command returns an error response.

S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:fury="urn:ietf:params:xml:ns:fury-2.1">
S:  <response>
S:    <result code="2005">
S:      <msg>Parameter value syntax error</msg>
S:      <extValue>
S:        <value>
S:          <fury:ciraCode>8001</fury:ciraCode>
S:        </value>
S:        <reason>Invalid domain name format.</reason>
S:      </extValue>
S:    </result>
S:    <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54322-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>

3.2. Properties

The properties mechanism provides a flexible way to associate additional information with EPP objects. Properties are implemented as extensible key–value pairs defined by the registry.

The registry configures and maintains the set of supported properties. Clients can query the available property definitions as well as manage and validate property values on individual EPP objects through this extension.

Each property is identified by a unique key. A property may be associated only with EPP object types explicitly permitted by its definition. For any given object, the number of property values that may be assigned is determined by the property definition; this may range from zero to multiple values.

3.2.1. Property Attributes

  • entitytype – EPP object type allowed: domain, contact, or host.
  • propertytype – Type of property, e.g. SINGLEENUM, DATE, or LANGUAGE.
  • removable – Whether the property can be completely removed (true or false).
  • updatable – Whether the property values are updatable (true or false).

3.2.2. Property Value Attributes

  • expiry_date – Date the value expires.
  • effective_date – Date the value became effective.
  • enabled – Whether the value can be set on EPP objects.

3.2.3 Properties Query Command

Existing properties in the system can be queried using a custom EPP command when the fury-2.1 extension is selected at login time.

The command MUST contain an <extension> element which MUST contain a <fury:command> element, which MUST contain a <fury:info> element.

The <fury:info> element has the following children in order:

  • An OPTIONAL <fury:language> element – Language for localized values (must be supported).
  • A <fury:properties> element with the following children:
    • Zero or more <fury:property> elements with the following children:
      • <fury:key> – Queried against supported registry properties.
      • Zero or more <fury:value> elements – Queried against matching property values.
        The <fury:value> element has an optional default boolean attribute.
        When default is present, the value text must be omitted in the request.
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <extension>
C:    <fury:command xmlns:fury="urn:ietf:params:xml:ns:fury-2.1">
C:      <fury:info>
C:        <fury:language>en</fury:language>
C:        <fury:properties>
C:          <fury:property>
C:            <fury:key>PRIVACY</fury:key>
C:            <fury:value>PUBLIC</fury:value>
C:            <fury:value default="true"/>
C:          </fury:property>
C:        </fury:properties>
C:      </fury:info>
C:    </fury:command>
C:  </extension>
C:</epp>

When the server receives a <fury:info> command as described above, its response MUST contain an <extension> element, which MUST contain a <fury:response> element, which
MUST contain a <fury:infData> element. The <fury:infData> element has the following children:

  • An OPTIONAL <fury:language> element – present if <fury:language> was in the command.
  • A <fury:properties> element with:
    • Zero or more <fury:property> elements. Returned for each property supported by the registry that matches a <fury:key> in the command, or all supported properties if none were specified. Each <fury:property> may contain:
      • <fury:key> – The property key.
      • Optional <fury:localizedKey> – Present if <fury:language> was in the command.
      • Optional <fury:propertyValues> – Present when values are returned and at least one <fury:property> was in the command.
        • One or more <fury:propertyValue> elements. Each may contain:
          • <fury:value> – May have a default boolean attribute (only one value may have default=”true”).
          • Optional <fury:localizedValue> – Present if <fury:language> was in the command.
          • Optional <fury:localizedDetails> – Present if the value has details and language was requested.
          • Optional <fury:propertyValueAttributes> – Contains one or more <fury:propertyValueAttribute> elements:
            • <fury:key> – Attribute key.
            • <fury:value> – Attribute value.
      • Optional <fury:propertyAttributes> – Present when the property has attributes and at least one
        <fury:property> was in the command. Contains one or more <fury:propertyAttribute> elements:
        • <fury:key> – Attribute key.
        • <fury:value> – Attribute value.

Example server response when no <fury:property> elements are in the command (returns all supported property keys without values or attributes):

S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully</msg>
S:    </result>
S:    <extension>
S:      <fury:response xmlns:fury="urn:ietf:params:xml:ns:fury-2.1">
S:        <fury:infData>
S:          <fury:properties>
S:            <fury:property>
S:              <fury:key>PRIVACY</fury:key>
S:            </fury:property>
S:            <fury:property>
S:              <fury:key>LANGUAGE</fury:key>
S:            </fury:property>
S:          </fury:properties>
S:        </fury:infData>
S:      </fury:response>
S:    </extension>
S:    <trID>
S:      <svTRID>12321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>

Example server response when the command includes a <fury:property> element with a matching key:

S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully</msg>
S:    </result>
S:    <extension>
S:      <fury:response xmlns:fury="urn:ietf:params:xml:ns:fury-2.1">
S:        <fury:infData>
S:          <fury:properties>
S:            <fury:property>
S:              <fury:key>LANGUAGE</fury:key>
S:              <fury:propertyValues>
S:                <fury:propertyValue>
S:                  <fury:value default="true">en</fury:value>
S:                </fury:propertyValue>
S:                <fury:propertyValue>
S:                  <fury:value>fr</fury:value>
S:                </fury:propertyValue>
S:              </fury:propertyValues>
S:              <fury:propertyAttributes>
S:                <fury:propertyAttribute>
S:                  <fury:key>entitytype</fury:key>
S:                  <fury:value>contact</fury:value>
S:                </fury:propertyAttribute>
S:                <fury:propertyAttribute>
S:                  <fury:key>removable</fury:key>
S:                  <fury:value>false</fury:value>
S:                </fury:propertyAttribute>
S:                <fury:propertyAttribute>
S:                  <fury:key>propertytype</fury:key>
S:                  <fury:value>LANGUAGE</fury:value>
S:                </fury:propertyAttribute>
S:                <fury:propertyAttribute>
S:                  <fury:key>updatable</fury:key>
S:                  <fury:value>true</fury:value>
S:                </fury:propertyAttribute>
S:              </fury:propertyAttributes>
S:            </fury:property>
S:          </fury:properties>
S:        </fury:infData>
S:      </fury:response>
S:    </extension>
S:    <trID>
S:      <svTRID>12321-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>

3.2.4 Properties Check Command

The validity of one or more values corresponding to a property in the system can be queried using a custom EPP command when the fury-2.1 extension is selected at login time.

The command MUST contain an <extension> element which MUST contain a <fury:command> element, which MUST contain a <fury:check> element.

The <fury:check> element has the following children in order:

  • A <fury:properties> element with the following children elements:
    • One or more <fury:property> elements with the following children:
      • A <fury:key> element, which will be queried against the supported registry properties
      • One or more <fury:value> elements, which will be validated against the associated property’s constraints.
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <extension>
C:    <fury:command xmlns:fury="urn:ietf:params:xml:ns:fury-2.1">
C:      <fury:check>
C:        <fury:properties>
C:          <fury:property>
C:            <fury:key>FURY_IDENTITY_NUMBER</fury:key>
C:            <fury:value>FURYID-123456789123</fury:value>
C:            <fury:value>S7479653C</fury:value>
C:            <fury:value>123-456-678</fury:value>
C:          </fury:property>
C:        </fury:properties>
C:      </fury:check>
C:    </fury:command>
C:  </extension>
C:</epp>

When the server receives a <fury:check> command as described above, its response MUST contain an <extension> element, which MUST contain a <fury:response> element, which MUST contain a <fury:chkData> element.

The <fury:chkData> element has the following children:

  • A <fury:properties> element with the following children:
    • One or more <fury:property> elements (one for each property with key matching a
      <fury:key> in the command). Each has:
      • A <fury:key> element containing the property key
      • A <fury:propertyValues> element containing:
        • One or more <fury:propertyValue> elements (one per value matching
          <fury:value> in the command), each with:
          • A <fury:value> element, corresponding to a value in the command
          • A <fury:result> element, with a boolean indicating the validation result
          • An OPTIONAL <fury:reason> element, which appears when the value has attributes

Example response when the command has a matching <fury:property>:

S:<?xml version="1.0" encoding="UTF-8"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg></msg>
S:    </result>
S:    <extension>
S:      <fury:response>
S:        <fury:chkData>
S:          <fury:properties>
S:            <fury:property>
S:              <fury:key>FURY_IDENTITY_NUMBER</fury:key>
S:              <fury:propertyValues>
S:                <fury:propertyValue>
S:                  <fury:value>FURYID-123456789123</fury:value>
S:                  <fury:result>true</fury:result>
S:                  <fury:reason>FURYID</fury:reason>
S:                </fury:propertyValue>
S:                <fury:propertyValue>
S:                  <fury:value>S7479653C</fury:value>
S:                  <fury:result>false</fury:result>
S:                  <fury:reason>JCIC</fury:reason>
S:                </fury:propertyValue>
S:                <fury:propertyValue>
S:                  <fury:value>123-456-678</fury:value>
S:                  <fury:result>true</fury:result>
S:                  <fury:reason>DSS</fury:reason>
S:                </fury:propertyValue>
S:              </fury:propertyValues>
S:            </fury:property>
S:          </fury:properties>
S:        </fury:chkData>
S:      </fury:response>
S:    </extension>
S:    <trID>
S:      <svTRID>CIRA-000000007301-0000000004</svTRID>
S:    </trID>
S:  </response>
S:</epp>

3.3. Administrative Bundle

An administrative bundle is a grouping of domains based on criteria determined by the registry, by which the registration of any one domain in the bundle by a registrant, restricts the rest of the domains in the bundle to the same registrant (specifically with the same registrant contact ID). Each bundle would have a unique name by which to identify it from any other grouping.

An example of an administrative bundle is to group together all Internationalized Domain Name (IDN) variants of a domain in the same bundle. For example restricting example.fury and xn--xmpl-boa3bb.fury (éxâmplè.fury) to being registered by the same registrant.

In this example, the bundle name for each bundle would be the normalized, non-diacritic version of the domain name, example.fury.

4. EPP Command Mapping

4.1. EPP Query Commands

No additional elements are added to <check>, <poll>, or <transfer>.

4.2 EPP <info> Command

This extension does not add elements to the <info> command, but does include elements in the response.

When an EPP Object is queried with the <info> command, and the fury-2.1 extension was selected at login time, the server MAY include an <extension> element which MAY include a <fury:info> element with the following children elements:

  • An OPTIONAL <fury:bundle> element, which appears when 1) the EPP Object is a domain, and 2) the domain is in an administrative bundle with another registered domain as described in Section 2.3. It has the following children elements:
    • A <fury:name> element, which contains the name of the administrative bundle.
    • A <fury:domains> element, which contains Two or More <fury:name> elements, one for each registered domain in the administrative bundle (including itself). The domain names in this field are in A-Label format.
  • An OPTIONAL <fury:info> element, which appears when the EPP Object has values for any property as defined in Section 2.2. It has the following children elements:
    • A <fury:properties> element. It has the following children elements:
      • One or More <fury:property> elements, one for every property that the EPP Object has associated values for. Each has the following children elements:
        • A <fury:key> element, with the property key.
        • One or More <fury:value> elements, with the value of the property associated to the EPP Object.
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully</msg>
S:    </result>
S:    <resData>
S:      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S:        <domain:name>xn--xmpl-boa3bb.fury</domain:name>
S:        <domain:roid>1234-EXAMPLE</domain:roid>
S:        <domain:status s="ok"/>
S:        <domain:registrant>contact1</domain:registrant>
S:        <domain:contact type="admin">contact2</domain:contact>
S:        <domain:contact type="tech">contact2</domain:contact>
S:        <domain:ns>
S:          <domain:hostObj>ns1.example.fury</domain:hostObj>
S:          <domain:hostObj>ns1.example.fury</domain:hostObj>
S:        </domain:ns>
S:        <domain:clID>ClientX</domain:clID>
S:        <domain:crID>ClientY</domain:crID>
S:        <domain:crDate>2018-12-17T22:00:00.0Z</domain:crDate>
S:        <domain:exDate>2020-12-28T22:00:00.0Z</domain:exDate>
S:        <domain:authInfo>
S:          <domain:pw>2fooBAR</domain:pw>
S:        </domain:authInfo>
S:      </domain:infData>
S:    </resData>
S:    <extension>
S:      <fury:info xmlns:fury="urn:ietf:params:xml:ns:fury-2.1">
S:        <fury:bundle>
S:          <fury:name>example.fury</fury:name>
S:          <fury:domains>
S:            <fury:name>example.fury</fury:name>
S:            <fury:name>xn--xmpl-boa3bb.fury</fury:name>
S:          </fury:domains>
S:        </fury:bundle>
S:        <fury:properties>
S:          <fury:property>
S:            <fury:key>PRIVACY</fury:key>
S:            <fury:value>PRIVATE</fury:value>
S:          </fury:property>
S:        </fury:properties>
S:      </fury:info>
S:    </extension>
S:    <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54322-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>

4.3. EPP Transform Commands

No additional elements are added to <delete>, <renew>, or <transfer>.

4.4 EPP <create> Command

This extension does not add elements to the <create> response, but does include elements in the command when the fury-2.1 extension is selected at login.

When submitting a <create> command to the server, the client MAY include in the <extension> element a <fury:create> element with the following children elements:

  • An OPTIONAL <fury:properties> element, used to associate property values to the EPP Object as described in Section 2.2. It has the following children elements:
  • One or More <fury:property> elements, one for each property for which the client would like to set values. Each has the following children elements:
    • A <fury:key> element, which contains the key of the property being associated to the EPP Object
    • One or More <fury:value> elements, one for each value of the property being associated to the EPP Object. If the client wishes to set the default value, the attribute default="true" can be added to an empty <fury:value> element.
C:<?xml version="1.0" encoding="UTF-8"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <create>
C:      <domain:create xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C:        <domain:name>example.fury</domain:name>
C:        <domain:registrant>contact1</domain:registrant>
C:        <domain:authInfo>
C:          <domain:pw>2fooBAR</domain:pw>
C:        </domain:authInfo>
C:      </domain:create>
C:    </create>
C:    <extension>
C:      <fury:create xmlns:fury="urn:ietf:params:xml:ns:fury-2.1">
C:        <fury:properties>
C:          <fury:property>
C:            <fury:key>PRIVACY</fury:key>
C:            <fury:value default="true"/>
C:          </fury:property>
C:        </fury:properties>
C:      </fury:create>
C:    </extension>
C:    <trID>
C:      <clTRID>ABC-12345</clTRID>
C:    </trID>
C:  </command>
C:</epp>

The server MUST fail the <create> command if:

  • The property KEY is not supported by the registry
  • The property KEY is not supported for the EPP Object type
  • The property value is not valid for the property
  • The property does not have a default value when default="true" attribute submitted
  • The property does not support multiple values when multiple values submitted
  • Multiple <fury:property> elements with the same property key

When the <create> command has been processed successfully, the server response is unchanged by this extension.

S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully</msg>
S:    </result>
S:    <resData>
S:      <domain:creData>
S:        <domain:name>example.fury</domain:name>
S:        <domain:crDate>2018-12-17T22:00:00.0Z</domain:crDate>
S:        <domain:exDate>2020-12-28T22:00:00.0Z</domain:exDate>
S:      </domain:creData>
S:    </resData>
S:    <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54322-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>

4.5 EPP <update> Command

This extension does not add elements to the <update> response, but does include elements in the command when the fury-2.1 extension is selected at login.

When submitting an <update> command to the server, the client MAY include in the <extension> element a <fury:update> element with the following children elements:

  • An OPTIONAL <fury:add> element. It has the following children elements:
    • An OPTIONAL <fury:properties> element, used to add property values to an EPP Object as described in Section 2.2. It has the following children elements:
  • One or More <fury:property> elements, one for each property for which the client would like to add values. Each has the following children elements:
  • A <fury:key> element, which contains the key of the property being modified for the EPP Object
  • One or More <fury:value> elements, one for each value of the property being added to the EPP Object. If the client wishes to set the default value, the attribute default="true" can be added to an empty <fury:value> element.
  • An OPTIONAL <fury:rem> element. It has the following elements:
    • An OPTIONAL <fury:properties> element, used to remove property values from an EPP Object as described in Section 2.2. It has the following children elements:
      • One or More <fury:property> elements, one for each property for which the client would like to remove values. Each has the following children elements:
        • A <fury:key> element, which contains the key of the property being modified for the EPP Object
    • Either:
      • One or More <fury:value> elements, one for each value of the property being removed from the EPP Object.
      • Or one <fury:remAll> element with text true, which will remove all values associated to the EPP Object for the property.

When a client wishes to change the property value for an EPP Object, they MUST remove the old value and add the new value.

C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C:  <command>
C:    <update>
C:      <contact:update xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
C:        <contact:id>contact1</contact:id>
C:      </contact:update>
C:    </update>
C:    <extension>
C:      <fury:update xmlns:fury="urn:ietf:params:xml:ns:fury-2.1">
C:        <fury:add>
C:          <fury:properties>
C:            <fury:property>
C:              <fury:key>LANGUAGE</fury:key>
C:              <fury:value>en</fury:value>
C:            </fury:property>
C:          </fury:properties>
C:        </fury:add>
C:        <fury:rem>
C:          <fury:properties>
C:            <fury:property>
C:              <fury:key>LANGUAGE</fury:key>
C:              <fury:remAll>true</fury:remAll>
C:            </fury:property>
C:          </fury:properties>
C:        </fury:rem>
C:      </fury:update>
C:    </extension>
C:    <trID>
C:      <clTRID>ABC-12345</clTRID>
C:    </trID>
C:  </command>
C:</epp>

The server MUST fail the <update> command if:

  • The property KEY is not supported by the registry
  • The property KEY is not supported for the EPP Object type
  • The property value is not valid for the property
  • The property does not have a default value when default="true" attribute submitted
  • The property values are modified and the {number existing values} + {number added values} – {number removed values} leaves an unsupported number of values for the property
  • The property is not updatable but is being modified
  • Multiple <fury:property> elements with the same property key

When the <update> command has been processed successfully, the server response is unchanged by this extension.

S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S:  <response>
S:    <result code="1000">
S:      <msg>Command completed successfully</msg>
S:    </result>
S:    <trID>
S:      <clTRID>ABC-12345</clTRID>
S:      <svTRID>54322-XYZ</svTRID>
S:    </trID>
S:  </response>
S:</epp>

5. Formal Syntax

An EPP object mapping is specified in XML Schema notation. The formal syntax presented here is a complete schema representation of the object mapping suitable for automated validation of EPP XML instances.

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:ietf:params:xml:ns:fury-2.1"
        xmlns:fury="urn:ietf:params:xml:ns:fury-2.1"
        xmlns="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">

   <annotation>
      <documentation>
         Extensible Provisioning Protocol v1.0
         contact and domain
         extension schema for framework for
         provisioning of Fury additional
         information.
      </documentation>
   </annotation>

   <!-- Command and Response elements -->
   <element name="command" type="fury:commandType"/>
   <element name="response" type="fury:responseType"/>

   <!-- Child elements of command -->
   <element name="ciraCode" type="fury:ciraCodeType"/>
   <element name="create" type="fury:createType"/>
   <element name="info" type="fury:infoType"/>
   <element name="update" type="fury:updateType"/>
   <element name="check" type="fury:checkType"/>

   <!-- Child elements of <ciraCode> command -->
   <simpleType name="ciraCodeType">
      <restriction base="unsignedShort">
         <totalDigits value="4"/>
         <minInclusive value="3000"/>
         <maxInclusive value="9999"/>
      </restriction>
   </simpleType>

   <!-- Child elements of <create> command -->
   <complexType name="createType">
      <sequence>
         <element name="properties" type="fury:properties" minOccurs="0"/>
      </sequence>
   </complexType>

   <!-- Child elements of <info> command -->
   <complexType name="infoType">
      <sequence>
         <element name="properties" type="fury:properties" minOccurs="0"/>
         <element name="bundle" type="fury:bundle" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="bundle">
      <sequence>
         <element name="name" type="string"/>
         <element name="domains" type="fury:domains"/>
      </sequence>
   </complexType>

   <complexType name="domains">
      <sequence>
         <element name="name" type="string" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <!-- Child elements of <update> command -->
   <complexType name="updateType">
      <sequence>
         <element name="add" type="fury:addType" minOccurs="0"/>
         <element name="rem" type="fury:rmType" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="addType">
      <sequence>
         <element name="properties" type="fury:properties" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="rmType">
      <sequence>
         <element name="properties" type="fury:properties" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="commandType">
      <choice>
         <element name="info" type="fury:infoCommandType"/>
         <element name="check" type="fury:chkCommandType"/>
      </choice>
   </complexType>

   <complexType name="infoCommandType">
      <sequence>
         <element name="language" type="normalizedString" minOccurs="0"/>
         <choice>
            <element name="properties" type="fury:infoCommandPropertiesType"/>
         </choice>
      </sequence>
   </complexType>

   <complexType name="infoCommandPropertiesType">
      <sequence>
         <element name="property" type="fury:infoCommandKvpEntry" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="infoCommandKvpEntry">
      <sequence>
         <element name="key" type="normalizedString"/>
         <element name="value" type="fury:valueType" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="properties">
      <sequence>
         <element name="property" type="fury:kvpEntry" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="kvpEntry">
      <sequence>
         <element name="key" type="normalizedString"/>
         <choice>
            <element name="value" type="fury:valueType" maxOccurs="unbounded"/>
            <element name="remAll" type="boolean"/>
         </choice>
      </sequence>
   </complexType>

   <complexType name="responseType">
      <choice>
         <element name="infData" type="fury:infoResponseType"/>
         <element name="chkData" type="fury:chkResponseType"/>
      </choice>
   </complexType>

   <complexType name="infoResponseType">
      <sequence>
         <element name="language" type="normalizedString" minOccurs="0"/>
         <choice>
            <element name="properties" type="fury:infoResponsePropertyType"/>
         </choice>
      </sequence>
   </complexType>

   <complexType name="infoResponsePropertyType">
      <sequence>
         <element name="property" type="fury:infoResponseKvpEntry" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="infoResponseKvpEntry">
      <sequence>
         <element name="key" type="normalizedString"/>
         <element name="localizedKey" type="normalizedString" minOccurs="0"/>
         <element name="propertyValues" type="fury:infoResponsePropertyValuesType" minOccurs="0"/>
         <element name="propertyAttributes" type="fury:infoResponsePropertyAttributesType" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="infoResponsePropertyValuesType">
      <sequence>
         <choice>
            <element name="propertyValue" type="fury:infoResponsePropertyValueType" minOccurs="0" maxOccurs="unbounded"/>
         </choice>
      </sequence>
   </complexType>

   <complexType name="infoResponsePropertyValueType">
      <sequence>
         <element name="value" type="fury:valueType"/>
         <element name="localizedValue" type="normalizedString" minOccurs="0"/>
         <element name="localizedDetail" type="string" minOccurs="0"/>
         <element name="propertyValueAttributes" type="fury:infoResponsePropertyValueAttributesType" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="infoResponsePropertyValueAttributesType">
      <sequence>
         <element name="propertyValueAttribute" type="fury:infoResponsePropertyAttributeType" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="infoResponsePropertyAttributesType">
      <sequence>
         <element name="propertyAttribute" type="fury:infoResponsePropertyAttributeType" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="infoResponsePropertyAttributeType">
      <sequence>
         <element name="key" type="normalizedString"/>
         <element name="value" type="fury:valueType" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="checkType">
      <sequence>
         <element name="properties" type="fury:properties" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="chkCommandType">
      <sequence>
         <choice>
            <element name="properties" type="fury:chkCommandPropertiesType"/>
         </choice>
      </sequence>
   </complexType>

   <complexType name="chkCommandPropertiesType">
      <sequence>
         <element name="property" type="fury:chkCommandEntry" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="chkCommandEntry">
      <sequence>
         <element name="key" type="normalizedString"/>
         <element name="value" type="fury:valueType" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="chkResponseType">
      <sequence>
         <choice>
            <element name="properties" type="fury:chkResponsePropertyType"/>
         </choice>
      </sequence>
   </complexType>

   <complexType name="chkResponsePropertyType">
      <sequence>
         <element name="property" type="fury:chkResponseEntry" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
   </complexType>

   <complexType name="chkResponseEntry">
      <sequence>
         <element name="key" type="normalizedString"/>
         <element name="propertyValues" type="fury:chkResponsePropertyValuesType" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="chkResponsePropertyValuesType">
      <sequence>
         <choice>
            <element name="propertyValue" type="fury:chkResponsePropertyValueType" minOccurs="0" maxOccurs="unbounded"/>
         </choice>
      </sequence>
   </complexType>

   <complexType name="chkResponsePropertyValueType">
      <sequence>
         <element name="value" type="fury:valueType"/>
         <element name="result" type="normalizedString"/>
         <element name="reason" type="normalizedString" minOccurs="0"/>
      </sequence>
   </complexType>

   <complexType name="valueType">
      <simpleContent>
         <extension base="normalizedString">
            <attribute name="default" type="boolean" default="false" use="optional"/>
         </extension>
      </simpleContent>
   </complexType>

</schema>

6. Security Considerations

The Fury‑2.1 extension provides no additional security services beyond those described by EPP [RFC5730] and related mappings. The security considerations described in those specifications apply to this specification as well.

7. References

  • [RFC2119] Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” BCP 14, RFC 2119.
  • [RFC5730] Hollenbeck, S., “Extensible Provisioning Protocol (EPP),” STD 69, RFC 5730.
  • [RFC5731] Hollenbeck, S., “EPP Domain Name Mapping,” STD 69, RFC 5731.

8. Acknowledgments

Authored by the Canadian Internet Registration Authority (CIRA) for the Fury Registry Platform. This is an official CIRA EPP extension specification.

 

© CIRA. Namespace preserved: urn:ietf:params:xml:ns:fury-2.1.

 

Loading…