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 agents and dns service providers. 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 or hosts. 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.
Environments
Client certificates are required for both production and sandbox and they must be issued by a certificate authority accepted by the major browsers. Full chain must be sent along. Self signed client certificates are not accepted. When you have a client certificate issued you can test it with the command:
openssl s_client -host epp.sandbox.isnic.is -port 700 -cert cert.pem -key privkey.pem -CAfile chain.pem
Production
The EPP server is running at epp.isnic.is port 700.
Sandbox
The EPP server is running at epp.sandbox.isnic.is port 700.
Web interface at https://www.sandbox.isnic.is (See version of this page for upcoming changes).
Domains on sandbox are quietly marked deleted when they expire. Host objects are quietly marked deleted 1 year after creation if not connected to any domain. Contacts are cleaned up if they are not connected to any objects anymore. Even though data on sandbox is purged please do not use personal identifiable information.
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:
Changelog
Show complete changelog.
Version | Date | Type | Description |
---|---|---|---|
1.10.29 | 2024-10-08 | update | Dependencies |
1.10.29 | 2024-10-08 | update | Dependencies |
1.10.30 | 2024-10-08 | update | Dependencies |
1.10.31 | 2024-10-09 | fix | Broken contact:info on certain phonenumbers |
1.10.32 | TBD | fix | Change greeting message |
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 sandbox environment contact access you can create ISNIC prepaid dev card by clicking "Click to create top up dev card" button. To add funds click "Add funds to dev card".
On production large providers generally use prepayments to minimize errors in payment gateways and to get a monthly summary invoice. A prepaid account is created by going to Creditcards and click "Top up account". Since there is a minor bug in our extenstion schema (not nillable and integer) when using cardID that is prepaid use cardCVC=1.
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.
- Sponsoring client is set to the domains admin contact, infDataType.
- Statuses, See more info statusValueType.
- Domain extension.
- The zone contact is returned, contactAttrType.
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>
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>
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>
Contact
Note: that this function is rate limited at 50 requests per 30 min.
- The returned statuses for contacts are not used, statusValueType, but the real statues are returned in the extension.
- Sponsoring client "clID" infDataType see transfer contact for how ISNIC deviates from standard.
- If correct authInfo:pw is set fields marked as "do not disclose" will be returned infDataType.
- All addresses are international, only one postalInfo allowed, postalInfoEnumType.
- Org field is not used, postalInfoType.
- Do not disclose is really just one boolean flag, discloseType.
- Contact extension.
- Statuses statusValueType.
- Contact type contactType.
- Sid sidType.
- Auto update from national registry infDataType.
- Mobile infDataType.
Cancel paper infDataType.
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>
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>true</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.
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>
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
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
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.
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>
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>
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>
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
- Periods 1,2,3,4,5 years allowed
- Domain extension.
- cardID, createType.
- cardCVC, createType.
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>
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>
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>
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>
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>
Contact
When this function is used by a logged in contact that is an registered DNS Providers or Agents 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.
- Contact type createType.
- Sid sidType.
- Auto update from national registry createType.
- Mobile createType.
- Cancel paper createType.
- Language not required defaults to en createType.
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>
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>
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.
- host:addr is not unbounded but maxOccurs="4", createType
- Host extension.
- contactType, not required defaults to currently logged in user contactType.
Delete
Domain
Sponsoring client is the domain admin 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: <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>
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>
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>
Contact
Not supported, if contact is unused for some time it is automatically expired and then deleted.
Host
Sponsoring client is host admin 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: <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.
- Periods 1,2,3,4,5 years allowed
- Domain extension.
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.
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>
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>
Contact
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.
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>
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 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, is an asynchronous function.
- Updating the domain nameservers is an asynchronous function.
- Updating the domain contacts 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.
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. If the logged in EPP user is the old registrants sponsoring client the email confirm step is skipped.
- 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.
- dsData is supported updateType
- Change
- registrant, works as expected, async
- authInfo is not supported
- contactType, not required defaults to currently logged in user contactType.
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>
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>
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>
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>
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>
Contact
Note: that this function is rate limited at 50 requests per 30 min.
- Add and Remove
- statuses not allowed
- Change
- postalInfo chgPostalInfoType
- name works as expected
- org not used
- addrType, maxOccurs 1
- type see postalInfoEnumType
- 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
- updateType
- oldPW, must be set for all contact updates updateType.
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>
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:postalInfo type="int"> C: <contact:name>ISNIC Hostmaster</contact:name> C: </contact:postalInfo> C: </contact:chg> C: </contact:update> C: </update> C: <clTRID>dummy_session_6c811d80</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: <trID> S: <clTRID>dummy_session_6c811d80</clTRID> S: <svTRID>ab8e5bdda5b9f0b40468bccc2c5ffa285948522227be7da8d08d826ddbf65974</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.
- contactType the admin contact, renewType.
Transfer
Domain
Not implemented. Use update domain and update the admin contact or to change the registrant.
Contact
Not implemented.
By default the contact that registers a contact is the sponsoring client. If the contact is created on www.isnic.is the contact is the sponsoring client itself.
The contact can at anytime login to www.isnic.is and change the sponsoring client. That action will create a 'serverApproved' transfer notification.
Host
Not implemented. Use update host with extension to update the admin contact.