<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.18 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY SELF "[RFC-XXXX]">
]>


<rfc ipr="trust200902" docName="draft-ietf-core-coap-pubsub-19" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="CoAP pubsub">A publish-subscribe architecture for the Constrained Application Protocol (CoAP)</title>

    <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="March" day="02"/>

    <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 title="About This Document" removeInRFC="true">
      <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 title="Publish-subscribe architecture based on CoAP" anchor="fig-arch"><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 title="Resources of a Broker" anchor="fig-api"><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 title="Topic and topic-data resources of a topic" anchor="fig-topic"><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>

<t><list style="symbols">
  <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>
  <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>
  <t>"resource-type": A required field used to indicate the resource type of the topic-data resource for the topic. It encodes the resource type as a CBOR text string. The value is typically "core.ps.data", i.e., when using the topic-data resource defined in this document.</t>
  <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>
  <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>
  <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>
  <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. The broker <bcp14>MAY</bcp14> choose to ignore this value if enforcing it would be counterproductive (e.g., causing clients to fall back to polling). This field is intended as a hint from the topic creator; the broker is the final arbiter of resource allocation.</t>
  <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>
  <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 <spanx style="verb">4.04 Not Found</spanx> error. The representation <bcp14>MUST</bcp14> be valid for the specified Content-Format. For example, for CBOR-based formats, an empty array encoded as <spanx style="verb">0x80</spanx> (CBOR for <spanx style="verb">[]</spanx>) is a valid empty representation. 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>
</list></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>

<figure><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></figure>

</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>

<figure><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></figure>

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

<figure><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></figure>

<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>The topic-data resources use the resource type 'core.ps.data'. 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 below. Every topic collection resource <bcp14>MUST</bcp14> support this query.</t>

<figure><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></figure>

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

<figure><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></figure>

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

<figure><artwork><![CDATA[
   Request:

   Header: FETCH (Code=0.05)
   Uri-Path: "ps"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload:
   {
      / 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></figure>

<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 value could be <spanx style="verb">h'80'</spanx> (the CBOR encoding of an empty array <spanx style="verb">[]</spanx>).</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>

<figure><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></figure>

</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>

<figure><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></figure>

</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>

<figure><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></figure>

</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>

<figure><artwork><![CDATA[
   Request:

   Header: POST (Code=0.03)
   Uri-Path: "ps"
   Uri-Path: "h9392"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /            0: "living-room-sensor",
      / topic-data /            1: "/ps/data/1bd0d6d",
      / resource-type /         2: "core.ps.data",
      / topic-content-format /  3: 112,
      / topic-type /            4: "temperature",
      / expiration-date /       5: 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></figure>

<t>Note that, when a topic changes, it may result in disruptions for the subscribers. Some potential issues that may arise include:</t>

<t><list style="symbols">
  <t>Limiting the number of subscribers will cause cancellation of ongoing subscriptions until "max-subscribers" has been reached.</t>
  <t>Changing of the "expiration-date" may cause cancellation of ongoing subscriptions if the topic expires at an earlier data.</t>
</list></t>

</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.</t>

<figure><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></figure>

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

<figure><artwork><![CDATA[
   Request:

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

   Response:

   Header: Deleted (Code=2.02)
]]></artwork></figure>

</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, subscribers observing the resource <xref target="RFC7641"/> at that time will receive a notification.</t>

<t>A topic-data resource does not exist until some initial data has been published to it. Before initial data publication, a GET request to the topic-data resource URI results in a 4.04 (Not Found) response. If such a "half created" topic is undesired, the creator of the topic can simply immediately publish some initial placeholder data to make the topic "fully created" (see <xref target="topic-lifecycle"/>).</t>

<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 title="Lifecycle of a Topic" anchor="fig-life"><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. the "topic-data" property in the topic configuration remains unchanged but no subscription to topic-data nor reading of data is allowed.</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 broker 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 broker returns a 2.01 (Created) response and 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 broker.</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 broker returns a 4.15 (Unsupported Content-Format) response.</t>

<t>If the client is sending publications too fast, the broker returns a 4.29 (Too Many Requests) response <xref target="RFC8516"/>.</t>

<t>Example of first publication:</t>

<figure><artwork><![CDATA[
   Request:

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

   Response:

   Header: Created (Code=2.01)
]]></artwork></figure>

<t>Example of subsequent publication:</t>

<figure><artwork><![CDATA[
   Request:

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

   Response:

   Header: Changed (Code=2.04)
]]></artwork></figure>

</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 broker 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". Successful subscription with Observe response, current value included in the response.</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 broker 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>

<figure><artwork><![CDATA[
   Request:

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

   Response:

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

   Response:

   Header: Content (Code=2.05)
   Content-Format: 110
   Observe: 10002
   Max-Age: 15
   Payload:
   {
      "n": "urn:dev:os:32473-123456",
      "u": "Cel",
      "t": 1696340184,
      "v": 21.87
   }
]]></artwork></figure>

</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, 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. The "topic-data" property in the topic configuration remains unchanged, but no 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>

<figure><artwork><![CDATA[
   Request:

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

   Response:

   Header: Deleted (Code=2.02)
]]></artwork></figure>

</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 in the broker. 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 broker returns an error response (typically 4.04 Not Found).</t>

<t>Example:</t>

<figure><artwork><![CDATA[
   Request:

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

   Response:

   Header: Content (Code=2.05)
   Content-Format: 110
   Max-Age: 15
   Payload:
   {
      "n": "coaps://dev1.example.com/temperature",
      "u": "Cel",
      "t": 1621452122,
      "v": 23.5
   }
]]></artwork></figure>

<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 broker <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>

<texttable title="CoAP Pubsub Topic Properties and CBOR Encoding" anchor="tab-CoAP-Pubsub-Parameters">
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>CBOR Key</ttcol>
      <ttcol align='left'>CBOR Type</ttcol>
      <c>topic-name</c>
      <c>0</c>
      <c>tstr</c>
      <c>topic-data</c>
      <c>1</c>
      <c>tstr</c>
      <c>resource-type</c>
      <c>2</c>
      <c>tstr</c>
      <c>topic-content-format</c>
      <c>3</c>
      <c>uint</c>
      <c>topic-type</c>
      <c>4</c>
      <c>tstr</c>
      <c>expiration-date</c>
      <c>5</c>
      <c>tag 1</c>
      <c>max-subscribers</c>
      <c>6</c>
      <c>uint</c>
      <c>observer-check</c>
      <c>7</c>
      <c>uint</c>
      <c>initialize</c>
      <c>8</c>
      <c>bstr</c>
      <c>conf-filter</c>
      <c>9</c>
      <c>array</c>
</texttable>

</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 assert source authentication of the published data. This can be achieved at the application layer, e.g., by using COSE <xref target="STD96"/> <xref target="RFC9053"/>.</t>

<t>Access control of clients at the broker <bcp14>MAY</bcp14> be enforced for performing discovery 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; 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 "&SELF;" 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 &SELF;.</t>
  </dd>
  <dt>Security considerations:</dt>
  <dd>
    <t>See <xref target="seccons"/> of &SELF;.</t>
  </dd>
  <dt>Interoperability considerations:</dt>
  <dd>
    <t>none</t>
  </dd>
  <dt>Published specification:</dt>
  <dd>
    <t>&SELF;</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>&SELF;</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 &SELF;.</t>

<texttable title="CoAP Pubsub Resource Types" anchor="tab-CoAP-Pubsub-Resource-Types">
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>core.ps</c>
      <c>Publish-subscribe broker</c>
      <c>core.ps.coll</c>
      <c>Topic collection resource of a publish-subscribe broker</c>
      <c>core.ps.conf</c>
      <c>Topic resource of a publish-subscribe broker</c>
      <c>core.ps.data</c>
      <c>Topic-data resource of a publish-subscribe server</c>
</texttable>

</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", or "Specification Required", or "Expert Review" per <xref target="BCP26"/>. "Expert Review" guidelines are provided in <xref target="review"/>.</t>

<t>All assignments according to "Standards Action with Expert Review" are made on a "Standards Action" basis per Section <xref target="RFC8126" section="4.9" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/> with "Expert Review" additionally required per Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>. The procedure for early IANA allocation of "standards track code points" defined in <xref target="BCP100"/> also applies. When such a procedure is used, IANA will ask the designated expert(s) to approve the early allocation before registration. In addition, working group chairs are encouraged to consult the expert(s) early during the process outlined in Section <xref target="RFC7120" section="3.1" sectionFormat="bare"/> of RFC 7120 <xref target="BCP100"/>.</t>

<t>The columns of this registry are:</t>

<t><list style="symbols">
  <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>
  <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>
  <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>
  <t>Reference: This contains a pointer to the public specification for the item.</t>
</list></t>

<t>This registry has been initially populated with the values in <xref target="tab-CoAP-Pubsub-Parameters"/>. Reference should always be &SELF;.</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>

<t><list style="symbols">
  <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>
  <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>
  <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>
  <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>
</list></t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<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 title='Informative References' anchor="sec-informative-references">



<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="23" month="February" 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 ACE framework for
   Authentication and Authorization is used to enforce authentication
   and authorization of the Administrator at the Group Manager.
   Protocol-specific transport profiles of ACE are used to achieve
   communication security, proof of possession, and server
   authentication.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-gm-admin-15"/>
   
</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 &quot;[draft-ietf-core-coap-pubsub]&quot;
   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&#x27;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 1075?>

<section anchor="sec-document-updates" removeInRFC="true"><name>Document Updates</name>

<section anchor="version-13-to-14"><name>Version -13 to -14</name>

<t><list style="symbols">
  <t>Section restructuring for better readability.</t>
  <t>Updated topic configuration interactions.</t>
  <t>Introduced iPATCH section.</t>
  <t>Various clarifications of default values for parameters.</t>
  <t>New examples for several interactions.</t>
  <t>Updated topic discovery section.</t>
  <t>Other editorial changes</t>
</list></t>

</section>
<section anchor="version-14-to-15"><name>Version -14 to -15</name>

<t><list style="symbols">
  <t>Code bug fix https://github.com/jaimejim/aiocoap-pubsub-broker/commit/f32ce4866a81319238d6e905de439c9410cce175</t>
  <t>Added two new optional topic configuration parameters; "initialize" and "topic-history".</t>
  <t>Modified all examples to conform to RFC9594.</t>
  <t>Added the explicit cancellation of ongoing subscriptions when topic configuration parameters are changed.</t>
  <t>Added editorial changes based on feedback.</t>
  <t>Clarifications on Topic Configuration creation.</t>
  <t>Other editorial changes</t>
</list></t>

</section>
<section anchor="version-15-to-16"><name>Version -15 to -16</name>

<t><list style="symbols">
  <t>Various updates throughout the document based on AD review.</t>
  <t>IANA clarifications</t>
</list></t>

</section>
<section anchor="version-16-to-17"><name>Version -16 to -17</name>

<t><list style="symbols">
  <t>Addressing Esko's and Ari's review.</t>
  <t>Fixing formatting</t>
</list></t>

</section>
<section anchor="version-17-to-18"><name>Version -17 to -18</name>

<t><list style="symbols">
  <t>Addressed issues #64, #65, #66, #67.</t>
  <t>rt, ct, obs attribute elision</t>
  <t>Editorial changes</t>
</list></t>

</section>
<section anchor="version-18-to-19"><name>Version -18 to 19</name>

<t><list style="symbols">
  <t>IANA early review</t>
  <t>Addressed issues #68, #69</t>
  <t>Addressed Marco's review</t>
  <t>Addressed Marco's and Christian Amsüss's WGLC reviews</t>
  <t>Redesigned "initialize" property for RFC7641 compliance</t>
  <t>Changed "expiration-date" to CBOR tag 1, CBOR keys numeric-only</t>
  <t>Relaxed overly strict response codes</t>
  <t>Clarified topic-data URI reference, immutable properties, and architecture roles</t>
  <t>Editorial fixes</t>
</list></t>

</section>
</section>
<section numbered="no" 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>SE-16440</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 un multiple parts of the document but particularly notable in the Security Considerations section.</t>

    </section>

  </back>

<!-- ##markdown-source:
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

-->

</rfc>

