Internet DRAFT - draft-wullink-restful-epp-json
draft-wullink-restful-epp-json
Network Working Group M. Wullink
Internet-Draft M. Davids
Intended status: Standards Track SIDN Labs
Expires: 19 July 2024 16 January 2024
XML to JSON conversion rules for RESTful EPP
draft-wullink-restful-epp-json-00
Abstract
This document describes the rules for converting an EPP [RFC5730] XML
message to a JSON [RFC8259] message for use with RESTful EPP [REF-TO-
REPP-HERE].
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 19 July 2024.
Copyright Notice
Copyright (c) 2024 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Wullink & Davids Expires 19 July 2024 [Page 1]
Internet-Draft XML to JSON for RESTful EPP January 2024
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Conventions Used in This Document . . . . . . . . . . . . . . 3
4. Conversion Rules . . . . . . . . . . . . . . . . . . . . . . 3
4.1. Empty . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2. Pure text content . . . . . . . . . . . . . . . . . . . . 4
4.3. Attributes only . . . . . . . . . . . . . . . . . . . . . 4
4.4. Pure text content and attributes . . . . . . . . . . . . 5
4.5. Child elements with different names . . . . . . . . . . . 5
4.6. Child elements with identical names . . . . . . . . . . . 6
4.7. Child elements and contiguous text . . . . . . . . . . . 6
5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.1. Hello . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2. Login . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.3. Logout . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.4. Check . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.5. Info . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.6. Poll . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.7. Poll Ack . . . . . . . . . . . . . . . . . . . . . . . . 13
5.8. Transfer Query . . . . . . . . . . . . . . . . . . . . . 14
5.9. Create . . . . . . . . . . . . . . . . . . . . . . . . . 16
5.10. Delete . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.11. Renew . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.12. Transfer Request . . . . . . . . . . . . . . . . . . . . 22
5.13. Transfer Cancel . . . . . . . . . . . . . . . . . . . . . 23
5.14. Transfer Reject . . . . . . . . . . . . . . . . . . . . . 24
5.15. Transfer Approve . . . . . . . . . . . . . . . . . . . . 24
5.16. Update . . . . . . . . . . . . . . . . . . . . . . . . . 24
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26
7. Internationalization Considerations . . . . . . . . . . . . . 26
8. Security Considerations . . . . . . . . . . . . . . . . . . . 26
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 27
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 27
10.1. Normative References . . . . . . . . . . . . . . . . . . 27
10.2. Informative References . . . . . . . . . . . . . . . . . 27
Appendix A. Appendix A. Media Type Registration: application/
epp+json . . . . . . . . . . . . . . . . . . . . . . . . 27
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28
Wullink & Davids Expires 19 July 2024 [Page 2]
Internet-Draft XML to JSON for RESTful EPP January 2024
1. Introduction
The Extensible Provisioning Protocol (EPP) [RFC5730] uses an on XML
based protocol. The EPP protocol is well defined, using XML Schema
Definition (XSD) for validation of XML messages, the XSDs are
published as part of the EPP RFCs. This document describes rules for
converting valid EPP XML messages to the JavaScript Object Notation
(JSON) Data Interchange Format [RFC8259], for use with RESTful EPP
(REPP).
2. Terminology
In this document the following terminology is used.
EPP RFCs - This is a reference to the EPP version 1.0 specifications
[RFC5730], [RFC5731], [RFC5732] and [RFC5733].
RESTful EPP or REPP - The RESTful transport for EPP described in this
document.
3. Conventions Used in This Document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
JSON is case sensitive. Unless stated otherwise, JSON specifications
and examples provided in this document MUST be interpreted in the
character case presented. The examples in this document assume that
request and response messages are properly formatted JSON documents.
Indentation and white space in examples are provided only to
illustrate element relationships and for improving readability, and
are not REQUIRED features of the protocol.
4. Conversion Rules
A XML element may use one of 7 possible forms, the sections below
describe how these forms MUST be translated to valid JSON.
1. Empty
2. Pure text content
3. Attributes only
4. Pure text content and attributes
5. Child elements with different names
6. Child elements with identical names
7. Child element(s) and contiguous text
Wullink & Davids Expires 19 July 2024 [Page 3]
Internet-Draft XML to JSON for RESTful EPP January 2024
4.1. Empty
An empty XML element MUST be mapped to to a key matching the name of
the element and a null value.
XML:
<hello/>
JSON:
{
"hello": null
}
4.2. Pure text content
An XML element containing text only MUST be mapped to a key matching
the name of the element and the text MUST be used for the value
XML:
<lang>en</lang>
JSON:
{
"lang": "en"
}
4.3. Attributes only
An XML element containing one or more atributes only, MUST be mapped
to a JSON object matching the name of the element. Each XML
attribute, prefixed using the @ character, MUST be added as a key-
value pair to the object.
XML:
<msgQ count="5" id="12345"/>
JSON:
Wullink & Davids Expires 19 July 2024 [Page 4]
Internet-Draft XML to JSON for RESTful EPP January 2024
{
"msgQ": {
"@count": "5",
"@id": "12345"
}
}
4.4. Pure text content and attributes
An XML element containing one or more atributes and text content
only, MUST be mapped to a JSON object matching the name of the
element. The text content MUST, prefixed using the string #text,
MUST be added as a key-value pair to the object.
XML:
<msg lang="en">Command completed successfully</msg>
JSON:
{
"msg": {
"@lang": "en",
"#text": "Command completed successfully"
}
}
4.5. Child elements with different names
An XML element containing one or more child elements, where each
child uses an unique name, MUST be mapped to a JSON object matching
the name of the element. Each child element MUST be added as a key-
value pair to the parent object.
XML:
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>54321-XYZ</svTRID>
</trID>
JSON:
Wullink & Davids Expires 19 July 2024 [Page 5]
Internet-Draft XML to JSON for RESTful EPP January 2024
{
"trID": {
"clTRID": "ABC-12345",
"svTRID": "54321-XYZ"
}
}
4.6. Child elements with identical names
An XML element containing multiple child elements, where multiple
child elements use the same name, MUST be mapped to a JSON object
containing an array. The name of the array MUST match the name of
the non-unique children, each child element MUST be converted to JSON
and added to the array.
XML:
<host>
<addr>192.0.2.1</addr>
<addr>192.0.2.2</addr>
</host>
JSON:
{
"host": {
"addr": [
"192.0.2.1",
"192.0.2.2"
]
}
}
4.7. Child elements and contiguous text
An XML element containing one or more child elements and contiguous
text, MUST be mapped to a JSON object containing a key-value entry
for each child element, the text value MUST result in a key named
#text.
XML:
<msg lang="en">
Credit balance low.
<limit>100</limit>
<bal>5</bal>
</msg>
Wullink & Davids Expires 19 July 2024 [Page 6]
Internet-Draft XML to JSON for RESTful EPP January 2024
JSON:
{
"msg": {
"@lang": "en",
"limit": 100,
"bal": 5,
"#text": "Credit balance low."
}
}
When child elements are mixed with multiple text segments, the
resulting #text key-value entry MUST be an array, containing all text
segments.
XML:
<msg lang="en">
Credit balance low.
<limit>100</limit>
<bal>5</bal>
Please increase balance.
</msg>
JSON:
{
"msg": {
"@lang": "en",
"limit": 100,
"bal": 5,
"#text": ["Credit balance low.", "Please increase balance asap."]
}
}
The rules above are based on the conversion approach found on
[XMLCOM-WEB]
5. Examples
This section lists examples for every EPP command supported by REPP,
the examples
5.1. Hello
The Hello request message does not exist in the context of REPP.
Example XML response:
Wullink & Davids Expires 19 July 2024 [Page 7]
Internet-Draft XML to JSON for RESTful EPP January 2024
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<greeting>
<svID>Example EPP server epp.example.com</svID>
<svDate>2000-06-08T22:00:00.0Z</svDate>
<svcMenu>
<version>1.0</version>
<lang>en</lang>
<lang>fr</lang>
<objURI>urn:ietf:params:xml:ns:obj1</objURI>
<objURI>urn:ietf:params:xml:ns:obj2</objURI>
<objURI>urn:ietf:params:xml:ns:obj3</objURI>
<svcExtension>
<extURI>http://custom/obj1ext-1.0</extURI>
</svcExtension>
</svcMenu>
<dcp>
<access>
<all/>
</access>
<statement>
<purpose>
<admin/>
<prov/>
</purpose>
<recipient>
<ours/>
<public/>
</recipient>
<retention>
<stated/>
</retention>
</statement>
</dcp>
</greeting>
</epp>
Example JSON response:
XML namespaces are not converted to JSON and are ignored.
Wullink & Davids Expires 19 July 2024 [Page 8]
Internet-Draft XML to JSON for RESTful EPP January 2024
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"greeting": {
"svID": "Example REPP server v1.0",
"svDate": "2000-06-08T22:00:00.0Z",
"svcMenu": {
"version": "1.0",
"lang": [
"en",
"fr"
]
},
"dcp": {
"access": {
"all": null
},
"statement": {
"purpose": {
"admin": null,
"prov": null
},
"recipient": {
"ours": null,
"public": null
},
"retention": {
"stated": null
}
}
}
}
}
}
5.2. Login
The Login request and response message are not used for REPP.
5.3. Logout
The Logout request and response message are not used for REPP.
5.4. Check
The Check request and responses messages are not used for REPP.
Wullink & Davids Expires 19 July 2024 [Page 9]
Internet-Draft XML to JSON for RESTful EPP January 2024
5.5. Info
The Info request message is not used for REPP.
Example XML Domain Info response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<resData>
<domain:infData
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.com</domain:name>
<domain:roid>EXAMPLE1-REP</domain:roid>
<domain:status s="ok"/>
<domain:registrant>jd1234</domain:registrant>
<domain:contact type="admin">sh8013</domain:contact>
<domain:contact type="tech">sh8013</domain:contact>
<domain:ns>
<domain:hostObj>ns1.example.com</domain:hostObj>
<domain:hostObj>ns1.example.net</domain:hostObj>
</domain:ns>
<domain:host>ns1.example.com</domain:host>
<domain:host>ns2.example.com</domain:host>
<domain:clID>ClientX</domain:clID>
<domain:crID>ClientY</domain:crID>
<domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>
<domain:upID>ClientX</domain:upID>
<domain:upDate>1999-12-03T09:00:00.0Z</domain:upDate>
<domain:exDate>2005-04-03T22:00:00.0Z</domain:exDate>
<domain:trDate>2000-04-08T09:00:00.0Z</domain:trDate>
<domain:authInfo>
<domain:pw>2fooBAR</domain:pw>
</domain:authInfo>
</domain:infData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>54322-XYZ</svTRID>
</trID>
</response>
</epp>
Example JSON Domain Info response:
Wullink & Davids Expires 19 July 2024 [Page 10]
Internet-Draft XML to JSON for RESTful EPP January 2024
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1000",
"msg": "Command completed successfully"
},
"resData": {
"domain:infData": {
"@xmlns:domain": "urn:ietf:params:xml:ns:domain-1.0",
"domain:name": "example.com",
"domain:roid": "EXAMPLE1-REP",
"domain:status": {
"@s": "ok"
},
"domain:registrant": "jd1234",
"domain:contact": [
{
"@type": "admin",
"#text": "sh8013"
},
{
"@type": "tech",
"#text": "sh8013"
}
],
"domain:ns": {
"domain:hostObj": [
"ns1.example.com",
"ns1.example.net"
]
},
"domain:host": [
"ns1.example.com",
"ns2.example.com"
],
"domain:clID": "ClientX",
"domain:crID": "ClientY",
"domain:crDate": "1999-04-03T22:00:00.0Z",
"domain:upID": "ClientX",
"domain:upDate": "1999-12-03T09:00:00.0Z",
"domain:exDate": "2005-04-03T22:00:00.0Z",
"domain:trDate": "2000-04-08T09:00:00.0Z",
"domain:authInfo": {
"domain:pw": "2fooBAR"
}
}
Wullink & Davids Expires 19 July 2024 [Page 11]
Internet-Draft XML to JSON for RESTful EPP January 2024
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "54322-XYZ"
}
}
}
}
5.6. Poll
The Poll request message is not used for REPP.
Example XML response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1301">
<msg>Command completed successfully; ack to dequeue</msg>
</result>
<msgQ count="4" id="12346">
<qDate>2000-06-08T22:10:00.0Z</qDate>
<msg lang="en">Credit balance low.
<limit>100</limit>
<bal>5</bal>
</msg>
</msgQ>
<trID>
<clTRID>ABC-12346</clTRID>
<svTRID>54321-XYZ</svTRID>
</trID>
</response>
</epp>
Example JSON response:
Wullink & Davids Expires 19 July 2024 [Page 12]
Internet-Draft XML to JSON for RESTful EPP January 2024
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1301",
"msg": "Command completed successfully; ack to dequeue"
},
"msgQ": {
"@count": "4",
"@id": "12346",
"qDate": "2024-01-15T22:10:00.0Z",
"msg": {
"@lang": "en",
"limit": "100",
"bal": "5",
"#text": "Credit balance low."
}
},
"trID": {
"clTRID": "ABC-12346",
"svTRID": "54321-XYZ"
}
}
}
}
5.7. Poll Ack
The Poll Ack request message is not used for REPP.
Example XML response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<msgQ count="0" id="12345"/>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>XYZ-12345</svTRID>
</trID>
</response>
</epp>
Wullink & Davids Expires 19 July 2024 [Page 13]
Internet-Draft XML to JSON for RESTful EPP January 2024
Example JSON response:
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1000",
"msg": "Command completed successfully"
},
"msgQ": {
"@count": "0",
"@id": "12345"
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "XYZ-12345"
}
}
}
}
5.8. Transfer Query
The Domain Transfer Query request message is not used for REPP.
Example XML Domain Transfer Query response:
Wullink & Davids Expires 19 July 2024 [Page 14]
Internet-Draft XML to JSON for RESTful EPP January 2024
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<resData>
<domain:trnData
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.com</domain:name>
<domain:trStatus>pending</domain:trStatus>
<domain:reID>ClientX</domain:reID>
<domain:reDate>2000-06-06T22:00:00.0Z</domain:reDate>
<domain:acID>ClientY</domain:acID>
<domain:acDate>2000-06-11T22:00:00.0Z</domain:acDate>
<domain:exDate>2002-09-08T22:00:00.0Z</domain:exDate>
</domain:trnData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>54322-XYZ</svTRID>
</trID>
</response>
</epp>
Example JSON Domain Transfer Query response:
Wullink & Davids Expires 19 July 2024 [Page 15]
Internet-Draft XML to JSON for RESTful EPP January 2024
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1000",
"msg": "Command completed successfully"
},
"resData": {
"domain:trnData": {
"@xmlns:domain": "urn:ietf:params:xml:ns:domain-1.0",
"domain:name": "example.com",
"domain:trStatus": "pending",
"domain:reID": "ClientX",
"domain:reDate": "2000-06-06T22:00:00.0Z",
"domain:acID": "ClientY",
"domain:acDate": "2000-06-11T22:00:00.0Z",
"domain:exDate": "2002-09-08T22:00:00.0Z"
}
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "54322-XYZ"
}
}
}
}
5.9. Create
Example XML Domain Create request:
Wullink & Davids Expires 19 July 2024 [Page 16]
Internet-Draft XML to JSON for RESTful EPP January 2024
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<create>
<domain:create
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.com</domain:name>
<domain:period unit="y">2</domain:period>
<domain:ns>
<domain:hostObj>ns1.example.net</domain:hostObj>
<domain:hostObj>ns2.example.net</domain:hostObj>
</domain:ns>
<domain:registrant>jd1234</domain:registrant>
<domain:contact type="admin">sh8013</domain:contact>
<domain:contact type="tech">sh8013</domain:contact>
<domain:authInfo>
<domain:pw>2fooBAR</domain:pw>
</domain:authInfo>
</domain:create>
</create>
<clTRID>ABC-12345</clTRID>
</command>
</epp>
Example JSON Domain Create request:
Wullink & Davids Expires 19 July 2024 [Page 17]
Internet-Draft XML to JSON for RESTful EPP January 2024
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"command": {
"create": {
"domain:create": {
"@xmlns:domain": "urn:ietf:params:xml:ns:domain-1.0",
"domain:name": "example.com",
"domain:period": {
"@unit": "y",
"#text": "2"
},
"domain:ns": {
"domain:hostObj": [
"ns1.example.net",
"ns2.example.net"
]
},
"domain:registrant": "jd1234",
"domain:contact": [
{
"@type": "admin",
"#text": "sh8013"
},
{
"@type": "tech",
"#text": "sh8013"
}
],
"domain:authInfo": {
"domain:pw": "2fooBAR"
}
}
},
"clTRID": "ABC-12345"
}
}
}
Example XML Domain Create response:
Wullink & Davids Expires 19 July 2024 [Page 18]
Internet-Draft XML to JSON for RESTful EPP January 2024
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<resData>
<domain:creData
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.com</domain:name>
<domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>
<domain:exDate>2001-04-03T22:00:00.0Z</domain:exDate>
</domain:creData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>54321-XYZ</svTRID>
</trID>
</response>
</epp>
Example JSON Domain Create response:
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1000",
"msg": "Command completed successfully"
},
"resData": {
"domain:creData": {
"@xmlns:domain": "urn:ietf:params:xml:ns:domain-1.0",
"domain:name": "example.com",
"domain:crDate": "1999-04-03T22:00:00.0Z",
"domain:exDate": "2001-04-03T22:00:00.0Z"
}
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "54321-XYZ"
}
}
}
}
Wullink & Davids Expires 19 July 2024 [Page 19]
Internet-Draft XML to JSON for RESTful EPP January 2024
5.10. Delete
The Delete request message is not used for REPP.
Example XML Domain Delete response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>54321-XYZ</svTRID>
</trID>
</response>
</epp>
Example JSON Domain Delete response:
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1000",
"msg": "Command completed successfully"
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "54321-XYZ"
}
}
}
}
5.11. Renew
The Renew request message is not used for REPP.
Example XML Domain Renew response:
Wullink & Davids Expires 19 July 2024 [Page 20]
Internet-Draft XML to JSON for RESTful EPP January 2024
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<resData>
<domain:renData
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.com</domain:name>
<domain:exDate>2005-04-03T22:00:00.0Z</domain:exDate>
</domain:renData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>54322-XYZ</svTRID>
</trID>
</response>
</epp>
Example JSON Domain Renew response:
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1000",
"msg": "Command completed successfully"
},
"resData": {
"domain:renData": {
"@xmlns:domain": "urn:ietf:params:xml:ns:domain-1.0",
"domain:name": "example.com",
"domain:exDate": "2005-04-03T22:00:00.0Z"
}
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "54322-XYZ"
}
}
}
}
Wullink & Davids Expires 19 July 2024 [Page 21]
Internet-Draft XML to JSON for RESTful EPP January 2024
5.12. Transfer Request
The Transfer request message is not used for REPP.
Example XML Domain Transfer response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1001">
<msg>Command completed successfully; action pending</msg>
</result>
<resData>
<domain:trnData
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.com</domain:name>
<domain:trStatus>pending</domain:trStatus>
<domain:reID>ClientX</domain:reID>
<domain:reDate>2000-06-08T22:00:00.0Z</domain:reDate>
<domain:acID>ClientY</domain:acID>
<domain:acDate>2000-06-13T22:00:00.0Z</domain:acDate>
<domain:exDate>2002-09-08T22:00:00.0Z</domain:exDate>
</domain:trnData>
</resData>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>54322-XYZ</svTRID>
</trID>
</response>
</epp>
Example JSON Domain Transfer response:
Wullink & Davids Expires 19 July 2024 [Page 22]
Internet-Draft XML to JSON for RESTful EPP January 2024
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1001",
"msg": "Command completed successfully; action pending"
},
"resData": {
"domain:trnData": {
"@xmlns:domain": "urn:ietf:params:xml:ns:domain-1.0",
"domain:name": "example.com",
"domain:trStatus": "pending",
"domain:reID": "ClientX",
"domain:reDate": "2000-06-08T22:00:00.0Z",
"domain:acID": "ClientY",
"domain:acDate": "2000-06-13T22:00:00.0Z",
"domain:exDate": "2002-09-08T22:00:00.0Z"
}
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "54322-XYZ"
}
}
}
}
5.13. Transfer Cancel
The Transfer Cancel request message is not used for REPP.
Example XML Domain Cancel Transfer response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>XYZ-12345</svTRID>
</trID>
</response>
</epp>
Wullink & Davids Expires 19 July 2024 [Page 23]
Internet-Draft XML to JSON for RESTful EPP January 2024
Example JSON Domain Cancel Transfer response:
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1000",
"msg": "Command completed successfully"
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "XYZ-12345"
}
}
}
}
5.14. Transfer Reject
The Transfer Reject request message is not used for REPP and the
response message is the same as for the Transfer Cancel command.
5.15. Transfer Approve
The Transfer Approve request message is not used for REPP and the
response message is the same as for the Transfer Cancel command.
5.16. Update
Example XML Domain Update request:
Wullink & Davids Expires 19 July 2024 [Page 24]
Internet-Draft XML to JSON for RESTful EPP January 2024
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<update>
<domain:update
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>example.com</domain:name>
<domain:chg>
<domain:registrant>sh8013</domain:registrant>
<domain:authInfo>
<domain:pw>2BARfoo</domain:pw>
</domain:authInfo>
</domain:chg>
</domain:update>
</update>
<clTRID>ABC-12345</clTRID>
</command>
</epp>
Example JSON Domain Update request:
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"command": {
"update": {
"domain:update": {
"@xmlns:domain": "urn:ietf:params:xml:ns:domain-1.0",
"domain:name": "example.com",
"domain:chg": {
"domain:registrant": "sh8013",
"domain:authInfo": {
"domain:pw": "2BARfoo"
}
}
}
},
"clTRID": "ABC-12345"
}
}
}
Example XML Domain Update response:
Wullink & Davids Expires 19 July 2024 [Page 25]
Internet-Draft XML to JSON for RESTful EPP January 2024
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp
xmlns="urn:ietf:params:xml:ns:epp-1.0">
<response>
<result code="1000">
<msg>Command completed successfully</msg>
</result>
<trID>
<clTRID>ABC-12345</clTRID>
<svTRID>XYZ-12345</svTRID>
</trID>
</response>
</epp>
Example JSON Domain Update response:
{
"epp": {
"@xmlns": "urn:ietf:params:xml:ns:epp-1.0",
"response": {
"result": {
"@code": "1000",
"msg": "Command completed successfully"
},
"trID": {
"clTRID": "ABC-12345",
"svTRID": "XYZ-12345"
}
}
}
}
6. IANA Considerations
The new application/epp+json MIME media type is used in this
document, the registration template is included in Appendix A.
7. Internationalization Considerations
TODO
8. Security Considerations
TODO
Wullink & Davids Expires 19 July 2024 [Page 26]
Internet-Draft XML to JSON for RESTful EPP January 2024
9. Acknowledgments
TODO
10. References
10.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC5730] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)",
STD 69, RFC 5730, DOI 10.17487/RFC5730, August 2009,
<https://www.rfc-editor.org/info/rfc5730>.
[RFC5731] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)
Domain Name Mapping", STD 69, RFC 5731,
DOI 10.17487/RFC5731, August 2009,
<https://www.rfc-editor.org/info/rfc5731>.
[RFC5732] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)
Host Mapping", STD 69, RFC 5732, DOI 10.17487/RFC5732,
August 2009, <https://www.rfc-editor.org/info/rfc5732>.
[RFC5733] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)
Contact Mapping", STD 69, RFC 5733, DOI 10.17487/RFC5733,
August 2009, <https://www.rfc-editor.org/info/rfc5733>.
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
Interchange Format", STD 90, RFC 8259,
DOI 10.17487/RFC8259, December 2017,
<https://www.rfc-editor.org/info/rfc8259>.
10.2. Informative References
[XMLCOM-WEB]
XML.com, "Converting Between XML and JSON", 2006,
<https://www.xml.com/pub/a/2006/05/31/converting-between-
xml-and-json.html>.
Appendix A. Appendix A. Media Type Registration: application/epp+json
MIME media type name: application
MIME subtype name: epp+json
Wullink & Davids Expires 19 July 2024 [Page 27]
Internet-Draft XML to JSON for RESTful EPP January 2024
Required parameters: none
Optional parameters: Same as the charset parameter of application/
json as specified in [RFC8259].
Encoding considerations: Same as the encoding considerations of
application/xml as specified in [RFC8259].
Security considerations: This type has all of the security
considerations described in [RFC8259] plus the considerations
specified in the Security Considerations section of this document.
Published specification: This document.
Applications that use this media type: RESTful EPP client and server
implementations.
Additional information: None
Magic number(s): None.
File extension(s): .json
Macintosh file type code(s): "TEXT"
Person & email address for further information: See the "Author's
Address" section of this document.
Intended usage: COMMON
Author/Change controller: IETF
Authors' Addresses
Maarten Wullink
SIDN Labs
Email: maarten.wullink@sidn.nl
URI: https://sidn.nl/
Marco Davids
SIDN Labs
Email: marco.davids@sidn.nl
URI: https://sidn.nl/
Wullink & Davids Expires 19 July 2024 [Page 28]