<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.7 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-problem-details-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title abbrev="CoRE Problem Details">Concise Problem Details For CoAP APIs</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-problem-details-02"/>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>arm</organization>
      <address>
        <email>thomas.fossati@arm.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2022" month="April" day="27"/>
    <area>ART</area>
    <workgroup>CoRE Working Group</workgroup>
    <keyword>CoAP, API, Problem Details</keyword>
    <abstract>
      <t>This document defines a "problem detail" as a way to carry
machine-readable details of errors in a REST response to avoid the
need to define new error response formats for REST APIs.
The format
is inspired by, but intended to be more concise than, the Problem
Details for HTTP APIs defined in RFC 7807.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>REST response status information such as CoAP <xref target="RFC7252"/> response
codes is sometimes not sufficient to convey enough information about
an error to be helpful.  This specification defines a simple and
extensible framework to define CBOR tags to suit this purpose.
It is designed to be reused by REST APIs, which can identify distinct
"problem types" specific to their needs.
Thus, API clients can be informed of both the high-level error class
(using the response code) and the finer-grained details of the problem
(using this vocabulary), as shown in <xref target="fig-problem-details"/>.</t>
      <figure anchor="fig-problem-details">
        <name>Problem Details: Example with CoAP</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="256" viewBox="0 0 256 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 48,80 L 48,240" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
              <path d="M 176,32 L 176,80" fill="none" stroke="black"/>
              <path d="M 216,80 L 216,240" fill="none" stroke="black"/>
              <path d="M 248,32 L 248,80" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 176,32 L 248,32" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 176,80 L 248,80" fill="none" stroke="black"/>
              <path d="M 56,128 L 200,128" fill="none" stroke="black"/>
              <path d="M 64,160 L 200,160" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="208,128 196,122.4 196,133.6 " fill="black" transform="rotate(0,200,128)"/>
              <polygon class="arrowhead" points="72,160 60,154.4 60,165.6 " fill="black" transform="rotate(180,64,160)"/>
              <g class="text">
                <text x="44" y="52">CoAP</text>
                <text x="212" y="52">CoAP</text>
                <text x="44" y="68">Client</text>
                <text x="212" y="68">Server</text>
                <text x="88" y="116">Request</text>
                <text x="80" y="180">Error</text>
                <text x="140" y="180">Response</text>
                <text x="76" y="196">with</text>
                <text x="104" y="196">a</text>
                <text x="132" y="196">CBOR</text>
                <text x="172" y="196">Data</text>
                <text x="76" y="212">Item</text>
                <text x="124" y="212">giving</text>
                <text x="88" y="228">Problem</text>
                <text x="152" y="228">Details</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
+--------+           +--------+
|  CoAP  |           |  CoAP  |
| Client |           | Server |
+----+---+           +----+---+
     |                    |
     | Request            |
     |------------------> |
     |                    |
     | <----------------- |
     | Error Response     |
     | with a CBOR Data   |
     | Item giving        |
     | Problem Details    |
     |                    |
]]></artwork>
        </artset>
      </figure>
      <t>The framework presented is largely inspired by the Problem Details for HTTP APIs defined in <xref target="RFC7807"/>.</t>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="basic-problem-details">
      <name>Basic Problem Details</name>
      <t>A Concise Problem Details data item is a CBOR data item with the following
structure (notated in CDDL <xref target="RFC8610"/>, using 65535 in place of a tag number to
be defined for the type of problem details):</t>
      <figure anchor="cddl">
        <name>Problem Detail Data Item</name>
        <sourcecode type="CDDL"><![CDATA[
problem-details = #6.65535(problem-details-map)
problem-details-map = non-empty<{
  ? &(title: -1) => text
  ? &(detail: -2) => text
  ? &(instance: -3) => ~uri
  standard-problem-detail-entries
  custom-problem-detail-entries
}>
standard-problem-detail-entries = (
  * nint => any
)
custom-problem-detail-entries = (
  * (uint/detail-label) => any
)
detail-label = text .regexp "[^:]+" / ~uri
non-empty<M> = (M) .and ({ + any => any })
]]></sourcecode>
      </figure>
      <t>Due to a limitation of the CDDL notation for tags, the problem type
cannot be expressed under this name in CDDL.
It is represented in the tag number, which is shown here as 65535.</t>
      <t>One tag has been registered as a generic problem type by this
specification (see <xref target="iana-tag"/>).
Further problem types can be defined by registering additional tags (see <xref target="sec-new-attributes"/>).</t>
      <t>A number of problem detail entries, the Standard Problem Detail
entries, are predefined (more predefined details can be registered,
see <xref target="new-spdk"/>):</t>
      <dl newline="true">
        <dt>The title (key -1):</dt>
        <dd>
          <t>A short, human-readable summary of the problem type.
It <bcp14>SHOULD NOT</bcp14> change from occurrence to occurrence of the problem.</t>
        </dd>
        <dt>The detail (key -2):</dt>
        <dd>
          <t>A human-readable explanation specific to this occurrence of the problem.</t>
        </dd>
        <dt>The instance (key -3):</dt>
        <dd>
          <t>A URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.</t>
        </dd>
      </dl>
      <t>Consumers <bcp14>MUST</bcp14> use the type (tag number) as primary identifiers for
the problem type; the "title" string is advisory and included only for
consumers who are not aware of the semantics of the CBOR tag number
used to indicate the specific problem type.</t>
      <t>The "detail" member, if present, ought to focus on helping the client correct the problem, rather than giving debugging information.  Consumers <bcp14>SHOULD NOT</bcp14> parse the "detail" member for information; extensions (see <xref target="sec-new-attributes"/>) are more suitable and less error-prone ways to obtain such information.</t>
      <t>Note that the "instance" URI reference may be relative; this means
that it must be resolved relative to the document's base URI, as per
<xref target="STD66"/>.</t>
      <t>Note that the response code information that may be available together
with a problem report is <em>not</em> replicated into a problem detail entry;
compare this with "status" in <xref target="RFC7807"/>.</t>
      <aside>
        <t>(<strong>Issue</strong>: Do we still want to define a SPDK for status, so
implementations can easily stash away the response code available from
context into the problem details?)</t>
      </aside>
    </section>
    <section anchor="sec-new-attributes">
      <name>Additional Problem Details</name>
      <t>This specification defines a single problem type, the Generic Problem
Details problem type (represented by CBOR tag TBD400, <xref target="iana-tag"/>).</t>
      <section anchor="additional-problem-types">
        <name>Additional Problem Types</name>
        <t>To establish a new problem type, different from the Generic Problem
Details problem type, a CBOR Tag number needs to be
registered in the <xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/> of <xref target="IANA.cbor-tags"/>.
Note that this registry allows the registration of new tags under the
First Come First Served policy <xref target="RFC8126"/>, making new registrations
available in a simple interaction (e.g., via web or email) with IANA,
after having filled in the small template provided in <xref section="9.2" sectionFormat="of" target="STD94"/>.
Such a registration <bcp14>SHOULD</bcp14> provide a documentation reference and also
<bcp14>SHOULD</bcp14> reference the present specification.</t>
      </section>
      <section anchor="custom-problem-detail-entries">
        <name>Custom Problem Detail Entries</name>
        <t>Problem type definitions <bcp14>MAY</bcp14> extend the Problem Details document with
additional entries to convey additional, problem-type-specific information,
<em>custom problem details</em>.
In the definition of a problem type, each custom problem detail
receives a map key specific to this problem type (custom problem detail entry map key, unsigned
integer or text); this <bcp14>SHOULD</bcp14> be described in the documentation that goes
along with the registration of a CBOR Tag for the problem type.</t>
        <t>For text detail-labels, a name without an embedded colon can be chosen
instead of an integer custom label, or a detail-label that is a URI.
This URI is for identification purposes only and <bcp14>MUST NOT</bcp14> be
dereferenced in the normal course of handling problem details (i.e.,
outside diagnostic/debugging procedures involving humans).</t>
        <t>In summary, the keys for Custom Problem Detail entries are in a
namespace specific to the Problem Type the documentation of which
defines these entries.
Consumers of a Problem Type instance <bcp14>MUST</bcp14> ignore any Custom Problem
Detail entries that they
do not recognize; this allows problem types to evolve and include
additional information in the future.
If, in the evolution of a problem type, a new problem detail is added
that needs to be understood by all consumers, a new problem type needs
to be defined (i.e., problem detail entries are always elective, never
critical, in the terminology of <xref section="5.4.1" sectionFormat="of" target="RFC7252"/>).</t>
      </section>
      <section anchor="new-spdk">
        <name>Standard Problem Detail Entries</name>
        <t>Beyond the Standard Problem Detail keys defined in <xref target="cddl"/>, additional
Standard Problem Detail keys can be registered (see <xref target="iana-spdk"/>).
Standard Problem Detail keys are not specific to a particular problem
type; they are intended to be used for problem details that cover an
area of application that includes multiple registered problem types.</t>
        <t>Standard Problem Detail keys are negative integers, so they never can
conflict with Custom Problem Detail keys defined for a problem type
(which are unsigned integers or text strings).</t>
        <t>In summary, the keys for Standard Problem Detail entries are in a
global namespace that applies to all Problem Types.
The documentation of a Problem Type <bcp14>MAY</bcp14> provide additional guidance on
how a Standard Problem Detail entry applies to this Problem Type, but
cannot redefine its generic semantics.</t>
        <t>Therefore, clients consuming problem details may be able to consume unknown
Problem types (i.e., with unknown CBOR Tag numbers), if the general
context (e.g., a media type known from the context such as that
defined in <xref target="media-type"/>) indicates that the present specification is used.
Such consumers <bcp14>MUST</bcp14> ignore any Standard Problem Detail entries that
they do not recognize (which, for an unknown tag, by definition also
applies to all Custom Problem Details entries).</t>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>The security and privacy considerations outlined in Section 5 of <xref target="RFC7807"/> apply in full.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC XXXX with this RFC number and remove this note.</cref></t>
      <section anchor="iana-tag">
        <name>CBOR Tag</name>
        <t>As per <xref target="STD94"/>, IANA has created a "<xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/>" registry <xref target="IANA.cbor-tags"/>,
which serves as the registry for problem details types (see <xref target="sec-new-attributes"/>).
For use as a predefined, generic problem details type,
IANA is requested to allocate the tag defined in <xref target="tab-tag-values"/>.</t>
        <table align="left" anchor="tab-tag-values">
          <name>Generic Problem Details tag</name>
          <thead>
            <tr>
              <th align="left">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD400</td>
              <td align="left">map</td>
              <td align="left">Generic Problem Details</td>
              <td align="left">RFCXXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-spdk">
        <name>Standard Problem Detail Key registry</name>
        <!-- {{content-formats (CoAP Content-Formats)<IANA.core-parameters}} -->

<t>This specification defines a new sub-registry for Standard Problem
Detail Keys in the CoRE Parameters registry <xref target="IANA.core-parameters"/>,
with the policy "specification required" <xref target="RFC8126"/>.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>key value:</dt>
          <dd>
            <t>a negative integer to be used as the value of the key</t>
          </dd>
          <dt>name:</dt>
          <dd>
            <t>a name that could be used in implementations for the key</t>
          </dd>
          <dt>type:</dt>
          <dd>
            <t>type of the data associated with the key; preferably in CDDL
notation</t>
          </dd>
          <dt>brief description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>reference:</dt>
          <dd>
            <t>a reference document</t>
          </dd>
        </dl>
        <t>Initial entries in this sub-registry are as follows:</t>
        <table anchor="spdk">
          <name>Initial Entries in Standard Problem Detail Key registry</name>
          <thead>
            <tr>
              <th align="left">Key value</th>
              <th align="left">Name</th>
              <th align="left">Type</th>
              <th align="left">Brief Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">-1</td>
              <td align="left">title</td>
              <td align="left">text</td>
              <td align="left">short, human-readable summary of the problem type</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">-2</td>
              <td align="left">detail</td>
              <td align="left">text</td>
              <td align="left">human-readable explanation specific to this occurrence of the problem</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">-3</td>
              <td align="left">instance</td>
              <td align="left">~uri</td>
              <td align="left">URI reference identifying specific occurrence of the problem</td>
              <td align="left">RFCXXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table align="left" anchor="new-media-type">
          <name>New Media Type application/concise-problem-details+cbor</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">concise-problem-details+cbor</td>
              <td align="left">application/concise-problem-details+cbor</td>
              <td align="left">RFCXXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>concise-problem-details+cbor</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (CBOR data item)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Clients and servers in the Internet of Things</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CoRE WG mailing list (core@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.cbor-tags"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table align="left">
          <name>New Content-Format</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/concise-problem-details+cbor</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..999.</t>
        <t>In the registry as defined by <xref section="12.3" sectionFormat="of" target="RFC7252"/> at the time of
writing, the column "Content-Type" is called "Media type" and the
column "Content Coding" is called "Encoding".</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="STD94" target="https://www.rfc-editor.org/info/rfc8949">
        <front>
          <title>Concise Binary Object Representation (CBOR)</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <author fullname="P. Hoffman" initials="P." surname="Hoffman">
            <organization/>
          </author>
          <date month="December" year="2020"/>
          <abstract>
            <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="94"/>
        <seriesInfo name="RFC" value="8949"/>
        <seriesInfo name="DOI" value="10.17487/RFC8949"/>
      </reference>
      <reference anchor="STD66" target="https://www.rfc-editor.org/info/rfc3986">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
            <organization/>
          </author>
          <author fullname="R. Fielding" initials="R." surname="Fielding">
            <organization/>
          </author>
          <author fullname="L. Masinter" initials="L." surname="Masinter">
            <organization/>
          </author>
          <date month="January" year="2005"/>
          <abstract>
            <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="66"/>
        <seriesInfo name="RFC" value="3986"/>
        <seriesInfo name="DOI" value="10.17487/RFC3986"/>
      </reference>
      <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
        <front>
          <title>The Constrained Application Protocol (CoAP)</title>
          <author fullname="Z. Shelby" initials="Z." surname="Shelby">
            <organization/>
          </author>
          <author fullname="K. Hartke" initials="K." surname="Hartke">
            <organization/>
          </author>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <date month="June" year="2014"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
            <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7252"/>
        <seriesInfo name="DOI" value="10.17487/RFC7252"/>
      </reference>
      <reference anchor="RFC7807" target="https://www.rfc-editor.org/info/rfc7807">
        <front>
          <title>Problem Details for HTTP APIs</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham">
            <organization/>
          </author>
          <author fullname="E. Wilde" initials="E." surname="Wilde">
            <organization/>
          </author>
          <date month="March" year="2016"/>
          <abstract>
            <t>This document defines a "problem detail" as a way to carry machine- readable details of errors in a HTTP response to avoid the need to define new error response formats for HTTP APIs.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7807"/>
        <seriesInfo name="DOI" value="10.17487/RFC7807"/>
      </reference>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610">
        <front>
          <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
          <author fullname="H. Birkholz" initials="H." surname="Birkholz">
            <organization/>
          </author>
          <author fullname="C. Vigano" initials="C." surname="Vigano">
            <organization/>
          </author>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <date month="June" year="2019"/>
          <abstract>
            <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8610"/>
        <seriesInfo name="DOI" value="10.17487/RFC8610"/>
      </reference>
      <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
        <front>
          <title>Concise Binary Object Representation (CBOR) Tags</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date/>
        </front>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="M. Cotton" initials="M." surname="Cotton">
            <organization/>
          </author>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <author fullname="T. Narten" initials="T." surname="Narten">
            <organization/>
          </author>
          <date month="June" year="2017"/>
          <abstract>
            <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
            <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
            <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </reference>
      <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
        <front>
          <title>Constrained RESTful Environments (CoRE) Parameters</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date/>
        </front>
      </reference>
      <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
        <front>
          <title>Media Types</title>
          <author>
            <organization>IANA</organization>
          </author>
          <date/>
        </front>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t><contact fullname="Mark Nottingham"/> and <contact fullname="Erik Wilde"/>, authors of RFC 7807.
<contact fullname="Klaus Hartke"/> and <contact fullname="Jaime Jiménez"/>, co-authors of an earlier generation of
this specification.
<contact fullname="Christian Amsüss"/> and <contact fullname="Marco Tiloca"/> for review and comments on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61b23Ibt5Z9x1cgdNWJZLMZ62LHYhwnsiQnOvFFIyt15kwq
ZwrsBkmUm92cRjcVRla+ZR7Oy/mHeZr82Ky9AfSNlJxUDV9EonHZ2NiXtTZa
URSJ1VgeCFGaMtVjeZJnsbFaXhT5JNULeapLZVIrX+UFnh1fyOOLcyvUZFLo
FfW+POt3FUkeZ2qBuZJCTcvI6HIaxXmho6XrGCWuY5SqUttSxPgzy4v1WNoy
EXGeWZ3Zyo5lWVRa2GqyMNaaPCvXS0x6fnb1SgizLPi5LfcfPz56vC9UodVY
Hl9eieu8+DAr8mrpxfsbfptsJr+jNvFBr9EhGfNmhrSb4cYGhC1VlvynSvMM
C661FUszlj+VeTyUNi/KQk8tvq0X9OVnIVRVzvNiLGQkpdv54GqeLxRpzVpV
moGQ+OTFTGXmV/zOM3RRxcK16wVWxW54yGjqhnyLx6M4X7QmPVGFLXUmX+bF
QmVZmHMsf8zMShfWlL//s5QvC71Ap6v/OOcOFtLqciwvcltOVTyXBwePDw8f
87PYlFC6G+Aa8gTrnEb7zw6eHPmWKivpaL7TtOiaG5dzVsyjw6PocH8v2t97
Fj09ONrfa+8mVpP82/JXM4KEQmQkcgkpoST5/ur06HDMnaOxnBjLX78ey8tX
J8+ODo9cl6dP6y5VYVpdDo6ePcVPfPty/8k+VsrV0v9+9vjLsZyX5TKYmhBR
FEk1gRZUXApxNTdWwj4r7LiUiZ6aTFup5MD3l840B1JR67VayzLHVopiLRZQ
HnpHsLNEoa/vamU+lboo8sJKk2HQ5dn7K1louyQ7puFqlZsEp6tFpnVCLW5d
melrN7LpPmU9WfrrJiJvG0Hs8EgYWsYuTYGpJuuhnFQlGmAWiZt7ouUCvgat
OD8u5yob0urBykXwaFrj+6sr59FepoT2AE1KUuXIaW9hkiTVQjyQ5zCFPKli
MmAhuhuFy5QVyebkRA9pK5gbFMlh4+YmooO6va2HCLI2jLDwqYUuzQI/srzE
sOnUxIYOiJSfZyu9ljrLq9m8Mz0MrCqFyrwO3d7nOl1Oq3QkJR+1XerYYDY3
ojlvaxZLHCG8XOhfoDxr6ESnBfyMwkfrkE5evruUpZpZarOVgVA08bIqlrnV
I3Fe0g6wETPL6hModGX5fJpDHMrruYE+YghsEmzOTNcyMbY0GQyztj+KcXZQ
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

-->

</rfc>
