EPP Commands

The following EPP commands can be used by registrars to query and update the .nz register and DNS:

hello

To establish a connection with the .nz EPP server a client can at any time request a <greeting> from the server by sending a <hello> command. Connection has to be via encrypted SSL.

The <hello> element is just an empty element with no child elements:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <hello/>
</epp>

greeting

The .nz EPP server will send a <greeting> upon establishment of the connection/session and as response of <hello> element.

Element

Occurrence

Note

<svID>

1

contains name of server

<svDate>

1

contains server’s current date and time in UTC

<svcMenu>

1

contains the services supported by the server

<version>

1-n

contains EPP version currently supported

<lang>

1-n

contains the test response language currently supported

<objURI>

1-n

contains the list of namespace URIs representing the objects that the server is capable of managing

<svcExtension>

0-1

contains the URI elements with the URIs of the extensions the server supports

<extURI>

1-n

contains the URI of an extension the server supports

<dcp>

contains info related to privacy policies with the following child elements:

<access>

1

describes access provided by the server to the client regarding originating data source. Contains the following empty child elements

<personalAndOther/>

1

Access is given to identified data relating to individuals, organisational entities, and other data of a non-personal data

<statement>

1-n

describes data collection purposes, data recipients, and data retention. Contains a <purpose>, <recipient> and <retention> element

<purpose>

1

purpose for which data is collected. Has the following empty child elements

<admin/>

1

Administrative purposes

<prov/>

1

Object provisioning purposes

<recipient>

1

describes the recipient of collected data. Has the following empty child element

<ours/>

1

Server operator and/or entities acting as agents or entities for whom the server operator is acting as an agent

<retention>

1

describes data retention practices. Has the following empty child element

<business>

1

data persists per business practice

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <greeting>
    <svID>srsepp.srs.net.nz</svID>
    <svDate>2008-12-20T09:50:21+00:00</svDate>
    <svcMenu>
      <version>1.0</version>
      <lang>en</lang>
      <objURI>urn:ietf:params:xml:ns:epp:domain-1.0</objURI>
      <objURI>urn:ietf:params:xml:ns:epp:contact-1.0</objURI>
      <svcExtension>
        <extURI>urn:ietf:params:xml:ns:secDNS-1.1</extURI>
      </svcExtension>
    </svcMenu>
    <dcp>
      <access>
        <personalAndOther/>
      </access>
      <statement>
        <purpose>
          <admin/>
          <prov/>
        </purpose>
        <recipient>
          <ours/>
        </recipient>
        <retention>
          <business/>
        </retention>
      </statement>
    </dcp>
  </greeting>
</epp>

login

This command is to establish a session with an EPP server in response to a <greeting>

  • The EPP connection is kept open by the server between a <login> and a <logout> command from the client, using the same socket connection

  • The EPP connection be closed by the server after 5 minutes if the connection is idle (this is a rolling timeout)

  • The EPP connection is also closed without logout if the client closes the socket. However, to ensure responsible behaviour, a client should disconnect the SSL socket only after the EPP <logout> command.

Element

Occurrence

Note

<login>

1

command element

<clID>

1

client identifier  assigned to client by the server. Same as registrar id in SRS

<pw>

1

registrar’s plain text password

<newPW>

0-1

optional - a new password to change the current login password

<option>

1

contains the following 2 child elements

<version>

1

the protocol version to be used for the command or ongoing server session. must match EPP greeting value

<lang>

1

contains text response language to be used for the command or ongoing server commands. must match EPP greeting value: “en” - english

<svcs>

1

contains services used. Contains following child elements

<objURI>

1-n

Namespace URIs representing the objects to be managed during the session

<svcExtension>

0-1

optional element containing extURI elements

<extURI>

1-n

element identifying object extensions during session

An example login command:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <login>
      <clID>912</clID>
      <pw>password</pw>
      <newPW>newpassword</newPW>
      <options>
        <version>1.0</version>
        <lang>en</lang>
      </options>
      <svcs>
        <objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
        <objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
        <svcExtension>
          <extURI>urn:ietf:params:xml:ns:secDNS-1.1</extURI>
        </svcExtension>
      </svcs>
    </login>
    <clTRID>login-12345</clTRID>
  </command>
</epp>

Example <login> response. A successful server <login> response has no <resData> element:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>login-12345</clTRID>
      <svTRID>internetnz-0123456</svTRID>
    </trID>
  </response>
</epp>

logout

This commnd is used to end the session with the EPP server.

The <logout> element is an empty element with no child elements:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <logout/>
  </command>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1500">
      <msg>Command completed successfully; ending session</msg>
    </result>
    <trID>
      <svTRID>internetnz-0</svTRID>
    </trID>
  </response>
</epp>

contact:check

This command is used to determine if a contact object exists already.

Element

Occurrence

Note

<contact:check>

1

Identifies namespace and contact schema location

<contact:id>

1-n

<contact:chkData>

1

Identifies namespace and contact schema location

<contact:cd>

1-n

Contact data element

<contact:id avail=”1”|”0”>

1

Identifies queried object with an attribute “avail”
  • 1=TRUE => still available, can be created

  • 0=FALSE => already exists, cannot be created

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <check>
      <contact:check xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>con12345</contact:id>
        <contact:id>con-54321</contact:id>
      </contact:check>
    </check>
    <clTRID>check-24535</clTRID>
  </command>
</epp>

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <contact:chkData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:cd>
          <contact:id avail="0">con12345</contact:id>
        </contact:cd>
        <contact:cd>
          <contact:id avail="1">con-54321</contact:id>
        </contact:cd>
      </contact:chkData>
    </resData>
    <trID>
      <clTRID>check-24535</clTRID>
      <svTRID>internetnz-54321</svTRID>
    </trID>
  </response>
</epp>

contact:create

This command is used to create a new contact object.

.nz Business Rules
  • No <contact:org> supported

  • Only 2 <contact:street> elements allowed

Request Element

Occurrence

Note

<contact:create>

1

identifies namespace and contact schema location

<contact:id>

1

<contact:postalInfo type=”int”>

1

<contact:name>

1

<contact:addr>

1

<contact:street>

1-2

<contact:city>

1

<contact:sp>

0-1

<contact:pc>

0-1

<contact:cc>

1

<contact:voice>

1

<contact:fax>

0-1

<contact:email>

1

<contact:authInfo>

1

<contact:disclose>

0-1

  • element MUST contain a “flag” attribute boolean value “0” or “1”

Note

Not specifying a <contact:disclose> element will assume no privacy for a new contact.

Response Element

Occurrence

Note

<contact:creData>

1

identifies namespace and contact schema location

<contact:id>

1

<contact:crDate>

1

date and time in UTC time when object was created

For more information please see: Disclosure of Data Elements and Attributes

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <create>
      <contact:create xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>abc1</contact:id>
          <contact:postalInfo type="int">
            <contact:name>John Doe</contact:name>
            <contact:addr>
              <contact:street>Sample Building</contact:street>
              <contact:street>Example street, 5-7</contact:street>
              <contact:city>Cityname</contact:city>
              <contact:pc>1234</contact:pc>
              <contact:cc>NZ</contact:cc>
           </contact:addr>
         </contact:postalInfo>
         <contact:voice>+64.44721600</contact:voice>
         <contact:fax>+64.49316979</contact:fax>
         <contact:email>support@example.co.nz</contact:email>
         <contact:authInfo>
           <contact:pw></contact:pw>
         </contact:authInfo>
       </contact:create>
    </create>
  <clTRID>ConCr-0001</clTRID>
  </command>
</epp>

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <contact:creData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>abc1</contact:id>
        <contact:crDate>2010-08-10T10:02:45+12:00</contact:crDate>
      </contact:creData>
    </resData>
    <trID>
      <clTRID>ConCr-0001</clTRID>
      <svTRID>internetnz-54321</svTRID>
    </trID>
  </response>
</epp>

Request with disclosure set: (privacy)

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <create>
      <contact:create xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>abc2</contact:id>
        <contact:postalInfo type="int">
          <contact:name>John Doe</contact:name>
          <contact:addr>
            <contact:street>Sample Building</contact:street>
            <contact:street>Example street, 5-7</contact:street>
            <contact:city>Cityname</contact:city>
            <contact:pc>1234</contact:pc>
            <contact:cc>NZ</contact:cc>
          </contact:addr>
        </contact:postalInfo>
        <contact:voice>+64.44721600</contact:voice>
        <contact:fax>+64.49316979</contact:fax>
        <contact:email>support@example.co.nz</contact:email>
        <contact:authInfo>
          <contact:pw/>
        </contact:authInfo>
        <contact:disclose flag="0">
          <contact:voice/>
        </contact:disclose>
      </contact:create>
    </create>
    <clTRID>ConCr-0005</clTRID>
  </command>
</epp>

Response:

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg lang="en">Command completed successfully</msg>
    </result>
    <resData>
      <contact:creData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>abc2</contact:id>
        <contact:crDate>2017-09-18T16:19:59+12:00</contact:crDate>
      </contact:creData>
    </resData>
    <trID>
      <clTRID>ConCr-0005</clTRID>
      <svTRID>7,1306339690</svTRID>
    </trID>
  </response>
</epp>

contact:info

This command is used to create a new contact object.

.nz Business Rules
  • Registrars can only query contact handles associated with their own registrar ID

Request Element

Occurrence

Note

<contact:info>

1

identifies namespace and contact schema location

<contact:id>

1

Response Element

Occurrence

Note

<contact:infData>

1

identifies namespace and contact schema location

<contact:id>

1

<contact:roid>

1

repository object identifier

<contact:status>

1

status of contact object - only OK is supported. No client statuses (e.g. clientDeleteProhibited) are not supported

<contact:postalInfo>

1

<contact:name>

1

<contact:addr>

1

<contact:street>

1-2

<contact:city>

1

<contact:sp>

0-1

<contact:pc>

0-1

<contact:cc>

1

<contact:voice>

1

<contact:fax>

1

<contact:email>

1

<contact:disclose>

0-1

<contact:clID>

1

ID of sponsoring client

<contact:crID>

1

ID of  client who created the contact -> same as clID since not contact transfer is possible

<contact:crDate>

1

Date and time contact object was created

<contact:upID>

0-1

ID of client who did the last update of the contact object

<contact:upDate>

0-1

Date and time of last contact object update

For more information please see: Disclosure of Data Elements and Attributes

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <info>
      <contact:info xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>con12345</contact:id>
      </contact:info>
    </info>
    <clTRID>info-4850</clTRID>
  </command>
</epp>

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <contact:infData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>con12345</contact:id>
        <contact:roid>12345-internetnz</contact:roid>
        <contact:status s="ok"/>
        <contact:postalInfo type="int">
          <contact:name>Smith Jane </contact:name>
          <contact:addr>
            <contact:street>Exchange Place</contact:street>
            <contact:street>Willeston Street, 5-7</contact:street>
            <contact:city>Wellington</contact:city>
            <contact:pc>1234</contact:pc>
            <contact:cc>NZ</contact:cc>
          </contact:addr>
        </contact:postalInfo>
        <contact:voice>>+64.44721600</contact:voice>
        <contact:fax>+64.49316979</contact:fax>
        <contact:email>registry@internetnz.net.nz</contact:email>
        <contact:clID>90</contact:clID>
        <contact:crID>90</contact:crID>
        <contact:crDate>2008-12-21T10:02:45.514Z</contact:crDate>
      </contact:infData>
    </resData>
    <trID>
      <clTRID>info-4850</clTRID>
      <svTRID>internetnz-123</svTRID>
    </trID>
  </response>
</epp>

Request with disclosure set: (privacy)

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <info>
      <contact:info xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>nzrs_auto_924047</contact:id>
      </contact:info>
    </info>
    <clTRID>info_nzrs_auto_924047</clTRID>
  </command>
</epp>

Response:

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg lang="en">Command completed successfully</msg>
    </result>
    <resData>
      <contact:infData xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>nzrs_auto_924047</contact:id>
        <contact:roid>8ffc3bc81f0e-CON</contact:roid>
        <contact:status lang="en" s="ok"/>
        <contact:postalInfo type="int">
          <contact:name>John Doe</contact:name>
          <contact:addr>
            <contact:street>Sample Building</contact:street>
            <contact:street>Example street, 5-7</contact:street>
            <contact:city>Cityname</contact:city>
            <contact:pc>1234</contact:pc>
            <contact:cc>NZ</contact:cc>
          </contact:addr>
        </contact:postalInfo>
        <contact:voice>+64.44721600</contact:voice>
        <contact:fax>+64.49316979</contact:fax>
        <contact:email>support@example.co.nz</contact:email>
        <contact:clID>965</contact:clID>
        <contact:crID>965</contact:crID>
        <contact:crDate>2017-09-18T16:06:00+12:00</contact:crDate>
        <contact:disclose flag="0">
          <contact:addr type="int"/>
          <contact:addr type="loc"/>
          <contact:voice/>
          <contact:fax/>
        </contact:disclose>
      </contact:infData>
    </resData>
    <trID>
      <clTRID>info_nzrs_auto_924047</clTRID>
      <svTRID>7,1306339681</svTRID>
    </trID>
  </response>
</epp>

contact:update

The command is used to update active contact objects

EPP rules

The EPP protocol provides for a granular update, without having to re-specify all unchanged fields with the exception that for a change in address, where the complete block needs to be specified:

Address details

  • For a change of address details in the <contact:addr> element, the complete block needs to be specified including the details not to be changed!

  • If mandatory elements are not specified - even if they are not to be changed - the update will fail.

  • If optional fields (<pc> and <sp>) are not specified they will be remove if they exist in the first place.

Remove Fax

To remove a Fax number, the only other optional information in a contact object not included in the <contact:addr> element, you need to provide an empty <contact:fax/> element

.nz Business Rules

  • No status updates are possible for contact objects. Therefor no add or remove option should be used with the <contact:update> command.

  • No AuthInfo information is stored for contact objects. Therefor these details cannot be updated with a <contact:update>.

  • Disclosure: When specifying the <contact:disclose flag=”0”> element, if <contact:email>, <contact:org> or <contact:name> is a sub-element, the error code 2308 will be returned as we do not offer privacy on e-mail addresses. Specifying <contact:disclosure flag=”1”> will remove the privacy option for the handle, regardless of what sub-elements are present.

Note

If a contact requires both a handle with and without privacy (e.g. one domain is a business and another is a personal site), then two separate handles will be required.

Updating Contact Objects linked to locked domain name

  • When updating a contact object that is linked to a locked domain name the update is still possible. However the locked domain name is in a “frozen” state in the SRS. That means the update will have not effect on the domain name for the period of the lock and querying the domain in the whois will still show the contact details at the time when the lock was set.

  • Once the lock is removed the domain name will be updated with the current details of the contact objects unless the Dispute Resolution outcome requires a transfer of the domain name to a new registrant. In which case the registry will update the domain with the new contact details. Registrars are contacted in case of a dispute and will be kept informed of any updates.

Element

Occurrence

Note

<contact:update>

1

identifies namespace and contact schema location

<contact:id>

1

<contact:chg>

0-1

This element contains the attribute values to be changed. The following elements are all optional but at least one child element has to be provided

<contact:postalInfo type=”int”>

0-1

<contact:name>

0-1

<contact:addr>

0-1

<contact:street>

0-2

<contact:city>

1

<contact:sp>

0-1

<contact:pc>

0-1

<contact:cc>

1

<contact:voice>

0-1

<contact:fax>

0-1

<contact:email>

0-1

<contact:disclose>

0-1

  • element MUST contain a “flag” attribute boolean value “0” or “1”

Note

Not specifying a <contact:disclose> element will mean current privacy settings for a contact remain unchanged when updating a contact.

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0 ">
  <command>
    <update>
      <contact:update xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>con12345</contact:id>
        <contact:chg>
          <contact:postalInfo type="int">
            <contact:addr>
              <contact:street>New Building</contact:street>
              <contact:street>New Street 123</contact:street>
              <contact:city>New City</contact:city>
              <contact:pc>1111</contact:pc>
              <contact:cc>AU</contact:cc>
            </contact:addr>
          </contact:postalInfo>
          <contact:voice>+61.12345678</contact:voice>
          <contact:fax></contact:fax>
          <contact:email>registry@internetnz.net.nz</contact:email>
        </contact:chg>
      </contact:update>
    </update>
    <clTRID>TRID-chg-125</clTRID>
  </command>
</epp>

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>TRID-chg-125</clTRID>
      <svTRID>internetnz-2346874</svTRID>
    </trID>
  </response>
</epp>

Request update add privacy

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <contact:update xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>abc3</contact:id>
        <contact:chg>
          <contact:postalInfo type="int">
            <contact:org/>
            <contact:addr>
              <contact:street>124 Example Dr.</contact:street>
              <contact:street>Suite 200</contact:street>
              <contact:city>Dulles</contact:city>
              <contact:sp>VA</contact:sp>
              <contact:pc>20166-6503</contact:pc>
              <contact:cc>US</contact:cc>
            </contact:addr>
          </contact:postalInfo>
          <contact:voice>+1.7034444444</contact:voice>
          <contact:fax/>
          <contact:disclose flag="0">
            <contact:voice/>
          </contact:disclose>
        </contact:chg>
      </contact:update>
    </update>
    <clTRID>ABC-3-update-privacy</clTRID>
  </command>
</epp>

Response

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg lang="en">Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>ABC-3-update-add-privacy</clTRID>
      <svTRID>7,1306351704</svTRID>
    </trID>
  </response>
</epp>

contact:delete

This command is to remove a contact object from the register.

.nz Business Rules

  • When a domain name is transferred away and the contact objects (handles) of the domain name are not linked to any other domain name the contact objects are automatically deleted

  • All contact objects are deleted automatically if older than 7 days AND not linked to a domain name
    • a Scheduled job runs daily and removes old, unlinked handles

    • an empty service message will be generated with the message id containing the contact id to identify the deleted handle. Messages can be retrieved via the Poll command

Element

Occurrence

Note

<contact:delete>

1

identifies namespace and contact schema location

<contact:id>

1

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <delete>
      <contact:delete xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
        <contact:id>con3846</contact:id>
      </contact:delete>
    </delete>
    <clTRID>delete-contact-01</clTRID>
  </command>
</epp>

Example response if a contact object is deleted successfully:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg lang="en">Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>delete-contact-01</clTRID>
      <svTRID>sep.4c60c51c.345b.003</svTRID>
    </trID>
  </response>
</epp>

Example response if contact object is still linked to a domain object or registrar contact:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="2305">
      <msg lang="en">Object association prohibits operation</msg>
    </result>
    <trID>
      <clTRID>delete-contact-01</clTRID>
      <svTRID>sep.4c60c51c.335b.002</svTRID>
    </trID>
  </response>
</epp>

domain:check

This command is to check whether a domain name is available for registration.

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <check>
      <domain:check xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.co.nz</domain:name>
        <domain:name>availabledomain.co.nz</domain:name>
      </domain:check>
    </check>
    <clTRID>check-domain-0123</clTRID>
  </command>
</epp>

Element

Occurrence

Note

<domain:check>

1

identifies namespace and domain schema location

<domain:name>

1-n

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:chkData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:cd>
          <domain:name avail="0">example.co.nz</domain:name>
        </domain:cd>
        <domain:cd>
          <domain:name avail="1">availabledomain.co.nz</domain:name>
        </domain:cd>
      </domain:chkData>
    </resData>
    <trID>
      <clTRID>check-domain-0123</clTRID>
      <svTRID>serverid-123</svTRID>
    </trID>
  </response>
</epp>

Element

Occurrence

Note

<domain:chkData>

1

identifies namespace and domain schema location

<domain:cd>

1-n

checked data record element with one child element

<domain:name avail=”1”>

1

contains domain name of queried object with an attribute ʻavailʼ: 1=true => is available 0=false => is not available

domain:create

This command is used to create a new domain name.

.nz Business Rules

  • A .nz domain must have exactly 1 registrant contact, 1 administrative contact and 1 technical contact. If a domain create command is sent with only a registrant contact - which is possible - default values will be used to populate the administrative and the technical contacts. The administrative contact will be the same as the registrant contact and the registrar’s “Default Technical Contact” will be used as the domain’s technical contact details. Due to this business rule a domain name has always all three contact types associated.

  • .nz domain name can have a registration period between 1 and 120 months. If no period element is provided a domain name will be created with the default value of 1 month.

  • .nz domain names can have between 0 and 10 name servers. .nz is not supporting host objects. Therefore name servers need to be provided in hostAttr elements. IPv4 and/or IPv6 addresses only need to be provided if the name servers are ‘self serving’ (host name = domain name). If they are not required they will be ignored and not stored in the system.

  • a UDAI is generated with a domain create. The UDAI is placed in the registrar’s message queue for retrieval.

Request:

<?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>mytestdomain.co.nz</domain:name>
        <domain:period unit="m">3</domain:period>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns.server.co.nz</domain:hostName>
          </domain:hostAttr>
          <domain:hostAttr>
            <domain:hostName>ns.mytestdomain.co.nz</domain:hostName>
            <domain:hostAddr>192.0.32.10</domain:hostAddr>
          </domain:hostAttr>
        </domain:ns>
        <domain:registrant>con3846</domain:registrant>
        <domain:contact type="admin">con3248</domain:contact>
        <domain:authInfo>
          <domain:pw></domain:pw>
        </domain:authInfo>
      </domain:create>
    </create>
    <clTRID>dom-create-12345</clTRID>
  </command>
</epp>

Request with DNSSEC Extension:

<?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>dnssec-epptest4.ac.nz</domain:name>
        <domain:period unit="m">10</domain:period>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns1.dnssec-epptest4.ac.nz</domain:hostName>
            <domain:hostAddr ip="v4">1.2.3.4</domain:hostAddr>
            <domain:hostAddr ip="v6">1080:0:0:0:8:800:200C:417A</domain:hostAddr>
          </domain:hostAttr>
        </domain:ns>
        <domain:registrant>dbconepp1</domain:registrant>
        <domain:contact type="admin">dbconepp1</domain:contact>
        <domain:contact type="tech">dbconepp1</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:dsData>
          <secDNS:keyTag>23403</secDNS:keyTag>
          <secDNS:alg>7</secDNS:alg>
          <secDNS:digestType>1</secDNS:digestType>
          <secDNS:digest>82E4E46622B646086C1051A6093DEB897BD1C022</secDNS:digest>
        </secDNS:dsData>
      </secDNS:create>
    </extension>
    <clTRID>createdomain-2014-06-24-dnssecepptest1.ac.nz-5</clTRID>
  </command>
</epp>

Element

Occurrence

Note

<domain:create>

1

<domain:name>

1

<domain:period unit=”y|m”>

0-1

default: 1 month

<domain:ns>

0-1

<domain:hostAttr>

1-10

<domain:hostName>

1

<domain:hostAddr ip=”v4|v6”>

0-2

<domain:registrant>

1

<domain:contact type=”admin|tech”>

0-2

default: admin-> registrant tech-> default technical contact

<domain:authInfo>

1

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:creData>
        <domain:name>mytestdomain.co.nz</domain:name>
        <domain:crDate>2008-01-01T12:07:06.978Z</domain:crDate>
      </domain:creData>
    </resData>
    <trID>
      <clTRID>dom-create-12345</clTRID>
      <svTRID>internetnz-5422896</svTRID>
    </trID>
  </response>
</epp>

Element

Occurrence

Note

<domain:creData>

1

identifies namespace and domain schema location

<domain:name>

1

<domain:crDate>

1

domain name creation date and time in UTC

<domain:exDate>

0-1

date and time of end of registration period (in SRS called BilledUntil date)

domain:info

This command is used to retrieve information associated with a domain name. The command can also be used to validate the UDAI by passing the UDAI in the authinfo element. If the UDAI is valid domain details are returned otherwise the request is rejected with a “2202” return code.

.nz Business Rules

Registrars can only query domain objects managed by them if they do not specify the UDAI but they can query any domain if they have a valid UDAI and it is included in the request.

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <info>
      <domain:info xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>mytestdomain.co.nz</domain:name>
      </domain:info>
    </info>
    <clTRID>info-domain-011</clTRID>
  </command>
</epp>

Request to validate a UDAI:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <info>
      <domain:info xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>dnssec-epptest4.ac.nz</domain:name>
        <domain:authInfo>
          <domain:pw>cFaHPPQc</domain:pw>
        </domain:authInfo>
      </domain:info>
    </info>
  </command>
</epp>

Element

Occurrence

Note

<domain:info>

1

identifies namespace and domain schema location

<domain:name>

1

<domain:authInfo>

0-1

Allows registrar to validate a UDAI if provided

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:infData>
        <domain:name>mytestdomain.co.nz</domain:name>
        <domain:roid>NUMBER</domain:roid>
        <domain:status s="ok"/>
        <domain:registrant>c972723</domain:registrant>
        <domain:contact type="admin">c112575</domain:contact>
        <domain:contact type="tech"></domain:contact>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns.</domain:hostName>
          </domain:hostAttr>
          <domain:hostAttr>
           <domain:hostName>ns.</domain:hostName>
          </domain:hostAttr>
        </domain:ns>
        <domain:clID></domain:clID>
        <domain:crID></domain:crID>
        <domain:crDate>/domain:crDate>
        <domain:upID></domain:upID>
        <domain:upDate></domain:upDate>
        <domain:exDate></domain:exDate>
      </domain:infData>
    </resData>
    <trID>
      <clTRID>info-domain-011</clTRID>
      <svTRID>internetnz-0</svTRID>
    </trID>
  </response>
</epp>

Response with DNSSEC data:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg lang="en">Command completed successfully</msg>
    </result>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>dnssec-epptest4.ac.nz</domain:name>
        <domain:roid>f6f69cc74faa-DOM</domain:roid>
        <domain:status lang="en" s="ok"/>
        <domain:registrant>dbconepp1</domain:registrant>
        <domain:contact type="admin">dbconepp1</domain:contact>
        <domain:contact type="tech">dbconepp1</domain:contact>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns1.dnssec-epptest4.ac.nz</domain:hostName>
            <domain:hostAddr ip="v4">1.2.3.4</domain:hostAddr>
            <domain:hostAddr ip="v6">1080:0:0:0:8:800:200C:417A</domain:hostAddr>
          </domain:hostAttr>
        </domain:ns>
        <domain:clID>922</domain:clID>
        <domain:crDate>2014-11-13T13:05:26+13:00</domain:crDate>
        <domain:upID>922</domain:upID>
        <domain:upDate>2014-11-14T09:10:09+13:00</domain:upDate>
        <domain:exDate>2015-09-13T13:05:26+12:00</domain:exDate>
      </domain:infData>
    </resData>
    <extension>
      <secDNS:infData xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
        <secDNS:dsData>
          <secDNS:keyTag>23403</secDNS:keyTag>
          <secDNS:alg>7</secDNS:alg>
          <secDNS:digestType>1</secDNS:digestType>
          <secDNS:digest>82E4E46622B646086C1051A6093DEB897BD1C022</secDNS:digest>
        </secDNS:dsData>
      </secDNS:infData>
    </extension>
    <trID>
      <svTRID>8,52606007[1]+1</svTRID>
    </trID>
  </response>
</epp>

Response when validating a UDAI and the UDAI is valid:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:infData>
        <domain:name>mytestdomain.co.nz</domain:name>
        <domain:roid>NUMBER</domain:roid>
        <domain:status s="ok"/>
       <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns.</domain:hostName>
          </domain:hostAttr>
          <domain:hostAttr>
           <domain:hostName>ns.</domain:hostName>
          </domain:hostAttr>
        </domain:ns>
        <domain:clID></domain:clID>
        <domain:crID></domain:crID>
        <domain:crDate>/domain:crDate>
        <domain:upID></domain:upID>
        <domain:upDate></domain:upDate>
        <domain:exDate></domain:exDate>
      </domain:infData>
    </resData>
    <trID>
      <clTRID>info-domain-011</clTRID>
      <svTRID>internetnz-0</svTRID>
    </trID>
  </response>
</epp>

Response when validating a UDAI and the UDAI is invalid:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="2202">
      <msg lang="en">Invalid authorization information</msg>
    </result>
    <trID>
      <svTRID>8,52606658[1]+2</svTRID>
    </trID>
  </response>
</epp>

Element

Occurrence

Note

<domain:infData>

1

identifies namespace and domain schema location

<domain:name>

1

<domain:roid>

1

Repository Objects Identifier, assigned to the domain object when it was created

<domain:status>

0-1

current status of domain name

<domain:registrant>

1

<domain:contact>

2

<domain:ns>

0-1

<domain:clID>

1

registrar ID of current registrar

<domain:crID>

0-1

registrar ID of regitrar who created domain name (will be always the same as current registrar as .nz policy doesn’t permit this information to be supplied

<domain:crDate>

0-1

date and time of creation of domain name

<domain:exDate>

0-1

date and time of auto-renewal of domain name

<domain:upID>

0-1

registrar ID of registrar who last updated the domain name

<domain:upDate>

0-1

data and time of last domain update

<domain:trDate>

0-1

date and time of last successful transfer of domain name

domain:update

Updating admin and tech contact

A .nz domain must have exactly one registrant contact, one administrative contact and one technical contact. If you send a <domain:create> command with only a registrant contact - which is possible - default values will be used to populate the administrative and the technical contacts. The administrative contact will be the same as the registrant contact and the registrar’s “Default Technical Contact” will be used as the domain’s technical contact details. Due to this business rule a domain name has always all three contact types associated.

In order to update the administrative and/or technical contact object identifier in a domain name it is necessary to send a update command with both a <domain:rem> and a <domain:add> element both containing a <domain:contact> child element with the same contact type.

It is also possible to ‘restore’ the default values for admin and tech contacts by sending a <domain:rem> element with the contact identifiers to be removed. Be aware that a remove will restore the default value. It will not actually remove a contact type from the domain as a .nz domain must have a registrant, and administrative and a technical contact.

Therefore sending a update command with an add element containing a contact child element will generate an error as a contact already exists and can only be updated by providing both a remove and an add element for the same contact type in one update transaction.

Getting a new UDAI (password)

If a new UDAI is requested by the registrant a simple <domain:update> command can be sent with only a <domain:chg> element and an <domain:authinfo> child element with an empty <domain:pw> element. This will trigger an update of the UDAI. The new UDAI is returned in a service message which can be retrieved by running a poll command.

As of release 6.0 in July 2014 EPP registrars can generate a UDAI even if the domain is in PendingRelease/PendingDelete status and it will not un-cancel the domain.

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>mytestdomain.co.nz</domain:name>
        <domain:add>
          <domain:ns>
            <domain:hostAttr>
              <domain:hostName>ns.whatever.co.nz<domain:hostName>
            </domain:hostAttr>
          </domain:ns>
          <domain:contact type="tech">54321</domain:contact>
        </domain:add>
        <domain:rem>
          <domain:contact type="tech">12345</domain:contact>
        </domain:rem>
        <authInfo></authInfo>
      </domain:update>
    </update>
    <clTRID>domain-upd-123</clTRID>
  </command>
</epp>

Example to get a new UDAI:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>katyandowen.co.nz</domain:name>
        <domain:chg>
          <domain:authInfo>
            <domain:pw></domain:pw>
          </domain:authInfo>
        </domain:chg>
      </domain:update>
    </update>
  </command>
</epp>

Note

The UDAI will be returned in the message poll queue.

Example With DNSSEC Extension - adding DNSSEC data:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>dnssec-epptest4.ac.nz</domain:name>
        <domain:add>
          <domain:ns>
            <domain:hostAttr>
              <domain:hostName>ns2.dnssec-epptest4.ac.nz</domain:hostName>
              <domain:hostAddr ip="v4">1.2.3.4</domain:hostAddr>
              <domain:hostAddr ip="v6">1080:0:0:0:8:800:200C:417A</domain:hostAddr>
            </domain:hostAttr>
          </domain:ns>
        </domain:add>
      </domain:update>
    </update>
    <extension>
      <secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
        <secDNS:add>
          <secDNS:dsData>
            <secDNS:keyTag>1</secDNS:keyTag>
            <secDNS:alg>7</secDNS:alg>
            <secDNS:digestType>2</secDNS:digestType>
            <secDNS:digest>85DB78AF90EB23B5B346528482ABA500A445DDB40F5BE2F04911EE7CF7CF2335</secDNS:digest>
          </secDNS:dsData>
        </secDNS:add>
      </secDNS:update>
    </extension>
    <clTRID>updatedomain-2014-06-24-dnssecepptest1.ac.nz-9</clTRID>
  </command>
</epp>

Example With DNSSEC Extension - removing DNSSEC data:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>dnssec-epptest4.ac.nz</domain:name>
        <domain:rem>
          <domain:ns>
            <domain:hostAttr>
              <domain:hostName>ns2.dnssec-epptest4.ac.nz</domain:hostName>
              <domain:hostAddr ip="v4">1.2.3.4</domain:hostAddr>
              <domain:hostAddr ip="v6">1080:0:0:0:8:800:200C:417A</domain:hostAddr>
            </domain:hostAttr>
          </domain:ns>
        </domain:rem>
      </domain:update>
    </update>
    <extension>
      <secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
        <secDNS:rem>
          <secDNS:dsData>
            <secDNS:keyTag>1</secDNS:keyTag>
            <secDNS:alg>7</secDNS:alg>
            <secDNS:digestType>2</secDNS:digestType>
            <secDNS:digest>85DB78AF90EB23B5B346528482ABA500A445DDB40F5BE2F04911EE7CF7CF2335</secDNS:digest>
          </secDNS:dsData>
        </secDNS:rem>
      </secDNS:update>
    </extension>
    <clTRID>updatedomain-2014-06-24-dnssecepptest1.ac.nz-10</clTRID>
  </command>
</epp>

Example set the delegation status on hold.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>sample-domain-test1.org.nz</domain:name>
        <domain:add>
          <domain:status s="clientHold"/>
        </domain:add>
      </domain:update>
    </update>
    <clTRID>updatedomain-sample-domain-test1.org.nz-1</clTRID>
  </command>
</epp>

Example removing the delegation ‘on hold’ status.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>sample-domain-test1.org.nz</domain:name>
        <domain:rem>
          <domain:status s="clientHold"/>
        </domain:rem>
      </domain:update>
    </update>
    <clTRID>updatedomain-sample-domain-test1.org.nz-2</clTRID>
  </command>
</epp>

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>domain-upd-1</clTRID>
      <svTRID>internetnz-5423056</svTRID>
    </trID>
  </response>
</epp>

Example adding the name server.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.co.nz</domain:name>
        <domain:add>
          <domain:ns>
            <domain:hostAttr>
              <domain:hostName>ns2.exampledomain.ac.nz</domain:hostName>
            </domain:hostAttr>
          </domain:ns>
        </domain:add>
      </domain:update>
    </update>
    <clTRID>updatedomain-2014-06-24-example</clTRID>
  </command>
</epp>

Example removing the name server.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.co.nz</domain:name>
        <domain:rem>
          <domain:ns>
            <domain:hostAttr>
              <domain:hostName>ns2.exampledomain.ac.nz</domain:hostName>
            </domain:hostAttr>
          </domain:ns>
        </domain:rem>
      </domain:update>
    </update>
    <clTRID>remdomain-2021-05-24-example</clTRID>
  </command>
</epp>

Example changing the name server.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.co.nz</domain:name>
        <domain:add>
          <domain:ns>
            <domain:hostAttr>
              <domain:hostName>ns2.exampledomain.ac.nz</domain:hostName>
            </domain:hostAttr>
          </domain:ns>
        </domain:add>
      </domain:update>
    </update>
    <update>
      <domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.co.nz</domain:name>
        <domain:rem>
          <domain:ns>
            <domain:hostAttr>
              <domain:hostName>ns.server.co.nz</domain:hostName>
            </domain:hostAttr>
          </domain:ns>
        </domain:rem>
      </domain:update>
    </update>
    <clTRID>remdomain-2021-05-31-example</clTRID>
  </command>
</epp>

Element

Occurrence

Note

<domain:update>

1

identifies namespace and domain schema location

<domain:name>

1

<domain:add>

0-1

element that contains attribute values to be added to domain

<domain:rem>

0-1

element that contains attribute values to be removed from domain

<domain:chg>

0-1

element that contains attribute values to be changed for domain - at least one of the add,rem,chg elements must be provided

 - add and rem can contain the following child elements:

<domain:ns>

0-1

<domain:hostAttr>

1-10

<domain:hostName>

1

   <domain:hostAddr ip=”v4 | v6”

0-2

<domain:contact>

0-2

<domain:status>

0-1

only clientHold can be set and removed

- chg contains the following child elements:

<domain:registrant>

0-1

<domain:authInfo>

0-1

 has a child element

<domain:pw>

0-1

domain:delete

The command is used to cancel a domain name.

.nz Business Rules

Auto-Renew

.nz domain names auto renew at the end of their registration period. In order to remove an existing .nz domain name from the register either a delete has to be sent or the term value of the domain name has to be set to “0” prior to the Billed Until (Expire) date. The latter option is not supported by EPP and therefore registrars using EPP need to send a delete command for domain object to be cancelled.

Registration and Renewal Grace Periods

.nz domain names have both a 5 day Registration Grace Period and a 5 day Renewal Grace Period. Sending a delete command during the first 5 days after a registration or (auto-)renewal of a domain will undo the previous transaction and remove any billing transactions caused by the create or renew transaction from the system. I.e. sending a delete within 5 days after registration will remove the domain name immediately from the register and the domain name is available for registration again. Sending a delete within the Renewal Grace Period will undo the renewal, void the billing transaction and put the domain name in status PendingDelete (in SRS status is call PendingRelease)

PendingRelease aka PendingDelete

Once a successful delete command has been sent the status of the domain name will be changed from “OK” (in SRS: “Active”) to “PendingDelete” (in SRS: “PendingRelease”) - except when deleted during Registration Grace Period (see above).

Once a domain name status has changed “PendingDelete” the domain will keep this status for 90 days after the delete command was sent. A domain name with status “PendingDelete” will no longer be included in the .nz Zonefile pushed to the DNS - it will no longer be delegated. The domain will not be renewed when/if it’s Billed Until date is coming up and therefore no billing transactions will be generated for the domain name.

After 90 days the domain name it will be removed from the .nz register and will be available for registration to all .nz registrars again.

Un-cancel aka Restore - Redemption Grace Period

As mentioned above a cancelled .nz domain name will be kept in the register for another 90 days (except when canceled during Registration Grace Period). During that time the registrar will be able to fully re-instate the domain name for the registrant, so that it becomes active again. The domain name can also be transferred to a new registrar and be reinstated by the gaining registrar.

The billing process will be unaffected by the cancellation and any re-instatement. Although the domain name will not have been billed for the period that it was PendingDelete, once it has been re-instated the billing process will generate “catch-up” transactions, from the original cancellation date. E.g. if you cancel a domain name on the last day of the registration period and re-activate it after 89 days the domain status is changed to “OK”, the domain will be included in the .nz Zonefile again (if delegated), the registration period is updated to be in the future and 3 billing transactions will be generated (for each month the domain has not been billed while being PendingDelete).

To re-instate a domain name a simple update command needs to be sent. Please check the Update Domain command documentation.

Request:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <delete>
      <domain:delete xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.co.nz</domain:name>
      </domain:delete>
    </delete>
    <clTRID>del-testdomain.co.nz</clTRID>
  </command>
</epp>

Element

Occurrence

Note

<domain:delete>

1

identifies namespace and domain schema location

<domain:name>

1

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>del-testdomain.co.nz</clTRID>
      <svTRID>internetnz-517532</svTRID>
    </trID>
  </response>
</epp>

domain:transfer

This command allows to transfer management of a domain name between registrars

.nz Business Rules

When and How to transfer

Transfer for an existing domain name can be performed by registrars at any time except during the Registration Grace Period (first 5 days after domain create) or when a domain name has been locked by the registry.

To transfer the management of a domain name the UDAI needs to be provided in the transfer request which is provided by the registrant to the gaining registrar. The registrant of a domain name can request the UDAI from his current registrar who is required to supply the information. Please check <domain:update> to find out how to generate a new UDAI.

Contact Objects

A transfer of contact objects is not possible in the SRS therefore a contact transfer command is not supported. To ensure contact information of a transferred domain name is accessible by the gaining registrar the server generates 3 contact objects (registrant, administrative contact and technical contact) in the gaining registrar’s account with the current contact details of the domain name at the time of a domain name transfer. The gaining registrar is able to retrieve the contact object identifiers via an <domain:info> command after the transfer.

The contact objects generated by the server will have the format “nzrs_auto_XXXXXX” and they will be ‘read only’ objects. To update contact information of a domain name associated with server-generated contact objects the registrar needs to update the domain name with client-generated contact objects.

When a domain name transfers to a new registrar, the privacy flag of any contact details that are not explicitly specified in the <domain> transaction will be honoured. This is when we create the nzrs_auto_xxxxx handles if the receiving registrar is EPP and contacts if the receiving registrar is SRS.

Registrars will not be able to update server-generated contact objects.

Also registrars will not be able to generate contact objects starting with the combination “nzrs_auto” This contact namespace is reserved for server-generated contact objects.

The Releasing Registrar

The releasing registrar is not able to delay the transfer, nor refuse to supply the UDAI so the transfer cannot occur. A service message will be generated after a successful transfer to notify the releasing registrar of the transfer away. The releasing registrar will be able to retrieve this message by running the poll command.

op=”request” only

The op attribute value of a .nz EPP transfer command can only be “request”. We do not support the value “query” as a domain transfer request is processed immediately by the system - provided the UDAI is correct and the domain name is neither locked nor has it been registered for less than 5 days.

A transfer request cannot be pending in the SRS but only succeed or fail therefore a query option is not required. If a transfer command with option “query” is sent to the server an error will be returned.

PendingRelease Domains

A domain name can be transferred when it is PendingRelease (in .nz EPP status is PendingDelete). We recommend the gaining registrar to check the domain name after a transfer and if necessary send an update command to re-instate the domain name (see Update Domain Command)

Request:

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
  <transfer op="request">
    <domain:transfer xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
      <domain:name>example.co.nz</domain:name>
      <domain:authInfo>
        <domain:pw>ABCD1234</domains:pw>
      </domain:authInfo>
    </domain:transfer>
  </transfer>
  <clTRID>trf-001</clTRID>
</command>
</epp>

Element

Occurrence

Note

<domain:transfer>

1

identifies namespace and domain schema location

<domain:name>

1

<domain:period>

0-1

<domain:authInfo>

1

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg lang="en">Command completed successfully</msg>
    </result>
    <resData>
      <domain:trnData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.co.nz</domain:name>
        <domain:trStatus>serverApproved</domain:trStatus>
        <domain:reID>922</domain:reID>
        <domain:reDate>2010-09-06T17:47:45+12:00</domain:reDate>
        <domain:acID>922</domain:acID>
        <domain:acDate>2010-09-06T17:47:45+12:00</domain:acDate>
      </domain:trnData>
    </resData>
    <trID>
      <clTRID>trf-001</clTRID>
      <svTRID>4,2992802</svTRID>
    </trID>
  </response>
</epp>

Element

Occurrence

Note

<domain:trnData>

1

identifies namespace and domain schema location

<domain:name>

1

<domain:trStatus>

1

state of most recent transfer request

<domain:reID>

1

client that requested the transfer

<domain:reData>

1

transfer request date and time

<domain:acID>

1

id of client that took action

<domain:acDate>

1

date and time of completed response

domain:renew

This command is used to renew a domain name

.nz Business Rules

  • a .nz domain doesnʼt expire but auto-renews automatically on a monthly basis unless
    • the domain has been renewed for several months by a renewal command or

    • the domain name has been cancelled or

    • the domain name has been locked by the registry

  • Domain names can be renewed up to 120 months (depending on the current expiration date). A domain name can have a expiration date up to 120 months into the future.

  • There is a 5 day Renewal Grace Period

Request:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <renew>
      <domain:renew xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>internetnz1606.co.nz</domain:name>
        <domain:curExpDate>2016-07-01</domain:curExpDate>
        <domain:period unit="m">1</domain:period>
      </domain:renew>
    </renew>
    <clTRID>renew_domain-internetnz1606.co.nz</clTRID>
  </command>
</epp>

Element

Occurrence

Note

<domain:renew>

1

identifies namespace and domain schema location

<domain:name>

1

<domain:curExpDate>

1

current expiration date (in SRS: BilledUntil date) -> .nz domain names auto renew

<domain:period unit=”y | m”>

Response:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:renData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.com</domain:name>
        <domain:exDate>2005-04-03T22:00:00.0Z</domain:exDate>
      </domain:renData>
    </resData>
    <trID>
      <clTRID>ABC-12345</clTRID>
      <svTRID>54322-XYZ</svTRID>
    </trID>
  </response>
</epp>

Element

Occurrence

Note

<domain:renData>

1

identifies namespace and domain schema location

<domain:name>

1

<domain:exDate>

0-1

the new expiration date (in SRS: Billed Until date) -> .nz domain names auto renew

poll

This command is to check and retrieve queued service messages

Messages are generated for server-generated data relevant for the registrar and also if a domain name in a registrar’s account is updated by someone else but the registrar.

Triggers for message generation:

Message Type

Originator

Description

Domain name auto-renew 1

Registry ‘RenewDomains’ Scheduled Job

Domain is at the end of it’s BilledUntil date and it is renewed for 1 month by the renew domains scheduled job that usually runs at 23:30 each day.

Domain name auto-renew 2

Registry auto-renew

  • Domain in PendingDelete and the BilledUntil date is in the past.

  • The domain is un-cancelled by the registrar by performing a domain update.

  • The domain is auto-renewed

Domain name Release

Registry ‘ReleaseDomains’ Scheduled Job

Domain name released after 90 days PendingDelete (PendingRelease) period by the release domains scheduled job that usually runs at 00:00:30 each day.

Transfer In

Registry

Domain is transferred in to the registrar. This could occur on a bulk transfer to the registrar performed by the registry or a transfer as a result of a DNCL DRS reques

Transfer Away

Registry or By another Registrar

  • A domain name transfer to another registrar (regular domain name transfer).

  • A domain name transfer away from a registrar according to a DNCL DRS decision (Domain Resolution Service) - manual update by the registry.

Domain Create

Registrar

A domain create performed by the registrar. Providing a new UDAI for the domain name

New UDAI

Registrar

A new UDAI request performed by the registrar. Providing a new UDAI for the domain name

Domain Lock

Registry

A domain name is locked according to a DNCL DRS decision (Domain Resolution Service) - manual update by the registry

Domain Un-Lock

Registry

A domain name is un-locked according to a DNCL DRS decision (Domain Resolution Service) - manual update by the registry

Request:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <poll op="req"/>
  </command>
</epp>

Poll examples:

Queue is empty:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1300">
      <msg lang="en">Command completed successfully; no messages</msg>
    </result>
    <trID>
      <svTRID>4,4153680</svTRID>
    </trID>
  </response>
</epp>

Domain name auto-renew 1:

<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="4" id="0050RenewDomains-2014-09-19 23:30:00- testdomain.nz">
      <qDate>2014-09-19T23:39:00+12:00</qDate>
      <msg lang="en">Domain Renewal</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.nz</domain:name>
        <domain:roid>71bcda599c5d-DOM</domain:roid>
        <domain:status lang="en" s="ok"/>
        <domain:clID/>
        <domain:exDate>2014-10-19T22:17:09+13:00</domain:exDate>
      </domain:infData>
    </resData>
    <trID>
      <svTRID>8,51012020</svTRID>
    </trID>
  </response>
</epp>

Domain name auto-renew 2:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="1" id="0050AutoRenew(testdomain.net.nz)(2014-09-21T13:50:03/2014-09-23+12:20:50.234230041%2b1200)">
      <qDate>2014-09-23T12:20:50+12:00</qDate>
      <msg lang="en">Domain Update</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.net.nz</domain:name>
        <domain:roid>5c5727ecb2b0-DOM</domain:roid>
        <domain:status lang="en" s="pendingDelete"/>
        <domain:clID/>
      </domain:infData>
    </resData>
    <trID>
      <svTRID>8,51066918</svTRID>
    </trID>
  </response>
</epp>

Domain name Release:

<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="3" id="0050ReleaseDomains-2014-09-20 00:30:00- testdomain.co.nz">
      <qDate>2014-09-20T02:08:48+12:00</qDate>
      <msg lang="en">Domain Update</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.co.nz</domain:name>
        <domain:roid>3fbfa806daeb-DOM</domain:roid>
        <domain:status lang="en" s="ok"/>
        <domain:clID/>
      </domain:infData>
    </resData>
    <trID>
      <svTRID>8,51012051</svTRID>
    </trID>
  </response>
</epp>

Transfer In:

<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="14" id="0001internetnz-testdomain.co.nz">
      <qDate>2014-09-19T21:25:44+12:00</qDate>
      <msg lang="en">Domain Update</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.co.nz</domain:name>
        <domain:roid>071ff3bd9790-DOM</domain:roid>
        <domain:status lang="en" s="ok"/>
        <domain:registrant>nzrs_auto_555273</domain:registrant>
        <domain:contact type="admin">nzrs_auto_661468</domain:contact>
        <domain:contact type="tech">nzrs_auto_661468</domain:contact>
        <domain:clID>123456789</domain:clID>
      </domain:infData>
    </resData>
    <trID>
      <svTRID>8,51011249</svTRID>
    </trID>
  </response>
</epp>

Transfer Away:

<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="7" id="0090internetnz testdomain.co.nz 1">
      <qDate>2014-09-19T21:33:16+12:00</qDate>
      <msg lang="en">Domain Transfer</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.co.nz</domain:name>
        <domain:roid>f4b9ac7744ea-DOM</domain:roid>
        <domain:clID/>
        <domain:trDate>2014-09-19T21:33:16+12:00</domain:trDate>
      </domain:infData>
    </resData>
    <trID>
      <svTRID>8,51011918</svTRID>
    </trID>
  </response>
</epp>

Domain Create:

<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="1" id="createdomain-testdomain.nz-1">
      <qDate>2014-09-19T17:15:45+12:00</qDate>
      <msg lang="en">Domain Create</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.nz</domain:name>
        <domain:roid>e53f9dbe2d97-DOM</domain:roid>
        <domain:status lang="en" s="ok"/>
        <domain:registrant>contact1234</domain:registrant>
        <domain:contact type="admin">contact1234</domain:contact>
        <domain:contact type="tech">contact1234</domain:contact>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns1.testdomain.co.nz</domain:hostName>
          </domain:hostAttr>
        </domain:ns>
        <domain:clID>12345</domain:clID>
        <domain:crDate>2014-09-19T17:15:45+12:00</domain:crDate>
        <domain:exDate>2015-07-19T17:15:45+12:00</domain:exDate>
        <domain:authInfo>
          <domain:pw>WV7QfpTRs1Q2</domain:pw>
        </domain:authInfo>
      </domain:infData>
    </resData>
  </response>
</epp>

New UDAI:

<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="1" id="2014-09-23-NewUDAI-Request-For-testdomain.nz_run1">
      <qDate>2014-09-23T10:31:51+12:00</qDate>
      <msg lang="en">New UDAI</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.nz</domain:name>
        <domain:roid>e53f9dbe2d97-DOM</domain:roid>
        <domain:status lang="en" s="ok"/>
        <domain:clID/>
        <domain:authInfo>
          <domain:pw>tdZRgxzu</domain:pw>
        </domain:authInfo>
      </domain:infData>
    </resData>
    <trID>
      <svTRID>8,51065419</svTRID>
    </trID>
  </response>
</epp>

Domain Lock:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="1" id="0001-1_10731">
      <qDate>2014-09-23T11:59:37+12:00</qDate>
      <msg lang="en">Domain Update</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.nz</domain:name>
        <domain:roid>e53f9dbe2d97-DOM</domain:roid>
        <domain:status lang="en" s="serverDeleteProhibited"/>
        <domain:status lang="en" s="serverRenewProhibited"/>
        <domain:status lang="en" s="serverTransferProhibited"/><domain:status lang="en" s="serverUpdateProhibited"/>
        <domain:registrant>123456</domain:registrant>
        <domain:contact type="admin">123456</domain:contact>
        <domain:contact type="tech">123456</domain:contact>
        <domain:clID/></domain:infData>
    </resData>
    <trID>
      <svTRID>8,51066674</svTRID>
    </trID>
  </response>
</epp>

Domain Un-Lock:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1301">
      <msg lang="en">Command completed successfully; ack to dequeue</msg>
    </result>
    <msgQ count="1" id="0001-1_10732">
      <qDate>2014-09-23T12:10:47+12:00</qDate>
      <msg lang="en">Domain Update</msg>
    </msgQ>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>testdomain.nz</domain:name>
        <domain:roid>e53f9dbe2d97-DOM</domain:roid>
        <domain:status lang="en" s="ok"/>
        <domain:registrant>123456</domain:registrant>
        <domain:contact type="admin">123456</domain:contact>
        <domain:contact type="tech">123456</domain:contact>
        <domain:clID/>
      </domain:infData>
    </resData>
    <trID>
      <svTRID>8,51066846</svTRID>
    </trID>
  </response>
</epp>

poll ack

To acknowledge and remove a message from the poll queue

To remove messages from the message queue and to get the next message in line they need to be acknowledged.

Triggers for message generation:

Request:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <poll msgID="0123This is some action id" op="ack"/>
    <clTRID>ack msg 0123This is some action id</clTRID>
  </command>
</epp>

Response:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code="1000">
      <msg lang="en">Command completed successfully</msg>
    </result>
    <msgQ count="10" id="0123This is some action id"/>
    <trID>
      <clTRID>ack msg 0123This is some action id</clTRID>
      <svTRID>8,5068415</svTRID>
    </trID>
  </response>
</epp>