
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Fri, 17 Apr 2026 15:14:21 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Redirects for AI Training enforces canonical content]]></title>
            <link>https://blog.cloudflare.com/ai-redirects/</link>
            <pubDate>Fri, 17 Apr 2026 13:00:00 GMT</pubDate>
            <description><![CDATA[ Soft directives don’t stop crawlers from ingesting deprecated content. Redirects for AI Training allows anybody on Cloudflare to redirect verified crawlers to canonical pages with one toggle and no origin changes. ]]></description>
            <content:encoded><![CDATA[ <p>Cloudflare's Wrangler CLI has published several major versions over the past six years, each containing at least some critical changes to commands, configuration, or how developers interact with the platform. Like any actively maintained open-source project, we keep documentation for older versions available. The <a href="https://developers.cloudflare.com/workers/wrangler/migration/v1-to-v2/wrangler-legacy/"><u>v1 documentation</u></a> carries a deprecation banner, a <a href="https://developers.google.com/search/docs/crawling-indexing/block-indexing"><u>noindex meta tag</u></a>, and canonical tags pointing to current docs. Every advisory signal says the same thing: this content is outdated, look elsewhere. AI training crawlers don’t reliably honor those signals. </p><p>We use <a href="https://developers.cloudflare.com/ai-crawl-control/"><u>AI Crawl Control</u></a> on <a href="http://developers.cloudflare.com"><u>developers.cloudflare.com</u></a>, so we know that bots in the <a href="https://radar.cloudflare.com/bots/directory?category=AI_CRAWLER"><u>AI Crawler Category</u></a> visited 4.8 million times over the last 30 days, and they consumed deprecated content at the same rate as current content. The advisory signals made no measurable difference. The effect is cumulative because AI agents don't always fetch content live; they draw on trained models. When crawlers ingest deprecated docs, agents inherit outdated foundations.</p><p>Today, we’re launching <a href="https://developers.cloudflare.com/ai-crawl-control/reference/redirects-for-ai-training/"><u>Redirects for AI Training</u></a> to let you enforce that verified AI training crawlers are redirected to up-to-date content. Your existing canonical tags become <code>HTTP 301</code> redirects for verified AI training crawlers, automatically, with one toggle, on all paid Cloudflare plans.</p><p>And because status codes are ultimately how the web communicates policy to crawlers, <a href="https://radar.cloudflare.com/ai-insights"><u>Radar's AI Insights</u></a> page now includes <a href="https://radar.cloudflare.com/ai-insights#response-status"><u>Response status code analysis</u></a> showing the various types (<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#successful_responses"><u>successful</u></a> (<code>2xx</code>), <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#redirection_messages"><u>redirection</u></a> (<code>3xx</code>), <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#client_error_responses"><u>client error</u></a> (<code>4xx</code>), and <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#server_error_responses"><u>server error</u></a> (<code>5xx</code>) of status codes AI crawlers receive across all Cloudflare traffic as a view of how the web responds to AI crawlers today.</p>
    <div>
      <h2>AI training crawlers face dead ends today</h2>
      <a href="#ai-training-crawlers-face-dead-ends-today">
        
      </a>
    </div>
    <p>For search engines, <code>noindex</code> functions as a rich signal system, but there’s no equivalent inline directive a page can carry that says “don’t train on this”. Keeping a deprecated page live with a warning banner may work for humans, who read the notice and navigate on, but AI training crawlers ingest the full text and risk treating the banner as just one more paragraph, returning thousands of times even after the warning is visible.</p><p>Blocking creates its own problem: it produces a void with no signal about what the crawler should learn instead. <code>robots.txt</code> offers limited protection, but as automated traffic grows, maintaining per-crawler, per-path, per-content-update directives requires hefty manual upkeep. What crawlers need is specific direction: “Here is where the current content lives.”</p><p>The <code>&lt;link rel="canonical"&gt;</code> tag is an HTML element defined in <a href="https://www.rfc-editor.org/rfc/rfc6596"><u>RFC 6596</u></a> that tells search engines and automated systems which URL represents the authoritative version of a page. It’s already present on <a href="https://almanac.httparchive.org/en/2025/seo#raw-versus-rendered-canonical-tags"><u>65-69% of web pages</u></a> and is generated automatically by platforms like <a href="https://blog.cloudflare.com/emdash-wordpress/"><u>EmDash</u></a>, WordPress, and Contentful. That infrastructure declares what the current version of your content is, and Redirects for AI Training enforces it.</p>
    <div>
      <h2>How it works</h2>
      <a href="#how-it-works">
        
      </a>
    </div>
    <p>Redirects for AI Training operates on two inputs: Cloudflare's <a href="https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/cf.verified_bot_category/"><code><u>cf.verified_bot_category</u></code></a> field and the <code>&lt;link rel="canonical"&gt;</code> tags already in your HTML. The <a href="https://developers.cloudflare.com/bots/concepts/bot/verified-bots/#categories"><u>AI Crawler category</u></a> covers bots that crawl for AI model training, including GPTBot, ClaudeBot, and Bytespider, and is distinct from the <a href="https://developers.cloudflare.com/bots/concepts/bot/verified-bots/#categories"><u>AI Assistant</u></a> and <a href="https://developers.cloudflare.com/bots/concepts/bot/verified-bots/#categories"><u>AI Search</u></a> categories that cover AI Agents.</p><p>When a request arrives from a verified AI Crawler, Cloudflare reads the response HTML. If a non-self-referencing canonical tag is present, Cloudflare issues a <code>301 Moved Permanently</code> to the canonical URL before returning the response. Human traffic, search indexing, and other automated traffic is unaffected.</p><p>Here’s what the exchange looks like for a GPTBot request to a deprecated path:</p>
            <pre><code>GET /durable-objects/api/legacy-kv-storage-api/

Host: developers.cloudflare.com

User-Agent: Mozilla/5.0 (compatible; GPTBot/1.1; +https://openai.com/gptbot)
</code></pre>
            
            <pre><code>HTTP/1.1 301 Moved Permanently

Location: https://developers.cloudflare.com/durable-objects/api/sqlite-storage-api/
</code></pre>
            
    <div>
      <h3>What this does not do</h3>
      <a href="#what-this-does-not-do">
        
      </a>
    </div>
    <p>It doesn't retroactively correct training data already ingested or cover unverified crawlers outside the AI Crawler bot category. Humans and AI Agents visiting deprecated pages will not be redirected. We also exclude cross-origin canonicals by design (tags directing to preferred URLs on different domains), since they’re often used for domain consolidation rather than content freshness. To avoid loops, self-referencing canonicals (a tag on a page pointing to its own URL) don't trigger a redirect either.</p>
    <div>
      <h3>Why not just use redirect rules? </h3>
      <a href="#why-not-just-use-redirect-rules">
        
      </a>
    </div>
    <p><a href="https://developers.cloudflare.com/rules/url-forwarding/single-redirects/"><u>Single Redirect Rules</u></a> can target AI crawlers by user-agent string, and if a site has just a handful of known deprecated paths, that works. But it doesn't scale: every new deprecated path requires a change to the rule, user-agents must be manually tracked, and it would contribute to <a href="https://developers.cloudflare.com/rules/url-forwarding/#availability"><u>plan limitations</u></a> that may otherwise be used for campaign URLs or domain migrations. Redirect rules also manually re-encode what canonical tags already declare and fall out of sync as content changes.</p>
    <div>
      <h2>What we found on our own documentation site</h2>
      <a href="#what-we-found-on-our-own-documentation-site">
        
      </a>
    </div>
    <p>Our own experience shows that this problem is real. We run AI Crawl Control on <a href="http://developers.cloudflare.com"><u>developers.cloudflare.com</u></a> using the same dashboard available to all Cloudflare customers. In March 2026, legacy Workers documentation was crawled around 46,000 times by OpenAI, 3,600 times by Anthropic, and 1,700 times by Meta. </p><p>That crawling of deprecated pages may be why when we asked a leading AI assistant in April 2026, "How do I write KV values using the Wrangler CLI?", it gave an out-of-date answer: "You write to Cloudflare KV via the Wrangler CLI using the kv:key put command."</p><p>In fact, the correct syntax (as at April 2026) is <code>wrangler kv key put</code>; the colon syntax (<code>kv:key put</code>) was deprecated in Wrangler 3.60.0. Our documentation <a href="https://developers.cloudflare.com/kv/reference/kv-commands/#deprecations"><u>carries an inline deprecation notice</u></a>, but it's unclear how training pipelines interpret them.  </p><p>So we enabled Redirects for AI Training on developers.cloudflare.com and measured the response. In the first seven days, 100% of AI training crawler requests to pages with non-self-referencing canonical tags were redirected and were not served with deprecated content. </p><p>We expect that redirecting crawlers to current content eventually improves AI-generated answers about legacy tools. Given the closed nature of training pipelines and variability in recrawl timing, this is a hypothesis we will continue to verify. But what the crawler receives at the point of access has seen immediate improvement.</p>
    <div>
      <h2>How to enable</h2>
      <a href="#how-to-enable">
        
      </a>
    </div>
    <p>If your site has canonical tags, your existing content hierarchy can now be enforced for verified AI training crawlers. Cloudflare's <a href="https://developers.cloudflare.com/bots/concepts/bot/verified-bots/"><u>verified bot classification</u></a> handles crawler identification automatically.</p><p><b>In the dashboard:</b> on any domain, go to <b>AI Crawl Control &gt; Quick Actions &gt; Redirects for AI training &gt; toggle on. </b></p><p>For path-specific control via Configuration Rules and Cloudflare for SaaS, see the <a href="https://developers.cloudflare.com/ai-crawl-control/reference/redirects-for-ai-training/"><u>full documentation</u></a>.</p>
    <div>
      <h2>How the web responds to AI crawlers</h2>
      <a href="#how-the-web-responds-to-ai-crawlers">
        
      </a>
    </div>
    <p>Redirects for AI Training turns one status code, <code>301 Moved Permanently</code>, into an enforcement mechanism for your content policy. But <code>301</code> is one signal in a broader conversation between origins and crawlers. A <code>200 OK</code> means content was served. A <code>403 Forbidden</code> means access was blocked. A <code>402 Payment Required</code> <a href="https://blog.cloudflare.com/introducing-ai-crawl-control/#using-http-402-to-help-publishers-license-content-to-ai-crawlers"><u>tells the client it needs to pay for access</u></a>. Taken together, the distribution of status codes across AI crawler traffic reveals how the web is actually responding to crawlers at scale.</p><p>Radar’s <a href="https://radar.cloudflare.com/ai-insights"><u>AI Insights page</u></a> now includes a <a href="https://radar.cloudflare.com/ai-insights#response-status"><u>Response status code analysis</u></a> graph illustrating the distribution of the top response status codes or response status code <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status"><u>groupings</u></a> (selectable via a dropdown) for AI crawler traffic. The data can be filtered by industry set; the crawl purpose filter can also be applied in Data Explorer. Filtered analyses provide a perspective into whether certain types of crawlers behave differently, or if request patterns and distributions vary by industry.</p><p>In the general example shown below, we can see that for the time period covered by the graph, just over 70% of requests were serviced successfully (<code>200</code>), while 10.1% of the requests were redirected (<code>301</code>, <code>302</code>) to another URL, and 3.7% were for files that weren’t found (<code>404</code>). Access to content was blocked for 8.3% of requests, receiving a <code>403</code> response status code. Grouped, we find that nearly 74% of requests received <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#successful_responses"><u>successful responses</u></a> (<code>2xx</code>), 13.7% received <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#client_error_responses"><u>client error responses</u></a> (<code>4xx</code>), 11.3% received <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#redirection_messages"><u>redirection messages</u></a> (<code>3xx</code>), and 1.2% were sent <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#server_error_responses"><u>server error responses</u></a> (<code>5xx</code>).</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4zPrHtLf1BbHxQXQHTK1Qs/21a75531129332d749210d67b2c330ad/BLOG-3263_2.png" />
          </figure>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/jPGKM051x7ZgzZSaTAo8v/e20c1e34a1128279157bc8bd1921a8fe/BLOG-3263_3.png" />
          </figure><p>This analysis has also been added to <a href="https://radar.cloudflare.com/bots/directory"><u>individual bot pages</u></a> to provide insight into this aspect of a crawler’s behavior as well. In the GPTBot example shown below, we can see that for the time period covered by the graph, just over 80% of requests were serviced successfully (<code>200</code>), while 4.7% of the requests were redirected (<code>301</code>, <code>302</code>) to another URL, and just 2.7% were for files that weren’t found (<code>404</code>). Nearly 6% were blocked, with Cloudflare returning a <code>403</code> response status code. Grouped, we find that 83% of requests received <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#successful_responses"><u>successful responses</u></a> (2xx), nearly 10% received <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#client_error_responses"><u>client error responses</u></a> (<code>4xx</code>), 5.1% received <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#redirection_messages"><u>redirection messages</u></a> (<code>3xx</code>), and the remaining 2.2% got <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status#server_error_responses"><u>server error responses</u></a> (<code>5xx</code>).</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5tvNsLUUCQlblPCmHolbUk/88a46b05788fa00cd5ec582d54622d4d/BLOG-3263_4.png" />
          </figure>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2JlXMlLFpbUFKL85zP8AqK/b9014f55efc2e0203899a359632fb73c/BLOG-3263_5.png" />
          </figure><p>As noted above, Radar’s Data Explorer enables users to drill down further into the data by applying additional filters. For example, we can look at things like <a href="https://radar.cloudflare.com/explorer?dataSet=ai.bots&amp;groupBy=user_agent&amp;dt=28d&amp;filters=responseStatus%253D404"><u>which crawlers</u></a> are requesting the most non-existent content (resulting in a <code>404</code> response status code), and how that request traffic trends over time, or <a href="https://radar.cloudflare.com/explorer?dataSet=ai.bots&amp;groupBy=industry&amp;dt=28d&amp;filters=crawlPurpose%253DTraining%252CresponseStatusCategory%253DREDIRECTION"><u>which industries</u></a> are sending the most <b>Redirection</b> (<code>3xx</code>) response status codes to <b>Training</b> crawlers, and how that activity trends over time. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4Bi7FKcZ79I4OmG7NTbadq/bb40e5397f615727c23d0d67310c869b/BLOG-3263_6.png" />
          </figure>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5R1PEQIY1zW1uj4MHsj8pm/977adfff200fecbb761660d8e0fda55a/BLOG-3263_7.png" />
          </figure><p>Response status code data, both in aggregate and on a per-bot basis, is also available through the <a href="https://developers.cloudflare.com/api/resources/radar/subresources/ai/subresources/bots"><u>Cloudflare Radar API</u></a>.</p><p><a href="https://developers.cloudflare.com/ai-crawl-control/reference/redirects-for-ai-training/"><u>Redirects for AI Training</u></a> lets you shape what crawlers receive from your origin; Radar's status code analysis lets you see how the rest of the web is doing the same. Enable Redirects for AI Training in <a href="https://dash.cloudflare.com/?to=/:account/:zone/ai"><u>AI Crawl Control &gt; Overview &gt; Quick Actions</u></a> to start replacing advisory signals with enforced outcomes on your site today.</p><p><i>Have questions or want to share what you're seeing? Join the discussion on the </i><a href="https://community.cloudflare.com"><i><u>Cloudflare Community</u></i></a><i> or find us on </i><a href="https://discord.cloudflare.com"><i><u>Discord</u></i></a><i>.</i></p>
    <div>
      <h2>Watch on Cloudflare TV</h2>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div>
  
</div><p></p> ]]></content:encoded>
            <category><![CDATA[Agents Week]]></category>
            <category><![CDATA[Agents]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Radar]]></category>
            <category><![CDATA[Bot Management]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">4Gi8lGLqjdsjywAFEKLLYW</guid>
            <dc:creator>Cam Whiteside</dc:creator>
            <dc:creator>David Belson</dc:creator>
            <dc:creator>André Cruz</dc:creator>
        </item>
        <item>
            <title><![CDATA[Launching the x402 Foundation with Coinbase, and support for x402 transactions]]></title>
            <link>https://blog.cloudflare.com/x402/</link>
            <pubDate>Tue, 23 Sep 2025 13:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare is partnering with Coinbase to create the x402 Foundation and adding x402 support to the Agents SDK & MCP Servers.  ]]></description>
            <content:encoded><![CDATA[ <p>Cloudflare is partnering with Coinbase to create the x402 Foundation. This foundation’s mission will be to encourage the adoption of the <a href="https://github.com/coinbase/x402">x402 protocol</a>, an updated framework that allows clients and services to exchange value on the web using a common language. In addition to today’s partnership, we are shipping a set of features to allow developers to use x402 in the <a href="https://developers.cloudflare.com/agents/x402/"><u>Agents SDK</u></a> and our <a href="https://developers.cloudflare.com/agents/model-context-protocol/"><u>MCP</u></a> integrations, as well as proposing a new deferred payment scheme.</p>
    <div>
      <h3>Payments in the age of agents</h3>
      <a href="#payments-in-the-age-of-agents">
        
      </a>
    </div>
    <p>Payments on the web have historically been designed for humans. We browse a merchant’s website, show intent by adding items to a cart, and confirm our intent to purchase by inputting our credit card information and clicking “Pay.” But what if you want to enable direct transactions between digital services? We need protocols to allow machine-to-machine transactions. </p><p>Every day, sites on Cloudflare send out over a billion HTTP 402 response codes to bots and crawlers trying to access their content and e-commerce stores. This response code comes with a simple message: “Payment Required.”</p><p>Yet these 402 responses too often go unheard. One reason is a lack of standardization. Without a specification for how to format and respond to those response codes, content creators, publishers, and website operators lack adequate tools to convey their payment requests. x402 can give developers a clear, open protocol for websites and automated agents to negotiate payments across the globe. </p>
    <div>
      <h3>A Primer on x402</h3>
      <a href="#a-primer-on-x402">
        
      </a>
    </div>
    <p>Coinbase authored the x402 transaction flow, outlined below, to help machines pay directly for resources over HTTP:</p><ol><li><p>A client attempts to access a resource gated by x402. </p></li><li><p>The server responds with the status code 402 Payment Required. The response body contains payment instructions including the payment amount and recipient.</p></li><li><p>The client requests the x402-gated resource with the payment authorization header.</p></li><li><p>The payment facilitator verifies the client’s payment payload and settles the transaction.</p></li><li><p>The server responds with the requested resource in the response, along with the payment response header that confirms the payment outcome. </p></li></ol><p>This flow creates programmatic access to resources across the Internet. Clients and servers capable of interpreting the x402 protocol are able to transact without the need for accounts, subscriptions, or API keys.</p><p>x402 can be used to monetize traditional use cases, but also enables monetization of a new class of use cases. For example:</p><ul><li><p>An assistant that is able to purchase accessories for your Halloween costume from multiple merchants.</p></li><li><p>An AI agent that pays per browser rendering session, instead of committing to a monthly subscription fee.</p></li><li><p>An autonomous stock trader that makes micropayments for a high quality real-time data feed to drive decisions.</p></li></ul><p>Future versions of x402 could be agnostic of the payment rails, accommodating credit cards and bank accounts in addition to stablecoins. </p>
    <div>
      <h3>Cloudflare’s pay per crawl: proposing the x402 deferred payment scheme </h3>
      <a href="#cloudflares-pay-per-crawl-proposing-the-x402-deferred-payment-scheme">
        
      </a>
    </div>
    <p>Agents and crawlers often require two important functions that already exist in much of today's financial infrastructure: delayed settlement to account for disputes; and a single, aggregated payment to make their accounting simpler. For example, crawlers participating in our <a href="https://blog.cloudflare.com/introducing-pay-per-crawl/"><u>private beta of pay per crawl</u></a> are able to crawl a vast number of pages easily, generate audit logs, and then be charged a single fee via a connected credit card or bank account at the end of each day. </p><p>To account for these types of payment scenarios, we're proposing a new deferred payment scheme for the x402 protocol. This new scheme is specifically designed for agentic payments that don't need immediate settlement and can be handled either through traditional payment methods or stablecoins. By proposing this addition, we're helping to ensure that any compliant server can optionally decouple the cryptographic handshake from the payment settlement itself, giving agents and servers the ability to use pre-negotiated licensing agreements, batch settlements, or subscriptions.</p><p>We will be bringing this new deferred payment scheme to pay per crawl as we expand and evolve the private beta. </p>
    <div>
      <h4>The Handshake Explained</h4>
      <a href="#the-handshake-explained">
        
      </a>
    </div>
    <p>Here’s our initial proposal for the handshake that could be released in the next major version of x402:</p>
    <div>
      <h5>1. The Server’s Offer</h5>
      <a href="#1-the-servers-offer">
        
      </a>
    </div>
    <p>Today, an unauthenticated or unauthorized client attempts to access a resource and receives a <code>402 Payment Required</code> response. The server provides a payment commitment payload that the client can use to construct a re-request. This response is a machine-readable offer, and our proposal includes a new scheme of <b>deferred</b>.</p>
            <pre><code>HTTP/1.1 402 Payment Required
Content-Type: application/json

{
  "accepts": [
    {
      "scheme": "deferred",
      "network": "example-network-provider",
      "resource": "https://example.com/page",
      "...": "...",
      "extras": {
        "id": "abc123",
        "termsUrl": "https://example.com/terms"
      },
    }
  ]
}</code></pre>
            
    <div>
      <h5>2. The Client's Signed Commitment</h5>
      <a href="#2-the-clients-signed-commitment">
        
      </a>
    </div>
    <p>Next, the client re-sends the request with a signed payload containing their payment commitment. The <b>deferred </b>scheme uses HTTP Message Signatures where a <a href="https://datatracker.ietf.org/doc/html/rfc7517?cf_target_id=D4770F028006FD3F2FEE26B65F35A502"><u>JWK-formatted public key</u></a> is available in a hosted directory. The <code>Signature-Input</code> header clearly explains which parts of the request are included in the <code>Signature</code> to serve as cryptographic proof of the client's intent, verifiable by the service provider without an on-chain transaction. </p>
            <pre><code>GET /path/to/resource HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 Chrome/113.0.0 MyBotCrawler/1.1
Payment:
    scheme="deferred",
    network="example-network-provider",
    id="abc123"
Signature-Agent: signer.example.com
Signature-Input:
    sig=("payment" "signature-agent");
    created=1700000000;
    expires=1700011111;
    keyid="ba3e64==";
    tag="web-bot-auth"
Signature: sig=abc==</code></pre>
            
    <div>
      <h5>3. Successful Response</h5>
      <a href="#3-successful-response">
        
      </a>
    </div>
    <p>The resource server validates the signature and returns the content with a confirmation header. The server is responsible for attributing the payment to the account associated with the <b>HTTP message signature</b>, verifying the client's identity and then delivering the content. In this scenario, there is no blockchain associated with the payments. </p>
            <pre><code>HTTP/1.1 200 OK
Content-Type: text/html
Payment-Response:
    scheme="deferred",
    network="example-network-provider",
    id="abc123",
    timestamp=1730872968</code></pre>
            
    <div>
      <h5>4. Payment Settlement</h5>
      <a href="#4-payment-settlement">
        
      </a>
    </div>
    <p>The server can now handle the settlement flexibly. The validated id from the handshake acts as a reference for the transaction. This approach enables a flexible use model without per-request overhead, allowing the server to roll up payments on a subscription, daily, or even batch basis. This creates a flexible framework where the cryptographic trust is established immediately, while the financial settlement can use traditional payment rails or stablecoins. </p>
    <div>
      <h3>Cloudflare’s MCP servers, Agents SDK, and x402 payments</h3>
      <a href="#cloudflares-mcp-servers-agents-sdk-and-x402-payments">
        
      </a>
    </div>
    <p>Running code is what moves an open convention from the theoretical to truly useful, and eventually to a recognized standard. Agents built using Cloudflare’s <a href="https://developers.cloudflare.com/agents/x402/"><u>Agent SDK</u></a> can now pay for resources with x402, and MCP servers can expose tools to be paid for via x402. To show how this works, we created the <a href="https://playground.x402.cloudflare.com/"><u>x402 playground</u></a>, a live demo employing x402. The x402 playground is powered by the <a href="https://developers.cloudflare.com/agents/"><u>Agents SDK</u></a> and has access to tools from <a href="https://developers.cloudflare.com/agents/guides/remote-mcp-server/"><u>MCP servers</u></a> deployed on Cloudflare.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5Hhey00HlGPmIO76xbR0qi/0bfd542c222bc6ae8bacb71345dc49d3/image1.png" />
          </figure><p>When you open the x402 playground, a new wallet is created and funded with Testnet USDC on a <a href="https://docs.base.org/learn/deployment-to-testnet/test-networks"><u>Base blockchain testnet</u></a>. The agent, built with Agents SDK, has access to an MCP server with both free and paid tools.</p>
            <pre><code>import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { McpAgent } from "agents/mcp";
import { withX402 } from "agents/x402";

export class PayMCP extends McpAgent {
  server = withX402(
    new McpServer({ name: "PayMCP", version: "1.0.0" }),
    X402_CONFIG
  );

  async init() {
    // Paid tool
    this.server.paidTool(
      "square",
      "Squares a number",
      0.01, // Tool price
      {
        a: z.number()
      },
      {},
      async ({ number }) =&gt; {
        return { content: [{ type: "text", text: String(a ** 2) }] };
      }
    );

    // Free tool
    this.server.tool(
      "add-two-numbers",
      "Adds two numbers",
      {
        a: z.number(),
        b: z.number(),
      },
      async ({ a, b }) =&gt; {
        return { content: [{ type: 'text', text: String(a + b) }] };
      }
    );
  }
}</code></pre>
            <p>When the agent attempts to use a paid tool, the MCP server responds with a 402 Payment Required. The agent is able to interpret the payment instructions and prompt the human whether they want to proceed with the transaction. Building an x402-compatible client requires a basic wrapper on the tool call:</p>
            <pre><code>import { Agent } from "agents";
import { withX402Client } from "agents/x402";

export class MyAgent extends Agent {
  // Your Agent definitions...

  async onToolCall() {

    // Build the x402 client
    const x402Client = withX402Client(
      myMcpClient,
      { network: "base-sepolia", account: this.account }
    );

    // The first parameter becomes the confirmation callback.
    // We can set it to `null` if we want the agent to pay automatically.
    const res = await x402Client.callTool(
      this.onPaymentRequired,
      {
        name: toolName,
        arguments: toolArgs
    });
  }
}</code></pre>
            <p>This test agent draws down the funds from the wallet and sends the payment payload to the MCP server, which settles the transaction. The transactions can be specified to execute with or without human confirmation, allowing you to design the interface best suited for your application.</p>
    <div>
      <h3>What’s next? </h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>You can get started today by using the <a href="https://developers.cloudflare.com/agents/x402/"><u>Agents SDK</u></a> or by deploying your own <a href="https://developers.cloudflare.com/agents/guides/remote-mcp-server/"><u>MCP server</u></a>.</p><p>We’ll continue to work closely with Coinbase to establish the x402 Foundation. Stay tuned for more announcements on the specifics of the structure very soon.</p><p>We believe in the value of open and interoperable protocols – which is why we are encouraging everyone to contribute to the <a href="https://github.com/coinbase/x402"><u>x402 protocol directly</u></a>. To get in touch with the team at Cloudflare working on x402, email us at <a href="#"><u>x402@cloudflare.com</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Partners]]></category>
            <category><![CDATA[Coinbase]]></category>
            <category><![CDATA[x402]]></category>
            <guid isPermaLink="false">blhpo3poPntnuPzSzX29s</guid>
            <dc:creator>Will Allen</dc:creator>
            <dc:creator>Cam Whiteside</dc:creator>
            <dc:creator>Rohin Lohe</dc:creator>
            <dc:creator>Steve James</dc:creator>
        </item>
        <item>
            <title><![CDATA[The next step for content creators in working with AI bots: Introducing AI Crawl Control]]></title>
            <link>https://blog.cloudflare.com/introducing-ai-crawl-control/</link>
            <pubDate>Thu, 28 Aug 2025 14:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare launches AI Crawl Control (formerly AI Audit) and introduces easily customizable 402 HTTP responses. ]]></description>
            <content:encoded><![CDATA[ <p><i>Empowering content creators in the age of AI with smarter crawling controls and direct communication channels</i></p><p>Imagine you run a regional news site. Last month an AI bot scraped 3 years of archives in minutes — with no payment and little to no referral traffic. As a small company, you may struggle to get the AI company's attention for a licensing deal. Do you block all crawler traffic, or do you let them in and settle for the few referrals they send? </p><p>It’s picking between two bad options.</p><p>Cloudflare wants to help break that stalemate. On July 1st of this year, we declared <a href="https://www.cloudflare.com/press-releases/2025/cloudflare-just-changed-how-ai-crawlers-scrape-the-internet-at-large/"><u>Content Independence Day</u></a> based on a simple premise: creators deserve control of how their content is accessed and used. Today, we're taking the next step in that journey by releasing AI Crawl Control to general availability — giving content creators and AI crawlers an important new way to communicate.</p>
    <div>
      <h2>AI Crawl Control goes GA</h2>
      <a href="#ai-crawl-control-goes-ga">
        
      </a>
    </div>
    <p>Today, we're rebranding our AI Audit tool as <b>AI Crawl Control</b> and moving it from beta to <b>general availability</b>. This reflects the tool's evolution from simple monitoring to detailed insights and <a href="https://www.cloudflare.com/learning/ai/how-to-block-ai-crawlers/">control over how AI systems can access your content</a>. </p><p>The market response has been overwhelming: content creators across industries needed real agency, not just visibility. AI Crawl Control delivers that control.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/pIAbmCR0tTK71umann3w0/e570c5f898e3d399babf6d1f82c2f3d8/image3.png" />
          </figure>
    <div>
      <h2>Using HTTP 402 to help publishers license content to AI crawlers</h2>
      <a href="#using-http-402-to-help-publishers-license-content-to-ai-crawlers">
        
      </a>
    </div>
    <p>Many content creators have faced a binary choice: either they block all AI crawlers and miss potential licensing opportunities and referral traffic; or allow them through without any compensation. Many content creators had no practical way to say "we're open for business, but let's talk terms first."</p><p>Our customers are telling us:</p><ul><li><p>We want to license our content, but crawlers don't know how to reach us. </p></li><li><p>Blanket blocking feels like we're closing doors on potential revenue and referral traffic. </p></li><li><p>We need a way to communicate our terms before crawling begins. </p></li></ul><p>To address these needs, we are making it easier than ever to send customizable<b> </b><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/402">402 HTTP status codes</a>. </p><p>Our <a href="https://blog.cloudflare.com/introducing-pay-per-crawl/#what-if-i-could-charge-a-crawler"><u>private beta launch of Pay Per Crawl</u></a> put the HTTP 402 (“Payment Required”) response codes to use, working in tandem with Web Bot Auth to enable direct payments between agents and content creators. Today, we’re making customizable 402 response codes available to every paid Cloudflare customer — not just pay per crawl users.</p><p>Here's how it works: in AI Crawl Control, paying Cloudflare customers will be able to select individual bots to block with a configurable message parameter and send 402 payment required responses. Think: "To access this content, email partnerships@yoursite.com or call 1-800-LICENSE" or "Premium content available via API at api.yoursite.com/pricing."</p><p>On an average day, Cloudflare customers are already sending over one billion 402 response codes. This shows a deep desire to move beyond blocking to open communication channels and new monetization models. With the 402 HTTP status code, content creators can tell crawlers exactly how to properly license their content, creating a direct path from crawling to a commercial agreement. We are excited to make this easier than ever in the AI Crawl Control dashboard. </p>
    <div>
      <h2>How to customize your 402 status code with AI Crawl Control: </h2>
      <a href="#how-to-customize-your-402-status-code-with-ai-crawl-control">
        
      </a>
    </div>
    <p><b>For Paid Plan Users:</b></p><ul><li><p>When you block individual crawlers from the AI Crawl Control dashboard, you can now choose to send 402 Payment Required status codes and customize your message. For example: <b>To access this content, email partnerships@yoursite.com or call 1-800-LICENSE</b>.</p></li></ul><p>The response will look like this:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5v5x41azcAK14DBhXjXPEX/8c0960b4bb556d62e88d19c9dd544f12/image4.png" />
          </figure><p>The message can be configured from Settings in the AI Crawl Control Dashboard:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2KMdRYwoey9RdYIxmzmFO1/7b39fd82d43349ee1cc4832cb602eb56/image1.png" />
          </figure>
    <div>
      <h2>Beyond just blocking AI bots</h2>
      <a href="#beyond-just-blocking-ai-bots">
        
      </a>
    </div>
    <p>This is just the beginning. We're planning to add additional parameters that will let crawlers understand the content's value, freshness, and licensing terms directly in the 402 response. Imagine crawlers receiving structured data about content quality and update frequency, for example, in addition to contact information.</p><p>Meanwhile, <a href="https://blog.cloudflare.com/introducing-pay-per-crawl/">pay per crawl</a> continues advancing through beta, giving content creators the infrastructure to automatically monetize crawler access with transparent, usage-based pricing.</p><p>What excites us most is the market shift we're seeing. We're moving to a world where content creators have clear monetization paths to become active participants in the development of rich AI experiences. </p><p>The 402 response is a bridge between two industries that want to work together: content creators whose work fuels AI development, and AI companies who need high-quality data. Cloudflare’s AI Crawl Control creates the infrastructure for these partnerships to flourish.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/31Np3qX2ssbeGaJnZHQodA/92246d3618778715c2e8b295b7acaa29/image5.png" />
          </figure><div>
  
</div><p></p> ]]></content:encoded>
            <category><![CDATA[AI Week]]></category>
            <category><![CDATA[Pay Per Crawl]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Bots]]></category>
            <category><![CDATA[AI Bots]]></category>
            <category><![CDATA[Bot Management]]></category>
            <guid isPermaLink="false">3UcNgGUfIUIm0EEtNwgLAT</guid>
            <dc:creator>Will Allen</dc:creator>
            <dc:creator>Pulkita Kini</dc:creator>
            <dc:creator>Cam Whiteside</dc:creator>
        </item>
    </channel>
</rss>