ISNIC EPP Interface Specification
Introduction
First of all the .is ccTLD is not operated as registry/registrar (shared registry system).
ISNIC is proud of allowing registrants, with enough technical skills, to contact the registry directly, via the self service retro looking website .
This means that we are going to have to jump through some awkward hoops when implementing EPP (as defined in RFC5730 which is based upon RFC3375 which is defined for "shared registries") between the .is registry and its service providers (ISNIC Service Provider - DNSP/ISP, actually registered DNS hosting providers for .is domains).
But with some assumptions and standard operating procedures this "should" work.
So there are no registrars providing interfaces to ISNIC only registered DNSPs (unregistered DNSPs also for that matter) and the registrants themselves (those with enough technical skills).
Which means there are no sponsoring clients on domains, hosts or contacts. The closest ISNIC has to a sponsoring client is the admin contact.
This also means there are no contact transfers. Domains objects do not have subordinate connections to host objects (yet).
If you (and your company) are up to operating under these restrictions and understand what the implications are, feel free to create a contact and add ip addresses or subnets and request access to the EPP server.
We are building this EPP interface to serve our DNSPs (ISPs) so please send any comments, bug reports or questions to api-support@isnic.is .
Production environment
The EPP server is running at epp.isnic.is port 700. (Does not accept self signed client certificates.)
Sandbox environment
The EPP server is running at epp.sandbox.isnic.is port 700. (Does not accept self signed client certificates.)
Web interface at https://www.sandbox.isnic.is (See version of this page for upcoming changes ).
Requirements for access
Written contract with ISNIC or paid at least one domain registration or annual renewal fee
Show competency in our sandbox environment by performing the operations:
login
poll req and poll ack
create:domain
renew:domain
Changelog
Show complete changelog .
Version Date Description Developer Type Content
backend 2020-06-02 enforce ip/subnet acl, allow epp login with totp enabled on contact axel fix enforce ip/subnet acl, allow epp login with totp enabled on contact
1.9.59 2020-06-09 Internal health checks axel add Internal health checks
1.9.59 2020-06-09 Internal health checks axel update Update libphonenumber to 8.12.5
1.9.60 2020-07-28 Minor change axel update Update libphonenumber to 8.12.7
backend 2021-01-25 Postal code on contact only required if country is Iceland axel fix Postal code on contact only required if country is Iceland
Schemas from RFC's
Note: These are modified versions with "annotation/documentation" elements about the intricacies of .is and suggested workarounds.
contact-1.0.xsd [raw]
domain-1.0.xsd [raw]
host-1.0.xsd [raw]
secDNS-1.1.xsd [raw]
rgp-1.0.xsd [raw]
Schemas for .is extensions
is-ext-contact-1.0.xsd [raw]
is-ext-domain-1.0.xsd [raw]
is-ext-host-1.0.xsd [raw]
is-ext-list-1.0.xsd [raw]
is-ext-account-1.0.xsd [raw]
Note about our examples below
All our examples have the epp elemant definition replaced to increase readability.
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:is-ext-contact="urn:is.isnic:xml:ns:is-ext-contact-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:is-ext-domain="urn:is.isnic:xml:ns:is-ext-domain-1.0" xmlns:ns7="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:is-ext-host="urn:is.isnic:xml:ns:is-ext-host-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0">
is replaced by
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Payment types
For create:domain and renew we use the createType and renewType extensions to set which payment method to use.
For testing purposes on the development environment create creditcard number:
brand VISA, number 4571999400007492, CVC 150 and expire date any date in the future.
After the card has been created use the ID of the entity in cardID variable of the ISNIC extension and set the cardCVC correctly.
However on production large providers generally use prepayments to minimize errors in payment gateways and to get a monthly summary invoice.
A prepaid card is created after a deposit is made to ISNIC. Since there is a minor bug in our extenstion schema (not nillable and integer) when using cardID that is prepaid use cardCVC=1.
For EUR deposits use:
OWNER 660595-2449 - Internet á Íslandi hf.
IBAN IS68 0137 3871 0013 6605 9524 49
SWIFT (BIC) NBIIISRE
For ISK deposits use:
Account number at Landsbankinn: 0137-26-21123
ISNIC's kennitala: 6605952449
Note: If you transfer money you
must send an email to
billing@isnic.is stating which contact the deposit is meant for.
After deposits have been made the balance can be fetched by calling
info:account .
Below is a list of things that are known to deviate from standard EPP.
When there are discrepancies between this list and our schemas then the schemas have precedence.
Login
Note: the standard schemas only allows passwords to be 6 to 16 characters long, but the web interface actually allows 72 characters.
So do not set the password length shorter then 6 and longer then 16 characters if you intend to use the contact to login to EPP.
Note: that this function is rate limited at 20 requests per 10 min.
Info
Domain
Note: that this function is rate limited at 50 requests per 30 min. Also note the rate limit does not apply when looking up domains connected to current logged in contact.
Show example - Fetch domain info successfully with DNSSEC
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <domain:info>
C: <domain:name>isnic.is</domain:name>
C: </domain:info>
C: </info>
C: <clTRID>dummy_session_53efe319</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:infData>
S: <domain:name>isnic.is</domain:name>
S: <domain:roid>5125D-IS</domain:roid>
S: <domain:status s="ok"/>
S: <domain:registrant>ISHM-IS</domain:registrant>
S: <domain:contact type="billing">ISHM-IS</domain:contact>
S: <domain:contact type="tech">ISHM-IS</domain:contact>
S: <domain:contact type="admin">ISHM-IS</domain:contact>
S: <domain:ns>
S: <domain:hostObj>ns1.isnic.is</domain:hostObj>
S: <domain:hostObj>ns2.isnic.is</domain:hostObj>
S: <domain:hostObj>ns3.isnic.is</domain:hostObj>
S: </domain:ns>
S: <domain:clID>ISHM-IS</domain:clID>
S: <domain:crDate>1999-03-16T00:00:01.000Z</domain:crDate>
S: <domain:exDate>2020-01-01T00:00:00.000Z</domain:exDate>
S: </domain:infData>
S: </resData>
S: <extension>
S: <is-ext-domain:infData>
S: <is-ext-domain:contact type="zone">ISHM-IS</is-ext-domain:contact>
S: </is-ext-domain:infData>
S: <secDNS:infData>
S: <secDNS:dsData>
S: <secDNS:keyTag>15411</secDNS:keyTag>
S: <secDNS:alg>8</secDNS:alg>
S: <secDNS:digestType>2</secDNS:digestType>
S: <secDNS:digest>3D123E3042028CFD12313A6D47C693048826123B08CB79BA0123DED167A412383</secDNS:digest>
S: </secDNS:dsData>
S: </secDNS:infData>
S: </extension>
S: <trID>
S: <clTRID>dummy_session_53efe319</clTRID>
S: <svTRID>7cb3d1b9784cffbe5cbeeab810a1ed29</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Fetch nonexistent domain info
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <domain:info>
C: <domain:name>idontexist123123.is</domain:name>
C: </domain:info>
C: </info>
C: <clTRID>dummy_session_e5ccc6df</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2303">
S: <msg lang="en">Domain 'idontexist123123.is' doesn't exists
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_e5ccc6df</clTRID>
S: <svTRID>15a2a509eb125a2aac83c09315f521b9</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Fetch pendingCreate domain info successfully
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <domain:info>
C: <domain:name>isnicpending.is</domain:name>
C: </domain:info>
C: </info>
C: <clTRID>dummy_session_8629280f</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:infData>
S: <domain:name>isnicpending.is</domain:name>
S: <domain:roid>82943D-IS</domain:roid>
S: <domain:status s="pendingCreate"/>
S: <domain:registrant>TEST-IS</domain:registrant>
S: <domain:contact type="billing">TEST2-IS</domain:contact>
S: <domain:contact type="tech">TEST2-IS</domain:contact>
S: <domain:contact type="admin">TEST2-IS</domain:contact>
S: <domain:ns>
S: <domain:hostObj>parking01.sandbox.isnic.is</domain:hostObj>
S: <domain:hostObj>parking02.sandbox.isnic.is</domain:hostObj>
S: </domain:ns>
S: <domain:clID>TEST2-IS</domain:clID>
S: <domain:crDate>2014-07-01T16:11:16.000Z</domain:crDate>
S: <domain:upDate>2014-07-01T16:11:16.000Z</domain:upDate>
S: <domain:exDate>2014-07-01T16:11:16.000Z</domain:exDate>
S: </domain:infData>
S: </resData>
S: <extension>
S: <is-ext-domain:infData>
S: <is-ext-domain:contact type="zone">ISHM-IS</is-ext-domain:contact>
S: </is-ext-domain:infData>
S: </extension>
S: <trID>
S: <clTRID>dummy_session_8629280f</clTRID>
S: <svTRID>15a2a509eb125a2aac83c09315f521b9</svTRID>
S: </trID>
S: </response>
S: </epp>
Note: that this function is rate limited at 50 requests per 30 min.
Show example - Fetch contact info successfully
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <contact:info>
C: <contact:id>ISHM-IS</contact:id>
C: </contact:info>
C: </info>
C: <clTRID>dummy_session_a122fcfb</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <contact:infData>
S: <contact:id>ISHM-IS</contact:id>
S: <contact:roid>1232C-IS</contact:roid>
S: <contact:status s="serverDeleteProhibited"/>
S: <contact:status s="serverTransferProhibited"/>
S: <contact:postalInfo type="int">
S: <contact:name>ISNIC Hostmaster</contact:name>
S: <contact:addr>
S: <contact:street>Katrínartúni 2</contact:street>
S: <contact:city>Reykjavík</contact:city>
S: <contact:sp/>
S: <contact:pc>105</contact:pc>
S: <contact:cc>IS</contact:cc>
S: </contact:addr>
S: </contact:postalInfo>
S: <contact:voice>+354.5782030</contact:voice>
S: <contact:email>regdebug@isnic.is</contact:email>
S: <contact:clID>ISHM-IS</contact:clID>
S: <contact:crID>ISHM-IS</contact:crID>
S: <contact:crDate>2002-05-15T03:09:37Z</contact:crDate>
S: </contact:infData>
S: </resData>
S: <extension>
S: <is-ext-contact:infData>
S: <is-ext-contact:type>role</is-ext-contact:type>
S: <is-ext-contact:status s="ok"/>
S: <is-ext-contact:autoUpdateFromNationalRegistry>false</is-ext-contact:autoUpdateFromNationalRegistry>
S: <is-ext-contact:cancelPaper>true</is-ext-contact:cancelPaper>
S: </is-ext-contact:infData>
S: </extension>
S: <trID>
S: <clTRID>dummy_session_a122fcfb</clTRID>
S: <svTRID>7cb3d1b9784cffbe5cbeeab810a1ed29</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Fetch contact info successfully - pending
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <contact:info>
C: <contact:id>PENDING-IS</contact:id>
C: </contact:info>
C: </info>
C: <clTRID>dummy_session_733b4130</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <contact:infData>
S: <contact:id>PENDING-IS</contact:id>
S: <contact:roid>77428C-IS</contact:roid>
S: <contact:status s="pendingCreate"/>
S: <contact:postalInfo type="int">
S: <contact:name>Test Testson</contact:name>
S: <contact:addr>
S: <contact:street>Test Street 2</contact:street>
S: <contact:city>Reykjavík</contact:city>
S: <contact:sp/>
S: <contact:pc>101</contact:pc>
S: <contact:cc>NI</contact:cc>
S: </contact:addr>
S: </contact:postalInfo>
S: <contact:voice>+354.8888888</contact:voice>
S: <contact:email>pending@isnic.is</contact:email>
S: <contact:clID>PENDING-IS</contact:clID>
S: <contact:crID>PENDING-IS</contact:crID>
S: <contact:crDate>2014-02-18T09:50:38Z</contact:crDate>
S: <contact:upID>ISHM-IS</contact:upID>
S: <contact:upDate>2014-02-18T09:50:38Z</contact:upDate>
S: </contact:infData>
S: </resData>
S: <extension>
S: <is-ext-contact:infData>
S: <is-ext-contact:type>person</is-ext-contact:type>
S: <is-ext-contact:status s="pendingCreate"/>
S: <is-ext-contact:autoUpdateFromNationalRegistry>true</is-ext-contact:autoUpdateFromNationalRegistry>
S: <is-ext-contact:cancelPaper>false</is-ext-contact:cancelPaper>
S: </is-ext-contact:infData>
S: </extension>
S: <trID>
S: <clTRID>dummy_session_733b4130</clTRID>
S: <svTRID>78c32aefb2c18b6e991f8903c9b19c2a</svTRID>
S: </trID>
S: </response>
S: </epp>
Host
Note: that this function is rate limited at 1500 requests per hour.
The returned statuses have not been implemented, statusValueType , always set to 'ok'.
Sponsoring client is the admin contact for the host, infDataType .
Show example - Fetch host info successfully
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <host:info>
C: <host:name>ns1.isnic.is</host:name>
C: </host:info>
C: </info>
C: <clTRID>dummy_session_946dd162</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <host:infData>
S: <host:name>ns1.isnic.is</host:name>
S: <host:roid>1234H-IS</host:roid>
S: <host:status s="ok"/>
S: <host:addr ip="v4">193.4.58.91</host:addr>
S: <host:clID>ISHM-IS</host:clID>
S: <host:crID>ISHM-IS</host:crID>
S: <host:crDate>2004-05-27T15:43:43Z</host:crDate>
S: <host:upID>ISHM-IS</host:upID>
S: <host:upDate>2014-09-24T16:48:43Z</host:upDate>
S: </host:infData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_946dd162</clTRID>
S: <svTRID>301aef62810ebcdf21db844419db8ea1</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Fetch host info for host that does not exist
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <host:info>
C: <host:name>ns123123.isnic.is</host:name>
C: </host:info>
C: </info>
C: <clTRID>dummy_session_757c0487</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2303">
S: <msg lang="en">Host 'ns123123.isnic.is' doesn't exists
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_757c0487</clTRID>
S: <svTRID>301aef62810ebcdf21db844419db8ea1</svTRID>
S: </trID>
S: </response>
S: </epp>
List
Will be deprecated (okt. 1. 2018) in favour of RDAP
Used to fetch generic lists
'my': returns domains associated with currently logged in user
Show example - Fetch 'my' list
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <is-ext-list:info>
C: <is-ext-list:listName>my</is-ext-list:listName>
C: </is-ext-list:info>
C: </info>
C: <clTRID>dummy_session_8745fa95</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">OK</msg>
S: </result>
S: <resData>
S: <is-ext-list:infData>
S: <is-ext-list:myList>
S: <is-ext-list:name>test123.is</is-ext-list:name>
S: <is-ext-list:status s="ok"/>
S: <is-ext-list:registrant>TEST-IS</is-ext-list:registrant>
S: <is-ext-list:admin>TEST-IS</is-ext-list:admin>
S: <is-ext-list:billing>TEST-IS</is-ext-list:billing>
S: <is-ext-list:tech>TEST-IS</is-ext-list:tech>
S: </is-ext-list:myList>
S: <is-ext-list:myList>
S: <is-ext-list:name>test124.is</is-ext-list:name>
S: <is-ext-list:status s="hold"/>
S: <is-ext-list:registrant>TEST-IS</is-ext-list:registrant>
S: <is-ext-list:admin>TEST-IS</is-ext-list:admin>
S: <is-ext-list:billing>TEST-IS</is-ext-list:billing>
S: <is-ext-list:tech>TEST-IS</is-ext-list:tech>
S: </is-ext-list:myList>
S: </is-ext-list:infData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_8745fa95</clTRID>
S: <svTRID>cf201d9b6cba338f8493b80fb35a9dac</svTRID>
S: </trID>
S: </response>
S: </epp>
Account
Used to fetch contacts accounts
Fetches accounts that the currently logged in user has access to
Prepaid accounts (brand is ISNICPP) have no number element (card number)
Creditcards (brand is not ISNICPP) have no currency element
Show example - Fetch accounts
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <info>
C: <is-ext-account:info/>
C: </info>
C: <clTRID>dummy_session_7f9a7d69</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <is-ext-account:infData>
S: <is-ext-account:account>
S: <is-ext-account:id>20658</is-ext-account:id>
S: <is-ext-account:contactHandle>TEST-IS</is-ext-account:contactHandle>
S: <is-ext-account:allowedContactHandles>
S: <is-ext-account:contact>TEST-IS</is-ext-account:contact>
S: </is-ext-account:allowedContactHandles>
S: <is-ext-account:owner>Test Testson</is-ext-account:owner>
S: <is-ext-account:expireYear>2017</is-ext-account:expireYear>
S: <is-ext-account:expireMonth>1</is-ext-account:expireMonth>
S: <is-ext-account:brand>ISNICPP</is-ext-account:brand>
S: <is-ext-account:currency>ISK</is-ext-account:currency>
S: <is-ext-account:balance>0</is-ext-account:balance>
S: <is-ext-account:backupAccountID>0</is-ext-account:backupAccountID>
S: </is-ext-account:account>
S: <is-ext-account:account>
S: <is-ext-account:id>20659</is-ext-account:id>
S: <is-ext-account:contactHandle>TEST-IS</is-ext-account:contactHandle>
S: <is-ext-account:allowedContactHandles>
S: <is-ext-account:contact>TEST-IS</is-ext-account:contact>
S: </is-ext-account:allowedContactHandles>
S: <is-ext-account:number>XXXX-XXXX-XXXX-0000</is-ext-account:number>
S: <is-ext-account:owner>Test Testson</is-ext-account:owner>
S: <is-ext-account:expireYear>2017</is-ext-account:expireYear>
S: <is-ext-account:expireMonth>1</is-ext-account:expireMonth>
S: <is-ext-account:brand>VISA</is-ext-account:brand>
S: <is-ext-account:balance>0</is-ext-account:balance>
S: <is-ext-account:backupAccountID>0</is-ext-account:backupAccountID>
S: </is-ext-account:account>
S: </is-ext-account:infData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_7f9a7d69</clTRID>
S: <svTRID>37c9c6d8653f3952fde649c366dc344f</svTRID>
S: </trID>
S: </response>
S: </epp>
Poll
No deviations as of yet, should follow standard.
Messages with code 9301 - WARNING_PROCESS_WAITING are delivered when an asynchronous process is stuck and needs manual intervention.
For example registrant needs to confirm domain transfers and domain delete or there is a billing problem in domain create.
Show example - Poll - Domain create finishes successfully
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <poll op="req"/>
C: <clTRID>dummy_session_6b2fdc8f</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1301">
S: <msg lang="en">Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="1" id="64">
S: <qDate>2015-10-07T09:31:32Z</qDate>
S: <msg lang="en">Domain created</msg>
S: </msgQ>
S: <resData>
S: <domain:panData>
S: <domain:name paResult="true">epp-99b83e98.is</domain:name>
S: <domain:paTRID>
S: <clTRID>dummy_session_de55c779</clTRID>
S: <svTRID>bed6342f132bc130194ea9b03de06c68</svTRID>
S: </domain:paTRID>
S: <domain:paDate>2015-08-11T11:51:25Z</domain:paDate>
S: </domain:panData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_6b2fdc8f</clTRID>
S: <svTRID>a392e5e7ccdcfb5e585b1f25846a5e2b</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Poll - Domain create manual action needed (code 9301)
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <poll op="req"/>
C: <clTRID>dummy_session_6b2fdc9f</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1301">
S: <msg lang="en">Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="1" id="42">
S: <qDate>2015-10-07T15:57:01Z</qDate>
S: <msg lang="en">
{
"msg":"Domain creation errors: No NS records found for domain TEST.IS on nameserver 193.4.58.91; ",
"code":9301,
"domain_name":"test.is",
"domain_paTRID":{
"clTRID":"dummy_session_734c6bf0",
"svTRID":"7cb3d1b9784cffbe5cbeeab810a1ed29"
}
}
</msg>
S: </msgQ>
S: <trID>
S: <clTRID>dummy_session_6b2fdc9f</clTRID>
S: <svTRID>05f845988f739ac6fee5a8adbf0c0fe5</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Poll - Ack a message
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <poll op="ack" msgID="64"/>
C: <clTRID>dummy_session_199aa521</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <msgQ count="1" id="64">
S: <qDate>2015-10-07T09:31:32Z</qDate>
S: <msg lang="en">Domain created</msg>
S: </msgQ>
S: <resData>
S: <domain:panData>
S: <domain:name paResult="true">epp-99b83e98.is</domain:name>
S: <domain:paTRID>
S: <clTRID>dummy_session_de55c779</clTRID>
S: <svTRID>bed6342f132bc130194ea9b03de06c68</svTRID>
S: </domain:paTRID>
S: <domain:paDate>2015-08-11T11:51:25Z</domain:paDate>
S: </domain:panData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_199aa521</clTRID>
S: <svTRID>a392e5e7ccdcfb5e585b1f25846a5e2b</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Poll - Req with no messages
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <poll op="req"/>
C: <clTRID>dummy_session_b05ef1b1</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1300">
S: <msg lang="en">Command completed successfully; no messages</msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_b05ef1b1</clTRID>
S: <svTRID>a392e5e7ccdcfb5e585b1f25846a5e2b</svTRID>
S: </trID>
S: </response>
S: </epp>
Create
Domain
There is no subordinate connection between domain and host objects, yet.
Create with ds records is not yet supported, work around is to add ds records after create.
After domain is created it will be returned in domain:info with status='pendingCreate'.
But before it gets status='active' there is a possiblilty that some manual actions must be taken.
These problems will be notified via message with code 9301 - WARNING_PROCESS_WAITING.
See payment type for info about cardID in the ISNIC extension.
domain:ns must contain fully qualified names of host objects the domain is delegated to, host attributes are not allowed. If no ns is set the domain will be delegated to ISNIC's parking servers
Domain extension .
Show example - Domain not available
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <create>
C: <domain:create>
C: <domain:name>xn--snic-upa.is</domain:name>
C: <domain:registrant>ISHM-IS</domain:registrant>
C: <domain:contact type="admin">ISHM-IS</domain:contact>
C: <domain:contact type="billing">ISHM-IS</domain:contact>
C: <domain:contact type="tech">ISHM-IS</domain:contact>
C: <domain:authInfo>
C: <domain:pw/>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <is-ext-domain:create>
C: <is-ext-domain:cardID>121212</is-ext-domain:cardID>
C: <is-ext-domain:cardCVC>123</is-ext-domain:cardCVC>
C: </is-ext-domain:create>
C: </extension>
C: <clTRID>dummy_session_394fa6f6</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2302">
S: <msg lang="en">The domain ísnic.is is not available for registration
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_394fa6f6</clTRID>
S: <svTRID>7cb3d1b9784cffbe5cbeeab810a1ed29</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Domain queue for creation
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <create>
C: <domain:create>
C: <domain:name>xn--snic-upa.is</domain:name>
C: <domain:registrant>ISHM-IS</domain:registrant>
C: <domain:contact type="admin">ISHM-IS</domain:contact>
C: <domain:contact type="billing">ISHM-IS</domain:contact>
C: <domain:contact type="tech">ISHM-IS</domain:contact>
C: <domain:authInfo>
C: <domain:pw/>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <is-ext-domain:create>
C: <is-ext-domain:cardID>121212</is-ext-domain:cardID>
C: <is-ext-domain:cardCVC>123</is-ext-domain:cardCVC>
C: </is-ext-domain:create>
C: </extension>
C: <clTRID>dummy_session_734c6bf0</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1001">
S: <msg lang="en">Domain 'epp-ca51dbff.is' queued for creation
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_734c6bf0</clTRID>
S: <svTRID>7cb3d1b9784cffbe5cbeeab810a1ed29</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Poll - Domain create finishes successfully
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <poll op="req"/>
C: <clTRID>dummy_session_6b2fdc8f</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1301">
S: <msg lang="en">Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="1" id="64">
S: <qDate>2015-10-07T09:31:32Z</qDate>
S: <msg lang="en">Domain created</msg>
S: </msgQ>
S: <resData>
S: <domain:panData>
S: <domain:name paResult="true">epp-99b83e98.is</domain:name>
S: <domain:paTRID>
S: <clTRID>dummy_session_de55c779</clTRID>
S: <svTRID>bed6342f132bc130194ea9b03de06c68</svTRID>
S: </domain:paTRID>
S: <domain:paDate>2015-08-11T11:51:25Z</domain:paDate>
S: </domain:panData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_6b2fdc8f</clTRID>
S: <svTRID>a392e5e7ccdcfb5e585b1f25846a5e2b</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Poll - Domain create manual action needed (code 9301)
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <poll op="req"/>
C: <clTRID>dummy_session_6b2fdc9f</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1301">
S: <msg lang="en">Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="1" id="42">
S: <qDate>2015-10-07T15:57:01Z</qDate>
S: <msg lang="en">
{
"msg":"Domain creation errors: No NS records found for domain TEST.IS on nameserver 193.4.58.91; ",
"code":9301,
"domain_name":"test.is",
"domain_paTRID":{
"clTRID":"dummy_session_734c6bf0",
"svTRID":"7cb3d1b9784cffbe5cbeeab810a1ed29"
}
}
</msg>
S: </msgQ>
S: <trID>
S: <clTRID>dummy_session_6b2fdc9f</clTRID>
S: <svTRID>05f845988f739ac6fee5a8adbf0c0fe5</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Domain already queued for creation
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <create>
C: <domain:create>
C: <domain:name>xn--snic-upa.is</domain:name>
C: <domain:registrant>ISHM-IS</domain:registrant>
C: <domain:contact type="admin">ISHM-IS</domain:contact>
C: <domain:contact type="billing">ISHM-IS</domain:contact>
C: <domain:contact type="tech">ISHM-IS</domain:contact>
C: <domain:authInfo>
C: <domain:pw/>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <is-ext-domain:create>
C: <is-ext-domain:cardID>121212</is-ext-domain:cardID>
C: <is-ext-domain:cardCVC>123</is-ext-domain:cardCVC>
C: </is-ext-domain:create>
C: </extension>
C: <clTRID>dummy_session_6e358587</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2302">
S: <msg lang="en">The domain epp-ca51dbff.is is already queued for registration
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_6e358587</clTRID>
S: <svTRID>7cb3d1b9784cffbe5cbeeab810a1ed29</svTRID>
S: </trID>
S: </response>
S: </epp>
When this function is used by a logged in contact that is an registered
DNS Providers the contacts are created with status "okUnconfirmed" status and ISNIC sends an email to confirm the registration, otherwise contacts are created with status "pendingCreate".
The contact is usable as a registrant and billing contact when the status is "okUnconfirmed".
When a contact is "pendingCreate" the email must be confirmed by following a url sent in email after 3 days "pendingCreate" contacts are purged.
Contacts have a unique key constraint on (name, sid, street, city, pc, sp, cc, email, voice, mobile and your_reference).
Id can be ignored, it is assigned when contact is created by the server. createType .
AuthInfo:pw is required and becomes the contacts password. createType .
Do not disclose is really just one boolean flag, discloseType .
If the contact is a duplicate of an existing contact, the existing contact is returned
Contact extension . It has come to our attention that some EPP users are not sending in this extension. It will be mandatory after 1. okt. 2018.
Show example - Create contact (person witheld from whois) with postal code missing error
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <create>
C: <contact:create>
C: <contact:id>000</contact:id>
C: <contact:postalInfo type="int">
C: <contact:name>Jón Sveinsson</contact:name>
C: <contact:addr>
C: <contact:street>Aðalstræti 54</contact:street>
C: <contact:city>Akureyri</contact:city>
C: <contact:cc>is</contact:cc>
C: </contact:addr>
C: </contact:postalInfo>
C: <contact:voice>+354.4684162</contact:voice>
C: <contact:email>nonni@isnic.is</contact:email>
C: <contact:authInfo>
C: <contact:pw>ding_ding_dong</contact:pw>
C: </contact:authInfo>
C: <contact:disclose flag="false">
C: <contact:addr type="int"/>
C: <contact:voice />
C: </contact:disclose>
C: </contact:create>
C: </create>
C: <extension>
C: <is-ext-contact:create>
C: <is-ext-contact:type>person</is-ext-contact:type>
C: </is-ext-contact:create>
C: </extension>
C: <clTRID>dummy_session_820394d7</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2306">
S: <msg lang="en">pc - Postal code cannot be blank.
S: pc - Postal code must be specified
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_820394d7</clTRID>
S: <svTRID>e8e5840fa6bc97a22982f2b220431fe8</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Create a duplicate of an existing contact
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <create>
C: <contact:create>
C: <contact:id>000</contact:id>
C: <contact:postalInfo type="int">
C: <contact:name>Jón Sveinsson</contact:name>
C: <contact:addr>
C: <contact:street>Aðalstræti 54</contact:street>
C: <contact:city>Akureyri</contact:city>
C: <contact:cc>is</contact:cc>
C: </contact:addr>
C: </contact:postalInfo>
C: <contact:voice>+354.4684162</contact:voice>
C: <contact:email>nonni@isnic.is</contact:email>
C: <contact:authInfo>
C: <contact:pw>ding_ding_dong</contact:pw>
C: </contact:authInfo>
C: </contact:create>
C: </create>
C: <is-ext-contact:create>
C: <is-ext-contact:type>person</is-ext-contact:type>
C: </is-ext-contact:create>
C: <clTRID>dummy_session_e1d8cf36</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully; Contact already exists</msg>
S: </result>
S: <resData>
S: <contact:creData>
S: <contact:id>JJ100-IS</contact:id>
S: <contact:crDate>2010-11-03T15:25:20.000Z</contact:crDate>
S: </contact:creData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_e1d8cf36</clTRID>
S: <svTRID>bf2cde29584c15226d8fb28894ab29a3</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Create contact (role not witheld from whois) with postal code missing error
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <create>
C: <contact:create>
C: <contact:id>000</contact:id>
C: <contact:postalInfo type="int">
C: <contact:name>ISNIC - Internet á Íslandi hf</contact:name>
C: <contact:addr>
C: <contact:street>Katrínartúni 2</contact:street>
C: <contact:city>Reykjavík</contact:city>
C: <contact:cc>is</contact:cc>
C: </contact:addr>
C: </contact:postalInfo>
C: <contact:voice>+354.4684162</contact:voice>
C: <contact:email>nonni@isnic.is</contact:email>
C: <contact:authInfo>
C: <contact:pw>ding_ding_dong</contact:pw>
C: </contact:authInfo>
C: <contact:disclose flag="true">
C: <contact:addr type="int"/>
C: <contact:voice />
C: </contact:disclose>
C: </contact:create>
C: </create>
C: <extension>
C: <is-ext-contact:create>
C: <is-ext-contact:type>role</is-ext-contact:type>
C: <is-ext-contact:sid>6605952449</is-ext-contact:type>
C: </is-ext-contact:create>
C: </extension>
C: <clTRID>dummy_session_820494d7</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2306">
S: <msg lang="en">pc - Postal code cannot be blank.
S: pc - Postal code must be specified
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_820494d7</clTRID>
S: <svTRID>e8e5840fa6bc97a22982f2b220431fe8</svTRID>
S: </trID>
S: </response>
S: </epp>
Host
Sponsoring client is the host admin contact.
Delete
Domain
Sponsoring client is the domain admin contact.
Show example - When not logged in as admin contact for domain
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <delete>
C: <domain:delete>
C: <domain:name>isnic.is</domain:name>
C: </domain:delete>
C: </delete>
C: <clTRID>dummy_session_28954346</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2201">
S: <msg lang="en">You are not admin contact for this domain</msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_28954346</clTRID>
S: <svTRID>7cb3d1b9784cffbe5cbeeab810a1ed29</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Command completed successfully; action pending
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <delete>
C: <domain:delete>
C: <domain:name>isnic.is</domain:name>
C: </domain:delete>
C: </delete>
C: <clTRID>dummy_session_4562b0e5</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1001">
S: <msg lang="en">Command completed successfully; action pending</msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_4562b0e5</clTRID>
S: <svTRID>71439c0e13f03464e109be0487e0f59e</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Cancel pending domain delete
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <update>
C: <domain:update>
C: <domain:name>isnic.is</domain:name>
C: </domain:update>
C: </update>
C: <extension>
C: <rgp:update>
C: <rgp:restore op="request"/>
C: </rgp:update>
C: </extension>
C: <clTRID>dummy_session_cbcf6263</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Domain delete for 'isnic.is' cancelled</msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_cbcf6263</clTRID>
S: <svTRID>71439c0e13f03464e109be0487e0f59e</svTRID>
S: </trID>
S: </response>
S: </epp>
Not supported, if contact is unused for some time it is automatically expired and then deleted.
Host
Sponsoring client is host admin contact.
Show example - When not logged in as admin contact for host
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <delete>
C: <host:delete>
C: <host:name>ns1.isnic.is</host:name>
C: </host:delete>
C: </delete>
C: <clTRID>dummy_session_66875bb3</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2201">
S: <msg lang="en">You are not the admin contact for the host 'ns1.isnic.is'
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_66875bb3</clTRID>
S: <svTRID>104da57851b9094b5092d7e9009b49a0</svTRID>
S: </trID>
S: </response>
S: </epp>
Renew
Domain
See payment type for info about cardID in the ISNIC extension.
Show example - Domain renewed
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <renew>
C: <domain:renew>
C: <domain:name>isnic.is</domain:name>
C: <domain:curExpDate>2015-01-01Z</domain:curExpDate>
C: </domain:renew>
C: </renew>
C: <extension>
C: <is-ext-domain:renew>
C: <is-ext-domain:cardID>12312</is-ext-domain:cardID>
C: <is-ext-domain:cardCVC>123</is-ext-domain:cardCVC>
C: </is-ext-domain:renew>
C: </extension>
C: <clTRID>dummy_session_9ca08e38</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Domain renewed
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_9ca08e38</clTRID>
S: <svTRID>dcc3c3d6ad2b368e2ef2f6923ec682e6</svTRID>
S: </trID>
S: </response>
S: </epp>
Check
Domain
Note: that this function is rate limited at 7200 requests per 30 min.
No deviations as of yet, should follow standard.
Show example - Domain in use
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <check>
C: <domain:check>
C: <domain:name>isnic.is</domain:name>
C: </domain:check>
C: </check>
C: <clTRID>dummy_session_e769af9c</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:chkData>
S: <domain:cd>
S: <domain:name avail="false">isnic.is</domain:name>
S: <domain:reason lang="en">In use</domain:reason>
S: </domain:cd>
S: </domain:chkData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_e769af9c</clTRID>
S: <svTRID>4b45f6ac5f66cc11c6e2b46754243505</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Check two domains in use and available
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <check>
C: <domain:check>
C: <domain:name>isnic.is</domain:name>
C: <domain:name>thisdoesnotexist123123.is</domain:name>
C: </domain:check>
C: </check>
C: <clTRID>dummy_session_9c886def</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:chkData>
S: <domain:cd>
S: <domain:name avail="false">isnic.is</domain:name>
S: <domain:reason lang="en">In use</domain:reason>
S: </domain:cd>
S: <domain:cd>
S: <domain:name avail="true">thisdoesnotexist123123.is</domain:name>
S: </domain:cd>
S: </domain:chkData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_9c886def</clTRID>
S: <svTRID>4b45f6ac5f66cc11c6e2b46754243505</svTRID>
S: </trID>
S: </response>
S: </epp>
Not used, contact:id is auto assigned by server on contact create.
Host
Note: function is not rate limited.
No deviations as of yet, should follow standard.
Show example - Check host
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <check>
C: <host:check>
C: <host:name>ns1.isnic.is</host:name>
C: </host:check>
C: </check>
C: <clTRID>dummy_session_9763c040</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <host:chkData>
S: <host:cd>
S: <host:name avail="false">ns1.isnic.is</host:name>
S: <host:reason lang="en">In use</host:reason>
S: </host:cd>
S: </host:chkData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_9763c040</clTRID>
S: <svTRID>bf8f06c784928acc1d94a7a38f07f760</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Check two hosts
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <check>
C: <host:check>
C: <host:name>ns1.isnic.is</host:name>
C: <host:name>fubididu.isnic.is</host:name>
C: </host:check>
C: </check>
C: <clTRID>dummy_session_9cc2a674</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">Command completed successfully</msg>
S: </result>
S: <resData>
S: <host:chkData>
S: <host:cd>
S: <host:name avail="false">ns1.isnic.is</host:name>
S: <host:reason lang="en">In use</host:reason>
S: </host:cd>
S: <host:cd>
S: <host:name avail="true">fubididu.isnic.is</host:name>
S: <host:reason lang="en">Host 'fubididu.isnic.is' not fou</host:reason>
S: </host:cd>
S: </host:chkData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_9cc2a674</clTRID>
S: <svTRID>bf8f06c784928acc1d94a7a38f07f760</svTRID>
S: </trID>
S: </response>
S: </epp>
Update
Domain
In our old SOAP API and our backend for our web interface updating a domain is currently being done by a number of functions (processes).
Transfer a domain from one registrant to another, which is an asynchronous function.
Updating the domain nameservers which is an asynchronous function.
Updating the domain contacts which is synchronous. (By updating the admin contact the domain is effectively being domain transferred.)
Adding or removing domain ds records is a synchronous function.
Adding "clientHold" status to a domain called "Stop service" on our website. Not available in the old SOAP API.
Since defined in in
RFC5730
EPP commands are atomic, so a command will either
succeed completely or fail completely. Success and failure results
MUST NOT be mixed.
Instead of pre validating multiple commands and firing off multiple processes and then merging them back together,
we require that the clients only update one "async" part of the domain at the time.
We will throw an 2102 "Unimplemented option" error when for example the client tries to change the registrant (async) and updating ds records (sync).
When updating the registrant on a domain (which is asynchronous) the process needs to be confirmed by the registrant (if registrant has extended status='ok' ) else by the admin contact (if the registrant has the extended status=
okUnconfirmed ).
If the process is not confirmed it will be notified via message with code 9301 - WARNING_PROCESS_WAITING.
Add and Remove
ns:hostObj (hostAttr not supported), all nameservers must be registered, async
status only 'clientHold' allowed to be added and removed
contacts, every domain must have one admin,billing and tech contact
secDNS .
Change
registrant, works as expected, async
authInfo is not supported
contactType, not required defaults to currently logged in user contactType .
Show example - Update domain registrant to current registrant error
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <update>
C: <domain:update>
C: <domain:name>isnic.is</domain:name>
C: <domain:chg>
C: <domain:registrant>IIH70-IS</domain:registrant>
C: </domain:chg>
C: </domain:update>
C: </update>
C: <clTRID>dummy_session_132a10d1</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2306">
S: <msg lang="en">registrant - You can't transfer a domain to the current registrant
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_132a10d1</clTRID>
S: <svTRID>92d252c61be8412b8a5ab2e60e3b4eb6</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Update domain add nameserver already in queue error
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <update>
C: <domain:update>
C: <domain:name>isnic.is</domain:name>
C: <domain:add>
C: <domain:ns>
C: <domain:hostObj>ns1.isnic.is</domain:hostObj>
C: </domain:ns>
C: </domain:add>
C: </domain:update>
C: </update>
C: <clTRID>dummy_session_3a9bf9e9</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2002">
S: <msg lang="en">Domain redelegation is already in queue
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_3a9bf9e9</clTRID>
S: <svTRID>38d7e695fbbdcf7037b4feba97bf5945</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Update domain add one and remove all other nameservers, also set master nameserver
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <update>
C: <domain:update>
C: <domain:name>isnic.is</domain:name>
C: <domain:add>
C: <domain:ns>
C: <domain:hostObj>aker123.isnic.is</domain:hostObj>
C: </domain:ns>
C: </domain:add>
C: </domain:update>
C: </update>
C: <extension>
C: <is-ext-domain:update>
C: <is-ext-domain:rem>
C: <is-ext-domain:ns_all>true</is-ext-domain:ns_all>
C: </is-ext-domain:rem>
C: <is-ext-domain:chg>
C: <is-ext-domain:master_ns>
C: <is-ext-domain:hostObj>aker123.isnic.is</is-ext-domain:hostObj>
C: </is-ext-domain:master_ns>
C: </is-ext-domain:chg>
C: </is-ext-domain:update>
C: </extension>
C: <clTRID>dummy_session_dfc4ff67</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2306">
S: <msg lang="en"> - Please specify two (ISNIC registered) nameservers
S: domain - Please specify two (ISNIC registered) nameservers
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_dfc4ff67</clTRID>
S: <svTRID>4d6a3c6787d8420eda3beb35d1bc8dd8</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Update ds records on domain
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <update>
C: <domain:update>
C: <domain:name>isnic.is</domain:name>
C: </domain:update>
C: </update>
C: <extension>
C: <secDNS:update>
C: <secDNS:rem>
C: <secDNS:all>true</secDNS:all>
C: </secDNS:rem>
C: <secDNS:add>
C: <secDNS:dsData>
C: <secDNS:keyTag>39021</secDNS:keyTag>
C: <secDNS:alg>8</secDNS:alg>
C: <secDNS:digestType>2</secDNS:digestType>
C: <secDNS:digest>3D51512342028CFD91233A6D47C693128826D95B12CB79BA0087D12167A12283</secDNS:digest>
C: </secDNS:dsData>
C: </secDNS:add>
C: </secDNS:update>
C: </extension>
C: <clTRID>dummy_session_6de1fafa</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">ds records updated
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_6de1fafa</clTRID>
S: <svTRID>92d252c61be8412b8a5ab2e60e3b4eb6</svTRID>
S: </trID>
S: </response>
S: </epp>
Show example - Update domain tech contact (poll notification sent to new and old contact)
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <update>
C: <domain:update>
C: <domain:name>isnic.is</domain:name>
C: <domain:add>
C: <domain:contact type="tech">TEST2-IS</domain:contact>
C: </domain:add>
C: <domain:rem>
C: <domain:contact type="tech">TEST-IS</domain:contact>
C: </domain:rem>
C: </domain:update>
C: </update>
C: <clTRID>dummy_session_bc94bf82</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1000">
S: <msg lang="en">contacts updated</msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_bc94bf82</clTRID>
S: <svTRID>92bae17c319b79c26c3fd5f9e722a2ad5b40b44aeefa3efa06a23c7038091d82</svTRID>
S: </trID>
S: </response>
S: </epp>
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <poll op="req"/>
C: <clTRID>dummy_session_11111</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="1301">
S: <msg lang="en">Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="1" id="5528">
S: <qDate>2017-09-06T17:58:47Z</qDate>
S: <msg lang="en">'Transfer' completed, domain tech contact updated from TEST-IS to TEST2-IS successfully</msg>
S: </msgQ>
S: <resData>
S: <domain:trnData>
S: <domain:name>isnic.is</domain:name>
S: <domain:trStatus>clientApproved</domain:trStatus>
S: <domain:reID>TEST2-IS</domain:reID>
S: <domain:reDate>2017-09-06T17:58:50Z</domain:reDate>
S: <domain:acID>TEST2-IS</domain:acID>
S: <domain:acDate>2017-09-06T17:58:50Z</domain:acDate>
S: </domain:trnData>
S: </resData>
S: <trID>
S: <clTRID>dummy_session_11111</clTRID>
S: <svTRID>92bae17c319b79c26c3fd5f9e722a2ad5b40b44aeefa3efa06a23c7038091d82</svTRID>
S: </trID>
S: </response>
S: </epp>
Note: that this function is rate limited at 50 requests per 30 min.
Add and Remove
Change
postalInfo chgPostalInfoType
voice works as expected
fax is not used
email confirmation email is sent
authInfo works as expected
Do not disclose is really just one boolean flag, see discloseType .
chgType
mobile, not required defaults to currently logged in user chgType .
autoUpdateFromNationalRegistry, not required chgType .
cancelPaper, not required chgType .
lang, not required chgType .
updateType
oldPW, must be set for all contact updates updateType .
Show example - Update contact with invalid voice number
C: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
C: <command>
C: <update>
C: <contact:update>
C: <contact:id>ISHM-IS</contact:id>
C: <contact:chg>
C: <contact:voice>+354.1</contact:voice>
C: </contact:chg>
C: </contact:update>
C: </update>
C: <extension>
C: <is-ext-contact:update>
C: <is-ext-contact:oldPW>1234</is-ext-contact:oldPW>
C: </is-ext-contact:update>
C: </extension>
C: <clTRID>dummy_session_028eb2b6</clTRID>
C: </command>
C: </epp>
S: <?xml version="1.0" encoding="UTF-8" standalone="no"?>
S: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
S: <response>
S: <result code="2306">
S: <msg lang="en">voice - Telephone nr. invalid
S: </msg>
S: </result>
S: <trID>
S: <clTRID>dummy_session_028eb2b6</clTRID>
S: <svTRID>54571e0afa46213634a1c546b438bf63</svTRID>
S: </trID>
S: </response>
S: </epp>
Host
There is no subordinate connection between domain and host objects (yet). All hosts (nameservers) must also be registered and all registered hosts have admin contact.
Add and Remove
statuses, is not allowed
addr, should be standard except only 4 addresses are allowed
Change
name, is not allowed, workaround is delete and create new host
Host extension .
Transfer
Domain
Not implemented. Use update domain and update the admin contact or to change the registrant.
Not implemented. The contact itself is the sponsoring client
Host
Not implemented. Use update host with extension to update the admin contact.