Create domain[Link]

Purpose

create a new domain name.

The EPP protocol specifies two ways of working with name servers:

  • name servers as first-class objects.

  • name servers merely as attributes to a domain name. It is this possibility that DNS Belgium has adopted. Technically speaking, this means you will need to use the <hostAttr> element and not the <hostObj> element.

DNS Belgium does not have host objects as separate entities. A name server is specified on the domain object command; and is created, deleted or updated as needed, transparently to the client. A host/name server cannot be accessed directly as an EPP object.

The EPP standard supposes that the domain name that is being registered, contains the trailing TLD extension. This is because EPP can be used by registries that manage more than one extension. For consistency reasons, we will accept domain names without the ‘.be’ extensions. If, however, an extension is provided, it will be checked and only ‘.be’ extensions will be handled.

The elements and tags that are relevant for DNS Belgium are specified below. Tags that are optional can be omitted without producing an XML parsing error. Some components of the command need further explanation:

  • <domain:name> is required. Is the domain name to create, with or without the trailing ‘.be’. It can be more than 63 characters long but will return an error from the transaction processor when that is the case.

  • <domain:period> is optional. Is the domain validity period. Only accepted values are 1 with unit ‘y’ (year) and 12 with unit ‘m’ (month).

  • <domain:ns> is optional. Contains a list of name servers.

  • <domain:hostAttr> is required if <domain:ns> is present. DNS Belgium server policy limits up to 9. Optional <hostAddr> elements allow for specifying required glue records.

  • <domain:registrant> is required. Is the registrant alias of the domain. The registrant must be a valid contact, created on the system before with either EPP or via other means (web).

  • <domain:contact> Is the list of contacts to associate with this domain. The type attribute can be one of: ‘billing’ (billing contact) (exactly 1), ‘tech’ (technical contact) (0 to 5), ‘onsite’ (onsite contact) (0 to 5). DNS Belgium policy requires 1 ‘billing’ contact and at least 1 of ‘tech’ or ‘onsite’. The command will fail when the number of contacts per type violates the above rules.

  • <domain:authInfo> Contains the authorization information associated with the domain. This value is currently ignored. As it is a required element in the schema, it must be provided. However, you don’t have to specify a value between the tags.

  • <dnsbe:nsgroup> is optional. Contains the list of name server groups.

  • <dnsbe:keygroup> is optional. Contains the list of keygroups.

  • <secDNS:keyData> is optional. Contains a list of maximum 4 keys. Following elements are required if this is present:

  • <secDNS:flags> DNS Belgium only accepts flag 257 (KSK).

  • <secDNS:protocol> Indicates the protocol used, DNSSEC requires protocol 3.

  • <secDNS:alg> Indicates the algorithm used to generate the key, DNS Belgium recommends these algorithms to generate keys: (8) RSA-SHA256, (10) RSA-SHA512, (13) ECDSA Curve P-256 with SHA-256, (14) ECDSA Curve P-384 with SHA-384, (15) ED25519 and (16) ED448.

  • <secDNS:pubKey> Contains the value of the public key.

More information about new domain names can be found under General.

Please refer to the examples to see a complete request.

Examples[Link]

A simple registration:

<epp xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd http://www.dns.be/xml/epp/dnsbe-1.0 dnsbe-1.0.xsd" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
  <command>
    <create>
      <domain:create>
        <domain:name>greatdomain.be</domain:name>
        <domain:registrant>c16</domain:registrant>
        <domain:contact type="billing">c14</domain:contact>
        <domain:contact type="tech">c17</domain:contact>
        <domain:authInfo>
          <domain:pw>not-used</domain:pw>
        </domain:authInfo>
      </domain:create>
    </create>
<clTRID>client-00016</clTRID>
</command>
</epp>

The result of this transaction will be another document for which you can find the description(s) in the EPP schemas:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:creData>
        <domain:name>test-domain-2.be</domain:name>
        <domain:crDate>2006-10-09T09:45:17.586Z</domain:crDate>
      </domain:creData>
    </resData>
    <trID>
      <clTRID>client-00016</clTRID>
      <svTRID>dnsbe-111</svTRID>
    </trID>
  </response>
</epp>

The following information can be seen in the reply:

  • <result> Contains the result information. See EPP result code list for more information on the meaning of codes.

  • <msg> Is the result code in text format.

  • <domain:name> Is the domain name created (with the trailing ‘.be’)

  • <domain:crDate> Is the real creation date in UTC time.

  • <clTRID> Is the transaction ID provided by the registrar in the input command.

  • <svTRID> Is the server unique transaction ID.

The registration of a domain name with name servers (one with a glue record) and one name server group.

<epp xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd http://www.dns.be/xml/epp/dnsbe-1.0 dnsbe-1.0.xsd" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
  <command>
    <create>
      <domain:create>
        <domain:name>greatdomain.be</domain:name>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns.hostingcompany.be</domain:hostName>
          </domain:hostAttr>
          <domain:hostAttr>
            <domain:hostName>ns.greatdomain.be</domain:hostName>
            <domain:hostAddr>193.168.0.1</domain:hostAddr>
          </domain:hostAttr>
        </domain:ns>
        <domain:registrant>c16</domain:registrant>
        <domain:contact type="billing">c14</domain:contact>
        <domain:contact type="tech">c17</domain:contact>
        <domain:authInfo>
          <domain:pw>not-used</domain:pw>
        </domain:authInfo>
      </domain:create>
    </create>
    <extension>
      <dnsbe:ext>
        <dnsbe:create>
          <dnsbe:domain>
            <dnsbe:nsgroup>mynsgroup1</dnsbe:nsgroup>
          </dnsbe:domain>
        </dnsbe:create>
      </dnsbe:ext>
    </extension>
    <clTRID>clientref-00017</clTRID>
  </command>
</epp>

The result of this transaction is:

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:creData>
        <domain:name>greatdomain.be</domain:name>
        <domain:crDate>2006-10-06T12:47:31.736Z</domain:crDate>
      </domain:creData>
    </resData>
    <trID>
      <clTRID>clientref-00017</clTRID>
      <svTRID>dnsbe-32</svTRID>
    </trID>
  </response>
</epp>

A registration with a name server that needs a glue record (as it is in the same domain as the one registered):

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd
urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd
http://www.dns.be/xml/epp/dnsbe-1.0 dnsbe-1.0.xsd">
<command>
<create>
<domain:create>
<domain:name>test-domain-1.be</domain:name>
<domain:ns>
  <domain:hostAttr>
     <domain:hostName>ns.test-domain-1.be</domain:hostName>
  </domain:hostAttr>
</domain:ns>
<domain:registrant>c16</domain:registrant>
<domain:contact type="billing">c14</domain:contact>
<domain:contact type="tech">c17</domain:contact>
</domain:create>
</create>
<clTRID>client-00018</clTRID>
</command>
</epp>

The result of this transaction is:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
  <response>
    <result code="2005">
      <msg>Parameter value syntax error</msg>
    </result>
    <extension>
      <dnsbe:ext>
        <dnsbe:result>
          <dnsbe:msg>missing glue for ns.test-domain-1.be</dnsbe:msg>
        </dnsbe:result>
      </dnsbe:ext>
    </extension>
    <trID>
      <clTRID>client-00018</clTRID>
      <svTRID>dnsbe-113</svTRID>
    </trID>
  </response>
</epp>

Also, when you specify a hostAddr element when it is not needed, an error is generated:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd
urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd
http://www.dns.be/xml/epp/dnsbe-1.0 dnsbe-1.0.xsd">
<command>
<create>
<domain:create>
<domain:name>test-domain-1.be</domain:name>
<domain:ns>
  <domain:hostAttr>
     <domain:hostName>ns.anotherdomain.be</domain:hostName>
     <domain:hostAddr>1.2.3.4</domain:hostAddr>
  </domain:hostAttr>
</domain:ns>
<domain:registrant>c16</domain:registrant>
<domain:contact type="billing">c14</domain:contact>
<domain:contact type="tech">c17</domain:contact>
</domain:create>
</create>
<clTRID>client-00019</clTRID>
</command>
</epp>

The result of this transaction is:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
  <response>
    <result code="2005">
      <msg>Parameter value syntax error</msg>
    </result>
    <extension>
      <dnsbe:ext>
        <dnsbe:result>
          <dnsbe:msg>glue not required for ns.anotherdomain.be</dnsbe:msg>
        </dnsbe:result>
      </dnsbe:ext>
    </extension>
    <trID>
      <clTRID>client-00019</clTRID>
      <svTRID>dnsbe-114</svTRID>
    </trID>
  </response>
</epp>

A registration with an nsgroup and a keygroup:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <create>
      <domain:create xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>signeddomain</domain:name>
        <domain:registrant>c104153</domain:registrant>
        <domain:contact type="billing">c80</domain:contact>
        <domain:contact type="tech">c81</domain:contact>
        <domain:authInfo>
          <domain:pw></domain:pw>
        </domain:authInfo>
      </domain:create>
    </create>
    <extension>
      <dnsbe:ext xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
        <dnsbe:create>
          <dnsbe:domain>
            <dnsbe:nsgroup>greatserver</dnsbe:nsgroup>
            <dnsbe:keygroup>mykeygroup</dnsbe:keygroup>
          </dnsbe:domain>
        </dnsbe:create>
      </dnsbe:ext>
    </extension>
    <clTRID>domain-create-01</clTRID>
  </command>
</epp>

The result of this transaction is:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:creData>
        <domain:name>signeddomain</domain:name>
        <domain:crDate>2010-08-06T12:09:55.042Z</domain:crDate>
      </domain:creData>
    </resData>
    <trID>
      <clTRID>domain-create-01</clTRID>
      <svTRID>dnsbe-343004</svTRID>
    </trID>
  </response>
</epp>

A registration with a DNSSEC key:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <create>
      <domain:create xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>signeddomain</domain:name>
        <domain:registrant>c104153</domain:registrant>
        <domain:contact type="billing">c80</domain:contact>
        <domain:contact type="tech">c81</domain:contact>
        <domain:authInfo>
          <domain:pw></domain:pw>
        </domain:authInfo>
      </domain:create>
    </create>
    <extension>
      <secDNS:create xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
        <secDNS:keyData>
          <secDNS:flags>257</secDNS:flags>
          <secDNS:protocol>3</secDNS:protocol>
          <secDNS:alg>8</secDNS:alg>
          <secDNS:pubKey>AwEAAchObqtQhBlAmwkFeVOjgi3rG3skoTWKOcb7dtnoah1bgpTth6Rkqdp3cQeiHBcuHD5o6YLRgR03okzZGF15TNewAyzt6lQXJnsFdrDGR9Gcvnqy98SnmyBU/2KXZKkX5GaSJ5WGrz5I9VToShdssNbEULcRM38aPtd913PnkfYGYr2g1aPYGPx1NwK36bMNHSbrmZEJDYijPfc/HP2/4Wf74/eUL+q955imeukUFQJa+Ufzb+get4RAVRJ9SH3q/nITzCk/6tu8bWuOMn+oZfUaRq4llTKmmQ2ZDGBC3Uk5E++IfKvgIj6yOQhZbY+PLcN3gj8qYqin 213gwynWKm8=</secDNS:pubKey>
        </secDNS:keyData>
      </secDNS:create>
    </extension>
    <clTRID>domain-create-dnskey-00</clTRID>
  </command>
</epp>

The result of this transaction is:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:creData>
        <domain:name>signeddomain</domain:name>
        <domain:crDate>2010-08-06T12:03:48.884Z</domain:crDate>
      </domain:creData>
    </resData>
    <trID>
      <clTRID>domain-create-dnskey-00</clTRID>
      <svTRID>dnsbe-343002</svTRID>
    </trID>
  </response>
</epp>

Note

It is not possible to register a domain name with both keys and keygroups!

A registration with all possible additions:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <create>
      <domain:create xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>signeddomain</domain:name>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns.signeddomain.be</domain:hostName>
            <domain:hostAddr>2001:be1::1:2</domain:hostAddr>
          </domain:hostAttr>
          <domain:hostAttr>
            <domain:hostName>ns1.greatserver.be</domain:hostName>
          </domain:hostAttr>
          <domain:hostAttr>
            <domain:hostName>ns2.greatserver.be</domain:hostName>
          </domain:hostAttr>
        </domain:ns>
        <domain:registrant>c104153</domain:registrant>
        <domain:contact type="billing">c80</domain:contact>
        <domain:contact type="tech">c81</domain:contact>
        <domain:contact type="onsite">c7052</domain:contact>
        <domain:authInfo>
          <domain:pw></domain:pw>
        </domain:authInfo>
      </domain:create>
    </create>
    <extension>
      <dnsbe:ext xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
        <dnsbe:create>
          <dnsbe:domain>
            <dnsbe:nsgroup>greatserver</dnsbe:nsgroup>
            <dnsbe:keygroup>mykeygroup</dnsbe:keygroup>
          </dnsbe:domain>
        </dnsbe:create>
      </dnsbe:ext>
    </extension>
    <clTRID>domain-create-01</clTRID>
  </command>
</epp>

The result of this transaction is:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:creData>
        <domain:name>signeddomain</domain:name>
        <domain:crDate>2010-08-06T12:18:19.519Z</domain:crDate>
      </domain:creData>
    </resData>
    <trID>
      <clTRID>domain-create-01</clTRID>
      <svTRID>dnsbe-343006</svTRID>
    </trID>
  </response>
</epp>

When you have received too many hitpoints, the server will respond:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:dnsbe="http://www.dns.be/xml/epp/dnsbe-1.0">
  <response>
    <result code="2308">
      <msg>Data management policy violation</msg>
    </result>
    <extension>
      <dnsbe:ext>
        <dnsbe:result>
          <dnsbe:msg>operation not available because of too many hitpoints</dnsbe:msg>
        </dnsbe:result>
      </dnsbe:ext>
    </extension>
    <trID>
      <svTRID>dnsbe-0</svTRID>
    </trID>
  </response>
</epp>

Tip

In case the connection broke down during this transaction and you are not sure that your registration was successful, establish a new session and send a check domain request. If the domain name was not registered and is still available for registration, you can send your create domain request again.

Possible error messages[Link]

A non-exhaustive list of possible error messages regarding a create domain request is:

  • 2001 (Command syntax error), with possible messages:

    • missing value in element

    • missing element (e.g. No domain name or no registrant)

    • incorrect value type

  • 2004 (Parameter value range error)

    • Period must be 1 year or 12 months [HITPOINT]

  • 2005 (Parameter value syntax error), with possible messages:

    • Invalid pubKey [HITPOINT]

    • using keygroup and keys at the same time [HITPOINT]

  • 2104 (Billing failure), Not enough money for this transaction [HITPOINT]

  • 2302 (object exists), if the domain name already exists.

  • 2303 (Object does not exist), with possible messages:

    • contact [contact alias] is not an active contact [HITPOINT]

    • wrong type for contact (onsite instead of tech) [HITPOINT]

    • nameserver group does not exists [HITPOINT]

    • keygroup keygroup name does not exist [HITPOINT]

  • 2306 (Parameter value policy error), invalid domain name [HITPOINT]

  • 2308 (Data management policy violation), with possible messages:

    • Too many tech contacts given [HITPOINT]

    • Too many onsite contacts given [HITPOINT]

    • No billing contact [HITPOINT]

    • No technical or onsite contact [HITPOINT]