<?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-21" 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="July" day="02"/>

    <area>Applications</area>
    <workgroup>CoRE Working Group</workgroup>
    

    <abstract>


<?line 73?>

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

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

<t>As CoAP PubSub builds on <xref target="RFC7252"/> and <xref target="RFC7641"/>, its messages are not events but state updates following the principle of eventual consistency rather than per-event delivery. A message may be silently coalesced when a newer message on the same topic is delivered (e.g. by intermediaries or libraries), or be delivered twice, without changing the semantics. Applications requiring stronger guarantees need to handle that explicitly.</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. According to this document, the value is "core.ps.data". Other specifications or deployments <bcp14>MAY</bcp14> define and use alternative resource type values for the topic-data resource.</t>
  <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. At topic creation or update, this field is a hint from the topic creator; the broker <bcp14>MAY</bcp14> store a different value than the one requested, or none at all. Once stored, the value is enforced: if the limit is reached, new subscriptions are handled as specified in <xref section="4.1" sectionFormat="of" target="RFC7641"/>.</t>
  <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, the empty CBOR array encoded as <spanx style="verb">0x80</spanx> is a valid empty representation, which corresponds to the "initialize" property set to <spanx style="verb">0x4180</spanx> (<spanx style="verb">&lt;&lt;[]&gt;&gt;</spanx> in CBOR diagnostic notation). If this field is not present, the broker behaves as usual, and the topic-data resource is not initialized. When this field is present, "topic-content-format" <bcp14>MUST</bcp14> also be specified.</t>
</list></t>

<t>The "resource-type" field carries a single value pertaining to the publish-subscribe functionality of the topic-data resource. The topic-data resource itself <bcp14>MAY</bcp14> have additional resource types visible in Link-Format discovery <xref target="RFC6690"/>, but those are not represented in this field.</t>

</section>
</section>
<section anchor="discovery"><name>Discovery</name>

<t>A client can perform a discovery of: the broker; the topic collection resources and topic resources hosted by the broker; and the topic-data resources associated with those topic resources.
Any server implementing a pubsub broker <bcp14>MUST</bcp14> support CoAP discovery with a query parameter as defined in <xref section="4.1" sectionFormat="of" target="RFC6690"/> and as used in the examples in this section.</t>

<t>The CoRE Link Format discovery responses shown in the examples in this section are illustrative only.
The normative requirements for this format are defined in <xref target="RFC6690"/>.
The examples make minimal use of CoRE Link Format attributes, in order to reduce the size of discovery responses: this is beneficial for clients connected to constrained networks.
In general, a broker <bcp14>MAY</bcp14> include any CoRE Link Format attributes in each returned link, for example to meet specific use case requirements.</t>

<section anchor="broker-discovery"><name>Broker Discovery</name>

<t>CoAP clients <bcp14>MAY</bcp14> discover brokers by using CoAP discovery <xref target="RFC7252"/>, via multicast, through a Resource Directory (RD) <xref target="RFC9176"/> or by other means specified in extensions to <xref target="RFC7252"/>. Brokers <bcp14>MAY</bcp14> register with an RD by following the steps on <xref section="5" sectionFormat="of" target="RFC9176"/> with the resource type set to "core.ps" as defined in <xref target="iana"/> of this document.</t>

<t>The following example shows an endpoint discovering a broker using the "core.ps" resource type over a multicast network. Brokers within the multicast scope will answer the query. Even when that discovery is unprotected, it does not disclose the existence of the topics but only that of the broker.</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, e.g., if the server wants to restrict topic availability. For example, the server hosting /.well-known/core may not be aware of the broker's authorization policy, the discovery interaction may need to be secured, or the size of the returned CoRE Link Format document may grow large. While <xref section="6" sectionFormat="of" target="RFC6690"/> allows per-entry access control in /.well-known/core, 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 instead.</t>

</section>
<section anchor="topic-data-discovery"><name>Topic-Data Discovery</name>

<t>Within a topic, there is the "topic-data" topic property that contains the URI of the topic-data resource used for publishing and subscribing. So retrieving the topic will also provide the URL of the topic-data resource (see <xref target="topic-get-resource"/>).</t>

<t>According to this specification, the topic-data resources use the resource type "core.ps.data". Other specifications or deployments <bcp14>MAY</bcp14> use alternative resource type values (see <xref target="topic-properties"/>). It is also possible to discover a list of topic-data resources, by sending a request to the collection resource with a query parameter rt=core.ps.data as shown in the example below. Every topic collection resource <bcp14>MUST</bcp14> support this query.</t>

<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 successful response (typically 2.05 Content), 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 successful response (typically 2.05 Content) 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 successful response (typically 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>This section describes FETCH semantics on the topic collection for request payloads with Content-Format TBD606 ("application/core-pubsub+cbor"); other request Content-Formats may be defined in extensions. The response uses Content-Format 40 ("application/link-format").</t>

<t>Example:</t>

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

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


   Response:

   Header: Content (Code=2.05)
   Content-Format: 40 (application/link-format)
   Payload:
   </ps/2e3570>
]]></artwork></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" property could be <spanx style="verb">0x4180</spanx> (<spanx style="verb">&lt;&lt;[]&gt;&gt;</spanx> in CBOR diagnostic notation), with <spanx style="verb">0x80</spanx> being the CBOR encoding of the empty CBOR array.</t>

<t>When "initialize" is omitted, the topic will only be fully created after data is published to it.</t>

<t>On success, the broker returns a 2.01 (Created) response, indicating the Location-Path of the new topic and the current representation of the topic resource. The response payload includes a CBOR map. The response <bcp14>MUST</bcp14> include the required topic properties (see <xref target="topic-properties"/>), namely: "topic-name", "resource-type", and "topic-data". It <bcp14>MAY</bcp14> also include a number of optional topic properties too. The response <bcp14>MUST</bcp14> support Content-Format TBD606 ("application/core-pubsub+cbor"), which is the default.</t>

<t>If requirements are defined for the client to create the topic as requested and the broker does not successfully assess that those requirements are met, then the broker <bcp14>MUST</bcp14> reply with a 4.xx client error response (such as 4.03 Forbidden).</t>

<t>The broker <bcp14>MUST</bcp14> reply with a 4.xx client error response (such as 4.00 Bad Request) if a received parameter is invalid, unrecognized, or if the "topic-name" is already in use or otherwise invalid.</t>

<t>Below is an example of a successful topic creation:</t>

<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 successful response (typically 2.05 Content) 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 payload is a CBOR array of topic property keys, using the same abbreviations defined in <xref target="pubsub-parameters"/>, and is carried with Content-Format 60 ("application/cbor"). 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 successful response (typically 2.05 Content) 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 60 ("application/cbor") is mandatory to support for the request payload, and Content-Format TBD606 ("application/core-pubsub+cbor") is mandatory to support for the response payload.</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: 60 (application/cbor)
   Payload (in CBOR diagnostic notation):
   [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.02)
   Uri-Path: "ps"
   Uri-Path: "h9392"
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /            0: "living-room-sensor",
      / topic-data /            1: "/ps/data/1bd0d6d",
      / resource-type /         2: "core.ps.data",
      / topic-content-format /  3: 112,
      / topic-type /            4: "temperature",
      / expiration-date /       5: 1(1682719199)
   }

   Response:

   Header: Changed (Code=2.04)
   Content-Format: TBD606 (application/core-pubsub+cbor)
   Payload (in CBOR diagnostic notation):
   {
      / topic-name /            0: "living-room-sensor",
      / topic-data /            1: "/ps/data/1bd0d6d",
      / resource-type /         2: "core.ps.data",
      / topic-content-format /  3: 112,
      / topic-type /            4: "temperature",
      / expiration-date /       5: 1(1682719199),
      / max-subscribers /       6: 100,
      / observer-check /        7: 86400
   }
]]></artwork></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 date.</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.
In the below example, two properties are successfully updated with iPATCH:</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. Since CoAP DELETE is idempotent, a client retransmitting a DELETE request for an already-deleted topic may receive a 4.04 (Not Found) response, which can be considered a successful deletion.</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, the server will send a notification to current subscribers observing the resource <xref target="RFC7641"/>.</t>

<t>Unless the topic configuration includes the "initialize" property (see <xref target="topic-properties"/>), a topic-data resource does not exist until some initial data has been published to it. Consequently, a GET request sent to the topic-data resource URI before initial data publication would result in a 4.04 (Not Found) response. If such a "half created" topic is undesired, the creator of the topic can simply immediately publish some initial placeholder data to make the topic "fully created" (see <xref target="topic-lifecycle"/>).</t>

<t>URIs for topic resources are broker-generated (see <xref target="topic-create"/>). There is no necessary URI pattern dependence between the URI where the topic-data resource exists and the URI of the topic resource.</t>

<section anchor="topic-lifecycle"><name>Topic Lifecycle</name>

<t>When a topic is newly created, it is first placed by the broker into the HALF CREATED state (see <xref target="fig-life"/>). In this state, a client can read and update the configuration of the topic and delete the topic. A publisher can publish to the topic-data resource.  However, a subscriber cannot yet subscribe to the topic-data resource nor read the latest data.</t>

<figure 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. All existing subscribers are removed from the list of observers of the topic-data resource by sending a final 4.04 (Not Found) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>. The "topic-data" property in the topic configuration remains unchanged, but no new subscription to topic-data nor reading of data is allowed until a publisher publishes again. Even if the "initialize" property in the topic configuration is present, the topic-data resource is not automatically initialized (see <xref target="delete-topic-data"/>).</t>

</section>
<section anchor="topic-data-interactions"><name>Topic-Data Interactions</name>

<t>Interactions with the topic-data resource are covered in this section.</t>

<section anchor="publish"><name>Publish</name>

<t>A topic with a topic-data resource must have been created in order to publish data to it (See <xref target="topic-create"/>) and be in the HALF CREATED or FULLY CREATED state in order for the publish operation to work (see <xref target="topic-lifecycle"/>).</t>

<t>A client can publish data to a topic by submitting the data in a PUT request to the topic-data resource.
The URI for this resource is indicated in the "topic-data" topic property value. Please note that this URI is not the same as the topic URI used for configuring the topic (see <xref target="topic-resource-representation"/>).</t>

<t>On success, the server returns a successful response. Typically, this is a 2.04 (Changed) response. However, when data is published to the topic for the first time, the server returns a 2.01 (Created) response and the broker sets the topic in the FULLY CREATED state (see <xref target="topic-lifecycle"/>).</t>

<t>Using the "initialize" property is equivalent to having had a first publication with the initial content specified in that property. A follow-up publication from a publisher should result in a 2.04 response from the server.</t>

<t>If the request does not have an acceptable Content-format, e.g., as specified by the "topic-content-format" property in the topic configuration, the server returns a 4.15 (Unsupported Content-Format) response.</t>

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

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

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

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

   Response:

   Header: Created (Code=2.01)
]]></artwork></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 (in CBOR diagnostic notation):
   {
      "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 server returns an error response (typically 4.04 Not Found).</t>

<t>The following response codes are defined for the Subscribe operation:</t>

<dl>
  <dt>Success:</dt>
  <dd>
    <t>2.05 "Content". The current topic data is included in the response. In case of successful subscription, the response includes the Observe Option.</t>
  </dd>
  <dt>Failure:</dt>
  <dd>
    <t>4.04 "Not Found". The topic-data resource does not exist.</t>
  </dd>
</dl>

<t>If the "max-subscribers" topic property value has been reached, the server must treat that as specified in <xref section="4.1" sectionFormat="of" target="RFC7641"/>. The 2.05 (Content) response <bcp14>MUST NOT</bcp14> include an Observe Option, the absence of which signals to the subscriber that the subscription failed.</t>

<t>Example of a successful subscription followed by one update:</t>

<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 (in CBOR diagnostic notation):
   {
      "n": "urn:dev:os:32473-123456",
      "u": "Cel",
      "t": 1696341182,
      "v": 19.87
   }

   Response:

   Header: Content (Code=2.05)
   Content-Format: 110
   Observe: 10002
   Max-Age: 15
   Payload (in CBOR diagnostic notation):
   {
      "n": "urn:dev:os:32473-123456",
      "u": "Cel",
      "t": 1696340184,
      "v": 21.87
   }
]]></artwork></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 (deregister), or simply "forget" the observation and let the server remove it through its own observation lifetime mechanisms.</t>

<t>As per <xref target="RFC7641"/>, a server transmits notifications mostly as Non-confirmable messages, but it sends a notification as a Confirmable message instead of a Non-confirmable message at least every 24 hours.</t>

<t>This value can be modified at the broker by the administrator of a topic by modifying the topic property "observer-check" (see <xref target="topic-resource-representation"/>). This would allow changing the rate at which different implementations verify that a subscriber is still interested in observing a topic-data resource.</t>

</section>
<section anchor="delete-topic-data"><name>Delete topic-data</name>

<t>A publisher can delete a topic-data resource by making a CoAP DELETE request on the topic-data resource (which is hosted at the "topic-data" URI).</t>

<t>On success, the broker returns a 2.02 (Deleted) response. Since CoAP DELETE is idempotent, a publisher retransmitting a DELETE request for an already-deleted topic-data resource may receive a 4.04 (Not Found) response, which can be considered a successful deletion.</t>

<t>When a topic-data resource is deleted, the topic is then set back to the HALF CREATED state as per <xref target="topic-lifecycle"/> awaiting for a publisher to publish and set the topic to FULLY CREATED state where clients can subscribe and read the topic-data. All existing subscribers are removed from the list of observers of the topic-data resource by sending a final 4.04 (Not Found) response as per <xref section="3.2" sectionFormat="of" target="RFC7641"/>. The "topic-data" property in the topic configuration remains unchanged, but no new subscription to topic-data nor reading of data is allowed.</t>

<t>Note that this is the case irrespective of the value of the "initialize" topic property (if present) in the topic configuration.</t>

<t>Example of a successful deletion:</t>

<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. Please note that discovery of the "topic-data" topic property is a required previous step (see <xref target="topic-get-resource"/>).</t>

<t>On success, the server returns a successful response (typically 2.05 Content) with the data.</t>

<t>If the target URI does not match an existing resource or the topic is not in the FULLY CREATED state (see <xref target="topic-lifecycle"/>), the server returns an error response (typically 4.04 Not Found).</t>

<t>Example:</t>

<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 (in CBOR diagnostic notation):
   {
      "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 server <bcp14>MAY</bcp14> also stop dispatching messages from that publisher for the indicated time.</t>

<t>When a publisher receives a 4.29 (Too Many Requests) response, it <bcp14>MUST NOT</bcp14> send any new publication requests to the same topic-data resource before the time indicated by the Max-Age option has passed.</t>

</section>
</section>
<section anchor="pubsub-parameters"><name>Encoding of PubSub Topic Properties</name>

<t>This document defines topic properties used in the messages exchanged between a client and the broker, for example during the topic creation and configuration process (see <xref target="topic-resource-representation"/>).
<xref target="tab-CoAP-Pubsub-Parameters"/> summarizes them and specifies the CBOR key that <bcp14>MUST</bcp14> be used instead of the full descriptive name.</t>

<t>Note that the media type "application/core-pubsub+cbor" <bcp14>MUST</bcp14> be used when these topic properties are transported in the respective CoAP message payloads.</t>

<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>#6.1(number)</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>
</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>CoAP communications between each client and the broker are <bcp14>RECOMMENDED</bcp14> to be secured. The default security protocol is defined by <xref target="RFC7252"/>. Examples of other security protocols that could be applied to CoAP communications are OSCORE <xref target="RFC8613"/> and DTLS 1.3 <xref target="RFC9147"/>. The choice of a security protocol depends on the requirements of the specific application and deployment. Security considerations for the selected security protocol apply as well.</t>

<t>The content published on a topic by a publisher client <bcp14>SHOULD</bcp14> be protected end-to-end between the publisher and all the subscribers to that topic. In such a case, it <bcp14>MUST</bcp14> be possible to verify source authentication of the published data. This can be achieved at the application layer, e.g., by using COSE <xref target="STD96"/> <xref target="RFC9053"/>.</t>

<t>Access control of clients at the broker <bcp14>MAY</bcp14> be enforced for performing discovery operations, and <bcp14>SHOULD</bcp14> be enforced in a fine-grained fashion for operations related to the creation, update, and deletion of topic resources, as well as for operations on topic-data resources such as publication on and subscription to topics. This prevents rogue clients to, among other things, repeatedly create topics at the broker or publish (large) contents, which may result in Denial of Service against the broker and the active subscribers.</t>

<t>Building on <xref target="RFC9594"/>, its application profile for publish-subscribe communication with CoAP <xref target="I-D.ietf-ace-pubsub-profile"/> provides a security model that can be used in the architecture presented in this document, in order to enable secure communication between the different parties as well as secure, authorized operations of publishers and subscribers that fulfill the requirements above.</t>

<t>In particular, the application profile above relies on the ACE framework for Authentication and Authorization in Constrained Environments (ACE) <xref target="RFC9200"/> and defines a method to: authorize publishers and subscribers to perform operations at the broker, with fine-grained access control; authorize publishers and subscribers to obtain the keying material required to take part to a topic managed by the broker that also hosts the corresponding topic-data resource; protect published data end-to-end between a publisher and all the subscribers to the targeted topic, ensuring confidentiality, integrity, and source authentication of the published content end-to-end. That approach can be extended to enforce authorization and fine-grained access control for administrator clients that are intended to create, update, and delete topics at the broker.</t>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>This document has the following actions for IANA.</t>

<t>Note to RFC Editor: Please replace all occurrences of "&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 in the IANA Media Types registry.
It is used for messages of the protocols defined in this document and carries 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", "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"/>. For all of them, the reference is &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>Code 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 code 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 code 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 code point is being used for.</t>
  <t>Experts should take into account the expected usage of fields when approving a code point assignment. Documents published via Standards Action can also register code 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="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="26" month="March" year="2026"/>
      <abstract>
	 <t>   Group communication for the Constrained Application Protocol (CoAP)
   can be secured using Group Object Security for Constrained RESTful
   Environments (Group OSCORE).  A Group Manager is responsible for
   handling the joining of new group members, as well as for managing
   and distributing the group keying material.  This document defines a
   RESTful admin interface at the Group Manager that allows an
   Administrator entity to create and delete OSCORE groups, as well as
   to retrieve and update their configuration.  The Authentication and
   Authorization for Constrained Environments (ACE) framework is used to
   enforce authentication and authorization of the Administrator at the
   Group Manager.  Protocol-specific transport profiles of ACE are used
   to achieve communication security, proof of possession, and server
   authentication.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-ace-oscore-gm-admin-17"/>
   
</reference>

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

   Note to RFC Editor: Please replace &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 1079?>

<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 anchor="version-19-to-20"><name>Version -19 to -20</name>

<t><list style="symbols">
  <t>Clarified "resource-type" field: "core.ps.data" per this specification, alternative values permitted</t>
  <t>Clarified "max-subscribers" semantics: hint at creation, enforced once stored</t>
  <t>Added explicit 4.04 removal of subscribers on topic-data deletion</t>
  <t>Merged PRs #71, #72, #73 (editorial fixes, aasvg build, example clarification)</t>
</list></t>

</section>
<section anchor="version-20-to-21"><name>Version -20 to -21</name>

<t><list style="symbols">
  <t>Addressed remaining WGLC comments from the 2026-06-17 interim (PR #76)</t>
  <t>Added eventual-consistency semantics of pubsub messages</t>
  <t>Clarified "max-subscribers": broker may store a different value or none (PR #74)</t>
  <t>Removed unused RFC 6570 URI template reference (PR #77)</t>
  <t>IANA: named the Media Types registry, clarified "code point" (PR #78)</t>
  <t>Default security from RFC 7252; OSCORE and DTLS 1.3 kept informative (PR #79)</t>
  <t>Encoded the topic FETCH filter as an application/cbor array; removed conf-filter from the registry (PR #80)</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-164 40</code>
          <country>Sweden</country>
        </postal>
        <email>marco.tiloca@ri.se</email>
      </address>
    </contact>
<t>Marco offered comprehensive reviews and insightful guidance on the recent iterations of this document. His contributions were valuable in multiple parts of the document but particularly notable in the Security Considerations section.</t>

    </section>

  </back>

<!-- ##markdown-source:
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
vZ3Pf4HBfrUdrD1+vyMt9RYN5bMZhQXZ3zObaIsdvsChlWxsZAEGwmiFns8D
ry35QCIzlaEJKuPcoSpOIOqOLXuwmBiYuTasiX7j5zsXwidC+n62WeWXJ5Rf
TCu/kFx2Ucx4pMilAC13j5LRaCd+L+oX/vZWmseiKgi22T70vDk6eLS9e7i7
f3i45VpEZQ1siwNosb0dUnlHYfEmMp9GKqWNPAg/i9aucTv41FZJgdi26bbc
0Jnv5G/RTCmevzCR31vckLo0X5uJ9BalIC3zdupn18blyW7wxsY6UKA/nxr0
NRWCE0qnnVbrg9hezHqCROJ6FyvhJHiyrkRMUFAhXsFauHyGB/ivxh8j7Qst
QGifki0kwwdesndXG+A/mO1/O2Z7t7OEK5jDYCllNJK5kVV43cGIOvC5/TL9
/g5jtezm55dB+b7O15ylRQFuQ9CiYx9sQhArh9ZXDp7O7+y8+7reqrZ80iFx
HESOnC+QMP4w6ie7f/q7EH4+W4ZZL5DEQsBbrOsTRior/+eSPysFAKlFqnWC
4+sS2/EL3MClp4W3H653rJA35fvy2tCdy52Oksjy5xn5+l1uEQ7im8+XXFUR
6FUzcPe70VkobtzZaFBGk/Kqidxz3VDpVLTnkj8YiPBUTT9xcVLO+JP1LfJ0
ovU3gayvOl19cbt5k3SrFS90O36W5+tdsKb83VZej/k1QxKt1QDc6yqjwjwR
OwpszHtwLAgCno25ZTRet7Lgwj60vk4uy5IdVAhenUfHJtv7iqWEmFw4hXf0
dtE0yrWcA0Wr8FK6qcENJomtVQHMi8/XkGIsLYMeLl+ixorRXgWl6TB5632z
6d+1WhlJlkXrMZWM2bQ1Y3zAUahbUKxNM2b1StnzSy/zFRa2DC5bQULv5kSX
l3alw5ZURqjlCqTADxZjCT0DjGA3iIcXiDFYNwzhIlLUagO5FlWNYd1vlVLa
6gwGp/nozWh6zhCNlDhkVVh4qb47Q7qbGfVO/OgfGvBfSwPeeTg6HIEGfKuR
mKmV4+Z7/zBl/E1u5F1NGe69kJC4+Tw84pprvrxjQ3j6evmiuF4IPThPHvmq
ZKdnFE1cLaVcoC3e5V9MfoaEcFEiwFDPzOp6qVwKe0ordgcRXTvCIm7PMWu+
o9amt1SidMyEJuhhz3Orteol5WEhQ47TaLM0GxIhRRCHMP4TvftRqHe71ibO
+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
rZmnalUeCx0gL005wfumneg9vvFhM0xO9c5LNMKQ8NdqroWk9Y4HongcCNW1
GJzpq7MnrwAYDMSD0a7swsn587NkNNxVkOw9VDPM5LLMJmp4aM2fU2HsbVRB
+UWVTbXag0ePJVhWr00eOqSM8UbTbE3Ol2+2p4Dd3ijGhNccevaCsvCt174g
IrsqktyYyoo1PBgsbdCUA1NMg0Qf11ZuaInciiKApI0mtTwrNLWK76PNHKvz
73cWs7WGay7R6tgoxMI0RMOx7iI3q/ICB9a8c4ZgH+B5eoOSAcdYAQS4xNWT
V2eIC2fnJ4dwBmTzt/d36Twch1ejwwTU4BiqOygqjrGyJWzWRK8ENxVSehzD
s6nY0gp8NB3IbVsS3fE8DGZyvSqI3JeZ3Gvm1WaoTC4R3CzL2gId7H3tu3Bs
BV6YExbSmLBvMhC2pMY60UKgvswpuNxpXdSavGgaIrhV5WzpzLZNCZOYl1oy
AslqMYOJgZxFEUo2kUt6i8DuLl5PNkn12lK0r9UoHqavn5gCIwQBFmfo7UAU
w8joOuhViVvKoo2f3t7rfbfMchZ8RRU53D/cQ0KL5N/HNjhCF1jGxbsd3kuc
DciSVvkl1vBscDLMTHMxSCcqrg2kL0BPuben9inRvIRNTmw9fSc88iruxsPC
a4LVHkEUPJqsTwac/4kK6NAVhhaluHXfv9nVx7C12jGtBuTdi0xIS1jVdgyn
iTVZGneyhN3vtw68bgG9jseFCyDTe8dPToGvgixBQdG4ScchscEZHcvMbRmg
J96lx6fFu6wqC57RJvS3JQixs70tLEW1m1Sq8wBojxw41q6/VPrhwyzAfrme
KKAUaUCvHt95rHKMlzVR56CJkIqb0h2SubPu4pHGzFSqoO3Fg3PdwTirkh2P
qD2jUUW8BWXF6izfINemL4+V8UQ0vosLpXflQWoFVot5n6+uwimQ6jdl6w2c
pD75RGcVfSQo3Y0NKat1s0Sqh+tfwHpS55qjayGncvs603u7RQ7r1uwoe84C
n7QlpVq0CNeggzDx7OAI3QSVVPtnxy+P24JxBrvc0t4vJZjeBZhpFgbOEzuy
2mmJvq3kdJrBnI/U6yCFT2nvygkHkU1Y3Nv48OGfzk6fP/30acMZ97ELZ9Tp
uOg3SEBCtgPqAkByccl2wBekGpOq+YZCKtz6SGsmdUtXGfasIRiSPr9esfZU
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
BAEA

-->

</rfc>

