API Reference

Contents

  1. SUMMARY
    1. EPP (Extensible Provisioning Protocol)
    2. Conventions used in this document
    3. Syntax
  2. VERSION
    1. Objects
    2. Extensions
  3. TESTING
  4. CONNECTING
    1. Examples
  5. INITIAL COMMANDS
    1. Greeting
    2. Log In
    3. Log Out
  6. CONTACT COMMANDS
    1. Creating Domain Contacts
    2. Listing / Searching Contacts
    3. Deleting a Domain Contact
    4. Updating Domain Contacts
  7. DOMAIN NAME COMMANDS
    1. Domain Lookup
    2. Domain Lookup (other)
    3. Register Domain Names
    4. Register Domain Names (Premium)
    5. Transfer Domain Names
    6. Renew Domain Names
    7. Domain Control Panel Pre-Authentication
    8. Listing Domain Names
    9. Inspecting Domain Names
    10. Modify Domain Name Services
    11. Modify Domain Control Panel Password
    12. Add Domain Privacy
    13. Modify Domain Registrant Security Details
  8. VIRTUAL NAMESERVER COMMANDS
    1. List Virtual Nameservers
  9. DNS COMMANDS
    1. Inspecting DNS
    2. Update DNS
  10. NULL COMMANDS
    1. Create Nothing
    2. Update Nothing
    3. Delete Nothing
    4. List Items
    5. Inspect Nothing
    6. Renew Nothing
  11. EXAMPLE SCRIPTS
    1. Perl
    2. PHP
    3. Ruby
  12. SCHEMAS
    1. Filenames
  13. NOTES
    1. Object Identifiers
    2. Batch operations
    3. Client Transaction IDs (<clTRID>)
    4. Identifying the server
    5. Error handling
    6. EPP Error codes
    7. WHAPI Error codes
    8. Character Sets and Encodings
    9. EPP Object Status Codes
    10. EPP Concepts
    11. Loading Multiple Versions of One Object or Extension
  14. Changelog
    1. 2016-05-18
    2. 2014-03-21 ext-domain-2.4
    3. 2014-03-06 ext-domain-2.3
    4. 2014-02-25 ext-domain-2.2
    5. 2014-01-27 ext-domain-2.1
    6. 2012-10-30 ext-contact-2.0 ext-domain-2.0 ext-host-2.0 ext-null-2.0 null-2.0 ext-whapi-2.0 whapi-common-2.0
    7. 2012-07-30 ext-domain-1.5
    8. 2012-05-09 ext-domain-1.4
    9. 2011-12-20 ext-domain-1.3
    10. 2011-11-16
    11. 2011-11-08
    12. 2011-10-26 ext-dns-1.0
    13. 2011-09-20
    14. 2011-07-08 ext-domain-1.2
    15. 2011-06-16
    16. 2011-06-06
    17. 2011-06-01 ext-domain-1.1
    18. 2011-05-25
    19. 2011-03-31
    20. 2010-11-30 database-1.1 ext-antivirus-1.0 ext-billing-1.0 ext-contact-1.0 ext-database-1.0 ext-domain-1.0 ext-mailbox-1.1 ext-host-1.0 ext-null-1.0 ext-package-1.0 ext-security-1.0 ext-server-1.0 ext-support-1.0 ext-wbp-1.0 ext-whapi-1.0 mailbox-1.2 null-1.1 package-1.4 server-1.1 support-1.3 whapi-common-1.0
    21. 2010-11-26 billing-1.2
    22. 2010-11-08
    23. 2010-09-02 server-1.0
    24. 2010-08-11 database-1.0 mailbox-1.0
    25. 2010-08-11 whapi-1.1 null-1.0 package-1.3 contact-1.1 domain-1.2 support-1.2
    26. 2010-03-26 package-1.2
    27. 2009-10-30
    28. 2009-10-08
    29. 2009-10-07
    30. 2009-09-29
    31. 2009-09-25 package-1.1
    32. 2009-09-23 support-1.1
    33. 2009-09-22 domain-1.1
    34. 2009-09-09
    35. 2009-07-21
    36. 2009-07-13 whapi-1.0 package-1.0 contact-1.0 domain-1.0

SUMMARY [^Back to contents]

The Heart Internet API is an EPP service designed to help resellers automate setting up services with us directly from your own software (eg. a bespoke shopping cart system). Principally you'll find domain provision commands and web hosting package setup facilities, but we have also included some commonly-requested other services such as Microsoft Exchange mailboxes.

This document aims to provide you with the information necessary to use our API to access your reseller features with us. You will need to have your API password (you can find this in "Instant Activation" in the RCC) as well as some knowledge of the configuration you already have set up with us (eg. package type IDs).

We're giving simple examples in Perl, Ruby and PHP5 to get you up and running, but there's no reason why you can't use different XML modules or abstract some of the code into subroutines to avoid repetition.

Information regarding full reseller features which do not apply to domain resellers is given in another document: https://api.heartinternet.uk/api2f.html

If you are a full reseller, you may restrict yourself to just the features in this document by using your domain-only details as described below.

This only documents the latest version of the specification (see SCHEMAS); for an indication of what has changed since older versions, please see CHANGELOG.

EPP (Extensible Provisioning Protocol) [^Back to contents]

This is a system commonly offered by domain registries to provide a standardised way of ordering domain names. There are many EPP modules available for various programming languages to automate using such services, but they often require some level of understanding of how EPP works. If you'd like to see the core EPP documentation, you should do a web search for the terms:

RFC 5730
RFC 5731
RFC 5732
RFC 5733
RFC 5734

Earlier versions of the API did not use EPP. If you need to consult the old documentation, it's still available at https://api.heartinternet.uk/api.html

Most EPP <create> elements require a <*:authInfo> to allow the creator to allocate a chosen password (normally as <*:pw>). None of our functions require a secondary password, and few of them even allow it, so instead you should include a corresponding <*:null>.

Conventions used in this document [^Back to contents]

Contact

Refers to a set of contact details suitable for registering as the owner of a domain name, although it can also be used for non-owner details.

Syntax [^Back to contents]

To provide guidance in how to form the request, as well as the examples we've included a brief description of the syntax of that specific command. Conventions used for those tables are:

<something>

An element called "something"

(something)

Some kind of text content:

(empty)

The empty string

(number)

A number, usually a positive integer

(text)

Any other kind of text content

"something"

literally the text quoted.

something

An attribute

?

Zero or one of the preceding item

*

Zero or more of the preceding item

+

One or more of the preceding item

For any responses which are completely standard (ie, just a response code and a possible error message), no syntax will be given.

VERSION [^Back to contents]

This document describes the following API component versions only:

Objects [^Back to contents]

null-2.0

Extensions [^Back to contents]

ext-contact-2.0
ext-domain-2.5
ext-host-2.0
ext-null-2.0
ext-whapi-2.0

TESTING [^Back to contents]

We offer two interfaces: one for testing and one live. On the test system, you use the same authentication details, but none of your existing sites and domains will exist, and nothing real will happen in response to your commands. Although data is stored in the test system in response to your commands (eg. packages added), it will be wiped occasionally (no more frequently than once a day).

The test system will pretend that you have 20 credits of each applicable type. This will be reset whenever the rest of the data is wiped.

CONNECTING [^Back to contents]

For the live API you should use "api.heartinternet.uk:700", but in the examples below we'll assume the test setting, which is "api.heartinternet.uk:1701".

Each request frame (sent or received) consists of the length as a network-order (big-endian) 32-bit number followed by the actual request. This is the standard EPP approach, and simplifies request handling at both ends.

When you initially connect, you will be provided with an EPP greeting frame. This tells you which service you are connected to and which services (objects/extensions) are available. Please see "Greeting" below for more information.

Examples [^Back to contents]

Perl (no EPP module)

[Show]
  use strict;
  use warnings;
  use IO::Socket::SSL;
  
  sub get_response {
    my ($server) = @_;
    my $size_packed;
    read($server, $size_packed, 4);
    my $size = unpack("N", $size_packed);
    my $response;
    read($server, $response, $size-4);
    return $response;
  }
  
  my $server = IO::Socket::SSL->new("api.heartinternet.uk:1701") or die $!;
  $server->verify_hostname( 'api.heartinternet.uk','http' )
    or die "hostname verification failed";
  
  get_response($server);
  
  print $server pack("N", length($output)+4).$output;
  {
    my $response = get_response($server);
    if($response) {
      use XML::Simple;
      my $result=XMLin($response);
      # Do something.
    } else {
      # Error handling.
    }
  }
  
  close($server); # When you're finished.

Perl (no EPP module, no IO::Socket::SSL)

[Show]
  use strict;
  use warnings;
  use IPC::Open2;
  
  sub get_response {
    my ($server) = @_;
    my $size_packed;
    read($server, $size_packed, 4);
    my $size = unpack("N", $size_packed);
    my $response;
    read($server, $response, $size-4);
    return $response;
  }
  
  open2(my $read, my $write,
    "openssl", "s_client",
    "-connect", "api.heartinternet.uk:1701",
    "-quiet",
    "-verify", 10
  ) or die $!;
  
  get_response($server);
  
  print $write pack("N", length($output)+4).$output;
  {
    my $response = get_response($server);
    if($response) {
      use XML::Simple;
      my $result=XMLin($response);
      # Do something.
    } else {
      # Error handling.
    }
  }
  
  close($write); close($read); # When you're finished.

PHP (no EPP module)

[Show]
  function get_response($res) {
    $size_packed = fread($res, 4);
    if(strlen($size_packed) == 0) return;
    $size = unpack("N", $size_packed);
    // This works around PHP's fread() capping at 8192 bytes
    $out = "";
    $last = "";
    for($s = $size[1]-4; $s>0; $s-=strlen($last)) {
      $last = fread($this->res, $s);
      $out.=$last
    }
    return $out;
  }
  
  $res = fsockopen("tls://api.heartinternet.uk", 1701);
  
  get_response($res);
  
  fwrite($res, pack("N", strlen($output)+4) . $output);
  
  $content = get_response($res);
  
  if($content) {
    $result=array();
    $parser = xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, $content, $result);
    // Do something with $result
  } else {
    // Error handling
  }
  
  fclose($res); // When you're finished.

PHP (Net::EPP::Client)

[Show]
  require('Net/EPP/Client.php');
  
  $client = new Net_EPP_Client;
  $client->connect("api.heartinternet.uk", 1701, 1, true);
  
  $client->sendFrame($output);
  
  $content = $client->getFrame();
  
  if($content) {
    $result=array();
    $parser = xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, $content, $result);
    // Do something with $result
  } else {
    // Error handling
  }
  
  $client->disconnect(); // When you're finished.

Ruby

Please note that Ruby 1.8.x has no stable built-in SSL support, so it has to invoke the "openssl" program instead.

[Show]
  def get_response(io)
    size = io.read(4).unpack("N")[0]
    return io.read(size - 4)
  end
  
  io = IO.popen("openssl s_client -connect api.heartinternet.uk:1701 -quiet -verify 10", "r+")
  get_response(io)
  
  io.write( [ output.length + 4 ].pack("N") + output)
  io.flush
  response = get_response(io)
  if(response) then
    require 'rexml/document'
    result = REXML::Document.new(response)
    # Do something.
  else
    # Error handling.
  end
  
  io.close # When you're finished

INITIAL COMMANDS [^Back to contents]

Greeting [^Back to contents]

This just does a very simple test to make sure you're getting a response. You just send the empty command "hello". In response, you get an EPP greeting, which identifies all objects which are valid (objURI), and all extensions which are available (extURI). You will need to specify which you intend to use when you log in.

What to send

Syntax

KeyAttributesContentsNotes
<hello>(empty)

Examples

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

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->emptyTag('hello');
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'hello');
    $l->appendChild($c);
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  current = current.add_element('epp', {})
    current.add_element('hello', {})
  current = current.parent 
  doc.write(output)

Response

Examples

XML
<?xml version="1.0" encoding="utf-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <greeting>
    <svID>Heart Internet Test API Server</svID>
    <svDate>2010-08-17T12:34:53Z</svDate>
    <svcMenu>
      <version>1.0</version>
      <lang>en-GB</lang>
      <objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
      <objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
      <objURI>http://www.heartinternet.co.uk/whapi/database-2.0</objURI>
      <objURI>http://www.heartinternet.co.uk/whapi/mailbox-2.0</objURI>
      <objURI>http://www.heartinternet.co.uk/whapi/null-2.0</objURI>
      <objURI>http://www.heartinternet.co.uk/whapi/package-2.2</objURI>
      <objURI>http://www.heartinternet.co.uk/whapi/server-2.2</objURI>
      <objURI>http://www.heartinternet.co.uk/whapi/support-2.0</objURI>
      <svcExtension>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-antivirus-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-billing-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-database-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-dns-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-domain-2.5</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-contact-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-mailbox-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-host-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-null-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-package-2.2</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-security-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-server-2.2</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-support-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-wbp-2.0</extURI>
        <extURI>http://www.heartinternet.co.uk/whapi/ext-whapi-2.0</extURI>
      </svcExtension>
    </svcMenu>
    <dcp>
      <access>
        <all />
      </access>
      <statement>
        <purpose>
          <admin />
          <prov />
        </purpose>
        <recipient>
          <ours />
        </recipient>
        <retention>
          <indefinite />
        </retention>
      </statement>
    </dcp>
  </greeting>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'greeting' => {
        'svcMenu' => {
            'svcExtension' => {
                  'extURI' => [
                     'http://www.heartinternet.co.uk/whapi/ext-antivirus-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-billing-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-database-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-dns-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
                     'http://www.heartinternet.co.uk/whapi/ext-contact-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-mailbox-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-host-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-null-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-package-2.2',
                     'http://www.heartinternet.co.uk/whapi/ext-security-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-server-2.2',
                     'http://www.heartinternet.co.uk/whapi/ext-support-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-wbp-2.0',
                     'http://www.heartinternet.co.uk/whapi/ext-whapi-2.0'
                   ]
                },
            'lang' => 'en-GB',
            'version' => '1.0',
            'objURI' => [
               'urn:ietf:params:xml:ns:contact-1.0',
               'urn:ietf:params:xml:ns:domain-1.0',
               'http://www.heartinternet.co.uk/whapi/database-2.0',
               'http://www.heartinternet.co.uk/whapi/mailbox-2.0',
               'http://www.heartinternet.co.uk/whapi/null-2.0',
               'http://www.heartinternet.co.uk/whapi/package-2.2',
               'http://www.heartinternet.co.uk/whapi/server-2.2',
               'http://www.heartinternet.co.uk/whapi/support-2.0'
                ]
             },
        'svDate' => '2010-08-17T12:34:53Z',
        'svID' => 'Heart Internet Test API Server',
        'dcp' => {
           'statement' => {
              'recipient' => {
                    'ours' => {}
                  },
              'purpose' => {
                  'admin' => {},
                  'prov' => {}
                   },
              'retention' => {
                    'indefinite' => {}
                  }
               },
           'access' => {
              'all' => {}
               }
            }
         }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => greeting
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => svID
              [type] => complete
              [level] => 3
              [value] => Heart Internet Test API Server
          )
  
      [3] => Array
          (
              [tag] => svDate
              [type] => complete
              [level] => 3
              [value] => 2010-08-17T12:34:53Z
          )
  
      [4] => Array
          (
              [tag] => svcMenu
              [type] => open
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => version
              [type] => complete
              [level] => 4
              [value] => 1.0
          )
  
      [6] => Array
          (
              [tag] => lang
              [type] => complete
              [level] => 4
              [value] => en-GB
          )
  
      [7] => Array
          (
              [tag] => objURI
              [type] => complete
              [level] => 4
              [value] => urn:ietf:params:xml:ns:contact-1.0
          )
  
      [8] => Array
          (
              [tag] => objURI
              [type] => complete
              [level] => 4
              [value] => urn:ietf:params:xml:ns:domain-1.0
          )
  
      [9] => Array
          (
              [tag] => objURI
              [type] => complete
              [level] => 4
              [value] => http://www.heartinternet.co.uk/whapi/database-2.0
          )
  
      [10] => Array
          (
              [tag] => objURI
              [type] => complete
              [level] => 4
              [value] => http://www.heartinternet.co.uk/whapi/mailbox-2.0
          )
  
      [11] => Array
          (
              [tag] => objURI
              [type] => complete
              [level] => 4
              [value] => http://www.heartinternet.co.uk/whapi/null-2.0
          )
  
      [12] => Array
          (
              [tag] => objURI
              [type] => complete
              [level] => 4
              [value] => http://www.heartinternet.co.uk/whapi/package-2.2
          )
  
      [13] => Array
          (
              [tag] => objURI
              [type] => complete
              [level] => 4
              [value] => http://www.heartinternet.co.uk/whapi/server-2.2
          )
  
      [14] => Array
          (
              [tag] => objURI
              [type] => complete
              [level] => 4
              [value] => http://www.heartinternet.co.uk/whapi/support-2.0
          )
  
      [15] => Array
          (
              [tag] => svcExtension
              [type] => open
              [level] => 4
          )
  
      [16] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-antivirus-2.0
          )
  
      [17] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-billing-2.0
          )
  
      [18] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-database-2.0
          )
  
      [19] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-dns-2.0
          )
  
      [20] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
          )
  
      [21] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-contact-2.0
          )
  
      [22] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-mailbox-2.0
          )
  
      [23] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-host-2.0
          )
  
      [24] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-null-2.0
          )
  
      [25] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-package-2.2
          )
  
      [26] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-security-2.0
          )
  
      [27] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-server-2.2
          )
  
      [28] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-support-2.0
          )
  
      [29] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-wbp-2.0
          )
  
      [30] => Array
          (
              [tag] => extURI
              [type] => complete
              [level] => 5
              [value] => http://www.heartinternet.co.uk/whapi/ext-whapi-2.0
          )
  
      [31] => Array
          (
              [tag] => svcExtension
              [type] => close
              [level] => 4
          )
  
      [32] => Array
          (
              [tag] => svcMenu
              [type] => close
              [level] => 3
          )
  
      [33] => Array
          (
              [tag] => dcp
              [type] => open
              [level] => 3
          )
  
      [34] => Array
          (
              [tag] => access
              [type] => open
              [level] => 4
          )
  
      [35] => Array
          (
              [tag] => all
              [type] => complete
              [level] => 5
          )
  
      [36] => Array
          (
              [tag] => access
              [type] => close
              [level] => 4
          )
  
      [37] => Array
          (
              [tag] => statement
              [type] => open
              [level] => 4
          )
  
      [38] => Array
          (
              [tag] => purpose
              [type] => open
              [level] => 5
          )
  
      [39] => Array
          (
              [tag] => admin
              [type] => complete
              [level] => 6
          )
  
      [40] => Array
          (
              [tag] => prov
              [type] => complete
              [level] => 6
          )
  
      [41] => Array
          (
              [tag] => purpose
              [type] => close
              [level] => 5
          )
  
      [42] => Array
          (
              [tag] => recipient
              [type] => open
              [level] => 5
          )
  
      [43] => Array
          (
              [tag] => ours
              [type] => complete
              [level] => 6
          )
  
      [44] => Array
          (
              [tag] => recipient
              [type] => close
              [level] => 5
          )
  
      [45] => Array
          (
              [tag] => retention
              [type] => open
              [level] => 5
          )
  
      [46] => Array
          (
              [tag] => indefinite
              [type] => complete
              [level] => 6
          )
  
      [47] => Array
          (
              [tag] => retention
              [type] => close
              [level] => 5
          )
  
      [48] => Array
          (
              [tag] => statement
              [type] => close
              [level] => 4
          )
  
      [49] => Array
          (
              [tag] => dcp
              [type] => close
              [level] => 3
          )
  
      [50] => Array
          (
              [tag] => greeting
              [type] => close
              [level] => 2
          )
  
      [51] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0' encoding='UTF-8'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "greeting"
                           (...).children[0].name = "svID"
                                       (...).children[0].to_s = "Heart Internet Test API Server"
                           (...).children[1].name = "svDate"
                                       (...).children[0].to_s = "2010-08-17T12:34:53Z"
                           (...).children[2].name = "svcMenu"
                                       (...).children[0].name = "version"
                                                   (...).children[0].to_s = "1.0"
                                       (...).children[1].name = "lang"
                                                   (...).children[0].to_s = "en-GB"
                                       (...).children[2].name = "objURI"
                                                   (...).children[0].to_s = "urn:ietf:params:xml:ns:contact-1.0"
                                       (...).children[3].name = "objURI"
                                                   (...).children[0].to_s = "urn:ietf:params:xml:ns:domain-1.0"
                                       (...).children[4].name = "objURI"
                                                   (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/database-2.0"
                                       (...).children[5].name = "objURI"
                                                   (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/mailbox-2.0"
                                       (...).children[6].name = "objURI"
                                                   (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/null-2.0"
                                       (...).children[7].name = "objURI"
                                                   (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/package-2.2"
                                       (...).children[8].name = "objURI"
                                                   (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/server-2.2"
                                       (...).children[9].name = "objURI"
                                                   (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/support-2.0"
                                       (...).children[10].name = "svcExtension"
                                                    (...).children[0].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-antivirus-2.0"
                                                    (...).children[1].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-billing-2.0"
                                                    (...).children[2].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-database-2.0"
                                                    (...).children[3].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-dns-2.0"
                                                    (...).children[4].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
                                                    (...).children[5].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-contact-2.0"
                                                    (...).children[6].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-mailbox-2.0"
                                                    (...).children[7].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-host-2.0"
                                                    (...).children[8].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-null-2.0"
                                                    (...).children[9].name = "extURI"
                                                                (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-package-2.2"
                                                    (...).children[10].name = "extURI"
                                                                 (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-security-2.0"
                                                    (...).children[11].name = "extURI"
                                                                 (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-server-2.2"
                                                    (...).children[12].name = "extURI"
                                                                 (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-support-2.0"
                                                    (...).children[13].name = "extURI"
                                                                 (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-wbp-2.0"
                                                    (...).children[14].name = "extURI"
                                                                 (...).children[0].to_s = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0"
                           (...).children[3].name = "dcp"
                                       (...).children[0].name = "access"
                                                   (...).children[0].name = "all"
                                       (...).children[1].name = "statement"
                                                   (...).children[0].name = "purpose"
                                                               (...).children[0].name = "admin"
                                                               (...).children[1].name = "prov"
                                                   (...).children[1].name = "recipient"
                                                               (...).children[0].name = "ours"
                                                   (...).children[2].name = "retention"
                                                               (...).children[0].name = "indefinite"
  result.children[2].to_s = " \n"

Log In [^Back to contents]

This logs you in, returning an indication of how long it will be before your session times out.

EPP syntax requires a username (clID) and password (pw). You may provide your authcode for both, but it is better to enter your clID and pw as given at https://customer.heartinternet.co.uk/manage/api

At login time, you must specify the objects (schemas without ext- at the start) and extensions (schemas with ext- at the start) you're going to use - the ones available are advertised in the greeting (and <hello> response), although some may be mutually exclusive. This will determine both what functionality the server should allow and what elements you're expected to understand in the responses. It is very strongly recommended that you include the "ext-whapi" extension regardless.

Please note that this is the only time when you can get an <extension> element in the response without asking for it.

What to send

Syntax

KeyAttributesContentsNotes
<command><login>
<login><clID> <pw> <newPW>? <options> <svcs>
<clID>(text)See description
<pw>(text)See description
<newPW>(N/A)Not implemented
<options><version> <lang>
<version>1.0Ignored
<lang>enIgnored
<svcs><objURI>+ <svcExtension>?
<objURI>(text)Object you intend to use
<svcExtension><extURI>+
<extURI>(text)Extension you intend to use

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <login>
      <clID>ccf0049fd0f38c61</clID>
      <pw>FSAFDSfdsfa</pw>
      <options>
        <version>1.0</version>
        <lang>en</lang>
      </options>
      <svcs>
        <objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
        <objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
        <objURI>http://www.heartinternet.co.uk/whapi/null-2.0</objURI>
        <svcExtension>
          <extURI>http://www.heartinternet.co.uk/whapi/ext-domain-2.5</extURI>
          <extURI>http://www.heartinternet.co.uk/whapi/ext-contact-2.0</extURI>
          <extURI>http://www.heartinternet.co.uk/whapi/ext-host-2.0</extURI>
          <extURI>http://www.heartinternet.co.uk/whapi/ext-null-2.0</extURI>
          <extURI>http://www.heartinternet.co.uk/whapi/ext-whapi-2.0</extURI>
        </svcExtension>
      </svcs>
    </login>
    <clTRID>695b603901a60ac5a3123ad406f136cd</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('login');
        $w->dataElement('clID', "ccf0049fd0f38c61");
        $w->dataElement('pw', "FSAFDSfdsfa");
        $w->startTag('options');
          $w->dataElement('version', "1.0");
          $w->dataElement('lang', "en");
        $w->endTag();
        $w->startTag('svcs');
          $w->dataElement('objURI', "urn:ietf:params:xml:ns:contact-1.0");
          $w->dataElement('objURI', "urn:ietf:params:xml:ns:domain-1.0");
          $w->dataElement('objURI', "http://www.heartinternet.co.uk/whapi/null-2.0");
          $w->startTag('svcExtension');
            $w->dataElement('extURI', "http://www.heartinternet.co.uk/whapi/ext-domain-2.5");
            $w->dataElement('extURI', "http://www.heartinternet.co.uk/whapi/ext-contact-2.0");
            $w->dataElement('extURI', "http://www.heartinternet.co.uk/whapi/ext-host-2.0");
            $w->dataElement('extURI', "http://www.heartinternet.co.uk/whapi/ext-null-2.0");
            $w->dataElement('extURI', "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0");
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "695b603901a60ac5a3123ad406f136cd");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'login');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($namespace, 'clID');
        $l->appendChild($c);
        $c->appendChild($doc->createTextNode('ccf0049fd0f38c61'));
        $c = $doc->createElementNS($namespace, 'pw');
        $l->appendChild($c);
        $c->appendChild($doc->createTextNode('FSAFDSfdsfa'));
        $c = $doc->createElementNS($namespace, 'options');
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($namespace, 'version');
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('1.0'));
          $c = $doc->createElementNS($namespace, 'lang');
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('en'));
        $l = $l->parentNode;
        $c = $doc->createElementNS($namespace, 'svcs');
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($namespace, 'objURI');
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('urn:ietf:params:xml:ns:contact-1.0'));
          $c = $doc->createElementNS($namespace, 'objURI');
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('urn:ietf:params:xml:ns:domain-1.0'));
          $c = $doc->createElementNS($namespace, 'objURI');
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('http://www.heartinternet.co.uk/whapi/null-2.0'));
          $c = $doc->createElementNS($namespace, 'svcExtension');
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($namespace, 'extURI');
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('http://www.heartinternet.co.uk/whapi/ext-domain-2.5'));
            $c = $doc->createElementNS($namespace, 'extURI');
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('http://www.heartinternet.co.uk/whapi/ext-contact-2.0'));
            $c = $doc->createElementNS($namespace, 'extURI');
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('http://www.heartinternet.co.uk/whapi/ext-host-2.0'));
            $c = $doc->createElementNS($namespace, 'extURI');
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('http://www.heartinternet.co.uk/whapi/ext-null-2.0'));
            $c = $doc->createElementNS($namespace, 'extURI');
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('http://www.heartinternet.co.uk/whapi/ext-whapi-2.0'));
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('695b603901a60ac5a3123ad406f136cd'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('login', {})
        current.add_element('clID', {}).add_text("ccf0049fd0f38c61")
        current.add_element('pw', {}).add_text("FSAFDSfdsfa")
        current = current.add_element('options', {})
          current.add_element('version', {}).add_text("1.0")
          current.add_element('lang', {}).add_text("en")
        current = current.parent
        current = current.add_element('svcs', {})
          current.add_element('objURI', {}).add_text("urn:ietf:params:xml:ns:contact-1.0")
          current.add_element('objURI', {}).add_text("urn:ietf:params:xml:ns:domain-1.0")
          current.add_element('objURI', {}).add_text("http://www.heartinternet.co.uk/whapi/null-2.0")
          current = current.add_element('svcExtension', {})
            current.add_element('extURI', {}).add_text("http://www.heartinternet.co.uk/whapi/ext-domain-2.5")
            current.add_element('extURI', {}).add_text("http://www.heartinternet.co.uk/whapi/ext-contact-2.0")
            current.add_element('extURI', {}).add_text("http://www.heartinternet.co.uk/whapi/ext-host-2.0")
            current.add_element('extURI', {}).add_text("http://www.heartinternet.co.uk/whapi/ext-null-2.0")
            current.add_element('extURI', {}).add_text("http://www.heartinternet.co.uk/whapi/ext-whapi-2.0")
          current = current.parent
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("695b603901a60ac5a3123ad406f136cd")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<extension><ext-whapi:sessionExpiry>
<ext-whapi:sessionExpiry>unit(number)
unit"s"

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <extension>
      <ext-whapi:sessionExpiry xmlns:ext-whapi="http://www.heartinternet.co.uk/whapi/ext-whapi-2.0" unit="s">600</ext-whapi:sessionExpiry>
    </extension>
    <trID>
      <clTRID>695b603901a60ac5a3123ad406f136cd</clTRID>
      <svTRID>test-689906f5ae60df831c5aa54384ded38d</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'extension' => {
               'ext-whapi:sessionExpiry' => {
                      'unit' => 's',
                      'xmlns:ext-whapi' => 'http://www.heartinternet.co.uk/whapi/ext-whapi-2.0',
                      'content' => '600'
                    }
             },
          'trID' => {
             'clTRID' => '695b603901a60ac5a3123ad406f136cd',
             'svTRID' => 'test-689906f5ae60df831c5aa54384ded38d'
           },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => extension
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => ext-whapi:sessionExpiry
              [type] => complete
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:ext-whapi] => http://www.heartinternet.co.uk/whapi/ext-whapi-2.0
                      [unit] => s
                  )
  
              [value] => 600
          )
  
      [7] => Array
          (
              [tag] => extension
              [type] => close
              [level] => 3
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 695b603901a60ac5a3123ad406f136cd
          )
  
      [10] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-689906f5ae60df831c5aa54384ded38d
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [13] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "extension"
                                       (...).children[0].name = "sessionExpiry"
                                                   (...).attributes["ext-whapi"] = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0"
                                                   (...).attributes["unit"] = "s"
                                                   (...).children[0].to_s = "600"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "695b603901a60ac5a3123ad406f136cd"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-689906f5ae60df831c5aa54384ded38d"
  result.children[2].to_s = " \n"

Log Out [^Back to contents]

This will disconnect you. You should do this before disconnecting yourself.

What to send

Syntax

KeyAttributesContentsNotes
<command><logout>
<logout>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <logout />
    <clTRID>2d390c46c8735be809a00d3ce655960b</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->emptyTag('logout');
      $w->dataElement('clTRID', "2d390c46c8735be809a00d3ce655960b");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'logout');
      $l->appendChild($c);
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('2d390c46c8735be809a00d3ce655960b'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current.add_element('logout', {})
      current.add_element('clTRID', {}).add_text("2d390c46c8735be809a00d3ce655960b")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1500'>
      <msg>Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>2d390c46c8735be809a00d3ce655960b</clTRID>
      <svTRID>test-26c90fc72fa0d177e8348e230062b516</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => '2d390c46c8735be809a00d3ce655960b',
             'svTRID' => 'test-26c90fc72fa0d177e8348e230062b516'
           },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1500'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1500
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 2d390c46c8735be809a00d3ce655960b
          )
  
      [7] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-26c90fc72fa0d177e8348e230062b516
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [10] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1500"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "2d390c46c8735be809a00d3ce655960b"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-26c90fc72fa0d177e8348e230062b516"
  result.children[2].to_s = " \n"

CONTACT COMMANDS [^Back to contents]

These are functions for handling contacts attached to domain names. <info> is not currently supported.

Creating Domain Contacts [^Back to contents]

This supports creation of contacts for domain registration or transfer purposes.

Although some registries distinguish between contacts and registrants, we treat them as the same, so the "registrant name" will be taken from the organisation name where there is one, and the individual's name otherwise.

Although we do request <contact:salutation gender>, the gender part is not currently stored.

What to send

Syntax

KeyAttributesContentsNotes
<command><create>
<create><contact:create>
<contact:create><contact:id> <contact:postalInfo>+ <contact:voice>? <contact:fax>? <contact:email> <contact:authInfo> <contact:disclosure>?1-2 postalInfo elements
<contact:id>(text)Ignored
<contact:postalInfo>type <contact:name> <contact:org>? <contact:addr>
type (postalInfo)"loc""int" is unsupported
<contact:name>(text)The person's full name
<contact:org>(text)Only specify an organisation if that's what the contact represents
<contact:addr><contact:street>* <contact:city> <contact:sp>? <contact:pc>? <contact:cc>
<contact:street>(text)All parts of the address before the town/city, one for each line
<contact:city>(text)
<contact:sp>(text)The state or province. Should not be present for GB contacts.
<contact:pc>(text)This must be correctly formatted if it's a GB postcode
<contact:cc>(country code)A two-letter ISO-3166-alpha-2 country code (eg. "GB", "US", "IE", or "DE")
<contact:voice>(phone number)An international-format phone number, +(country).(rest of number without spaces), eg. +44.3306600255
<contact:fax>(N/A)Unsupported
<contact:email>(an email address)
<contact:authInfo><contact:ext>Ignored
<contact:ext><ext-contact:null>
<ext-contact:null>(empty)
<contact:disclosure>(N/A)Unsupported
<extension><ext-contact:createExtension>
<ext-contact:createExtension><ext-contact:person> <ext-contact:organisationType>? <ext-contact:telephone>*
<ext-contact:person><ext-contact:salutation> <ext-contact:surname> <ext-contact:otherNames> <ext-contact:dateOfBirth>?
<ext-contact:salutation>gender"Mr", "Mrs", "Ms", "Miss" or "Dr"
gender"male", "female" or "unknown"This is just to get the pronoun right.
<ext-contact:surname>(text)The person's family name, eg. "Mozart".
<ext-contact:otherNames>(text)All name components apart from the surname, eg. "Wolfgang Amadeus"
<ext-contact:dateOfBirth>(date)An ISO-8601 date string (eg. "2009-12-13"). Some registries require this (for individuals), however none of the registries we use do at this time.
<ext-contact:organisationType>"company" or "nonprofit"
<ext-contact:telephone>type(phone number)Use to provide a non-default phone number
type (telephone)"mobile"

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-contact="http://www.heartinternet.co.uk/whapi/ext-contact-2.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
  <command>
    <create>
      <contact:create>
        <contact:id>IGNORED</contact:id>
        <contact:postalInfo type="loc">
          <contact:name>John Doe</contact:name>
          <contact:org>John Doe Ltd</contact:org>
          <contact:addr>
            <contact:street>1 Milky Way</contact:street>
            <contact:street>Universe Street</contact:street>
            <contact:city>Solarton</contact:city>
            <contact:pc>T9 9TT</contact:pc>
            <contact:cc>GB</contact:cc>
          </contact:addr>
        </contact:postalInfo>
        <contact:voice>+44.1112222222</contact:voice>
        <contact:email>john@doe.example.org</contact:email>
        <contact:authInfo>
          <contact:ext>
            <ext-contact:null/>
          </contact:ext>
        </contact:authInfo>
      </contact:create>
    </create>
    <extension>
      <ext-contact:createExtension>
        <ext-contact:person>
          <ext-contact:salutation gender="male">Mr</ext-contact:salutation>
          <ext-contact:surname>Doe</ext-contact:surname>
          <ext-contact:otherNames>John</ext-contact:otherNames>
          <ext-contact:dateOfBirth>1980-12-20</ext-contact:dateOfBirth>
        </ext-contact:person>
        <ext-contact:organisationType>company</ext-contact:organisationType>
        <ext-contact:telephone type="mobile">+44.7772222222</ext-contact:telephone>
      </ext-contact:createExtension>
    </extension>
    <clTRID>71a5c8e557f579017b27b49879281db3</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_contact_ns = "http://www.heartinternet.co.uk/whapi/ext-contact-2.0";
  my $contact_ns = "urn:ietf:params:xml:ns:contact-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_contact_ns => "ext-contact",
  $contact_ns => "contact",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('create');
        $w->startTag([$contact_ns, "create"]);
          $w->dataElement([$contact_ns, "id"], "IGNORED");
          $w->startTag([$contact_ns, "postalInfo"], 'type' => "loc");
            $w->dataElement([$contact_ns, "name"], "John Doe");
            $w->dataElement([$contact_ns, "org"], "John Doe Ltd");
            $w->startTag([$contact_ns, "addr"]);
              $w->dataElement([$contact_ns, "street"], "1 Milky Way");
              $w->dataElement([$contact_ns, "street"], "Universe Street");
              $w->dataElement([$contact_ns, "city"], "Solarton");
              $w->dataElement([$contact_ns, "pc"], "T9 9TT");
              $w->dataElement([$contact_ns, "cc"], "GB");
            $w->endTag();
          $w->endTag();
          $w->dataElement([$contact_ns, "voice"], "+44.1112222222");
          $w->dataElement([$contact_ns, "email"], "john\x40doe.example.org");
          $w->startTag([$contact_ns, "authInfo"]);
            $w->startTag([$contact_ns, "ext"]);
              $w->emptyTag([$ext_contact_ns, "null"]);
            $w->endTag();
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_contact_ns, "createExtension"]);
          $w->startTag([$ext_contact_ns, "person"]);
            $w->dataElement([$ext_contact_ns, "salutation"], "Mr", 'gender' => "male");
            $w->dataElement([$ext_contact_ns, "surname"], "Doe");
            $w->dataElement([$ext_contact_ns, "otherNames"], "John");
            $w->dataElement([$ext_contact_ns, "dateOfBirth"], "1980-12-20");
          $w->endTag();
          $w->dataElement([$ext_contact_ns, "organisationType"], "company");
          $w->dataElement([$ext_contact_ns, "telephone"], "+44.7772222222", 'type' => "mobile");
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "71a5c8e557f579017b27b49879281db3");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_contact_ns = "http://www.heartinternet.co.uk/whapi/ext-contact-2.0";
  $contact_ns = "urn:ietf:params:xml:ns:contact-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'create');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($contact_ns, "create");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($contact_ns, "id");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('IGNORED'));
          $c = $doc->createElementNS($contact_ns, "postalInfo");$c->setAttribute('type', "loc"); 
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($contact_ns, "name");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('John Doe'));
            $c = $doc->createElementNS($contact_ns, "org");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('John Doe Ltd'));
            $c = $doc->createElementNS($contact_ns, "addr");
            $l->appendChild($c); $l = $c;
              $c = $doc->createElementNS($contact_ns, "street");
              $l->appendChild($c);
              $c->appendChild($doc->createTextNode('1 Milky Way'));
              $c = $doc->createElementNS($contact_ns, "street");
              $l->appendChild($c);
              $c->appendChild($doc->createTextNode('Universe Street'));
              $c = $doc->createElementNS($contact_ns, "city");
              $l->appendChild($c);
              $c->appendChild($doc->createTextNode('Solarton'));
              $c = $doc->createElementNS($contact_ns, "pc");
              $l->appendChild($c);
              $c->appendChild($doc->createTextNode('T9 9TT'));
              $c = $doc->createElementNS($contact_ns, "cc");
              $l->appendChild($c);
              $c->appendChild($doc->createTextNode('GB'));
            $l = $l->parentNode;
          $l = $l->parentNode;
          $c = $doc->createElementNS($contact_ns, "voice");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('+44.1112222222'));
          $c = $doc->createElementNS($contact_ns, "email");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('john@doe.example.org'));
          $c = $doc->createElementNS($contact_ns, "authInfo");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($contact_ns, "ext");
            $l->appendChild($c); $l = $c;
              $c = $doc->createElementNS($ext_contact_ns, "null");
              $l->appendChild($c);
            $l = $l->parentNode;
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_contact_ns, "createExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_contact_ns, "person");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($ext_contact_ns, "salutation");$c->setAttribute('gender', "male"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Mr'));
            $c = $doc->createElementNS($ext_contact_ns, "surname");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Doe'));
            $c = $doc->createElementNS($ext_contact_ns, "otherNames");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('John'));
            $c = $doc->createElementNS($ext_contact_ns, "dateOfBirth");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('1980-12-20'));
          $l = $l->parentNode;
          $c = $doc->createElementNS($ext_contact_ns, "organisationType");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('company'));
          $c = $doc->createElementNS($ext_contact_ns, "telephone");$c->setAttribute('type', "mobile"); 
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('+44.7772222222'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('71a5c8e557f579017b27b49879281db3'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("contact", "urn:ietf:params:xml:ns:contact-1.0")
  current = current.add_element('epp', {'xmlns:ext-contact' => "http://www.heartinternet.co.uk/whapi/ext-contact-2.0"})
    current = current.add_element('command', {})
      current = current.add_element('create', {})
        current = current.add_element('contact:create', {})
          current.add_element('contact:id', {}).add_text("IGNORED")
          current = current.add_element('contact:postalInfo', {'type' => "loc"})
            current.add_element('contact:name', {}).add_text("John Doe")
            current.add_element('contact:org', {}).add_text("John Doe Ltd")
            current = current.add_element('contact:addr', {})
              current.add_element('contact:street', {}).add_text("1 Milky Way")
              current.add_element('contact:street', {}).add_text("Universe Street")
              current.add_element('contact:city', {}).add_text("Solarton")
              current.add_element('contact:pc', {}).add_text("T9 9TT")
              current.add_element('contact:cc', {}).add_text("GB")
            current = current.parent
          current = current.parent
          current.add_element('contact:voice', {}).add_text("+44.1112222222")
          current.add_element('contact:email', {}).add_text("john\x40doe.example.org")
          current = current.add_element('contact:authInfo', {})
            current = current.add_element('contact:ext', {})
              current.add_element('ext-contact:null', {})
            current = current.parent
          current = current.parent
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-contact:createExtension', {})
          current = current.add_element('ext-contact:person', {})
            current.add_element('ext-contact:salutation', {'gender' => "male"}).add_text("Mr")
            current.add_element('ext-contact:surname', {}).add_text("Doe")
            current.add_element('ext-contact:otherNames', {}).add_text("John")
            current.add_element('ext-contact:dateOfBirth', {}).add_text("1980-12-20")
          current = current.parent
          current.add_element('ext-contact:organisationType', {}).add_text("company")
          current.add_element('ext-contact:telephone', {'type' => "mobile"}).add_text("+44.7772222222")
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("71a5c8e557f579017b27b49879281db3")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
resData<contact:creData>
<contact:creData><contact:id> <contact:crDate>
<contact:id>(number)
<contact:crDate>(date/time)

Examples

XML
<?xml version='1.0'?>
<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>Contact created successfully</msg>
    </result>
    <resData>
      <contact:creData>
        <contact:id>9728bb9376f22515</contact:id>
        <contact:crDate>2001-03-05T00:00:00Z</contact:crDate>
      </contact:creData>
    </resData>
    <trID>
      <clTRID>71a5c8e557f579017b27b49879281db3</clTRID>
      <svTRID>test-faaf9714e6b5e8cbaa60000e030c6fe5</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0',
      'response' => {
          'trID' => {
             'clTRID' => '71a5c8e557f579017b27b49879281db3',
             'svTRID' => 'test-faaf9714e6b5e8cbaa60000e030c6fe5'
           },
          'resData' => {
             'contact:creData' => {
                  'contact:crDate' => '2001-03-05T00:00:00Z',
                  'contact:id' => '9728bb9376f22515'
                   }
              },
          'result' => {
            'msg' => 'Contact created successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:contact] => urn:ietf:params:xml:ns:contact-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Contact created successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => contact:creData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => contact:id
              [type] => complete
              [level] => 5
              [value] => 9728bb9376f22515
          )
  
      [8] => Array
          (
              [tag] => contact:crDate
              [type] => complete
              [level] => 5
              [value] => 2001-03-05T00:00:00Z
          )
  
      [9] => Array
          (
              [tag] => contact:creData
              [type] => close
              [level] => 4
          )
  
      [10] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 71a5c8e557f579017b27b49879281db3
          )
  
      [13] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-faaf9714e6b5e8cbaa60000e030c6fe5
          )
  
      [14] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [15] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [16] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["contact"] = "urn:ietf:params:xml:ns:contact-1.0"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Contact created successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "creData"
                                                   (...).children[0].name = "id"
                                                               (...).children[0].to_s = "9728bb9376f22515"
                                                   (...).children[1].name = "crDate"
                                                               (...).children[0].to_s = "2001-03-05T00:00:00Z"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "71a5c8e557f579017b27b49879281db3"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-faaf9714e6b5e8cbaa60000e030c6fe5"
  result.children[2].to_s = " \n"

Listing / Searching Contacts [^Back to contents]

This allows you to list or search your contacts. For the search, you just provide a search term which will be checked for as part of the name, company, first line of address, postcode or email address.

What you get back is a summary of the contact data intended to help you work out which one you want, eg. by populating a drop-down.

What to send

Syntax

KeyAttributesContentsNotes
<extension><ext-contact:list>
<ext-contact:list>search?(empty)
search(text)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-contact="http://www.heartinternet.co.uk/whapi/ext-contact-2.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
  <extension>
    <ext-contact:list search="john"/>
    <ext-whapi:clTRID xmlns:ext-whapi="http://www.heartinternet.co.uk/whapi/ext-whapi-2.0">75d5f6b852e509abd44395ae3caa3b65</ext-whapi:clTRID>
  </extension>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_contact_ns = "http://www.heartinternet.co.uk/whapi/ext-contact-2.0";
  my $contact_ns = "urn:ietf:params:xml:ns:contact-1.0";
  my $ext_whapi_ns = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_contact_ns => "ext-contact",
  $contact_ns => "contact",
  $ext_whapi_ns => "ext-whapi",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('extension');
      $w->emptyTag([$ext_contact_ns, "list"], 'search' => "john");
      $w->dataElement([$ext_whapi_ns, "clTRID"], "75d5f6b852e509abd44395ae3caa3b65");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_contact_ns = "http://www.heartinternet.co.uk/whapi/ext-contact-2.0";
  $contact_ns = "urn:ietf:params:xml:ns:contact-1.0";
  $ext_whapi_ns = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'extension');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($ext_contact_ns, "list");$c->setAttribute('search', "john"); 
      $l->appendChild($c);
      $c = $doc->createElementNS($ext_whapi_ns, "clTRID");
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('75d5f6b852e509abd44395ae3caa3b65'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("contact", "urn:ietf:params:xml:ns:contact-1.0")
  current = current.add_element('epp', {'xmlns:ext-contact' => "http://www.heartinternet.co.uk/whapi/ext-contact-2.0"})
    current = current.add_element('extension', {})
      current.add_element('ext-contact:list', {'search' => "john"})
      current.add_element('ext-whapi:clTRID', {'xmlns:ext-whapi' => "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0"}).add_text("75d5f6b852e509abd44395ae3caa3b65")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><ext-contact:lstData>
<ext-contact:lstData><ext-contact:contact>*
<ext-contact:contact><ext-contact:id> <ext-contact:name> <ext-contact:org>? <ext-contact:addr> <ext-contact:email>
<ext-contact:id>(text)
<ext-contact:name>(text)
<ext-contact:org>(text)
<ext-contact:addr><ext-contact:street> <ext-contact:pc>
<ext-contact:street>(text)The first line of the address
<ext-contact:pc>(postcode)
<ext-contact:email>(an email address)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-contact="http://www.heartinternet.co.uk/whapi/ext-contact-2.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <ext-contact:lstData>
        <ext-contact:contact>
          <ext-contact:id>ea7cdb90fc7365c6</ext-contact:id>
          <ext-contact:name>John Smith</ext-contact:name>
          <ext-contact:addr>
            <ext-contact:street>1 Smithy Road</ext-contact:street>
            <ext-contact:pc>JS99 9JS</ext-contact:pc>
          </ext-contact:addr>
          <ext-contact:email>john@smith.example.org</ext-contact:email>
        </ext-contact:contact>
        <ext-contact:contact>
          <ext-contact:id>7bd89dec6d471e14</ext-contact:id>
          <ext-contact:name>Bob Robertson</ext-contact:name>
          <ext-contact:org>John Smith Ltd</ext-contact:org>
          <ext-contact:addr>
            <ext-contact:street>23 Jack Street</ext-contact:street>
            <ext-contact:pc>JS99 0SJ</ext-contact:pc>
          </ext-contact:addr>
          <ext-contact:email>br@john-smith-ltd.example.org</ext-contact:email>
        </ext-contact:contact>
      </ext-contact:lstData>
    </resData>
    <trID>
      <clTRID>75d5f6b852e509abd44395ae3caa3b65</clTRID>
      <svTRID>test-a1f8ab554dd8f01058a59290566f9ff2</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0',
      'xmlns:ext-contact' => 'http://www.heartinternet.co.uk/whapi/ext-contact-2.0',
      'response' => {
          'trID' => {
             'clTRID' => '75d5f6b852e509abd44395ae3caa3b65',
             'svTRID' => 'test-a1f8ab554dd8f01058a59290566f9ff2'
           },
          'resData' => {
             'ext-contact:lstData' => {
                   'ext-contact:contact' => [
                            {
                           'ext-contact:addr' => {
                                 'ext-contact:street' => '1 Smithy Road',
                                 'ext-contact:pc' => 'JS99 9JS'
                                  },
                           'ext-contact:name' => 'John Smith',
                           'ext-contact:id' => 'ea7cdb90fc7365c6',
                           'ext-contact:email' => 'john@smith.example.org'
                            },
                            {
                           'ext-contact:addr' => {
                                 'ext-contact:street' => '23 Jack Street',
                                 'ext-contact:pc' => 'JS99 0SJ'
                                  },
                           'ext-contact:name' => 'Bob Robertson',
                           'ext-contact:id' => '7bd89dec6d471e14',
                           'ext-contact:org' => 'John Smith Ltd',
                           'ext-contact:email' => 'br@john-smith-ltd.example.org'
                            }
                          ]
                    }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-contact] => http://www.heartinternet.co.uk/whapi/ext-contact-2.0
                      [xmlns:contact] => urn:ietf:params:xml:ns:contact-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => ext-contact:lstData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => ext-contact:contact
              [type] => open
              [level] => 5
          )
  
      [8] => Array
          (
              [tag] => ext-contact:id
              [type] => complete
              [level] => 6
              [value] => ea7cdb90fc7365c6
          )
  
      [9] => Array
          (
              [tag] => ext-contact:name
              [type] => complete
              [level] => 6
              [value] => John Smith
          )
  
      [10] => Array
          (
              [tag] => ext-contact:addr
              [type] => open
              [level] => 6
          )
  
      [11] => Array
          (
              [tag] => ext-contact:street
              [type] => complete
              [level] => 7
              [value] => 1 Smithy Road
          )
  
      [12] => Array
          (
              [tag] => ext-contact:pc
              [type] => complete
              [level] => 7
              [value] => JS99 9JS
          )
  
      [13] => Array
          (
              [tag] => ext-contact:addr
              [type] => close
              [level] => 6
          )
  
      [14] => Array
          (
              [tag] => ext-contact:email
              [type] => complete
              [level] => 6
              [value] => john@smith.example.org
          )
  
      [15] => Array
          (
              [tag] => ext-contact:contact
              [type] => close
              [level] => 5
          )
  
      [16] => Array
          (
              [tag] => ext-contact:contact
              [type] => open
              [level] => 5
          )
  
      [17] => Array
          (
              [tag] => ext-contact:id
              [type] => complete
              [level] => 6
              [value] => 7bd89dec6d471e14
          )
  
      [18] => Array
          (
              [tag] => ext-contact:name
              [type] => complete
              [level] => 6
              [value] => Bob Robertson
          )
  
      [19] => Array
          (
              [tag] => ext-contact:org
              [type] => complete
              [level] => 6
              [value] => John Smith Ltd
          )
  
      [20] => Array
          (
              [tag] => ext-contact:addr
              [type] => open
              [level] => 6
          )
  
      [21] => Array
          (
              [tag] => ext-contact:street
              [type] => complete
              [level] => 7
              [value] => 23 Jack Street
          )
  
      [22] => Array
          (
              [tag] => ext-contact:pc
              [type] => complete
              [level] => 7
              [value] => JS99 0SJ
          )
  
      [23] => Array
          (
              [tag] => ext-contact:addr
              [type] => close
              [level] => 6
          )
  
      [24] => Array
          (
              [tag] => ext-contact:email
              [type] => complete
              [level] => 6
              [value] => br@john-smith-ltd.example.org
          )
  
      [25] => Array
          (
              [tag] => ext-contact:contact
              [type] => close
              [level] => 5
          )
  
      [26] => Array
          (
              [tag] => ext-contact:lstData
              [type] => close
              [level] => 4
          )
  
      [27] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [28] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [29] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 75d5f6b852e509abd44395ae3caa3b65
          )
  
      [30] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-a1f8ab554dd8f01058a59290566f9ff2
          )
  
      [31] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [32] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [33] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["ext-contact"] = "http://www.heartinternet.co.uk/whapi/ext-contact-2.0"
               (...).attributes["contact"] = "urn:ietf:params:xml:ns:contact-1.0"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "lstData"
                                                   (...).children[0].name = "contact"
                                                               (...).children[0].name = "id"
                                                                           (...).children[0].to_s = "ea7cdb90fc7365c6"
                                                               (...).children[1].name = "name"
                                                                           (...).children[0].to_s = "John Smith"
                                                               (...).children[2].name = "addr"
                                                                           (...).children[0].name = "street"
                                                                                       (...).children[0].to_s = "1 Smithy Road"
                                                                           (...).children[1].name = "pc"
                                                                                       (...).children[0].to_s = "JS99 9JS"
                                                               (...).children[3].name = "email"
                                                                           (...).children[0].to_s = "john@smith.example.org"
                                                   (...).children[1].name = "contact"
                                                               (...).children[0].name = "id"
                                                                           (...).children[0].to_s = "7bd89dec6d471e14"
                                                               (...).children[1].name = "name"
                                                                           (...).children[0].to_s = "Bob Robertson"
                                                               (...).children[2].name = "org"
                                                                           (...).children[0].to_s = "John Smith Ltd"
                                                               (...).children[3].name = "addr"
                                                                           (...).children[0].name = "street"
                                                                                       (...).children[0].to_s = "23 Jack Street"
                                                                           (...).children[1].name = "pc"
                                                                                       (...).children[0].to_s = "JS99 0SJ"
                                                               (...).children[4].name = "email"
                                                                           (...).children[0].to_s = "br@john-smith-ltd.example.org"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "75d5f6b852e509abd44395ae3caa3b65"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-a1f8ab554dd8f01058a59290566f9ff2"
  result.children[2].to_s = " \n"

Deleting a Domain Contact [^Back to contents]

This supports the deletion of contacts.

This does not allow you to delete your main contact or contacts presently attached to domains.

What to send

Syntax

KeyAttributesContentsNotes
<command><delete>
<delete><contact:delete>
<contact:delete><contact:id>
<contact:id>(text)

Examples

XML
<?xml version="1.0"?>
<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>e7497652678283f0</contact:id>
      </contact:delete>
    </delete>
    <clTRID>c984ee5374423f4d57d0315055bdab71</clTRID>
  </command>
</epp>

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $contact_ns = "urn:ietf:params:xml:ns:contact-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $contact_ns => "contact",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp'); 
    $w->startTag('command');
      $w->startTag('delete');
        $w->startTag([$contact_ns, "delete"]);
          $w->dataElement([$contact_ns, "id"], "e7497652678283f0");
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "c984ee5374423f4d57d0315055bdab71");
    $w->endTag();
  $w->endTag();
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $contact_ns = "urn:ietf:params:xml:ns:contact-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c; 
    $c = $doc->createElementNS($namespace, 'command');
   
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'delete');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($contact_ns, "delete");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($contact_ns, "id");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('e7497652678283f0'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('c984ee5374423f4d57d0315055bdab71'));
    $l = $l->parentNode;
  $l = $l->parentNode;
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("contact", "urn:ietf:params:xml:ns:contact-1.0")
  current = current.add_element('epp', {}) 
    current = current.add_element('command', {})
      current = current.add_element('delete', {})
        current = current.add_element('contact:delete', {})
          current.add_element('contact:id', {}).add_text("e7497652678283f0")
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("c984ee5374423f4d57d0315055bdab71")
    current = current.parent
  current = current.parent
  doc.write(output)

Response

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>c984ee5374423f4d57d0315055bdab71</clTRID>
      <svTRID>test-656d86933b9882fc0e61936c434b4890</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => 'c984ee5374423f4d57d0315055bdab71',
             'svTRID' => 'test-656d86933b9882fc0e61936c434b4890'
           },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => c984ee5374423f4d57d0315055bdab71
          )
  
      [7] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-656d86933b9882fc0e61936c434b4890
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [10] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "c984ee5374423f4d57d0315055bdab71"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-656d86933b9882fc0e61936c434b4890"
  result.children[2].to_s = " \n"

Updating Domain Contacts [^Back to contents]

This supports modification of contacts used for domain registration or transfer purposes.

Although we do request <contact:salutation gender>, the gender part is not currently stored.

This is not currently implemented for the main customer contact.

What to send

Syntax

KeyAttributesContentsNotes
<command><update>
<update><contact:update>
<contact:update><contact:id> <contact:chg>?
<contact:id>(text)
<contact:chg> <contact:postalInfo>+ <contact:voice>? <contact:fax>? <contact:email> <contact:authInfo> <contact:disclosure>?1-2 postalInfo elements
<contact:postalInfo>type <contact:name> <contact:org>? <contact:addr>
type (postalInfo)"loc""int" is unsupported
<contact:name>(text)The person's full name
<contact:org>(text)Only specify an organisation if that's what the contact represents
<contact:addr><contact:street>* <contact:city> <contact:sp>? <contact:pc>? <contact:cc>
<contact:street>(text)All parts of the address before the town/city, one for each line
<contact:city>(text)
<contact:sp>(text)The state or province. Should not be present for GB contacts.
<contact:pc>(text)This must be correctly formatted if it's a GB postcode
<contact:cc>(country code)A two-letter ISO-3166-alpha-2 country code (eg. "GB", "US", "IE", or "DE")
<contact:voice>(phone number)An international-format phone number, +(country).(rest of number without spaces), eg. +44.3306600255
<contact:fax>(N/A)Unsupported
<contact:email>(an email address)
<contact:authInfo><contact:ext>Ignored
<contact:ext><ext-contact:null>
<ext-contact:null>(empty)
<contact:disclosure>(N/A)Unsupported
<extension><ext-contact:updateExtension>
<ext-contact:updateExtension><ext-contact:person> <ext-contact:organisationType>? <ext-contact:telephone>*
<ext-contact:person><ext-contact:salutation> <ext-contact:surname> <ext-contact:otherNames> <ext-contact:dateOfBirth>?
<ext-contact:salutation>gender"Mr", "Mrs", "Ms", "Miss" or "Dr"
gender"male", "female" or "unknown"This is just to get the pronoun right.
<ext-contact:surname>(text)The person's family name, eg. "Mozart".
<ext-contact:otherNames>(text)All name components apart from the surname, eg. "Wolfgang Amadeus"
<ext-contact:dateOfBirth>(date)An ISO-8601 date string (eg. "2009-12-13"). Some registries require this (for individuals), however none of the registries we use do at this time.
<ext-contact:organisationType>"company" or "nonprofit"
<ext-contact:telephone>type(phone number)Use to provide a non-default phone number
type (telephone)"mobile"

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-contact="http://www.heartinternet.co.uk/whapi/ext-contact-2.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
  <command>
    <update>
      <contact:update>
        <contact:id>e7497652678283f0</contact:id>
        <contact:chg>
          <contact:postalInfo type="loc">
            <contact:name>John Doe</contact:name>
            <contact:org>John Doe Ltd</contact:org>
            <contact:addr>
              <contact:street>1 Milky Way</contact:street>
              <contact:street>Universe Street</contact:street>
              <contact:city>Solarton</contact:city>
              <contact:pc>T9 9TT</contact:pc>
              <contact:cc>GB</contact:cc>
            </contact:addr>
          </contact:postalInfo>
          <contact:voice>+44.1112222222</contact:voice>
          <contact:email>john@doe.example.org</contact:email>
          <contact:authInfo>
            <contact:ext>
              <ext-contact:null/>
            </contact:ext>
          </contact:authInfo>
        </contact:chg>
      </contact:update>
    </update>
    <extension>
      <ext-contact:updateExtension>
        <ext-contact:person>
          <ext-contact:salutation gender="male">Mr</ext-contact:salutation>
          <ext-contact:surname>Doe</ext-contact:surname>
          <ext-contact:otherNames>John</ext-contact:otherNames>
          <ext-contact:dateOfBirth>1980-12-20</ext-contact:dateOfBirth>
        </ext-contact:person>
        <ext-contact:organisationType>company</ext-contact:organisationType>
        <ext-contact:telephone type="mobile">+44.7772222222</ext-contact:telephone>
      </ext-contact:updateExtension>
    </extension>
    <clTRID>44ddbffbf49558fc19713f81ed76a94e</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_contact_ns = "http://www.heartinternet.co.uk/whapi/ext-contact-2.0";
  my $contact_ns = "urn:ietf:params:xml:ns:contact-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_contact_ns => "ext-contact",
  $contact_ns => "contact",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('update');
        $w->startTag([$contact_ns, "update"]);
          $w->dataElement([$contact_ns, "id"], "e7497652678283f0");
          $w->startTag([$contact_ns, "chg"]);
            $w->startTag([$contact_ns, "postalInfo"], 'type' => "loc");
              $w->dataElement([$contact_ns, "name"], "John Doe");
              $w->dataElement([$contact_ns, "org"], "John Doe Ltd");
              $w->startTag([$contact_ns, "addr"]);
                $w->dataElement([$contact_ns, "street"], "1 Milky Way");
                $w->dataElement([$contact_ns, "street"], "Universe Street");
                $w->dataElement([$contact_ns, "city"], "Solarton");
                $w->dataElement([$contact_ns, "pc"], "T9 9TT");
                $w->dataElement([$contact_ns, "cc"], "GB");
              $w->endTag();
            $w->endTag();
            $w->dataElement([$contact_ns, "voice"], "+44.1112222222");
            $w->dataElement([$contact_ns, "email"], "john\x40doe.example.org");
            $w->startTag([$contact_ns, "authInfo"]);
              $w->startTag([$contact_ns, "ext"]);
                $w->emptyTag([$ext_contact_ns, "null"]);
              $w->endTag();
            $w->endTag();
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_contact_ns, "updateExtension"]);
          $w->startTag([$ext_contact_ns, "person"]);
            $w->dataElement([$ext_contact_ns, "salutation"], "Mr", 'gender' => "male");
            $w->dataElement([$ext_contact_ns, "surname"], "Doe");
            $w->dataElement([$ext_contact_ns, "otherNames"], "John");
            $w->dataElement([$ext_contact_ns, "dateOfBirth"], "1980-12-20");
          $w->endTag();
          $w->dataElement([$ext_contact_ns, "organisationType"], "company");
          $w->dataElement([$ext_contact_ns, "telephone"], "+44.7772222222", 'type' => "mobile");
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "44ddbffbf49558fc19713f81ed76a94e");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_contact_ns = "http://www.heartinternet.co.uk/whapi/ext-contact-2.0";
  $contact_ns = "urn:ietf:params:xml:ns:contact-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'update');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($contact_ns, "update");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($contact_ns, "id");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('e7497652678283f0'));
          $c = $doc->createElementNS($contact_ns, "chg");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($contact_ns, "postalInfo");$c->setAttribute('type', "loc"); 
            $l->appendChild($c); $l = $c;
              $c = $doc->createElementNS($contact_ns, "name");
              $l->appendChild($c);
              $c->appendChild($doc->createTextNode('John Doe'));
              $c = $doc->createElementNS($contact_ns, "org");
              $l->appendChild($c);
              $c->appendChild($doc->createTextNode('John Doe Ltd'));
              $c = $doc->createElementNS($contact_ns, "addr");
              $l->appendChild($c); $l = $c;
                $c = $doc->createElementNS($contact_ns, "street");
                $l->appendChild($c);
                $c->appendChild($doc->createTextNode('1 Milky Way'));
                $c = $doc->createElementNS($contact_ns, "street");
                $l->appendChild($c);
                $c->appendChild($doc->createTextNode('Universe Street'));
                $c = $doc->createElementNS($contact_ns, "city");
                $l->appendChild($c);
                $c->appendChild($doc->createTextNode('Solarton'));
                $c = $doc->createElementNS($contact_ns, "pc");
                $l->appendChild($c);
                $c->appendChild($doc->createTextNode('T9 9TT'));
                $c = $doc->createElementNS($contact_ns, "cc");
                $l->appendChild($c);
                $c->appendChild($doc->createTextNode('GB'));
              $l = $l->parentNode;
            $l = $l->parentNode;
            $c = $doc->createElementNS($contact_ns, "voice");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('+44.1112222222'));
            $c = $doc->createElementNS($contact_ns, "email");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('john@doe.example.org'));
            $c = $doc->createElementNS($contact_ns, "authInfo");
            $l->appendChild($c); $l = $c;
              $c = $doc->createElementNS($contact_ns, "ext");
              $l->appendChild($c); $l = $c;
                $c = $doc->createElementNS($ext_contact_ns, "null");
                $l->appendChild($c);
              $l = $l->parentNode;
            $l = $l->parentNode;
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_contact_ns, "updateExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_contact_ns, "person");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($ext_contact_ns, "salutation");$c->setAttribute('gender', "male"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Mr'));
            $c = $doc->createElementNS($ext_contact_ns, "surname");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Doe'));
            $c = $doc->createElementNS($ext_contact_ns, "otherNames");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('John'));
            $c = $doc->createElementNS($ext_contact_ns, "dateOfBirth");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('1980-12-20'));
          $l = $l->parentNode;
          $c = $doc->createElementNS($ext_contact_ns, "organisationType");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('company'));
          $c = $doc->createElementNS($ext_contact_ns, "telephone");$c->setAttribute('type', "mobile"); 
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('+44.7772222222'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('44ddbffbf49558fc19713f81ed76a94e'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("contact", "urn:ietf:params:xml:ns:contact-1.0")
  current = current.add_element('epp', {'xmlns:ext-contact' => "http://www.heartinternet.co.uk/whapi/ext-contact-2.0"})
    current = current.add_element('command', {})
      current = current.add_element('update', {})
        current = current.add_element('contact:update', {})
          current.add_element('contact:id', {}).add_text("e7497652678283f0")
          current = current.add_element('contact:chg', {})
            current = current.add_element('contact:postalInfo', {'type' => "loc"})
              current.add_element('contact:name', {}).add_text("John Doe")
              current.add_element('contact:org', {}).add_text("John Doe Ltd")
              current = current.add_element('contact:addr', {})
                current.add_element('contact:street', {}).add_text("1 Milky Way")
                current.add_element('contact:street', {}).add_text("Universe Street")
                current.add_element('contact:city', {}).add_text("Solarton")
                current.add_element('contact:pc', {}).add_text("T9 9TT")
                current.add_element('contact:cc', {}).add_text("GB")
              current = current.parent
            current = current.parent
            current.add_element('contact:voice', {}).add_text("+44.1112222222")
            current.add_element('contact:email', {}).add_text("john\x40doe.example.org")
            current = current.add_element('contact:authInfo', {})
              current = current.add_element('contact:ext', {})
                current.add_element('ext-contact:null', {})
              current = current.parent
            current = current.parent
          current = current.parent
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-contact:updateExtension', {})
          current = current.add_element('ext-contact:person', {})
            current.add_element('ext-contact:salutation', {'gender' => "male"}).add_text("Mr")
            current.add_element('ext-contact:surname', {}).add_text("Doe")
            current.add_element('ext-contact:otherNames', {}).add_text("John")
            current.add_element('ext-contact:dateOfBirth', {}).add_text("1980-12-20")
          current = current.parent
          current.add_element('ext-contact:organisationType', {}).add_text("company")
          current.add_element('ext-contact:telephone', {'type' => "mobile"}).add_text("+44.7772222222")
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("44ddbffbf49558fc19713f81ed76a94e")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Examples

XML
<?xml version='1.0'?>
<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>Contact created successfully</msg>
    </result>
    <resData>
      <contact:creData>
        <contact:id>9728bb9376f22515</contact:id>
        <contact:crDate>2001-03-05T00:00:00Z</contact:crDate>
      </contact:creData>
    </resData>
    <trID>
      <clTRID>44ddbffbf49558fc19713f81ed76a94e</clTRID>
      <svTRID>test-9e70cdcb5db7261731cbf99b0f34a998</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:contact' => 'urn:ietf:params:xml:ns:contact-1.0',
      'response' => {
          'trID' => {
             'clTRID' => '44ddbffbf49558fc19713f81ed76a94e',
             'svTRID' => 'test-9e70cdcb5db7261731cbf99b0f34a998'
           },
          'resData' => {
             'contact:creData' => {
                  'contact:crDate' => '2001-03-05T00:00:00Z',
                  'contact:id' => '9728bb9376f22515'
                   }
              },
          'result' => {
            'msg' => 'Contact created successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:contact] => urn:ietf:params:xml:ns:contact-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Contact created successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => contact:creData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => contact:id
              [type] => complete
              [level] => 5
              [value] => 9728bb9376f22515
          )
  
      [8] => Array
          (
              [tag] => contact:crDate
              [type] => complete
              [level] => 5
              [value] => 2001-03-05T00:00:00Z
          )
  
      [9] => Array
          (
              [tag] => contact:creData
              [type] => close
              [level] => 4
          )
  
      [10] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 44ddbffbf49558fc19713f81ed76a94e
          )
  
      [13] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-9e70cdcb5db7261731cbf99b0f34a998
          )
  
      [14] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [15] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [16] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["contact"] = "urn:ietf:params:xml:ns:contact-1.0"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Contact created successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "creData"
                                                   (...).children[0].name = "id"
                                                               (...).children[0].to_s = "9728bb9376f22515"
                                                   (...).children[1].name = "crDate"
                                                               (...).children[0].to_s = "2001-03-05T00:00:00Z"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "44ddbffbf49558fc19713f81ed76a94e"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-9e70cdcb5db7261731cbf99b0f34a998"
  result.children[2].to_s = " \n"

DOMAIN NAME COMMANDS [^Back to contents]

Domain Lookup [^Back to contents]

This checks a domain name or series of domain names and returns a response indicating whether each is registered (implying transferable), available (implying registrable) or unknown (timeout, invalid, etc).

At least one of the extensions you specify must be the one which matches the domain name provided, eg. you can't ask for .com, .net and .org for domainname.co.uk but you can ask for .com, .co.uk, .net and .org for domainname.co.uk. You can optionally provide no TLDs at all, and only the exact domain name given will be checked.

You must include the <ext-domain:checkExtension> element (possibly empty) for the search to work.

Please bear in mind that you will get no response until all lookups are complete.

Supported TLDs

.co.uk
.org.uk
.me.uk
.com
.net
.org
.info
.academy
.bike
.biz
.builders
.cab
.camera
.camp
.careers
.cc
.center
.clothing
.co
.coffee
.company
.computer
.construction
.contractors
.diamonds
.directory
.domains
.education
.email
.enterprises
.equipment
.estate
.eu
.eu.com
.florist
.gallery
.gb.com
.gb.net
.glass
.graphics
.guru
.holdings
.house
.institute
.international
.it
.kitchen
.land
.lighting
.limo
.management
.me
.mobi
.name
.photography
.photos
.plumbing
.pw
.recipes
.repair
.shoes
.singles
.solar
.solutions
.support
.sx
.systems
.technology
.tel
.tips
.today
.training
.tv
.uk.com
.uk.net
.ventures
.voyage
.xxx

Categorised domain pricing

Some new domains from certain registries (currently the Donuts registry only, which handles several new TLDs) have non-standardised pricing. These will always appear as unavailable in the main check results to ensure that existing clients will not offer them for a standard price, however if they are available they will have a reason code which is the category name and also appear in <ext-domain:categorisedChkData> in <extension> with the sale price.

Trademark claims

Some domains may be marked as unavailable with the reason "trademark". This indicates that you should log in to https://customer.heartinternet.co.uk/ and manually search there if you would like to order the domain because it needs to present a warning to you. This overrides any other reasons which may apply (eg. pricing category).

.uk Pre Order

At the time of writing, .uk domains are a special case in that the end user may not order them unless they already own the counterpart .co.uk domain (or sometimes other .uk domains). To properly check for these, you must include all the counterpart .*.uk domains that they have registered through you with the request. For example, if your customer is searching for example.uk, and you manage the registrations of example.me.uk and example.org.uk for them (through us), you would include example.me.uk and example.org.uk in a special section of the request.

The domain check system is not responsible for verifying that your customer does own the listed domains, you must check this in your own code.

What to send

Syntax

KeyAttributesContentsNotes
<command><check> <extension>?
<check><domain:check>
<domain:check><domain:name>
<domain:name>(A domain name)
<extension><ext-domain:checkExtension>
<ext-domain:checkExtension><ext-domain:ext>* <ext-domain:includePreOrder>? <ext-domain:entitlement>?
<ext-domain:ext>(text)A TLD including a leading dot, eg .co.uk or .tel
<ext-domain:includePreOrder>(empty)Requests pre order domains in the results
<ext-domain:entitlement><ext-domain:registeredName>*
<ext-domain:registeredName>(a domain name)A domain that the end user has already registered, eg foo.co.uk

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <check>
      <domain:check>
        <domain:name>foo.com</domain:name>
      </domain:check>
    </check>
    <extension>
      <ext-domain:checkExtension>
        <ext-domain:ext>.com</ext-domain:ext>
        <ext-domain:ext>.net</ext-domain:ext>
        <ext-domain:ext>.org</ext-domain:ext>
        <ext-domain:ext>.plumbing</ext-domain:ext>
        <ext-domain:ext>.uk</ext-domain:ext>
        <ext-domain:includePreOrder/>
        <ext-domain:entitlement>
          <ext-domain:registeredName>foo.co.uk</ext-domain:registeredName>
          <ext-domain:registeredName>foo.org.uk</ext-domain:registeredName>
          <ext-domain:registeredName>foo.me.uk</ext-domain:registeredName>
        </ext-domain:entitlement>
      </ext-domain:checkExtension>
    </extension>
    <clTRID>6f2d7447511677c62631e4bdb9563172</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('check');
        $w->startTag([$domain_ns, "check"]);
          $w->dataElement([$domain_ns, "name"], "foo.com");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_domain_ns, "checkExtension"]);
          $w->dataElement([$ext_domain_ns, "ext"], ".com");
          $w->dataElement([$ext_domain_ns, "ext"], ".net");
          $w->dataElement([$ext_domain_ns, "ext"], ".org");
          $w->dataElement([$ext_domain_ns, "ext"], ".plumbing");
          $w->dataElement([$ext_domain_ns, "ext"], ".uk");
          $w->emptyTag([$ext_domain_ns, "includePreOrder"]);
          $w->startTag([$ext_domain_ns, "entitlement"]);
            $w->dataElement([$ext_domain_ns, "registeredName"], "foo.co.uk");
            $w->dataElement([$ext_domain_ns, "registeredName"], "foo.org.uk");
            $w->dataElement([$ext_domain_ns, "registeredName"], "foo.me.uk");
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "6f2d7447511677c62631e4bdb9563172");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'check');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "check");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('foo.com'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "checkExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_domain_ns, "ext");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('.com'));
          $c = $doc->createElementNS($ext_domain_ns, "ext");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('.net'));
          $c = $doc->createElementNS($ext_domain_ns, "ext");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('.org'));
          $c = $doc->createElementNS($ext_domain_ns, "ext");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('.plumbing'));
          $c = $doc->createElementNS($ext_domain_ns, "ext");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('.uk'));
          $c = $doc->createElementNS($ext_domain_ns, "includePreOrder");
          $l->appendChild($c);
          $c = $doc->createElementNS($ext_domain_ns, "entitlement");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($ext_domain_ns, "registeredName");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('foo.co.uk'));
            $c = $doc->createElementNS($ext_domain_ns, "registeredName");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('foo.org.uk'));
            $c = $doc->createElementNS($ext_domain_ns, "registeredName");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('foo.me.uk'));
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('6f2d7447511677c62631e4bdb9563172'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('check', {})
        current = current.add_element('domain:check', {})
          current.add_element('domain:name', {}).add_text("foo.com")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-domain:checkExtension', {})
          current.add_element('ext-domain:ext', {}).add_text(".com")
          current.add_element('ext-domain:ext', {}).add_text(".net")
          current.add_element('ext-domain:ext', {}).add_text(".org")
          current.add_element('ext-domain:ext', {}).add_text(".plumbing")
          current.add_element('ext-domain:ext', {}).add_text(".uk")
          current.add_element('ext-domain:includePreOrder', {})
          current = current.add_element('ext-domain:entitlement', {})
            current.add_element('ext-domain:registeredName', {}).add_text("foo.co.uk")
            current.add_element('ext-domain:registeredName', {}).add_text("foo.org.uk")
            current.add_element('ext-domain:registeredName', {}).add_text("foo.me.uk")
          current = current.parent
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("6f2d7447511677c62631e4bdb9563172")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><domain:chkData>
<domain:chkData><domain:cd>*
<domain:cd><domain:name> <domain:reason>?
<domain:name>avail(A domain name)
avail(text)"1" if it's registerable, "0" otherwise.
<domain:reason>"registered" if transferrable; "c:" followed by a category name if in a special pricing category; "trademark" if a trademark claim exists; "qualified" if the .uk domain can be pre ordered ; "unknown" otherwiseOnly applies when avail is 0
<extension><ext-domain:categorisedChkData>
<ext-domain:categorisedChkData><ext-domain:cd>*
<ext-domain:cd><ext-domain:name>
<ext-domain:name>price(domain name)
price(The price you pay)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:chkData>
        <domain:cd>
          <domain:name avail="1">foo.com</domain:name>
        </domain:cd>
        <domain:cd>
          <domain:name avail="0">foo.net</domain:name>
          <domain:reason>registered</domain:reason>
        </domain:cd>
        <domain:cd>
          <domain:name avail="0">foo.org</domain:name>
          <domain:reason>unknown</domain:reason>
        </domain:cd>
        <domain:cd>
          <domain:name avail="0">foo.plumbing</domain:name>
          <domain:reason>c:category7</domain:reason>
        </domain:cd>
        <domain:cd>
          <domain:name avail="1">foo.uk</domain:name>
          <domain:reason>qualified</domain:reason>
        </domain:cd>
        <domain:cd>
          <domain:name avail="0">foo.uk</domain:name>
          <domain:reason>unqualified:foo.co.uk</domain:reason>
        </domain:cd>
      </domain:chkData>
    </resData>
    <extension>
      <ext-domain:categorisedChkData>
        <ext-domain:cd>
          <ext-domain:name price="1050.37">foo.plumbing</ext-domain:name>
        </ext-domain:cd>
      </ext-domain:categorisedChkData>
    </extension>
    <trID>
      <clTRID>6f2d7447511677c62631e4bdb9563172</clTRID>
      <svTRID>test-da76f89aacec9861b89bf093fc120566</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'extension' => {
               'ext-domain:categorisedChkData' => {
                      'ext-domain:cd' => {
                            'ext-domain:name' => {
                                 'content' => 'foo.plumbing',
                                 'price' => '1050.37'
                                  }
                             }
                       }
             },
          'trID' => {
             'clTRID' => '6f2d7447511677c62631e4bdb9563172',
             'svTRID' => 'test-da76f89aacec9861b89bf093fc120566'
           },
          'resData' => {
             'domain:chkData' => {
                    'domain:cd' => [
                      {
                        'domain:name' => {
                            'content' => 'foo.com',
                            'avail' => '1'
                             }
                      },
                      {
                        'domain:reason' => 'registered',
                        'domain:name' => {
                            'content' => 'foo.net',
                            'avail' => '0'
                             }
                      },
                      {
                        'domain:reason' => 'unknown',
                        'domain:name' => {
                            'content' => 'foo.org',
                            'avail' => '0'
                             }
                      },
                      {
                        'domain:reason' => 'c:category7',
                        'domain:name' => {
                            'content' => 'foo.plumbing',
                            'avail' => '0'
                             }
                      },
                      {
                        'domain:reason' => 'qualified',
                        'domain:name' => {
                            'content' => 'foo.uk',
                            'avail' => '1'
                             }
                      },
                      {
                        'domain:reason' => 'unqualified:foo.co.uk',
                        'domain:name' => {
                            'content' => 'foo.uk',
                            'avail' => '0'
                             }
                      }
                       ]
                  }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => domain:chkData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => domain:cd
              [type] => open
              [level] => 5
          )
  
      [8] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [avail] => 1
                  )
  
              [value] => foo.com
          )
  
      [9] => Array
          (
              [tag] => domain:cd
              [type] => close
              [level] => 5
          )
  
      [10] => Array
          (
              [tag] => domain:cd
              [type] => open
              [level] => 5
          )
  
      [11] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [avail] => 0
                  )
  
              [value] => foo.net
          )
  
      [12] => Array
          (
              [tag] => domain:reason
              [type] => complete
              [level] => 6
              [value] => registered
          )
  
      [13] => Array
          (
              [tag] => domain:cd
              [type] => close
              [level] => 5
          )
  
      [14] => Array
          (
              [tag] => domain:cd
              [type] => open
              [level] => 5
          )
  
      [15] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [avail] => 0
                  )
  
              [value] => foo.org
          )
  
      [16] => Array
          (
              [tag] => domain:reason
              [type] => complete
              [level] => 6
              [value] => unknown
          )
  
      [17] => Array
          (
              [tag] => domain:cd
              [type] => close
              [level] => 5
          )
  
      [18] => Array
          (
              [tag] => domain:cd
              [type] => open
              [level] => 5
          )
  
      [19] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [avail] => 0
                  )
  
              [value] => foo.plumbing
          )
  
      [20] => Array
          (
              [tag] => domain:reason
              [type] => complete
              [level] => 6
              [value] => c:category7
          )
  
      [21] => Array
          (
              [tag] => domain:cd
              [type] => close
              [level] => 5
          )
  
      [22] => Array
          (
              [tag] => domain:cd
              [type] => open
              [level] => 5
          )
  
      [23] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [avail] => 1
                  )
  
              [value] => foo.uk
          )
  
      [24] => Array
          (
              [tag] => domain:reason
              [type] => complete
              [level] => 6
              [value] => qualified
          )
  
      [25] => Array
          (
              [tag] => domain:cd
              [type] => close
              [level] => 5
          )
  
      [26] => Array
          (
              [tag] => domain:cd
              [type] => open
              [level] => 5
          )
  
      [27] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [avail] => 0
                  )
  
              [value] => foo.uk
          )
  
      [28] => Array
          (
              [tag] => domain:reason
              [type] => complete
              [level] => 6
              [value] => unqualified:foo.co.uk
          )
  
      [29] => Array
          (
              [tag] => domain:cd
              [type] => close
              [level] => 5
          )
  
      [30] => Array
          (
              [tag] => domain:chkData
              [type] => close
              [level] => 4
          )
  
      [31] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [32] => Array
          (
              [tag] => extension
              [type] => open
              [level] => 3
          )
  
      [33] => Array
          (
              [tag] => ext-domain:categorisedChkData
              [type] => open
              [level] => 4
          )
  
      [34] => Array
          (
              [tag] => ext-domain:cd
              [type] => open
              [level] => 5
          )
  
      [35] => Array
          (
              [tag] => ext-domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [price] => 1050.37
                  )
  
              [value] => foo.plumbing
          )
  
      [36] => Array
          (
              [tag] => ext-domain:cd
              [type] => close
              [level] => 5
          )
  
      [37] => Array
          (
              [tag] => ext-domain:categorisedChkData
              [type] => close
              [level] => 4
          )
  
      [38] => Array
          (
              [tag] => extension
              [type] => close
              [level] => 3
          )
  
      [39] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [40] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 6f2d7447511677c62631e4bdb9563172
          )
  
      [41] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-da76f89aacec9861b89bf093fc120566
          )
  
      [42] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [43] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [44] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "chkData"
                                                   (...).children[0].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["avail"] = "1"
                                                                           (...).children[0].to_s = "foo.com"
                                                   (...).children[1].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["avail"] = "0"
                                                                           (...).children[0].to_s = "foo.net"
                                                               (...).children[1].name = "reason"
                                                                           (...).children[0].to_s = "registered"
                                                   (...).children[2].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["avail"] = "0"
                                                                           (...).children[0].to_s = "foo.org"
                                                               (...).children[1].name = "reason"
                                                                           (...).children[0].to_s = "unknown"
                                                   (...).children[3].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["avail"] = "0"
                                                                           (...).children[0].to_s = "foo.plumbing"
                                                               (...).children[1].name = "reason"
                                                                           (...).children[0].to_s = "c:category7"
                                                   (...).children[4].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["avail"] = "1"
                                                                           (...).children[0].to_s = "foo.uk"
                                                               (...).children[1].name = "reason"
                                                                           (...).children[0].to_s = "qualified"
                                                   (...).children[5].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["avail"] = "0"
                                                                           (...).children[0].to_s = "foo.uk"
                                                               (...).children[1].name = "reason"
                                                                           (...).children[0].to_s = "unqualified:foo.co.uk"
                           (...).children[2].name = "extension"
                                       (...).children[0].name = "categorisedChkData"
                                                   (...).children[0].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["price"] = "1050.37"
                                                                           (...).children[0].to_s = "foo.plumbing"
                           (...).children[3].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "6f2d7447511677c62631e4bdb9563172"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-da76f89aacec9861b89bf093fc120566"
  result.children[2].to_s = " \n"

Domain Lookup (other) [^Back to contents]

This will perform a domain lookup as with "Domain Lookup" but also search for related domain names: either expensive premium domains or suggested alternative normal domains.

When using this, you must be careful to handle premium domains specially to avoid quoting a price which may be well below the price you have to pay.

As this function will take significantly longer than a standard domain lookup, it's recommended that you use this only when you really want the premium/suggestion results, and not combined with a standard domain lookup.

What to send

Syntax

KeyAttributesContentsNotes
<command><check> <extension>
<check><domain:check>
<domain:check><domain:name>
<domain:name>(A domain name)
<extension><ext-domain:checkExtension>
<ext-domain:checkExtension><ext-domain:includePremium>? <ext-domain:includeSuggestion>?
<ext-domain:includePremium>(empty)Requests premium domains in the results
<ext-domain:includeSuggestion>(empty)Requests suggested domains in the results

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <check>
      <domain:check>
        <domain:name>foo.com</domain:name>
      </domain:check>
    </check>
    <extension>
      <ext-domain:checkExtension>
        <ext-domain:includePremium/>
        <ext-domain:includeSuggestion/>
      </ext-domain:checkExtension>
    </extension>
    <clTRID>9d1d6227bc907a2b08c97df8cd924682</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('check');
        $w->startTag([$domain_ns, "check"]);
          $w->dataElement([$domain_ns, "name"], "foo.com");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_domain_ns, "checkExtension"]);
          $w->emptyTag([$ext_domain_ns, "includePremium"]);
          $w->emptyTag([$ext_domain_ns, "includeSuggestion"]);
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "9d1d6227bc907a2b08c97df8cd924682");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'check');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "check");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('foo.com'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "checkExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_domain_ns, "includePremium");
          $l->appendChild($c);
          $c = $doc->createElementNS($ext_domain_ns, "includeSuggestion");
          $l->appendChild($c);
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('9d1d6227bc907a2b08c97df8cd924682'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('check', {})
        current = current.add_element('domain:check', {})
          current.add_element('domain:name', {}).add_text("foo.com")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-domain:checkExtension', {})
          current.add_element('ext-domain:includePremium', {})
          current.add_element('ext-domain:includeSuggestion', {})
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("9d1d6227bc907a2b08c97df8cd924682")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><domain:chkData>
<domain:chkData><domain:cd>*
<domain:cd><domain:name> <domain:reason>?
<domain:name>avail(A domain name)
avail(text)"1" if it's registerable, "0" otherwise.
<domain:reason>"registered" if transferrable; "unknown" otherwiseOnly applies when avail is 0
<extension><ext-domain:premiumChkData>?
<ext-domain:premiumChkData><ext-domain:cd>*
<ext-domain:cd><ext-domain:name>
<ext-domain:name>price(A domain name)
price(price)The price you will be charged (excluding VAT)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:chkData>
        <domain:cd>
          <domain:name avail="1">foo.com</domain:name>
        </domain:cd>
        <domain:cd>
          <domain:name avail="1">other-foo.net</domain:name>
        </domain:cd>
      </domain:chkData>
    </resData>
    <extension>
      <ext-domain:premiumChkData>
        <ext-domain:cd>
          <ext-domain:name price="399">foo.net</ext-domain:name>
        </ext-domain:cd>
        <ext-domain:cd>
          <ext-domain:name price="437">foo.org</ext-domain:name>
        </ext-domain:cd>
      </ext-domain:premiumChkData>
    </extension>
    <trID>
      <clTRID>9d1d6227bc907a2b08c97df8cd924682</clTRID>
      <svTRID>test-47f653caa27a49ba034d3da1b3a5b8f0</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'extension' => {
               'ext-domain:premiumChkData' => {
                     'ext-domain:cd' => [
                           {
                             'ext-domain:name' => {
                                  'content' => 'foo.net',
                                  'price' => '399'
                                }
                           },
                           {
                             'ext-domain:name' => {
                                  'content' => 'foo.org',
                                  'price' => '437'
                                }
                           }
                            ]
                      }
             },
          'trID' => {
             'clTRID' => '9d1d6227bc907a2b08c97df8cd924682',
             'svTRID' => 'test-47f653caa27a49ba034d3da1b3a5b8f0'
           },
          'resData' => {
             'domain:chkData' => {
                    'domain:cd' => [
                      {
                        'domain:name' => {
                            'content' => 'foo.com',
                            'avail' => '1'
                             }
                      },
                      {
                        'domain:name' => {
                            'content' => 'other-foo.net',
                            'avail' => '1'
                             }
                      }
                       ]
                  }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => domain:chkData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => domain:cd
              [type] => open
              [level] => 5
          )
  
      [8] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [avail] => 1
                  )
  
              [value] => foo.com
          )
  
      [9] => Array
          (
              [tag] => domain:cd
              [type] => close
              [level] => 5
          )
  
      [10] => Array
          (
              [tag] => domain:cd
              [type] => open
              [level] => 5
          )
  
      [11] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [avail] => 1
                  )
  
              [value] => other-foo.net
          )
  
      [12] => Array
          (
              [tag] => domain:cd
              [type] => close
              [level] => 5
          )
  
      [13] => Array
          (
              [tag] => domain:chkData
              [type] => close
              [level] => 4
          )
  
      [14] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [15] => Array
          (
              [tag] => extension
              [type] => open
              [level] => 3
          )
  
      [16] => Array
          (
              [tag] => ext-domain:premiumChkData
              [type] => open
              [level] => 4
          )
  
      [17] => Array
          (
              [tag] => ext-domain:cd
              [type] => open
              [level] => 5
          )
  
      [18] => Array
          (
              [tag] => ext-domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [price] => 399
                  )
  
              [value] => foo.net
          )
  
      [19] => Array
          (
              [tag] => ext-domain:cd
              [type] => close
              [level] => 5
          )
  
      [20] => Array
          (
              [tag] => ext-domain:cd
              [type] => open
              [level] => 5
          )
  
      [21] => Array
          (
              [tag] => ext-domain:name
              [type] => complete
              [level] => 6
              [attributes] => Array
                  (
                      [price] => 437
                  )
  
              [value] => foo.org
          )
  
      [22] => Array
          (
              [tag] => ext-domain:cd
              [type] => close
              [level] => 5
          )
  
      [23] => Array
          (
              [tag] => ext-domain:premiumChkData
              [type] => close
              [level] => 4
          )
  
      [24] => Array
          (
              [tag] => extension
              [type] => close
              [level] => 3
          )
  
      [25] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [26] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 9d1d6227bc907a2b08c97df8cd924682
          )
  
      [27] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-47f653caa27a49ba034d3da1b3a5b8f0
          )
  
      [28] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [29] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [30] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "chkData"
                                                   (...).children[0].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["avail"] = "1"
                                                                           (...).children[0].to_s = "foo.com"
                                                   (...).children[1].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["avail"] = "1"
                                                                           (...).children[0].to_s = "other-foo.net"
                           (...).children[2].name = "extension"
                                       (...).children[0].name = "premiumChkData"
                                                   (...).children[0].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["price"] = "399"
                                                                           (...).children[0].to_s = "foo.net"
                                                   (...).children[1].name = "cd"
                                                               (...).children[0].name = "name"
                                                                           (...).attributes["price"] = "437"
                                                                           (...).children[0].to_s = "foo.org"
                           (...).children[3].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "9d1d6227bc907a2b08c97df8cd924682"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-47f653caa27a49ba034d3da1b3a5b8f0"
  result.children[2].to_s = " \n"

Register Domain Names [^Back to contents]

This interface can be used as an alternative to the domain robot for registration of domain names. Internally it provides the same functions.

For all domain names, you must provide a contact ID, the number of years, and the domain name. Registering multiple domain names at once is not supported, because that would make error reports from the API difficult to deal with. You can send multiple registrations in a row.

You can control how to handle the order through the <ext-domain:registrationMethod> element. For "credits" (the default), immediate registration will be attempted, subtracting domain credits of the appropriate type or raising an error if you don't have enough. For "basket", the order will just be prepared for you to complete at https://customer.heartinternet.co.uk/. You can specify multiple registration methods, in which case they'll be tried in order, however this is only meaningful with "credits" followed by "basket", and the operation will still abort if the domain type supports credits and you don't have enough.

If you're including domain privacy, that will always use domain credits, and <domain:registrationMethod> does not affect this.

Certain domains require security details from the registrant, you will need to supply them in the API call for the registration to succeed. If you supply security details and the domain does not require them, the details will be discarded. Please note that you can register a domain to a contact without supplying security details if you have supplied security details previously for the same contact. Security details should currently consist of at least three security question/answer values.

Current security questions are (question1) "What is your mother's maiden name?", (question2) "What town were you born in?", (question3) "What was the name of your first pet?", (question4) "What is your favourite film?", (question5) "What was the first concert you saw?". You will need to provide the question code in the question attribute of the <ext-domain:securityChallenge> element.

If you want to use the domain control panel, you can use the <domain:pw> element to set the password to use. If empty or insufficiently strong, this value will be automatically generated. Please note that domains which are on hosting packages may not have a separate domain control panel password; in that case the password provided will be ignored. If a password has been generated for whatever reason, it will be included in the response.

On the test system, success will be emulated within 1 hour of the request.

What to send

Syntax

KeyAttributesContentsNotes
<command><create> <extension>
<create><domain:create>
<domain:create><domain:name> <domain:period> <domain:ns>? <domain:registrant> <domain:contact>* <domain:authInfo>
<domain:name>(A domain name)
<domain:period>unit(number)You must specify this even for domain names which have an implicit registration period.
unit"y" for years or "m" for monthsMust represent a whole number of years
<domain:ns>(N/A)Not implemented
<domain:registrant>(A contact ID)
<domain:contact>(N/A)Not implemented
<domain:authInfo><domain:pw>? <domain:ext>?
<domain:pw>(text)Domain control panel password.
<domain:ext>(empty)
<extension><ext-domain:createExtension>
<ext-domain:createExtension><ext-domain:privacy>? <ext-domain:registrationMechanism>* <ext-domain:registrantSecurityDetails>?
<ext-domain:privacy>(empty)Include this element to spend a privacy credit at the same time. Ignored if the domain type doesn't support privacy credits.
<ext-domain:registrationMechanism>"credits" or "basket"Set to "basket" to skip automatic registration and process the order yourself. See the description above.
<ext-domain:registrantSecurityDetails><ext-domain:securityChallenge>+Currently expected to be at least 3
<ext-domain:securityChallenge>question(text)
question(text)See notes.

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <create>
      <domain:create>
        <domain:name>one.example.org</domain:name>
        <domain:period unit="y">5</domain:period>
        <domain:registrant>4493a8a8c1f3bd10</domain:registrant>
        <domain:authInfo>
          <domain:pw>EprGIb/w</domain:pw>
        </domain:authInfo>
      </domain:create>
    </create>
    <extension>
      <ext-domain:createExtension>
        <ext-domain:privacy/>
        <ext-domain:registrationMechanism>credits</ext-domain:registrationMechanism>
        <ext-domain:registrationMechanism>basket</ext-domain:registrationMechanism>
        <ext-domain:registrantSecurityDetails>
          <ext-domain:securityChallenge question='question2'>Nottingham</ext-domain:securityChallenge>
          <ext-domain:securityChallenge question='question3'>Rex</ext-domain:securityChallenge>
          <ext-domain:securityChallenge question='question4'>Jurassic Park</ext-domain:securityChallenge>
        </ext-domain:registrantSecurityDetails>
      </ext-domain:createExtension>
    </extension>
    <clTRID>9624ed7007dfea9a81674193af21169e</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('create');
        $w->startTag([$domain_ns, "create"]);
          $w->dataElement([$domain_ns, "name"], "one.example.org");
          $w->dataElement([$domain_ns, "period"], "5", 'unit' => "y");
          $w->dataElement([$domain_ns, "registrant"], "4493a8a8c1f3bd10");
          $w->startTag([$domain_ns, "authInfo"]);
            $w->dataElement([$domain_ns, "pw"], "EprGIb/w");
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_domain_ns, "createExtension"]);
          $w->emptyTag([$ext_domain_ns, "privacy"]);
          $w->dataElement([$ext_domain_ns, "registrationMechanism"], "credits");
          $w->dataElement([$ext_domain_ns, "registrationMechanism"], "basket");
          $w->startTag([$ext_domain_ns, "registrantSecurityDetails"]);
            $w->dataElement([$ext_domain_ns, "securityChallenge"], "Nottingham", 'question' => "question2");
            $w->dataElement([$ext_domain_ns, "securityChallenge"], "Rex", 'question' => "question3");
            $w->dataElement([$ext_domain_ns, "securityChallenge"], "Jurassic Park", 'question' => "question4");
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "9624ed7007dfea9a81674193af21169e");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'create');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "create");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('one.example.org'));
          $c = $doc->createElementNS($domain_ns, "period");$c->setAttribute('unit', "y"); 
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('5'));
          $c = $doc->createElementNS($domain_ns, "registrant");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('4493a8a8c1f3bd10'));
          $c = $doc->createElementNS($domain_ns, "authInfo");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($domain_ns, "pw");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('EprGIb/w'));
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "createExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_domain_ns, "privacy");
          $l->appendChild($c);
          $c = $doc->createElementNS($ext_domain_ns, "registrationMechanism");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('credits'));
          $c = $doc->createElementNS($ext_domain_ns, "registrationMechanism");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('basket'));
          $c = $doc->createElementNS($ext_domain_ns, "registrantSecurityDetails");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($ext_domain_ns, "securityChallenge");$c->setAttribute('question', "question2"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Nottingham'));
            $c = $doc->createElementNS($ext_domain_ns, "securityChallenge");$c->setAttribute('question', "question3"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Rex'));
            $c = $doc->createElementNS($ext_domain_ns, "securityChallenge");$c->setAttribute('question', "question4"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Jurassic Park'));
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('9624ed7007dfea9a81674193af21169e'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('create', {})
        current = current.add_element('domain:create', {})
          current.add_element('domain:name', {}).add_text("one.example.org")
          current.add_element('domain:period', {'unit' => "y"}).add_text("5")
          current.add_element('domain:registrant', {}).add_text("4493a8a8c1f3bd10")
          current = current.add_element('domain:authInfo', {})
            current.add_element('domain:pw', {}).add_text("EprGIb/w")
          current = current.parent
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-domain:createExtension', {})
          current.add_element('ext-domain:privacy', {})
          current.add_element('ext-domain:registrationMechanism', {}).add_text("credits")
          current.add_element('ext-domain:registrationMechanism', {}).add_text("basket")
          current = current.add_element('ext-domain:registrantSecurityDetails', {})
            current.add_element('ext-domain:securityChallenge', {'question' => "question2"}).add_text("Nottingham")
            current.add_element('ext-domain:securityChallenge', {'question' => "question3"}).add_text("Rex")
            current.add_element('ext-domain:securityChallenge', {'question' => "question4"}).add_text("Jurassic Park")
          current = current.parent
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("9624ed7007dfea9a81674193af21169e")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><domain:creData>
<domain:creData><domain:name> <domain:crDate> <domain:exDate>?
<domain:name>The domain name
<domain:crDate>Date/timeNot always the date of registration
<domain:exDate>Date/timeThe currently expected expiry date
<extension><ext-domain:creData>
<ext-domain:creData><ext-domain:id> <ext-domain:authInfo>?
<ext-domain:id>(text)A unique identifier for the domain name
<ext-domain:authInfo><ext-domain:pw>
<ext-domain:pw>(text)Auto-generated domain control panel password

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command succeeded</msg>
    </result>
    <resData>
      <domain:creData>
        <domain:name>one.example.org</domain:name>
        <domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>
        <domain:exDate>2001-04-03T22:00:00.0Z</domain:exDate>
      </domain:creData>
    </resData>
    <extension>
      <ext-domain:creData>
        <ext-domain:id>a2e82e157c4acbcd</ext-domain:id>
        <ext-domain:authInfo>
          <ext-domain:pw>P+3z/c8l</ext-domain:pw>
        </ext-domain:authInfo>
      </ext-domain:creData>
    </extension>
    <trID>
      <clTRID>9624ed7007dfea9a81674193af21169e</clTRID>
      <svTRID>test-7b2478a311f6c598564778ec4520ae68</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'extension' => {
               'ext-domain:creData' => {
                    'ext-domain:authInfo' => {
                          'ext-domain:pw' => 'P+3z/c8l'
                           },
                    'ext-domain:id' => 'a2e82e157c4acbcd'
                     }
             },
          'trID' => {
             'clTRID' => '9624ed7007dfea9a81674193af21169e',
             'svTRID' => 'test-7b2478a311f6c598564778ec4520ae68'
           },
          'resData' => {
             'domain:creData' => {
                    'domain:exDate' => '2001-04-03T22:00:00.0Z',
                    'domain:crDate' => '1999-04-03T22:00:00.0Z',
                    'domain:name' => 'one.example.org'
                  }
              },
          'result' => {
            'msg' => 'Command succeeded',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command succeeded
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => domain:creData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 5
              [value] => one.example.org
          )
  
      [8] => Array
          (
              [tag] => domain:crDate
              [type] => complete
              [level] => 5
              [value] => 1999-04-03T22:00:00.0Z
          )
  
      [9] => Array
          (
              [tag] => domain:exDate
              [type] => complete
              [level] => 5
              [value] => 2001-04-03T22:00:00.0Z
          )
  
      [10] => Array
          (
              [tag] => domain:creData
              [type] => close
              [level] => 4
          )
  
      [11] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => extension
              [type] => open
              [level] => 3
          )
  
      [13] => Array
          (
              [tag] => ext-domain:creData
              [type] => open
              [level] => 4
          )
  
      [14] => Array
          (
              [tag] => ext-domain:id
              [type] => complete
              [level] => 5
              [value] => a2e82e157c4acbcd
          )
  
      [15] => Array
          (
              [tag] => ext-domain:authInfo
              [type] => open
              [level] => 5
          )
  
      [16] => Array
          (
              [tag] => ext-domain:pw
              [type] => complete
              [level] => 6
              [value] => P+3z/c8l
          )
  
      [17] => Array
          (
              [tag] => ext-domain:authInfo
              [type] => close
              [level] => 5
          )
  
      [18] => Array
          (
              [tag] => ext-domain:creData
              [type] => close
              [level] => 4
          )
  
      [19] => Array
          (
              [tag] => extension
              [type] => close
              [level] => 3
          )
  
      [20] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [21] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 9624ed7007dfea9a81674193af21169e
          )
  
      [22] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-7b2478a311f6c598564778ec4520ae68
          )
  
      [23] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [24] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [25] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command succeeded"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "creData"
                                                   (...).children[0].name = "name"
                                                               (...).children[0].to_s = "one.example.org"
                                                   (...).children[1].name = "crDate"
                                                               (...).children[0].to_s = "1999-04-03T22:00:00.0Z"
                                                   (...).children[2].name = "exDate"
                                                               (...).children[0].to_s = "2001-04-03T22:00:00.0Z"
                           (...).children[2].name = "extension"
                                       (...).children[0].name = "creData"
                                                   (...).children[0].name = "id"
                                                               (...).children[0].to_s = "a2e82e157c4acbcd"
                                                   (...).children[1].name = "authInfo"
                                                               (...).children[0].name = "pw"
                                                                           (...).children[0].to_s = "P+3z/c8l"
                           (...).children[3].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "9624ed7007dfea9a81674193af21169e"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-7b2478a311f6c598564778ec4520ae68"
  result.children[2].to_s = " \n"

Register Domain Names (Premium) [^Back to contents]

This interface can be used to place a premium domain name into your basket. It will not do anything else.

You must provide the quoted price to acknowledge that it matches the current price for the domain name. All other values are as "Register Domain Names".

Registration periods other than 1 year will be rejected.

What to send

Syntax

KeyAttributesContentsNotes
<command><create> <extension>
<create><domain:create>
<domain:create>(See "Register Domain Names")
<extension><ext-domain:createExtension>
<ext-domain:createExtension><ext-domain:premiumPrice>
<ext-domain:premiumPrice>(price)The quoted price

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <create>
      <domain:create>
        <domain:name>foo.net</domain:name>
        <domain:period unit="y">1</domain:period>
        <domain:registrant>4493a8a8c1f3bd10</domain:registrant>
        <domain:authInfo>
          <domain:pw>EprGIb/w</domain:pw>
        </domain:authInfo>
      </domain:create>
    </create>
    <extension>
      <ext-domain:createExtension>
        <ext-domain:premiumPrice>399</ext-domain:premiumPrice>
      </ext-domain:createExtension>
    </extension>
    <clTRID>a84e5924b79150575928d23cd9767470</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('create');
        $w->startTag([$domain_ns, "create"]);
          $w->dataElement([$domain_ns, "name"], "foo.net");
          $w->dataElement([$domain_ns, "period"], "1", 'unit' => "y");
          $w->dataElement([$domain_ns, "registrant"], "4493a8a8c1f3bd10");
          $w->startTag([$domain_ns, "authInfo"]);
            $w->dataElement([$domain_ns, "pw"], "EprGIb/w");
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_domain_ns, "createExtension"]);
          $w->dataElement([$ext_domain_ns, "premiumPrice"], "399");
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "a84e5924b79150575928d23cd9767470");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'create');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "create");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('foo.net'));
          $c = $doc->createElementNS($domain_ns, "period");$c->setAttribute('unit', "y"); 
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('1'));
          $c = $doc->createElementNS($domain_ns, "registrant");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('4493a8a8c1f3bd10'));
          $c = $doc->createElementNS($domain_ns, "authInfo");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($domain_ns, "pw");
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('EprGIb/w'));
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "createExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_domain_ns, "premiumPrice");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('399'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('a84e5924b79150575928d23cd9767470'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('create', {})
        current = current.add_element('domain:create', {})
          current.add_element('domain:name', {}).add_text("foo.net")
          current.add_element('domain:period', {'unit' => "y"}).add_text("1")
          current.add_element('domain:registrant', {}).add_text("4493a8a8c1f3bd10")
          current = current.add_element('domain:authInfo', {})
            current.add_element('domain:pw', {}).add_text("EprGIb/w")
          current = current.parent
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-domain:createExtension', {})
          current.add_element('ext-domain:premiumPrice', {}).add_text("399")
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("a84e5924b79150575928d23cd9767470")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><domain:creData>
<domain:creData>(see "Register Domain Names")
<extension>(see "Register Domain Names")

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command succeeded</msg>
    </result>
    <resData>
      <domain:creData>
        <domain:name>one.example.org</domain:name>
        <domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>
        <domain:exDate>2001-04-03T22:00:00.0Z</domain:exDate>
      </domain:creData>
    </resData>
    <extension>
      <ext-domain:creData>
        <ext-domain:id>a2e82e157c4acbcd</ext-domain:id>
        <ext-domain:authInfo>
          <ext-domain:pw>P+3z/c8l</ext-domain:pw>
        </ext-domain:authInfo>
      </ext-domain:creData>
    </extension>
    <trID>
      <clTRID>a84e5924b79150575928d23cd9767470</clTRID>
      <svTRID>test-1ca5e61b119cdeb9f4b8545f50ac7390</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'extension' => {
               'ext-domain:creData' => {
                    'ext-domain:authInfo' => {
                          'ext-domain:pw' => 'P+3z/c8l'
                           },
                    'ext-domain:id' => 'a2e82e157c4acbcd'
                     }
             },
          'trID' => {
             'clTRID' => 'a84e5924b79150575928d23cd9767470',
             'svTRID' => 'test-1ca5e61b119cdeb9f4b8545f50ac7390'
           },
          'resData' => {
             'domain:creData' => {
                    'domain:exDate' => '2001-04-03T22:00:00.0Z',
                    'domain:crDate' => '1999-04-03T22:00:00.0Z',
                    'domain:name' => 'one.example.org'
                  }
              },
          'result' => {
            'msg' => 'Command succeeded',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command succeeded
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => domain:creData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 5
              [value] => one.example.org
          )
  
      [8] => Array
          (
              [tag] => domain:crDate
              [type] => complete
              [level] => 5
              [value] => 1999-04-03T22:00:00.0Z
          )
  
      [9] => Array
          (
              [tag] => domain:exDate
              [type] => complete
              [level] => 5
              [value] => 2001-04-03T22:00:00.0Z
          )
  
      [10] => Array
          (
              [tag] => domain:creData
              [type] => close
              [level] => 4
          )
  
      [11] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => extension
              [type] => open
              [level] => 3
          )
  
      [13] => Array
          (
              [tag] => ext-domain:creData
              [type] => open
              [level] => 4
          )
  
      [14] => Array
          (
              [tag] => ext-domain:id
              [type] => complete
              [level] => 5
              [value] => a2e82e157c4acbcd
          )
  
      [15] => Array
          (
              [tag] => ext-domain:authInfo
              [type] => open
              [level] => 5
          )
  
      [16] => Array
          (
              [tag] => ext-domain:pw
              [type] => complete
              [level] => 6
              [value] => P+3z/c8l
          )
  
      [17] => Array
          (
              [tag] => ext-domain:authInfo
              [type] => close
              [level] => 5
          )
  
      [18] => Array
          (
              [tag] => ext-domain:creData
              [type] => close
              [level] => 4
          )
  
      [19] => Array
          (
              [tag] => extension
              [type] => close
              [level] => 3
          )
  
      [20] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [21] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => a84e5924b79150575928d23cd9767470
          )
  
      [22] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-1ca5e61b119cdeb9f4b8545f50ac7390
          )
  
      [23] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [24] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [25] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command succeeded"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "creData"
                                                   (...).children[0].name = "name"
                                                               (...).children[0].to_s = "one.example.org"
                                                   (...).children[1].name = "crDate"
                                                               (...).children[0].to_s = "1999-04-03T22:00:00.0Z"
                                                   (...).children[2].name = "exDate"
                                                               (...).children[0].to_s = "2001-04-03T22:00:00.0Z"
                           (...).children[2].name = "extension"
                                       (...).children[0].name = "creData"
                                                   (...).children[0].name = "id"
                                                               (...).children[0].to_s = "a2e82e157c4acbcd"
                                                   (...).children[1].name = "authInfo"
                                                               (...).children[0].name = "pw"
                                                                           (...).children[0].to_s = "P+3z/c8l"
                           (...).children[3].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "a84e5924b79150575928d23cd9767470"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-1ca5e61b119cdeb9f4b8545f50ac7390"
  result.children[2].to_s = " \n"

Transfer Domain Names [^Back to contents]

This interface can be used as an alternative to the domain robot for transfer of domain names. All requirements for registration of domain names apply, except that the number of years is implicit (0 in some cases, 1 in others) and immutable.

The <ext-domain:keepNameservers> option will attempt to make the post-transfer nameservers the same as the pre-transfer ones, so that you can transfer the registration without effectively transferring any services.

On success, you'll get a standardised EPP transfer status response. This gives an in-principle indication of the situation only, so the <acID> cannot be known and the <acDate> is an estimate of when the transfer should be confirmed by the owner in order to complete normally.

On the test system, success will be emulated within 1 hour of the request.

Please note that <transfer op="query"> is not supported.

What to send

Syntax

KeyAttributesContentsNotes
<command><transfer> <extension>
<transfer>op<domain:transfer>
op"request"
<domain:transfer><domain:name> <domain:period>? <domain:authInfo>
<domain:name>(A domain name)
<domain:period>N/AUnimplemented
<domain:authInfo>See "Registering Domain Names"
<extension><ext-domain:transferExtension>
<ext-domain:transferExtension><ext-domain:registrant> <ext-domain:keepNameservers>? <ext-domain:privacy>? <ext-domain:registrationMechanism>*
<ext-domain:registrant>(A contact ID)
<ext-domain:keepNameservers>(empty)Include this element to attempt to maintain the existing nameservers after transfer.
<ext-domain:privacy>(empty)See "Registering Domain Names"
<ext-domain:registrationMechanism>"credits" or "basket"See "Registering Domain Names"

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5">
  <command>
    <transfer op="request">
      <domain:transfer>
        <domain:name>one.example.org</domain:name>
        <domain:authInfo>
          <domain:ext>
            <ext-domain:null/>
          </domain:ext>
        </domain:authInfo>
      </domain:transfer>
    </transfer>
    <extension>
      <ext-domain:transferExtension>
        <ext-domain:registrant>1adbba7ac2272aba</ext-domain:registrant>
        <ext-domain:keepNameservers/>
      </ext-domain:transferExtension>
    </extension>
    <clTRID>bcbde461f536f92d9d824644fda9bf60</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $domain_ns => "domain",
  $ext_domain_ns => "ext-domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('transfer', 'op' => "request");
        $w->startTag([$domain_ns, "transfer"]);
          $w->dataElement([$domain_ns, "name"], "one.example.org");
          $w->startTag([$domain_ns, "authInfo"]);
            $w->startTag([$domain_ns, "ext"]);
              $w->emptyTag([$ext_domain_ns, "null"]);
            $w->endTag();
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_domain_ns, "transferExtension"]);
          $w->dataElement([$ext_domain_ns, "registrant"], "1adbba7ac2272aba");
          $w->emptyTag([$ext_domain_ns, "keepNameservers"]);
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "bcbde461f536f92d9d824644fda9bf60");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'transfer');$c->setAttribute('op', "request"); 
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "transfer");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('one.example.org'));
          $c = $doc->createElementNS($domain_ns, "authInfo");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($domain_ns, "ext");
            $l->appendChild($c); $l = $c;
              $c = $doc->createElementNS($ext_domain_ns, "null");
              $l->appendChild($c);
            $l = $l->parentNode;
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "transferExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_domain_ns, "registrant");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('1adbba7ac2272aba'));
          $c = $doc->createElementNS($ext_domain_ns, "keepNameservers");
          $l->appendChild($c);
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('bcbde461f536f92d9d824644fda9bf60'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('transfer', {'op' => "request"})
        current = current.add_element('domain:transfer', {})
          current.add_element('domain:name', {}).add_text("one.example.org")
          current = current.add_element('domain:authInfo', {})
            current = current.add_element('domain:ext', {})
              current.add_element('ext-domain:null', {})
            current = current.parent
          current = current.parent
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-domain:transferExtension', {})
          current.add_element('ext-domain:registrant', {}).add_text("1adbba7ac2272aba")
          current.add_element('ext-domain:keepNameservers', {})
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("bcbde461f536f92d9d824644fda9bf60")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><domain:trnData>
<domain:trnData><domain:name> <domain:trStatus> <domain:reID> <domain:reDate> <domain:acID> <domain:acDate> <domain:exDate>?
<domain:name>The domain name
<domain:trStatus>"pending"
<domain:reID>(text)Your identifier
<domain:reDate>(date/time)Now
<domain:acID>(N/A)Set to a meaningless value
<domain:acDate>(date/time)See description
<domain:exDate>N/ANot implemented
<extension><ext-domain:trnData>
<ext-domain:trnData><ext-domain:id> <ext-domain:authInfo>?
<ext-domain:id>(A domain ID)
<ext-domain:authInfo><ext-domain:pw>
<ext-domain:pw>(text)Auto-generated domain control panel password

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5">
  <response>
    <result code='1001'>
      <msg>Command succeeded; action pending</msg>
    </result>
    <resData>
      <domain:trnData>
        <domain:name>one.example.org</domain:name>
        <domain:trStatus>pending</domain:trStatus>
        <domain:reID>cdaeeb22304c975b</domain:reID>
        <domain:reDate>2000-06-08T22:00:00.0Z</domain:reDate>
        <domain:acID>UNKNOWN</domain:acID>
        <domain:acDate>2000-06-13T22:00:00.0Z</domain:acDate>
      </domain:trnData>
    </resData>
    <extension>
      <ext-domain:trnData>
        <ext-domain:id>f6a1725d5e0923e9</ext-domain:id>
        <ext-domain:authInfo>
          <ext-domain:pw>P+3z/c8l</ext-domain:pw>
        </ext-domain:authInfo>
      </ext-domain:trnData>
    </extension>
    <trID>
      <clTRID>bcbde461f536f92d9d824644fda9bf60</clTRID>
      <svTRID>test-15c4c828a09cea943af23ee30c86f993</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'extension' => {
               'ext-domain:trnData' => {
                    'ext-domain:authInfo' => {
                          'ext-domain:pw' => 'P+3z/c8l'
                           },
                    'ext-domain:id' => 'f6a1725d5e0923e9'
                     }
             },
          'trID' => {
             'clTRID' => 'bcbde461f536f92d9d824644fda9bf60',
             'svTRID' => 'test-15c4c828a09cea943af23ee30c86f993'
           },
          'resData' => {
             'domain:trnData' => {
                    'domain:acID' => 'UNKNOWN',
                    'domain:trStatus' => 'pending',
                    'domain:reID' => 'cdaeeb22304c975b',
                    'domain:reDate' => '2000-06-08T22:00:00.0Z',
                    'domain:acDate' => '2000-06-13T22:00:00.0Z',
                    'domain:name' => 'one.example.org'
                  }
              },
          'result' => {
            'msg' => 'Command succeeded; action pending',
            'code' => '1001'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1001
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command succeeded; action pending
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => domain:trnData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 5
              [value] => one.example.org
          )
  
      [8] => Array
          (
              [tag] => domain:trStatus
              [type] => complete
              [level] => 5
              [value] => pending
          )
  
      [9] => Array
          (
              [tag] => domain:reID
              [type] => complete
              [level] => 5
              [value] => cdaeeb22304c975b
          )
  
      [10] => Array
          (
              [tag] => domain:reDate
              [type] => complete
              [level] => 5
              [value] => 2000-06-08T22:00:00.0Z
          )
  
      [11] => Array
          (
              [tag] => domain:acID
              [type] => complete
              [level] => 5
              [value] => UNKNOWN
          )
  
      [12] => Array
          (
              [tag] => domain:acDate
              [type] => complete
              [level] => 5
              [value] => 2000-06-13T22:00:00.0Z
          )
  
      [13] => Array
          (
              [tag] => domain:trnData
              [type] => close
              [level] => 4
          )
  
      [14] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [15] => Array
          (
              [tag] => extension
              [type] => open
              [level] => 3
          )
  
      [16] => Array
          (
              [tag] => ext-domain:trnData
              [type] => open
              [level] => 4
          )
  
      [17] => Array
          (
              [tag] => ext-domain:id
              [type] => complete
              [level] => 5
              [value] => f6a1725d5e0923e9
          )
  
      [18] => Array
          (
              [tag] => ext-domain:authInfo
              [type] => open
              [level] => 5
          )
  
      [19] => Array
          (
              [tag] => ext-domain:pw
              [type] => complete
              [level] => 6
              [value] => P+3z/c8l
          )
  
      [20] => Array
          (
              [tag] => ext-domain:authInfo
              [type] => close
              [level] => 5
          )
  
      [21] => Array
          (
              [tag] => ext-domain:trnData
              [type] => close
              [level] => 4
          )
  
      [22] => Array
          (
              [tag] => extension
              [type] => close
              [level] => 3
          )
  
      [23] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [24] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => bcbde461f536f92d9d824644fda9bf60
          )
  
      [25] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-15c4c828a09cea943af23ee30c86f993
          )
  
      [26] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [27] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [28] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1001"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command succeeded; action pending"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "trnData"
                                                   (...).children[0].name = "name"
                                                               (...).children[0].to_s = "one.example.org"
                                                   (...).children[1].name = "trStatus"
                                                               (...).children[0].to_s = "pending"
                                                   (...).children[2].name = "reID"
                                                               (...).children[0].to_s = "cdaeeb22304c975b"
                                                   (...).children[3].name = "reDate"
                                                               (...).children[0].to_s = "2000-06-08T22:00:00.0Z"
                                                   (...).children[4].name = "acID"
                                                               (...).children[0].to_s = "UNKNOWN"
                                                   (...).children[5].name = "acDate"
                                                               (...).children[0].to_s = "2000-06-13T22:00:00.0Z"
                           (...).children[2].name = "extension"
                                       (...).children[0].name = "trnData"
                                                   (...).children[0].name = "id"
                                                               (...).children[0].to_s = "f6a1725d5e0923e9"
                                                   (...).children[1].name = "authInfo"
                                                               (...).children[0].name = "pw"
                                                                           (...).children[0].to_s = "P+3z/c8l"
                           (...).children[3].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "bcbde461f536f92d9d824644fda9bf60"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-15c4c828a09cea943af23ee30c86f993"
  result.children[2].to_s = " \n"

Renew Domain Names [^Back to contents]

This interface can be used as an alternative to the domain robot for renewal of domain names. All that's required is that the domain name is with us (registered or transferred successfully with us), and is not too far overdue for renewal.

You have to provide an estimation of the current expiry date, to avoid double-renewals. This only needs to be approximately equal (within 30 days) to or greater than the actual expiry date, so you can simply enter the current date if you need to.

Please note that the "basket" method here means simply that the renewal is set to "on expiry" in "Renew Services".

Please note that in most cases you may not have an expiry date over 10 years in the future.

What to send

Syntax

KeyAttributesContentsNotes
<command><renew> <extension>
<renew><domain:renew>
<domain:renew><domain:name> <domain:curExpDate> <domain:period>
<domain:name>(A domain name)
<domain:curExpDate>(date/time)See description
<domain:period>unit(number)See "Registering Domain Names"
<extension><ext-domain:renewExtension>
<ext-domain:renewExtension><ext-domain:registrationMechanism>*
<ext-domain:registrationMechanism>"credits" or "basket"See "Registering Domain Names"

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5">
  <command>
    <renew>
      <domain:renew>
        <domain:name>one.example.org</domain:name>
        <domain:curExpDate>2000-04-03</domain:curExpDate>
        <domain:period unit="y">2</domain:period>
      </domain:renew>
    </renew>
    <extension>
      <ext-domain:renewExtension>
        <ext-domain:registrationMechanism>credits</ext-domain:registrationMechanism>
      </ext-domain:renewExtension>
    </extension>
    <clTRID>53502c4dfaeb5b0c2bdb9e1f48d1b1fc</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $domain_ns => "domain",
  $ext_domain_ns => "ext-domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('renew');
        $w->startTag([$domain_ns, "renew"]);
          $w->dataElement([$domain_ns, "name"], "one.example.org");
          $w->dataElement([$domain_ns, "curExpDate"], "2000-04-03");
          $w->dataElement([$domain_ns, "period"], "2", 'unit' => "y");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_domain_ns, "renewExtension"]);
          $w->dataElement([$ext_domain_ns, "registrationMechanism"], "credits");
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "53502c4dfaeb5b0c2bdb9e1f48d1b1fc");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'renew');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "renew");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('one.example.org'));
          $c = $doc->createElementNS($domain_ns, "curExpDate");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('2000-04-03'));
          $c = $doc->createElementNS($domain_ns, "period");$c->setAttribute('unit', "y"); 
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('2'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "renewExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_domain_ns, "registrationMechanism");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('credits'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('53502c4dfaeb5b0c2bdb9e1f48d1b1fc'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('renew', {})
        current = current.add_element('domain:renew', {})
          current.add_element('domain:name', {}).add_text("one.example.org")
          current.add_element('domain:curExpDate', {}).add_text("2000-04-03")
          current.add_element('domain:period', {'unit' => "y"}).add_text("2")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-domain:renewExtension', {})
          current.add_element('ext-domain:registrationMechanism', {}).add_text("credits")
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("53502c4dfaeb5b0c2bdb9e1f48d1b1fc")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><domain:renData>
<domain:renData><domain:name> <domain:exDate>?
<domain:name>The domain name
<domain:exDate>The expected expiry dateNot provided

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command succeeded</msg>
    </result>
    <resData>
      <domain:renData>
        <domain:name>one.example.org</domain:name>
      </domain:renData>
    </resData>
    <trID>
      <clTRID>53502c4dfaeb5b0c2bdb9e1f48d1b1fc</clTRID>
      <svTRID>test-5e09843038e64b4e5b80f8ed1f03cde0</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'trID' => {
             'clTRID' => '53502c4dfaeb5b0c2bdb9e1f48d1b1fc',
             'svTRID' => 'test-5e09843038e64b4e5b80f8ed1f03cde0'
           },
          'resData' => {
             'domain:renData' => {
                    'domain:name' => 'one.example.org'
                  }
              },
          'result' => {
            'msg' => 'Command succeeded',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command succeeded
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => domain:renData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 5
              [value] => one.example.org
          )
  
      [8] => Array
          (
              [tag] => domain:renData
              [type] => close
              [level] => 4
          )
  
      [9] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [10] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [11] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 53502c4dfaeb5b0c2bdb9e1f48d1b1fc
          )
  
      [12] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-5e09843038e64b4e5b80f8ed1f03cde0
          )
  
      [13] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [14] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [15] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command succeeded"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "renData"
                                                   (...).children[0].name = "name"
                                                               (...).children[0].to_s = "one.example.org"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "53502c4dfaeb5b0c2bdb9e1f48d1b1fc"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-5e09843038e64b4e5b80f8ed1f03cde0"
  result.children[2].to_s = " \n"

Domain Control Panel Pre-Authentication [^Back to contents]

This will provide you with a URL to allow the user to log in to managethisdomain.com (or your configured domain control panel URL).

Please note that this uses the <extension> element rather than <command>.

What to send

Syntax

KeyAttributesContentsNotes
<command><info> <extension>
<info><domain:info>
<domain:info><domain:name>
<domain:name>(A domain name)
<extension><ext-domain:preAuthenticate>
<ext-domain:preAuthenticate>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <info>
      <domain:info>
        <domain:name>foo.com</domain:name>
      </domain:info>
    </info>
    <extension>
      <ext-domain:preAuthenticate/>
    </extension>
    <clTRID>cab9117a939c79ec9dc856ce1bd20d46</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('info');
        $w->startTag([$domain_ns, "info"]);
          $w->dataElement([$domain_ns, "name"], "foo.com");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->emptyTag([$ext_domain_ns, "preAuthenticate"]);
      $w->endTag();
      $w->dataElement('clTRID', "cab9117a939c79ec9dc856ce1bd20d46");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'info');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "info");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('foo.com'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "preAuthenticate");
        $l->appendChild($c);
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('cab9117a939c79ec9dc856ce1bd20d46'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('info', {})
        current = current.add_element('domain:info', {})
          current.add_element('domain:name', {}).add_text("foo.com")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current.add_element('ext-domain:preAuthenticate', {})
      current = current.parent
      current.add_element('clTRID', {}).add_text("cab9117a939c79ec9dc856ce1bd20d46")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><ext-domain:redirectURL>
<ext-domain:redirectURL>(a URL)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <ext-domain:redirectURL>http://domaincp.example.org/sso.cgi?session=LUB9UNbw6jTW</ext-domain:redirectURL>
    </resData>
    <trID>
      <clTRID>cab9117a939c79ec9dc856ce1bd20d46</clTRID>
      <svTRID>test-4a834f5acdc0b1fde1b55f5c995be0ba</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'trID' => {
             'clTRID' => 'cab9117a939c79ec9dc856ce1bd20d46',
             'svTRID' => 'test-4a834f5acdc0b1fde1b55f5c995be0ba'
           },
          'resData' => {
             'ext-domain:redirectURL' => 'http://domaincp.example.org/sso.cgi?session=LUB9UNbw6jTW'
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => ext-domain:redirectURL
              [type] => complete
              [level] => 4
              [value] => http://domaincp.example.org/sso.cgi?session=LUB9UNbw6jTW
          )
  
      [7] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => cab9117a939c79ec9dc856ce1bd20d46
          )
  
      [10] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-4a834f5acdc0b1fde1b55f5c995be0ba
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [13] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "redirectURL"
                                                   (...).children[0].to_s = "http://domaincp.example.org/sso.cgi?session=LUB9UNbw6jTW"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "cab9117a939c79ec9dc856ce1bd20d46"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-4a834f5acdc0b1fde1b55f5c995be0ba"
  result.children[2].to_s = " \n"

Listing Domain Names [^Back to contents]

This provides a list of domain names with fairly minimal information (domain name and whether it's on a hosting package). This is intended to provide a mechanism to discover which domain names you can manage (ie, those for which at least managing DNS makes sense).

You can also ask for domain names which are available for assignment instead of those which are manageable, although there will be some overlap.

Please note that this uses <extension> rather than <command>

What to send

Syntax

KeyAttributesContentsNotes
<extension><ext-domain:list>
<ext-domain:list>purpose?(empty)
purpose"manage" or "assign"

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <extension>
    <ext-domain:list purpose="manage"/>
    <ext-whapi:clTRID xmlns:ext-whapi="http://www.heartinternet.co.uk/whapi/ext-whapi-2.0">cff2cad609661333bad93296ecdd60c7</ext-whapi:clTRID>
  </extension>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $ext_whapi_ns = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
  $ext_whapi_ns => "ext-whapi",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('extension');
      $w->emptyTag([$ext_domain_ns, "list"], 'purpose' => "manage");
      $w->dataElement([$ext_whapi_ns, "clTRID"], "cff2cad609661333bad93296ecdd60c7");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $ext_whapi_ns = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'extension');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($ext_domain_ns, "list");$c->setAttribute('purpose', "manage"); 
      $l->appendChild($c);
      $c = $doc->createElementNS($ext_whapi_ns, "clTRID");
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('cff2cad609661333bad93296ecdd60c7'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('extension', {})
      current.add_element('ext-domain:list', {'purpose' => "manage"})
      current.add_element('ext-whapi:clTRID', {'xmlns:ext-whapi' => "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0"}).add_text("cff2cad609661333bad93296ecdd60c7")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><ext-domain:lstData>
<ext-domain:lstData><ext-domain:domainInfo>*
<ext-domain:domainInfo>hosted(a domain name)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <ext-domain:lstData>
        <ext-domain:domainInfo hosted='1'>foo.example.org</ext-domain:domainInfo>
        <ext-domain:domainInfo>bez.example.org</ext-domain:domainInfo>
      </ext-domain:lstData>
    </resData>
    <trID>
      <clTRID>cff2cad609661333bad93296ecdd60c7</clTRID>
      <svTRID>test-e52f4ce3fbf33ba0d5802769f073108c</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'trID' => {
             'clTRID' => 'cff2cad609661333bad93296ecdd60c7',
             'svTRID' => 'test-e52f4ce3fbf33ba0d5802769f073108c'
           },
          'resData' => {
             'ext-domain:lstData' => {
                     'ext-domain:domainInfo' => [
                          {
                            'content' => 'foo.example.org',
                            'hosted' => '1'
                          },
                          'bez.example.org'
                           ]
                   }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => ext-domain:lstData
              [type] => open
              [level] => 4
          )
  
      [7] => Array
          (
              [tag] => ext-domain:domainInfo
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [hosted] => 1
                  )
  
              [value] => foo.example.org
          )
  
      [8] => Array
          (
              [tag] => ext-domain:domainInfo
              [type] => complete
              [level] => 5
              [value] => bez.example.org
          )
  
      [9] => Array
          (
              [tag] => ext-domain:lstData
              [type] => close
              [level] => 4
          )
  
      [10] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => cff2cad609661333bad93296ecdd60c7
          )
  
      [13] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-e52f4ce3fbf33ba0d5802769f073108c
          )
  
      [14] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [15] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [16] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "lstData"
                                                   (...).children[0].name = "domainInfo"
                                                               (...).attributes["hosted"] = "1"
                                                               (...).children[0].to_s = "foo.example.org"
                                                   (...).children[1].name = "domainInfo"
                                                               (...).children[0].to_s = "bez.example.org"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "cff2cad609661333bad93296ecdd60c7"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-e52f4ce3fbf33ba0d5802769f073108c"
  result.children[2].to_s = " \n"

Inspecting Domain Names [^Back to contents]

This gives you a small amount of information about a domain name.

There are four basic types of response you might receive:

Normal

The domain has an expiry date, contacts and nameservers, status is "ok".

Expired

The domain has an expiry date, contacts and nameservers, status includes "inactive" but not "serverRenewProhibited".

Registered Elsewhere

The domain has no expiry date, no contacts, no nameservers, status includes "serverRenewProhibited".

Not Yet Registered

The domain has no expiry date, no contacts, no nameservers, status includes "inactive" and "serverRenewProhibited".

If the domain name is attached to a hosting package, the hosting package's OID will also be included.

Please note that although we do note which contact(s) are attached to the domain, we don't show the actual contact details.

What to send

Syntax

KeyAttributesContentsNotes
<command><info> <extension>?
<info><domain:info>
<domain:info>hosts?<domain:name> <domain:authInfo>?
hosts(N/A)Not implemented
<domain:name>(domain name)
<domain:authInfo>(N/A)Not implemented
<extension><ext-domain:info>
<ext-domain:info>(empty)

Examples

XML
<?xml version="1.0"?>
<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>example.org</domain:name>
      </domain:info>
    </info>
    <extension>
      <ext-domain:info xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5"/>
    </extension>
    <clTRID>1f70c2f01bfc883b12e12bbf721cb462</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $domain_ns => "domain",
  $ext_domain_ns => "ext-domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('info');
        $w->startTag([$domain_ns, "info"]);
          $w->dataElement([$domain_ns, "name"], "example.org");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->emptyTag([$ext_domain_ns, "info"]);
      $w->endTag();
      $w->dataElement('clTRID', "1f70c2f01bfc883b12e12bbf721cb462");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'info');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "info");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('example.org'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "info");
        $l->appendChild($c);
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('1f70c2f01bfc883b12e12bbf721cb462'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('info', {})
        current = current.add_element('domain:info', {})
          current.add_element('domain:name', {}).add_text("example.org")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current.add_element('ext-domain:info', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
      current = current.parent
      current.add_element('clTRID', {}).add_text("1f70c2f01bfc883b12e12bbf721cb462")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><domain:infData>
<domain:infData><domain:name> <domain:roid> <domain:status>* <domain:registrant>? <domain:contact>* <domain:ns>? <domain:host>* <domain:clID> <domain:crID>? <domain:crDate>? <domain:exDate>? <domain:upID>? <domain:upDate>? <domain:trDate>? <domain:authInfo>?
<domain:name>(The domain name)
<domain:roid>(text)
<domain:status>s lang?(text)Domain status description
s(text)See description
lang(N/A)Unsupported
<domain:registrant>(text)A contact identifier
<domain:contact>type(text)A contact identifier
type"admin", "billing" or "tech"
<domain:ns><domain:hostObj>* <domain:hostAttr>*Not present for all domains
<domain:hostObj>(N/A)Unimplemented
<domain:hostAttr><domain:hostName> <domain:hostAddr>*
<domain:hostName>(text)The nameserver name
<domain:hostAddr>ip(text)The IP address
ip"v4" or "v6"The type of IP address
<domain:host>(text)Only present if you have virtual nameservers on this domain
<domain:clID>(text)An ID for you
<domain:crID>(N/A)Unimplemented
<domain:crDate>(date and time)The date when the domain was added
<domain:exDate>(date and time)The date when the domain will be due for renewal
<domain:upID>(N/A)Unimplemented
<domain:upDate>(N/A)Unimplemented
<domain:trDate>(N/A)Unimplemented
<domain:authInfo><domain:pw>
<domain:pw>(text)Domain control panel password
<extension><ext-domain:infData>?
<ext-domain:infData><ext-domain:extStatus>? <ext-domain:privacy>? <ext-domain:package>?
<ext-domain:extStatus>"notRegisteredHere"Set if the registration is handled elsewhere
<ext-domain:privacy>(empty)Present if domain privacy is active
<ext-domain:package>(OID)The OID of the package this domain name is attached to (if any)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.org</domain:name>
        <domain:roid>B4C2639A2CAB62E6-HI</domain:roid>
        <domain:status s="ok">ok</domain:status>
        <domain:registrant>de9c9da15eec8961</domain:registrant>
        <domain:contact type="admin">d95d20725a673156</domain:contact>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns.domain.com</domain:hostName>
          </domain:hostAttr>
          <domain:hostAttr>
            <domain:hostName>ns2.domain.com</domain:hostName>
          </domain:hostAttr>
        </domain:ns>
        <domain:clID>20217eb4bf7f0414</domain:clID>
        <domain:crDate>2000-01-01T09:34:55</domain:crDate>
        <domain:exDate>2011-03-13T00:00:00</domain:exDate>
        <domain:authInfo>
          <domain:pw>9N+uh1Sa</domain:pw>
        </domain:authInfo>
      </domain:infData>
    </resData>
    <extension>
      <ext-domain:infData xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5">
        <ext-domain:extStatus>notRegisteredHere</ext-domain:extStatus>
        <ext-domain:privacy/>
        <ext-domain:package>2e3cc0422afb0503</ext-domain:package>
      </ext-domain:infData>
    </extension>
    <trID>
      <clTRID>1f70c2f01bfc883b12e12bbf721cb462</clTRID>
      <svTRID>test-eca3ec96408bd0a2e8e0b5738f5becaf</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'extension' => {
               'ext-domain:infData' => {
                    'ext-domain:privacy' => {},
                    'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
                    'ext-domain:package' => '2e3cc0422afb0503',
                    'ext-domain:extStatus' => 'notRegisteredHere'
                     }
             },
          'trID' => {
             'clTRID' => '1f70c2f01bfc883b12e12bbf721cb462',
             'svTRID' => 'test-eca3ec96408bd0a2e8e0b5738f5becaf'
           },
          'resData' => {
             'domain:infData' => {
                    'domain:status' => {
                       'content' => 'ok',
                       's' => 'ok'
                        },
                    'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
                    'domain:clID' => '20217eb4bf7f0414',
                    'domain:exDate' => '2011-03-13T00:00:00',
                    'domain:crDate' => '2000-01-01T09:34:55',
                    'domain:contact' => {
                        'content' => 'd95d20725a673156',
                        'type' => 'admin'
                         },
                    'domain:roid' => 'B4C2639A2CAB62E6-HI',
                    'domain:authInfo' => {
                         'domain:pw' => '9N+uh1Sa'
                       },
                    'domain:ns' => {
                      'domain:hostAttr' => [
                              {
                             'domain:hostName' => 'ns.domain.com'
                              },
                              {
                             'domain:hostName' => 'ns2.domain.com'
                              }
                            ]
                       },
                    'domain:name' => 'example.org',
                    'domain:registrant' => 'de9c9da15eec8961'
                  }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => domain:infData
              [type] => open
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [7] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 5
              [value] => example.org
          )
  
      [8] => Array
          (
              [tag] => domain:roid
              [type] => complete
              [level] => 5
              [value] => B4C2639A2CAB62E6-HI
          )
  
      [9] => Array
          (
              [tag] => domain:status
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [s] => ok
                  )
  
              [value] => ok
          )
  
      [10] => Array
          (
              [tag] => domain:registrant
              [type] => complete
              [level] => 5
              [value] => de9c9da15eec8961
          )
  
      [11] => Array
          (
              [tag] => domain:contact
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [type] => admin
                  )
  
              [value] => d95d20725a673156
          )
  
      [12] => Array
          (
              [tag] => domain:ns
              [type] => open
              [level] => 5
          )
  
      [13] => Array
          (
              [tag] => domain:hostAttr
              [type] => open
              [level] => 6
          )
  
      [14] => Array
          (
              [tag] => domain:hostName
              [type] => complete
              [level] => 7
              [value] => ns.domain.com
          )
  
      [15] => Array
          (
              [tag] => domain:hostAttr
              [type] => close
              [level] => 6
          )
  
      [16] => Array
          (
              [tag] => domain:hostAttr
              [type] => open
              [level] => 6
          )
  
      [17] => Array
          (
              [tag] => domain:hostName
              [type] => complete
              [level] => 7
              [value] => ns2.domain.com
          )
  
      [18] => Array
          (
              [tag] => domain:hostAttr
              [type] => close
              [level] => 6
          )
  
      [19] => Array
          (
              [tag] => domain:ns
              [type] => close
              [level] => 5
          )
  
      [20] => Array
          (
              [tag] => domain:clID
              [type] => complete
              [level] => 5
              [value] => 20217eb4bf7f0414
          )
  
      [21] => Array
          (
              [tag] => domain:crDate
              [type] => complete
              [level] => 5
              [value] => 2000-01-01T09:34:55
          )
  
      [22] => Array
          (
              [tag] => domain:exDate
              [type] => complete
              [level] => 5
              [value] => 2011-03-13T00:00:00
          )
  
      [23] => Array
          (
              [tag] => domain:authInfo
              [type] => open
              [level] => 5
          )
  
      [24] => Array
          (
              [tag] => domain:pw
              [type] => complete
              [level] => 6
              [value] => 9N+uh1Sa
          )
  
      [25] => Array
          (
              [tag] => domain:authInfo
              [type] => close
              [level] => 5
          )
  
      [26] => Array
          (
              [tag] => domain:infData
              [type] => close
              [level] => 4
          )
  
      [27] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [28] => Array
          (
              [tag] => extension
              [type] => open
              [level] => 3
          )
  
      [29] => Array
          (
              [tag] => ext-domain:infData
              [type] => open
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                  )
  
          )
  
      [30] => Array
          (
              [tag] => ext-domain:extStatus
              [type] => complete
              [level] => 5
              [value] => notRegisteredHere
          )
  
      [31] => Array
          (
              [tag] => ext-domain:privacy
              [type] => complete
              [level] => 5
          )
  
      [32] => Array
          (
              [tag] => ext-domain:package
              [type] => complete
              [level] => 5
              [value] => 2e3cc0422afb0503
          )
  
      [33] => Array
          (
              [tag] => ext-domain:infData
              [type] => close
              [level] => 4
          )
  
      [34] => Array
          (
              [tag] => extension
              [type] => close
              [level] => 3
          )
  
      [35] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [36] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 1f70c2f01bfc883b12e12bbf721cb462
          )
  
      [37] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-eca3ec96408bd0a2e8e0b5738f5becaf
          )
  
      [38] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [39] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [40] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "infData"
                                                   (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
                                                   (...).children[0].name = "name"
                                                               (...).children[0].to_s = "example.org"
                                                   (...).children[1].name = "roid"
                                                               (...).children[0].to_s = "B4C2639A2CAB62E6-HI"
                                                   (...).children[2].name = "status"
                                                               (...).attributes["s"] = "ok"
                                                               (...).children[0].to_s = "ok"
                                                   (...).children[3].name = "registrant"
                                                               (...).children[0].to_s = "de9c9da15eec8961"
                                                   (...).children[4].name = "contact"
                                                               (...).attributes["type"] = "admin"
                                                               (...).children[0].to_s = "d95d20725a673156"
                                                   (...).children[5].name = "ns"
                                                               (...).children[0].name = "hostAttr"
                                                                           (...).children[0].name = "hostName"
                                                                                       (...).children[0].to_s = "ns.domain.com"
                                                               (...).children[1].name = "hostAttr"
                                                                           (...).children[0].name = "hostName"
                                                                                       (...).children[0].to_s = "ns2.domain.com"
                                                   (...).children[6].name = "clID"
                                                               (...).children[0].to_s = "20217eb4bf7f0414"
                                                   (...).children[7].name = "crDate"
                                                               (...).children[0].to_s = "2000-01-01T09:34:55"
                                                   (...).children[8].name = "exDate"
                                                               (...).children[0].to_s = "2011-03-13T00:00:00"
                                                   (...).children[9].name = "authInfo"
                                                               (...).children[0].name = "pw"
                                                                           (...).children[0].to_s = "9N+uh1Sa"
                           (...).children[2].name = "extension"
                                       (...).children[0].name = "infData"
                                                   (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
                                                   (...).children[0].name = "extStatus"
                                                               (...).children[0].to_s = "notRegisteredHere"
                                                   (...).children[1].name = "privacy"
                                                   (...).children[2].name = "package"
                                                               (...).children[0].to_s = "2e3cc0422afb0503"
                           (...).children[3].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "1f70c2f01bfc883b12e12bbf721cb462"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-eca3ec96408bd0a2e8e0b5738f5becaf"
  result.children[2].to_s = " \n"

Modify Domain Name Services [^Back to contents]

The following documents how to change nameservers on a domain. Please note that the same system is also used for other domain modifications, please see below.

What to send

Syntax

KeyAttributesContentsNotes
<command><update> <extension>?
<update><domain:update>
<domain:update><domain:name> <domain:add>? <domain:rem>? <domain:chg>?
<domain:add><domain:ns>?
<domain:rem><domain:ns>?
<domain:chg>(empty)
<domain:ns><domain:hostAttr>+ <domain:hostObj>?
<domain:hostObj>(text)IGNORED
<domain:hostAttr><domain:hostName>+ <domain:hostAddr>?
<domain:hostName>(text)The name server hostname, a domain must have at least two of these
<domain:hostAddr>(text)IGNORED

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <update>
      <domain:update>
        <domain:name>one.example.org</domain:name>
        <domain:add>
          <domain:ns>
            <domain:hostAttr>
              <domain:hostName>ns.mainnameserver.com</domain:hostName>
            </domain:hostAttr>
            <domain:hostAttr>
              <domain:hostName>ns2.mainnameserver.com</domain:hostName>
            </domain:hostAttr>
          </domain:ns>
        </domain:add>
      </domain:update>
    </update>
    <clTRID>2006e52ddb272b21a46f45d1ef0acbd4</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('update');
        $w->startTag([$domain_ns, "update"]);
          $w->dataElement([$domain_ns, "name"], "one.example.org");
          $w->startTag([$domain_ns, "add"]);
            $w->startTag([$domain_ns, "ns"]);
              $w->startTag([$domain_ns, "hostAttr"]);
                $w->dataElement([$domain_ns, "hostName"], "ns.mainnameserver.com");
              $w->endTag();
              $w->startTag([$domain_ns, "hostAttr"]);
                $w->dataElement([$domain_ns, "hostName"], "ns2.mainnameserver.com");
              $w->endTag();
            $w->endTag();
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "2006e52ddb272b21a46f45d1ef0acbd4");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'update');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "update");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('one.example.org'));
          $c = $doc->createElementNS($domain_ns, "add");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($domain_ns, "ns");
            $l->appendChild($c); $l = $c;
              $c = $doc->createElementNS($domain_ns, "hostAttr");
              $l->appendChild($c); $l = $c;
                $c = $doc->createElementNS($domain_ns, "hostName");
                $l->appendChild($c);
                $c->appendChild($doc->createTextNode('ns.mainnameserver.com'));
              $l = $l->parentNode;
              $c = $doc->createElementNS($domain_ns, "hostAttr");
              $l->appendChild($c); $l = $c;
                $c = $doc->createElementNS($domain_ns, "hostName");
                $l->appendChild($c);
                $c->appendChild($doc->createTextNode('ns2.mainnameserver.com'));
              $l = $l->parentNode;
            $l = $l->parentNode;
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('2006e52ddb272b21a46f45d1ef0acbd4'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('update', {})
        current = current.add_element('domain:update', {})
          current.add_element('domain:name', {}).add_text("one.example.org")
          current = current.add_element('domain:add', {})
            current = current.add_element('domain:ns', {})
              current = current.add_element('domain:hostAttr', {})
                current.add_element('domain:hostName', {}).add_text("ns.mainnameserver.com")
              current = current.parent
              current = current.add_element('domain:hostAttr', {})
                current.add_element('domain:hostName', {}).add_text("ns2.mainnameserver.com")
              current = current.parent
            current = current.parent
          current = current.parent
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("2006e52ddb272b21a46f45d1ef0acbd4")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command succeeded</msg>
    </result>
    <trID>
      <clTRID>2006e52ddb272b21a46f45d1ef0acbd4</clTRID>
      <svTRID>test-57b6a04e04275dd9edda1a546c0877bf</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'trID' => {
             'clTRID' => '2006e52ddb272b21a46f45d1ef0acbd4',
             'svTRID' => 'test-57b6a04e04275dd9edda1a546c0877bf'
           },
          'result' => {
            'msg' => 'Command succeeded',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command succeeded
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 2006e52ddb272b21a46f45d1ef0acbd4
          )
  
      [7] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-57b6a04e04275dd9edda1a546c0877bf
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [10] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command succeeded"
                           (...).children[1].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "2006e52ddb272b21a46f45d1ef0acbd4"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-57b6a04e04275dd9edda1a546c0877bf"
  result.children[2].to_s = " \n"

Modify Domain Control Panel Password [^Back to contents]

Using this functionality you can change (reset) the domain control panel password for a domain name. If you do not provide a password, or do not provide a reasonably strong password, the request will be rejected.

What to send

Syntax

KeyAttributesContentsNotes
<command><update> <extension>?
<update><domain:update>
<domain:update><domain:name> <domain:add>? <domain:rem>? <domain:chg>?
<domain:add>(empty)
<domain:rem>(empty)
<domain:chg><domain:authInfo>?
<domain:authInfo><domain:pw>
<domain:pw>(text)Your chosen domain control panel password.

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <update>
      <domain:update>
        <domain:name>one.example.org</domain:name>
        <domain:chg>
          <domain:authInfo>
            <domain:pw>9N+uh1Sa</domain:pw>
          </domain:authInfo>
        </domain:chg>
      </domain:update>
    </update>
    <clTRID>457e4029ddc3275faf9a6a893288884d</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('update');
        $w->startTag([$domain_ns, "update"]);
          $w->dataElement([$domain_ns, "name"], "one.example.org");
          $w->startTag([$domain_ns, "chg"]);
            $w->startTag([$domain_ns, "authInfo"]);
              $w->dataElement([$domain_ns, "pw"], "9N+uh1Sa");
            $w->endTag();
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "457e4029ddc3275faf9a6a893288884d");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'update');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "update");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('one.example.org'));
          $c = $doc->createElementNS($domain_ns, "chg");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($domain_ns, "authInfo");
            $l->appendChild($c); $l = $c;
              $c = $doc->createElementNS($domain_ns, "pw");
              $l->appendChild($c);
              $c->appendChild($doc->createTextNode('9N+uh1Sa'));
            $l = $l->parentNode;
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('457e4029ddc3275faf9a6a893288884d'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('update', {})
        current = current.add_element('domain:update', {})
          current.add_element('domain:name', {}).add_text("one.example.org")
          current = current.add_element('domain:chg', {})
            current = current.add_element('domain:authInfo', {})
              current.add_element('domain:pw', {}).add_text("9N+uh1Sa")
            current = current.parent
          current = current.parent
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("457e4029ddc3275faf9a6a893288884d")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command succeeded</msg>
    </result>
    <trID>
      <clTRID>457e4029ddc3275faf9a6a893288884d</clTRID>
      <svTRID>test-16d687fe26a898029e022842a6b9d605</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'trID' => {
             'clTRID' => '457e4029ddc3275faf9a6a893288884d',
             'svTRID' => 'test-16d687fe26a898029e022842a6b9d605'
           },
          'result' => {
            'msg' => 'Command succeeded',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command succeeded
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 457e4029ddc3275faf9a6a893288884d
          )
  
      [7] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-16d687fe26a898029e022842a6b9d605
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [10] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command succeeded"
                           (...).children[1].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "457e4029ddc3275faf9a6a893288884d"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-16d687fe26a898029e022842a6b9d605"
  result.children[2].to_s = " \n"

Add Domain Privacy [^Back to contents]

Using this functionality you can add domain privacy to an existing domain name. This works in the same way as applying privacy during create or transfer.

What to send

Syntax

KeyAttributesContentsNotes
<command><update> <extension>?
<update><domain:update>
<domain:update><domain:name> <domain:add>? <domain:rem>? <domain:chg>?
<domain:add>(empty)
<domain:rem>(empty)
<domain:chg>(empty)
<extension><ext-domain:updateExtension>
<ext-domain:updateExtension><ext-domain:add>? <ext-domain:registrationMechanism>*
<ext-domain:add><ext-domain:privacy>?
<ext-domain:privacy>(empty)Include this element to spend a privacy credit on this domain. Ignored if the domain type doesn't support privacy credits.
<ext-domain:registrationMechanism>"credits" or "basket"Set to "basket" to skip automatic registration and process the order yourself. See the description above.

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <update>
      <domain:update>
        <domain:name>one.example.org</domain:name>
      </domain:update>
    </update>
    <extension>
      <ext-domain:updateExtension>
        <ext-domain:add>
          <ext-domain:privacy />
        </ext-domain:add>
        <ext-domain:registrationMechanism>credits</ext-domain:registrationMechanism>
        <ext-domain:registrationMechanism>basket</ext-domain:registrationMechanism>
      </ext-domain:updateExtension>
    </extension>
    <clTRID>1e430b95105a4d214e545280b872d142</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('update');
        $w->startTag([$domain_ns, "update"]);
          $w->dataElement([$domain_ns, "name"], "one.example.org");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_domain_ns, "updateExtension"]);
          $w->startTag([$ext_domain_ns, "add"]);
            $w->emptyTag([$ext_domain_ns, "privacy"]);
          $w->endTag();
          $w->dataElement([$ext_domain_ns, "registrationMechanism"], "credits");
          $w->dataElement([$ext_domain_ns, "registrationMechanism"], "basket");
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "1e430b95105a4d214e545280b872d142");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'update');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "update");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('one.example.org'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "updateExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_domain_ns, "add");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($ext_domain_ns, "privacy");
            $l->appendChild($c);
          $l = $l->parentNode;
          $c = $doc->createElementNS($ext_domain_ns, "registrationMechanism");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('credits'));
          $c = $doc->createElementNS($ext_domain_ns, "registrationMechanism");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('basket'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('1e430b95105a4d214e545280b872d142'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('update', {})
        current = current.add_element('domain:update', {})
          current.add_element('domain:name', {}).add_text("one.example.org")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-domain:updateExtension', {})
          current = current.add_element('ext-domain:add', {})
            current.add_element('ext-domain:privacy', {})
          current = current.parent
          current.add_element('ext-domain:registrationMechanism', {}).add_text("credits")
          current.add_element('ext-domain:registrationMechanism', {}).add_text("basket")
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("1e430b95105a4d214e545280b872d142")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command succeeded</msg>
    </result>
    <trID>
      <clTRID>1e430b95105a4d214e545280b872d142</clTRID>
      <svTRID>test-3dc05061fd810b2b497899b524d9d112</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'trID' => {
             'clTRID' => '1e430b95105a4d214e545280b872d142',
             'svTRID' => 'test-3dc05061fd810b2b497899b524d9d112'
           },
          'result' => {
            'msg' => 'Command succeeded',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command succeeded
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 1e430b95105a4d214e545280b872d142
          )
  
      [7] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-3dc05061fd810b2b497899b524d9d112
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [10] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command succeeded"
                           (...).children[1].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "1e430b95105a4d214e545280b872d142"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-3dc05061fd810b2b497899b524d9d112"
  result.children[2].to_s = " \n"

Modify Domain Registrant Security Details [^Back to contents]

Using this functionality, you can reset the security details for a domain name. Doing so will modify the security details for the same contact in future registrations but will not affect other domains owned by the contact.

What to send

Syntax

KeyAttributesContentsNotes
<command><update> <extension>?
<update><domain:update>
<domain:update><domain:name> <domain:add>? <domain:rem>? <domain:chg>?
<domain:add>(empty)
<domain:rem>(empty)
<domain:chg>(empty)
<extension><ext-domain:updateExtension>
<ext-domain:updateExtension><ext-domain:registrantSecurityDetails>
<ext-domain:registrantSecurityDetails><ext-domain:securityChallenge>+Currently expected to be at least 3
<ext-domain:securityChallenge>question(text)
question(text)See notes.

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <command>
    <update>
      <domain:update>
        <domain:name>one.example.org</domain:name>
      </domain:update>
    </update>
    <extension>
      <ext-domain:updateExtension>
        <ext-domain:registrantSecurityDetails>
          <ext-domain:securityChallenge question='question2'>Nottingham</ext-domain:securityChallenge>
          <ext-domain:securityChallenge question='question3'>Rex</ext-domain:securityChallenge>
          <ext-domain:securityChallenge question='question4'>Toy Story</ext-domain:securityChallenge>
        </ext-domain:registrantSecurityDetails>
      </ext-domain:updateExtension>
    </extension>
    <clTRID>ba16c120fb821f1437a507a5add415d3</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_domain_ns => "ext-domain",
  $domain_ns => "domain",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('update');
        $w->startTag([$domain_ns, "update"]);
          $w->dataElement([$domain_ns, "name"], "one.example.org");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_domain_ns, "updateExtension"]);
          $w->startTag([$ext_domain_ns, "registrantSecurityDetails"]);
            $w->dataElement([$ext_domain_ns, "securityChallenge"], "Nottingham", 'question' => "question2");
            $w->dataElement([$ext_domain_ns, "securityChallenge"], "Rex", 'question' => "question3");
            $w->dataElement([$ext_domain_ns, "securityChallenge"], "Toy Story", 'question' => "question4");
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "ba16c120fb821f1437a507a5add415d3");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_domain_ns = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'update');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "update");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('one.example.org'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_domain_ns, "updateExtension");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_domain_ns, "registrantSecurityDetails");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($ext_domain_ns, "securityChallenge");$c->setAttribute('question', "question2"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Nottingham'));
            $c = $doc->createElementNS($ext_domain_ns, "securityChallenge");$c->setAttribute('question', "question3"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Rex'));
            $c = $doc->createElementNS($ext_domain_ns, "securityChallenge");$c->setAttribute('question', "question4"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('Toy Story'));
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('ba16c120fb821f1437a507a5add415d3'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {'xmlns:ext-domain' => "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"})
    current = current.add_element('command', {})
      current = current.add_element('update', {})
        current = current.add_element('domain:update', {})
          current.add_element('domain:name', {}).add_text("one.example.org")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-domain:updateExtension', {})
          current = current.add_element('ext-domain:registrantSecurityDetails', {})
            current.add_element('ext-domain:securityChallenge', {'question' => "question2"}).add_text("Nottingham")
            current.add_element('ext-domain:securityChallenge', {'question' => "question3"}).add_text("Rex")
            current.add_element('ext-domain:securityChallenge', {'question' => "question4"}).add_text("Toy Story")
          current = current.parent
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("ba16c120fb821f1437a507a5add415d3")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-domain="http://www.heartinternet.co.uk/whapi/ext-domain-2.5" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
  <response>
    <result code='1000'>
      <msg>Command succeeded</msg>
    </result>
    <trID>
      <clTRID>ba16c120fb821f1437a507a5add415d3</clTRID>
      <svTRID>test-48c72209c2eddacd41cc0331faaf136e</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'xmlns:ext-domain' => 'http://www.heartinternet.co.uk/whapi/ext-domain-2.5',
      'response' => {
          'trID' => {
             'clTRID' => 'ba16c120fb821f1437a507a5add415d3',
             'svTRID' => 'test-48c72209c2eddacd41cc0331faaf136e'
           },
          'result' => {
            'msg' => 'Command succeeded',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                      [xmlns:ext-domain] => http://www.heartinternet.co.uk/whapi/ext-domain-2.5
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command succeeded
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => ba16c120fb821f1437a507a5add415d3
          )
  
      [7] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-48c72209c2eddacd41cc0331faaf136e
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [10] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
               (...).attributes["ext-domain"] = "http://www.heartinternet.co.uk/whapi/ext-domain-2.5"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command succeeded"
                           (...).children[1].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "ba16c120fb821f1437a507a5add415d3"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-48c72209c2eddacd41cc0331faaf136e"
  result.children[2].to_s = " \n"

VIRTUAL NAMESERVER COMMANDS [^Back to contents]

These are commands for the virtual nameserver product.

List Virtual Nameservers [^Back to contents]

This returns a list of all your virtual nameserver domains.

What to send

Syntax

KeyAttributesContentsNotes
<extension><ext-host:list>
<ext-host:list>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <extension>
    <ext-host:list xmlns:ext-host="http://www.heartinternet.co.uk/whapi/ext-host-2.0"/>
    <ext-whapi:clTRID xmlns:ext-whapi="http://www.heartinternet.co.uk/whapi/ext-whapi-2.0">bc390d8930383c2ae996444f39a37d8c</ext-whapi:clTRID>
  </extension>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_host_ns = "http://www.heartinternet.co.uk/whapi/ext-host-2.0";
  my $ext_whapi_ns = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_host_ns => "ext-host",
  $ext_whapi_ns => "ext-whapi",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('extension');
      $w->emptyTag([$ext_host_ns, "list"]);
      $w->dataElement([$ext_whapi_ns, "clTRID"], "bc390d8930383c2ae996444f39a37d8c");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_host_ns = "http://www.heartinternet.co.uk/whapi/ext-host-2.0";
  $ext_whapi_ns = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'extension');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($ext_host_ns, "list");
      $l->appendChild($c);
      $c = $doc->createElementNS($ext_whapi_ns, "clTRID");
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('bc390d8930383c2ae996444f39a37d8c'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  current = current.add_element('epp', {})
    current = current.add_element('extension', {})
      current.add_element('ext-host:list', {'xmlns:ext-host' => "http://www.heartinternet.co.uk/whapi/ext-host-2.0"})
      current.add_element('ext-whapi:clTRID', {'xmlns:ext-whapi' => "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0"}).add_text("bc390d8930383c2ae996444f39a37d8c")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><ext-host:lstData>
<ext-host:lstData><ext-host:domainName>*
<ext-host:domainName>(A domain name)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <ext-host:lstData xmlns:ext-host="http://www.heartinternet.co.uk/whapi/ext-host-2.0">
        <ext-host:domainName>example.org</ext-host:domainName>
      </ext-host:lstData>
    </resData>
    <trID>
      <clTRID>bc390d8930383c2ae996444f39a37d8c</clTRID>
      <svTRID>test-fe0c388da4f9c750ee86bf56cab6a3b3</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => 'bc390d8930383c2ae996444f39a37d8c',
             'svTRID' => 'test-fe0c388da4f9c750ee86bf56cab6a3b3'
           },
          'resData' => {
             'ext-host:lstData' => {
                   'xmlns:ext-host' => 'http://www.heartinternet.co.uk/whapi/ext-host-2.0',
                   'ext-host:domainName' => 'example.org'
                    }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => ext-host:lstData
              [type] => open
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:ext-host] => http://www.heartinternet.co.uk/whapi/ext-host-2.0
                  )
  
          )
  
      [7] => Array
          (
              [tag] => ext-host:domainName
              [type] => complete
              [level] => 5
              [value] => example.org
          )
  
      [8] => Array
          (
              [tag] => ext-host:lstData
              [type] => close
              [level] => 4
          )
  
      [9] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [10] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [11] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => bc390d8930383c2ae996444f39a37d8c
          )
  
      [12] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-fe0c388da4f9c750ee86bf56cab6a3b3
          )
  
      [13] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [14] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [15] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "lstData"
                                                   (...).attributes["ext-host"] = "http://www.heartinternet.co.uk/whapi/ext-host-2.0"
                                                   (...).children[0].name = "domainName"
                                                               (...).children[0].to_s = "example.org"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "bc390d8930383c2ae996444f39a37d8c"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-fe0c388da4f9c750ee86bf56cab6a3b3"
  result.children[2].to_s = " \n"

DNS COMMANDS [^Back to contents]

These commands allow you to view and manage DNS records via extensions to the <domain:info> and <domain:update> commands.

Many of the record types are not valid on the empty node (the domain itself), as noted below.

Where records refer to a name, that will either be a full DNS name with a trailing dot (eg. "primary.mail.example.org.") or a partial DNS name which implicitly ends with the domain name (eg. "primary.mail").

Supported record types are:

A

IPv4 address. Valid on all nodes.

AAAA

IPv6 address. Valid on all nodes.

CNAME

Canonical name (like a "link"). Not valid with any other type of record on the same node.

MX

The name and priority level of a host which handles incoming email for the given node. Lowest priority number will be the first that email servers will try to deliver to. Supported on all nodes but usually only useful on the empty node.

NS

The names of hosts which are expected to serve DNS for the node. Only the empty node is supported here. Updating NS records is not supported.

SRV

Host names and ports for specific automatically discoverable services. This supports both priorities and weights: for entries of the same priority, one will be randomly chosen according to its weight, with higher numbers being chosen more often.

The names for SRV records are specially formatted: They are the well-known service name followed by the protocol (both with a leading underscore) then any name, eg. "_pop3._tcp.office". Because of this, the empty node is not supported here, although a name which is only the service and protocol is supported.

The protocol specified will be validated (must be "_tcp", "_udp" or "_tls"), but the service name will not be beyond the requirement that it is alphanumeric with dashes. Please note that "_tls" is not an actual protocol and may not be supported as an SRV record in all environments; where possible you should use a service name which specifies TLS (eg. _pop3s, _imaps, _ftps) instead.

TXT

Unformatted records sometimes used for specific functionality, eg. SPF.

Inspecting DNS [^Back to contents]

This provides a list of DNS records which currently apply to the domain name (if any).

What to send

Syntax

KeyAttributesContentsNotes
<command><info> <extension>
<info>(Various)See "Inspecting Domain Names"
<extension><ext-dns:info>
<ext-dns:info>(empty)

Examples

XML
<?xml version="1.0"?>
<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>example.org</domain:name>
      </domain:info>
    </info>
    <extension>
      <ext-dns:info xmlns:ext-dns="http://www.heartinternet.co.uk/whapi/ext-dns-2.0"/>
    </extension>
    <clTRID>bc2cf3a9d78940cd811831a4f2effd93</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $ext_dns_ns = "http://www.heartinternet.co.uk/whapi/ext-dns-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $domain_ns => "domain",
  $ext_dns_ns => "ext-dns",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('info');
        $w->startTag([$domain_ns, "info"]);
          $w->dataElement([$domain_ns, "name"], "example.org");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->emptyTag([$ext_dns_ns, "info"]);
      $w->endTag();
      $w->dataElement('clTRID', "bc2cf3a9d78940cd811831a4f2effd93");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $ext_dns_ns = "http://www.heartinternet.co.uk/whapi/ext-dns-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'info');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "info");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('example.org'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_dns_ns, "info");
        $l->appendChild($c);
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('bc2cf3a9d78940cd811831a4f2effd93'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('info', {})
        current = current.add_element('domain:info', {})
          current.add_element('domain:name', {}).add_text("example.org")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current.add_element('ext-dns:info', {'xmlns:ext-dns' => "http://www.heartinternet.co.uk/whapi/ext-dns-2.0"})
      current = current.parent
      current.add_element('clTRID', {}).add_text("bc2cf3a9d78940cd811831a4f2effd93")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<ext-dns:infData><ext-dns:a>* <ext-dns:aaaa> <ext-dns:cname>* <ext-dns:mx>* <ext-dns:ns>+ <ext-dns:srv>* <ext-dns:txt>*
<ext-dns:a>node(IP address)E.g. 1.2.3.4
<ext-dns:aaaa>node(IPv6 address)E.g. ff:ff::1
<ext-dns:cname>node(DNS name)
<ext-dns:mx>node priority(DNS name)
<ext-dns:ns>node(DNS name)
<ext-dns:srv>node priority weight(DNS name and port)E.g. mail.example.org.:143
<ext-dns:txt>node(text)
node(Partial DNS name or empty)Specially formatted in the case of SRV records
priority(number)Lower numbers are selected first
weight(number)See description.

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <domain:infData xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
        <domain:name>example.org</domain:name>
        <domain:roid>B4C2639A2CAB62E6-HI</domain:roid>
        <domain:status s="ok">ok</domain:status>
        <domain:registrant>de9c9da15eec8961</domain:registrant>
        <domain:contact type="admin">d95d20725a673156</domain:contact>
        <domain:ns>
          <domain:hostAttr>
            <domain:hostName>ns.domain.com</domain:hostName>
          </domain:hostAttr>
          <domain:hostAttr>
            <domain:hostName>ns2.domain.com</domain:hostName>
          </domain:hostAttr>
        </domain:ns>
        <domain:clID>20217eb4bf7f0414</domain:clID>
        <domain:crDate>2000-01-01T09:34:55</domain:crDate>
        <domain:exDate>2011-03-13T00:00:00</domain:exDate>
      </domain:infData>
    </resData>
    <extension>
      <ext-dns:infData xmlns:ext-dns="http://www.heartinternet.co.uk/whapi/ext-dns-2.0">
        <ext-dns:a node="">127.0.0.1</ext-dns:a>
        <ext-dns:a node="mail">127.0.0.4</ext-dns:a>
        <ext-dns:a node="*">127.0.0.6</ext-dns:a>
        <ext-dns:aaaa node="">::1</ext-dns:aaaa>
        <ext-dns:cname node="groupware">groupware.some-offsite-provider.example.org.</ext-dns:cname>
        <ext-dns:cname node="pop3">mail</ext-dns:cname>
        <ext-dns:mx node="" priority="10">mail</ext-dns:mx>
        <ext-dns:ns node="">ns1.mainnameserver.com.</ext-dns:ns>
        <ext-dns:ns node="">ns2.mainnameserver.com.</ext-dns:ns>
        <ext-dns:srv node="_smtp._tcp" priority="10" weight="5">mail:25</ext-dns:srv>
        <ext-dns:srv node="_imap._tcp.office" priority="10" weight="5">groupware:143</ext-dns:srv>
        <ext-dns:txt node="">Some text here</ext-dns:txt>
      </ext-dns:infData>
    </extension>
    <trID>
      <clTRID>bc2cf3a9d78940cd811831a4f2effd93</clTRID>
      <svTRID>test-109471ac1fc3ece827a290f7b0f8ebb1</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'extension' => {
               'ext-dns:infData' => {
                    'ext-dns:ns' => [
                       {
                         'content' => 'ns1.mainnameserver.com.',
                         'node' => ''
                       },
                       {
                         'content' => 'ns2.mainnameserver.com.',
                         'node' => ''
                       }
                        ],
                    'ext-dns:aaaa' => {
                         'content' => '::1',
                         'node' => ''
                       },
                    'ext-dns:txt' => {
                        'content' => 'Some text here',
                        'node' => ''
                         },
                    'ext-dns:cname' => [
                          {
                         'content' => 'groupware.some-offsite-provider.example.org.',
                         'node' => 'groupware'
                          },
                          {
                         'content' => 'mail',
                         'node' => 'pop3'
                          }
                        ],
                    'ext-dns:srv' => [
                        {
                          'priority' => '10',
                          'content' => 'mail:25',
                          'weight' => '5',
                          'node' => '_smtp._tcp'
                        },
                        {
                          'priority' => '10',
                          'content' => 'groupware:143',
                          'weight' => '5',
                          'node' => '_imap._tcp.office'
                        }
                         ],
                    'ext-dns:a' => [
                         {
                        'content' => '127.0.0.1',
                        'node' => ''
                         },
                         {
                        'content' => '127.0.0.4',
                        'node' => 'mail'
                         },
                         {
                        'content' => '127.0.0.6',
                        'node' => '*'
                         }
                       ],
                    'xmlns:ext-dns' => 'http://www.heartinternet.co.uk/whapi/ext-dns-2.0',
                    'ext-dns:mx' => {
                       'priority' => '10',
                       'content' => 'mail',
                       'node' => ''
                        }
                  }
             },
          'trID' => {
             'clTRID' => 'bc2cf3a9d78940cd811831a4f2effd93',
             'svTRID' => 'test-109471ac1fc3ece827a290f7b0f8ebb1'
           },
          'resData' => {
             'domain:infData' => {
                    'domain:status' => {
                       'content' => 'ok',
                       's' => 'ok'
                        },
                    'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0',
                    'domain:clID' => '20217eb4bf7f0414',
                    'domain:exDate' => '2011-03-13T00:00:00',
                    'domain:crDate' => '2000-01-01T09:34:55',
                    'domain:contact' => {
                        'content' => 'd95d20725a673156',
                        'type' => 'admin'
                         },
                    'domain:roid' => 'B4C2639A2CAB62E6-HI',
                    'domain:ns' => {
                      'domain:hostAttr' => [
                              {
                             'domain:hostName' => 'ns.domain.com'
                              },
                              {
                             'domain:hostName' => 'ns2.domain.com'
                              }
                            ]
                       },
                    'domain:name' => 'example.org',
                    'domain:registrant' => 'de9c9da15eec8961'
                  }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => domain:infData
              [type] => open
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:domain] => urn:ietf:params:xml:ns:domain-1.0
                  )
  
          )
  
      [7] => Array
          (
              [tag] => domain:name
              [type] => complete
              [level] => 5
              [value] => example.org
          )
  
      [8] => Array
          (
              [tag] => domain:roid
              [type] => complete
              [level] => 5
              [value] => B4C2639A2CAB62E6-HI
          )
  
      [9] => Array
          (
              [tag] => domain:status
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [s] => ok
                  )
  
              [value] => ok
          )
  
      [10] => Array
          (
              [tag] => domain:registrant
              [type] => complete
              [level] => 5
              [value] => de9c9da15eec8961
          )
  
      [11] => Array
          (
              [tag] => domain:contact
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [type] => admin
                  )
  
              [value] => d95d20725a673156
          )
  
      [12] => Array
          (
              [tag] => domain:ns
              [type] => open
              [level] => 5
          )
  
      [13] => Array
          (
              [tag] => domain:hostAttr
              [type] => open
              [level] => 6
          )
  
      [14] => Array
          (
              [tag] => domain:hostName
              [type] => complete
              [level] => 7
              [value] => ns.domain.com
          )
  
      [15] => Array
          (
              [tag] => domain:hostAttr
              [type] => close
              [level] => 6
          )
  
      [16] => Array
          (
              [tag] => domain:hostAttr
              [type] => open
              [level] => 6
          )
  
      [17] => Array
          (
              [tag] => domain:hostName
              [type] => complete
              [level] => 7
              [value] => ns2.domain.com
          )
  
      [18] => Array
          (
              [tag] => domain:hostAttr
              [type] => close
              [level] => 6
          )
  
      [19] => Array
          (
              [tag] => domain:ns
              [type] => close
              [level] => 5
          )
  
      [20] => Array
          (
              [tag] => domain:clID
              [type] => complete
              [level] => 5
              [value] => 20217eb4bf7f0414
          )
  
      [21] => Array
          (
              [tag] => domain:crDate
              [type] => complete
              [level] => 5
              [value] => 2000-01-01T09:34:55
          )
  
      [22] => Array
          (
              [tag] => domain:exDate
              [type] => complete
              [level] => 5
              [value] => 2011-03-13T00:00:00
          )
  
      [23] => Array
          (
              [tag] => domain:infData
              [type] => close
              [level] => 4
          )
  
      [24] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [25] => Array
          (
              [tag] => extension
              [type] => open
              [level] => 3
          )
  
      [26] => Array
          (
              [tag] => ext-dns:infData
              [type] => open
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:ext-dns] => http://www.heartinternet.co.uk/whapi/ext-dns-2.0
                  )
  
          )
  
      [27] => Array
          (
              [tag] => ext-dns:a
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => 
                  )
  
              [value] => 127.0.0.1
          )
  
      [28] => Array
          (
              [tag] => ext-dns:a
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => mail
                  )
  
              [value] => 127.0.0.4
          )
  
      [29] => Array
          (
              [tag] => ext-dns:a
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => *
                  )
  
              [value] => 127.0.0.6
          )
  
      [30] => Array
          (
              [tag] => ext-dns:aaaa
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => 
                  )
  
              [value] => ::1
          )
  
      [31] => Array
          (
              [tag] => ext-dns:cname
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => groupware
                  )
  
              [value] => groupware.some-offsite-provider.example.org.
          )
  
      [32] => Array
          (
              [tag] => ext-dns:cname
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => pop3
                  )
  
              [value] => mail
          )
  
      [33] => Array
          (
              [tag] => ext-dns:mx
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => 
                      [priority] => 10
                  )
  
              [value] => mail
          )
  
      [34] => Array
          (
              [tag] => ext-dns:ns
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => 
                  )
  
              [value] => ns1.mainnameserver.com.
          )
  
      [35] => Array
          (
              [tag] => ext-dns:ns
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => 
                  )
  
              [value] => ns2.mainnameserver.com.
          )
  
      [36] => Array
          (
              [tag] => ext-dns:srv
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => _smtp._tcp
                      [priority] => 10
                      [weight] => 5
                  )
  
              [value] => mail:25
          )
  
      [37] => Array
          (
              [tag] => ext-dns:srv
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => _imap._tcp.office
                      [priority] => 10
                      [weight] => 5
                  )
  
              [value] => groupware:143
          )
  
      [38] => Array
          (
              [tag] => ext-dns:txt
              [type] => complete
              [level] => 5
              [attributes] => Array
                  (
                      [node] => 
                  )
  
              [value] => Some text here
          )
  
      [39] => Array
          (
              [tag] => ext-dns:infData
              [type] => close
              [level] => 4
          )
  
      [40] => Array
          (
              [tag] => extension
              [type] => close
              [level] => 3
          )
  
      [41] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [42] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => bc2cf3a9d78940cd811831a4f2effd93
          )
  
      [43] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-109471ac1fc3ece827a290f7b0f8ebb1
          )
  
      [44] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [45] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [46] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "infData"
                                                   (...).attributes["domain"] = "urn:ietf:params:xml:ns:domain-1.0"
                                                   (...).children[0].name = "name"
                                                               (...).children[0].to_s = "example.org"
                                                   (...).children[1].name = "roid"
                                                               (...).children[0].to_s = "B4C2639A2CAB62E6-HI"
                                                   (...).children[2].name = "status"
                                                               (...).attributes["s"] = "ok"
                                                               (...).children[0].to_s = "ok"
                                                   (...).children[3].name = "registrant"
                                                               (...).children[0].to_s = "de9c9da15eec8961"
                                                   (...).children[4].name = "contact"
                                                               (...).attributes["type"] = "admin"
                                                               (...).children[0].to_s = "d95d20725a673156"
                                                   (...).children[5].name = "ns"
                                                               (...).children[0].name = "hostAttr"
                                                                           (...).children[0].name = "hostName"
                                                                                       (...).children[0].to_s = "ns.domain.com"
                                                               (...).children[1].name = "hostAttr"
                                                                           (...).children[0].name = "hostName"
                                                                                       (...).children[0].to_s = "ns2.domain.com"
                                                   (...).children[6].name = "clID"
                                                               (...).children[0].to_s = "20217eb4bf7f0414"
                                                   (...).children[7].name = "crDate"
                                                               (...).children[0].to_s = "2000-01-01T09:34:55"
                                                   (...).children[8].name = "exDate"
                                                               (...).children[0].to_s = "2011-03-13T00:00:00"
                           (...).children[2].name = "extension"
                                       (...).children[0].name = "infData"
                                                   (...).attributes["ext-dns"] = "http://www.heartinternet.co.uk/whapi/ext-dns-2.0"
                                                   (...).children[0].name = "a"
                                                               (...).attributes["node"] = ""
                                                               (...).children[0].to_s = "127.0.0.1"
                                                   (...).children[1].name = "a"
                                                               (...).attributes["node"] = "mail"
                                                               (...).children[0].to_s = "127.0.0.4"
                                                   (...).children[2].name = "a"
                                                               (...).attributes["node"] = "*"
                                                               (...).children[0].to_s = "127.0.0.6"
                                                   (...).children[3].name = "aaaa"
                                                               (...).attributes["node"] = ""
                                                               (...).children[0].to_s = "::1"
                                                   (...).children[4].name = "cname"
                                                               (...).attributes["node"] = "groupware"
                                                               (...).children[0].to_s = "groupware.some-offsite-provider.example.org."
                                                   (...).children[5].name = "cname"
                                                               (...).attributes["node"] = "pop3"
                                                               (...).children[0].to_s = "mail"
                                                   (...).children[6].name = "mx"
                                                               (...).attributes["priority"] = "10"
                                                               (...).attributes["node"] = ""
                                                               (...).children[0].to_s = "mail"
                                                   (...).children[7].name = "ns"
                                                               (...).attributes["node"] = ""
                                                               (...).children[0].to_s = "ns1.mainnameserver.com."
                                                   (...).children[8].name = "ns"
                                                               (...).attributes["node"] = ""
                                                               (...).children[0].to_s = "ns2.mainnameserver.com."
                                                   (...).children[9].name = "srv"
                                                               (...).attributes["priority"] = "10"
                                                               (...).attributes["weight"] = "5"
                                                               (...).attributes["node"] = "_smtp._tcp"
                                                               (...).children[0].to_s = "mail:25"
                                                   (...).children[10].name = "srv"
                                                                (...).attributes["priority"] = "10"
                                                                (...).attributes["weight"] = "5"
                                                                (...).attributes["node"] = "_imap._tcp.office"
                                                                (...).children[0].to_s = "groupware:143"
                                                   (...).children[11].name = "txt"
                                                                (...).attributes["node"] = ""
                                                                (...).children[0].to_s = "Some text here"
                           (...).children[3].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "bc2cf3a9d78940cd811831a4f2effd93"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-109471ac1fc3ece827a290f7b0f8ebb1"
  result.children[2].to_s = " \n"

Update DNS [^Back to contents]

This allows you to add and remove DNS records. To modify a DNS record, you should delete it as part of the same operation, as the results will only be committed at the end. This operation is not compatible with any other domain update operations.

Please note that NS records may not be changed this way despite being included in the <info> response.

What to send

Syntax

KeyAttributesContentsNotes
<command><update> <extension>
<update><domain:update>
<domain:update><domain:name>No other elements
<domain:name>(domain name)
<extension><ext-dns:update>
<ext-dns:update><ext-dns:add>? <ext-dns:rem>?
<ext-dns:add>(DNS elements)See "Inspecting DNS", excluding "NS"
<ext-dns:rem>(DNS elements)See "Inspecting DNS", excluding "NS"

Examples

XML
<?xml version="1.0"?>
<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.org</domain:name>
      </domain:update>
    </update>
    <extension>
      <ext-dns:update xmlns:ext-dns="http://www.heartinternet.co.uk/whapi/ext-dns-2.0">
        <ext-dns:add>
          <ext-dns:srv node="_smtp._tcp" priority="10" weight="5">mail.somewhere-else.example.org.:25</ext-dns:srv>
          <ext-dns:srv node="_smtp._tcp" priority="20" weight="70">backupmx1.somewhere-else.example.org.:25</ext-dns:srv>
          <ext-dns:srv node="_smtp._tcp" priority="20" weight="30">backupmx2.somewhere-else.example.org.:25</ext-dns:srv>
        </ext-dns:add>
        <ext-dns:rem>
          <ext-dns:srv node="_smtp._tcp" priority="10" weight="5">mail:25</ext-dns:srv>
        </ext-dns:rem>
      </ext-dns:update>
    </extension>
    <clTRID>8074d3abb4bbe1c86af43ea1316a090d</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  my $ext_dns_ns = "http://www.heartinternet.co.uk/whapi/ext-dns-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $domain_ns => "domain",
  $ext_dns_ns => "ext-dns",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('update');
        $w->startTag([$domain_ns, "update"]);
          $w->dataElement([$domain_ns, "name"], "example.org");
        $w->endTag();
      $w->endTag();
      $w->startTag('extension');
        $w->startTag([$ext_dns_ns, "update"]);
          $w->startTag([$ext_dns_ns, "add"]);
            $w->dataElement([$ext_dns_ns, "srv"], "mail.somewhere-else.example.org.:25", 'node' => "_smtp._tcp", 'priority' => "10", 'weight' => "5");
            $w->dataElement([$ext_dns_ns, "srv"], "backupmx1.somewhere-else.example.org.:25", 'node' => "_smtp._tcp", 'priority' => "20", 'weight' => "70");
            $w->dataElement([$ext_dns_ns, "srv"], "backupmx2.somewhere-else.example.org.:25", 'node' => "_smtp._tcp", 'priority' => "20", 'weight' => "30");
          $w->endTag();
          $w->startTag([$ext_dns_ns, "rem"]);
            $w->dataElement([$ext_dns_ns, "srv"], "mail:25", 'node' => "_smtp._tcp", 'priority' => "10", 'weight' => "5");
          $w->endTag();
        $w->endTag();
      $w->endTag();
      $w->dataElement('clTRID', "8074d3abb4bbe1c86af43ea1316a090d");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $domain_ns = "urn:ietf:params:xml:ns:domain-1.0";
  $ext_dns_ns = "http://www.heartinternet.co.uk/whapi/ext-dns-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'update');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($domain_ns, "update");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($domain_ns, "name");
          $l->appendChild($c);
          $c->appendChild($doc->createTextNode('example.org'));
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'extension');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($ext_dns_ns, "update");
        $l->appendChild($c); $l = $c;
          $c = $doc->createElementNS($ext_dns_ns, "add");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($ext_dns_ns, "srv");$c->setAttribute('node', "_smtp._tcp"); $c->setAttribute('priority', "10"); $c->setAttribute('weight', "5"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('mail.somewhere-else.example.org.:25'));
            $c = $doc->createElementNS($ext_dns_ns, "srv");$c->setAttribute('node', "_smtp._tcp"); $c->setAttribute('priority', "20"); $c->setAttribute('weight', "70"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('backupmx1.somewhere-else.example.org.:25'));
            $c = $doc->createElementNS($ext_dns_ns, "srv");$c->setAttribute('node', "_smtp._tcp"); $c->setAttribute('priority', "20"); $c->setAttribute('weight', "30"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('backupmx2.somewhere-else.example.org.:25'));
          $l = $l->parentNode;
          $c = $doc->createElementNS($ext_dns_ns, "rem");
          $l->appendChild($c); $l = $c;
            $c = $doc->createElementNS($ext_dns_ns, "srv");$c->setAttribute('node', "_smtp._tcp"); $c->setAttribute('priority', "10"); $c->setAttribute('weight', "5"); 
            $l->appendChild($c);
            $c->appendChild($doc->createTextNode('mail:25'));
          $l = $l->parentNode;
        $l = $l->parentNode;
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('8074d3abb4bbe1c86af43ea1316a090d'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("domain", "urn:ietf:params:xml:ns:domain-1.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('update', {})
        current = current.add_element('domain:update', {})
          current.add_element('domain:name', {}).add_text("example.org")
        current = current.parent
      current = current.parent
      current = current.add_element('extension', {})
        current = current.add_element('ext-dns:update', {'xmlns:ext-dns' => "http://www.heartinternet.co.uk/whapi/ext-dns-2.0"})
          current = current.add_element('ext-dns:add', {})
            current.add_element('ext-dns:srv', {'node' => "_smtp._tcp", 'priority' => "10", 'weight' => "5"}).add_text("mail.somewhere-else.example.org.:25")
            current.add_element('ext-dns:srv', {'node' => "_smtp._tcp", 'priority' => "20", 'weight' => "70"}).add_text("backupmx1.somewhere-else.example.org.:25")
            current.add_element('ext-dns:srv', {'node' => "_smtp._tcp", 'priority' => "20", 'weight' => "30"}).add_text("backupmx2.somewhere-else.example.org.:25")
          current = current.parent
          current = current.add_element('ext-dns:rem', {})
            current.add_element('ext-dns:srv', {'node' => "_smtp._tcp", 'priority' => "10", 'weight' => "5"}).add_text("mail:25")
          current = current.parent
        current = current.parent
      current = current.parent
      current.add_element('clTRID', {}).add_text("8074d3abb4bbe1c86af43ea1316a090d")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <trID>
      <clTRID>8074d3abb4bbe1c86af43ea1316a090d</clTRID>
      <svTRID>test-506f6de50dd39d8decbdbe36c8ebb7e6</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => '8074d3abb4bbe1c86af43ea1316a090d',
             'svTRID' => 'test-506f6de50dd39d8decbdbe36c8ebb7e6'
           },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 8074d3abb4bbe1c86af43ea1316a090d
          )
  
      [7] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-506f6de50dd39d8decbdbe36c8ebb7e6
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [10] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "8074d3abb4bbe1c86af43ea1316a090d"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-506f6de50dd39d8decbdbe36c8ebb7e6"
  result.children[2].to_s = " \n"

NULL COMMANDS [^Back to contents]

All of these commands do nothing, and are simply here for validation purposes.

Create Nothing [^Back to contents]

This does nothing.

What to send

Syntax

KeyAttributesContentsNotes
<command><create>
<create><null:create>
<null:create>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <create>
      <null:create xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0"/>
    </create>
    <clTRID>707129238b58220b83b25a39a4eba10c</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $null_ns => "null",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('create');
        $w->emptyTag([$null_ns, "create"]);
      $w->endTag();
      $w->dataElement('clTRID', "707129238b58220b83b25a39a4eba10c");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'create');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($null_ns, "create");
        $l->appendChild($c);
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('707129238b58220b83b25a39a4eba10c'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("null", "http://www.heartinternet.co.uk/whapi/null-2.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('create', {})
        current.add_element('null:create', {})
      current = current.parent
      current.add_element('clTRID', {}).add_text("707129238b58220b83b25a39a4eba10c")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><null:notice>
<null:notice>(text)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <null:notice xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0">Nothing created</null:notice>
    </resData>
    <trID>
      <clTRID>707129238b58220b83b25a39a4eba10c</clTRID>
      <svTRID>test-efefd05e41a7c7da97ce6e3ca5e5edcd</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => '707129238b58220b83b25a39a4eba10c',
             'svTRID' => 'test-efefd05e41a7c7da97ce6e3ca5e5edcd'
           },
          'resData' => {
             'null:notice' => {
                 'xmlns:null' => 'http://www.heartinternet.co.uk/whapi/null-2.0',
                 'content' => 'Nothing created'
                  }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => null:notice
              [type] => complete
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:null] => http://www.heartinternet.co.uk/whapi/null-2.0
                  )
  
              [value] => Nothing created
          )
  
      [7] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 707129238b58220b83b25a39a4eba10c
          )
  
      [10] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-efefd05e41a7c7da97ce6e3ca5e5edcd
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [13] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "notice"
                                                   (...).attributes["null"] = "http://www.heartinternet.co.uk/whapi/null-2.0"
                                                   (...).children[0].to_s = "Nothing created"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "707129238b58220b83b25a39a4eba10c"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-efefd05e41a7c7da97ce6e3ca5e5edcd"
  result.children[2].to_s = " \n"

Update Nothing [^Back to contents]

This does nothing.

What to send

Syntax

KeyAttributesContentsNotes
<command><update>
<update><null:update>
<null:update>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <update>
      <null:update xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0"/>
    </update>
    <clTRID>a4ab99a4ab47d21cdcb20666bb582237</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $null_ns => "null",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('update');
        $w->emptyTag([$null_ns, "update"]);
      $w->endTag();
      $w->dataElement('clTRID', "a4ab99a4ab47d21cdcb20666bb582237");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'update');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($null_ns, "update");
        $l->appendChild($c);
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('a4ab99a4ab47d21cdcb20666bb582237'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("null", "http://www.heartinternet.co.uk/whapi/null-2.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('update', {})
        current.add_element('null:update', {})
      current = current.parent
      current.add_element('clTRID', {}).add_text("a4ab99a4ab47d21cdcb20666bb582237")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><null:notice>
<null:notice>(text)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <null:notice xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0">Nothing updated</null:notice>
    </resData>
    <trID>
      <clTRID>a4ab99a4ab47d21cdcb20666bb582237</clTRID>
      <svTRID>test-4aff2f6ca5f3cff414e6bbf154cc5f9f</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => 'a4ab99a4ab47d21cdcb20666bb582237',
             'svTRID' => 'test-4aff2f6ca5f3cff414e6bbf154cc5f9f'
           },
          'resData' => {
             'null:notice' => {
                 'xmlns:null' => 'http://www.heartinternet.co.uk/whapi/null-2.0',
                 'content' => 'Nothing updated'
                  }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => null:notice
              [type] => complete
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:null] => http://www.heartinternet.co.uk/whapi/null-2.0
                  )
  
              [value] => Nothing updated
          )
  
      [7] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => a4ab99a4ab47d21cdcb20666bb582237
          )
  
      [10] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-4aff2f6ca5f3cff414e6bbf154cc5f9f
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [13] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "notice"
                                                   (...).attributes["null"] = "http://www.heartinternet.co.uk/whapi/null-2.0"
                                                   (...).children[0].to_s = "Nothing updated"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "a4ab99a4ab47d21cdcb20666bb582237"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-4aff2f6ca5f3cff414e6bbf154cc5f9f"
  result.children[2].to_s = " \n"

Delete Nothing [^Back to contents]

Doesn't delete anything.

What to send

Syntax

KeyAttributesContentsNotes
<command><delete>
<delete><null:delete>
<null:delete>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <delete>
      <null:delete xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0"/>
    </delete>
    <clTRID>f60d5a8c5cf53b360429a024923e372b</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $null_ns => "null",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('delete');
        $w->emptyTag([$null_ns, "delete"]);
      $w->endTag();
      $w->dataElement('clTRID', "f60d5a8c5cf53b360429a024923e372b");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'delete');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($null_ns, "delete");
        $l->appendChild($c);
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('f60d5a8c5cf53b360429a024923e372b'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("null", "http://www.heartinternet.co.uk/whapi/null-2.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('delete', {})
        current.add_element('null:delete', {})
      current = current.parent
      current.add_element('clTRID', {}).add_text("f60d5a8c5cf53b360429a024923e372b")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><null:notice>
<null:notice>(text)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <null:notice xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0">Nothing deleted</null:notice>
    </resData>
    <trID>
      <clTRID>f60d5a8c5cf53b360429a024923e372b</clTRID>
      <svTRID>test-a11ba9c50006ec74e774e549b3dbdc8e</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => 'f60d5a8c5cf53b360429a024923e372b',
             'svTRID' => 'test-a11ba9c50006ec74e774e549b3dbdc8e'
           },
          'resData' => {
             'null:notice' => {
                 'xmlns:null' => 'http://www.heartinternet.co.uk/whapi/null-2.0',
                 'content' => 'Nothing deleted'
                  }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => null:notice
              [type] => complete
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:null] => http://www.heartinternet.co.uk/whapi/null-2.0
                  )
  
              [value] => Nothing deleted
          )
  
      [7] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => f60d5a8c5cf53b360429a024923e372b
          )
  
      [10] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-a11ba9c50006ec74e774e549b3dbdc8e
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [13] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "notice"
                                                   (...).attributes["null"] = "http://www.heartinternet.co.uk/whapi/null-2.0"
                                                   (...).children[0].to_s = "Nothing deleted"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "f60d5a8c5cf53b360429a024923e372b"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-a11ba9c50006ec74e774e549b3dbdc8e"
  result.children[2].to_s = " \n"

List Items [^Back to contents]

This returns a list of nothing

What to send

Syntax

KeyAttributesContentsNotes
<extension><ext-null:list>
<ext-null:list>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <extension>
    <ext-null:list xmlns:ext-null="http://www.heartinternet.co.uk/whapi/ext-null-2.0"/>
    <ext-whapi:clTRID xmlns:ext-whapi="http://www.heartinternet.co.uk/whapi/ext-whapi-2.0">a4dea176c9f17e0dd7cd8ecad98aaf5a</ext-whapi:clTRID>
  </extension>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $ext_null_ns = "http://www.heartinternet.co.uk/whapi/ext-null-2.0";
  my $ext_whapi_ns = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $ext_null_ns => "ext-null",
  $ext_whapi_ns => "ext-whapi",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('extension');
      $w->emptyTag([$ext_null_ns, "list"]);
      $w->dataElement([$ext_whapi_ns, "clTRID"], "a4dea176c9f17e0dd7cd8ecad98aaf5a");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $ext_null_ns = "http://www.heartinternet.co.uk/whapi/ext-null-2.0";
  $ext_whapi_ns = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'extension');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($ext_null_ns, "list");
      $l->appendChild($c);
      $c = $doc->createElementNS($ext_whapi_ns, "clTRID");
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('a4dea176c9f17e0dd7cd8ecad98aaf5a'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  current = current.add_element('epp', {})
    current = current.add_element('extension', {})
      current.add_element('ext-null:list', {'xmlns:ext-null' => "http://www.heartinternet.co.uk/whapi/ext-null-2.0"})
      current.add_element('ext-whapi:clTRID', {'xmlns:ext-whapi' => "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0"}).add_text("a4dea176c9f17e0dd7cd8ecad98aaf5a")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><ext-null:lstData>
<ext-null:lstData><ext-null:notice>?
<ext-null:notice>(text)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <ext-null:lstData xmlns:ext-null="http://www.heartinternet.co.uk/whapi/ext-null-2.0">
        <ext-null:notice>Nothing to list</ext-null:notice>
      </ext-null:lstData>
    </resData>
    <trID>
      <clTRID>a4dea176c9f17e0dd7cd8ecad98aaf5a</clTRID>
      <svTRID>test-543db4ae467696a824db59b1d4ee972c</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => 'a4dea176c9f17e0dd7cd8ecad98aaf5a',
             'svTRID' => 'test-543db4ae467696a824db59b1d4ee972c'
           },
          'resData' => {
             'ext-null:lstData' => {
                   'xmlns:ext-null' => 'http://www.heartinternet.co.uk/whapi/ext-null-2.0',
                   'ext-null:notice' => 'Nothing to list'
                    }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => ext-null:lstData
              [type] => open
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:ext-null] => http://www.heartinternet.co.uk/whapi/ext-null-2.0
                  )
  
          )
  
      [7] => Array
          (
              [tag] => ext-null:notice
              [type] => complete
              [level] => 5
              [value] => Nothing to list
          )
  
      [8] => Array
          (
              [tag] => ext-null:lstData
              [type] => close
              [level] => 4
          )
  
      [9] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [10] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [11] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => a4dea176c9f17e0dd7cd8ecad98aaf5a
          )
  
      [12] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-543db4ae467696a824db59b1d4ee972c
          )
  
      [13] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [14] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [15] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "lstData"
                                                   (...).attributes["ext-null"] = "http://www.heartinternet.co.uk/whapi/ext-null-2.0"
                                                   (...).children[0].name = "notice"
                                                               (...).children[0].to_s = "Nothing to list"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "a4dea176c9f17e0dd7cd8ecad98aaf5a"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-543db4ae467696a824db59b1d4ee972c"
  result.children[2].to_s = " \n"

Inspect Nothing [^Back to contents]

This returns no information.

What to send

Syntax

KeyAttributesContentsNotes
<command><info>
<info><null:info>
<null:info>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <info>
      <null:info xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0"/>
    </info>
    <clTRID>17375b583c30b2c7b581ffaa60abeb4e</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $null_ns => "null",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('info');
        $w->emptyTag([$null_ns, "info"]);
      $w->endTag();
      $w->dataElement('clTRID', "17375b583c30b2c7b581ffaa60abeb4e");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'info');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($null_ns, "info");
        $l->appendChild($c);
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('17375b583c30b2c7b581ffaa60abeb4e'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("null", "http://www.heartinternet.co.uk/whapi/null-2.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('info', {})
        current.add_element('null:info', {})
      current = current.parent
      current.add_element('clTRID', {}).add_text("17375b583c30b2c7b581ffaa60abeb4e")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><null:infData>
<null:infData><null:notice>?
<null:notice>(text)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <null:infData xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0">
        <null:roid>0-HI</null:roid>
        <null:notice>No information</null:notice>
      </null:infData>
    </resData>
    <trID>
      <clTRID>17375b583c30b2c7b581ffaa60abeb4e</clTRID>
      <svTRID>test-457d36740f79262f18194a555c7339f7</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => '17375b583c30b2c7b581ffaa60abeb4e',
             'svTRID' => 'test-457d36740f79262f18194a555c7339f7'
           },
          'resData' => {
             'null:infData' => {
                  'null:roid' => '0-HI',
                  'xmlns:null' => 'http://www.heartinternet.co.uk/whapi/null-2.0',
                  'null:notice' => 'No information'
                   }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => null:infData
              [type] => open
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:null] => http://www.heartinternet.co.uk/whapi/null-2.0
                  )
  
          )
  
      [7] => Array
          (
              [tag] => null:roid
              [type] => complete
              [level] => 5
              [value] => 0-HI
          )
  
      [8] => Array
          (
              [tag] => null:notice
              [type] => complete
              [level] => 5
              [value] => No information
          )
  
      [9] => Array
          (
              [tag] => null:infData
              [type] => close
              [level] => 4
          )
  
      [10] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 17375b583c30b2c7b581ffaa60abeb4e
          )
  
      [13] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-457d36740f79262f18194a555c7339f7
          )
  
      [14] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [15] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [16] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "infData"
                                                   (...).attributes["null"] = "http://www.heartinternet.co.uk/whapi/null-2.0"
                                                   (...).children[0].name = "roid"
                                                               (...).children[0].to_s = "0-HI"
                                                   (...).children[1].name = "notice"
                                                               (...).children[0].to_s = "No information"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "17375b583c30b2c7b581ffaa60abeb4e"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-457d36740f79262f18194a555c7339f7"
  result.children[2].to_s = " \n"

Renew Nothing [^Back to contents]

Doesn't renew anything.

What to send

Syntax

KeyAttributesContentsNotes
<command><renew>
<renew><null:renew>
<null:renew>(empty)

Examples

XML
<?xml version="1.0"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <command>
    <renew>
      <null:renew xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0"/>
    </renew>
    <clTRID>7f68f6c42f68d4de89f6c4542830cdd8</clTRID>
  </command>
</epp> 

Perl
[Show]
  use strict;
  use warnings;
  use XML::Writer;
  my $output="";
  my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  my $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  my $w = new XML::Writer(
    OUTPUT=>\$output, 
    NAMESPACES=>1, 
    PREFIX_MAP=>{$namespace=>"",
  $null_ns => "null",
    },
    FORCED_NS_DECLS=>[$namespace],
  );
  $w->xmlDecl();
  $w->startTag('epp');
    $w->startTag('command');
      $w->startTag('renew');
        $w->emptyTag([$null_ns, "renew"]);
      $w->endTag();
      $w->dataElement('clTRID', "7f68f6c42f68d4de89f6c4542830cdd8");
    $w->endTag();
  $w->endTag(); 
  $w->end();
PHP
[Show]
  $namespace = "urn:ietf:params:xml:ns:epp-1.0";
  $null_ns = "http://www.heartinternet.co.uk/whapi/null-2.0";
  $doc = new DOMDocument(); $l = $doc;
  $c = $doc->createElementNS($namespace, 'epp');
  $l->appendChild($c); $l = $c;
    $c = $doc->createElementNS($namespace, 'command');
    $l->appendChild($c); $l = $c;
      $c = $doc->createElementNS($namespace, 'renew');
      $l->appendChild($c); $l = $c;
        $c = $doc->createElementNS($null_ns, "renew");
        $l->appendChild($c);
      $l = $l->parentNode;
      $c = $doc->createElementNS($namespace, 'clTRID');
      $l->appendChild($c);
      $c->appendChild($doc->createTextNode('7f68f6c42f68d4de89f6c4542830cdd8'));
    $l = $l->parentNode;
  $l = $l->parentNode; 
  $output = $doc->saveXML();
Ruby
[Show]
  output = ""
  require 'rexml/document'
  doc = REXML::Document.new
  output << '<?xml version="1.0"?>'
  whapi_top = doc.add_element("whapi")
  current = whapi_top
  whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
  whapi_top.add_namespace("null", "http://www.heartinternet.co.uk/whapi/null-2.0")
  current = current.add_element('epp', {})
    current = current.add_element('command', {})
      current = current.add_element('renew', {})
        current.add_element('null:renew', {})
      current = current.parent
      current.add_element('clTRID', {}).add_text("7f68f6c42f68d4de89f6c4542830cdd8")
    current = current.parent
  current = current.parent 
  doc.write(output)

Response

Syntax

KeyAttributesContentsNotes
<resData><null:notice>
<null:notice>(text)

Examples

XML
<?xml version='1.0'?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
  <response>
    <result code='1000'>
      <msg>Command completed successfully</msg>
    </result>
    <resData>
      <null:notice xmlns:null="http://www.heartinternet.co.uk/whapi/null-2.0">Nothing renewed</null:notice>
    </resData>
    <trID>
      <clTRID>7f68f6c42f68d4de89f6c4542830cdd8</clTRID>
      <svTRID>test-e197a97e0af0dac58c30c1c773a6d01f</svTRID>
    </trID>
  </response>
</epp> 

Perl
[Show]
  $VAR1 = {
      'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
      'response' => {
          'trID' => {
             'clTRID' => '7f68f6c42f68d4de89f6c4542830cdd8',
             'svTRID' => 'test-e197a97e0af0dac58c30c1c773a6d01f'
           },
          'resData' => {
             'null:notice' => {
                 'xmlns:null' => 'http://www.heartinternet.co.uk/whapi/null-2.0',
                 'content' => 'Nothing renewed'
                  }
              },
          'result' => {
            'msg' => 'Command completed successfully',
            'code' => '1000'
             }
        }
    };
PHP
[Show]
  Array
  (
      [0] => Array
          (
              [tag] => epp
              [type] => open
              [level] => 1
              [attributes] => Array
                  (
                      [xmlns] => urn:ietf:params:xml:ns:epp-1.0
                  )
  
          )
  
      [1] => Array
          (
              [tag] => response
              [type] => open
              [level] => 2
          )
  
      [2] => Array
          (
              [tag] => result
              [type] => open
              [level] => 3
              [attributes] => Array
                  (
                      [code] => 1000
                  )
  
          )
  
      [3] => Array
          (
              [tag] => msg
              [type] => complete
              [level] => 4
              [value] => Command completed successfully
          )
  
      [4] => Array
          (
              [tag] => result
              [type] => close
              [level] => 3
          )
  
      [5] => Array
          (
              [tag] => resData
              [type] => open
              [level] => 3
          )
  
      [6] => Array
          (
              [tag] => null:notice
              [type] => complete
              [level] => 4
              [attributes] => Array
                  (
                      [xmlns:null] => http://www.heartinternet.co.uk/whapi/null-2.0
                  )
  
              [value] => Nothing renewed
          )
  
      [7] => Array
          (
              [tag] => resData
              [type] => close
              [level] => 3
          )
  
      [8] => Array
          (
              [tag] => trID
              [type] => open
              [level] => 3
          )
  
      [9] => Array
          (
              [tag] => clTRID
              [type] => complete
              [level] => 4
              [value] => 7f68f6c42f68d4de89f6c4542830cdd8
          )
  
      [10] => Array
          (
              [tag] => svTRID
              [type] => complete
              [level] => 4
              [value] => test-e197a97e0af0dac58c30c1c773a6d01f
          )
  
      [11] => Array
          (
              [tag] => trID
              [type] => close
              [level] => 3
          )
  
      [12] => Array
          (
              [tag] => response
              [type] => close
              [level] => 2
          )
  
      [13] => Array
          (
              [tag] => epp
              [type] => close
              [level] => 1
          )
  
  )
Ruby
[Show]
  # This is just a quick overview. Please see the documentation for REXML to find the best methods to access the data
  result.children[0].to_s = "<?xml version='1.0'?>"
  result.children[1].name = "epp"
               (...).attributes["xmlns"] = "urn:ietf:params:xml:ns:epp-1.0"
               (...).children[0].name = "response"
                           (...).children[0].name = "result"
                                       (...).attributes["code"] = "1000"
                                       (...).children[0].name = "msg"
                                                   (...).children[0].to_s = "Command completed successfully"
                           (...).children[1].name = "resData"
                                       (...).children[0].name = "notice"
                                                   (...).attributes["null"] = "http://www.heartinternet.co.uk/whapi/null-2.0"
                                                   (...).children[0].to_s = "Nothing renewed"
                           (...).children[2].name = "trID"
                                       (...).children[0].name = "clTRID"
                                                   (...).children[0].to_s = "7f68f6c42f68d4de89f6c4542830cdd8"
                                       (...).children[1].name = "svTRID"
                                                   (...).children[0].to_s = "test-e197a97e0af0dac58c30c1c773a6d01f"
  result.children[2].to_s = " \n"

EXAMPLE SCRIPTS [^Back to contents]

In this section we've included some full examples to help get you started. They're written with a few different approaches to help show the different ways you can write your code.

Perl [^Back to contents]

This script simply logs in.

[Show]
  #!/usr/bin/perl -w
  
  use CGI;
  use strict;
  use warnings;
  use IO::Socket::SSL;
 
  sub get_response {
    my ($server) = @_;
    my $size_packed;
    read($server, $size_packed, 4);
    my $size = unpack("N", $size_packed);
    my $response;
    read($server, $response, $size-4);
    return $response;
  }
   
  my $api_host = "api.heartinternet.uk";
  my $api_port = 1701;
  my $clID = "ccf0049fd0f38c61";
  my $pw = "SDFssa37=";
  my $verify_hostname = 1;
  
  my $server = IO::Socket::SSL->new("$api_host:$api_port") or die $!;
  if($verify_hostname) {
    $server->verify_hostname( $api_host,'http' )
      or die "hostname verification failed";
  }
  
  get_response($server);
  
  sub build_request_short(&) {
    my ($code) = @_;
    use XML::Writer;
    my $output="";
    my $whapi_namespace = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
    my $namespace = "urn:ietf:params:xml:ns:epp-1.0";
    my $w = new XML::Writer(
      OUTPUT=>\$output, 
      NAMESPACES=>1, 
      PREFIX_MAP=>{
        $namespace => "",
        $whapi_namespace=>"ext-whapi",
      },
      FORCED_NS_DECLS=>[$namespace],
    );
    $w->xmlDecl();
    $w->startTag("epp");
      &$code($w);
    $w->endTag();
    $w->end();
  
    return $output;
  }
  sub build_request(&) {
    my ($code) = @_;
    return build_request_short(sub {
      my ($w) = @_;
      $w->startTag("command");
        &$code($w);
      $w->endTag();
    });
  }
  
  sub send_request(&$) {
    my ($on_success, $output) = @_;
    print $server pack("N", length($output)+4).$output;
    my $response = get_response($server);
    if($response) {
      use XML::Simple;
      my $result=XMLin($response);
      return &{$on_success}($result);
    } else {
      # Error handling.
      die "Invalid XML received!";
    }
  }
  
  sub request(&&) {
    my ($build, $handle_response) = @_;
    return send_request(\&$handle_response, build_request(\&$build));
  }
  
  sub request_short(&&) {
    my ($build, $handle_response) = @_;
    return send_request(\&$handle_response, build_request_short(\&$build));
  }
  
  sub build_login {
    my ($w) = @_;
    $w->startTag('login');
      $w->dataElement('clID', $clID);
      $w->dataElement('pw', $pw);
      $w->startTag("options");
        $w->dataElement('version', "1.0");
        $w->dataElement('lang', "en");
      $w->endTag();
      $w->startTag("svcs");
        $w->dataElement('objURI', "urn:ietf:params:xml:ns:contact-1.0");
        $w->startTag("svcExtension");
          $w->dataElement('extURI', "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0");
        $w->endTag();
      $w->endTag();
    $w->endTag();
  }
  
  sub handle_login_result {
    my ($result) = @_;
    unless($result->{response}{result}{code}==1000) {
      die "Failed to log in!: ".parse_reason($result);
    }
    return 1;
  }
  
  sub parse_reason($) {
    my ($result) = @_;
    return "$result->{response}{result}{reason}{code}:$result->{response}{result}{reason}{content}";
  }
  
  request_short {
    my ($w) = @_;
    $w->emptyTag('hello');
  } sub {
    my ($result) = @_;
    unless($result->{greeting}) {
      die "Couldn't even say hello!: ".parse_reason($result);
    }
  };
  
  my $session_id = request \&build_login, \&handle_login_result;
  
  my $cgi = new CGI;
  print $cgi->header("text/plain");
  print "Logged in\n";
  
  my $output = build_request {
    my ($w) = @_;
    $w->emptyTag('goodbye');
  };
  send_request {} $output;
  
  close($server);

PHP [^Back to contents]

This script logs in and outputs a list of your packages (IDs and domain names).

[Show]
  <?php
 
  function get_response($res) {
    $size_packed = fread($res, 4);
    if(strlen($size_packed) == 0) return;
    $size = unpack("N", $size_packed);
    // This works around PHP's fread() capping at 8192 bytes
    $out = "";
    $last = "";
    for($s = $size[1]-4; $s>0; $s-=strlen($last)) {
      $last = fread($res, $s);
      $out.=$last;
    }
    return $out;
  }
 
  $api_host = "api.heartinternet.uk";
  $api_port = 1701;
  $clID = "ccf0049fd0f38c61";
  $pw = "SDFssa37=";
  
  $res = fsockopen("tls://" . $api_host, $api_port);
 
  get_response($res);
  
  function build_request_short($content) {
    $package_namespace = "http://www.heartinternet.co.uk/whapi/package-2.2";
    $ext_package_namespace = "http://www.heartinternet.co.uk/whapi/ext-package-2.2";
    $namespace = "urn:ietf:params:xml:ns:epp-1.0";
    $whapi_namespace = "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0";
    $doc = $content->ownerDocument;
    $top = $doc->createElement("epp");
    $top->setAttribute("xmlns", $namespace);
    $top->setAttribute("xmlns:ext-whapi", $whapi_namespace);
    $top->setAttribute("xmlns:ext-package", $ext_package_namespace);
    $top->setAttribute("xmlns:package", $package_namespace);
    $doc->appendChild($top);
  
    $top->appendChild($content);
  
    $output = $doc->saveXML();
    return $output;
  }
  
  function build_request($content) {
    $doc = $content->ownerDocument;
    $command = $doc->createElement("command");
    $command->appendChild($content);
    return build_request_short($command);
  }
  
  function send_request($output) {
    global $res;
    fwrite($res, pack("N", strlen($output)+4) . $output);
    $content = get_response($res);
    if($content) {
      $result=array();
      $parser = xml_parser_create();
      xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
      xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
      xml_parse_into_struct($parser, $content, $result);
      return $result;
    } else {
      // Error handling
      throw new Exception("Invalid XML received: " . $content);
    }
  }
  
  function build_login($clID, $pw) {
    $doc = new DOMDocument();
    $content = $doc->createElement("login");
  
    $clID_element = $doc->createElement('clID');
    $clID_element->appendChild($doc->createTextNode($clID));
    $content->appendChild($clID_element);
  
    $pw_element = $doc->createElement('pw');
    $pw_element->appendChild($doc->createTextNode($pw));
    $content->appendChild($pw_element);
  
    $options_element = $doc->createElement('options');
    $version_element = $doc->createElement('version');
    $version_element->appendChild($doc->createTextNode("1.0"));
    $options_element->appendChild($version_element);
    $lang_element = $doc->createElement('lang');
    $lang_element->appendChild($doc->createTextNode("en"));
    $options_element->appendChild($lang_element);
    $content->appendChild($options_element);
  
    $svcs_element = $doc->createElement('svcs');
    $objURI_element = $doc->createElement('objURI');
    $objURI_element->appendChild($doc->createTextNode("http://www.heartinternet.co.uk/whapi/package-2.2"));
    $svcs_element->appendChild($objURI_element);
    $svcExtension_element = $doc->createElement('svcExtension');
    $extURI_element = $doc->createElement('extURI');
    $extURI_element->appendChild($doc->createTextNode("http://www.heartinternet.co.uk/whapi/ext-package-2.2"));
    $svcExtension_element->appendChild($extURI_element);
    $svcs_element->appendChild($svcExtension_element);
    $content->appendChild($svcs_element);
  
    return $content;
  }
  
  function parse_reason($result) {
    foreach($result as $tag)
      if($tag['tag']=="reason")
        return $tag['attributes']['code'] . ":" . $tag['value'];
  }
  
  function handle_login_result($result) {
    foreach($result as $tag) {
      if($tag['tag']=="result" && $tag['type']!="close" && $tag['attributes']['code']!=1000)
        throw new Exception("Failed to log in!: " . parse_reason($result));
      return 1;
    }
  }
  
  try {
    $content = build_login($clID, $pw);
    $xml = build_request($content);
    $result = send_request($xml);
    handle_login_result($result);
  
    $doc = new DOMDocument();
    $extension = $doc->createElement("extension");
    $content = $doc->createElementNS("http://www.heartinternet.co.uk/whapi/ext-package-2.2", "list");
    $extension->appendChild($content);
    $xml = build_request_short($extension);
    $result = send_request($xml);
  
    $target_level = 0;
    foreach($result as $tag) {
      if($tag['tag']=="result" && $tag['type']!="close" && $tag['attributes']['code']!=1000)
        throw new Exception("Failed to list packages: " . parse_reason($result));
  
      if($target_level) {
        if($tag['level']<=$target_level and $tag['type']=='close') {
          $target_level=0;
          echo $package_id . " ". $domain_name . "<br/>";      
        } else {
          if($tag['tag']=="ext-package:id") $package_id = $tag['value'];
          else if($tag['tag']=="domainName") $domain_name = $tag['value'];
        }
      }
  
      if($tag['tag']=="ext-package:package") $target_level = $tag['level'];
    }
  
  } catch(Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
  }
  
  fclose($res);
  
  ?>

Ruby [^Back to contents]

This example inspects a package, printing its ID and domain names.

[Show]
  #!/usr/bin/ruby -w
  
  APIHost = "api.heartinternet.uk"
  APIPort = 1701
  EPPclID="ccf0049fd0f38c61"
  EPPpw="SDFssa37="
  PackageID="92a73bc7ae06c6b0"
  
  require 'rexml/document'
  
  class WHAPI
    def initialize(host, port)
      @io = IO.popen("openssl s_client -connect #{host}:#{port} -quiet -verify 10", "r+")
      get_response
    end
  
    def get_response
      size = @io.read(4).unpack("N")[0]
      return @io.read(size - 4)
    end
  
    def send_request(output)
      @io.write( [ output.length + 4 ].pack("N") + output)
      @io.flush
      response=get_response
      if(response) then
        result = REXML::Document.new(response)
        return result
      else
        # Error handling.
        raise "Invalid response"
      end
    end
    class Proxy
      def initialize(whapi)
        @whapi=whapi
      end
  
      def build_xml_short
        require 'rexml/document'
        doc = REXML::Document.new
        whapi_top = doc.add_element("whapi")
        whapi_top.add_namespace("urn:ietf:params:xml:ns:epp-1.0")
        whapi_top.add_namespace("ext-whapi", "http://www.heartinternet.co.uk/whapi/ext-whapi-2.0")
        whapi_top.add_namespace("package", "http://www.heartinternet.co.uk/whapi/package-2.2")
  
        yield(whapi_top)
  
        output = ""
        output << '<?xml version="1.0"?>'
        doc.write(output)
        output
      end
  
      def build_xml
        return build_xml_short do
          |top|
          command = top.add_element("command", {})
          yield(command)
        end
      end
  
      def xml_and_request_short(&code)
        @whapi.send_request(build_xml_short(&code))
      end
  
      def xml_and_request(&code)
        @whapi.send_request(build_xml(&code))
      end
      def parse_reason(result)
        REXML::XPath.each(result, "//result/reason") do
          |el|
          return "#{el.attributes['code']}:#{el.text}";
        end
      end
  
      def hello
        result = xml_and_request_short do
          |command|
          command.add_element('hello', {})
        end
        if(not REXML::XPath.first(result, "//greeting")) then
          raise "Failed: " + parse_reason(result)
        end
      end
  
      def log_in(clID, pw)
        result = xml_and_request do
          |command|
          login_el = command.add_element('login', {})
          login_el.add_element('clID', {}).add_text(clID)
          login_el.add_element('pw', {}).add_text(pw)
          options = login_el.add_element('options', {})
          options.add_element('version', {}).add_text("1.0")
          options.add_element('lang', {}).add_text("en")
          svcs = login_el.add_element('svcs', {})
          svcs.add_element('objURI', {}).add_text("http://www.heartinternet.co.uk/whapi/package-2.2")
          svcExtension = login_el.add_element('svcExtension', {})
          svcExtension.add_element('extURI', {}).add_text("http://www.heartinternet.co.uk/whapi/ext-whapi-2.0")
          svcExtension.add_element('extURI', {}).add_text("http://www.heartinternet.co.uk/whapi/ext-package-2.2")
        end
        if(REXML::XPath.first(result, "//result").attributes["code"]!="1000") then
          raise "Failed: " + parse_reason(result)
        end
        return clID
      end
  
      def inspect_package(package_id)
        result = xml_and_request do
          |command|
          inspect_el = command.add_element("info", {}).add_element('package:info', {})
          inspect_el.add_element('package:id', {}).add_text(package_id.to_s)
        end
        if(REXML::XPath.first(result, "//result").attributes["code"]!="1000") then
          raise "Failed: " + parse_reason(result)
        end
        package_id = REXML::XPath.first(result, "//package:id").text
        domain_names = REXML::XPath.match(result, "//package:domainName").collect do
          |el|
          el.text
        end
        return package_id, domain_names
      end
    end
  end
  
  whapi = WHAPI.new(APIHost, APIPort)
  proxy = WHAPI::Proxy.new(whapi)
  proxy.hello
  session_id = proxy.log_in(EPPclID, EPPpw)
  package_id, domain_names = proxy.inspect_package(PackageID)
  
  require 'cgi'
  cgi = CGI.new
  print cgi.header("text/plain")
  puts package_id
  puts domain_names

SCHEMAS [^Back to contents]

In the same location as this document, you will find schema (*.xsd) files which describe the syntax used, in a machine-readable format. Although these are not normative (actual behaviour may sometimes deviate from them), the server should always provide a conforming response and you may find it useful to validate your requests against the schema files as well, assuming you have a validating XML parser available.

Even if you don't have a validating parser, reading the schema files may provide a useful overview of the expected syntax.

Filenames [^Back to contents]

ext-contact-2.0.xsd
ext-domain-2.5.xsd
ext-host-2.0.xsd
ext-null-2.0.xsd
null-2.0.xsd
ext-whapi-2.0.xsd
whapi-common-.xsd

NOTES [^Back to contents]

Object Identifiers [^Back to contents]

Where objects which don't have an obvious name must be referenced, we use object identifiers to provide a persistent reference to the internal identification mechanism in use.

The format is one or more letters or numbers, then a dash, then a short code identifying the service you're connected to, eg: 1D036EA7F3B3A448-HI

In contexts where this is not needed for EPP compatibility (everything apart from domain name operations and <info> responses), the dash and trailling characters are excluded.

Batch operations [^Back to contents]

Wherever multiple operations are batched together - eg. adding domain names to packages - there is the possibility that some will succeed before a problem is detected and an error response is given. For this reason we limit the number of operations that you can batch together, and you should check how many operations completed if you get an error response.

Client Transaction IDs (<clTRID>) [^Back to contents]

EPP supports transaction IDs provided by the client as <clTRID>. This is intended to help you match up your requests to the corresponding responses, assuming that you logged both. The server will echo back whatever <clTRID> you provide, along with its own server transaction ID (<svTRID>). If you're going to use <clTRID>s, you should ensure that they are always unique, for which just providing a random value should be fine.

Some of our commands which don't fit in the normal EPP model (such as list commands) are implemented as top-level extensions. It's syntactically invalid to provide a <clTRID> element in these cases, so we have added support for <ext-whapi:clTRID> in these cases, which works the same way.

All our examples presume a random client transaction ID has been provided, where applicable, and show a sample server transaction ID response.

Identifying the server [^Back to contents]

As standard with EPP, the server will identify itself when you connect in the <greeting>. However, to ease debugging, we have our test server to only use server transaction IDs (<svTRID>s) which start with "test-", and the live server uses "live-". The rest of the transaction ID is just a unique value.

Error handling [^Back to contents]

When an operation is not successful, you'll get a response like this:

[Show]
  <?xml version='1.0'?>
  <epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:ext-whapi="http://www.heartinternet.co.uk/whapi/ext-whapi-1.0"
    xmlns:package="http://www.heartinternet.co.uk/whapi/package-2.2">
    <response>
      <result code='2304'>
        <msg>101: two.example.org is already used for web hosting</msg>
      </result>
      <trID>
        <svTRID>1294326125</svTRID>
      </trID>
    </response>
  </epp>

The above will:

1. Tells you that something has failed (EPP result code does not start with 1)

2. Gives you a human-readable message and WHAPI error code (<msg>) to go with that, which may contain additional debugging information for cases where the EPP error code is not completely unambiguous. The WHAPI error code is intended to support automatic error handling in your scripts.

You can get error responses for a variety of reasons, from syntax errors to lack of credits, so regardless of any specific actions you may take in response to an error (eg. emailing yourself, sending a different request) you will probably find it useful to log the error message.

If you have an error response which is completely unexplained and you need to contact support, we will usually want to see both the full request XML and the full response XML, so you should be prepared to have a debugging mode where you can dump these out.

EPP Error codes [^Back to contents]

These are not documented here, please see RFC 5730. The important part to remember is that 1000, 1001 and 1500 are the common success codes.

WHAPI Error codes [^Back to contents]

Prefixes

(no prefix)

A general error condition

2xxx

A domain-name-related error

Types

0xx

Protocol-level error, eg. you're sending something other than XML.

3xx

Not an error, just an indication that no work is to be done. Normally you don't have to do anything when you get this response.

4xx

A problem that you should be able to resolve yourself (eg. wrong password).

5xx

A problem that you probably would not be able to resolve yourself (eg. WHOIS failures)

Specific error codes

The following error codes may be included in the response from the server:

000

Please submit a request

001

Invalid request syntax

002

No such command

010

Timed out waiting for a valid request

300

No change required

400

No matching authcode

401

No session

402

Authentication required, please log in

405

You have not configured this service

406

This service is not supported during beta testing

407

Authentication problem, please contact support

410

Operation not possible at this time, please contact support

450

Purchase failure, please try via the web site instead

451

Purchase failure, price is greater than specified maximum

452

Purchase failure, you must select a bank account to use

453

Purchase failure, invalid period supplied

454

Purchase failure, server configuration does not support that OS/addon

455

Server does not support that state

500

Unknown internal error

550

Purchase failure, please contact support

2400

All TLDs specified are not available

2401

The number of years specified is unsupported

2402

Insufficient credits

2403

The domain name is not available for that operation

2404

The operation is not available due to an in-progress or recently completed registration or transfer

2405

The IPS-TAG is incorrect for transfer. Please change it to HEARTINTERNET or EXTEND first.

2410

No such contact found

2420

Syntactically invalid domain name

2501

Registry transaction failed

Character Sets and Encodings [^Back to contents]

When you send text data to a program or service, it is encoded as a series of 8-bit bytes. The receiving program or service needs to know what character each byte represents, but there are many different schemes to express that.

If someone has given you data from a web form, it could be in virtually any character set, but usually if all the entered text is in the ISO-8859-1 set (please see below) it will use that, and otherwise it will use UTF-8 (please see below). It's recommended that you ensure that all your data is in UTF-8 before sending to the API, to do this you can use tools like iconv: http://www.php.net/iconv

If you send ISO-8859-1 data to the API but claim that it is UTF-8, the request will be rejected as this makes the XML invalid. If you send UTF-8 data to the API but claim that it is ISO-8859-1, the request will contain some gibberish character sequences, eg. "£" for the pound sign or "€" for the euro sign.

For more information about character encoding in XML, please see http://www.w3.org/TR/xml11/#charencoding

ASCII

The oldest programs and services expect ASCII, which uses 7 bits of each byte to express the most common American characters (alphabet, numbers, punctuation, and the dollar sign mainly). Modern character sets are usually a "superset" of ASCII, which means that all the characters in the ASCII range are expressed with the same bits as if they were ASCII.

In ASCII, "a" would be expressed as [61], an "oe" character would be impossible to express, and a pound sign would be impossible to express.

ISO-8859-1

In the modern English-speaking world, the encoding scheme is often ISO-8859-1 (aka Latin1), which uses one byte per character and can express fewer than 256 characters, including the pound sign and several accented characters. This is a common default for internet services created in the 1990s.

In ISO-8859-1, "a" would be expressed as [61], an "oe" character would be impossible to express, and a pound sign would be expressed as [a3].

ISO-8859-15

In Europe, you're more likely to use the similar ISO-8859-15, which is distinctive in that it includes the Euro sign and a few more accented characters. No systems default to using this character set.

In ISO-8859-15, "a" would be expressed as [61], an "oe" character would be expressed as [bd], and a pound sign would be expressed as [a3].

Unicode (UTF-8, UTF-16)

For situations where a greater range of characters is needed, the Unicode character set contains many thousands of characters, and this is generally the best choice. There are two common encodings of Unicode: UTF-8 and UTF-16. XML content by default is defined as being encoded in UTF-8. This is a superset of ASCII and encodes each character as 1-6 bytes (generally 1-3 bytes). UTF-16 is used by Microsoft Windows, it is not a superset of ASCII and it encodes each character as 2-4 bytes. Characters outside the ASCII range which are encoded as bytes using ISO-8859-1 cannot be parsed as UTF-8 or UTF-16.

In UTF-8, "a" would be expressed as [61], an "oe" character would be expressed as [c5][93], and a pound sign would be expressed as [c2][a3].

In UTF-16, "a" would be expressed as [00][61], an "oe" character would be expressed as [01][53], and a pound sign would be expressed as [00][a3].

EPP Object Status Codes [^Back to contents]

The EPP specification provides several status codes, of which we use:

ok

This indicates in effect that no other statuses apply.

inactive

This is supposed to indicate that you cannot change the object, but we use it to express that no services are being offered for the object. You should take "inactive" as being equivalent to the EPP statuses "clientHold" or "serverHold".

In cases where other status codes are used which lack any server or client prefix, you should consider them to be prefixed with "server".

EPP Concepts [^Back to contents]

For a proper description of EPP, you should view RFC 5730 as described above. This is just a simple overview of the concepts involved.

Objects and Syntax

EPP is all about provisioning services as represented by objects. Each object type can be <create>d, <update>d (usually with inconsequential changes), <delete>d, inspected with <info>, <renew>ed and <transfer>ed, with restrictions and limitations as appropriate to the object type. By default, EPP can be used with domain names ("domain"), nameservers ("host") and contacts ("contact").

The most complex of the commands is <update>. This in general should cover any allowed changes to the object, excluding the expiry date and reseller ownership. Any features which make sense to add or remove are expressed via <add> or <rem> blocks; this is the case even when you are just changing something, eg. changing nameservers involves an <add> with a <rem>. Anything which is guaranteed to be present and can never be added or removed is just set using <chg> instead. Mixed requirements favour <add>/<rem>, so for example disabling an object usually means adding a status called "inactive" because there are other statuses (eg. "clientTransferProhibited") which you need to be able to add and remove.

Operations which fall outside the scope of the standard EPP commands are dealt with using extensions. There are two kinds of extension behaviours: those which modify an existing command, and those which add a new one. Usually an extension must be explicitly invoked for each command where it is wanted.

Modifying an existing command involves adding an <extension> element after the original command, with some extension-specific elements. This can be used to perform minor variations on existing commands (for example setting a specific expiry date on renewal), or to allow standard commands and extension commands to be batched together (for example, suggesting similar domain names along with a domain <info> response).

Adding a new command as an extension involves an <extension> element with no <command> element at all. This would normally be done when an operation doesn't fit in with standard EPP commands at all, for example listing objects. Generally these kind of extensions are kept very simple in order to reduce the amount of custom client code required.

EPP implementations may provide custom objects, but these would conventionally only offer the standard EPP commands.

Common Object Features

Objects have a set of common features to simplify interacting with them. Some objects may not implement, or may not usefully implement, all of these features.

id

A unique identifier for the object. This would always be needed except for situations where an object is uniquely and immutably known by some other identifier - for example the name of a domain. For objects where an id applies, it may have any format, and can sometimes be set by the client when the object is created.

roid

A globally unique identifier for the object. This must exist for all objects, and is assigned by the server.

authInfo

Some kind of authorisation/authentication value to allow an "owner" of an object to identify herself. Typically this is a password, but other types of authentication are possible. Providing this in any context other than setting it expresses that the client is acting on behalf of another party.

In some contexts this may be used by clients referring to other clients' objects.

status

A series of flags indicating something about the current state of the object. One of the flags is typically "ok", "inactive" might be set to disable the object, and if there are flags which may be set by the client or the server they will be prefixed with "client" or "server" respectively.

clID

An indication of the client who currently owns the object (changes on transfer).

crID

An indication of the client who created the object.

crDate

The date/time when the object was created.

upID

An indication of the client who last updated the object (usually via <update>).

upDate

When the object was last updated.

exDate

When the object will expire (need renewal).

trDate

When the object was last transferred (if at all).

Object / Extension Negotiation

When you start a stream to an EPP server, it immediately sends a <greeting> element. This explicitly lists (separately) all the objects and extensions which the server supports. When you reply with your <login>, you tell the server which of those objects you intend to use. Some combinations may not be supported (for example you might not be able to load different versions of the same object), although this is dependent on the implementation.

Negotiating the services to use at the very beginning provides three advantages:

(1) The client knows immediately if an extension cannot be loaded, rather than getting half-way through the stream first;

(2) Any loading delays are at the start of the connection, providing a better guarantee of response time for later transactions;

(3) Some passive extensions may be loaded, which will affect later commands without needing to be specified each time, eg. you might have an extension to set the default language to German.

Encoding and Transport

EPP is only expressed in XML, which is a reasonable way of having a well-understood interchange format and of supporting fairly advanced syntax checks. For this purpose, EPP services use XML Schema to express the specific syntax requirements. This can't express all possible invalid combinations of data, but it can help the client detect simple errors.

Only one transport mechanism is specifically defined for EPP, that is TCP on port 700. Live EPP services will generally run on port 700, but test EPP services may use a different port or host.

Loading Multiple Versions of One Object or Extension [^Back to contents]

Prior to version 2.0 of all modules, it was possible to request multiple versions of an object, but only one would actually be loaded, resulting in unexpected behaviour if you tried to use a version other than the loaded one. Version 2.0 and later is designed to support loading multiple versions with no problems, and you will always get the version you request. For example, if you were to try to load:

ext-domain-1.0
ext-domain-1.2
ext-domain-2.3

...you could reliably use ext-domain-2.3 later, but if you try to use ext-domain-1.0 or ext-domain-1.2 you might get either version.

Please note that the intent is that you only load modules which your code will use, as in the example <login> frame above.

Changelog [^Back to contents]

2016-05-18 [^Back to contents]

Disabled SSL 3.0 support. If your HTTP library forces the use of SSL 3.0 rather than TLS, you will no longer be able to connect to the API. Please update your libraries and/or configuration so that TLS is available.

2014-03-21 ext-domain-2.4 [^Back to contents]

Added .uk domain preorder support

2014-03-06 ext-domain-2.3 [^Back to contents]

Added support for Donuts registry domain categories in <domain:check>.

Added implicit trademark claim checking in <domain:check>.

2014-02-25 ext-domain-2.2 [^Back to contents]

Add support for registrant security questions for .sexy and .tattoo domains.

2014-01-27 ext-domain-2.1 [^Back to contents]

Add support to add privacy to domains via <domain:update>

2012-10-30 ext-contact-2.0 ext-domain-2.0 ext-host-2.0 ext-null-2.0 null-2.0 ext-whapi-2.0 whapi-common-2.0 [^Back to contents]

Updates to nominally support using multiple different versions of objects/extensions during the same session.

Added a note about version conflicts and ambiguity.

2012-07-30 ext-domain-1.5 [^Back to contents]

Add support for premium/suggestion searches in <domain:check>; add support for premium domains in <domain:create>.

2012-05-09 ext-domain-1.4 [^Back to contents]

Add support for advance renewals in <domain:renew>

2011-12-20 ext-domain-1.3 [^Back to contents]

Add support for <domain:authInfo> as an expression of the domain control panel password.

Updated <domain:create> and <domain:transfer> to encapsulate extension results in corresponding <ext-domain:*Data> elements.

2011-11-16 [^Back to contents]

Updated documentation to explain some EPP concepts.

2011-11-08 [^Back to contents]

Modified <domain:renew> to allow post-expiry renewals at timescales closer to what the actual registries allow.

2011-10-26 ext-dns-1.0 [^Back to contents]

DNS functionality restrictions relaxed: DNS commands are now available to domain resellers.

2011-09-20 [^Back to contents]

Add support for changing domain name servers in <domain:update>

2011-07-08 ext-domain-1.2 [^Back to contents]

Add support for identifying which package a domain name is attached to, and improve <domain:info> response syntax to have just one element as a direct child of <extension>.

2011-06-16 [^Back to contents]

Add support for limiting the number of responses in <ext-support:query>

2011-06-06 [^Back to contents]

Minor update to allow _*._tls SRV records.

2011-06-01 ext-domain-1.1 [^Back to contents]

Added placeholder documentation for <domain:update>

Required an explicit extension in the request to get an extended the <domain:info> response.

2011-05-25 [^Back to contents]

Added a note about character sets

2011-03-31 [^Back to contents]

Non-domain-related functions moved to a separate document, api2f.html

2010-11-30 database-1.1 ext-antivirus-1.0 ext-billing-1.0 ext-contact-1.0 ext-database-1.0 ext-domain-1.0 ext-mailbox-1.1 ext-host-1.0 ext-null-1.0 ext-package-1.0 ext-security-1.0 ext-server-1.0 ext-support-1.0 ext-wbp-1.0 ext-whapi-1.0 mailbox-1.2 null-1.1 package-1.4 server-1.1 support-1.3 whapi-common-1.0 [^Back to contents]

Rewritten to operate as a true EPP service. Virtually all syntax has changed, several schemas have been split or renamed.

Added <domain:info> for inspecting domains.

Added non-premium standalone mailboxes to <ext-mailbox:list> and <mailbox:info>

Added initial support for Web Builder Plus (ext-wbp)

Added initial support for personalised secure server (ext-security)

Added initial support for email anti-virus services (ext-antivirus)

Added initial support for virtual nameservers (ext-host)

Added client transaction ID (<clTRID>) support.

Added an indication of domain privacy to <domain:info>

2010-11-26 billing-1.2 [^Back to contents]

Added simple read-only billing support.

2010-11-08 [^Back to contents]

Fixed an issue with correctly specifying DS features under some circumstances.

2010-09-02 server-1.0 [^Back to contents]

Support for ordering dedicated servers via the prebasket only.

2010-08-11 database-1.0 mailbox-1.0 [^Back to contents]

Support for chargeable ordering of Microsoft SQL Server databases, premium mailboxes, and exchange mailboxes.

2010-08-11 whapi-1.1 null-1.0 package-1.3 contact-1.1 domain-1.2 support-1.2 [^Back to contents]

Changes to allow slightly more EPP-style calls, with a null object for testing/example purposes. Other minor corrections included.

Please note that this now runs on a different port by default, with a different protocol.

2010-03-26 package-1.2 [^Back to contents]

Added support for names with email addresses in <package:create> and <package:resend-welcome-email>

2009-10-30 [^Back to contents]

Added the option to update existing packages in <package:set-type>.

2009-10-08 [^Back to contents]

Added server-type to the <package:list-types> response.

2009-10-07 [^Back to contents]

Added status page retrieval support.

2009-09-29 [^Back to contents]

Added timestamps to server responses, and documentation links, to ease debugging.

2009-09-25 package-1.1 [^Back to contents]

Added <package:inspect-status>, for getting status information.

2009-09-23 support-1.1 [^Back to contents]

Added a support database interface. This includes general support for browsing by category, search, and returning the actual question/answer pairs.

2009-09-22 domain-1.1 [^Back to contents]

Added <domain:list> to list your domain names

2009-09-09 [^Back to contents]

Dropped the requirement for a <type-name> while updating web hosting package types. This was intended to be required for adding web hosting package types only.

Added clarification for instances where a request is rejected because it fails schema validation.

Added an explicit error message for when more than 2 MySQL databases are requested for a Windows package type.

2009-07-21 [^Back to contents]

Dropped the requirement for an <email-address> during web hosting package creation. This is to support resellers who have no welcome emails at all.

2009-07-13 whapi-1.0 package-1.0 contact-1.0 domain-1.0 [^Back to contents]

End of beta