Contact objects and commands
An EPP contact object is defined in IETF defined in STD69 by RFC5733 and is one of the three primary objects utilised in EPP.
If a registry on the platform supports the collection of at least one type of contact data the contact schema will be in the EPP greeting:
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
Registries following ICANN’s minimal data set will not include this schema after full implementation.
Generally we recommend that registrars utilise UTF-8 addresses with their contacts, which are referenced as “loc” or localised data and do not utilise the “int” variants; however as contact data is duplicated at the same time as a transfer it is important to manage and handle both types of addresses within any automated code.
Managing contact objects:
- Contact object data
- Contact:Check command
- Contact:Create command
- Contact:Info command
- Contact:Update command
- Contact:Delete command
- Contact Garbage collection process
Contact Object Data
A contact object does not contain within it any aspect of a role; it is the linkage mechanism to a domain that defines a contact as being used as the Registrant, Admin, Technical or Billing contact.
Field | Description | Visible to non-sponsoring registrar without Transfer Authorisation code when not publicly disclosed by policy or disclosure fields? |
---|---|---|
contact:id | The unique contact EPP ID which will be used to link the contact object to domains. | Yes |
contact:roid | The unique repository object identifier, over time, for the contact object. | Yes |
contact:status | The EPP lock statuses and linkage status for the contact object. | Yes |
contact:postalinfo | Contains a range of fields: 1. contact:name 2. contact:org 3. contact:addr which has street, city, state/province, postcode, country code fields. | No |
contact:voice | The telephone number for the contact in ISO format. | No |
contact:fax | A fax number for the contact in ISO format. | No |
contact:email | The email address for the contact. | No |
contact:crID | The EPP login ID that created the contact. | Yes |
contact:clID | The EPP login ID that currently sponsors the contact. | Yes |
contact:upID | The EPP login ID that last updated the contact. | Yes |
contact:crDate | The creation date of the contact object. | Yes |
contact:upDate | The last updated date of the contact object. | Yes |
contact:trDate | The last transferred date of the contact object. | Yes |
contact:authinfo | The Transfer Authorisation code for the contact object | No |
contact:disclose | Contains the status to disclose or not for each of: 1. contact:name 2. contact:org 3. contact:addr 4. contact:voice 5. contact:fax 6. contact:email | Yes |
Contact:CHECK
A contact:id must be unique across any one registry – this means that before creating a contact object a registrar must check if the handle you propose to utilise is available or has already been used.
A contact check command is as follows:
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<command>
<check>
<contact:check xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
<contact:id>EXAMPLECC-1234</contact:id>
</contact:check>
</check>
<clTRID>EXAMPLE-ccheck-12345</clTRID>
</command>
</epp>
An example response to contact check command where the contact ID is already taken:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<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="false">EXAMPLECC-1234</contact:id>
</contact:cd>
</contact:chkData>
</resData>
<trID>
<clTRID>EXAMPLE-ccheck-12345</clTRID>
<svTRID>1860958954083849301</svTRID>
</trID>
</response>
</epp>
Contact:CREATE
A recommended example create command would contain UTF-8 localised address fields as follows:
<?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"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<command>
<create>
<contact:create xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
<contact:id>EXAMPLECONTACT1</contact:id>
<contact:postalInfo type="loc">
<contact:name>CEO</contact:name>
<contact:org>Nominet UK</contact:org>
<contact:addr>
<contact:street>Minerva House</contact:street>
<contact:street>Edmund Halley Road</contact:street>
<contact:street>Oxford Science Park</contact:street>
<contact:city>Oxford</contact:city>
<contact:sp>England</contact:sp>
<contact:pc>OX4 4DQ</contact:pc>
<contact:cc>GB</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>+44.3302369470</contact:voice>
<contact:email>[email protected]</contact:email>
<contact:authInfo>
<contact:pw></contact:pw>
</contact:authInfo>
</contact:create>
</create>
<clTRID>EXAMPLE-CC-12345</clTRID>
</command>
</epp>
It is however possible to use “int” meaning internationalised data in 7-bit US ASCII or “loc” meaning localised data in UTF-8 or both. An example of both is as follows:
<?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"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<command>
<create>
<contact:create xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
<contact:id>EXAMPLECONTACT1</contact:id>
<contact:postalInfo type="loc">
<contact:name>CEO</contact:name>
<contact:org>Nominet UK</contact:org>
<contact:addr>
<contact:street>Minerva House</contact:street>
<contact:street>Edmund Halley Road</contact:street>
<contact:street>Oxford Science Park</contact:street>
<contact:city>Oxford</contact:city>
<contact:sp>England</contact:sp>
<contact:pc>OX4 4DQ</contact:pc>
<contact:cc>GB</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:postalInfo type="int">
<contact:name>CEO</contact:name>
<contact:org>Nominet UK</contact:org>
<contact:addr>
<contact:street>Minerva House</contact:street>
<contact:street>Edmund Halley Road</contact:street>
<contact:street>Oxford Science Park</contact:street>
<contact:city>Oxford</contact:city>
<contact:sp>England</contact:sp>
<contact:pc>OX4 4DQ</contact:pc>
<contact:cc>GB</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:voice>+44.3302369470</contact:voice>
<contact:email>[email protected]</contact:email>
<contact:authInfo>
<contact:pw></contact:pw>
</contact:authInfo>
</contact:create>
</create>
<clTRID>EXAMPLE-CC-12345</clTRID>
</command>
</epp>
An example contact create response is as follows:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<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>EXAMPLECONTACT1</contact:id>
<contact:crDate>2025-07-07T14:46:27.035Z</contact:crDate>
</contact:creData>
</resData>
<trID>
<clTRID>EXAMPLE-CC-12345</clTRID>
<svTRID>1860961040393574853</svTRID>
</trID>
</response>
</epp>
Contact:INFO
An example contact:info 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>EXAMPLECONTACT1</contact:id>
</contact:info>
</info>
<clTRID>CONTACT-INFO-12345</clTRID>
</command>
</epp>
An example contact:info response for a sponsoring registrar:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<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>EXAMPLECONTACT1</contact:id>
<contact:roid>C41338931-UK</contact:roid>
<contact:status s="ok"/>
<contact:status s="linked"/>
<contact:postalInfo type="int">
<contact:name>John Doe</contact:name>
<contact:org>Example Inc.</contact:org>
<contact:addr>
<contact:street>123 Example Dr.</contact:street>
<contact:street>Suite 100</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 x="1234">+1.7035555555</contact:voice>
<contact:fax>+1.7035555556</contact:fax>
<contact:email>[email protected]</contact:email>
<contact:clID>GANDI</contact:clID>
<contact:crID>GANDI</contact:crID>
<contact:crDate>2025-05-20T22:31:38.387Z</contact:crDate>
</contact:infData>
</resData>
<trID>
<clTRID>CONTACT-INFO-12345</clTRID>
<svTRID>1843688848815560130</svTRID>
</trID>
</response>
</epp>
An example contact:info response for a non-sponsoring registrar, where data is redacted it appears either as ‘REDACTED’ or for the country code as ‘XR’. If data is disclosed publicly on the contact object configuration the non-sponsoring registrar will also see it:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<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>EXAMPLECONTACT1</contact:id>
<contact:roid>C41338843-UK</contact:roid>
<contact:status s="ok"/>
<contact:postalInfo type="int">
<contact:name>REDACTED</contact:name>
<contact:addr>
<contact:city>REDACTED</contact:city>
<contact:cc>XR</contact:cc>
</contact:addr>
</contact:postalInfo>
<contact:email>REDACTED</contact:email>
<contact:clID>REGISTRAR1</contact:clID>
<contact:crID>REGISTRAR1</contact:crID>
<contact:crDate>2025-05-20T09:49:15.326Z</contact:crDate>
</contact:infData>
</resData>
<trID>
<clTRID>CONTACT-INFO-12345</clTRID>
<svTRID>1843689237921142555</svTRID>
</trID>
</response>
</epp>
It should be noted, our systems will not allow the creation of a contact with the country code ‘XR’, it is utilised exclusively to indicate a redacted country variable that is compliant with EPP.
ContacT:TRANSFER
None of our registries require a losing registrar to supply a contact object transfer authorisation code and we do not recommend the independent transfer of contact objects so we do not provide any example here.
When a domain transfers, the existing contact objects are cloned to the new registrars accreditation and the old registrars contacts are left either for future usage by the old registrar or for the contact garbage collection process to remove them.
CONTACT:UPDATE
An example contact update command setting an update prohibited lock:
<?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"
xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<command>
<update>
<contact:update xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"
xsi:schemaLocation="urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd">
<contact:id>EXAMPLE-CONTACT</contact:id>
<contact:add>
<contact:status s="clientUpdateProhibited"/>
</contact:add>
</contact:update>
</update>
<clTRID>CONTACT-UPDATE-12345</clTRID>
</command>
</epp>
An example response:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<trID>
<clTRID>CONTACT-UPDATE-12345</clTRID>
<svTRID>1860962102659783800</svTRID>
</trID>
</response>
</epp>
CONTACT:DELETE
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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>EXAMPLECONTACT1</contact:id>
</contact:delete>
</delete>
<clTRID>EXAMPLE-DEL-1234</clTRID>
</command>
</epp>
An example 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>
<trID>
<clTRID>EXAMPLE-DEL-1234</clTRID>
<svTRID>1843689237921142555</svTRID>
</trID>
</response>
</epp>
CONTACT Garbage collection
Our systems regularly purge contact objects across our operational registries that meet both of the following criteria:
- The contact object has zero domain name associations; and
- The contact object has been an unassociated contact for one (1) calendar month or longer.
We will not remove any contact objects associated with one or more domain names.
Minerva House, Edmund Halley Road, Oxford Science Park, OX4 4DQ, United Kingdom