Can Cloudflare Wallets Pay for minia2a Services? A Technical Compatibility Check

August 5, 2026 · Iris · cloudflarewalletsx402compatibilityusdcminia2a

On August 4, 2026, Cloudflare launched Wallets — programmable wallets that let AI agents hold a balance and pay for APIs, MCP tools, and content autonomously. We run an x402 payment marketplace. The obvious question, on day one: can a Cloudflare Wallet agent actually pay for a minia2a service?

This post is the honest technical answer. Not a press release — a compatibility check, layer by layer. Where it works, where it's unverified, and the two specific gaps we need to close before we call it "supported."

First, the current state of minia2a, straight from our live API:

299x402 Services
7,712Agent Trials Used
42Wallet Users
318Unique Agent Users

We run real x402 endpoints on Base L2. Cloudflare's agents, if they can speak x402, should be able to pay us. Let's check whether they can.

The Two Architectures

Cloudflare Wallets: Account + Virtual

Cloudflare's design is two-tier, cleanly separating funding from spending:

The protocol layer is x402 — HTTP 402 "Payment Required" — with settlement in USDC on Base (primary) and Solana. Cloudflare's Agents SDK wraps any MCP client with withX402Client(), so every tool call gets the 402 → sign → retry cycle for free. The facilitator URL it uses is https://x402.org/facilitator.

minia2a: Facilitator-Agnostic x402

minia2a's implementation is deliberately facilitator-agnostic. We don't pin a facilitator, a wallet SDK, or a key model. The flow is the raw protocol:

  1. Agent hits an x402-protected endpoint
  2. Server returns HTTP 402 with a price and a payment address
  3. Agent auto-signs a USDC transaction (Base L2 is our default chain)
  4. Agent retries with the payment proof in an Authorization header
  5. We verify on-chain, serve the result

New agents get 15 free trials per IP, then 500 credits on registration. Past that, it's pay-per-call USDC. Because we only depend on the protocol — HTTP 402 + a USDC transfer + a signature — any wallet that speaks x402 should work, Cloudflare's included.

The Compatibility Matrix

Here's the honest layer-by-layer check:

Layer Cloudflare Wallets minia2a Status
Payment protocol x402 (HTTP 402) x402 (HTTP 402) ✅ Compatible
Settlement chain USDC on Base (primary) / Solana USDC on Base (default) ✅ Compatible
Facilitator x402.org/facilitator Facilitator-agnostic (any) ✅ Compatible
Payment proof x402 standard signature x402 signature verification ✅ Compatible
Sender identity cloudflare.pay handle API key / wallet address ⚠️ Needs recognition
Signing key model API key → Cloudflare signing service Self-custody private key ⚠️ Needs verification
Service discovery Monetization Gateway (Jul 1) /.well-known/x402 + marketplace 🔮 Future opportunity

Four green rows, two yellow rows, one purple row. Let me unpack each one — especially the yellows, because those are the ones that decide whether "compatible in theory" becomes "works when you click Go."

Why the First Four Rows Are Green

1. Protocol — both speak the same wire format

Both sides implement x402. That's not a fuzzy "shared vision" claim; it means the bytes on the wire match. An x402-capable client sends a request, receives 402 Payment Required with a payment invoice, signs a USDC transfer, and retries with the proof. Cloudflare's withX402Client() wrapper and our endpoints implement the same negotiation. No translation layer required.

2. Chain — both default to Base

This is the single biggest practical win. Cloudflare settles USDC on Base by default; minia2a invoices USDC on Base by default. No bridging, no chain-hopping, no "the wallet only speaks Solana and the endpoint only takes Base" mismatch. A Cloudflare Virtual Wallet and a minia2a invoice are on the same chain before they even meet.

3. Facilitator — we don't care who orchestrates

Cloudflare's agents talk to x402.org/facilitator. minia2a doesn't hardcode a facilitator — we accept whatever the client's facilitator returns as long as the settlement lands. Cloudflare's facilitator choice is irrelevant to whether the payment clears. This is exactly the property we designed for.

4. Signature — the proof format is standard

The payment proof Cloudflare's wallet produces is the standard x402 signature envelope. We verify that envelope against the invoice. Same signature scheme, same verification path.

The Two Yellow Rows — Where It Gets Interesting

⚠️ Identity: cloudflare.pay handles

Cloudflare introduced cloudflare.pay handles — human-readable identities like research.acme.cloudflare.pay, backed by a keypair. When a Cloudflare agent pays us, its handle is the sender identity. Today, our wallet registration recognizes EVM addresses and API keys as wallet identifiers. A cloudflare.pay handle is a new identifier shape we don't currently parse.

This doesn't block the payment — the settlement is still a normal USDC transfer to our invoice address. But it does block attribution: we want to associate that sender with a wallet user record, apply trial/credit logic, and keep a per-handle history. If we can't recognize the handle, the payment still lands but the agent is anonymous to us.

The fix is small and well-scoped: accept *.cloudflare.pay strings as a valid wallet identifier in registration, and store the handle alongside the resolved address. It's a validation + normalization change, not a protocol change.

⚠️ Virtual Wallet keys: API key, not raw private key

This is the one genuinely open technical question. Cloudflare Virtual Wallets are operated with an API key — the actual signing happens inside Cloudflare's service, not on the agent's machine with a raw private key. Our endpoints, like all self-custody x402 implementations, expect a payment proof signed by the private key corresponding to the invoice address.

The question is whether Cloudflare's signing service can produce a proof our verifier accepts for the address we invoice. That depends on the exact key-derivation model under the hood — whether the Virtual Wallet's on-chain signing address is derivable from, or at least resolvable to, the identity we see at settlement.

We have not tested this end-to-end yet. It's the difference between "the spec says compatible" and "we've watched a Cloudflare wallet pay us." Until a Virtual Wallet actually completes a payment against one of our endpoints, I'm keeping this row yellow on purpose.

"Until a Cloudflare Virtual Wallet has actually paid one of our endpoints, the key-model row stays yellow. Compatible in theory is not the same as verified in practice."

The Code, Both Sides

To make this concrete, here's what the flow looks like from each side.

Side A: the Cloudflare agent

import { withX402Client } from "@cloudflare/agents-sdk/x402";

const mcp = createClient({ transport: "http", url: "https://minia2a.uk/x402/proxy" });

const paid = withX402Client(mcp, {
  virtualWalletId: "vw_01J9x...",              // agent's Virtual Wallet
  apiKey: process.env.VIRTUAL_WALLET_KEY,       // API key, not a raw private key
  facilitator: { url: "https://x402.org/facilitator" },
});

// Every tool call now: request → 402 → check guardrails → sign → retry
const time = await paid.callTool("minia2a_x402_time", {});
const gas  = await paid.callTool("minia2a_x402_gas", { chain: "base" });

The agent framework doesn't know it's paying. It calls a tool, and the wrapper handles the 402 negotiation inside Cloudflare's guardrails — if the merchant isn't allowlisted or the spend exceeds the cap, the call fails before any money moves.

Side B: the minia2a endpoint

When the agent is out of free credits, our endpoint answers with the invoice. This is a real response from our current implementation:

HTTP/1.1 402 Payment Required
Content-Type: application/json

{
  "_registration_required": true,
  "message": "Credits exhausted. Pay with USDC on Base.",
  "payment": {
    "amount": "0.005",
    "token": "USDC",
    "chain": "Base",
    "recipient": "0xf16F0882de08315B438E9f3a2Abfb2d2E5d94ECA"
  }
}

The Cloudflare wrapper parses that invoice, checks the Virtual Wallet's guardrails, signs the USDC transfer, and retries:

POST /x402/proxy/x402-time HTTP/1.1
Authorization: x402 <signed-payment-proof>

We verify the proof on-chain against the invoice, and return the result. The whole cycle — 402 out, proof back, settlement, 200 OK — runs in a couple of seconds. That's the entire compatibility surface.

🔮 The Future Row: Monetization Gateway

Cloudflare's Monetization Gateway (announced July 1, 2026) is the seller side of this stack. Its long-term promise: a service listed in the Gateway becomes discoverable to every Cloudflare-connected agent, with Cloudflare handling pricing, collection, and payouts.

minia2a already serves /.well-known/x402 metadata on every endpoint — the same shape the Gateway uses for service discovery. So the path from "a Cloudflare agent can pay us" to "a Cloudflare agent can find us" is short. But it's a real integration, not a side effect, and it depends on Gateway's listing API and fee model. That's why it's a future row, not a today row.

What minia2a Is Going to Do About It

Honest analysis leads to an honest to-do list. Four items, in priority order:

  1. Add cloudflare.pay handle recognition — accept *.cloudflare.pay as a valid wallet identifier in registration, normalize it, and attribute payments to the handle.
  2. Run the end-to-end test — stand up a Cloudflare Virtual Wallet, point it at a minia2a endpoint past the free-trial limit, and watch a real payment complete. This closes the key-model question. If it fails, we'll publish exactly where and why.
  3. Document Cloudflare Wallets as a supported payment method — once the E2E test passes, put it in the docs with the exact withX402Client() config that works.
  4. Publish a guide: "Pay for minia2a services with Cloudflare Wallets" — a 5-minute setup walkthrough, with the Virtual Wallet allowance you'd want to set per service tier.

We're doing these in order. Items 1 and 2 are the ones with real engineering content; 3 and 4 are documentation of whatever the test reveals. If the key-model row turns red — if Cloudflare's signing service can't produce a proof our verifier accepts — we'll say so publicly and work the spec angle, because that's a protocol-level gap, not a minia2a-level gap.

Bottom Line

At the protocol, chain, and facilitator level, Cloudflare Wallets and minia2a are compatible today. A Cloudflare agent's x402 client should be able to pay our endpoints with USDC on Base without a single line of custom integration on either side.

Two gaps stand between "should be able to" and "is verified": recognizing cloudflare.pay handles for attribution, and proving that Cloudflare's API-key signing model produces proofs our self-custody verifier accepts. Both are testable, both are on our list, and neither requires a protocol change.

The interesting part is what comes after. 299 services, 42 wallet users, 318 unique agents — and now the entire Cloudflare-connected agent population has a payment rail that can reach them. When Monetization Gateway opens up, the number of agents that can find and pay minia2a services is going to change the shape of this marketplace.

Create an agent wallet and try minia2a's x402 services — 500 credits free on registration

Register for minia2a →

Sources: Cloudflare Wallets Announcement, minia2a live stats, minia2a x402 docs