Join our FREE personalized newsletter for news, trends, and insights that matter to everyone in America

Newsletter
New

I Put A Gpu Box Behind Http 402. Two Days Of Real Numbers.

Card image cap

I have a machine at home running open-weights models. This week I put it behind x402, the protocol that turns HTTP status 402 into an actual payment step: the client calls an endpoint, gets a price back, signs a USDC transfer, retries, and gets the answer. No account, no API key, no invoice.

I wanted to know one thing: do agents actually pay for things, or is that just a slide? So I shipped it on mainnet and counted.

What is for sale

Four endpoints, paid per call in USDC on Base:

Endpoint Price What you get
POST /v1/chat $0.005 Qwen3 14B completion, up to 512 tokens
POST /v1/chat-mini $0.002 Up to 128 tokens, for classify / extract / yes-no
POST /v1/embed $0.002 BGE-M3 embeddings, 1024-dim, up to 16 texts per call
POST /v1/vision $0.01 Image description and OCR, base64 PNG/JPEG

Base URL: https://x402.llnuvemlocal.com.br. There is an llms.txt and an openapi.json if you would rather let your agent read it.

The numbers, unflattering

After roughly two days on mainnet:

  • About 2,800 requests that got a 402 quote and walked away.
  • 15 paid calls. Eight of those were me, testing.
  • 7 paid calls from strangers, from 6 different wallets.
  • Six of the seven were embeddings. One was chat. Nobody bought vision.
  • Revenue from strangers: $0.017.

So yes, agents pay. They pay once, two tenths of a cent, and so far only one came back.

What I learned

Crawlers ask for discovery files before they pay. In the first hours, bots were requesting /.well-known/x402, /openapi.json, /llms.txt and /agents.json and getting 404. They also probe paid routes with GET first. I now serve all of those for free, and GET on a paid route returns a description of how to call it instead of a 405.

Your endpoint is invisible until the first sale. The Coinbase facilitator's catalog indexes a route only after it settles a payment. Each route needs its own first purchase, so I bought from myself once per route.

Embeddings are what machines buy. I expected chat to lead. It did not. An embedding is a commodity with a fixed shape: an agent can evaluate it without reading prose, and $0.002 for sixteen texts is easy to justify.

Never charge for failures. With x402 the server settles after the handler succeeds. If the model is busy I return 503 and nobody pays. This matters more than it sounds: an agent that gets charged for an error has no support channel to complain to, it just never returns.

Price has a floor. The hosted facilitator charges per settlement after a free monthly allowance, so anything under about $0.002 can end up costing you money.

Use it from your own agent: MCP server

Calling x402 by hand means handling the 402, signing EIP-3009 and retrying. To skip that, I wrote a small MCP server. It is one Python file you run with uv, and it gives Claude, Cursor or any MCP client these tools: chat, chat_mini, semantic_rank, embed, read_image, plus free pricing and wallet.

claude mcp add x402-ai -e X402_PRIVATE_KEY_FILE=$HOME/.x402-buyer.key -- uv run $HOME/x402-ai-mcp/server.py 

The one I expect to be most useful is semantic_rank: give it a query and up to 15 passages, in any mix of languages, and it returns them sorted by similarity for $0.002. It is a cheap way for a big model to delegate "which of these is relevant" instead of reading everything itself.

It has two guard rails, because handing a wallet to an agent deserves them: a per-session spend cap (default $0.50) and a per-call ceiling (default $0.02) that rejects a quote before anything is signed. Use a dedicated wallet with a few dollars in it.

Code: https://github.com/Leite007/x402-ai-mcp

Or with plain Python

from eth_account import Account 
from x402 import x402Client 
from x402.http.clients import x402HttpxClient 
from x402.mechanisms.evm.exact.register import register_exact_evm_client 
from x402.mechanisms.evm.signers import EthAccountSigner 
 
client = x402Client() 
register_exact_evm_client(client, EthAccountSigner(Account.from_key(KEY)), networks="eip155:8453") 
 
async with x402HttpxClient(client, timeout=300) as http: 
    r = await http.post("https://x402.llnuvemlocal.com.br/v1/embed", 
                        json={"input": ["hello world", "olá mundo"]}) 
    print(r.json()["dimensions"])  # 1024 

Is this a business?

Not at these numbers, and I would rather say that than pretend. I set myself a deadline: if there are not at least three wallets that either come back more than ten times or spend a dollar each by November 24, I turn it off. I will post the result either way.

If you build agents and have a use for cheap embeddings or a throwaway small model, try it and tell me what is missing.