<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-mitchell-botcentral-card-00" submissionType="independent" category="info" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true">

<front>
<title abbrev="BotCentral Card">The BotCentral Card: An Owner-Proven Consent Record for Automated Web Clients</title><seriesInfo value="draft-mitchell-botcentral-card-00" stream="independent" status="informational" name="Internet-Draft"></seriesInfo>
<author initials="R." surname="Mitchell" fullname="Rodney Mitchell"><organization>BotCentral</organization><address><postal><street></street>
</postal><email>rodneymitchellv@gmail.com</email>
<uri>https://botcentral.org</uri>
</address></author><date/>
<area>Applications</area>
<workgroup></workgroup>
<keyword>robots.txt</keyword>
<keyword>consent</keyword>
<keyword>well-known</keyword>
<keyword>AI crawlers</keyword>
<keyword>MCP</keyword>

<abstract>
<t>The Robots Exclusion Protocol (RFC 9309) lets a site say which automated clients may fetch its content. It cannot express purpose: fetching a page to answer a person is not the same act as copying it into a model training set or taking an action on the site. It also cannot prove who published the policy.</t>
<t>This document defines the BotCentral Card, a JSON record, one per domain, that states which purposes the domain owner consents to (&quot;retrieve&quot;, &quot;train&quot;, and &quot;act&quot; as separate answers), backed by a proof of domain control placed either in a DNS TXT record or at the well-known URI &quot;/.well-known/botcentral.txt&quot;. Cards are written to a registry by authenticated publishers and read by any client over HTTP or the Model Context Protocol. Clients never write cards. A card is permission to be found; it is not a ranking and not a training grant.</t>
<t>This document also registers the &quot;botcentral.txt&quot; well-known URI.</t>
</abstract>

</front>

<middle>

<section anchor="introduction"><name>Introduction</name>
<t>Search engines and web sites share a discovery layer that has accumulated over two decades: the Robots Exclusion Protocol <xref target="RFC9309"></xref>, sitemaps, IndexNow <xref target="INDEXNOW"></xref>, and, in advertising, &quot;ads.txt&quot; <xref target="ADSTXT"></xref>. Each of these is a small, public, owner-placed file that a large population of clients agrees to read.</t>
<t>Automated clients that fetch the web on behalf of AI assistants have no such layer. They have &quot;robots.txt&quot;, which was designed for crawlers and answers one question: may this product token fetch this path? It cannot say &quot;you may retrieve this page to answer a user, but you may not train on it, and you may not act on it&quot;. It cannot say who owns the site. And it cannot be queried across the web; it must be fetched one origin at a time.</t>
<t>In the absence of a shared record, every operator of such clients has built a private one. Each ships its own product tokens, often several per vendor to distinguish training from retrieval from search, together with its own submission form and its own allowlist. Site owners face an unbounded number of portals. Client operators cannot keep an unbounded number of allowlists honest.</t>
<t>This document defines a single record, the BotCentral Card, that answers those questions once. The record is built from mechanisms that already exist: &quot;robots.txt&quot; <xref target="RFC9309"></xref> for crawl permission, DNS TXT records and well-known URIs <xref target="RFC8615"></xref> for proof of control, the TDM Reservation Protocol <xref target="TDMREP"></xref> for training reservation, OAuth 2.0 client credentials <xref target="RFC6749"></xref> for publisher authentication, and HTTP entity tags <xref target="RFC9110"></xref> for caching. The card adds the one thing those mechanisms lacked: a queryable index of who opted in, for which purpose, with proof.</t>
<t>The design deliberately follows the shape of &quot;ads.txt&quot; and of the Web PKI: a proof on the origin, a public registry, and clients that refuse unsigned claims.</t>

<section anchor="requirements-language"><name>Requirements Language</name>
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;, and &quot;OPTIONAL&quot; in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when, and only when, they appear in all capitals, as shown here.</t>
</section>

<section anchor="terminology"><name>Terminology</name>

<dl spacing="compact">
<dt>Owner</dt>
<dd>The party that controls a domain, demonstrated by the proof in <xref target="proof"></xref>.</dd>
<dt>Publisher</dt>
<dd>A party authorized by an owner to write cards to a registry. Publishers authenticate with OAuth 2.0 client credentials <xref target="RFC6749"></xref>. A publisher is analogous to a seller in &quot;ads.txt&quot;.</dd>
<dt>Registry</dt>
<dd>A service that verifies proof, stores cards, and serves them. The reference registry is operated at <eref target="https://botcentral.org">https://botcentral.org</eref>.</dd>
<dt>Client</dt>
<dd>Any program that reads cards: a crawler, an assistant, a Model Context Protocol <xref target="MCP"></xref> host, or a search engine.</dd>
<dt>Card</dt>
<dd>The JSON record defined in <xref target="card"></xref>.</dd>
</dl>
</section>
</section>

<section anchor="roles"><name>Roles and Trust Model</name>
<t>Owners prove control of a domain. Publishers write cards on behalf of owners. Registries verify proof, apply defaults, compute derived fields, and serve cards. Clients read cards and honor them.</t>
<t>A registry MUST NOT accept a card write from a client. Only publishers write. A card written by a publisher does not become proven by being written; it becomes proven only when the registry independently confirms the proof in <xref target="proof"></xref>.</t>
</section>

<section anchor="card"><name>The Card</name>
<t>A card is a JSON object served with media type &quot;application/json&quot;. A registry MUST publish the card's JSON Schema <xref target="JSONSCHEMA"></xref> at &quot;/v1/schema.json&quot;. The normative field list is in <xref target="BOTCENTRAL"></xref>; this section summarizes the members whose semantics matter for interoperability.</t>

<section anchor="required-members"><name>Required Members</name>

<dl spacing="compact">
<dt>botcentral</dt>
<dd>The card version, &quot;1.0&quot; or &quot;1.1&quot;.</dd>
<dt>domain</dt>
<dd>The registrable domain in lower case.</dd>
<dt>canonical</dt>
<dd>The site's canonical origin. MUST use the &quot;https&quot; scheme.</dd>
<dt>name, summary, topics</dt>
<dd>Display name, one-paragraph description, and free-form topic tags.</dd>
<dt>allow_bots</dt>
<dd>Boolean master switch. When false, the registry MUST serve &quot;retrieve&quot;, &quot;train&quot;, and &quot;act&quot; as false regardless of what was submitted.</dd>
<dt>allow, deny</dt>
<dd>Lists of &quot;robots.txt&quot; product tokens the owner explicitly allows or denies.</dd>
<dt>pointers</dt>
<dd>Absolute URIs of the site's own &quot;robots.txt&quot;, sitemap, and &quot;llms.txt&quot;. Pointers are informational and are not proof.</dd>
<dt>pages</dt>
<dd>Declared URLs, each with a &quot;url&quot; and a &quot;rel&quot; role, and optionally a registry-computed &quot;score&quot; (<xref target="score"></xref>).</dd>
<dt>updated</dt>
<dd>An <xref target="RFC3339"></xref> timestamp of the last publisher write.</dd>
<dt>verification</dt>
<dd>The proof state (<xref target="proof"></xref>).</dd>
<dt>consent</dt>
<dd>The purpose consent block (<xref target="consent"></xref>).</dd>
</dl>
</section>

<section anchor="consent"><name>Consent</name>
<t>The &quot;consent&quot; member carries five independent answers.</t>

<dl spacing="compact">
<dt>retrieve (default true)</dt>
<dd>The client may fetch content now to answer a person or to index it for search. This includes retrieval-augmented generation and citation.</dd>
<dt>train (default false)</dt>
<dd>The client may copy the origin's content into a model training set.</dd>
<dt>act (default false)</dt>
<dd>The client may take actions on the origin: submit forms, book, purchase, invoke tools, or write.</dd>
<dt>cite (default true)</dt>
<dd>Attribution to the origin is expected when its content is used.</dd>
<dt>tdm (default &quot;reserved&quot;)</dt>
<dd>The TDM Reservation Protocol <xref target="TDMREP"></xref> value the owner asserts: &quot;open&quot;, &quot;reserved&quot;, or &quot;licensed&quot;.</dd>
</dl>
<t>The following rules apply.</t>

<ul spacing="compact">
<li>Absent members take their defaults. A registry MUST apply defaults before serving a card.</li>
<li>&quot;retrieve&quot; true does not imply &quot;train&quot; true. Retrieval is not training.</li>
<li>&quot;act&quot; true states the owner's policy only. It grants no authentication or authorization on the origin itself.</li>
<li>A registry MAY mirror &quot;tdm&quot; at &quot;/.well-known/tdmrep.json&quot; for the domain. If the origin serves its own &quot;tdmrep.json&quot; and the values conflict, the origin's own file takes precedence.</li>
</ul>
</section>

<section anchor="score"><name>Scores</name>
<t>Each declared page MAY carry a &quot;score&quot;, an integer from 0 to 100 computed by the registry from proof, consent, freshness, crawl health, page role, and surface. It is a hint for crawl ordering. Publishers MUST NOT set it, registries MUST ignore a submitted value, and clients MUST NOT present it as a ranking of sites against one another or as a claim about content quality.</t>
</section>

<section anchor="extensibility"><name>Extensibility</name>
<t>Unknown members MUST be preserved by registries and ignored by clients.</t>
</section>
</section>

<section anchor="proof"><name>Proof of Control</name>
<t>A card is proven by exactly one of two methods. Nothing else counts.</t>

<section anchor="verification-token"><name>Verification Token</name>
<t>The registry issues the publisher a per-domain verification token: an opaque string carrying at least 128 bits of entropy, encoded in URL-safe characters, bound to the pair (registry, domain).</t>
</section>

<section anchor="wkfile"><name>Method &quot;well-known-file&quot;</name>
<t>The owner serves the token at the well-known URI:</t>

<artwork><![CDATA[https://<domain>/.well-known/botcentral.txt
]]></artwork>
<t>All of the following MUST hold for the proof to pass:</t>

<ol spacing="compact">
<li>The HTTP status is 200.</li>
<li>The response &quot;Content-Type&quot; is not &quot;text/html&quot;.</li>
<li>The first 400 octets of the body, compared case-insensitively, do not contain &quot;&lt;!doctype&quot;, &quot;&lt;html&quot;, &quot;&lt;head&quot;, or &quot;&lt;body&quot;.</li>
<li>The body contains the line &quot;botcentral-verify=&lt;token&gt;&quot;.</li>
</ol>
<t>Conditions 2 and 3 exist because single-page-application hosts routinely return status 200 with an HTML shell for every path. An HTML 200 is a failed proof, not a passed one.</t>
<t>The file MAY contain multiple &quot;botcentral-verify=&quot; lines, one per registry, and MAY contain comment lines beginning with &quot;#&quot;.</t>
</section>

<section anchor="dnstxt"><name>Method &quot;dns-txt&quot;</name>
<t>The owner publishes a DNS TXT record at the apex of the domain whose data contains &quot;botcentral-verify=&lt;token&gt;&quot;. Multiple TXT records at the apex are normal; the registry MUST scan all of them. Registries SHOULD resolve through a validating resolver. The choice of resolver is outside the scope of this document.</t>
</section>

<section anchor="precedence-and-states"><name>Precedence and States</name>
<t>A registry checks <xref target="wkfile"></xref> first, then <xref target="dnstxt"></xref>. The first success is recorded in &quot;verification.method&quot;. If neither succeeds, &quot;verification.method&quot; is one of:</t>

<dl spacing="compact">
<dt>pending</dt>
<dd>A token has been issued and no check has completed.</dd>
<dt>unverified</dt>
<dd>A check completed and failed. &quot;verification.note&quot; states why: origin unreachable, &quot;robots.txt&quot; unreachable, token absent, HTML shell returned, or &quot;robots.txt&quot; contains &quot;Disallow: /&quot; for a product token the card lists in &quot;allow&quot;.</dd>
<dt>stale</dt>
<dd>A prior proof has not been re-confirmed within the freshness window (<xref target="freshness"></xref>).</dd>
</dl>
<t>&quot;verification.checked&quot; carries the <xref target="RFC3339"></xref> time of the last check, or null.</t>
</section>

<section anchor="what-is-not-proof"><name>What Is Not Proof</name>
<t>Submission through a publisher, including a registry operator's own publisher, is not proof. A reachable origin is not proof. A sitemap or &quot;llms.txt&quot; is not proof. An HTML &quot;meta&quot; element is not proof, deliberately: on a shared host any tenant can emit one, whereas the two accepted methods require control of DNS or of the &quot;/.well-known/&quot; path, which shared tenants lack.</t>
<t>A registry MUST NOT serve &quot;verification.method&quot; of &quot;dns-txt&quot; or &quot;well-known-file&quot; for any card that did not pass <xref target="dnstxt"></xref> or <xref target="wkfile"></xref> respectively.</t>
</section>
</section>

<section anchor="freshness"><name>Freshness</name>
<t>Proof decays. A registry re-checks proof periodically. The default window is 168 hours; an owner MAY set &quot;crawl.revalidate_hours&quot; to another value.</t>

<dl spacing="compact">
<dt>fresh</dt>
<dd>Proven, and the last check is within the window.</dd>
<dt>stale</dt>
<dd>Proven previously; the last check is older than the window.</dd>
<dt>unproven</dt>
<dd>&quot;verification.method&quot; is &quot;pending&quot; or &quot;unverified&quot;.</dd>
</dl>
<t>Clients SHOULD treat &quot;stale&quot; cards as listed but of lower confidence, and SHOULD treat &quot;unproven&quot; cards as unlisted for any purpose that depends on owner consent.</t>
</section>

<section anchor="registry"><name>Registry Interface</name>
<t>A registry exposes the following, relative to its origin. Anonymous reads MUST be permitted, subject to rate limiting.</t>

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

<artwork><![CDATA[GET /.well-known/botcentral-index.json
]]></artwork>
<t>Returns an object with the card version, the registry name, and absolute URIs for the catalog search, the contract documentation, the OpenAPI description, the schema, the change feed, the snapshot, and the MCP endpoint, together with a &quot;listed&quot; array of {domain, name, href} entries. All other registry resources are discoverable from this document.</t>
</section>

<section anchor="read"><name>Read</name>

<artwork><![CDATA[GET /v1/site/{domain}
GET /v1/search?q=&topic=&verified=&consent=&capability=
GET /v1/changes
GET /v1/snapshot
GET /v1/schema.json
GET /v1/openapi.json
]]></artwork>
<t>&quot;/v1/site/{domain}&quot; returns one card and MUST support &quot;ETag&quot; and &quot;If-None-Match&quot; <xref target="RFC9110"></xref>. &quot;/v1/changes&quot; is a feed of (domain, updated, etag) tuples since a cursor. &quot;/v1/snapshot&quot; returns a hash over the whole catalog so that a client can ask &quot;has anything changed?&quot; in one request, in the spirit of IndexNow <xref target="INDEXNOW"></xref>.</t>
</section>

<section anchor="model-context-protocol"><name>Model Context Protocol</name>
<t>A registry SHOULD expose an MCP <xref target="MCP"></xref> server at &quot;POST /mcp&quot;, advertised at &quot;/.well-known/mcp.json&quot;, offering at minimum the tools &quot;search_catalog&quot; and &quot;get_listed_site&quot; with semantics identical to the read interface.</t>
</section>

<section anchor="write"><name>Write</name>

<artwork><![CDATA[POST /oauth/token
PUT  /v1/publisher/sites/{domain}
POST /v1/publisher/sites/{domain}/reverify
]]></artwork>
<t>Publishers obtain tokens with the OAuth 2.0 client credentials grant <xref target="RFC6749"></xref>; authorization server metadata is published per <xref target="RFC8414"></xref> and protected resource metadata per <xref target="RFC9728"></xref>. A write MUST NOT make a card fresh; only a passed proof check does that.</t>
</section>

<section anchor="compiled-robots-txt"><name>Compiled robots.txt</name>
<t>A registry MAY compile a &quot;robots.txt&quot; <xref target="RFC9309"></xref> from a card for the owner's convenience. When it does, product tokens whose purpose is training receive &quot;Disallow: /&quot; unless &quot;consent.train&quot; is true; tokens whose purpose is retrieval remain allowed unless &quot;consent.retrieve&quot; is false; entries in &quot;allow&quot; and &quot;deny&quot; override. Some tokens, such as &quot;Google-Extended&quot; and &quot;Applebot-Extended&quot;, are control tokens that never appear as HTTP User-Agent values; a registry that publishes an agent list MUST label them as such.</t>
</section>
</section>

<section anchor="clients"><name>Client Obligations</name>
<t>A client that reads a card and then fetches the origin:</t>

<ol spacing="compact">
<li>MUST honor &quot;consent&quot; for its actual purpose. A retrieval fetch is permitted by &quot;retrieve&quot; true; using the result for training requires &quot;train&quot; true.</li>
<li>MUST still honor the origin's own &quot;robots.txt&quot;. The card never overrides it.</li>
<li>SHOULD send &quot;If-None-Match&quot; on repeat card fetches and poll &quot;/v1/snapshot&quot; rather than re-read the catalog.</li>
<li>MUST NOT treat &quot;score&quot; as a ranking or a quality claim.</li>
<li>SHOULD attribute the origin when &quot;cite&quot; is true.</li>
</ol>
</section>

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

<section anchor="server-side-request-forgery"><name>Server-Side Request Forgery</name>
<t>A registry fetches owner-supplied URLs to verify proof. It MUST resolve the target hostname before connecting and reject private, loopback, link-local, and cloud metadata address ranges; MUST require the &quot;https&quot; scheme; MUST cap redirects; and MUST enforce a timeout and a response body size limit.</t>
</section>

<section anchor="html-shells"><name>HTML Shells</name>
<t>Single-page-application hosts return status 200 for every path. The HTML rejection rules in <xref target="wkfile"></xref> are normative for this reason. A registry that accepted an HTML 200 as proof would let any tenant of such a host claim any path.</t>
</section>

<section anchor="shared-hosting"><name>Shared Hosting</name>
<t>Page content and &quot;meta&quot; elements are excluded from proof because any tenant of a shared host can emit them. The two accepted methods require control of DNS or of the &quot;/.well-known/&quot; path.</t>
</section>

<section anchor="token-replay-and-domain-transfer"><name>Token Replay and Domain Transfer</name>
<t>A token proves control at check time only. The freshness window in <xref target="freshness"></xref> bounds how long a lapsed or transferred domain keeps a proven card. Registries SHOULD shorten the window for domains whose registration data changes.</t>
</section>

<section anchor="publisher-compromise"><name>Publisher Compromise</name>
<t>A publisher can rewrite the cards it controls. Registries MUST record the writing publisher in &quot;listed_by&quot;, MUST log writes, and SHOULD provide owners a means to revoke a publisher's authority.</t>
</section>

<section anchor="consent-is-a-claim-not-an-enforcement"><name>Consent Is a Claim, Not an Enforcement</name>
<t>A card cannot stop a client that ignores it. Its value is the same as that of &quot;robots.txt&quot; and &quot;ads.txt&quot;: a public, provable record against which behavior can be audited.</t>
</section>

<section anchor="score-gaming"><name>Score Gaming</name>
<t>&quot;score&quot; is derived from proof, consent, freshness, crawl health, page role, and surface, none of which a publisher sets directly. Registries MUST NOT let a publisher influence &quot;score&quot; except through those underlying facts.</t>
</section>

<section anchor="privacy"><name>Privacy</name>
<t>Cards contain only information the owner chose to publish about a domain. A registry's change feed reveals when a domain's policy changed, which is intended. Registries SHOULD NOT log the identity of anonymous readers beyond what rate limiting requires.</t>
</section>
</section>

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

<section anchor="well-known-uri-registration"><name>Well-Known URI Registration</name>
<t>IANA is requested to register the following in the &quot;Well-Known URIs&quot; registry established by <xref target="RFC8615"></xref>:</t>

<dl spacing="compact">
<dt>URI suffix</dt>
<dd>botcentral.txt</dd>
<dt>Change controller</dt>
<dd>Rodney Mitchell (rodneymitchellv@gmail.com)</dd>
<dt>Specification document</dt>
<dd>This document, <xref target="wkfile"></xref></dd>
<dt>Status</dt>
<dd>permanent</dd>
<dt>Related information</dt>
<dd>The resource is plain text and MUST NOT be served with media type &quot;text/html&quot;. See <xref target="wkfile"></xref>.</dd>
</dl>
</section>

<section anchor="well-known-uri-registration-botcentral-index-json"><name>Well-Known URI Registration: botcentral-index.json</name>
<t>IANA is requested to register the following in the same registry:</t>

<dl spacing="compact">
<dt>URI suffix</dt>
<dd>botcentral-index.json</dd>
<dt>Change controller</dt>
<dd>Rodney Mitchell (rodneymitchellv@gmail.com)</dd>
<dt>Specification document</dt>
<dd>This document, <xref target="registry"></xref></dd>
<dt>Status</dt>
<dd>permanent</dd>
</dl>
</section>
</section>

</middle>

<back>
<references><name>References</name>
<references><name>Normative References</name>
<reference anchor="JSONSCHEMA" target="https://json-schema.org/draft/2020-12/json-schema-core">
  <front>
    <title>JSON Schema: A Media Type for Describing JSON Documents</title>
    <author initials="A." surname="Wright"></author>
    <author initials="H." surname="Andrews"></author>
    <author initials="B." surname="Hutton"></author>
    <author initials="G." surname="Dennis"></author>
    <date year="2022"></date>
  </front>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8414.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9728.xml"/>
</references>
<references><name>Informative References</name>
<reference anchor="ADSTXT" target="https://iabtechlab.com/ads-txt/">
  <front>
    <title>ads.txt Specification Version 1.1</title>
    <author>
      <organization>IAB Technology Laboratory</organization>
    </author>
    <date year="2022"></date>
  </front>
</reference>
<reference anchor="BOTCENTRAL" target="https://github.com/mitchvac/botcentral/blob/main/SPEC.md">
  <front>
    <title>BotCentral Card Specification 1.1</title>
    <author initials="R." surname="Mitchell"></author>
    <date year="2026"></date>
  </front>
</reference>
<reference anchor="INDEXNOW" target="https://www.indexnow.org/documentation">
  <front>
    <title>IndexNow Protocol</title>
    <author>
      <organization>Microsoft Bing and Yandex</organization>
    </author>
    <date year="2021"></date>
  </front>
</reference>
<reference anchor="MCP" target="https://modelcontextprotocol.io/specification">
  <front>
    <title>Model Context Protocol Specification</title>
    <author>
      <organization>Anthropic, PBC</organization>
    </author>
    <date year="2025"></date>
  </front>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6749.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8615.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9309.xml"/>
<reference anchor="TDMREP" target="https://www.w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240202/">
  <front>
    <title>TDM Reservation Protocol (TDMRep)</title>
    <author>
      <organization>W3C TDM Reservation Protocol Community Group</organization>
    </author>
    <date year="2024"></date>
  </front>
</reference>
</references>
</references>

<section anchor="example-card"><name>Example Card</name>

<sourcecode type="json"><![CDATA[{
  "botcentral": "1.1",
  "domain": "fieldnote.press",
  "canonical": "https://fieldnote.press/",
  "name": "Field Note",
  "summary": "Independent reporting on local government.",
  "topics": ["news", "infrastructure"],
  "allow_bots": true,
  "allow": ["ClaudeBot", "OAI-SearchBot"],
  "deny": [],
  "pointers": {
    "robots": "https://fieldnote.press/robots.txt",
    "sitemap": "https://fieldnote.press/sitemap.xml",
    "llms": "https://fieldnote.press/llms.txt"
  },
  "pages": [
    { "url": "https://fieldnote.press/", "rel": "home", "score": 94 }
  ],
  "updated": "2026-08-30T14:02:11Z",
  "verification": {
    "method": "well-known-file",
    "checked": "2026-08-31T09:10:00Z",
    "note": "Token matched /.well-known/botcentral.txt (plain text)."
  },
  "consent": {
    "retrieve": true,
    "train": false,
    "act": false,
    "cite": true,
    "tdm": "reserved"
  },
  "freshness": {
    "status": "fresh",
    "checked": "2026-08-31T09:10:00Z",
    "revalidate_hours": 168
  },
  "listed_by": { "id": "citefleet", "name": "CiteFleet" }
}
]]></sourcecode>
</section>

<section anchor="example-proof-files"><name>Example Proof Files</name>
<t>A &quot;/.well-known/botcentral.txt&quot;:</t>

<artwork><![CDATA[# BotCentral proof of control. Plain text. Not HTML.
botcentral-verify=Kx7mQ2vB9pR4tY8wZ1aC3dF6gH0jL5nP
]]></artwork>
<t>A DNS TXT record at the apex:</t>

<artwork><![CDATA[fieldnote.press. 3600 IN TXT
    "botcentral-verify=Kx7mQ2vB9pR4tY8wZ1aC3dF6gH0jL5nP"
]]></artwork>
</section>

<section anchor="relationship-to-existing-mechanisms"><name>Relationship to Existing Mechanisms</name>

<dl spacing="compact">
<dt>robots.txt <xref target="RFC9309"></xref></dt>
<dd>Answers &quot;may this token fetch this path?&quot;. The card answers &quot;for what purpose, and says who?&quot;. The card never overrides &quot;robots.txt&quot;.</dd>
<dt>TDM Reservation Protocol <xref target="TDMREP"></xref></dt>
<dd>Expresses a training reservation for an origin. The card carries the same value in &quot;consent.tdm&quot; and defers to the origin's own file on conflict.</dd>
<dt>ads.txt <xref target="ADSTXT"></xref></dt>
<dd>The model for this design: an owner-placed plain-text file on the origin, authorized sellers, and buyers that refuse unlisted claims.</dd>
<dt>IndexNow <xref target="INDEXNOW"></xref></dt>
<dd>The model for the change feed and snapshot: tell clients what changed instead of making them recrawl.</dd>
</dl>
</section>

<section anchor="acknowledgements"><name>Acknowledgements</name>
<t>The structure of this document follows the guidance at authors.ietf.org. The &quot;ads.txt&quot; and IndexNow designs informed the trust model and the change feed respectively.</t>
</section>

</back>

</rfc>
