<?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.18 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-coap-pubsub-20" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <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-20"/>
    <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="2026" month="June" day="03"/>
    <area>Applications</area>
    <workgroup>CoRE Working Group</workgroup>
    <abstract>
      <?line 74?>

<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 78?>

<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.
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 (pubsub):</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 the dispatching of 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 relation (subscription) to a topic via CoAP Observe <xref target="RFC7641"/>. Both roles operate without any mutual knowledge, guided by their respective topic interests.</t>
          </dd>
          <dt>topic collection:</dt>
          <dd>
            <t>A topic collection is hosted as one collection resource at the broker. A collection resource is a resource that contains links to other resources that a client can add or remove; that concept is described more generally in <xref section="3.1" sectionFormat="of" target="I-D.ietf-core-interfaces"/>.</t>
          </dd>
          <dt>topic:</dt>
          <dd>
            <t>A set of information about an entity at the broker, including its configuration and other metadata. A topic is hosted as one topic resource at the broker, whose representation is the set of topic properties concerning the topic. All the topic resources associated with the same topic collection share a common base URI, i.e., the URI of the topic collection resource.</t>
          </dd>
          <dt>topic property:</dt>
          <dd>
            <t>A single element of configuration information that is associated with a topic.</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 component that hosts one or more topic collections with their topics, and typically 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 based on CoAP.</t>
        <t>The broker can create its hosted topics and set their initial configurations. Alternatively, topics can be created together with their initial configuration by a client (e.g., a publisher or a dedicated administrator), over the RESTful interface of the topic collection resource hosted by the broker.</t>
        <t>The broker is responsible for the store-and-forward of state update representations between CoAP clients. Publishers submit their data over the RESTful interface of a topic-data resource corresponding to the topic, which can be hosted at the broker. Subscribers to a topic are notified of new publications by using Observe <xref target="RFC7641"/> on the corresponding topic-data resource.</t>
        <figure anchor="fig-arch">
          <name>Publish-subscribe architecture based on 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>Note that CoAP clients that merely interact with topic configuration but not with topic data (e.g., a dedicated administrator) are not depicted in <xref target="fig-arch"/>.</t>
        <t>This document describes two sets of interactions; interactions to configure topics and their lifecycle (see <xref target="topic-create"/> and <xref target="topic-configuration-interactions"/>) and interactions about the topic-data (see <xref target="topic-data-interactions"/>).</t>
        <t>Topic interactions are: discovery, create, read configuration, update configuration, and delete configuration. These operations concern the management of the topics.</t>
        <t>The 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-rt"/> of this document. The interface 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". Other child resource types are currently not defined for a topic collection resource.</t>
      </section>
    </section>
    <section anchor="topics">
      <name>PubSub Topics</name>
      <t>The broker hosts 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 contains a set of properties for configuration, one of which is the URI of the topic-data resource. The topic resource is used by a client for creating or administering a topic. The topic-data resource is used by the publishers and the subscribers to share the data values.</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="100" y="164">resource</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="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  : \___  :  : \___  :       : \___  :
          resource  : / * \ :  : / * \ :       : / * \ :
                    : \_|_/ :  : \_|_/ :       : \_|_/ :
                    ....|....  ....|....       ....|....
                    ....|....  ....|....       ....|....
                    :  _|_  :  :  _|_  :  ...  :  _|_  :
        topic-data  : /   \ :  : /   \ :       : /   \ :
          resource  : \___/ :  : \___/ :       : \___/ :
                    :.......:  :.......:       :.......:
                   \_________/\_________/ ... \_________/
                     topic 1    topic 2         topic n
]]></artwork>
        </artset>
      </figure>
      <section anchor="collection-representation">
        <name>Collection Representation</name>
        <t>Each topic 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 the target of a link, which is the URI of the corresponding topic-data resource. Such a link is specified by the "topic-data" topic property within the topic resource (see <xref target="topic-properties"/>).</t>
        <t>A topic resource 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, represented as a CoRE Link Format document <xref target="RFC6690"/> where each link targets a topic resource of type "core.ps.conf" as defined in this document.</t>
      </section>
      <section anchor="topic-resource-representation">
        <name>Topic 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 topic properties that can be set by a client or by the broker. The topic is represented as a CBOR map containing the topic properties as top-level elements.</t>
        <t>Unless specified otherwise, all topic properties 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 topic properties, whose CBOR abbreviations are defined in <xref target="pubsub-parameters"/>.</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. The "topic-name" is required at topic creation to enable the broker to detect duplicate creation requests and to provide a stable application-level identifier. Applications that do not require human-readable names <bcp14>MAY</bcp14> use automatically generated values such as UUIDs.</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 reference as a CBOR text string. The URI can be that of a resource on a different address than that of the broker; implementations <bcp14>MUST NOT</bcp14> assume that the topic-data resource is co-located with the broker. If a URI is not provided when creating the topic, the choice of the URI for the topic-data resource is left to the broker.</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. According to this document, the value is "core.ps.data". Other specifications or deployments <bcp14>MAY</bcp14> define and use alternative resource type values for the topic-data resource.</t>
            </li>
            <li>
              <t>"topic-content-format": This optional field specifies the canonical CoAP Content-Format identifier of the topic-data resource representation as an unsigned integer, 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 tag 1 (epoch-based date/time) as defined in Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, representing the number of seconds since 1970-01-01T00:00Z in UTC time. If this field is not present, the topic will not expire automatically. When "expiration-date" is reached, the topic resource is deleted as described in <xref target="topic-delete"/>.</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 a CBOR unsigned integer. If this field is not present, then there is no limit to the number of simultaneous subscribers allowed. At topic creation or update, this field is a hint from the topic creator; the broker <bcp14>MAY</bcp14> store a different value than the one requested. Once stored, the value is enforced: if the limit is reached, new subscriptions are handled as specified in <xref section="4.1" sectionFormat="of" target="RFC7641"/>.</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 that subscribers that 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>"initialize": An optional field encoded as a CBOR byte string that contains the initial representation to pre-populate the topic-data resource. When present, the broker <bcp14>MUST</bcp14> create the topic and initialize the topic-data resource with this representation using the Content-Format specified in "topic-content-format". This allows the topic to be immediately subscribable without encountering a <tt>4.04 Not Found</tt> error. The representation <bcp14>MUST</bcp14> be valid for the specified Content-Format. For example, for CBOR-based formats, the empty CBOR array encoded as <tt>0x80</tt> is a valid empty representation, which corresponds to the "initialize" property set to <tt>0x4180</tt> (<tt>&lt;&lt;[]&gt;&gt;</tt> in CBOR diagnostic notation). If this field is not present, the broker behaves as usual, and the topic-data resource is not initialized. When this field is present, "topic-content-format" <bcp14>MUST</bcp14> also be specified.</t>
            </li>
          </ul>
          <t>The "resource-type" field carries a single value pertaining to the publish-subscribe functionality of the topic-data resource. The topic-data resource itself <bcp14>MAY</bcp14> have additional resource types visible in Link-Format discovery <xref target="RFC6690"/>, but those are not represented in this field.</t>
        </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.
Any server implementing a pubsub broker <bcp14>MUST</bcp14> support CoAP discovery with a query parameter as defined in <xref section="4.1" sectionFormat="of" target="RFC6690"/> and as used in the examples in this section.</t>
        <t>The CoRE Link Format discovery responses shown in the examples in this section are illustrative only.
The normative requirements for this format are defined in <xref target="RFC6690"/>.
The examples make minimal use of CoRE Link Format attributes, in order to reduce the size of discovery responses: this is beneficial for clients connected to constrained networks.
In general, a broker <bcp14>MAY</bcp14> include any CoRE Link Format attributes in each returned link, for example to meet specific use case requirements.</t>
        <section anchor="broker-discovery">
          <name>Broker Discovery</name>
          <t>CoAP clients <bcp14>MAY</bcp14> discover brokers by using CoAP discovery <xref target="RFC7252"/>, 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 an 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:
   <coaps://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 (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 CoRE 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",
   </other/path>;rt="core.ps.coll"
]]></artwork>
          <t>Note that in this example the "ct" attribute is not included for the two collections in the returned CoRE Link Format document.
This is because the "ct" attribute is an optional hint, which is not needed in this case: the Content-format of each topic collection resource is implied by its resource type (rt="core.ps.coll") to be 40 ("application/link-format").</t>
        </section>
        <section anchor="topic-discovery">
          <name>Topic Discovery</name>
          <t>A broker <bcp14>MAY</bcp14> offer topic resources via /.well-known/core. 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 query 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",
   </other/path/2e3570>;rt="core.ps.conf"
]]></artwork>
          <t>In certain scenarios, the method described herein may not be applicable, particularly when the server restricts topic availability to authenticated clients only. In such cases, it is recommended to utilize the procedure outlined in <xref target="topic-get-all"/> and <xref target="topic-get-properties"/> for topic discovery.</t>
        </section>
        <section anchor="topic-data-discovery">
          <name>Topic-Data Discovery</name>
          <t>Within a topic, there is the "topic-data" topic property that contains the URI of the topic-data resource used for publishing and subscribing. So retrieving the topic will also provide the URL of the topic-data resource (see <xref target="topic-get-resource"/>).</t>
          <t>According to this specification, the topic-data resources use the resource type "core.ps.data". Other specifications or deployments <bcp14>MAY</bcp14> use alternative resource type values (see <xref target="topic-properties"/>). It is also possible to discover a list of topic-data resources, by sending a request to the collection resource with a query parameter rt=core.ps.data as shown in the example below. Every topic collection resource <bcp14>MUST</bcp14> support this query.</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>
]]></artwork>
          <t>Note that the "rt" attribute is not included in the returned link in the example response.
This is because the query in the request already constrains all links in the response to be only of type "core.ps.data".
Therefore, including the "rt" attribute for each returned link would be unnecessary and would make the response size much larger.
So the broker, in this example case, was implemented to elide these attributes always, to minimize the size of discovery response payloads.</t>
        </section>
      </section>
      <section anchor="topic-collection-interactions">
        <name>Topic Collection Interactions</name>
        <t>Topic collection interactions are the interactions that can happen directly with a specific topic collection.</t>
        <t>The CoRE Link Format responses shown in the examples in this section are illustrative only.
The normative requirements for this format are defined in <xref target="RFC6690"/>.
The examples make minimal use of CoRE Link Format attributes, in order to reduce the size of responses: this is beneficial for clients connected to constrained networks.
In general, a broker <bcp14>MAY</bcp14> include any CoRE Link Format attributes in each returned link, for example to meet specific use case requirements.</t>
        <section anchor="topic-get-all">
          <name>Retrieving all topics</name>
          <t>A client can request a collection of the topics present in the broker by making a GET request to the topic 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. A broker <bcp14>MUST</bcp14> implement topic collection discovery.</t>
          <t>The content-format 40 ("application/link-format")  <bcp14>MUST</bcp14> be supported for the topic collection resource.</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>,</ps/2e3570>
]]></artwork>
          <t>Note that no "rt" or "ct" attributes are returned for the topic resources in the example payload, because
the resource type (rt="core.ps.conf") is already implied by this specification for the topic collection and
the content-format (TBD606) is implied by the resource type.</t>
        </section>
        <section anchor="topic-get-properties">
          <name>Getting Topics by Topic Properties</name>
          <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.
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 topic property in the request payload 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 (in CBOR diagnostic notation):
   {
      / topic-name /         0: "temperature",
      / resource-type /      2: "core.ps.data"
   }


   Response:

   Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   </ps/2e3570>
]]></artwork>
          <t>Note that in this example no "rt" or "ct" attributes are returned in the response payload, since the type of each link
(topic resource with rt="core.ps.conf") is implied as the default resource type of each topic resource by this specification.
Eliding these attributes helps to minimize the size of the response payload.</t>
        </section>
        <section anchor="topic-create">
          <name>Creating a Topic</name>
          <t>A client can add a new topic to a collection of topics by submitting an initial representation of the 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 topic properties in <xref target="topic-properties"/>, namely: "topic-name" and "resource-type".</t>
          <t>Please note that the topic will <em>not</em> 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 subscribers to subscribe to the topic before data has been published, the client can include the "initialize" property containing an initial representation (encoded as a CBOR byte string) along with the "topic-content-format" property. When included, the broker <bcp14>MUST</bcp14> create the topic and pre-populate the topic-data resource with the provided representation, using the specified Content-Format. This ensures RFC7641 compliance by maintaining Content-Format consistency across all notifications. For example, for CBOR SenML (Content-Format 60), the "initialize" property could be <tt>0x4180</tt> (<tt>&lt;&lt;[]&gt;&gt;</tt> in CBOR diagnostic notation), with <tt>0x80</tt> being the CBOR encoding of the empty CBOR array.</t>
          <t>When "initialize" is 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. 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 topic properties too. The response <bcp14>MUST</bcp14> support Content-Format TBD606 ("application/core-pubsub+cbor"), which is the default.</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> reply with a 4.xx client error response (such as 4.03 Forbidden).</t>
          <t>The broker <bcp14>MUST</bcp14> reply with a 4.xx client error response (such as 4.00 Bad Request) if a received parameter is invalid, unrecognized, or if the "topic-name" is already in use or otherwise invalid.</t>
          <t>Below is an example of a successful topic creation:</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"
   Location-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"
   }
]]></artwork>
        </section>
      </section>
      <section anchor="topic-configuration-interactions">
        <name>Topic 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</name>
          <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> reply with a 4.xx client error response (such as 4.03 Forbidden).</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: 1(1680393599),
      / max-subscribers /       6: 100
   }
]]></artwork>
        </section>
        <section anchor="topic-fetch-resource">
          <name>Getting part of a topic</name>
          <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 topic properties. 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 topic properties, using the same abbreviations defined in <xref target="pubsub-parameters"/>. Each element of the array specifies one requested topic property 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> reply with a 4.xx client error response (such as 4.03 Forbidden).</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>Content-Format TBD606 ("application/core-pubsub+cbor") is mandatory to support for both request and response.</t>
          <t>The CBOR map in the response payload includes entries for each topic property specified in the request and available in the topic resource representation.</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 / 9: [1, 3]
   }

   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</name>
          <t>A client can update a topic's configuration by submitting the updated topic representation in a POST request to the topic URI. However, the topic properties "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. Since POST replaces the full resource representation, these immutable properties may be included in the request with their current values.</t>
          <t>On success, the topic is overwritten and the broker returns a 2.04 (Changed) response and the current full resource representation. The broker <bcp14>MAY</bcp14> choose not to overwrite topic properties that are not explicitly modified in the request.</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 POST the topic is being overwritten, thus some of the optional topic properties (e.g., "max-subscribers", "observer-check") not included in the POST message will be reset to their default values.</t>
          <t>Example:</t>
          <artwork><![CDATA[
   Request:

   Header: POST (Code=0.02)
   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: 1(1682719199)
   }

   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: 1(1682719199),
      / max-subscribers /       6: 100,
      / observer-check /        7: 86400
   }
]]></artwork>
          <t>Note that, when a topic 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 of the "expiration-date" may cause cancellation of ongoing subscriptions if the topic expires at an earlier date.</t>
            </li>
          </ul>
        </section>
        <section anchor="topic-update-resource-patch">
          <name>Updating the topic 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 while leaving the others unchanged. As with the POST method, the topic properties "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 topic properties that are explicitly mentioned in the request.</t>
          <t>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 POST, iPATCH operations will explicitly update some topic properties, leaving others unmodified.
In the below example, two properties are successfully updated with iPATCH:</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: 1(1709164799),
      / 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: 1(1709164799),
      / max-subscribers /       6: 5,
      / observer-check /        7: 86400
   }
]]></artwork>
          <t>Note that when a topic 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</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 resource is deleted, the broker <bcp14>MUST</bcp14> also delete the topic-data resource. As a result, the broker unsubscribes 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 based on 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 the Observe option set to 0 (register) to a topic-data resource. When resource state changes, the server will send a notification to current subscribers observing the resource <xref target="RFC7641"/>.</t>
      <t>Unless the topic configuration includes the "initialize" property (see <xref target="topic-properties"/>), a topic-data resource does not exist until some initial data has been published to it. Consequently, a GET request sent to the topic-data resource URI before initial data publication would result 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>
      <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 resource exists and the URI of the topic 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="96" y="196">Topic</text>
                  <text x="200" y="196">Topic</text>
                  <text x="320" y="196">Topic</text>
                  <text x="432" y="196">Topic</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  '-'   Topic          Topic    '-'  Topic
                             DELETED
]]></artwork>
          </artset>
        </figure>
        <t>After a publisher publishes to the topic-data resource 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 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. Both the topic resource and the topic-data resource are deleted.</t>
        <t>When a client deletes a topic-data resource, the associated topic is placed into the HALF CREATED state, where clients can read, update and delete the topic and await for a publisher to begin publication. All existing subscribers are removed from the list of observers of the topic-data resource by sending a final 4.04 (Not Found) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>. The "topic-data" property in the topic configuration remains unchanged, but no new subscription to topic-data nor reading of data is allowed until a publisher publishes again. Even if the "initialize" property in the topic configuration is present, the topic-data resource is not automatically initialized (see <xref target="delete-topic-data"/>).</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 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 for 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 resource.
The URI for this resource is indicated in the "topic-data" topic property value. Please note that this URI is not the same as the topic URI used for configuring the topic (see <xref target="topic-resource-representation"/>).</t>
          <t>On success, the server returns a successful response. Typically, this is a 2.04 (Changed) response. However, when data is published to the topic for the first time, the server returns a 2.01 (Created) response and the broker sets the topic in the FULLY CREATED state (see <xref target="topic-lifecycle"/>).</t>
          <t>Using the "initialize" property is equivalent to having had a first publication with the initial content specified in that property. A follow-up publication from a publisher should result in a 2.04 response from the server.</t>
          <t>If the request does not have an acceptable Content-format, e.g., as specified by the "topic-content-format" property in the topic configuration, the server returns a 4.15 (Unsupported Content-Format) response.</t>
          <t>If the client is sending publications too fast, the server 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 (in CBOR diagnostic notation):
   {
      "n": "coaps://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 (in CBOR diagnostic notation):
   {
      "n": "coaps://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 resource 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 returns a successful response (typically 2.05 Content) with the data and the Observe Option. If no Observe Option is present in the response, 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 server returns an error response (typically 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". The current topic data is included in the response. In case of successful subscription, the response includes the Observe Option.</t>
            </dd>
            <dt>Failure:</dt>
            <dd>
              <t>4.04 "Not Found". The topic-data resource does not exist.</t>
            </dd>
          </dl>
          <t>If the "max-subscribers" topic property value has been reached, the server must treat that as specified in <xref section="4.1" sectionFormat="of" target="RFC7641"/>. The 2.05 (Content) 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 (in CBOR diagnostic notation):
   {
      "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 (in CBOR diagnostic notation):
   {
      "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 by canceling the observation as described in <xref section="3.6" sectionFormat="of" target="RFC7641"/>. For example, the client can use CoAP GET with the Observe Option set to 1 (deregister), or simply "forget" the observation and let the server remove it through its own observation lifetime mechanisms.</t>
          <t>As per <xref target="RFC7641"/>, a server transmits notifications mostly as Non-confirmable messages, but it sends a notification as 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 topic property "observer-check" (see <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 can delete a topic-data resource by making a CoAP DELETE request on the topic-data resource (which is hosted at 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 topic is then set back to the HALF CREATED state as per <xref target="topic-lifecycle"/> awaiting for a publisher to publish and set the topic to FULLY CREATED state where clients can subscribe and read the topic-data. All existing subscribers are removed from the list of observers of the topic-data resource by sending a final 4.04 (Not Found) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>. The "topic-data" property in the topic configuration remains unchanged, but no new subscription to topic-data nor reading of data is allowed.</t>
          <t>Note that this is the case irrespective of the value of the "initialize" topic property (if present) in the topic configuration.</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 resource by making a GET request to the "topic-data" URI. Please note that discovery of the "topic-data" topic property is a required previous step (see <xref target="topic-get-resource"/>).</t>
        <t>On success, the server returns a successful response (typically 2.05 Content) 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 server returns an error response (typically 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 (in CBOR diagnostic notation):
   {
      "n": "coaps://dev1.example.com/temperature",
      "u": "Cel",
      "t": 1621452122,
      "v": 23.5
   }
]]></artwork>
        <t>As defined in this document, subscribers can retrieve the latest topic-data resource representation. Future specifications can enable subscribers to additionally retrieve old representations of the topic-data resource. The storing of those old representations can be affected, for example, by an additional topic property at the broker that specifies the maximum number of stored old representations of the topic-data. Further details are out of the scope of this document.</t>
      </section>
      <section anchor="rate-limit">
        <name>Rate Limiting</name>
        <t>The server hosting the topic-data resource 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 server <bcp14>MAY</bcp14> also stop dispatching 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>Encoding of PubSub Topic Properties</name>
      <t>This document defines topic properties used in the messages exchanged between a client and the broker, for example during the topic creation and configuration process (see <xref target="topic-resource-representation"/>).
<xref target="tab-CoAP-Pubsub-Parameters"/> summarizes them and specifies the CBOR key that <bcp14>MUST</bcp14> be used instead of the full descriptive name.</t>
      <t>Note that the media type "application/core-pubsub+cbor" <bcp14>MUST</bcp14> be used when these topic properties are transported in the respective CoAP message payloads.</t>
      <table anchor="tab-CoAP-Pubsub-Parameters">
        <name>CoAP Pubsub Topic Properties and CBOR Encoding</name>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">CBOR Key</th>
            <th align="left">CBOR Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">topic-name</td>
            <td align="left">0</td>
            <td align="left">tstr</td>
          </tr>
          <tr>
            <td align="left">topic-data</td>
            <td align="left">1</td>
            <td align="left">tstr</td>
          </tr>
          <tr>
            <td align="left">resource-type</td>
            <td align="left">2</td>
            <td align="left">tstr</td>
          </tr>
          <tr>
            <td align="left">topic-content-format</td>
            <td align="left">3</td>
            <td align="left">uint</td>
          </tr>
          <tr>
            <td align="left">topic-type</td>
            <td align="left">4</td>
            <td align="left">tstr</td>
          </tr>
          <tr>
            <td align="left">expiration-date</td>
            <td align="left">5</td>
            <td align="left">#6.1(number)</td>
          </tr>
          <tr>
            <td align="left">max-subscribers</td>
            <td align="left">6</td>
            <td align="left">uint</td>
          </tr>
          <tr>
            <td align="left">observer-check</td>
            <td align="left">7</td>
            <td align="left">uint</td>
          </tr>
          <tr>
            <td align="left">initialize</td>
            <td align="left">8</td>
            <td align="left">bstr</td>
          </tr>
          <tr>
            <td align="left">conf-filter</td>
            <td align="left">9</td>
            <td align="left">array</td>
          </tr>
        </tbody>
      </table>
    </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"/>, CoRE 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 verify 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 operations, 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 that also hosts the corresponding topic-data resource; protect published data end-to-end between a 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 topics at the broker.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <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 topic properties encoded in CBOR. This registration follows the procedures specified in <xref target="BCP13"/>.</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>core-pubsub+cbor</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>Must be encoded as a CBOR map containing the topic properties defined in [RFC-XXXX].</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>See <xref target="seccons"/> of [RFC-XXXX].</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>[RFC-XXXX]</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>This type is used by clients that create, retrieve, and update topics at servers acting as a broker.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CoRE WG mailing list (core@ietf.org), or IETF Web and Internet Transport (WIT) Area (wit@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-type">
        <name>CoAP Content-Formats</name>
        <t>IANA is asked to register the following entry to the "CoAP Content-Formats" registry within the "Constrained RESTful Environments (CoRE) Parameters" registry group.</t>
        <dl>
          <dt>Content Type:</dt>
          <dd>
            <t>application/core-pubsub+cbor</t>
          </dd>
          <dt>Content Coding:</dt>
          <dd>
            <t>-</t>
          </dd>
          <dt>ID:</dt>
          <dd>
            <t>TBD606</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>[RFC-XXXX]</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-rt">
        <name>Resource Types</name>
        <t>IANA is asked to enter the following values from <xref target="tab-CoAP-Pubsub-Resource-Types"/> in the "Resource Type (rt=) Link Target Attribute Values" registry within the "Constrained Restful Environments (CoRE) Parameters" registry group. Reference should always be [RFC-XXXX].</t>
        <table anchor="tab-CoAP-Pubsub-Resource-Types">
          <name>CoAP Pubsub Resource Types</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">core.ps</td>
              <td align="left">Publish-subscribe broker</td>
            </tr>
            <tr>
              <td align="left">core.ps.coll</td>
              <td align="left">Topic collection resource of a publish-subscribe broker</td>
            </tr>
            <tr>
              <td align="left">core.ps.conf</td>
              <td align="left">Topic resource of a publish-subscribe broker</td>
            </tr>
            <tr>
              <td align="left">core.ps.data</td>
              <td align="left">Topic-data resource of a publish-subscribe server</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-coap-pubsub-parameters">
        <name>CoAP Pubsub Topic Properties Registry</name>
        <t>This specification establishes the "CoAP Pubsub Topic Properties" 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", "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 is an integer (either positive or negative). Different ranges of values use different registration policies <xref target="BCP26"/>. Integer values from -256 to 255 are designated as "Standards Action With Expert Review". Integer values from -65536 to -257 and from 256 to 65535 are designated as "Specification Required". Integer values greater than 65535 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="tab-CoAP-Pubsub-Parameters"/>. For all of them, the reference is [RFC-XXXX].</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 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 topic properties, enabling interoperability and broader applicability; and "Expert Review" provides a flexible mechanism for exposing new properties 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 topic properties are clearly defined in the corresponding specification. Properties 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>
          <reference anchor="RFC9694" target="https://www.rfc-editor.org/info/rfc9694">
            <front>
              <title>Guidelines for the Definition of New Top-Level Media Types</title>
              <author fullname="M.J. Dürst" initials="M.J." surname="Dürst"/>
              <date month="March" year="2025"/>
              <abstract>
                <t>This document defines best practices for defining new top-level media types. It also introduces a registry for top-level media types, and contains a short history of top-level media types. It updates RFC 6838.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="13"/>
            <seriesInfo name="RFC" value="9694"/>
            <seriesInfo name="DOI" value="10.17487/RFC9694"/>
          </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="26" month="March" year="2026"/>
            <abstract>
              <t>   Group communication for the Constrained Application Protocol (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 for 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 Authentication and
   Authorization for Constrained Environments (ACE) framework 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-17"/>
        </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 1079?>

<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 anchor="version-16-to-17">
        <name>Version -16 to -17</name>
        <ul spacing="normal">
          <li>
            <t>Addressing Esko's and Ari's review.</t>
          </li>
          <li>
            <t>Fixing formatting</t>
          </li>
        </ul>
      </section>
      <section anchor="version-17-to-18">
        <name>Version -17 to -18</name>
        <ul spacing="normal">
          <li>
            <t>Addressed issues #64, #65, #66, #67.</t>
          </li>
          <li>
            <t>rt, ct, obs attribute elision</t>
          </li>
          <li>
            <t>Editorial changes</t>
          </li>
        </ul>
      </section>
      <section anchor="version-18-to-19">
        <name>Version -18 to -19</name>
        <ul spacing="normal">
          <li>
            <t>IANA early review</t>
          </li>
          <li>
            <t>Addressed issues #68, #69</t>
          </li>
          <li>
            <t>Addressed Marco's review</t>
          </li>
          <li>
            <t>Addressed Marco's and Christian Amsüss's WGLC reviews</t>
          </li>
          <li>
            <t>Redesigned "initialize" property for RFC7641 compliance</t>
          </li>
          <li>
            <t>Changed "expiration-date" to CBOR tag 1, CBOR keys numeric-only</t>
          </li>
          <li>
            <t>Relaxed overly strict response codes</t>
          </li>
          <li>
            <t>Clarified topic-data URI reference, immutable properties, and architecture roles</t>
          </li>
          <li>
            <t>Editorial fixes</t>
          </li>
        </ul>
      </section>
      <section anchor="version-19-to-20">
        <name>Version -19 to -20</name>
        <ul spacing="normal">
          <li>
            <t>Clarified "resource-type" field: "core.ps.data" per this specification, alternative values permitted</t>
          </li>
          <li>
            <t>Clarified "max-subscribers" semantics: hint at creation, enforced once stored</t>
          </li>
          <li>
            <t>Added explicit 4.04 removal of subscribers on topic-data deletion</t>
          </li>
          <li>
            <t>Merged PRs #71, #72, #73 (editorial fixes, aasvg build, example clarification)</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. The document 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 thank <contact fullname="Marco Tiloca"/>, <contact fullname="Esko Dijk"/>,<contact fullname="Francesca Palombini"/>, <contact fullname="Christian Amsüss"/>, <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>
          <postal>
            <street>Isafjordsgatan 22</street>
            <city>Kista</city>
            <code>164 40</code>
            <country>Sweden</country>
          </postal>
          <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 valuable in multiple parts of the document but particularly notable in the Security Considerations section.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
cvRo+ldyEjVlhV+a+3uEFb4dn0S/Hw+i/T/eqf39zQguP1n+2CxM1Bn4WyxB
Eka+Ku/m6iSdzFvKJmpJ0/olYU0nOTdwCT3hnV+b/R/k9Pg+vzF0m2mrP6Nm
oPNscYM27wUHhS2Xay4AB4SoGrpbjejsZLfuLFUoX0klyEhukK2oyiOaXSdI
zoG6ztRCU6+jyDlSsr5VGk+1VCDQ667TOBDvmDdJt1oMLZ/YDKrG2feuFVIe
bYtE13kuQxKNygDcmyKhmiI1PhMw5AM4FgQBzxTcsO1uWllwTRUaSadXec5+
JASvzqNlk+1NoFLtCE5dgpGEy3zWRgMpO22ZUKT9ALYIN5gkp0axIi/eW0NU
sSoGOqJ8aRiL23rFX2aj6K33zbspXS+uRDkUjbxU7WLLlrvwAUfxVEFdKc0x
9C8WtTIsLGwd3AuBjMHNia7sa0sgzKkCSsNjRwEJLE4SegYYwd4KDy8QY7DE
EcJFxKNuO7bWf6zDetCoArPdGlxM89GbSPWcIRopcUiKsGZMeX8Gdj9r51+f
f/1De92gve49Gh+PQXu9k5sztXLc/OAfZoi/yY28rxnCvRcSEjefRydcLsqX
d2ykzYCpnk2DJvTghCnkq5LPm1DIarGWSme27pB/He8FEsJVjgBDBTIpy7Vy
KewpLthrQ3TtBOtPPcc845aygN5SidIxE5qiIzxNrTqqV/OGNdg4nKLJ0mzk
gtRvG8H4dBQ8h3OzLCDO+6eMnvhaMhcg5OseMc6tSBP2PGuIZou8SbJK8voU
NYoO2XNI1zDXJVBR24H9/yRZNLb6fqckmul8uoVR5Mm1l6Qy1lwr+xGY0SFv
eTdV/ilDw8LNVZKihyK2CWjk78NtZcTE6oHuzlLliphx+HcoCd/P5PNlJUza
A0aRcoNI6YuTeJ7zrE2ePPspQmRDfgSQ/VVESLZxFDEbKhCFBoq93mVfNH0P
DHKsaBVNG6SirEVXFcIp0YS2llwT1lOBOfm1Wu6B2UoVRI8g3CXGyRqsIPfo
b1aQa2GBzP0e7R6Pjw4e3cX9gPEd/kPO+buWc+650yrnHP5MKadVyIlsIao6
j/sc8SdwRKZ/VdGGpIszLEjc5tyXSsU1AUJu62hzNlFpr7Pz5+eX5+1u1c/w
5e9FW2dcUdnRbg3wa9zF4sovNyM3icO4q0baYjRJZohlL4MePN7DIZP+Bk1w
+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
nQXH+gAA

-->

</rfc>
