<?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.7.19 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-coap-pubsub-16" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="CoAP pubsub">A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-core-coap-pubsub-16"/>
    <author initials="J." surname="Jimenez" fullname="Jaime Jimenez">
      <organization>Ericsson</organization>
      <address>
        <email>jaime@iki.fi</email>
      </address>
    </author>
    <author initials="M." surname="Koster" fullname="Michael Koster">
      <organization>Dogtiger Labs</organization>
      <address>
        <email>michaeljohnkoster@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Keranen" fullname="Ari Keranen">
      <organization>Ericsson</organization>
      <address>
        <email>ari.keranen@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="January" day="28"/>
    <area>Applications</area>
    <workgroup>CoRE Working Group</workgroup>
    <abstract>
      <?line 68?>

<t>This document describes a publish-subscribe architecture for the Constrained Application Protocol (CoAP), extending the capabilities of CoAP communications for supporting endpoints with long breaks in connectivity and/or up-time. CoAP clients publish on and subscribe to a topic via a corresponding topic resource at a CoAP server acting as broker.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-core-coap-pubsub/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        core Working Group mailing list (<eref target="mailto:core@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/core/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/core/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/core-wg/coap-pubsub"/>.</t>
    </note>
  </front>
  <middle>
    <?line 72?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Constrained Application Protocol (CoAP) <xref target="RFC7252"/> supports
machine-to-machine communication across networks of constrained
devices and constrained networks. CoAP uses a request/response model where clients make requests to servers in order to request actions on resources. Depending on the situation the same device may act either as a server, a client, or both.</t>
      <t>One important class of constrained devices includes devices that are intended to run for years from a small battery, or by scavenging energy from their environment. These devices have limited up-time because they spend most of their time in a sleeping state with no network connectivity. Another important class of nodes are devices with limited reachability due to middle-boxes like Network Address Translators (NATs) and firewalls.</t>
      <t>For these nodes, the client/server-oriented architecture of REST can be challenging when interactions are not initiated by the devices themselves. A publish/subscribe-oriented architecture where nodes exchange data via topics through a broker entity might fit these nodes better.</t>
      <t>This document applies the idea of broker-based publish-subscribe to Constrained RESTful Environments using CoAP. It defines a broker that allows to create, discover subscribe and publish on topics.</t>
      <section anchor="terminology">
        <name>Terminology</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 <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>This specification requires readers to be familiar with all the terms and concepts that are discussed in <xref target="RFC8288"/> and <xref target="RFC6690"/>. Readers should also be familiar with the terms and concepts discussed in <xref target="RFC7252"/>, <xref target="RFC9176"/> and <xref target="RFC7641"/>. The URI template format <xref target="RFC6570"/> is used to describe the REST API defined in this specification.</t>
        <t>This specification makes use of the following terminology:</t>
        <dl newline="true">
          <dt>publish-subscribe (pub/sub):</dt>
          <dd>
            <t>A message communication model where messages associated with specific topics are sent to a broker. Interested parties, i.e. subscribers, receive these topic-based messages from the broker without the original sender knowing the recipients. The broker handles matching and delivering these messages to the appropriate subscribers.</t>
          </dd>
          <dt>publishers and subscribers:</dt>
          <dd>
            <t>CoAP clients can act as publishers or as subscribers. Publishers send CoAP messages (publications) to the broker on specific topics. Subscribers have an ongoing observation relation (subscription) to a topic. Both roles operate without any mutual knowledge, guided by their respective topic interests.</t>
          </dd>
          <dt>topic collection:</dt>
          <dd>
            <t>A set of topic-configurations. A topic collection is hosted as one collection resource (See <xref section="3.1" sectionFormat="of" target="I-D.ietf-core-interfaces"/>) at the broker, and its representation is the list of links to the topic resources corresponding to each topic-configuration.</t>
          </dd>
          <dt>topic-configuration:</dt>
          <dd>
            <t>A set of information concerning a topic, including its configuration and other metadata. A topic-configuration is hosted as one topic resource at the broker, and its representation is the set of configuration information concerning the topic. All the topic resources associated with the same topic collection share a common base URI, i.e., the URI of the collection resource. Throughout this document the words "topic resource" and "topic-configuration resource" can be used interchangeably.</t>
          </dd>
          <dt>topic-data resource:</dt>
          <dd>
            <t>A resource where clients can publish data and/or subscribe to data for a specific topic. The representation of the topic resource corresponding to such a topic also specifies the URI to the present topic-data resource.</t>
          </dd>
          <dt>broker:</dt>
          <dd>
            <t>A CoAP server that hosts one or more topic collections with their topic-configurations, and also topic-data resources. The broker is responsible for the store-and-forward of state update representations, for the topics for which it hosts the corresponding topic-data resources. The broker is also responsible for handling the topic lifecycle as defined in <xref target="topic-lifecycle"/>. The creation, configuration, and discovery of topics at a broker is specified in <xref target="topics"/>.</t>
          </dd>
        </dl>
      </section>
      <section anchor="coap-publish-subscribe-architecture">
        <name>CoAP Publish-Subscribe Architecture</name>
        <t><xref target="fig-arch"/> shows a simple Publish/Subscribe architecture over CoAP.</t>
        <t>Topics are created by the broker, but the initial configuration can be proposed by a client (e.g., a publisher or a dedicated administrator) over the RESTful interface of a corresponding topic resource hosted by the broker.</t>
        <t>Publishers submit their data over the RESTful interface of a topic-data resource corresponding to the topic, which may be hosted by the broker. Subscribers to a topic are notified of new publications by using Observe <xref target="RFC7641"/> on the corresponding topic-data resource.</t>
        <t>The broker is responsible for the store-and-forward of state update representations between CoAP clients. Subscribers observing a resource will receive notifications, the delivery of which is done on a best-effort basis.</t>
        <figure anchor="fig-arch">
          <name>Publish-subscribe architecture over CoAP</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="488" viewBox="0 0 488 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,128" fill="none" stroke="black"/>
                <path d="M 8,176 L 8,240" fill="none" stroke="black"/>
                <path d="M 104,64 L 104,128" fill="none" stroke="black"/>
                <path d="M 104,176 L 104,240" fill="none" stroke="black"/>
                <path d="M 192,64 L 192,240" fill="none" stroke="black"/>
                <path d="M 280,64 L 280,240" fill="none" stroke="black"/>
                <path d="M 376,64 L 376,128" fill="none" stroke="black"/>
                <path d="M 376,176 L 376,240" fill="none" stroke="black"/>
                <path d="M 480,64 L 480,128" fill="none" stroke="black"/>
                <path d="M 480,176 L 480,240" fill="none" stroke="black"/>
                <path d="M 8,64 L 104,64" fill="none" stroke="black"/>
                <path d="M 192,64 L 280,64" fill="none" stroke="black"/>
                <path d="M 376,64 L 480,64" fill="none" stroke="black"/>
                <path d="M 288,80 L 376,80" fill="none" stroke="black"/>
                <path d="M 104,96 L 184,96" fill="none" stroke="black"/>
                <path d="M 280,96 L 368,96" fill="none" stroke="black"/>
                <path d="M 280,112 L 368,112" fill="none" stroke="black"/>
                <path d="M 8,128 L 104,128" fill="none" stroke="black"/>
                <path d="M 376,128 L 480,128" fill="none" stroke="black"/>
                <path d="M 8,176 L 104,176" fill="none" stroke="black"/>
                <path d="M 376,176 L 480,176" fill="none" stroke="black"/>
                <path d="M 288,192 L 376,192" fill="none" stroke="black"/>
                <path d="M 104,208 L 184,208" fill="none" stroke="black"/>
                <path d="M 280,208 L 368,208" fill="none" stroke="black"/>
                <path d="M 280,224 L 368,224" fill="none" stroke="black"/>
                <path d="M 8,240 L 104,240" fill="none" stroke="black"/>
                <path d="M 192,240 L 280,240" fill="none" stroke="black"/>
                <path d="M 376,240 L 480,240" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="376,224 364,218.4 364,229.6" fill="black" transform="rotate(0,368,224)"/>
                <polygon class="arrowhead" points="376,208 364,202.4 364,213.6" fill="black" transform="rotate(0,368,208)"/>
                <polygon class="arrowhead" points="376,112 364,106.4 364,117.6" fill="black" transform="rotate(0,368,112)"/>
                <polygon class="arrowhead" points="376,96 364,90.4 364,101.6" fill="black" transform="rotate(0,368,96)"/>
                <polygon class="arrowhead" points="296,192 284,186.4 284,197.6" fill="black" transform="rotate(180,288,192)"/>
                <polygon class="arrowhead" points="296,80 284,74.4 284,85.6" fill="black" transform="rotate(180,288,80)"/>
                <polygon class="arrowhead" points="192,208 180,202.4 180,213.6" fill="black" transform="rotate(0,184,208)"/>
                <polygon class="arrowhead" points="192,96 180,90.4 180,101.6" fill="black" transform="rotate(0,184,96)"/>
                <g class="text">
                  <text x="36" y="36">CoAP</text>
                  <text x="244" y="36">CoAP</text>
                  <text x="412" y="36">CoAP</text>
                  <text x="48" y="52">clients</text>
                  <text x="244" y="52">server</text>
                  <text x="424" y="52">clients</text>
                  <text x="328" y="68">observe</text>
                  <text x="144" y="84">publish</text>
                  <text x="56" y="100">publisher</text>
                  <text x="428" y="100">subscriber</text>
                  <text x="56" y="148">...</text>
                  <text x="236" y="148">broker</text>
                  <text x="424" y="148">...</text>
                  <text x="56" y="164">...</text>
                  <text x="424" y="164">...</text>
                  <text x="328" y="180">observe</text>
                  <text x="144" y="196">publish</text>
                  <text x="56" y="212">publisher</text>
                  <text x="428" y="212">subscriber</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
     CoAP                      CoAP                 CoAP
     clients                  server                clients
   .-----------.          .----------.  observe  .------------.
   |           | publish  |          |<----------+            |
   | publisher +--------->+          +---------->| subscriber |
   |           |          |          +---------->|            |
   '-----------'          |          |           '------------'
        ...               |  broker  |                ...
        ...               |          |                ...
   .-----------.          |          |  observe  .------------.
   |           | publish  |          |<----------+            |
   | publisher +--------->|          +---------->| subscriber |
   |           |          |          +---------->|            |
   '-----------'          '----------'           '------------'
]]></artwork>
          </artset>
        </figure>
        <t>This document describes two sets of interactions; interactions to configure topics and their lifecycle (see <xref target="topic-configuration-interactions"/>) and interactions about the topic-data (see <xref target="topic-data-interactions"/>).</t>
        <t>Topic-configuration interactions are discovery, create, read configuration, update configuration, and delete configuration. These operations handle the management of the topics.</t>
        <t>Topic-data interactions are publish, subscribe, unsubscribe, read, and delete. These operations are oriented on how data is transferred from a publisher to a subscriber.</t>
      </section>
      <section anchor="managing-topics">
        <name>Managing Topics</name>
        <t><xref target="fig-api"/> shows the resources related to a Topic Collection that can be managed at the Broker.</t>
        <figure anchor="fig-api">
          <name>Resources of a Broker</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="496" viewBox="0 0 496 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 92,56 L 100,72" fill="none" stroke="black"/>
                <path d="M 148,136 L 156,152" fill="none" stroke="black"/>
                <path d="M 136,80 L 156,120" fill="none" stroke="black"/>
                <path d="M 124,40 L 132,56" fill="none" stroke="black"/>
                <path d="M 180,120 L 188,136" fill="none" stroke="black"/>
                <path d="M 212,136 L 220,152" fill="none" stroke="black"/>
                <path d="M 212,104 L 220,120" fill="none" stroke="black"/>
                <path d="M 244,120 L 252,136" fill="none" stroke="black"/>
                <path d="M 308,136 L 316,152" fill="none" stroke="black"/>
                <path d="M 308,104 L 316,120" fill="none" stroke="black"/>
                <path d="M 340,120 L 348,136" fill="none" stroke="black"/>
                <path d="M 92,56 L 100,40" fill="none" stroke="black"/>
                <path d="M 124,72 L 132,56" fill="none" stroke="black"/>
                <path d="M 148,136 L 156,120" fill="none" stroke="black"/>
                <path d="M 180,152 L 188,136" fill="none" stroke="black"/>
                <path d="M 212,136 L 220,120" fill="none" stroke="black"/>
                <path d="M 244,152 L 252,136" fill="none" stroke="black"/>
                <path d="M 308,136 L 316,120" fill="none" stroke="black"/>
                <path d="M 340,152 L 348,136" fill="none" stroke="black"/>
                <path d="M 100,40 L 124,40" fill="none" stroke="black"/>
                <path d="M 100,72 L 124,72" fill="none" stroke="black"/>
                <path d="M 148,104 L 308,104" fill="none" stroke="black"/>
                <path d="M 156,120 L 180,120" fill="none" stroke="black"/>
                <path d="M 220,120 L 244,120" fill="none" stroke="black"/>
                <path d="M 316,120 L 340,120" fill="none" stroke="black"/>
                <path d="M 156,152 L 180,152" fill="none" stroke="black"/>
                <path d="M 220,152 L 244,152" fill="none" stroke="black"/>
                <path d="M 316,152 L 340,152" fill="none" stroke="black"/>
                <g class="text">
                  <text x="40" y="52">topic</text>
                  <text x="44" y="68">collection</text>
                  <text x="44" y="84">resource</text>
                  <text x="280" y="132">...</text>
                  <text x="392" y="132">topic</text>
                  <text x="456" y="132">resources</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
             ___
   topic    /   \
 collection \___/
  resource       \
                  \____________________
                   \___    \___        \___
                   /   \   /   \  ...  /   \   topic resources
                   \___/   \___/       \___/
]]></artwork>
          </artset>
        </figure>
        <t>The Broker exports one or more topic-collection resources, with resource type "core.ps.coll" defined in <xref target="iana"/> of this document. The interfaces for the topic-collection resource is defined in <xref target="topic-collection-interactions"/>.</t>
        <t>A topic-collection resource can have topic resources as its child resources, with resource type "core.ps.conf".</t>
      </section>
    </section>
    <section anchor="topics">
      <name>Pub-Sub Topics</name>
      <t>The configuration side of a "publish/subscribe broker" consists of a collection of topics. These topics as well as the collection itself are exposed by a CoAP server as resources (see <xref target="fig-topic"/>). Each topic is associated with a topic-configuration resource and a topic-data resource. The topic-configuration resource is used by a client creating or administering a topic. The topic-data resource is used by the publishers and the subscribers to a topic.</t>
      <figure anchor="fig-topic">
        <name>Topic and topic-data resources of a topic</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="448" viewBox="0 0 448 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 184,152 L 184,232" fill="none" stroke="black"/>
              <path d="M 272,152 L 272,232" fill="none" stroke="black"/>
              <path d="M 400,152 L 400,232" fill="none" stroke="black"/>
              <path d="M 164,248 L 172,264" fill="none" stroke="black"/>
              <path d="M 92,56 L 100,72" fill="none" stroke="black"/>
              <path d="M 164,168 L 172,184" fill="none" stroke="black"/>
              <path d="M 196,232 L 204,248" fill="none" stroke="black"/>
              <path d="M 228,280 L 236,296" fill="none" stroke="black"/>
              <path d="M 136,80 L 172,152" fill="none" stroke="black"/>
              <path d="M 124,40 L 132,56" fill="none" stroke="black"/>
              <path d="M 196,152 L 204,168" fill="none" stroke="black"/>
              <path d="M 252,248 L 260,264" fill="none" stroke="black"/>
              <path d="M 252,168 L 260,184" fill="none" stroke="black"/>
              <path d="M 284,232 L 292,248" fill="none" stroke="black"/>
              <path d="M 236,104 L 260,152" fill="none" stroke="black"/>
              <path d="M 284,152 L 292,168" fill="none" stroke="black"/>
              <path d="M 380,248 L 388,264" fill="none" stroke="black"/>
              <path d="M 380,168 L 388,184" fill="none" stroke="black"/>
              <path d="M 412,232 L 420,248" fill="none" stroke="black"/>
              <path d="M 364,104 L 388,152" fill="none" stroke="black"/>
              <path d="M 412,152 L 420,168" fill="none" stroke="black"/>
              <path d="M 92,56 L 100,40" fill="none" stroke="black"/>
              <path d="M 124,72 L 132,56" fill="none" stroke="black"/>
              <path d="M 164,168 L 172,152" fill="none" stroke="black"/>
              <path d="M 164,248 L 172,232" fill="none" stroke="black"/>
              <path d="M 196,184 L 204,168" fill="none" stroke="black"/>
              <path d="M 196,264 L 204,248" fill="none" stroke="black"/>
              <path d="M 252,168 L 260,152" fill="none" stroke="black"/>
              <path d="M 220,296 L 228,280" fill="none" stroke="black"/>
              <path d="M 252,248 L 260,232" fill="none" stroke="black"/>
              <path d="M 284,184 L 292,168" fill="none" stroke="black"/>
              <path d="M 284,264 L 292,248" fill="none" stroke="black"/>
              <path d="M 380,168 L 388,152" fill="none" stroke="black"/>
              <path d="M 380,248 L 388,232" fill="none" stroke="black"/>
              <path d="M 412,184 L 420,168" fill="none" stroke="black"/>
              <path d="M 412,264 L 420,248" fill="none" stroke="black"/>
              <path d="M 100,40 L 124,40" fill="none" stroke="black"/>
              <path d="M 100,72 L 124,72" fill="none" stroke="black"/>
              <path d="M 148,104 L 364,104" fill="none" stroke="black"/>
              <path d="M 172,152 L 196,152" fill="none" stroke="black"/>
              <path d="M 260,152 L 284,152" fill="none" stroke="black"/>
              <path d="M 388,152 L 412,152" fill="none" stroke="black"/>
              <path d="M 172,264 L 196,264" fill="none" stroke="black"/>
              <path d="M 260,264 L 284,264" fill="none" stroke="black"/>
              <path d="M 388,264 L 412,264" fill="none" stroke="black"/>
              <path d="M 148,296 L 220,296" fill="none" stroke="black"/>
              <path d="M 236,296 L 308,296" fill="none" stroke="black"/>
              <path d="M 364,296 L 436,296" fill="none" stroke="black"/>
              <circle cx="184" cy="160" r="6" class="closeddot" fill="black"/>
              <circle cx="272" cy="160" r="6" class="closeddot" fill="black"/>
              <circle cx="400" cy="160" r="6" class="closeddot" fill="black"/>
              <g class="text">
                <text x="40" y="52">topic</text>
                <text x="44" y="68">collection</text>
                <text x="44" y="84">resource</text>
                <text x="196" y="132">......</text>
                <text x="284" y="132">......</text>
                <text x="412" y="132">......</text>
                <text x="112" y="148">topic</text>
                <text x="152" y="148">:</text>
                <text x="216" y="148">:</text>
                <text x="240" y="148">:</text>
                <text x="304" y="148">:</text>
                <text x="368" y="148">:</text>
                <text x="432" y="148">:</text>
                <text x="80" y="164">configuration</text>
                <text x="152" y="164">:</text>
                <text x="216" y="164">:</text>
                <text x="240" y="164">:</text>
                <text x="304" y="164">:</text>
                <text x="368" y="164">:</text>
                <text x="432" y="164">:</text>
                <text x="100" y="180">resource</text>
                <text x="152" y="180">:</text>
                <text x="176" y="180">_</text>
                <text x="192" y="180">_</text>
                <text x="216" y="180">:</text>
                <text x="240" y="180">:</text>
                <text x="264" y="180">_</text>
                <text x="280" y="180">_</text>
                <text x="304" y="180">:</text>
                <text x="368" y="180">:</text>
                <text x="392" y="180">_</text>
                <text x="408" y="180">_</text>
                <text x="432" y="180">:</text>
                <text x="164" y="196">....</text>
                <text x="204" y="196">....</text>
                <text x="252" y="196">....</text>
                <text x="292" y="196">....</text>
                <text x="380" y="196">....</text>
                <text x="420" y="196">....</text>
                <text x="164" y="212">....</text>
                <text x="204" y="212">....</text>
                <text x="252" y="212">....</text>
                <text x="292" y="212">....</text>
                <text x="380" y="212">....</text>
                <text x="420" y="212">....</text>
                <text x="152" y="228">:</text>
                <text x="176" y="228">_</text>
                <text x="192" y="228">_</text>
                <text x="216" y="228">:</text>
                <text x="240" y="228">:</text>
                <text x="264" y="228">_</text>
                <text x="280" y="228">_</text>
                <text x="304" y="228">:</text>
                <text x="336" y="228">...</text>
                <text x="368" y="228">:</text>
                <text x="392" y="228">_</text>
                <text x="408" y="228">_</text>
                <text x="432" y="228">:</text>
                <text x="92" y="244">topic-data</text>
                <text x="152" y="244">:</text>
                <text x="216" y="244">:</text>
                <text x="240" y="244">:</text>
                <text x="304" y="244">:</text>
                <text x="368" y="244">:</text>
                <text x="432" y="244">:</text>
                <text x="100" y="260">resource</text>
                <text x="152" y="260">:</text>
                <text x="216" y="260">:</text>
                <text x="240" y="260">:</text>
                <text x="304" y="260">:</text>
                <text x="368" y="260">:</text>
                <text x="432" y="260">:</text>
                <text x="184" y="276">:.......:</text>
                <text x="272" y="276">:.......:</text>
                <text x="400" y="276">:.......:</text>
                <text x="144" y="292">\</text>
                <text x="312" y="292">/</text>
                <text x="336" y="292">...</text>
                <text x="360" y="292">\</text>
                <text x="440" y="292">/</text>
                <text x="176" y="308">topic</text>
                <text x="208" y="308">1</text>
                <text x="264" y="308">topic</text>
                <text x="296" y="308">2</text>
                <text x="392" y="308">topic</text>
                <text x="424" y="308">n</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
              ___
    topic    /   \
  collection \___/
   resource       \
                   \___________________________
                    \          \               \
                     \ ......   \ ......        \ ......
             topic  : \___  :  : \___  :       : \___  :
     configuration  : / * \ :  : / * \ :       : / * \ :
          resource  : \_|_/ :  : \_|_/ :       : \_|_/ :
                    ....|....  ....|....       ....|....
                    ....|....  ....|....       ....|....
                    :  _|_  :  :  _|_  :  ...  :  _|_  :
        topic-data  : /   \ :  : /   \ :       : /   \ :
          resource  : \___/ :  : \___/ :       : \___/ :
                    :.......:  :.......:       :.......:
                   \_________/\_________/ ... \_________/
                     topic 1    topic 2         topic n
]]></artwork>
        </artset>
      </figure>
      <section anchor="collection-representation">
        <name>Collection Representation</name>
        <t>Each topic-configuration is represented as a link, where the link target is the URI of the corresponding topic resource.</t>
        <t>Publication and subscription to a topic occur at a link, where the link target is the URI of the corresponding topic-data resource. Such a link is specified by the topic-data entry within the topic resource (see <xref target="topic-properties"/>).</t>
        <t>A topic resource with a topic-data link can also be simply called "topic".</t>
        <t>The list of links to the topic resources can be retrieved from the associated topic collection resource, and represented as a Link Format document <xref target="RFC6690"/>where each such link specifies the link target attribute 'rt' (Resource Type), with value "core.ps.conf" defined in this document.</t>
      </section>
      <section anchor="topic-resource-representation">
        <name>Topic-Configuration Representation</name>
        <t>A CoAP client can create a new topic by submitting an initial configuration for the topic (see <xref target="topic-create"/>). It can also read and update the configuration of existing topics and topic properties as well as delete them when they are no longer needed (see <xref target="topic-configuration-interactions"/>).</t>
        <t>The configuration of a topic itself consists of a set of properties that can be set by a client or by the broker. The topic-configuration is represented as a CBOR map containing the configuration properties of the topic as top-level elements.</t>
        <t>Unless specified otherwise, these are defined in this document and their CBOR abbreviations are defined in <xref target="pubsub-parameters"/>.</t>
        <section anchor="topic-properties">
          <name>Topic Properties</name>
          <t>The CBOR map includes the following configuration parameters, whose CBOR abbreviations are defined in <xref target="pubsub-parameters"/> of this document.</t>
          <ul spacing="normal">
            <li>
              <t>'topic-name': A required field used as an application identifier. It encodes the topic name as a CBOR text string. Examples of topic names include human-readable strings (e.g., "room2"), UUIDs, or other values.</t>
            </li>
            <li>
              <t>'topic-data': A required field (optional during creation) containing the URI of the topic-data resource for publishing/subscribing to this topic. It encodes the URI as a CBOR text string.</t>
            </li>
            <li>
              <t>'resource-type': A required field used to indicate the resource type of the topic-data resource for the topic. It encodes the resource type as a CBOR text string. The value should be "core.ps.data".</t>
            </li>
            <li>
              <t>'topic-content-format': This optional field specifies the CoAP Content-Format identifier of the topic-data resource representation, e.g., 60 for the media-type "application/cbor".</t>
            </li>
            <li>
              <t>'topic-type': An optional field used to indicate the attribute or property of the topic-data resource for the topic. It encodes the attribute as a CBOR text string. Example attributes include "temperature".</t>
            </li>
            <li>
              <t>'expiration-date': An optional field used to indicate the expiration date of the topic. It encodes the expiration date as a CBOR text string. The value should be a date string as defined in Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> (e.g., the CBOR encoded version of "2023-03-31T23:59:59Z"). If this field is not present, the topic will not expire automatically.</t>
            </li>
            <li>
              <t>'max-subscribers': An optional field used to indicate the maximum number of simultaneous subscribers allowed for the topic. It encodes the maximum number as an unsigned CBOR integer. If this field is not present or if the field is empty, then there is no limit to the number of simultaneous subscribers allowed. The broker can use this field to limit the number of subscribers for the topic.</t>
            </li>
            <li>
              <t>'observer-check': An optional field that controls the maximum number of seconds between two consecutive Observe notifications sent as Confirmable messages to each topic subscriber (see <xref target="unsubscribe"/>). Encoded as a CBOR unsigned integer greater than 0, it ensures subscribers who have lost interest and silently forgotten the observation do not remain indefinitely on the server's observer list. If another CoAP server hosts the topic-data resource, that server is responsible for applying the observer-check value. The default value for this field is 86400, as defined in <xref target="RFC7641"/>, which corresponds to 24 hours.</t>
            </li>
            <li>
              <t>'topic-history': An optional field used to indicate how many previous resource representations the broker shall store for a topic. Encoded as an unsigned CBOR integer, it defines a counter representing the number of historical resource states the broker retains. This enables subscribers to retrieve past states of the topic data when necessary, useful in scenarios where historical context is required (e.g., for data analytics or auditing). If this field is not present, no historical data will be stored.</t>
            </li>
            <li>
              <t>'initialize': An optional boolean field that, when set to <tt>true</tt>, allows the topic-data path to be pre-populated with an empty string or other initial value during the topic creation process. This behavior facilitates one-shot publication and topic creation, enabling CoAP clients to subscribe by default without encountering a <tt>4.04 Not Found</tt> error. If this field is not present, the broker behaves as usual, and the topic-data path is not initialized.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="discovery">
        <name>Discovery</name>
        <t>A client can perform a discovery of: the broker; the topic collection resources and topic resources hosted by the broker; and the topic-data resources associated with those topic resources.</t>
        <section anchor="broker-discovery">
          <name>Broker Discovery</name>
          <t>CoAP clients <bcp14>MAY</bcp14> discover brokers by using CoAP Simple Discovery, via multicast, through a Resource Directory (RD) <xref target="RFC9176"/> or by other means specified in extensions to <xref target="RFC7252"/>. Brokers <bcp14>MAY</bcp14> register with a RD by following the steps on <xref section="5" sectionFormat="of" target="RFC9176"/> with the resource type set to "core.ps" as defined in <xref target="iana"/> of this document.</t>
          <t>The following example shows an endpoint discovering a broker using the "core.ps" resource type over a multicast network. Brokers within the multicast scope will answer the query.</t>
          <artwork><![CDATA[
   Request:

   Header: GET (Code=0.01)
   Uri-Host: "kdc.example.com"
   Uri-Path: ".well-known"
   Uri-Path: "core"
   Uri-Query: "rt=core.ps"

   Response:

   Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   <coap://mythinguri.com/broker/v1>;rt="core.ps"
]]></artwork>
        </section>
        <section anchor="topic-collection-discovery">
          <name>Topic Collection Discovery</name>
          <t>A Broker <bcp14>SHOULD</bcp14> offer a topic discovery entry point to enable clients to find topics of interest. The resource entry point is the topic collection resource collecting the topic-configurations for those topics (see <xref section="1.2.2" sectionFormat="of" target="RFC6690"/>) and is identified by the resource type "core.ps.coll".</t>
          <t>The specific resource path is left for implementations, examples in this document use the "/ps" path. The interactions with a topic collection are further defined in <xref target="topic-collection-interactions"/>.</t>
          <t>Since the representation of the topic collection resource includes the links to the associated topic resources, it is not required to locate those links under "/.well-known/core", also in order to limit the size of the Link Format document returned as result of the discovery.</t>
          <t>Example:</t>
          <artwork><![CDATA[
   Request:

   Header: GET (Code=0.01)
   Uri-Path: ".well-known"
   Uri-Path: "core"
   Uri-Query: "rt=core.ps.coll"

   Response:

   Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   </ps>;rt="core.ps.coll";ct=40,
   </other/path>;rt="core.ps.coll";ct=40
]]></artwork>
        </section>
        <section anchor="topic-discovery">
          <name>Topic-Configuration Discovery</name>
          <t>Each topic collection is associated with a group of topic resources, each detailing the configuration of its respective topic (refer to <xref target="topic-properties"/>). Each topic resource is identified by the resource type "core.ps.conf".</t>
          <t>Below is an example of discovery via /.well-known/core with rt=core.ps.conf that returns a list of topics, as the list of links to the corresponding topic resources.</t>
          <artwork><![CDATA[
   Request:

   Header: GET (Code=0.01)
   Uri-Path: ".well-known"
   Uri-Path: "core"
   Uri-Query: "rt=core.ps.conf"

   Response:

   Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   </ps/h9392>;rt="core.ps.conf";ct=TBD606,
   </other/path/2e3570>;rt="core.ps.conf";ct=TBD606
]]></artwork>
        </section>
        <section anchor="topic-data-discovery">
          <name>Topic-Data Discovery</name>
          <t>Within a topic, there is the topic-data property containing the URI of the topic-data resource that a CoAP client can subscribe and publish to. Resources exposing resources of the topic-data type are expected to use the resource type 'core.ps.data'.</t>
          <t>The topic-data contains the URI of the topic-data resource for publishing and subscribing. So retrieving the topic-configuration will also provide the URL of the topic-data (see <xref target="topic-get-resource"/>).</t>
          <t>It is also possible to discover a list of topic-data resources by sending a request to the collection with rt=core.ps.data resources as shown below.</t>
          <artwork><![CDATA[
   Request:

   Header: GET (Code=0.01)
   Uri-Path: "ps"
   Uri-Query: "rt=core.ps.data"

   Response:

   Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   </ps/data/62e4f8d>;rt="core.ps.data";obs
]]></artwork>
        </section>
      </section>
      <section anchor="topic-collection-interactions">
        <name>Topic Collection Interactions</name>
        <t>These are the interactions that can happen directly with a specific topic collection.</t>
        <section anchor="topic-get-all">
          <name>Retrieving all topic-configurations</name>
          <t>A client can request a collection of the topics present in the broker by making a GET request to the collection URI.</t>
          <t>On success, the broker returns a 2.05 (Content) response, specifying the list of links to topic resources associated with this topic collection (see <xref target="topic-resource-representation"/>).</t>
          <t>A client <bcp14>MAY</bcp14> retrieve a list of links to topics it is authorized to access, based on its permissions.</t>
          <t>Example:</t>
          <artwork><![CDATA[
   Request:

   Header: GET (Code=0.01)
   Uri-Path: "ps"

   Response:

   Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   </ps/h9392>;rt="core.ps.conf",
   </ps/2e3570>;rt="core.ps.conf"
]]></artwork>
        </section>
        <section anchor="topic-get-properties">
          <name>Getting topic-configurations by Properties</name>
          <!--
FETCH to /topic-collection with filter
retrieve only the topics that match the filter
request is cbor
response is link format
-->

<t>A client can filter a collection of topics by submitting the
representation of a topic filter (see <xref target="topic-fetch-resource"/>) in a FETCH request to the topic collection URI.</t>
          <t>On success, the broker returns a 2.05 (Content) response with a
representation of a list of topics in the collection (see
 <xref target="topic-discovery"/>) that match the filter in CoRE link format <xref target="RFC6690"/>.</t>
          <t>Upon success, the broker responds with a 2.05 (Content), providing a list of links to topic resources associated with this topic collection that match the request's filter criteria (refer to <xref target="topic-discovery"/>). A positive match happens only when each request parameter is present with the indicated value in the topic resource representation.</t>
          <t>Example:</t>
          <artwork><![CDATA[
   Request:

   Header: FETCH (Code=0.05)
   Uri-Path: "ps"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload:
   {
      "resource-type": "core.ps.data",
      "topic-type": "temperature"
   }


   Response:

   Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   </ps/2e3570>;rt="core.ps.conf"
]]></artwork>
          <t>TODO DELETE!!
~~~~
   Request:</t>
          <t>Header: FETCH (Code=0.05)
   Uri-Path: "ps"
   Content-Format: TBD606 (application/core-pubsub+cbor)</t>
          <t>Payload (in CBOR diagnostic notation):
   {
      / resource-type /      2: "core.ps.data",
      / topic-type /         4: "temperature"
   }</t>
          <t>Response:</t>
          <t>Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   &lt;/ps/2e3570&gt;;rt="core.ps.conf"
~~~~</t>
        </section>
        <section anchor="topic-create">
          <name>Creating a Topic</name>
          <t>A client can add a new topic-configurations to a collection of topics by submitting an initial representation of the initial topic resource (see <xref target="topic-resource-representation"/>) in a POST request to the topic collection URI. The request <bcp14>MUST</bcp14> specify at least a subset of the properties in <xref target="topic-properties"/>, namely: topic-name and resource-type.</t>
          <t>Please note that the topic will NOT be fully created until a publisher has published some data to it (See <xref target="topic-lifecycle"/>).</t>
          <t>To facilitate immediate subscription and allow clients to observe the topic before data has been published, the client can include the "initialize" set to "true". When supported, the broker will create the topic and pre-populate the "topic-data" field with an empty value. This allows subscribers to observe the topic without encountering a 4.04 (Not Found) error, even if no data has been published yet.</t>
          <t>When "initialize" is set to "false" or omitted, the topic will only be fully created after data is published to it.</t>
          <t>On success, the broker returns a 2.01 (Created) response, indicating the Location-Path of the new topic and the current representation of the topic resource. The response payload includes a CBOR map with key-value pairs. The response <bcp14>MUST</bcp14> include the required topic properties (see <xref target="topic-properties"/>), namely: "topic-name", "resource-type" and "topic-data". It <bcp14>MAY</bcp14> also include a number of optional properties too.</t>
          <t>If requirements are defined for the client to create the topic as requested and the broker does not successfully assess that those requirements are met, then the broker <bcp14>MUST</bcp14> respond with a 4.03 (Forbidden) error. The response <bcp14>MUST</bcp14> have Content-Format set to "application/core-pubsub+cbor".</t>
          <t>The broker <bcp14>MUST</bcp14> issue a 4.00 (Bad Request) error if a received parameter is invalid, unrecognized, or if the topic-name is already in use or otherwise invalid.</t>
          <artwork><![CDATA[
   Request:

   Header: POST (Code=0.02)
   Uri-Path: "ps"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /         0: "living-room-sensor",
      / resource-type /      2: "core.ps.data"
   }

   Response:

   Header: Created (Code=2.01)
   Location-Path: "ps/h9392"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /         0: "living-room-sensor",
      / topic-data /         1: "ps/data/1bd0d6d",
      / resource-type /      2: "core.ps.data"

   }
]]></artwork>
        </section>
      </section>
      <section anchor="topic-configuration-interactions">
        <name>Topic-Configuration Interactions</name>
        <t>These are the interactions that can happen at the topic resource level.</t>
        <section anchor="topic-get-resource">
          <name>Getting a topic-configuration</name>
          <!--
GET to /topic-config
retrieve a topic-configuration
response is cbor
-->

<t>A client can read the configuration of a topic by making a GET request to the topic resource URI.</t>
          <t>On success, the broker returns a 2.05 (Content) response with a representation of the topic resource, as specified in <xref target="topic-resource-representation"/>.</t>
          <t>If requirements are defined for the client to read the topic as requested and the broker does not successfully assess that those requirements are met, then the broker <bcp14>MUST</bcp14> respond with a 4.03 (Forbidden) error.</t>
          <t>The response payload is a CBOR map, whose possible entries are specified in <xref target="topic-resource-representation"/> and use the same abbreviations defined in <xref target="pubsub-parameters"/>.</t>
          <t>For example, below is a request on the topic "ps/h9392":</t>
          <artwork><![CDATA[
   Request:

   Header: GET (Code=0.01)
   Uri-Path: "ps"
   Uri-Path: "h9392"

   Response:

   Header: Content (Code=2.05)
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /            0: "living-room-sensor",
      / topic-data /            1: "ps/data/1bd0d6d",
      / resource-type /         2: "core.ps.data",
      / topic-content-format /  3: 112,
      / topic-type /            4: "temperature",
      / expiration-date /       5: "2023-04-00T23:59:59Z",
      / max-subscribers /       6: 100,
      / topic-history /         8: 10
   }
]]></artwork>
        </section>
        <section anchor="topic-fetch-resource">
          <name>Getting part of a topic-configuration</name>
          <!--
FETCH to /topic-conf with filter
retrieve only certain parameters from the configuration
request is cbor
response is cbor
-->

<t>A client can read the configuration of a topic by making a FETCH request to the topic resource URI with a filter for specific parameters. This is done in order to retrieve part of the current topic resource.</t>
          <t>The request contains a CBOR map with a configuration filter or 'conf-filter', a CBOR array of configuration parameters, as defined in <xref target="pubsub-parameters"/>. Each element of the array specifies one requested configuration parameter of the current topic resource (see <xref target="topic-resource-representation"/>).</t>
          <t>On success, the broker returns a 2.05 (Content) response with a representation of the topic resource. The response has as payload the partial representation of the topic resource as specified in <xref target="topic-resource-representation"/>.</t>
          <t>If requirements are defined for the client to read the topic as requested and the broker does not successfully assess that those requirements are met, then the broker <bcp14>MUST</bcp14> respond with a 4.03 (Forbidden) error.</t>
          <t>The response payload is a CBOR map, whose possible entries are specified in <xref target="topic-resource-representation"/> and use the same abbreviations defined in <xref target="pubsub-parameters"/>.</t>
          <t>Both request and response <bcp14>MUST</bcp14> have Content-Format set to "application/core-pubsub+cbor".</t>
          <t>Example:</t>
          <artwork><![CDATA[
   Request:

   Header: FETCH (Code=0.05)
   Uri-Path: "ps"
   Uri-Path: "h9392"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / conf-filter / 10: ["topic-data", "media-type"]
   }

   Response:

   Header: Content (Code=2.05)
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-data /            1: "ps/data/1bd0d6d",
      / topic-content-format /  3: 112,
   }
]]></artwork>
        </section>
        <section anchor="topic-update-resource">
          <name>Updating the topic-configuration</name>
          <!--
PUT to /topic-conf
override the whole configuration
request is cbor
response is cbor
-->

<t>A client can update a topic's configuration by submitting the updated topic representation in a PUT request to the topic URI. However, the parameters "topic-name", "topic-data", and "resource-type" are immutable post-creation, and any request attempting to change them will be deemed invalid by the broker.</t>
          <t>On success, the topic-configuration is overwritten and broker returns a 2.04 (Changed) response and the current full resource representation. The broker may choose not to overwrite parameters that are not explicitly modified in the request.</t>
          <t>Note that updating the "topic-data" path will automatically cancel all existing observations on it and thus will unsubscribe all subscribers. Updating the "topic-data" may happen also after it being deleted, as described on <xref target="delete-topic-data"/>, this will in turn create a new "topic-data" path for that topic-configuration.</t>
          <t>Similarly, decreasing max-subscribers will also cause that some subscribers get unsubscribed. Unsubscribed endpoints receive a final 4.04 (Not Found) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>. The specific queue management for unsubscribing is left for implementors.</t>
          <t>Please note that when using PUT the topic-configuration is being overwritten, thus some of the optional parameters (e.g., "max-subscribers", "observer-check") not included in the PUT message will be reset to their default values.</t>
          <t>Example:</t>
          <artwork><![CDATA[
   Request:

   Header: PUT (Code=0.03)
   Uri-Path: "ps"
   Uri-Path: "h9392"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /            0: "living-room-sensor",
      / topic-data /            1: "ps/data/1bd0d6d",
      / resource-type /         2: "core.ps.data",
      / topic-content-format /  3: 112,
      / topic-type /            4: "temperature",
      / expiration-date /       5: "2023-04-28T23:59:59Z"
   }

   Response:

   Header: Changed (Code=2.04)
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /            0: "living-room-sensor",
      / topic-data /            1: "ps/data/1bd0d6d",
      / resource-type /         2: "core.ps.data",
      / topic-content-format /  3: 112,
      / topic-type /            4: "temperature",
      / expiration-date /       5: "2023-04-28T23:59:59Z",
      / max-subscribers /       6: 100,
      / observer-check /        7: 86400
   }
]]></artwork>
          <t>Note that when a topic-configuration changes, it may result in disruptions for the subscribers. Some potential issues that may arise include:</t>
          <ul spacing="normal">
            <li>
              <t>Limiting the number of subscribers will cause cancellation of ongoing subscriptions until max-subscribers has been reached.</t>
            </li>
            <li>
              <t>Changing the topic-data value will cancel all ongoing subscriptions.</t>
            </li>
            <li>
              <t>Changing of the expiration-date may cause cancellation of ongoing subscriptions if the topic expires at an earlier data.</t>
            </li>
          </ul>
        </section>
        <section anchor="topic-update-resource-patch">
          <name>Updating the topic-configuration with iPATCH</name>
          <t>A client can partially update a topic's configuration by submitting a partial topic representation in an iPATCH request to the topic URI. The iPATCH request allows for updating only specific fields of the topic-configuration while leaving the others unchanged. As with the PUT method, the parameters "topic-name", "topic-data", and "resource-type" are immutable post-creation, and any request attempting to change them will be deemed invalid by the broker.</t>
          <t>On success, the broker returns a 2.04 (Changed) response and the current full resource representation. The broker only updates parameters that are explicitly mentioned in the request.</t>
          <t>As with the PUT method, updating the "topic-data" path will automatically cancel all existing observations on it and thus will unsubscribe all subscribers. Decreasing max-subscribers will also cause some subscribers to get unsubscribed. Unsubscribed endpoints receive a final 4.04 (Not Found) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>.</t>
          <t>Contrary to PUT, iPATCH operations will explicitly update some parameters, leaving others unmodified.</t>
          <artwork><![CDATA[
   Request:

   Header: iPATCH (Code=0.07)
   Uri-Path: "ps"
   Uri-Path: "h9392"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / expiration-date /  5: "2024-02-28T23:59:59Z",
      / max-subscribers /  6: 5
   }

   Response:

   Header: Changed (Code=2.04)
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /            0: "living-room-sensor",
      / topic-data /            1: "ps/data/1bd0d6d",
      / resource-type /         2: "core.ps.data",
      / topic-content-format /  3: 112,
      / topic-type /            4: "temperature",
      / expiration-date /       5: "2024-02-28T23:59:59Z",
      / max-subscribers /       6: 5,
      / observer-check /        7: 86400
   }
]]></artwork>
          <t>Note that when a topic-configuration changes through an iPATCH request, it may result in disruptions for the subscribers. For example, limiting the number of subscribers will cause cancellation of ongoing subscriptions until max-subscribers has been reached.</t>
        </section>
        <section anchor="topic-delete">
          <name>Deleting a topic-configuration</name>
          <t>A client can delete a topic by making a CoAP DELETE request on the topic resource URI.</t>
          <t>On success, the broker returns a 2.02 (Deleted) response.</t>
          <t>When a topic-configuration resource is deleted, the broker <bcp14>MUST</bcp14> also delete the topic-data resource, unsubscribe all subscribers by removing them from the list of observers and returning a final 4.04 (Not Found) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>.</t>
          <t>Example:</t>
          <artwork><![CDATA[
   Request:

   Header: DELETE (Code=0.04)
   Uri-Path: "ps"
   Uri-Path: "h9392"

   Response:

   Header: Deleted (Code=2.02)
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="pubsub">
      <name>Publish and Subscribe</name>
      <t>The overview of the publish/subscribe mechanism over CoAP is as follows: a publisher publishes to a topic by submitting the data in a PUT request to a topic-data resource and subscribers subscribe to a topic by submitting a GET request with Observe option set to 0 (register) to a topic-data resource. When resource state changes, subscribers observing the resource <xref target="RFC7641"/> at that time will receive a notification.</t>
      <t>A topic-data resource does not exist until some initial data has been published to it. Before initial data publication, a GET request to the topic-data resource URI results in a 4.04 (Not Found) response. If such a "half created" topic is undesired, the creator of the topic can simply immediately publish some initial placeholder data to make the topic "fully created" (see <xref target="topic-lifecycle"/>).</t>
      <!--
* "URIs for topic-data MAY be broker-generated or client-generated."

   See a comment above. I think that only the host of the topic-data resource should be in control of generating this URI (to be provided to the broker if that host is not the broker already).
-->

<t>URIs for topic resources are broker-generated (see <xref target="topic-create"/>). There is no necessary URI pattern dependence between the URI where the topic-data exists and the URI of the topic-configuration resource.</t>
      <section anchor="topic-lifecycle">
        <name>Topic Lifecycle</name>
        <t>When a topic is newly created, it is first placed by the broker into the HALF CREATED state (see <xref target="fig-life"/>). In this state, a client can read and update the configuration of the topic and delete the topic. A publisher can publish to the topic-data resource.  However, a subscriber cannot yet subscribe to the topic-data resource nor read the latest data.</t>
        <figure anchor="fig-life">
          <name>Lifecycle of a Topic</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="544" viewBox="0 0 544 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 128,72 L 128,120" fill="none" stroke="black"/>
                <path d="M 128,144 L 128,176" fill="none" stroke="black"/>
                <path d="M 160,144 L 160,176" fill="none" stroke="black"/>
                <path d="M 168,72 L 168,120" fill="none" stroke="black"/>
                <path d="M 248,152 L 248,184" fill="none" stroke="black"/>
                <path d="M 280,152 L 280,184" fill="none" stroke="black"/>
                <path d="M 368,72 L 368,120" fill="none" stroke="black"/>
                <path d="M 368,144 L 368,176" fill="none" stroke="black"/>
                <path d="M 400,144 L 400,176" fill="none" stroke="black"/>
                <path d="M 408,72 L 408,120" fill="none" stroke="black"/>
                <path d="M 8,80 L 104,80" fill="none" stroke="black"/>
                <path d="M 192,80 L 344,80" fill="none" stroke="black"/>
                <path d="M 432,80 L 520,80" fill="none" stroke="black"/>
                <path d="M 192,112 L 344,112" fill="none" stroke="black"/>
                <path d="M 432,112 L 520,112" fill="none" stroke="black"/>
                <path d="M 200,160 L 224,160" fill="none" stroke="black"/>
                <path d="M 304,160 L 328,160" fill="none" stroke="black"/>
                <path d="M 184,128 L 200,160" fill="none" stroke="black"/>
                <path d="M 328,160 L 344,128" fill="none" stroke="black"/>
                <path d="M 520,80 C 528.83064,80 536,87.16936 536,96" fill="none" stroke="black"/>
                <path d="M 520,112 C 528.83064,112 536,104.83064 536,96" fill="none" stroke="black"/>
                <path d="M 144,192 C 135.16936,192 128,184.83064 128,176" fill="none" stroke="black"/>
                <path d="M 144,192 C 152.83064,192 160,184.83064 160,176" fill="none" stroke="black"/>
                <path d="M 384,192 C 375.16936,192 368,184.83064 368,176" fill="none" stroke="black"/>
                <path d="M 384,192 C 392.83064,192 400,184.83064 400,176" fill="none" stroke="black"/>
                <path d="M 128,72 L 168,72" fill="none" stroke="black"/>
                <path d="M 368,72 L 408,72" fill="none" stroke="black"/>
                <path d="M 128,120 L 168,120" fill="none" stroke="black"/>
                <path d="M 368,120 L 408,120" fill="none" stroke="black"/>
                <path d="M 248,152 L 280,152" fill="none" stroke="black"/>
                <path d="M 248,184 L 280,184" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="440,112 428,106.4 428,117.6" fill="black" transform="rotate(180,432,112)"/>
                <polygon class="arrowhead" points="408,144 396,138.4 396,149.6" fill="black" transform="rotate(270,400,144)"/>
                <polygon class="arrowhead" points="352,112 340,106.4 340,117.6" fill="black" transform="rotate(0,344,112)"/>
                <polygon class="arrowhead" points="312,160 300,154.4 300,165.6" fill="black" transform="rotate(180,304,160)"/>
                <polygon class="arrowhead" points="232,160 220,154.4 220,165.6" fill="black" transform="rotate(0,224,160)"/>
                <polygon class="arrowhead" points="200,80 188,74.4 188,85.6" fill="black" transform="rotate(180,192,80)"/>
                <polygon class="arrowhead" points="168,144 156,138.4 156,149.6" fill="black" transform="rotate(270,160,144)"/>
                <polygon class="arrowhead" points="112,80 100,74.4 100,85.6" fill="black" transform="rotate(0,104,80)"/>
                <g class="text">
                  <text x="148" y="36">HALF</text>
                  <text x="392" y="36">FULLY</text>
                  <text x="152" y="52">CREATED</text>
                  <text x="260" y="52">Delete</text>
                  <text x="392" y="52">CREATED</text>
                  <text x="268" y="68">topic-data</text>
                  <text x="472" y="68">Publish</text>
                  <text x="52" y="100">Create</text>
                  <text x="264" y="132">Publish</text>
                  <text x="480" y="132">Subscribe</text>
                  <text x="96" y="164">Read/</text>
                  <text x="432" y="164">Read/</text>
                  <text x="92" y="180">Update</text>
                  <text x="204" y="180">Delete</text>
                  <text x="324" y="180">Delete</text>
                  <text x="436" y="180">Update</text>
                  <text x="68" y="196">topic-config</text>
                  <text x="200" y="196">Topic</text>
                  <text x="320" y="196">Topic</text>
                  <text x="452" y="196">topic-data</text>
                  <text x="264" y="212">DELETED</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
                HALF                          FULLY
               CREATED       Delete          CREATED
                ____        topic-data        ____     Publish
------------>  |    |  <-------------------  |    |  ------------.
   Create      |    |                        |    |               |
               |____|  ------------------->  |____|  <-----------'
                      \      Publish      /            Subscribe
               |   ^   \       ___       /   |   ^
         Read/ |   |    '-->  |   |  <--'    |   | Read/
        Update |   |  Delete  |___|  Delete  |   | Update
  topic-config  '-'   Topic          Topic    '-'  topic-data
                             DELETED
]]></artwork>
          </artset>
        </figure>
        <t>After a publisher publishes to the topic-data for the first time, the topic is placed into the FULLY CREATED state. In this state, a client can read data by means of a GET request without observe. A publisher can publish to the topic-data resource and a subscriber can observe the topic-data resource.</t>
        <t>When a client deletes a topic-configuration resource, the topic is placed into the DELETED state and shortly after removed from the server. In this state, all subscribers are removed from the list of observers of the topic-data resource and no further interactions with the topic are possible.</t>
        <t>When a client deletes a topic-data, the topic is placed into the HALF CREATED state, where clients can read, update and delete the topic-configuration and await for a publisher to begin publication.</t>
      </section>
      <section anchor="topic-data-interactions">
        <name>Topic-Data Interactions</name>
        <t>Interactions with the topic-data resource are covered in this section.</t>
        <section anchor="publish">
          <name>Publish</name>
          <t>A topic-configuration with a topic-data resource must have been created in order to publish data to it (See <xref target="topic-create"/>) and be in the half-created or fully-created state in order to the publish operation to work (see <xref target="topic-lifecycle"/>).</t>
          <t>A client can publish data to a topic by submitting the data in a PUT request to the topic-data URI as indicated in its topic resource property. Please note that the topic-data URI is not the same as the topic-configuration URI used for configuring the topic (see <xref target="topic-resource-representation"/>).</t>
          <t>On success, the broker returns a 2.04 (Changed) response. However, when data is published to the topic for the first time, the broker instead <bcp14>MUST</bcp14> return a 2.01 (Created) response and set the topic in the fully-created state (see <xref target="topic-lifecycle"/>).</t>
          <t>If the request does not have an acceptable content-format, the broker returns a 4.15 (Unsupported Content-Format) response.</t>
          <t>If the client is sending publications too fast, the broker returns a
4.29 (Too Many Requests) response <xref target="RFC8516"/>.</t>
          <t>Example of first publication:</t>
          <artwork><![CDATA[
   Request:

   Header: PUT (Code=0.03)
   Uri-Path: "ps"
   Uri-Path: "data"
   Uri-Path: "1bd0d6d"
   Content-Format: 110
   Payload:
   {
      "n": "coap://dev1.example.com/temperature",
      "u": "Cel",
      "t": 1621452122,
      "v": 23.5
   }

   Response:

   Header: Created (Code=2.01)
]]></artwork>
          <t>Example of subsequent publication:</t>
          <artwork><![CDATA[
   Request:

   Header: PUT (Code=0.03)
   Uri-Path: "ps"
   Uri-Path: "data"
   Uri-Path: "1bd0d6d"
   Content-Format: 110
   Payload:
   {
      "n": "coap://dev1.example.com/temperature",
      "u": "Cel",
      "t": 1621452149,
      "v": 22.5
   }

   Response:

   Header: Changed (Code=2.04)
]]></artwork>
        </section>
        <section anchor="subscribe">
          <name>Subscribe</name>
          <t>A client can subscribe to a topic-data by sending a CoAP GET request with the CoAP Observe Option set to 0 to subscribe to resource updates <xref target="RFC7641"/>.</t>
          <t>On success, the server hosting the topic-data resource <bcp14>MUST</bcp14> return 2.05 (Content) notifications with the data and the Observe Option. Otherwise, if no Observe Option is present the client should assume that the subscription was not successful.</t>
          <t>If the topic is not yet in the fully created state (see <xref target="topic-lifecycle"/>) the broker <bcp14>MUST</bcp14> return a response code 4.04 (Not Found).</t>
          <t>The following response codes are defined for the Subscribe operation:</t>
          <dl>
            <dt>Success:</dt>
            <dd>
              <t>2.05 "Content". Successful subscribe with observe response, current value included in the response.</t>
            </dd>
            <dt>Failure:</dt>
            <dd>
              <t>4.04 "Not Found". The topic-data does not exist.</t>
            </dd>
          </dl>
          <t>If the 'max-subscribers' parameter has been reached, the broker must treat that as specified in <xref section="4.1" sectionFormat="of" target="RFC7641"/>. The response <bcp14>MUST NOT</bcp14> include an Observe Option, the absence of which signals to the subscriber that the subscription failed.</t>
          <t>Example of a successful subscription followed by one update:</t>
          <artwork><![CDATA[
   Request:

   Header: GET (Code=0.01)
   Uri-Path: "ps"
   Uri-Path: "data"
   Uri-Path: "1bd0d6d"
   Observe: 0

   Response:

   Header: Content (Code=2.05)
   Content-Format: 110
   Observe: 10001
   Max-Age: 15
   Payload:
   {
      "n": "urn:dev:os:32473-123456",
      "u": "Cel",
      "t": 1696341182,
      "v": 19.87
   }

   Response:

   Header: Content (Code=2.05)
   Content-Format: 110
   Observe: 10002
   Max-Age: 15
   Payload:
   {
      "n": "urn:dev:os:32473-123456",
      "u": "Cel",
      "t": 1696340184,
      "v": 21.87
   }
]]></artwork>
        </section>
        <section anchor="unsubscribe">
          <name>Unsubscribe</name>
          <t>A CoAP client can unsubscribe simply by canceling the observation as described in <xref section="3.6" sectionFormat="of" target="RFC7641"/>. The client <bcp14>MUST</bcp14> either use CoAP GET with the Observe Option set to 1 or send a CoAP Reset message in response to a notification. Also on <xref section="3.6" sectionFormat="of" target="RFC7641"/> the client can simply "forget" the observation and the broker will remove it from the list of observers after the next notification.</t>
          <t>As per <xref target="RFC7641"/> a server that transmits notifications mostly in non-confirmable messages, but it <bcp14>MUST</bcp14> send a notification in a confirmable message instead of a non-confirmable message at least every 24 hours.</t>
          <t>This value can be modified at the broker by the administrator of a topic by modifying the parameter "observer-check" on <xref target="topic-resource-representation"/>. This would allow changing the rate at which different implementations verify that a subscriber is still interested in observing a topic-data resource.</t>
        </section>
        <section anchor="delete-topic-data">
          <name>Delete topic-data</name>
          <t>A publisher <bcp14>MAY</bcp14> delete a topic by making a CoAP DELETE request on the topic-data URI.</t>
          <t>On success, the broker returns a 2.02 (Deleted) response.</t>
          <t>When a topic-data resource is deleted, the broker <bcp14>MUST</bcp14> also delete the topic-data parameter in the topic resource, unsubscribe all subscribers by removing them from the list of observers and return a final 4.04 (Not Found) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>. The topic is then set back to the half created state as per <xref target="topic-lifecycle"/>.</t>
          <t>Example of a successful deletion:</t>
          <artwork><![CDATA[
   Request:

   Header: DELETE (Code=0.04)
   Uri-Path: "ps"
   Uri-Path: "data"
   Uri-Path: "1bd0d6d"

   Response:

   Header: Deleted (Code=2.02)
]]></artwork>
        </section>
      </section>
      <section anchor="read-data">
        <name>Read the latest data</name>
        <t>A client can get the latest published topic-data by making a GET request to the topic-data URI in the broker. Please note that discovery of the topic-data parameter is a required previous step (see <xref target="topic-get-resource"/>).</t>
        <t>On success, the server <bcp14>MUST</bcp14> return 2.05 (Content) response with the data.</t>
        <t>If the target URI does not match an existing resource or the topic is not in the fully created state (see <xref target="topic-lifecycle"/>), the broker <bcp14>MUST</bcp14> return a response code 4.04 (Not Found).</t>
        <t>Example:</t>
        <artwork><![CDATA[
   Request:

   Header: GET (Code=0.01)
   Uri-Path: "ps"
   Uri-Path: "data"
   Uri-Path: "1bd0d6d"

   Response:

   Header: Content (Code=2.05)
   Content-Format: 110
   Max-Age: 15
   Payload:
   {
      "n": "coap://dev1.example.com/temperature",
      "u": "Cel",
      "t": 1621452122,
      "v": 23.5
   }
]]></artwork>
      </section>
      <section anchor="rate-limit">
        <name>Rate Limiting</name>
        <t>The server hosting the topic-data may have to handle a potentially large number of publishers and subscribers at the same time. This means it could become overwhelmed if it receives too many publications in a short period of time.</t>
        <t>In this situation, if a publisher is sending publications too fast, the server <bcp14>SHOULD</bcp14> return a 4.29 (Too Many Requests) response <xref target="RFC8516"/>.  As described in <xref target="RFC8516"/>, the Max-Age option <xref target="RFC7252"/> in this response indicates the number of seconds after which the client may retry. The broker <bcp14>MAY</bcp14> also stop publishing messages from that publisher for the indicated time.</t>
        <t>When a publisher receives a 4.29 (Too Many Requests) response, it <bcp14>MUST NOT</bcp14> send any new publication requests to the same topic-data resource before the time indicated by the Max-Age option has passed.</t>
      </section>
    </section>
    <section anchor="pubsub-parameters">
      <name>CoAP Pubsub Parameters</name>
      <t>This document defines parameters used in the messages exchanged between a client and the broker during the topic creation and configuration process (see <xref target="topic-resource-representation"/>). The table below summarizes them and specifies the CBOR key to use instead of the full descriptive name.</t>
      <t>Note that the media type application/core-pubsub+cbor <bcp14>MUST</bcp14> be used when these parameters are transported in the respective message fields.</t>
      <figure anchor="fig-CoAP-Pubsub-Parameters">
        <name>CoAP Pubsub Parameters</name>
        <artwork align="center"><![CDATA[
+----------------------+----------+-----------+------------+
| Name                 | CBOR Key | CBOR Type | Reference  |
| -------------------- | -------- | --------- | ---------- |
| topic-name           | 0        | tstr      | [RFC-XXXX] |
| topic-data           | 1        | tstr      | [RFC-XXXX] |
| resource-type        | 2        | tstr      | [RFC-XXXX] |
| topic-content-format | 3        | uint      | [RFC-XXXX] |
| topic-type           | 4        | tstr      | [RFC-XXXX] |
| expiration-date      | 5        | tstr      | [RFC-XXXX] |
| max-subscribers      | 6        | uint      | [RFC-XXXX] |
| observer-check       | 7        | uint      | [RFC-XXXX] |
| topic-history        | 8        | uint      | [RFC-XXXX] |
| initialize           | 9        | bool      | [RFC-XXXX] |
| conf-filter          | 10       | array     | [RFC-XXXX] |
+----------------------+----------+-----------+------------+
]]></artwork>
      </figure>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>The architecture presented in this document inherits the security considerations from CoAP <xref target="RFC7252"/> and Observe <xref target="RFC7641"/>, as well as from Web Linking <xref target="RFC8288"/>, Link-Format <xref target="RFC6690"/>, and the CoRE Resource Directory <xref target="RFC9176"/>.</t>
      <t>Communications between each client and the broker are <bcp14>RECOMMENDED</bcp14> to be secured, e.g., by using OSCORE <xref target="RFC8613"/> or DTLS <xref target="RFC9147"/>. Security considerations for the used secure communication protocols apply too.</t>
      <t>The content published on a topic by a publisher client <bcp14>SHOULD</bcp14> be protected end-to-end between the publisher and all the subscribers to that topic. In such a case, it <bcp14>MUST</bcp14> be possible to assert source authentication of the published data. This can be achieved at the application layer, e.g., by using COSE <xref target="STD96"/>, <xref target="RFC9053"/>.</t>
      <t>Access control of clients at the broker <bcp14>MAY</bcp14> be enforced for performing discovery operation, and <bcp14>SHOULD</bcp14> be enforced in a fine-grained fashion for operations related to the creation, update, and deletion of topic resources, as well as for operations on topic-data resources such as publication on and subscription to topics. This prevents rogue clients to, among other things, repeatedly create topics at the broker or publish (large) contents, which may result in Denial of Service against the broker and the active subscribers.</t>
      <t>Building on <xref target="RFC9594"/>, its application profile for publish-subscribe communication with CoAP <xref target="I-D.ietf-ace-pubsub-profile"/> provides a security model that can be used in the architecture presented in this document, in order to enable secure communication between the different parties as well as secure, authorized operations of publishers and subscribers that fulfill the requirements above.</t>
      <t>In particular, the application profile above relies on the ACE framework for Authentication and Authorization in Constrained Environments (ACE) <xref target="RFC9200"/> and defines a method to: authorize publishers and subscribers to perform operations at the broker, with fine-grained access control; authorize publishers and subscribers to obtain the keying material required to take part to a topic managed by the broker; protect published data end-to-end between its publisher and all the subscribers to the targeted topic, ensuring confidentiality, integrity, and source authentication of the published content end-to-end. That approach can be extended to enforce authorization and fine-grained access control for administrator clients that are intended to create, update, and delete topic-configurations at the broker.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <!-- To be registerd in IANA:
media type: application/core-pubsub+cbor
content format/type: application/core-pubsub+cbor
subregistry for the topic config
-->

<t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "[RFC-XXXX]" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="media-type">
        <name>Media Type Registrations</name>
        <t>This specification registers the 'application/core-pubsub+cbor' media type for messages of the protocols defined in this document and carrying parameters encoded in CBOR. This registration follows the procedures specified in <xref target="BCP13"/>.</t>
        <artwork><![CDATA[
  Type name: application

  Subtype name: core-pubsub+cbor

  Required parameters: N/A

  Optional parameters: N/A

  Encoding considerations: Must be encoded as a CBOR map containing the parameters defined in {{&SELF}}.

  Security considerations: See {{sec-cons}} of {{&SELF}}.

  Interoperability considerations: none

  Published specification: {{&SELF}}

  Applications that use this media type:  This type is used by clients that create, retrieve, and update topic-configurations at servers acting as a broker.

  Fragment identifier considerations: N/A

  Additional information: N/A

  Person & email address to contact for further information: CoRE WG mailing list (core@ietf.org),
  or IETF Web and Internet Transport (WIT) Area (wit@ietf.org)

  Intended usage: COMMON

  Restrictions on usage: none

  Author/Change controller: IETF

  Provisional registration: no
]]></artwork>
      </section>
      <section anchor="content-type">
        <name>CoAP Content-Formats</name>
        <t>IANA is asked to register the following entry to the "CoAP Content-Formats" registry within the "CoRE Parameters" registry group.</t>
        <t>Content Type: application/core-pubsub+cbor</t>
        <t>Content Coding: -</t>
        <t>ID: TBD606</t>
        <t>Reference: [RFC-XXXX]</t>
      </section>
      <section anchor="iana-rt">
        <name>Resource Types</name>
        <t>IANA is asked to enter the following values in the "Resource Type (rt=) Link Target Attribute Values" registry within the "Constrained Restful Environments (CoRE) Parameters" registry group.</t>
        <artwork><![CDATA[
Value: core.ps
Description: Publish-Subscribe Broker
Reference: [RFC-XXXX]

Value: core.ps.coll
Description: Topic-collection resource of a Publish-Subscribe Broker
Reference: [RFC-XXXX]

Value: core.ps.conf
Description: Topic-configuration resource of a Publish-Subscribe Broker
Reference: [RFC-XXXX]

Value: core.ps.data
Description: Topic-data resource of a broker
Reference: [RFC-XXXX]
]]></artwork>
      </section>
      <section anchor="iana-coap-pubsub-parameters">
        <name>CoAP Pubsub Parameters</name>
        <t>This specification establishes the "CoAP Pubsub topic-configuration Parameters" IANA registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <t>The registration policy is either "Private Use", "Standards Action with Expert Review", or "Specification Required" or "Expert Review" per <xref target="BCP26"/>. "Expert Review" guidelines are provided in <xref target="review"/>.</t>
        <t>All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per Section <xref target="RFC8126" section="4.9" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/> with "Expert Review" additionally required per Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>. The procedure for early IANA allocation of "standards track code points" defined in <xref target="BCP100"/> also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, working group chairs are encouraged to consult the expert(s) early during the process outlined in Section <xref target="RFC7120" section="3.1" sectionFormat="bare"/> of RFC 7120 <xref target="BCP100"/>.</t>
        <t>The columns of this registry are:</t>
        <ul spacing="normal">
          <li>
            <t>Name: This is a descriptive name that enables easier reference to the item. The name <bcp14>MUST</bcp14> be unique. It is not used in the encoding.</t>
          </li>
          <li>
            <t>CBOR Key: This is the value used as the CBOR key of the item. These values <bcp14>MUST</bcp14> be unique. The value can be a positive integer, a negative integer, or a text string. Different ranges of values use different registration policies <xref target="BCP26"/>. Integer values from -256 to 255 as well as text strings of length 1 are designated as "Standards Action With Expert Review". Integer values from -65536 to -257 and from 256 to 65535, as well as text strings of length 2 are designated as "Specification Required". Integer values greater than 65535 as well as text strings of length greater than 2 are designated as "Expert Review". Integer values less than -65536 are marked as "Private Use".</t>
          </li>
          <li>
            <t>CBOR Type: This contains the CBOR type of the item, or a pointer to the registry that defines its type, when that depends on another item.</t>
          </li>
          <li>
            <t>Reference: This contains a pointer to the public specification for the item.</t>
          </li>
        </ul>
        <t>This registry has been initially populated with the values in <xref target="fig-CoAP-Pubsub-Parameters"/>.</t>
      </section>
      <section anchor="review">
        <name>Expert Review Instructions</name>
        <t>The registration policy for the IANA registry established in  <xref target="iana-coap-pubsub-parameters"/> is defined as "Expert Review". This section gives some general guidelines for what the experts should be looking for; however, they are being designated as experts for a reason, so they should be given substantial latitude.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <t>The registration policy for the IANA registry established in  <xref target="iana-coap-pubsub-parameters"/> is defined as one of "Standards Action with Expert Review", "Specification Required", and "Expert Review". This section gives some general guidelines for what the experts should be looking for; however, they are being designated as experts for a reason, so they should be given substantial latitude.</t>
        <t>These registration policies are designed to accommodate different use cases; “Standards Action with Expert Review” allows for further IETF standards and extensions, maintaining consistency and alignment with established protocols; “Specification Required” allows third-party specifications from Standards Development Organizations (SDOs) to register parameters, enabling interoperability and broader applicability; and “Expert Review” provides a flexible mechanism for exposing new parameters that implementors do not want to keep in a private range.</t>
        <t>Expert reviewers should take into consideration the following points:</t>
        <ul spacing="normal">
          <li>
            <t>Clarity and correctness of registrations. Experts are expected to check the clarity of purpose and use of the requested entries. Experts need to make sure that registered parameters are clearly defined in the corresponding specification. Parameters that do not meet these objectives of clarity and completeness must not be registered.</t>
          </li>
          <li>
            <t>Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered and that the point is likely to be used in deployments. The zones tagged as "Private Use" are intended for testing purposes and closed environments. Code points in other ranges should not be assigned for testing.</t>
          </li>
          <li>
            <t>Specifications are required for the "Standards Action With Expert Review" range of point assignment. Specifications should exist for "Specification Required" ranges, but early assignment before a specification is available is considered to be permissible. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.</t>
          </li>
          <li>
            <t>Experts should take into account the expected usage of fields when approving point assignment. Documents published via Standards Action can also register points outside the Standards Action range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="RFC6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links. Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type. "RESTful" refers to the Representational State Transfer (REST) architecture. A well-known URI is defined as a default entry point for requesting the links hosted by a server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <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="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="RFC8516">
          <front>
            <title>"Too Many Requests" Response Code for the Constrained Application Protocol</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <date month="January" year="2019"/>
            <abstract>
              <t>A Constrained Application Protocol (CoAP) server can experience temporary overload because one or more clients are sending requests to the server at a higher rate than the server is capable or willing to handle. This document defines a new CoAP response code for a server to indicate that a client should reduce the rate of requests.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8516"/>
          <seriesInfo name="DOI" value="10.17487/RFC8516"/>
        </reference>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <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>
        </referencegroup>
        <reference anchor="RFC9176">
          <front>
            <title>Constrained RESTful Environments (CoRE) Resource Directory</title>
            <author fullname="C. Amsüss" initials="C." role="editor" surname="Amsüss"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="M. Koster" initials="M." surname="Koster"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>In many Internet of Things (IoT) applications, direct discovery of resources is not practical due to sleeping nodes or networks where multicast traffic is inefficient. These problems can be solved by employing an entity called a Resource Directory (RD), which contains information about resources held on other servers, allowing lookups to be performed for those resources. The input to an RD is composed of links, and the output is composed of links constructed from the information stored in the RD. This document specifies the web interfaces that an RD supports for web servers to discover the RD and to register, maintain, look up, and remove information on resources. Furthermore, new target attributes useful in conjunction with an RD are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9176"/>
          <seriesInfo name="DOI" value="10.17487/RFC9176"/>
        </reference>
        <reference anchor="RFC7641">
          <front>
            <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks. The state of a resource on a CoAP server can change over time. This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time. The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7641"/>
          <seriesInfo name="DOI" value="10.17487/RFC7641"/>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <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"/>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <author fullname="T. Narten" initials="T." surname="Narten"/>
              <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>
        </referencegroup>
        <referencegroup anchor="BCP13" target="https://www.rfc-editor.org/info/bcp13">
          <reference anchor="RFC4289" target="https://www.rfc-editor.org/info/rfc4289">
            <front>
              <title>Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures</title>
              <author fullname="N. Freed" initials="N." surname="Freed"/>
              <author fullname="J. Klensin" initials="J." surname="Klensin"/>
              <date month="December" year="2005"/>
              <abstract>
                <t>This document specifies IANA registration procedures for MIME external body access types and content-transfer-encodings. 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="13"/>
            <seriesInfo name="RFC" value="4289"/>
            <seriesInfo name="DOI" value="10.17487/RFC4289"/>
          </reference>
          <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838">
            <front>
              <title>Media Type Specifications and Registration Procedures</title>
              <author fullname="N. Freed" initials="N." surname="Freed"/>
              <author fullname="J. Klensin" initials="J." surname="Klensin"/>
              <author fullname="T. Hansen" initials="T." surname="Hansen"/>
              <date month="January" year="2013"/>
              <abstract>
                <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="13"/>
            <seriesInfo name="RFC" value="6838"/>
            <seriesInfo name="DOI" value="10.17487/RFC6838"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="BCP100" target="https://www.rfc-editor.org/info/bcp100">
          <reference anchor="RFC7120" target="https://www.rfc-editor.org/info/rfc7120">
            <front>
              <title>Early IANA Allocation of Standards Track Code Points</title>
              <author fullname="M. Cotton" initials="M." surname="Cotton"/>
              <date month="January" year="2014"/>
              <abstract>
                <t>This memo describes the process for early allocation of code points by IANA from registries for which "Specification Required", "RFC Required", "IETF Review", or "Standards Action" policies apply. This process can be used to alleviate the problem where code point allocation is needed to facilitate desired or required implementation and deployment experience prior to publication of an RFC, which would normally trigger code point allocation. The procedures in this document are intended to apply only to IETF Stream documents.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="100"/>
            <seriesInfo name="RFC" value="7120"/>
            <seriesInfo name="DOI" value="10.17487/RFC7120"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <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"/>
              <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"/>
              <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>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8613">
          <front>
            <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="J. Mattsson" initials="J." surname="Mattsson"/>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE). OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
              <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration. Therefore, this document updates RFC 7252.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8613"/>
          <seriesInfo name="DOI" value="10.17487/RFC8613"/>
        </reference>
        <referencegroup anchor="STD96" target="https://www.rfc-editor.org/info/std96">
          <reference anchor="RFC9052" target="https://www.rfc-editor.org/info/rfc9052">
            <front>
              <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
              <author fullname="J. Schaad" initials="J." surname="Schaad"/>
              <date month="August" year="2022"/>
              <abstract>
                <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
                <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="96"/>
            <seriesInfo name="RFC" value="9052"/>
            <seriesInfo name="DOI" value="10.17487/RFC9052"/>
          </reference>
          <reference anchor="RFC9338" target="https://www.rfc-editor.org/info/rfc9338">
            <front>
              <title>CBOR Object Signing and Encryption (COSE): Countersignatures</title>
              <author fullname="J. Schaad" initials="J." surname="Schaad"/>
              <date month="December" year="2022"/>
              <abstract>
                <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. CBOR Object Signing and Encryption (COSE) defines a set of security services for CBOR. This document defines a countersignature algorithm along with the needed header parameters and CBOR tags for COSE. This document updates RFC 9052.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="96"/>
            <seriesInfo name="RFC" value="9338"/>
            <seriesInfo name="DOI" value="10.17487/RFC9338"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC9200">
          <front>
            <title>Authentication and Authorization for Constrained Environments Using the OAuth 2.0 Framework (ACE-OAuth)</title>
            <author fullname="L. Seitz" initials="L." surname="Seitz"/>
            <author fullname="G. Selander" initials="G." surname="Selander"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for authentication and authorization in Internet of Things (IoT) environments called ACE-OAuth. The framework is based on a set of building blocks including OAuth 2.0 and the Constrained Application Protocol (CoAP), thus transforming a well-known and widely used authorization solution into a form suitable for IoT devices. Existing specifications are used where possible, but extensions are added and profiles are defined to better serve the IoT use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9200"/>
          <seriesInfo name="DOI" value="10.17487/RFC9200"/>
        </reference>
        <reference anchor="RFC9594">
          <front>
            <title>Key Provisioning for Group Communication Using Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="F. Palombini" initials="F." surname="Palombini"/>
            <author fullname="M. Tiloca" initials="M." surname="Tiloca"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document defines how to use the Authentication and Authorization for Constrained Environments (ACE) framework to distribute keying material and configuration parameters for secure group communication. Candidate group members that act as Clients and are authorized to join a group can do so by interacting with a Key Distribution Center (KDC) acting as the Resource Server, from which they obtain the keying material to communicate with other group members. While defining general message formats as well as the interface and operations available at the KDC, this document supports different approaches and protocols for secure group communication. Therefore, details are delegated to separate application profiles of this document as specialized instances that target a particular group communication approach and define how communications in the group are protected. Compliance requirements for such application profiles are also specified.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9594"/>
          <seriesInfo name="DOI" value="10.17487/RFC9594"/>
        </reference>
        <reference anchor="I-D.hartke-t2trg-coral-pubsub">
          <front>
            <title>Publish/Subscribe over the Constrained Application Protocol (CoAP) using the Constrained RESTful Application Language (CoRAL)</title>
            <author fullname="Klaus Hartke" initials="K." surname="Hartke">
              <organization>Ericsson</organization>
            </author>
            <date day="9" month="May" year="2020"/>
            <abstract>
              <t>   This document explores how the Constrained RESTful Application
   Language (CoRAL) might be used for enabling publish/subscribe-style
   communication over the Constrained Application Protocol (CoAP), which
   allows CoAP nodes with long breaks in connectivity and/or up-time to
   exchange data via a publish/subscribe broker.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hartke-t2trg-coral-pubsub-01"/>
        </reference>
        <reference anchor="I-D.ietf-ace-oscore-gm-admin">
          <front>
            <title>Admin Interface for the OSCORE Group Manager</title>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Rikard Höglund" initials="R." surname="Höglund">
              <organization>RISE AB</organization>
            </author>
            <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
         </author>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson AB</organization>
            </author>
            <date day="8" month="January" year="2025"/>
            <abstract>
              <t>   Group communication for CoAP can be secured using Group Object
   Security for Constrained RESTful Environments (Group OSCORE).  A
   Group Manager is responsible for handling the joining of new group
   members, as well as managing and distributing the group keying
   material.  This document defines a RESTful admin interface at the
   Group Manager that allows an Administrator entity to create and
   delete OSCORE groups, as well as to retrieve and update their
   configuration.  The ACE framework for Authentication and
   Authorization is used to enforce authentication and authorization of
   the Administrator at the Group Manager.  Protocol-specific transport
   profiles of ACE are used to achieve communication security, proof-of-
   possession, and server authentication.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-gm-admin-13"/>
        </reference>
        <reference anchor="I-D.ietf-ace-pubsub-profile">
          <front>
            <title>Publish-Subscribe Profile for Authentication and Authorization for Constrained Environments (ACE)</title>
            <author fullname="Francesca Palombini" initials="F." surname="Palombini">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Cigdem Sengul" initials="C." surname="Sengul">
              <organization>Brunel University</organization>
            </author>
            <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
              <organization>RISE AB</organization>
            </author>
            <date day="7" month="January" year="2025"/>
            <abstract>
              <t>   This document defines an application profile of the Authentication
   and Authorization for Constrained Environments (ACE) framework, to
   enable secure group communication in the Publish-Subscribe (Pub-Sub)
   architecture for the Constrained Application Protocol (CoAP) [draft-
   ietf-core-coap-pubsub], where Publishers and Subscribers communicate
   through a Broker.  This profile relies on protocol-specific transport
   profiles of ACE to achieve communication security, server
   authentication, and proof-of-possession for a key owned by the Client
   and bound to an OAuth 2.0 access token.  This document specifies the
   provisioning and enforcement of authorization information for Clients
   to act as Publishers and/or Subscribers, as well as the provisioning
   of keying material and security parameters that Clients use for
   protecting their communications end-to-end through the Broker.

   Note to RFC Editor: Please replace "[draft-ietf-core-coap-pubsub]"
   with the RFC number of that document and delete this paragraph.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ace-pubsub-profile-11"/>
        </reference>
        <reference anchor="I-D.ietf-core-interfaces">
          <front>
            <title>Reusable Interface Definitions for Constrained RESTful Environments</title>
            <author fullname="Zach Shelby" initials="Z." surname="Shelby">
              <organization>ARM</organization>
            </author>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>SmartThings</organization>
            </author>
            <author fullname="Christian Groves" initials="C." surname="Groves">
         </author>
            <author fullname="Jintao Zhu" initials="J." surname="Zhu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Bill Silverajan" initials="B." surname="Silverajan">
              <organization>Tampere University</organization>
            </author>
            <date day="11" month="March" year="2019"/>
            <abstract>
              <t>   This document defines a set of Constrained RESTful Environments
   (CoRE) Link Format Interface Descriptions [RFC6690] applicable for
   use in constrained environments.  These include the: Actuator,
   Parameter, Read-only parameter, Sensor, Batch, Linked Batch and Link
   List interfaces.

   The Batch, Linked Batch and Link List interfaces make use of resource
   collections.  This document further describes how collections relate
   to interfaces.

   Many applications require a set of interface descriptions in order
   provide the required functionality.  This document defines an
   Interface Description attribute value to describe resources
   conforming to a particular interface.

   Editor's notes:

   o  The git repository for the draft is found at https://github.com/
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-interfaces-14"/>
        </reference>
      </references>
    </references>
    <?line 1108?>

<section anchor="sec-document-updates" removeInRFC="true">
      <name>Document Updates</name>
      <section anchor="version-13-to-14">
        <name>Version -13 to -14</name>
        <ul spacing="normal">
          <li>
            <t>Section restructuring for better readability.</t>
          </li>
          <li>
            <t>Updated topic configuration interactions.</t>
          </li>
          <li>
            <t>Introduced iPATCH section.</t>
          </li>
          <li>
            <t>Various clarifications of default values for parameters.</t>
          </li>
          <li>
            <t>New examples for several interactions.</t>
          </li>
          <li>
            <t>Updated topic discovery section.</t>
          </li>
          <li>
            <t>Other editorial changes</t>
          </li>
        </ul>
      </section>
      <section anchor="version-14-to-15">
        <name>Version -14 to -15</name>
        <ul spacing="normal">
          <li>
            <t>Code bug fix https://github.com/jaimejim/aiocoap-pubsub-broker/commit/f32ce4866a81319238d6e905de439c9410cce175</t>
          </li>
          <li>
            <t>Added two new optional topic configuration parameters; ‘initialize,’ and ‘topic-history’.</t>
          </li>
          <li>
            <t>Modified all examples to conform to RFC9594.</t>
          </li>
          <li>
            <t>Added the explicit cancellation of ongoing subscriptions when topic configuration parameters are changed.</t>
          </li>
          <li>
            <t>Added editorial changes based on feedback.</t>
          </li>
          <li>
            <t>Clarifications on Topic Configuration creation.</t>
          </li>
          <li>
            <t>Other editorial changes</t>
          </li>
        </ul>
      </section>
      <section anchor="version-15-to-16">
        <name>Version -15 to -16</name>
        <ul spacing="normal">
          <li>
            <t>Various updates throughout the document based on AD review.</t>
          </li>
          <li>
            <t>IANA clarifications</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The current version of this document contains a substantial contribution by Klaus Hartke's proposal <xref target="I-D.hartke-t2trg-coral-pubsub"/>, which defines the topic resource model and structure as well as the topic lifecycle and interactions. It also follows a similar architectural design as that provided by Marco Tiloca's <xref target="I-D.ietf-ace-oscore-gm-admin"/>.</t>
      <t>The authors would like to also thank <contact fullname="Marco Tiloca"/>, <contact fullname="Francesca Palombini"/>, <contact fullname="Carsten Bormann"/>, <contact fullname="Hannes Tschofenig"/>, <contact fullname="Zach Shelby"/>, <contact fullname="Mohit Sethi"/>, Peter van der Stok, Tim Kellogg, Anders Eriksson, <contact fullname="Goran Selander"/>, Mikko Majanen, <contact fullname="Olaf Bergmann"/>, <contact fullname="David Navarro"/>, Oscar Novo and Lorenzo Corneo for their valuable contributions and reviews.</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="M." surname="Tiloca" fullname="Marco Tiloca">
        <organization>RISE AB</organization>
        <address>
          <email>marco.tiloca@ri.se</email>
        </address>
      </contact>
      <t>Marco offered comprehensive reviews and insightful guidance on the recent iterations of this document. His contributions were particularly notable in the Security Considerations section, among others.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
