Testing environment for InternetNZ .nz domain names. This is not a real registry - just for fun and testing only.
This documentation describes a test-only EPP interface for .nz domains, using standard RFC EPP objects (domain and contact). It is not a real registry and must not be used for live registrants.
epp.munsey.co.nz:700
TCP connection using EPP over port 700 (XML over TCP).
Extensible Provisioning Protocol (EPP) 1.0
urn:ietf:params:xml:ns:epp-1.0
Standard RFC objects:
domain-1.0, contact-1.0.
Host objects are not implemented in this test server.
Important notice
Behaviour may differ from the live InternetNZ registry. This environment is for registrar integration testing only and can be reset at any time. Data and object IDs may be wiped without notice.
Download Tools & SDKs
Connect to the EPP Test Server using official SDKs and example scripts. These downloads include ready-to-use templates for sending EPP commands, handling XML responses, managing TCP connections, and testing registrar integrations. PHP, NodeJS, Python, and raw socket examples are available.
When you connect to epp.munsey.co.nz:700, the server sends an initial <greeting>. You can request the same greeting again at any time by sending a <hello/> command.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<hello/>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<greeting>
<svID>EPP Test Server</svID>
<svDate>2025-01-01T12:00:00.0Z</svDate>
<svcMenu>
<version>1.0</version>
<lang>en</lang>
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
</svcMenu>
</greeting>
</epp>
Establishes an authenticated registrar session. The client ID and password must match credentials configured on the EPP test server.
<?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"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<command>
<login>
<clID>REG-TEST</clID>
<pw>your-password</pw>
<options>
<version>1.0</version>
<lang>en</lang>
</options>
<services>
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
</services>
</login>
<clTRID>LOGIN-20250101-0001</clTRID>
</command>
</epp>
<?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-20250101-0001</clTRID>
<svTRID>SV-20250101-ABC123</svTRID>
</trID>
</response>
</epp>
Ends the current EPP session. The server will usually close the TCP connection after a successful logout.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<logout/>
<clTRID>LOGOUT-20250101-0001</clTRID>
</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>
<clTRID>LOGOUT-20250101-0001</clTRID>
<svTRID>SV-20250101-DEF456</svTRID>
</trID>
</response>
</epp>
Checks whether one or more contact IDs are already in use. If avail="1", the ID can be used in a future contact:create.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<command>
<check>
<contact:check>
<contact:id>con1234</contact:id>
<contact:id>con5678</contact:id>
</contact:check>
</check>
<clTRID>CONTACT-CHECK-20250101-0001</clTRID>
</command>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<resData>
<contact:chkData>
<contact:cd>
<contact:id avail="1">con1234</contact:id>
</contact:cd>
<contact:cd>
<contact:id avail="0">con5678</contact:id>
<contact:reason>In use</contact:reason>
</contact:cd>
</contact:chkData>
</resData>
<trID>
<clTRID>CONTACT-CHECK-20250101-0001</clTRID>
<svTRID>SV-20250101-CON001</svTRID>
</trID>
</response>
</epp>
Creates a new contact object. The contact ID is supplied by the registrar and must be unique.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<command>
<create>
<contact:create>
<contact:id>con1234</contact:id>
<contact:postalInfo type="int">
<contact:name>John Doe</contact:name>
<contact:addr>
<contact:street>123 Sample Street</contact:street>
<contact:city>Wellington</contact:city>
<contact:pc>6011</contact:pc>
<contact:cc>NZ</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>+64.412345678</contact:voice>
<contact:email>john@example.nz</contact:email>
<contact:authInfo>
<contact:pw>ContactAuth123</contact:pw>
</contact:authInfo>
</contact:create>
</create>
<clTRID>CONTACT-CREATE-20250101-0001</clTRID>
</command>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<resData>
<contact:creData>
<contact:id>con1234</contact:id>
<contact:crDate>2025-01-01T12:00:00.0Z</contact:crDate>
</contact:creData>
</resData>
<trID>
<clTRID>CONTACT-CREATE-20250101-0001</clTRID>
<svTRID>SV-20250101-CON002</svTRID>
</trID>
</response>
</epp>
Retrieves information for a contact object, including postal address and status.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<command>
<info>
<contact:info>
<contact:id>con1234</contact:id>
</contact:info>
</info>
<clTRID>CONTACT-INFO-20250101-0001</clTRID>
</command>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<resData>
<contact:infData>
<contact:id>con1234</contact:id>
<contact:roid>CONTACT-EXAMPLE-1</contact:roid>
<contact:status s="ok"/>
<contact:postalInfo type="int">
<contact:name>John Doe</contact:name>
<contact:addr>
<contact:street>123 Sample Street</contact:street>
<contact:city>Wellington</contact:city>
<contact:pc>6011</contact:pc>
<contact:cc>NZ</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>+64.412345678</contact:voice>
<contact:email>john@example.nz</contact:email>
</contact:infData>
</resData>
<trID>
<clTRID>CONTACT-INFO-20250101-0001</clTRID>
<svTRID>SV-20250101-CON003</svTRID>
</trID>
</response>
</epp>
Updates fields on an existing contact object. Only the attributes in <contact:chg> are modified.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<command>
<update>
<contact:update>
<contact:id>con1234</contact:id>
<contact:chg>
<contact:postalInfo type="int">
<contact:name>John Example</contact:name>
<contact:addr>
<contact:street>456 New Street</contact:street>
<contact:city>Auckland</contact:city>
<contact:pc>1010</contact:pc>
<contact:cc>NZ</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>+64.212345678</contact:voice>
<contact:email>john.new@example.nz</contact:email>
</contact:chg>
</contact:update>
</update>
<clTRID>CONTACT-UPDATE-20250101-0001</clTRID>
</command>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<trID>
<clTRID>CONTACT-UPDATE-20250101-0001</clTRID>
<svTRID>SV-20250101-CON004</svTRID>
</trID>
</response>
</epp>
Deletes a contact object. Standard EPP rules apply: a contact cannot be deleted if it is still linked to any domains.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<command>
<delete>
<contact:delete>
<contact:id>con1234</contact:id>
</contact:delete>
</delete>
<clTRID>CONTACT-DELETE-20250101-0001</clTRID>
</command>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<trID>
<clTRID>CONTACT-DELETE-20250101-0001</clTRID>
<svTRID>SV-20250101-CON005</svTRID>
</trID>
</response>
</epp>
Checks whether one or more .nz domain names are available for registration or already in use.
<?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">
<command>
<check>
<domain:check>
<domain:name>example.nz</domain:name>
<domain:name>example.co.nz</domain:name>
</domain:check>
</check>
<clTRID>DOMAIN-CHECK-20250101-0001</clTRID>
</command>
</epp>
<?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:chkData>
<domain:cd>
<domain:name avail="1">example.nz</domain:name>
</domain:cd>
<domain:cd>
<domain:name avail="0">example.co.nz</domain:name>
<domain:reason>In use</domain:reason>
</domain:cd>
</domain:chkData>
</resData>
<trID>
<clTRID>DOMAIN-CHECK-20250101-0001</clTRID>
<svTRID>SV-20250101-DOM001</svTRID>
</trID>
</response>
</epp>
Creates a new .nz domain name. Contacts used as registrant/admin/tech must already exist.
<?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"
xmlns:nz="urn:ietf:params:xml:ns:nz-domain-1.0">
<command>
<create>
<domain:create>
<domain:name>example.nz</domain:name>
<domain:period unit="y">1</domain:period>
<domain:ns>
<domain:hostAttr>
<domain:hostName>ns1.example.net</domain:hostName>
<domain:hostAddr ip="v4">192.0.2.1</domain:hostAddr>
</domain:hostAttr>
<domain:hostAttr>
<domain:hostName>ns2.example.net</domain:hostName>
<domain:hostAddr ip="v4">192.0.2.2</domain:hostAddr>
</domain:hostAttr>
</domain:ns>
<domain:registrant>con1234</domain:registrant>
<domain:contact type="admin">con1234</domain:contact>
<domain:contact type="tech">con1234</domain:contact>
<domain:authInfo>
<domain:pw>DomainAuth123</domain:pw>
</domain:authInfo>
</domain:create>
</create>
<extension>
<nz:create>
<nz:registrantAgreement>true</nz:registrantAgreement>
</nz:create>
</extension>
<clTRID>DOMAIN-CREATE-20250101-0001</clTRID>
</command>
</epp>
<?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>example.nz</domain:name>
<domain:crDate>2025-01-01T12:00:00.0Z</domain:crDate>
<domain:exDate>2026-01-01T12:00:00.0Z</domain:exDate>
</domain:creData>
</resData>
<trID>
<clTRID>DOMAIN-CREATE-20250101-0001</clTRID>
<svTRID>SV-20250101-DOM002</svTRID>
</trID>
</response>
</epp>
Retrieves full information about a domain name, including contacts, nameservers, and dates.
<?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">
<command>
<info>
<domain:info>
<domain:name>example.nz</domain:name>
</domain:info>
</info>
<clTRID>DOMAIN-INFO-20250101-0001</clTRID>
</command>
</epp>
<?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:infData>
<domain:name>example.nz</domain:name>
<domain:roid>EXAMPLE-NZ</domain:roid>
<domain:status s="ok"/>
<domain:registrant>con1234</domain:registrant>
<domain:contact type="admin">con1234</domain:contact>
<domain:contact type="tech">con1234</domain:contact>
<domain:ns>
<domain:hostObj>ns1.example.net</domain:hostObj>
<domain:hostObj>ns2.example.net</domain:hostObj>
</domain:ns>
<domain:clID>REG-TEST</domain:clID>
<domain:crDate>2025-01-01T12:00:00.0Z</domain:crDate>
<domain:exDate>2026-01-01T12:00:00.0Z</domain:exDate>
</domain:infData>
</resData>
<trID>
<clTRID>DOMAIN-INFO-20250101-0001</clTRID>
<svTRID>SV-20250101-DOM003</svTRID>
</trID>
</response>
</epp>
Updates selected attributes of a domain, such as contacts and nameservers.
<?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"
xmlns:nz="urn:ietf:params:xml:ns:nz-domain-1.0">
<command>
<update>
<domain:update>
<domain:name>example.nz</domain:name>
<domain:chg>
<domain:registrant>con5678</domain:registrant>
</domain:chg>
<domain:add>
<domain:contact type="admin">con5678</domain:contact>
<domain:ns>
<domain:hostAttr>
<domain:hostName>ns3.example.net</domain:hostName>
<domain:hostAddr ip="v4">192.0.2.3</domain:hostAddr>
</domain:hostAttr>
</domain:ns>
</domain:add>
<domain:rem>
<domain:contact type="tech">con1234</domain:contact>
<domain:ns>
<domain:hostAttr>
<domain:hostName>ns1.example.net</domain:hostName>
<domain:hostAddr ip="v4">192.0.2.1</domain:hostAddr>
</domain:hostAttr>
</domain:ns>
</domain:rem>
</domain:update>
</update>
<extension>
<nz:update>
<nz:registrantAgreement>true</nz:registrantAgreement>
</nz:update>
</extension>
<clTRID>DOMAIN-UPDATE-20250101-0001</clTRID>
</command>
</epp>
<?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>
<trID>
<clTRID>DOMAIN-UPDATE-20250101-0001</clTRID>
<svTRID>SV-20250101-DOM004</svTRID>
</trID>
</response>
</epp>
Deletes a domain name. The exact lifecycle behaviour is implementation-specific in this test server (e.g. immediate delete vs. pending delete).
<?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">
<command>
<delete>
<domain:delete>
<domain:name>example.nz</domain:name>
</domain:delete>
</delete>
<clTRID>DOMAIN-DELETE-20250101-0001</clTRID>
</command>
</epp>
<?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>
<trID>
<clTRID>DOMAIN-DELETE-20250101-0001</clTRID>
<svTRID>SV-20250101-DOM005</svTRID>
</trID>
</response>
</epp>
Extends the registration period of an existing domain name. The curExpDate must match the current expiry date.
<?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">
<command>
<renew>
<domain:renew>
<domain:name>example.nz</domain:name>
<domain:curExpDate>2026-01-01</domain:curExpDate>
<domain:period unit="y">1</domain:period>
</domain:renew>
</renew>
<clTRID>DOMAIN-RENEW-20250101-0001</clTRID>
</command>
</epp>
<?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:renData>
<domain:name>example.nz</domain:name>
<domain:exDate>2027-01-01T12:00:00.0Z</domain:exDate>
</domain:renData>
</resData>
<trID>
<clTRID>DOMAIN-RENEW-20250101-0001</clTRID>
<svTRID>SV-20250101-DOM006</svTRID>
</trID>
</response>
</epp>
Transfers a domain between registrars using an authInfo password (similar to UDAI-style transfer codes).
<?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">
<command>
<transfer op="request">
<domain:transfer>
<domain:name>example.nz</domain:name>
<domain:authInfo>
<domain:pw>ABCD1234</domain:pw>
</domain:authInfo>
</domain:transfer>
</transfer>
<clTRID>DOMAIN-TRANSFER-20250101-0001</clTRID>
</command>
</epp>
<?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="1001">
<msg>Command completed successfully; action pending</msg>
</result>
<resData>
<domain:trnData>
<domain:name>example.nz</domain:name>
<domain:reID>REG-NEW</domain:reID>
<domain:reDate>2025-01-01T12:00:00.0Z</domain:reDate>
<domain:exDate>2026-01-01T12:00:00.0Z</domain:exDate>
</domain:trnData>
</resData>
<trID>
<clTRID>DOMAIN-TRANSFER-20250101-0001</clTRID>
<svTRID>SV-20250101-DOM007</svTRID>
</trID>
</response>
</epp>
Retrieves the next message from the poll queue, such as transfer results or server notices.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="req"/>
<clTRID>POLL-20250101-0001</clTRID>
</command>
</epp>
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
>
<response>
<result code="1300">
<msg>Command completed successfully; message exists</msg>
</result>
<msgQ count="3" id="12345">
<qDate>2025-01-01T12:05:00.0Z</qDate>
<msg>Domain example.nz created</msg>
</msgQ>
<trID>
<clTRID>POLL-20250101-0001</clTRID>
<svTRID>SV-20250101-POLL001</svTRID>
</trID>
</response>
</epp>
Acknowledges and removes a specific message from the poll queue, using the message ID from the previous <msgQ>.
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<poll op="ack" msgID="12345"/>
<clTRID>POLLACK-20250101-0001</clTRID>
</command>
</epp>
<?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>
<msgQ count="2"></msgQ>
<trID>
<clTRID>POLLACK-20250101-0001</clTRID>
<svTRID>SV-20250101-POLL002</svTRID>
</trID>
</response>
</epp>
The test server returns standard EPP result codes. Below are some example responses that may occur during integration.
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="2202">
<msg>Invalid authorization information</msg>
</result>
<trID>
<clTRID>DOMAIN-TRANSFER-20250101-0002</clTRID>
<svTRID>SV-20250101-ERR001</svTRID>
</trID>
</response>
</epp>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="2302">
<msg>Object exists: example.nz</msg>
</result>
<trID>
<clTRID>DOMAIN-CREATE-20250101-0002</clTRID>
<svTRID>SV-20250101-ERR002</svTRID>
</trID>
</response>
</epp>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="2303">
<msg>Object does not exist: con9999</msg>
</result>
<trID>
<clTRID>CONTACT-INFO-20250101-0002</clTRID>
<svTRID>SV-20250101-ERR003</svTRID>
</trID>
</response>
</epp>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="2201">
<msg>Authorization error: not sponsoring registrar</msg>
</result>
<trID>
<clTRID>DOMAIN-UPDATE-20250101-0002</clTRID>
<svTRID>SV-20250101-ERR004</svTRID>
</trID>
</response>
</epp>
Result codes follow RFC 5730 conventions: 1xxx success, 2xxx client/server errors and security errors, and 23xx object state or existence errors. Exact wording and codes are determined by this test implementation.