
<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>Thu, 09 Apr 2026 22:48:13 GMT</lastBuildDate>
        <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><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>
    </channel>
</rss>