<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Skuuy</title>
    <description>The latest articles on DEV Community by Skuuy (@skuuy).</description>
    <link>https://dev.to/skuuy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4180795%2Fd1a24ebe-1f1a-4bc0-a0d2-6c6db87f477f.png</url>
      <title>DEV Community: Skuuy</title>
      <link>https://dev.to/skuuy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/skuuy"/>
    <language>en</language>
    <item>
      <title>How I Added x402 Micropayments to a Zero-Log File-Sharing API (and Verified Every Cent On-Chain)</title>
      <dc:creator>Skuuy</dc:creator>
      <pubDate>Tue, 13 Oct 2026 02:56:24 +0000</pubDate>
      <link>https://dev.to/skuuy/how-i-added-x402-micropayments-to-a-zero-log-file-sharing-api-and-verified-every-cent-on-chain-2hjk</link>
      <guid>https://dev.to/skuuy/how-i-added-x402-micropayments-to-a-zero-log-file-sharing-api-and-verified-every-cent-on-chain-2hjk</guid>
      <description>&lt;p&gt;I took &lt;a href="https://skuuy.com" rel="noopener noreferrer"&gt;Skuuy&lt;/a&gt; — a free, privacy-first toolkit with 15 MCP tools, an ephemeral file drop, and a URL→markdown reader — and put three endpoints behind x402 v2 micropayments: &lt;strong&gt;$0.005 USDC per request on Base&lt;/strong&gt;. No signup, no API keys, no sessions. Real payments are settling on-chain today, the services are indexed on Agentic.market, and I'm going to be honest with you about the revenue: it's currently ~$0/month, and that's fine.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem: agents can't sign up for things
&lt;/h2&gt;

&lt;p&gt;I build infrastructure for AI agents. My MCP server gives agents 15 tools — DNS lookups, temp inboxes, webhook inspectors, port checks, a URL reader that strips pages down to clean markdown. All free, no API keys. That's the discovery funnel.&lt;/p&gt;

&lt;p&gt;But some endpoints have real marginal cost and real abuse surface: file uploads (storage, bandwidth), paste (spam), and the reader (compute, target-site load). Traditional monetization — Stripe, API keys, dashboards — is a non-starter for agents. An agent can't create an account, can't type a credit card number, can't do an OAuth dance.&lt;/p&gt;

&lt;p&gt;x402 solves this cleanly. The protocol resurrects HTTP 402 "Payment Required": the server responds with machine-readable payment terms, the client settles in stablecoins, and the request completes. The agent pays $0.005 and moves on. No humans in the loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually built
&lt;/h2&gt;

&lt;p&gt;Three paid endpoints, all on Base (&lt;code&gt;eip155:8453&lt;/code&gt;), scheme &lt;code&gt;exact&lt;/code&gt;, denominated in USDC:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST file.skuuy.com/drop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;25/day/IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST file.skuuy.com/paste&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;25/day/IP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GET read.skuuy.com/read?url=&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;100/day/IP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Everything else — the other 11 MCP tools, the MCP server itself — stays free forever. MCP clients aren't x402-aware anyway, so paywalling them would just break things.&lt;/p&gt;

&lt;p&gt;The design principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Freemium, not gated.&lt;/strong&gt; Free quota first, 402 only after exhaustion. Agents get real utility before ever paying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Charge only on HTTP 200.&lt;/strong&gt; If my server errors, the client doesn't pay. Obvious in retrospect, easy to get wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-log privacy preserved.&lt;/strong&gt; The file drop is burn-after-reading with TTLs (15m–7d), R2 storage with prefix-per-TTL lifecycle rules, and no request logging. Adding payments didn't add surveillance — settlement happens on-chain, between the payer's wallet and mine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP stays free.&lt;/strong&gt; The MCP tools are the funnel. Payment lives only on the REST endpoints.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The implementation
&lt;/h2&gt;

&lt;p&gt;Stack: Cloudflare Workers/Pages, Cloudflare R2 for storage, Coinbase CDP as the x402 facilitator.&lt;/p&gt;

&lt;p&gt;The 402 response follows the x402 v2 standard — &lt;code&gt;x402Version&lt;/code&gt;, &lt;code&gt;resource&lt;/code&gt;, &lt;code&gt;accepts&lt;/code&gt; with the payment terms, and &lt;code&gt;extensions&lt;/code&gt;. Two extensions matter here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bazaar extension&lt;/strong&gt; — makes the endpoint discoverable by agents browsing the Bazaar catalog:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"extensions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"bazaar"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"discoverable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Use this when you need to share a file with an agent: uploads any file up to 10MB, returns a one-time download link. Burn-after-reading, zero-log."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"inputSchema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"outputSchema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is what gets the service indexed on Agentic.market. Both my services are live there today — &lt;code&gt;file.skuuy.com&lt;/code&gt; and &lt;code&gt;read.skuuy.com&lt;/code&gt;, each at $0.005.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Builder Code extension&lt;/strong&gt; — on-chain attribution so Base's dashboard credits my project for the x402 volume it generates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;declareBuilderCodeExtension&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@x402/extensions&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;extensions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;buildBazaarExtensionForRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;BUILDER_CODE&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nf"&gt;declareBuilderCodeExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bc_c61pqqgo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One code across all my resource servers. Settlement calldata carries it, and the dashboard aggregates. (The code itself is claimed at base.dev — it's an ERC-721 in a registry contract, first-come-first-served. Claim your name early.)&lt;/p&gt;

&lt;p&gt;One gotcha that cost me an hour: the facilitator credentials. My first live payment test returned 401 — the fix was setting &lt;code&gt;CDP_API_KEY_SECRET&lt;/code&gt; in Cloudflare Pages &lt;strong&gt;Production&lt;/strong&gt; environment and redeploying. The Preview env had it; Production didn't. Check both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verified, not vibes
&lt;/h2&gt;

&lt;p&gt;I don't trust "it works on my machine" for money. Every claim above was verified independently:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real on-chain settlements&lt;/strong&gt; — two live $0.005 USDC payments, confirmed via Base RPC with Transfer events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File drop: &lt;code&gt;0x7010035d…992e&lt;/code&gt; → block &lt;code&gt;52532190&lt;/code&gt; ✅&lt;/li&gt;
&lt;li&gt;Reader: &lt;code&gt;0x6e6ae167…3c09&lt;/code&gt; → block &lt;code&gt;52534114&lt;/code&gt; ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both: 5000 atomic USDC units, payer → my wallet, status success.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;402 challenge format&lt;/strong&gt; — probed live: standard x402 v2 payload with both &lt;code&gt;bazaar&lt;/code&gt; and &lt;code&gt;builder-code&lt;/code&gt; extensions present.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free tier&lt;/strong&gt; — fresh requests return HTTP 200 with &lt;code&gt;X-Quota-Limit: 100&lt;/code&gt; and a decrementing &lt;code&gt;X-Quota-Remaining&lt;/code&gt;. Clean markdown body, XSS-sanitized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentic.market&lt;/strong&gt; — &lt;code&gt;api.agentic.market/v1/services/search?q=skuuy&lt;/code&gt; returns both services with correct pricing metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hard lessons
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. IPv6 rotation defeats per-IP quota.&lt;/strong&gt; During testing I found that IPv6 privacy extensions rotate addresses, so a single abuser looks like many IPs. The fix: bucket quota by /64 prefix, and let paid users identify by wallet instead of IP. If you're doing per-IP rate limiting in 2026, you're doing per-/64 or you're doing nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Agentic.market validator will say "No x402 Setup Detected" — and that's correct.&lt;/strong&gt; The validator sends an unpaid probe and expects a 402. My freemium design returns 201 for the first 25 requests, so it never sees a 402. This is by design, not a bug. The listing flows through the Bazaar auto-index instead (status &lt;code&gt;processing&lt;/code&gt; → live). Don't contort your product to please a validator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Facilitator discovery lags the real world.&lt;/strong&gt; Coinbase's &lt;code&gt;/discovery/resources&lt;/code&gt; endpoint didn't show my services even after Agentic.market had indexed them. Async cataloging is normal; verify at the layer your users actually use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Test with real money, early.&lt;/strong&gt; The 401-from-missing-env-var bug only surfaced on a real payment attempt. Testnet wouldn't have caught the Production/Preview env split. $0.005 is cheap tuition.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest revenue section
&lt;/h2&gt;

&lt;p&gt;Let me save you the hopium: &lt;strong&gt;realistic first-six-months revenue is $0 to tens of dollars per month.&lt;/strong&gt; Worldwide agentic x402 volume is measured in thousands of dollars per month total (TRM Labs, 2026). Nobody is getting rich selling $0.005 API calls to agents yet.&lt;/p&gt;

&lt;p&gt;x402 is a &lt;strong&gt;cashier, not a product&lt;/strong&gt;. It doesn't generate demand — it just removes the payment friction for demand that already exists. The playbook is: build something agents desperately need (a reliable reader, ephemeral file sharing, temp mail), make it trivially discoverable (Bazaar, Agentic.market, MCP registries), keep the free tier generous enough to build habits, and let the paid tier exist for the day volume arrives.&lt;/p&gt;

&lt;p&gt;I'm not optimizing for revenue right now. I'm optimizing for &lt;strong&gt;solidity&lt;/strong&gt; — the MCP server passes 15/15 regression checks, the 402 flow is verified end-to-end on-chain, and the privacy guarantees survived the addition of payments. Revenue is a lagging indicator of usefulness.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;a href="https://github.com/deaabie/skuuy-mcp" rel="noopener noreferrer"&gt;&lt;code&gt;skuuy-mcp&lt;/code&gt; repo&lt;/a&gt; (15 tools, TypeScript) is public — PRs and issues welcome.&lt;/li&gt;
&lt;li&gt;Community directories: x402scan, x402-list, and the x402 Foundation docs.&lt;/li&gt;
&lt;li&gt;Grant applications (CDP micro-grants, Base Batches) with real on-chain evidence instead of slideware.&lt;/li&gt;
&lt;li&gt;Screenshot API: same facilitator integration, $0.005/shot.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building for the agentic economy, my DMs are open. And if you run an agent — the reader is free for your first 100 pages today.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with Cloudflare Workers, R2, x402 v2, and USDC on Base. Verified on-chain, not on vibes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>x402</category>
      <category>web3</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
