<?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.5 (Ruby 2.6.10) -->


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

<!ENTITY RFC8615 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8615.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC9264 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9264.xml">
<!ENTITY RFC7284 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7284.xml">
<!ENTITY RFC8288 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8288.xml">
<!ENTITY RFC8631 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8631.xml">
]>

<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-httpapi-api-catalog-05" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="api-catalog well-known URI">api-catalog: a well-known URI and link relation to help discovery of APIs</title>

    <author initials="K." surname="Smith" fullname="Kevin Smith">
      <organization>Vodafone</organization>
      <address>
        <email>kevin.smith@vodafone.com</email>
        <uri>https://www.vodafone.com</uri>
      </address>
    </author>

    <date />

    <area>IETF</area>
    
    <keyword>internet-draft</keyword>

    <abstract>


<?line 78?>

<t>This document defines the "api-catalog" well-known URI and link relation. It is intended to facilitate automated discovery and usage of the APIs published by a given organisation or individual. A request to the api-catalog resource will return a document providing information about, and links to, the publisher's APIs.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-httpapi.github.io/api-catalog/draft-ietf-httpapi-api-catalog.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpapi-api-catalog/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Building Blocks for HTTP APIs Working Group mailing list (<eref target="mailto:httpapi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/httpapi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/httpapi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-httpapi/api-catalog"/>.</t>
    </note>


  </front>

  <middle>


<?line 83?>

<section anchor="introduction"><name>Introduction</name>

<t>An organisation or individual may publish Application Programming Interfaces (APIs) to encourage requests for interaction from external parties. Such APIs must be discovered before they may be used - i.e., the external party needs to know what APIs a given publisher exposes, their purpose, any policies for usage, and the endpoint to interact with each API. To facilitate automated discovery of this information, and automated usage of the APIs, this document proposes:</t>

<t><list style="symbols">
  <t>a well-known URI, 'api-catalog', as a reference to the URI of an API Catalog document describing a Publisher's API endpoints.</t>
  <t>a link relation, 'api-catalog', of which the target resource is the Publisher's API Catalog document.</t>
</list></t>

<section anchor="goals"><name>Goals and non-goals</name>

<t>The primary goal is to facilitate the automated discovery of a Publisher's public API endpoints, along with metadata that describes the purpose and usage of each API, by specifying a well-known URI <xref target="RFC8615"/> that returns an API catalog document. The API catalog document is primarily machine-readable to enable automated discovery and usage of APIs, and it may also include links to human-readable documentation.</t>

<t>Non-goals: this document does not mandate paths for API endpoints. i.e., it does not mandate that my_example_api's endpoint should be example.com/.well-known/api-catalog/my_example_api , nor even to be hosted at example.com (although it is not forbidden to do so). This document does not mandate a specific format for the API catalog document, although it does suggest some existing formats and provide a recommendation.</t>

</section>
<section anchor="notational-conventions"><name>Notational Conventions</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
These words may also appear in this document in
lower case as plain English words, absent their normative meanings.
<?line -8?></t>

<t>The term "content negotiation" and "status code" are from <xref target="HTTP"/>.
The term well-known URI is from <xref target="RFC8615"/>.</t>

<t>The term "Publisher" refers to an organisation, company or individual that publishes one or more APIs for usage by external third parties.</t>

</section>
</section>
<section anchor="usage"><name>Using the 'api-catalog' well-known URI</name>

<t>The api-catalog well-known URI is intended for HTTP(S) servers that publish APIs. As the key aim is to facilitate discovery and usage of APIs, a Publisher supporting this URI:</t>

<t><list style="symbols">
  <t>SHOULD publish the /.well-known/api-catalog URI at a predictable location. For example as companies typically own a .com TLD, a predictable location for the company 'example' would be https://www.example.com/.well-known/api-catalog</t>
  <t>SHALL resolve an HTTP(S) GET request to /.well-known/api-catalog and return an API catalog document ( as described in <xref target="API-CATALOG"/> ).</t>
  <t>SHOULD resolve an HTTP(S) HEAD request to /.well-known/api-catalog with a response including a Link header with the relation(s) defined in <xref target="LINK-RELATION"/></t>
</list></t>

<t>The location (URL) of the API Catalog document is decided by the Publisher: the ./well-known/api-catalog URI provides a convenient reference to that URL.</t>

</section>
<section anchor="LINK-RELATION"><name>Link relations</name>

<t><list style="symbols">
  <t>"api-catalog": the 'api-catalog' link relation identifies a target resource that represents a list of APIs available from the Publisher of the context resource. The target resource URI may be ./well-known/api-catalog , or any other URI chosen by the Publisher. For example, the Publisher 'example.com' could include the api-catalog link relation in the HTTP header and/or content payload when responding to a request to https://example.com :</t>
</list></t>

<figure><sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Location: http://www.example.com/
Link: </my_api_catalog.json>; rel=api-catalog
Content-Length: 356

<!DOCTYPE HTML>
  <html>
    <head>
      <title>Welcome to Example Publisher</title>
    </head>
    <body>
      <p><a href="my_api_catalog.json" rel="api-catalog">Example Publisher's APIs</a>.</p>
      <p>(remainder of content)</p>
    </body>
  </html>

]]></sourcecode></figure>

<t><list style="symbols">
  <t>"item" <xref target="RFC9264"/>. When used in an API Catalog document, the 'item' link relation identifies a target resource that represents an API that is a member of the API Catalog.</t>
</list></t>

</section>
<section anchor="multiple_domains"><name>Accounting for APIs distributed across multiple domains</name>

<t>A Publisher ('example') may have their APIs hosted across multiple domains that they manage: e.g., at example.com, developer.example.com, apis.example.com, apis.example.net etc. They may also use a third party API hosting provider which hosts APIs on a distinct domain.</t>

<t>To account for this scenario, it is RECOMMENDED that:</t>

<t><list style="symbols">
  <t>the Publisher publish the api-catalog well-known URI at a predictable location, e.g. example.com/.well-known/api-catalog .</t>
  <t>the Publisher also publish the api-catalog well-known URI at each of their API domains e.g. apis.example.com/.well-known/api-catalog, developer.example.net/.well-known/api-catalog etc.</t>
  <t>an HTTP GET request to any of these URIs returns the same result, namely, the API Catalog document.</t>
  <t>since the physical location (URL) of the API Catalog document is decided by the Publisher, and may change, the Publisher choose one of their instances of .well-known/api-catalog as a canonical reference to the location of the latest API Catalog. The Publisher's other instances of ./well-known/api-catalog SHOULD redirect to this canonical instance of /.well-known/api-catalog , using HTTP Status Code 308 (Permanent Redirect), to ensure the latest API Catalog is returned.</t>
</list></t>

<t>As illustration, if the Publisher's primary API portal is apis.example.com, then apis.example.com/.well-known/api-catalog should resolve to the location of the latest API Catalog document. If the Publisher is also the domain authority for example.net, which also hosts a selection of their APIs, then a request to www.example.net/.well-known/api-catalog SHOULD return a redirect as follows.</t>

<t>Client request:</t>

<figure><sourcecode type="http-message"><![CDATA[
GET /.well-known/api-catalog HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.net
]]></sourcecode></figure>

<t>Server response:</t>

<figure><sourcecode type="http-message"><![CDATA[
HTTP/1.1 308 Permanent Redirect
Content-Type: text/html; charset=UTF-8
Location: http://apis.example.com/.well-known/api-catalog
Content-Length: 356

<!DOCTYPE HTML>
  <html>
    <head>
      <title>Permanent Redirect</title>
      <meta http-equiv="refresh" content="0; url=https://apis.example.com/.well-known/api-catalog">
    </head>
    <body>
      <p>Redirected to:  <a href=https://apis.example.com/.well-known/api-catalog>https://apis.example.com/.well-known/api-catalog</a>.</p>
    </body>
  </html>

]]></sourcecode></figure>

</section>
<section anchor="INTERNAL-USE"><name>Internal use of api-catalog for private APIs</name>

<t>A Publisher may wish to use the api-catalog well-known URI on their internal network, to signpost authorised users (e.g. company employees) towards internal/private APIs not intended for third-party use. This scenario may incur additional security considerations, as noted in <xref target="security"/>.</t>

</section>
<section anchor="API-CATALOG"><name>The API Catalog</name>

<t>The API Catalog is a document listing hyperlinks to a Publisher's APIs. The Publisher may host this API Catalog document at any URI(s) they choose. Hence the API Catalog document URI of example.com/my_api_catalog.json can be requested directly, or via a request to example.com/.well-known/api-catalog, which the Publisher will resolve to example.com/my_api_catalog.</t>

<t>The Publisher MUST publish the API Catalog document in the Linkset format application/linkset+json (section 4.2 of <xref target="RFC9264"/>). In addition, the Publisher MAY make additional formats available via content negotiation (section 5.3 of <xref target="HTTP"/>) to their /.well-known/api-catalog location. A non-exhaustive list of such formats that support the automated discovery, and machine (and human) usage of a Publisher's APIs, is listed below.</t>

<t>The API Catalog document MUST include hyperlinks to API endpoints, and is RECOMMENDED to include useful metadata, such as usage policies, API version information, links to the OpenAPI Specification <xref target="OAS"></xref> definitions for each API, etc. . If the Publisher does not include these metadata directly in the API Catalog document, they SHOULD make that metadata available at the API endpoint URIs they have listed (see <xref target="api-catalog-example-linkset-bookmarks"/> for an example).</t>

<t>Some suitable API Catalog document formats include:</t>

<t><list style="symbols">
  <t>(RECOMMENDED) A linkset in JSON Document format (section 4.2 of <xref target="RFC9264"/>) of API endpoints and information to facilitate API usage. The linkset SHOULD include a profile parameter (section 5 of <xref target="RFC9264"/>) with a Profile URI <xref target="RFC7284"/> value of 'THIS-RFC-URL' to indicate the linkset is representing an API Catalog document as defined above. Appendix A includes example API Catalog documents based on the linkset format.</t>
  <t>An APIs.json document <xref target="APIsjson"></xref></t>
  <t>API bookmarks that represent an API entry-point URI, which may be followed to discover purpose and usage</t>
  <t>A RESTDesc semantic description for hypermedia APIs <xref target="RESTdesc"></xref></t>
  <t>A Hypertext Application Language document <xref target="HAL"></xref></t>
  <t>An extension to the Schema.org WebAPI type <xref target="WebAPIext"></xref>.</t>
</list></t>

<t>If a Publisher already lists their APIs in a format other than linkset but wish to utiise the /.well-known/api-catalog URI, then:
* they MUST also implement a linkset with, at minimum, hyperlinks to API endpoints - see the exmple of  <xref format="title" target="api-catalog-example-linkset-bookmarks"/> in Appendix A.
* they MAY support content negotiation at the /.well-known/api-catalog URI to allow their existing format to be returned.</t>

</section>
<section anchor="CONFORM-RFC8615"><name>Conformance to RFC8615</name>

<t>The requirements in section 3 of <xref target="RFC8615"/> for defining Well-Known Uniform Resource Identifiers are met as follows:</t>

<section anchor="path-suffix"><name>Path suffix</name>

<t>The api-catalog URI SHALL be appended to the /.well-known/ path-prefix for "well-known locations".</t>

</section>
<section anchor="supported-uri-schemes"><name>Supported URI schemes</name>

<t>The api-catalog well-known URI may be used with the HTTP and HTTPS URI schemes.</t>

</section>
<section anchor="formats-and-associated-media-types"><name>Formats and associated media types</name>

<t>A /.well-known/api-catalog location MUST support the Linkset <xref target="RFC9264"/> format of application/linkset+json, and MAY
also support the other formats via content negotiation.</t>

</section>
<section anchor="registration-of-the-api-catalog-well-known-uri"><name>Registration of the api-catalog well-known URI</name>

<t>See <xref target="IANA"/> considerations below.</t>

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

<section anchor="the-api-catalog-well-known-uri"><name>The api-catalog well-known URI</name>

<t>This specification registers the "api-catalog" well-known URI in the Well-Known URI Registry as defined by <xref target="RFC8615"/>.</t>

<t><list style="symbols">
  <t>URI suffix: api-catalog</t>
  <t>Change Controller: IETF</t>
  <t>Specification document(s):  THIS-RFC</t>
  <t>Status: permanent</t>
  <t>Related information:  The "api-catalog" documents obtained from the same host using the HTTP and HTTPS protocols (using default ports) MUST be identical.</t>
</list></t>

</section>
<section anchor="the-api-catalog-link-relation"><name>The api-catalog link relation</name>

<t>This specification registers the "api-catalog" link relation by following the procedures per section 2.1.1.1 of <xref target="RFC8288"/></t>

<t><list style="symbols">
  <t>Relation Name:  api-catalog</t>
  <t>Description:  The link target identifies a catalog of APIs published by the owner of the link context.</t>
  <t>Reference:  THIS-RFC</t>
</list></t>

</section>
<section anchor="the-api-catalog-profile-uri"><name>the api-catalog Profile URI</name>

<t>This specification registers "THIS-RFC-URL" in the "Profile URIs" registry according to <xref target="RFC7284"/>.</t>

<t><list style="symbols">
  <t>Profile URI: THIS-RFC-URL</t>
  <t>Common Name: API Catalog</t>
  <t>Description: A profile URI to request or signal a linkset representing an API Catalog.</t>
  <t>Reference: THIS-RFC</t>
</list></t>

<t>RFC Editor's Note: IANA is kindly requested to replace all instances of THIS-RFC and THIS-RFC-URL with the actual RFC number/URL once assigned.</t>

</section>
</section>
<section anchor="security"><name>Security Considerations</name>

<t>For all scenarios: the Publisher SHOULD perform a security and privacy review of the API Catalog prior to deployment, to ensure it does not leak personal, business or other sensitive metadata, nor expose any vulnerability related to the APIs listed.</t>

<t>For the internal/private APIs scenario: the Publisher SHOULD take steps to ensure that appropriate access controls are in place to ensure only authorised users access the internal api-catalog well-known URI.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">
 <reference anchor="HTTP">
   <front>
     <title>HTTP Semantics</title>
     <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
     <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
     <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
     <date month="June" year="2022"/>
     <abstract>
       <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
       <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
     </abstract>
   </front>
   <seriesInfo name="STD" value="97"/>
   <seriesInfo name="RFC" value="9110"/>
   <seriesInfo name="DOI" value="10.17487/RFC9110"/>
 </reference>

&RFC8615;
&RFC2119;
&RFC8174;
&RFC9264;
&RFC7284;
&RFC8288;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="OAS" target="https://spec.openapis.org/oas/latest">
  <front>
    <title>OpenAPI Specification 3.1.0</title>
    <author initials="" surname="Darrel Miller">
      <organization></organization>
    </author>
    <author initials="" surname="Jeremy Whitlock">
      <organization></organization>
    </author>
    <author initials="" surname="Marsh Gardiner">
      <organization></organization>
    </author>
    <author initials="" surname="Mike Ralphson">
      <organization></organization>
    </author>
    <author initials="" surname="Ron Ratovsky">
      <organization></organization>
    </author>
    <author initials="" surname="Uri Sarid">
      <organization></organization>
    </author>
    <date year="2021" month="February" day="15"/>
  </front>
</reference>
<reference anchor="APIsjson" target="http://apisjson.org/format/apisjson_0.16.txt">
  <front>
    <title>APIs.json</title>
    <author initials="" surname="Kin Lane">
      <organization></organization>
    </author>
    <author initials="" surname="Steve Willmott">
      <organization></organization>
    </author>
    <date year="2020" month="September" day="15"/>
  </front>
</reference>
<reference anchor="HAL" target="https://datatracker.ietf.org/doc/html/draft-kelly-json-hal-11">
  <front>
    <title>JSON Hypertext Application Language</title>
    <author initials="" surname="Mike Kelly">
      <organization></organization>
    </author>
    <date year="2020" month="September" day="15"/>
  </front>
</reference>
<reference anchor="RESTdesc" target="http://apisjson.org/format/apisjson_0.16.txt">
  <front>
    <title>RESTdesc</title>
    <author initials="" surname="Ruben Verborgh">
      <organization></organization>
    </author>
    <author initials="" surname="Erik Mannens">
      <organization></organization>
    </author>
    <author initials="" surname="Rick Van de Walle">
      <organization></organization>
    </author>
    <author initials="" surname="Thomas Steiner">
      <organization></organization>
    </author>
    <date year="2023" month="September" day="15"/>
  </front>
</reference>
<reference anchor="WebAPIext" target="https://webapi-discovery.github.io/rfcs/rfc0001.html">
  <front>
    <title>WebAPI type extension</title>
    <author initials="" surname="Mike Ralphson">
      <organization></organization>
    </author>
    <author initials="" surname="Nick Evans">
      <organization></organization>
    </author>
    <date year="2020" month="July" day="08"/>
  </front>
</reference>
&RFC8631;


    </references>


<?line 277?>

<section anchor="api-catalog-example-linkset"><name>Example API Catalog documents</name>

<t>This section is informative, and provides and example of an API Catalog document using the RECOMMENDED linkset format.</t>

<section anchor="using-linkset-with-rfc8615-relations"><name>Using Linkset with RFC8615 relations</name>

<t>This example uses the linkset format <xref target="RFC9264"/>, and the following link relations defined in <xref target="RFC8631"/>:</t>

<t><list style="symbols">
  <t>"service-desc", used to link to a description of the API that is primarily intended for machine consumption.</t>
  <t>"service-doc", used to link to API documentation that is primarily intended for human consumption.</t>
  <t>"service-meta", used to link to additional metadata about the API, and is primarily intended for machine consumption.</t>
  <t>"status", used to link to the API status (e.g. API "health" indication etc.) for machine and/or human consumption.</t>
</list></t>

<t>Client request:</t>

<figure><sourcecode type="http-message"><![CDATA[
GET .well-known/api-catalog HTTP/1.1
Host: example.com
Accept: application/linkset+json
]]></sourcecode></figure>

<t>Server response:</t>

<figure><sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Mon, 01 Jun 2023 00:00:01 GMT
Server: Apache-Coyote/1.1
Content-Type: application/linkset+json;
    profile="THIS-RFC-URL"
]]></sourcecode></figure>

<figure><artwork><![CDATA[
{
  "linkset": [
  {
    "anchor": "https://developer.example.com/apis/foo_api",
    "service-desc": [
      {
        "href": "https://developer.example.com/apis/foo_api/spec",
        "type": "application/yaml"
      }
    ],
    "status": [
      {
        "href": "https://developer.example.com/apis/foo_api/status",
        "type": "application/json"
      }
    ],
    "service-doc": [
      {
        "href": "https://developer.example.com/apis/foo_api/doc",
        "type": "text/html"
      }
    ],
    "service-meta": [
      {
        "href": "https://developer.example.com/apis/foo_api/policies",
        "type": "text/xml"
      }
    ]
  },
  {
    "anchor": "https://developer.example.com/apis/bar_api",
    "service-desc": [
      {
        "href": "https://developer.example.com/apis/bar_api/spec",
        "type": "application/yaml"
      }
    ],
    "status": [
      {
        "href": "https://developer.example.com/apis/bar_api/status",
       "type": "application/json"
      }
    ],
    "service-doc": [
      {
        "href": "https://developer.example.com/apis/bar_api/doc",
        "type": "text/plain"
      }
    ]
  },
  {
    "anchor": "https://apis.example.net/apis/cantona_api",
    "service-desc": [
      {
        "href": "https://apis.example.net/apis/cantona_api/spec",
        "type": "text/n3"
      }
    ],
    "service-doc": [
      {
        "href": "https://apis.example.net/apis/cantona_api/doc",
        "type": "text/html"
      }
    ]
  }
  ]
}
]]></artwork></figure>

</section>
<section anchor="api-catalog-example-linkset-bookmarks"><name>Using Linkset with bookmarks</name>

<t>This example also uses the linkset format <xref target="RFC9264"/>, listing the API endpoints in an array of bookmarks. Each link shares the same context (the API Catalog) and "item" <xref target="RFC9264"/> link relation (to indicate they are an item in the catalog).The intent is that by following a bookmark link, a machine-client can discover the purpose and usage of each API, hence the document targeted by the bookmark link should support this.</t>

<t>Note in the example below, the context anchor is example/com/.well-known/api-catalog, however as explained above the  context anchor may be any other URI at which the api-catalog is available.</t>

<t>Client request:</t>

<figure><sourcecode type="http-message"><![CDATA[
GET .well-know/api-catalog HTTP/1.1
Host: example.com
Accept: application/linkset+json
]]></sourcecode></figure>

<t>Server response:</t>

<figure><sourcecode type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Mon, 01 Jun 2023 00:00:01 GMT
Server: Apache-Coyote/1.1
Content-Type: application/linkset+json;
    profile="THIS-RFC-URL"
]]></sourcecode></figure>

<figure><artwork><![CDATA[
[
  { "anchor": "https://example.com/.well-known/api-catalog",
    "item": [
      {"href": "https://developer.example.com/apis/foo_api"},
      {"href": "https://developer.example.com/apis/bar_api"},
      {"href": "https://developer.example.com/apis/cantona_api"}
    ]
  }
]
]]></artwork></figure>

</section>
</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Thanks to Phil Archer, Ben Bucksch, Sanjay Dalal, Max Maton, Darrel Miller, Mark Nottingham,  Roberto Polli, Rich Salz, Herbert Van De Sompel and Erik Wilde for their suggestions and feedback.</t>

</section>


  </back>

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

-->

</rfc>

