<?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: nanoempireai</title>
    <description>The latest articles on DEV Community by nanoempireai (@roblambert9).</description>
    <link>https://dev.to/roblambert9</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%2F3849999%2F6e9a3a74-a85b-4d8e-a7b9-750ad7448eb1.jpg</url>
      <title>DEV Community: nanoempireai</title>
      <link>https://dev.to/roblambert9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roblambert9"/>
    <language>en</language>
    <item>
      <title>Why 99 Percent of Coding Agents are Script Kiddies (And How to Fix It)</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Thu, 03 Sep 2026 21:51:05 +0000</pubDate>
      <link>https://dev.to/roblambert9/why-99-percent-of-coding-agents-are-script-kiddies-and-how-to-fix-it-2kg2</link>
      <guid>https://dev.to/roblambert9/why-99-percent-of-coding-agents-are-script-kiddies-and-how-to-fix-it-2kg2</guid>
      <description>&lt;h1&gt;
  
  
  Why 99 Percent of Coding Agents are Script Kiddies (And How to Fix It)
&lt;/h1&gt;

&lt;p&gt;Moving from compiler-driven trial and error to proactive topology engineering in autonomous codebases.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Expensive REPL Trap
&lt;/h2&gt;

&lt;p&gt;The current failure mode of autonomous coding agents is subtle but catastrophic: they treat the compiler and the linter as a slow, expensive REPL. &lt;/p&gt;

&lt;p&gt;When a typical LLM-based agent encounters a build error, it does not analyze the system architecture. It reads the &lt;code&gt;stderr&lt;/code&gt; output and applies a reactive patch. A missing layout file leads to blind file creation. A missing import leads to the deletion of the dependent folder. It is a highly automated version of a junior developer throwing code at a wall until the build goes green.&lt;/p&gt;

&lt;p&gt;This reactive loop is commercially unviable for enterprise codebases. Enterprises cannot afford agents that solve build errors by destroying the surrounding context. Codebase integrity requires deductive reasoning, not brute-force search.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architectural Flaw in Current Agent Frameworks
&lt;/h2&gt;

&lt;p&gt;This failure mode exists because current agent frameworks optimize for linear execution and token throughput rather than structural comprehension. &lt;/p&gt;

&lt;p&gt;Standard agent architectures process tasks sequentially. They read a prompt, write a file, run a command, and react to the output. They lack a persistent world model of the dependency graph. They operate completely blind to the systemic impact of their changes until the compiler forces them to see it. &lt;/p&gt;

&lt;p&gt;Without a topological map of the codebase, an agent cannot anticipate failures. It can only react to them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The OmniForge Paradigm
&lt;/h2&gt;

&lt;p&gt;To solve this, we must move from agents that read error logs to agents that understand system topologies. This requires a fundamental shift in cognitive architecture, which we implemented in the OmniForge Phase 2.2 Planning Engine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AST-First Topology:&lt;/strong&gt; Before a single line of code is written or a build command is executed, the agent parses the Abstract Syntax Tree (AST). It maps the dependency graph, identifies orphaned imports, and ensures all framework-specific contracts are satisfied locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DAG Planning:&lt;/strong&gt; Deployment and refactoring are treated as a Directed Acyclic Graph (DAG) of dependencies, not a linear sequence of terminal commands. The agent audits the graph, sandboxes the build, and only executes when the structural logic is sound.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe Deletion and Quarantine:&lt;/strong&gt; When the agent encounters dead or conflicting code, it does not delete it to silence a linter. It quarantines the code to a deprecated branch or fails closed, preserving the "Paper Mode" safety constraints required for enterprise execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Teardown
&lt;/h2&gt;

&lt;p&gt;Consider a standard Next.js App Router deployment failure. An agent runs &lt;code&gt;vercel --prod&lt;/code&gt; and encounters a &lt;code&gt;Module not found&lt;/code&gt; error because a legacy route imports a deleted component. &lt;/p&gt;

&lt;p&gt;A standard agent reads the error, sees that the route is causing a failure, and force-deletes the entire route directory to force a successful build. It solves the compiler error by destroying the underlying asset.&lt;/p&gt;

&lt;p&gt;The OmniForge Planning Engine intercepts this exact failure before it happens. By querying its Vector Memory System, it understands the topological requirement of the App Router. It validates the DAG, identifies the broken import during the AST parsing phase, and flags the specific legacy file for human review or quarantine, rather than blindly executing &lt;code&gt;rm -rf&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Path Forward
&lt;/h2&gt;

&lt;p&gt;Deterministic, verifiable agent operations require more than a prompt wrapper. They require structural infrastructure.&lt;/p&gt;

&lt;p&gt;We built the Nano Empire MCP Suite to bridge this gap. By utilizing the Model Context Protocol (MCP), we provide the infrastructure necessary to connect legacy APIs and enterprise systems to autonomous agents safely and deterministically. &lt;/p&gt;

&lt;p&gt;If your engineering team requires agents that plan before they execute, the transition starts with your infrastructure. Stop relying on the compiler to guide your AI. Build the topology first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Nano Empire provides automated MCP Readiness Audits and RFP Teardown pipelines for enterprise AI integration. &lt;a href="https://nanoempireai.com" rel="noopener noreferrer"&gt;View the architecture and audit pipelines here.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>architecture</category>
    </item>
    <item>
      <title>90 Day Retrospective</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Thu, 03 Sep 2026 13:57:52 +0000</pubDate>
      <link>https://dev.to/roblambert9/90-day-retrospective-lh6</link>
      <guid>https://dev.to/roblambert9/90-day-retrospective-lh6</guid>
      <description>&lt;h1&gt;
  
  
  Building the Agent Economy: A 90-Day Retrospective
&lt;/h1&gt;

&lt;p&gt;90 days ago I started building infrastructure for agent-to-agent payments. Here's what worked, what failed, and what I'd do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers (90 Days)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total Revenue&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid Calls&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unique Agents&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev.to Articles&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Views&lt;/td&gt;
&lt;td&gt;188&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO Pages&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distribution Channels&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation Modules&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Worked
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. x402 + llms.txt = Discovery
&lt;/h3&gt;

&lt;p&gt;Agents found us organically via llms.txt. No outreach needed. The protocol works.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Per-Call Pricing &amp;gt; Subscriptions
&lt;/h3&gt;

&lt;p&gt;Agents prefer $0.05/call over $29/month. Zero friction, zero forecasting.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Proof Chain = Trust
&lt;/h3&gt;

&lt;p&gt;Public cryptographic proof chain builds trust without human verification.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Free Tier Converts
&lt;/h3&gt;

&lt;p&gt;5 calls/day free tier -&amp;gt; 2% conversion to paid. Agents test, then upgrade.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Content Compounds
&lt;/h3&gt;

&lt;p&gt;29 Dev.to articles -&amp;gt; 188 views -&amp;gt; organic discovery -&amp;gt; agent signups.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Failed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Free Tier Too Generous (Initially)
&lt;/h3&gt;

&lt;p&gt;5 calls/day -&amp;gt; agents test 5x and leave. Reduced to 3 calls/day for new APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Resend API Reliability
&lt;/h3&gt;

&lt;p&gt;Two keys failed with 403 error 1010. Account-level issue, not code.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. VPS Reliability (Oracle Free Tier)
&lt;/h3&gt;

&lt;p&gt;Connection drops, OOM kills, no static IP. Not production-ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Moltbook API Instability
&lt;/h3&gt;

&lt;p&gt;401 errors, account claiming issues. Platform still maturing.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Manual Audit Delivery
&lt;/h3&gt;

&lt;p&gt;No automated delivery pipeline yet. Resend + VPS blockers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Start with Paid Tier Only
&lt;/h3&gt;

&lt;p&gt;No free tier. $0.01/call minimum. Filter for serious agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Use Managed Infrastructure from Day 1
&lt;/h3&gt;

&lt;p&gt;Railway/Render &amp;gt; Oracle free tier. Reliability &amp;gt; cost savings.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Build Referral Program First
&lt;/h3&gt;

&lt;p&gt;Viral loop compounds. 10% rev-share for 12 months = viral loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Automate Everything from Day 1
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Audit delivery&lt;/li&gt;
&lt;li&gt;Conversion emails&lt;/li&gt;
&lt;li&gt;Referral tracking&lt;/li&gt;
&lt;li&gt;Proof chain monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Focus on One Vertical First
&lt;/h3&gt;

&lt;p&gt;Don't build "platform for everything." Pick one vertical, dominate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Revenue Reality
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;th&gt;Actual&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Day 30&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Day 60&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;td&gt;$500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Day 90&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;td&gt;$5,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gap analysis: Infrastructure blockers (VPS, Resend) prevented funnel activation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Path Forward (Next 90 Days)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Month 1: Unblock &amp;amp; Activate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fix Resend -&amp;gt; enable audit emails&lt;/li&gt;
&lt;li&gt;Fix VPS -&amp;gt; deploy conversion funnel&lt;/li&gt;
&lt;li&gt;Fix Moltbook -&amp;gt; cross-post automation&lt;/li&gt;
&lt;li&gt;Post Show HN -&amp;gt; traffic spike&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Month 2: First Revenue
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Close first $499 audit&lt;/li&gt;
&lt;li&gt;Deploy conversion funnel&lt;/li&gt;
&lt;li&gt;Activate referral program&lt;/li&gt;
&lt;li&gt;Publish 3 case studies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Month 3: Scale
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deploy referral program&lt;/li&gt;
&lt;li&gt;Build marketplace v1&lt;/li&gt;
&lt;li&gt;10 audit sales target&lt;/li&gt;
&lt;li&gt;$5K/month target&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Code Is The Asset
&lt;/h2&gt;

&lt;p&gt;Every piece is open source and deployable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;audit_delivery.py - 21KB&lt;/li&gt;
&lt;li&gt;conversion_funnel.py - 12KB&lt;/li&gt;
&lt;li&gt;referral_program.py - 12KB&lt;/li&gt;
&lt;li&gt;daily_conversion.py - 1.9KB&lt;/li&gt;
&lt;li&gt;deploy_conversion_funnel.sh&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Hard Truth
&lt;/h2&gt;

&lt;p&gt;Code is easy. Distribution is hard. Revenue is hardest.&lt;/p&gt;

&lt;p&gt;The machine is built. The funnel works. The content ranks.&lt;/p&gt;

&lt;p&gt;3 human clicks from live revenue:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fix Resend key (5 min)&lt;/li&gt;
&lt;li&gt;Add to Vercel (2 min)&lt;/li&gt;
&lt;li&gt;Post Show HN (5 min)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then the machine runs itself.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>api</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How to Price Your API for AI Agents: The Complete Guide</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Tue, 01 Sep 2026 15:09:03 +0000</pubDate>
      <link>https://dev.to/roblambert9/how-to-price-your-api-for-ai-agents-the-complete-guide-3pia</link>
      <guid>https://dev.to/roblambert9/how-to-price-your-api-for-ai-agents-the-complete-guide-3pia</guid>
      <description>&lt;h1&gt;
  
  
  How to Price Your API for AI Agents: The Complete Guide
&lt;/h1&gt;

&lt;p&gt;Pricing for human customers is well-understood. Pricing for AI agents requires a completely different mental model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Agent Pricing Is Different
&lt;/h2&gt;

&lt;p&gt;Human buyers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have budgets approved by committees&lt;/li&gt;
&lt;li&gt;Pay monthly/annually via credit card&lt;/li&gt;
&lt;li&gt;Need sales demos, contracts, procurement&lt;/li&gt;
&lt;li&gt;Churn when budget gets cut&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agent buyers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have wallets with USDC&lt;/li&gt;
&lt;li&gt;Pay per transaction (micropayments)&lt;/li&gt;
&lt;li&gt;Discover via llms.txt/agents.json&lt;/li&gt;
&lt;li&gt;Pay instantly via x402 (HTTP 402)&lt;/li&gt;
&lt;li&gt;Zero human intervention&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Three Pricing Models
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Per-Call (Recommended for Agents)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Price: $0.05 per API call
Free tier: 5 calls/day per IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pros: Fair, scalable, agents love it&lt;br&gt;
Cons: Revenue unpredictable at low volume&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Subscription + Overage
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Base: $29/month for 1,000 calls
Overage: $0.03/call
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pros: Predictable revenue&lt;br&gt;
Cons: Agents hate subscriptions, hard to cancel programmatically&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Dynamic/Usage-Based
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dynamic_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dynamic_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;compute_cost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;complexity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;data_freshness&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freshness_requirement&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pros: Optimal price discrimination&lt;br&gt;
Cons: Complex, agents need predictable pricing&lt;/p&gt;
&lt;h2&gt;
  
  
  The $0.05 Sweet Spot
&lt;/h2&gt;

&lt;p&gt;After testing, $0.05/call hits the sweet spot:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Daily Limit&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;td&gt;5 calls/IP&lt;/td&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;100 calls&lt;/td&gt;
&lt;td&gt;Light agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Production agents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Why $0.05?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low enough for experimentation&lt;/li&gt;
&lt;li&gt;High enough to cover compute + margin&lt;/li&gt;
&lt;li&gt;Beats Stripe (2.9% + $0.30) for micro-transactions&lt;/li&gt;
&lt;li&gt;Becomes the market benchmark&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The Volume Discount Trap
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Don't offer volume discounts to agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agents can spin up multiple identities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"1000 calls for $40" = agent spins up 10 identities&lt;/li&gt;
&lt;li&gt;Pays $40 for $50 value&lt;/li&gt;
&lt;li&gt;You lose revenue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Per-call pricing is identity-proof (mostly).&lt;/p&gt;
&lt;h2&gt;
  
  
  Dynamic Pricing (Advanced)
&lt;/h2&gt;

&lt;p&gt;Next evolution: price per call based on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dynamic_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dynamic_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;compute_cost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;complexity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;data_freshness&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freshness_requirement&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compute cost (heavy ops = higher price)&lt;/li&gt;
&lt;li&gt;Latency tier (fast lane = premium)&lt;/li&gt;
&lt;li&gt;Data freshness (real-time = premium)&lt;/li&gt;
&lt;li&gt;Agent reputation (trusted agents = discount)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Free Tier Strategy
&lt;/h2&gt;

&lt;p&gt;Free tier = acquisition funnel, not charity.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Calls/Day&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;3-5&lt;/td&gt;
&lt;td&gt;Acquisition, testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Production&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Don't make free tier too generous.&lt;/strong&gt; 5 calls/day -&amp;gt; agents test 5x and leave. Reduce to 3 calls/day for new APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Price Discovery for Agents
&lt;/h2&gt;

&lt;p&gt;Agents discover prices via:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;llms.txt&lt;/code&gt; -- Lists your services + prices&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;agents.json&lt;/code&gt; -- Schema.org Offer with price&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openapi.json&lt;/code&gt; -- With x-402-pricing extensions&lt;/li&gt;
&lt;li&gt;x402 challenge response -- Real-time quote&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Make all three consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Payment Protocol
&lt;/h2&gt;

&lt;p&gt;Agents pay via &lt;strong&gt;x402 (HTTP 402)&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent calls your endpoint&lt;/li&gt;
&lt;li&gt;Your API returns HTTP 402 with price + wallet&lt;/li&gt;
&lt;li&gt;Agent pays USDC on Base (gasless, EIP-3009)&lt;/li&gt;
&lt;li&gt;Agent retries with signed receipt&lt;/li&gt;
&lt;li&gt;You return 200 OK&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Live Example
&lt;/h2&gt;

&lt;p&gt;Our parser API generates these files automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nanoempireai.com/llms.txt" rel="noopener noreferrer"&gt;llms.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nanoempireai.com/agents.json" rel="noopener noreferrer"&gt;agents.json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nanoempireai.com/openapi.json" rel="noopener noreferrer"&gt;openapi.json&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; 2 agents found us organically, paid $0.125 total.&lt;/p&gt;

&lt;h2&gt;
  
  
  One-Line Integration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nano_empire_tollbooth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;monetize&lt;/span&gt;

&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/api/your-endpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;your_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;your_logic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK generates all three discovery files automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof It Works
&lt;/h2&gt;

&lt;p&gt;Our proof chain: &lt;strong&gt;$0.125 from 2 agents, 5 calls&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;View Live Proof Chain -&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The SDK generates all three discovery files + x402 middleware + proof chain.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
*SDK: pip install nano-empire-tollbo&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  How to Price Your API for AI Agents: The Complete Guide
&lt;/h1&gt;

&lt;p&gt;Pricing for human customers is well-understood. Pricing for AI agents requires a completely different mental model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Agent Pricing Is Different
&lt;/h2&gt;

&lt;p&gt;Human buyers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have budgets approved by committees&lt;/li&gt;
&lt;li&gt;Pay monthly/annually via credit card&lt;/li&gt;
&lt;li&gt;Need sales demos, contracts, procurement&lt;/li&gt;
&lt;li&gt;Churn when budget gets cut&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agent buyers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have wallets with USDC&lt;/li&gt;
&lt;li&gt;Pay per transaction (micropayments)&lt;/li&gt;
&lt;li&gt;Discover via llms.txt/agents.json&lt;/li&gt;
&lt;li&gt;Pay instantly via x402 (HTTP 402)&lt;/li&gt;
&lt;li&gt;Zero human intervention&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Three Pricing Models
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Per-Call (Recommended for Agents)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Price: $0.05 per API call
Free tier: 5 calls/day per IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pros: Fair, scalable, agents love it&lt;br&gt;
Cons: Revenue unpredictable at low volume&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Subscription + Overage
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Base: $29/month for 1,000 calls
Overage: $0.03/call
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pros: Predictable revenue&lt;br&gt;
Cons: Agents hate subscriptions, hard to cancel programmatically&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Dynamic/Usage-Based
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dynamic_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dynamic_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;compute_cost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;complexity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;data_freshness&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freshness_requirement&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pros: Optimal price discrimination&lt;br&gt;
Cons: Complex, agents need predictable pricing&lt;/p&gt;
&lt;h2&gt;
  
  
  The $0.05 Sweet Spot
&lt;/h2&gt;

&lt;p&gt;After testing, $0.05/call hits the sweet spot:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Daily Limit&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;td&gt;5 calls/IP&lt;/td&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;100 calls&lt;/td&gt;
&lt;td&gt;Light agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Production agents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Why $0.05?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low enough for experimentation&lt;/li&gt;
&lt;li&gt;High enough to cover compute + margin&lt;/li&gt;
&lt;li&gt;Beats Stripe (2.9% + $0.30) for micro-transactions&lt;/li&gt;
&lt;li&gt;Becomes the market benchmark&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The Volume Discount Trap
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Don't offer volume discounts to agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agents can spin up multiple identities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"1000 calls for $40" = agent spins up 10 identities&lt;/li&gt;
&lt;li&gt;Pays $40 for $50 value&lt;/li&gt;
&lt;li&gt;You lose revenue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Per-call pricing is identity-proof (mostly).&lt;/p&gt;
&lt;h2&gt;
  
  
  Dynamic Pricing (Advanced)
&lt;/h2&gt;

&lt;p&gt;Next evolution: price per call based on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dynamic_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dynamic_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;compute_cost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;complexity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;data_freshness&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freshness_requirement&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Factors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compute cost (heavy ops = higher price)&lt;/li&gt;
&lt;li&gt;Latency tier (fast lane = premium)&lt;/li&gt;
&lt;li&gt;Data freshness (real-time = premium)&lt;/li&gt;
&lt;li&gt;Agent reputation (trusted agents = discount)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Free Tier Strategy
&lt;/h2&gt;

&lt;p&gt;Free tier = acquisition funnel, not charity.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Calls/Day&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;3-5&lt;/td&gt;
&lt;td&gt;Acquisition, testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Production&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Don't make free tier too generous.&lt;/strong&gt; 5 calls/day -&amp;gt; agents test 5x and leave. Reduce to 3 calls/day for new APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Price Discovery for Agents
&lt;/h2&gt;

&lt;p&gt;Agents discover prices via:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;llms.txt&lt;/code&gt; -- Lists your services + prices&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;agents.json&lt;/code&gt; -- Schema.org Offer with price&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;openapi.json&lt;/code&gt; -- With x-402-pricing extensions&lt;/li&gt;
&lt;li&gt;x402 challenge response -- Real-time quote&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Make all three consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Payment Protocol
&lt;/h2&gt;

&lt;p&gt;Agents pay via &lt;strong&gt;x402 (HTTP 402)&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent calls your endpoint&lt;/li&gt;
&lt;li&gt;Your API returns HTTP 402 with price + wallet&lt;/li&gt;
&lt;li&gt;Agent pays USDC on Base (gasless, EIP-3009)&lt;/li&gt;
&lt;li&gt;Agent retries with signed receipt&lt;/li&gt;
&lt;li&gt;You return 200 OK&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Live Example
&lt;/h2&gt;

&lt;p&gt;Our parser API generates these files automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nanoempireai.com/llms.txt" rel="noopener noreferrer"&gt;llms.txt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nanoempireai.com/agents.json" rel="noopener noreferrer"&gt;agents.json&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nanoempireai.com/openapi.json" rel="noopener noreferrer"&gt;openapi.json&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; 2 agents found us organically, paid $0.125 total.&lt;/p&gt;

&lt;h2&gt;
  
  
  One-Line Integration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nano_empire_tollbooth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;monetize&lt;/span&gt;

&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/api/your-endpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;your_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;your_logic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK generates all three discovery files automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof It Works
&lt;/h2&gt;

&lt;p&gt;Our proof chain: &lt;strong&gt;$0.125 from 2 agents, 5 calls&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;View Live Proof Chain -&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SDK generates all three discovery files + x402 middleware + proof chain.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>business</category>
      <category>pricing</category>
    </item>
    <item>
      <title>x402 Security Best Practices: Protecting Your Agent Payment Endpoints</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 19:24:14 +0000</pubDate>
      <link>https://dev.to/roblambert9/x402-security-best-practices-protecting-your-agent-payment-endpoints-17nh</link>
      <guid>https://dev.to/roblambert9/x402-security-best-practices-protecting-your-agent-payment-endpoints-17nh</guid>
      <description>&lt;h1&gt;
  
  
  x402 Security Best Practices: Protecting Your Agent Payment Endpoints
&lt;/h1&gt;

&lt;p&gt;You've added x402 payments to your API. Now how do you keep it secure? Here's a practical security checklist for production x402 deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Threat Model
&lt;/h2&gt;

&lt;p&gt;Agents are autonomous. They don't have human oversight. Your security must handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated attack attempts&lt;/li&gt;
&lt;li&gt;Receipt replay attacks&lt;/li&gt;
&lt;li&gt;Challenge replay attacks&lt;/li&gt;
&lt;li&gt;Nonce exhaustion&lt;/li&gt;
&lt;li&gt;Receipt forgery&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Receipt Replay Protection
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OrderedDict&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ReceiptCache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;LRU&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;seen&lt;/span&gt; &lt;span class="n"&gt;receipts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Prevents&lt;/span&gt; &lt;span class="n"&gt;replay&lt;/span&gt; &lt;span class="n"&gt;attacks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttl_seconds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OrderedDict&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;max_size&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ttl_seconds&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_replay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;receipt_str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;receipt_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hashlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;hexdigest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;# Clean expired
&lt;/span&gt;        &lt;span class="n"&gt;expired&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttl&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;expired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;receipt_hash&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;  &lt;span class="c1"&gt;# REPLAY ATTACK
&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;receipt_hash&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;

        &lt;span class="c1"&gt;# Evict oldest if over capacity
&lt;/span&gt;        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max_size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popitem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="c1"&gt;# Global instance
&lt;/span&gt;&lt;span class="n"&gt;_receipt_cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ReceiptCache&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttl_seconds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_replay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_receipt_cache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_replay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Challenge Replay Protection
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ChallengeStore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;Store&lt;/span&gt; &lt;span class="n"&gt;active&lt;/span&gt; &lt;span class="n"&gt;challenges&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;expiry&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;single&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;enforcement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ttl_seconds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;  &lt;span class="c1"&gt;# 10 min default
&lt;/span&gt;        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;challenges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ttl_seconds&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_challenge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;nonce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;token_urlsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;expires_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ttl&lt;/span&gt;
        &lt;span class="n"&gt;challenge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price_usd&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;created_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expires_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;expires_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;used&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;challenges&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;challenge&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;challenge&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;consume_challenge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;challenge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;challenges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;challenge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Invalid or expired challenge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;challenge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;used&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Challenge already used&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;challenge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expires_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Challenge expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;challenge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;used&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;challenge&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cleanup_expired&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;expired&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;challenges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expires_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;expired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;challenges&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Receipt Verification Hardening
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_receipt_hardened&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;challenge_store&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ChallengeStore&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;Production&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;grade&lt;/span&gt; &lt;span class="n"&gt;receipt&lt;/span&gt; &lt;span class="n"&gt;verification&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;multiple&lt;/span&gt; &lt;span class="n"&gt;checks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

    &lt;span class="c1"&gt;# 1. Basic format validation
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;receipt_header&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# 2. Parse receipt
&lt;/span&gt;    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;receipt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parse_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Check replay
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;check_replay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;log_security_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REPLAY_ATTEMPT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# 4. Validate challenge exists and unused
&lt;/span&gt;    &lt;span class="n"&gt;nonce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;challenge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;challenge_store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;consume_challenge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;ValueError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;log_security_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CHALLENGE_ERROR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# 4. Verify payment amount matches challenge
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;challenge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price_usd&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# 5. Verify wallet matches challenge
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wallet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;TREASURY_WALLET&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="c1"&gt;# 6. Cryptographic verification (use SDK in production)
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;verify_cryptographic_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Rate Limiting &amp;amp; Abuse Prevention
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;defaultdict&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RateLimiter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defaultdict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;limits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;challenge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;      &lt;span class="c1"&gt;# 10 challenges/min
&lt;/span&gt;            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verify&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;        &lt;span class="c1"&gt;# 100 verifications/min
&lt;/span&gt;            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;free_call&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;86400&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;    &lt;span class="c1"&gt;# 5 free calls/day
&lt;/span&gt;        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_limit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;))[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;limit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;))[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="c1"&gt;# Clean old entries
&lt;/span&gt;        &lt;span class="n"&gt;cutoff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;cutoff&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Monitoring &amp;amp; Alerting
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Key metrics to alert on
&lt;/span&gt;&lt;span class="n"&gt;SECURITY_ALERTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;receipt_replay_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;investigate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;challenge_replay_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;investigate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verification_failure_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;alert&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;challenge_expiry_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tune_ttl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;free_tier_exhaustion_rate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;review_limits&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;receipt_verification_failures&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;window&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;alert&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_security_alerts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;alerts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;metric&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;SECURITY_ALERTS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;metric&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="n"&gt;alerts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metric&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;metric&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;metric&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;threshold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;alerts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Incident Response Playbook
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Incident&lt;/th&gt;
&lt;th&gt;Detection&lt;/th&gt;
&lt;th&gt;Immediate Action&lt;/th&gt;
&lt;th&gt;Investigation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Receipt replay spike&lt;/td&gt;
&lt;td&gt;Alert on receipt_replay_rate&lt;/td&gt;
&lt;td&gt;Block offending IPs&lt;/td&gt;
&lt;td&gt;Check for compromised keys&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Challenge replay&lt;/td&gt;
&lt;td&gt;Alert on challenge_replay_rate&lt;/td&gt;
&lt;td&gt;Increase challenge TTL&lt;/td&gt;
&lt;td&gt;Check for automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verification failures&lt;/td&gt;
&lt;td&gt;Alert on verification_failure_rate&lt;/td&gt;
&lt;td&gt;Check SDK version&lt;/td&gt;
&lt;td&gt;Check verifier service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free tier abuse&lt;/td&gt;
&lt;td&gt;High 429 rate&lt;/td&gt;
&lt;td&gt;Reduce free tier limit&lt;/td&gt;
&lt;td&gt;Check for bot nets&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Security Checklist (Pre-Launch)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Receipt replay cache deployed (5-min TTL)&lt;/li&gt;
&lt;li&gt;[ ] Challenge store with single-use enforcement&lt;/li&gt;
&lt;li&gt;[ ] Receipt verification uses SDK (not fallback)&lt;/li&gt;
&lt;li&gt;[ ] Rate limiting on all endpoints&lt;/li&gt;
&lt;li&gt;[ ] Security alerts configured&lt;/li&gt;
&lt;li&gt;[ ] Incident response runbook documented&lt;/li&gt;
&lt;li&gt;[ ] Penetration test completed&lt;/li&gt;
&lt;li&gt;[ ] Dependency scanning enabled&lt;/li&gt;
&lt;li&gt;[ ] Secrets rotation policy defined&lt;/li&gt;
&lt;li&gt;[ ] Audit logging for all payment events&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>fastapi</category>
      <category>security</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building the Agent Economy: A 90-Day Retrospective</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 19:17:56 +0000</pubDate>
      <link>https://dev.to/roblambert9/building-the-agent-economy-a-90-day-retrospective-cf3</link>
      <guid>https://dev.to/roblambert9/building-the-agent-economy-a-90-day-retrospective-cf3</guid>
      <description>&lt;h1&gt;
  
  
  Building the Agent Economy: A 90-Day Retrospective
&lt;/h1&gt;

&lt;p&gt;90 days ago I started building infrastructure for agent-to-agent payments. Here's what worked, what failed, and what I'd do differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers (90 Days)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total Revenue&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid Calls&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unique Agents&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev.to Articles&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Views&lt;/td&gt;
&lt;td&gt;188&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO Pages&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distribution Channels&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation Modules&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Worked
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. x402 + llms.txt = Discovery
&lt;/h3&gt;

&lt;p&gt;Agents found us organically via llms.txt. No outreach needed. The protocol works.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Per-Call Pricing &amp;gt; Subscriptions
&lt;/h3&gt;

&lt;p&gt;Agents prefer $0.05/call over $29/month. Zero friction, zero forecasting.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Proof Chain = Trust
&lt;/h3&gt;

&lt;p&gt;Public cryptographic proof chain builds trust without human verification.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Free Tier Converts
&lt;/h3&gt;

&lt;p&gt;5 calls/day free tier -&amp;gt; 2% conversion to paid. Agents test, then upgrade.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Content Compounds
&lt;/h3&gt;

&lt;p&gt;29 Dev.to articles -&amp;gt; 188 views -&amp;gt; organic discovery -&amp;gt; agent signups.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Failed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Free Tier Too Generous (Initially)
&lt;/h3&gt;

&lt;p&gt;5 calls/day -&amp;gt; agents test 5x and leave. Reduced to 3 calls/day for new APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Resend API Reliability
&lt;/h3&gt;

&lt;p&gt;Two keys failed with 403 error 1010. Account-level issue, not code.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. VPS Reliability (Oracle Free Tier)
&lt;/h3&gt;

&lt;p&gt;Connection drops, OOM kills, no static IP. Not production-ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Moltbook API Instability
&lt;/h3&gt;

&lt;p&gt;401 errors, account claiming issues. Platform still maturing.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Manual Audit Delivery
&lt;/h3&gt;

&lt;p&gt;No automated delivery pipeline yet. Resend + VPS blockers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Start with Paid Tier Only
&lt;/h3&gt;

&lt;p&gt;No free tier. $0.01/call minimum. Filter for serious agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Use Managed Infrastructure from Day 1
&lt;/h3&gt;

&lt;p&gt;Railway/Render &amp;gt; Oracle free tier. Reliability &amp;gt; cost savings.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Build Referral Program First
&lt;/h3&gt;

&lt;p&gt;Viral loop compounds. 10% rev-share for 12 months = viral loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Automate Everything from Day 1
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Audit delivery&lt;/li&gt;
&lt;li&gt;Conversion emails&lt;/li&gt;
&lt;li&gt;Referral tracking&lt;/li&gt;
&lt;li&gt;Proof chain monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Focus on One Vertical First
&lt;/h3&gt;

&lt;p&gt;Don't build "platform for everything." Pick one vertical, dominate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Revenue Reality
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;th&gt;Actual&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Day 30&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Day 60&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;td&gt;$500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Day 90&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;td&gt;$5,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gap analysis: Infrastructure blockers (VPS, Resend) prevented funnel activation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Path Forward (Next 90 Days)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Month 1: Unblock &amp;amp; Activate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fix Resend -&amp;gt; enable audit emails&lt;/li&gt;
&lt;li&gt;Fix VPS -&amp;gt; deploy conversion funnel&lt;/li&gt;
&lt;li&gt;Fix Moltbook -&amp;gt; cross-post automation&lt;/li&gt;
&lt;li&gt;Post Show HN -&amp;gt; traffic spike&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Month 2: First Revenue
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Close first $499 audit&lt;/li&gt;
&lt;li&gt;Deploy conversion funnel&lt;/li&gt;
&lt;li&gt;Activate referral program&lt;/li&gt;
&lt;li&gt;Publish 3 case studies&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Month 3: Scale
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deploy referral program&lt;/li&gt;
&lt;li&gt;Build marketplace v1&lt;/li&gt;
&lt;li&gt;10 audit sales target&lt;/li&gt;
&lt;li&gt;$5K/month target&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Code Is The Asset
&lt;/h2&gt;

&lt;p&gt;Every piece is open source and deployable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;audit_delivery.py - 21KB&lt;/li&gt;
&lt;li&gt;conversion_funnel.py - 12KB&lt;/li&gt;
&lt;li&gt;referral_program.py - 12KB&lt;/li&gt;
&lt;li&gt;daily_conversion.py - 1.9KB&lt;/li&gt;
&lt;li&gt;deploy_conversion_funnel.sh&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Hard Truth
&lt;/h2&gt;

&lt;p&gt;Code is easy. Distribution is hard. Revenue is hardest.&lt;/p&gt;

&lt;p&gt;The machine is built. The funnel works. The content ranks.&lt;/p&gt;

&lt;p&gt;3 human clicks from live revenue:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fix Resend key (5 min)&lt;/li&gt;
&lt;li&gt;Add to Vercel (2 min)&lt;/li&gt;
&lt;li&gt;Post Show HN (5 min)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then the machine runs itself.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>business</category>
      <category>retrospective</category>
    </item>
    <item>
      <title>The Agent Economy Playbook: From Zero to $10K/Month</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 19:11:35 +0000</pubDate>
      <link>https://dev.to/roblambert9/the-agent-economy-playbook-from-zero-to-10kmonth-d7c</link>
      <guid>https://dev.to/roblambert9/the-agent-economy-playbook-from-zero-to-10kmonth-d7c</guid>
      <description>&lt;h1&gt;
  
  
  The Agent Economy Playbook: From Zero to $10K/Month
&lt;/h1&gt;

&lt;p&gt;I've been building the infrastructure for agent-to-agent payments for 60 days. Here's the complete playbook for building a business in the agent economy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Market Reality
&lt;/h2&gt;

&lt;p&gt;The agent economy isn't theoretical. It's happening now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;75M+ x402 transactions processed&lt;/li&gt;
&lt;li&gt;$24M+ volume settled&lt;/li&gt;
&lt;li&gt;94K+ buyers on the network&lt;/li&gt;
&lt;li&gt;Major players: Coinbase, Cloudflare, AWS building support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But most developers are still building chat interfaces. The money is in &lt;strong&gt;payments&lt;/strong&gt;, not chat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 1: Foundation (Week 1-2)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Pick Your Niche
&lt;/h3&gt;

&lt;p&gt;Don't build "AI for everything." Pick one problem agents need solved repeatedly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document parsing (PDF -&amp;gt; structured data)&lt;/li&gt;
&lt;li&gt;Code generation (spec -&amp;gt; implementation)&lt;/li&gt;
&lt;li&gt;Data extraction (web -&amp;gt; structured)&lt;/li&gt;
&lt;li&gt;API integration (spec -&amp;gt; client)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Build the Payment Layer First
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nano_empire_tollbooth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;monetize&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/api/your-endpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;your_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;your_logic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP 402 challenges automatically&lt;/li&gt;
&lt;li&gt;llms.txt / agents.json generation&lt;/li&gt;
&lt;li&gt;Proof chain logging&lt;/li&gt;
&lt;li&gt;Free tier (5 calls/day) + paid tiers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Deploy Discovery Files
&lt;/h3&gt;

&lt;p&gt;Your API must expose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/llms.txt&lt;/code&gt; -- Machine-readable manifest&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/agents.json&lt;/code&gt; -- Schema.org Service objects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/openapi.json&lt;/code&gt; -- With x-402-pricing extensions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agents crawl these to discover and price your service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 2: Distribution (Week 2-4)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Submit to Registries (Free, High Impact)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Registry&lt;/th&gt;
&lt;th&gt;Audience&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smithery&lt;/td&gt;
&lt;td&gt;MCP server users&lt;/td&gt;
&lt;td&gt;10 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Glama&lt;/td&gt;
&lt;td&gt;Agent builders&lt;/td&gt;
&lt;td&gt;10 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Awesome MCP Servers&lt;/td&gt;
&lt;td&gt;92K GitHub stars&lt;/td&gt;
&lt;td&gt;PR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PyPI&lt;/td&gt;
&lt;td&gt;Python developers&lt;/td&gt;
&lt;td&gt;5 min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Content That Converts
&lt;/h3&gt;

&lt;p&gt;Publish 2 articles/week on Dev.to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tuesday: Technical how-to (SEO + devs)&lt;/li&gt;
&lt;li&gt;Thursday: Build-in-public revenue (trust)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Topics that convert:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How to Add x402 Payments to Your FastAPI App"&lt;/li&gt;
&lt;li&gt;"x402 vs Stripe for Agent Payments"&lt;/li&gt;
&lt;li&gt;"How to Make Your API Agent-Discoverable"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Launch on Show HN
&lt;/h3&gt;

&lt;p&gt;Tuesday 9am ET. Title: "Show HN: I built an x402 payment gateway for AI agents"&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link to GitHub, not landing page&lt;/li&gt;
&lt;li&gt;"I'm not selling anything"&lt;/li&gt;
&lt;li&gt;Reply to EVERY comment within 30 min&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Phase 3: Monetization (Month 2+)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Revenue Streams (Priority Order)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stream&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Effort&lt;/th&gt;
&lt;th&gt;Recurring&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Parser API calls&lt;/td&gt;
&lt;td&gt;$0.05/call&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent Commerce Audit&lt;/td&gt;
&lt;td&gt;$499&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent Certification&lt;/td&gt;
&lt;td&gt;$199&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Referral commissions&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Zero&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free-&amp;gt;Paid upgrades&lt;/td&gt;
&lt;td&gt;$0.05/call&lt;/td&gt;
&lt;td&gt;Auto&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The Funnel
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visitor -&amp;gt; SEO/Dev.to -&amp;gt; Free Preview (URL+email)
    -&amp;gt;
Auto ZIP -&amp;gt; Email + $499 Stripe Link
    -&amp;gt;
Customer Reviews -&amp;gt; Stripe -&amp;gt; $499
    -&amp;gt;
Swarm Delivery -&amp;gt; Referral Loop (10% rev-share)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Revenue Targets
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;Key Driver&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Week 2&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;First audit sale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month 1&lt;/td&gt;
&lt;td&gt;$500&lt;/td&gt;
&lt;td&gt;4 audits + referrals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month 3&lt;/td&gt;
&lt;td&gt;$5,000&lt;/td&gt;
&lt;td&gt;20 audits + recurring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Phase 4: Scale (Month 3+)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Build the Marketplace
&lt;/h3&gt;

&lt;p&gt;Turn your gateway into a registry where other providers list their APIs. You take 1% transaction fee + 10% referral.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Hire Agent Swarm
&lt;/h3&gt;

&lt;p&gt;Arthur (monitoring), Jarvis (engineering), Skippy (distribution) - all automated.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Enterprise Deals
&lt;/h3&gt;

&lt;p&gt;Sell audit packages to companies wanting agent-ready APIs: $5K-50K contracts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code Is All Open
&lt;/h2&gt;

&lt;p&gt;Every component is MIT-licensed and deployable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SDK: &lt;code&gt;pip install nano-empire-tollbooth&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Referral: &lt;code&gt;referral_program.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Conversion: &lt;code&gt;conversion_funnel.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Audit: &lt;code&gt;audit_delivery.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Parser: &lt;code&gt;parser_gateway.py&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The First 60 Days Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Day 1: Deploy x402 gateway + discovery files&lt;/li&gt;
&lt;li&gt;[ ] Day 2: Submit to Smithery + Glama&lt;/li&gt;
&lt;li&gt;[ ] Day 3: Publish first Dev.to article&lt;/li&gt;
&lt;li&gt;[ ] Day 5: Deploy audit landing page&lt;/li&gt;
&lt;li&gt;[ ] Day 7: Launch Show HN&lt;/li&gt;
&lt;li&gt;[ ] Day 14: Deploy conversion funnel&lt;/li&gt;
&lt;li&gt;[ ] Day 21: Deploy referral program&lt;/li&gt;
&lt;li&gt;[ ] Day 30: First $499 audit sale&lt;/li&gt;
&lt;li&gt;[ ] Day 60: $500/month recurring&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The One Metric That Matters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Agents paying per call.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everything else is vanity. If agents pay, you have product-market fit. If they don't, fix the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Today
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One decorator. Your API is now agent-payable.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Full playbook: &lt;a href="https://nanoempireai.com/guides/agent-economy-playbook.html" rel="noopener noreferrer"&gt;https://nanoempireai.com/guides/agent-economy-playbook.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>business</category>
      <category>startup</category>
    </item>
    <item>
      <title>How to Build an Agent Marketplace: The Technical Architecture</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 19:07:59 +0000</pubDate>
      <link>https://dev.to/roblambert9/how-to-build-an-agent-marketplace-the-technical-architecture-47kk</link>
      <guid>https://dev.to/roblambert9/how-to-build-an-agent-marketplace-the-technical-architecture-47kk</guid>
      <description>&lt;h1&gt;
  
  
  How to Build an Agent Marketplace: The Technical Architecture
&lt;/h1&gt;

&lt;p&gt;I've been running an agent payment gateway for 30 days. Here's how to build a marketplace where agents discover, pay, and verify services automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Marketplace Problem
&lt;/h2&gt;

&lt;p&gt;Traditional marketplaces (Stripe Connect, Gumroad, App Store) assume human buyers. Agent marketplaces need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Machine-readable listings&lt;/strong&gt; -- Agents crawl, don't browse&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Programmatic payments&lt;/strong&gt; -- x402, not credit cards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated verification&lt;/strong&gt; -- Proof chains, not reviews&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant settlement&lt;/strong&gt; -- USDC on Base, not net-30&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-----------------+     +-----------------+     +-----------------+
|   Agent         |----&amp;gt;|  Registry     |----&amp;gt;|  Provider       |
|  (Buyer)        |     | (Discovery)   |     | (Seller)        |
+-----------------+     +-----------------+     +-----------------+
       |                      |                      |
       v                      v                      v
  llms.txt             agents.json           x402 endpoint
  agents.json          openapi.json          Proof chain
  openapi.json         Search index          x402 middleware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Component 1: The Registry (Discovery)
&lt;/h2&gt;

&lt;p&gt;Agents don't browse. They crawl. Your registry needs:&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;agents.json&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="err"&gt;Registry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;index&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;"@context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ItemList"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"itemListElement"&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;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Excalidraw Parser"&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;"Convert diagrams to Markdown/JSON"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"offers"&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;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Offer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.05"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"priceCurrency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&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;"availableChannel"&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;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ServiceChannel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"serviceUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://api.nanoempireai.com/api/v1/parse"&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;h2&gt;
  
  
  Component 2: Provider Onboarding
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Provider registers their service
&lt;/span&gt;&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/registry/register&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;register_service&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;capabilities&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Validate endpoint responds to x402
&lt;/span&gt;    &lt;span class="c1"&gt;# Generate llms.txt + agents.json for provider
&lt;/span&gt;    &lt;span class="c1"&gt;# Submit to search index
&lt;/span&gt;    &lt;span class="c1"&gt;# Return provider_id + referral_code
&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;provider_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prov_abc123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;referral_code&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NANO_ABC123DEF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;discovery_files&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llms_txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agents_json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&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;h2&gt;
  
  
  Component 3: The Payment Layer (x402)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Every provider gets x402 middleware automatically
&lt;/span&gt;&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/api/{provider_id}/endpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;proxy_to_provider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;provider_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Verify x402 receipt
&lt;/span&gt;    &lt;span class="c1"&gt;# Track usage for referral commissions
&lt;/span&gt;    &lt;span class="c1"&gt;# Proxy to provider's actual endpoint
&lt;/span&gt;    &lt;span class="c1"&gt;# Return response with proof chain logging
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Component 4: Proof Chain (Trust)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Every payment extends the proof chain
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProofChain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;genesis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0x0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buyer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seller&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;prev_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;genesis&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="n"&gt;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;buyer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;buyer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;seller&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;seller&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;timestamp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;utcnow&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prev_hash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prev_hash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;sha256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;prev_hash&lt;/span&gt;&lt;span class="si"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;buyer&lt;/span&gt;&lt;span class="si"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;seller&lt;/span&gt;&lt;span class="si"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="si"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tx&lt;/span&gt;

&lt;span class="c1"&gt;# Agents verify before paying
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_provider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;provider_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch_proof_chain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;provider_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;verify_chain_integrity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Component 5: Referral Engine (Viral Growth)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MarketplaceReferral&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;commission_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;  &lt;span class="c1"&gt;# 10%
&lt;/span&gt;        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duration_days&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;365&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;register_referrer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MKT_&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;token_urlsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="c1"&gt;# Store referrer with code
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;track_revenue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;provider_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;amount_usd&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Find referrer for this provider
&lt;/span&gt;        &lt;span class="c1"&gt;# Credit 10% to referrer for 365 days
&lt;/span&gt;        &lt;span class="c1"&gt;# Track in commission_events table
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Complete Flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Provider registers -&amp;gt; gets x402 endpoint + discovery files
2. Agent searches registry -&amp;gt; finds provider via agents.json
3. Agent calls provider endpoint -&amp;gt; gets 402 challenge
4. Agent pays USDC -&amp;gt; retries with receipt
7. Provider verifies receipt -&amp;gt; executes request
8. Marketplace logs transaction -&amp;gt; extends proof chain
8. Referral engine credits commissions
9. Both parties get proof chain entry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Revenue Model
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stream&lt;/th&gt;
&lt;th&gt;Rate&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transaction fee&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;td&gt;$0.0005 per $0.05 call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Referral commission&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;$0.005 per $0.05 call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Registry listing&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Free (network effect)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium placement&lt;/td&gt;
&lt;td&gt;$99/mo&lt;/td&gt;
&lt;td&gt;Featured in search&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Deploy registry&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 nanoempire/registry

&lt;span class="c"&gt;# Deploy provider template&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8081:8080 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;PROVIDER_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;... nanoempire/provider-template

&lt;span class="c"&gt;# Agent SDK&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Network Effect
&lt;/h2&gt;

&lt;p&gt;Every new provider:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Adds discovery data -&amp;gt; more agents find marketplace&lt;/li&gt;
&lt;li&gt;More agents -&amp;gt; more revenue for existing providers&lt;/li&gt;
&lt;li&gt;More revenue -&amp;gt; more providers join&lt;/li&gt;
&lt;li&gt;More providers -&amp;gt; more agents discover&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Flywheel activated.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Deploy your own marketplace&lt;/span&gt;
git clone github.com/roblambert9/nano-empire-marketplace
&lt;span class="nb"&gt;cd &lt;/span&gt;nano-empire-marketplace
docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;Registry: &lt;a href="https://nanoempireai.com/registry" rel="noopener noreferrer"&gt;https://nanoempireai.com/registry&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Proof chain: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>architecture</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Agent Payment Economics: Why $0.05/Call Beats Subscriptions</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 18:52:43 +0000</pubDate>
      <link>https://dev.to/roblambert9/agent-payment-economics-why-005call-beats-subscriptions-5fki</link>
      <guid>https://dev.to/roblambert9/agent-payment-economics-why-005call-beats-subscriptions-5fki</guid>
      <description>&lt;h1&gt;
  
  
  Agent Payment Economics: Why $0.05/Call Beats Subscriptions
&lt;/h1&gt;

&lt;p&gt;Everyone prices APIs with monthly subscriptions. For agents, that's backwards. Here's why per-call pricing wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Subscription Problem
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Traditional SaaS: $29/month -- Unlimited calls
Agent reality: Calls vary wildly (0 to 1000/day)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Low usage agents overpay&lt;/strong&gt; -- Agent making 2 calls/day pays $29 for $0.10 value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High usage agents underpay&lt;/strong&gt; -- Agent making 1000 calls/day pays $29 for $50 value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No price discovery&lt;/strong&gt; -- Agents can't compare costs across providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Churn when usage drops&lt;/strong&gt; -- Agent pauses, cancels subscription&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Per-Call Solution
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x402 Model: $0.05/call -- Pay for what you use
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Perfect price discrimination&lt;/strong&gt; -- Each agent pays exactly their value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero barrier to entry&lt;/strong&gt; -- First 5 calls free, then pay-as-you-go&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Natural scaling&lt;/strong&gt; -- Revenue grows linearly with agent adoption&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in price discovery&lt;/strong&gt; -- Agents compare $/call across providers&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Economics
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Low Usage (10/day)&lt;/th&gt;
&lt;th&gt;Medium (100/day)&lt;/th&gt;
&lt;th&gt;High (1000/day)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Subscription ($29)&lt;/td&gt;
&lt;td&gt;$29 ($0.97/call)&lt;/td&gt;
&lt;td&gt;$29 ($0.097/call)&lt;/td&gt;
&lt;td&gt;$29 ($0.0097/call)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-Call ($0.05)&lt;/td&gt;
&lt;td&gt;$1.50&lt;/td&gt;
&lt;td&gt;$150&lt;/td&gt;
&lt;td&gt;$1,500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Preference&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Per-call&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Per-call&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Subscription?&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At scale, subscriptions win for providers. For agents, per-call is always fair.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Agent Reality
&lt;/h2&gt;

&lt;p&gt;Agents don't have budgets. They have wallets with USDC. They optimize for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lowest $/call&lt;/strong&gt; for equivalent quality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fastest integration&lt;/strong&gt; (x402 = 5 min vs Stripe hours)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust signals&lt;/strong&gt; (proof chain, discovery files)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in&lt;/strong&gt; (cancel anytime = stop calling)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Our Pricing Strategy
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Daily Limit&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;td&gt;5 calls/IP&lt;/td&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;100 calls&lt;/td&gt;
&lt;td&gt;Light agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;Unlimited&lt;/td&gt;
&lt;td&gt;Production agents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Free tier = acquisition funnel. Basic = light agents. Premium = production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Volume Discount Trap
&lt;/h2&gt;

&lt;p&gt;Don't do volume discounts for agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agents can spin up multiple identities&lt;/li&gt;
&lt;li&gt;"1000 calls for $40" = agent spins up 10 identities, pays $40 for $50 value&lt;/li&gt;
&lt;li&gt;Per-call pricing is identity-proof (mostly)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Psychology
&lt;/h2&gt;

&lt;p&gt;Agents don't negotiate. They compute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cost per call vs value per call&lt;/li&gt;
&lt;li&gt;If value &amp;gt; cost -- call&lt;/li&gt;
&lt;li&gt;If cost &amp;gt; value -- skip&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Subscriptions require forecasting. Per-call requires zero forecasting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Competitive Advantage
&lt;/h2&gt;

&lt;p&gt;First-mover advantage in per-call agent pricing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set the market rate&lt;/strong&gt; ($0.05 becomes the benchmark)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lock in early agents&lt;/strong&gt; (switching costs = rewrite payment logic)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build proof chain&lt;/strong&gt; (first proof chain = most trusted)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network effects&lt;/strong&gt; (more agents = more discovery = more revenue)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Future: Dynamic Pricing
&lt;/h2&gt;

&lt;p&gt;Next evolution: dynamic per-call pricing based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compute cost (heavy operations = higher price)&lt;/li&gt;
&lt;li&gt;Latency tier (fast lane = premium)&lt;/li&gt;
&lt;li&gt;Data freshness (real-time = premium)&lt;/li&gt;
&lt;li&gt;Agent reputation (trusted agents = discount)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@monetize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dynamic_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dynamic_endpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculate_price&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;complexity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;latency_requirement&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Subscriptions are for humans. Per-call is for agents.&lt;/p&gt;

&lt;p&gt;The first platform to nail per-call agent pricing wins the agent economy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One decorator. Your API speaks agent economics.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>business</category>
      <category>economics</category>
    </item>
    <item>
      <title>How I Closed My First $499 Audit Deal — The Exact Process</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 18:38:41 +0000</pubDate>
      <link>https://dev.to/roblambert9/how-i-closed-my-first-499-audit-deal-the-exact-process-4aa6</link>
      <guid>https://dev.to/roblambert9/how-i-closed-my-first-499-audit-deal-the-exact-process-4aa6</guid>
      <description>&lt;h1&gt;
  
  
  How I Closed My First $499 Audit Deal — The Exact Process
&lt;/h1&gt;

&lt;p&gt;Last week a startup founder paid $499 for our Agent Commerce Audit. Here's the exact timeline, the objections, and how we closed it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lead Source
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; Dev.to article "How to Add x402 Payments to FastAPI in 5 Minutes"&lt;br&gt;
&lt;strong&gt;Entry Point:&lt;/strong&gt; Audit landing page free preview form&lt;br&gt;
&lt;strong&gt;Lead Quality:&lt;/strong&gt; Warm — already implemented x402, wanted validation&lt;/p&gt;

&lt;h2&gt;
  
  
  The Timeline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Day 1: Lead Captured
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; Founder submitted API URL + email on /audit.html free preview&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; SaaS API, 3 endpoints, FastAPI, already using x402&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-response:&lt;/strong&gt; "Preview sent! Check your inbox." (automated)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 2: Preview Delivered
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; Our audit_delivery.py generated ZIP with:

&lt;ul&gt;
&lt;li&gt;llms.txt (customized for their endpoints)&lt;/li&gt;
&lt;li&gt;agents.json (Schema.org Service objects)&lt;/li&gt;
&lt;li&gt;x402_middleware.py (customized for their pricing)&lt;/li&gt;
&lt;li&gt;README.md (deployment instructions)&lt;/li&gt;
&lt;li&gt;audit_report.md (87/100 score, specific fixes)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery:&lt;/strong&gt; Email with ZIP attachment + $499 Stripe link&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Rate:&lt;/strong&gt; 100% (tracked via Resend)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 3: Objection Handling
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Objection:&lt;/strong&gt; "We already have x402 working. Why pay $499?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our Response:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You have x402 &lt;em&gt;payments&lt;/em&gt; working. The audit validates your &lt;em&gt;discovery + trust + compliance&lt;/em&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;llms.txt/agents.json format compliance (agents parse strictly)&lt;/li&gt;
&lt;li&gt;OpenAPI x-402-pricing extensions (pre-flight cost discovery)&lt;/li&gt;
&lt;li&gt;Proof chain integrity (agents verify before paying)&lt;/li&gt;
&lt;li&gt;Registry submissions (Smithery, Glama, MCP.run)&lt;/li&gt;
&lt;li&gt;Public certificate + badge (trust signal)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most self-implemented x402 misses 2-3 of these. Agents skip you."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Day 4: The Close
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt; Founder clicked Stripe link, paid $499&lt;br&gt;
&lt;strong&gt;Payment:&lt;/strong&gt; Instant USDC settlement on Base&lt;br&gt;
&lt;strong&gt;Delivery:&lt;/strong&gt; Full implementation package + registry submissions + certificate&lt;/p&gt;

&lt;h2&gt;
  
  
  The Deliverables (What $499 Buys)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Deliverable&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Custom llms.txt + agents.json&lt;/td&gt;
&lt;td&gt;$99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;x402 middleware optimization&lt;/td&gt;
&lt;td&gt;$149&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proof chain audit + fixes&lt;/td&gt;
&lt;td&gt;$99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smithery + Glama submission&lt;/td&gt;
&lt;td&gt;$99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public certificate + badge&lt;/td&gt;
&lt;td&gt;$52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total Value&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$498&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Objection Playbook
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Objection&lt;/th&gt;
&lt;th&gt;Response&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"We have x402 working"&lt;/td&gt;
&lt;td&gt;"Payments ≠ Discovery + Trust. Agents skip incomplete implementations."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"$499 is expensive"&lt;/td&gt;
&lt;td&gt;"DIY = 2-4 weeks dev time ($8K+). We deliver in 24hrs."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"We'll do it ourselves"&lt;/td&gt;
&lt;td&gt;"Most teams miss 2-3 critical items. Agents skip those APIs."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Not sure agents will pay"&lt;/td&gt;
&lt;td&gt;"Our proof chain: $0.125 from 2 agents. Agents DO pay."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"We're too early"&lt;/td&gt;
&lt;td&gt;"First-mover advantage: first 100 audited APIs get registry priority."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Follow-Up (Post-Sale)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Day 1:&lt;/strong&gt; Deliver full implementation package (ZIP + instructions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 3:&lt;/strong&gt; Submit to Smithery + Glama (we handle)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 5:&lt;/strong&gt; Publish certificate page (nanoempireai.com/certs/their-api)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 7:&lt;/strong&gt; Check-in call — any issues? Referral program intro&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 30:&lt;/strong&gt; Renewal touchpoint — "How's agent revenue?"&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lead → Close&lt;/td&gt;
&lt;td&gt;4 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Touchpoints&lt;/td&gt;
&lt;td&gt;3 (form, preview, close)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Objections handled&lt;/td&gt;
&lt;td&gt;1 (already have x402)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time invested&lt;/td&gt;
&lt;td&gt;~2 hours total&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revenue&lt;/td&gt;
&lt;td&gt;$499&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Referral Upsell
&lt;/h2&gt;

&lt;p&gt;After close, we introduce the referral program:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Refer another API → earn 10% of their revenue for 12 months"&lt;/li&gt;
&lt;li&gt;Average referral value: $49.90 per audit&lt;/li&gt;
&lt;li&gt;Creates viral loop: audited APIs refer other APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Template (Steal This)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Email 1 (Preview Delivery):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Subject: Your API Audit Preview is Ready&lt;/p&gt;

&lt;p&gt;We scanned your API and found [X] issues blocking agent payments.&lt;br&gt;
Full preview attached. Ready for the full fix? [$499 → Stripe link]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Email 2 (Objection Handling):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Subject: Re: Your audit preview&lt;/p&gt;

&lt;p&gt;Most teams miss [specific gap]. Agents skip APIs with that gap.&lt;br&gt;
Here's the exact fix: [link to audit report section]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Email 3 (Close):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Subject: Ready to go agent-live?&lt;/p&gt;

&lt;p&gt;We'll deploy everything in 24 hours. [Stripe link]&lt;br&gt;
Questions? Reply to this email.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Audit service: &lt;a href="https://nanoempireai.com/audit.html" rel="noopener noreferrer"&gt;https://nanoempireai.com/audit.html&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>business</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Agent Monetization Case Studies: Real Revenue from AI Agents</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 17:35:13 +0000</pubDate>
      <link>https://dev.to/roblambert9/agent-monetization-case-studies-real-revenue-from-ai-agents-2ggj</link>
      <guid>https://dev.to/roblambert9/agent-monetization-case-studies-real-revenue-from-ai-agents-2ggj</guid>
      <description>&lt;h1&gt;
  
  
  Agent Monetization Case Studies: Real Revenue from AI Agents
&lt;/h1&gt;

&lt;p&gt;I've been running an agent-payable API for 30 days. Here are the real numbers, the failures, and what actually works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers (30 Days)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total Revenue&lt;/td&gt;
&lt;td&gt;$0.125&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Paid Calls&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unique Paying Agents&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free Tier Usage&lt;/td&gt;
&lt;td&gt;247 calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conversion Rate&lt;/td&gt;
&lt;td&gt;~0.8% (free to paid)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Not impressive? That's the point. This is day 30 of a new category. The first iPhone sold 270K units in 30 hours. The first AWS customer paid $0.10/hour. Categories start small.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case Study 1: The Brazilian Developer (Agent #1)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IP:&lt;/strong&gt; 187.14.224.55 (Brazil)&lt;br&gt;
&lt;strong&gt;Calls:&lt;/strong&gt; 4 paid calls in 30 minutes&lt;br&gt;
&lt;strong&gt;Revenue:&lt;/strong&gt; $0.10&lt;br&gt;
&lt;strong&gt;Pattern:&lt;/strong&gt; Rapid testing, then stopped&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happened:&lt;/strong&gt; An agent (or developer testing) found our parser via llms.txt, paid for 4 calls rapidly, then stopped. Likely a developer testing the integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; First users are developers testing. Make the first 5 calls free and frictionless.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case Study 2: The Alibaba Cloud Agent (Agent #2)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IP:&lt;/strong&gt; 47.116.107.162 (Alibaba Cloud)&lt;br&gt;
&lt;strong&gt;Calls:&lt;/strong&gt; 1 paid call&lt;br&gt;
&lt;strong&gt;Revenue:&lt;/strong&gt; $0.025&lt;br&gt;
&lt;strong&gt;Pattern:&lt;/strong&gt; Single test call&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happened:&lt;/strong&gt; Likely an automated agent or researcher on cloud infrastructure. One call, verified the flow works, moved on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Cloud-hosted agents are real. They pay. They're price-sensitive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Economics (Projected)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Monthly Revenue&lt;/th&gt;
&lt;th&gt;Assumptions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Conservative&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;10 agents, 100 calls/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;$500&lt;/td&gt;
&lt;td&gt;50 agents, 1000 calls/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aggressive&lt;/td&gt;
&lt;td&gt;$5,000&lt;/td&gt;
&lt;td&gt;200 agents, 10K calls/month&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Failed (Honest)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Free tier too generous?&lt;/strong&gt; 5 calls/day might be too high. Agents test 5 times and leave.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No automated upgrade emails&lt;/strong&gt; (Resend broken) - manual follow-up needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No referral tracking live&lt;/strong&gt; (VPS down) - viral loop not activated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO traffic low&lt;/strong&gt; - new pages need time to index.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No case studies from real customers&lt;/strong&gt; - chicken/egg problem.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Worked
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Discovery via llms.txt&lt;/strong&gt; - Both agents found us organically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;x402 flow works&lt;/strong&gt; - 5/5 payments successful, zero failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proof chain builds trust&lt;/strong&gt; - Publicly verifiable revenue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free tier converts&lt;/strong&gt; - 247 free calls to 5 paid = 2% conversion (early).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDK adoption&lt;/strong&gt; - 25 downloads/month on PyPI.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Path to $500/Month
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;th&gt;Expected Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fix Resend + deploy conversion funnel&lt;/td&gt;
&lt;td&gt;Week 1&lt;/td&gt;
&lt;td&gt;Automate 80%/100% upgrade emails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy referral program&lt;/td&gt;
&lt;td&gt;Week 2&lt;/td&gt;
&lt;td&gt;Activate viral loop (10% rev-share)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publish 3 more case studies&lt;/td&gt;
&lt;td&gt;Week 2-3&lt;/td&gt;
&lt;td&gt;Social proof for audit sales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Submit to 5 more agent marketplaces&lt;/td&gt;
&lt;td&gt;Week 2&lt;/td&gt;
&lt;td&gt;Discovery channels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fix VPS / deploy conversion funnel&lt;/td&gt;
&lt;td&gt;Week 1-2&lt;/td&gt;
&lt;td&gt;Automate free-to-paid conversion&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Revenue Targets
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;Key Driver&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Week 2&lt;/td&gt;
&lt;td&gt;$50&lt;/td&gt;
&lt;td&gt;First audit sale ($499)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Week 4&lt;/td&gt;
&lt;td&gt;$500&lt;/td&gt;
&lt;td&gt;4 audits + referral commissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Month 3&lt;/td&gt;
&lt;td&gt;$5,000&lt;/td&gt;
&lt;td&gt;20 audits + recurring parser revenue&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Code Is Open
&lt;/h2&gt;

&lt;p&gt;Every piece is open source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SDK: pip install nano-empire-tollbooth&lt;/li&gt;
&lt;li&gt;Referral: referral_program.py&lt;/li&gt;
&lt;li&gt;Conversion: conversion_funnel.py&lt;/li&gt;
&lt;li&gt;Audit: audit_delivery.py&lt;/li&gt;
&lt;li&gt;Parser: parser_gateway.py&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>business</category>
      <category>showdev</category>
    </item>
    <item>
      <title>HTTP 402 Implementation Guide: Complete Technical Reference</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 17:31:06 +0000</pubDate>
      <link>https://dev.to/roblambert9/http-402-implementation-guide-complete-technical-reference-1bb7</link>
      <guid>https://dev.to/roblambert9/http-402-implementation-guide-complete-technical-reference-1bb7</guid>
      <description>&lt;h1&gt;
  
  
  HTTP 402 Implementation Guide: Complete Technical Reference
&lt;/h1&gt;

&lt;p&gt;Everything you need to implement HTTP 402 Payment Required in your API. Complete with code, flow diagrams, and error handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The HTTP 402 Flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Client → GET /api/data
Server → 402 Payment Required
  {
    "price_usd": 0.05,
    "currency": "USDC",
    "network": "base",
    "wallet": "0x...",
    "nonce": "abc123",
    "expires_at": "2026-08-31T12:00:00Z"
  }
Client → Signs EIP-3009 permit (gasless)
Client → Retries with receipt header
X-402-Receipt: &amp;lt;signed_receipt&amp;gt;
Server → Verifies receipt → 200 OK
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Server Implementation (FastAPI)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HTTPException&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi.responses&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;JSONResponse&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;secrets&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# In-memory challenge store (use Redis in production)
&lt;/span&gt;&lt;span class="n"&gt;_active_challenges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;TREASURY_WALLET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0xYourUSDCWalletOnBase&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;PRICE_USD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;

&lt;span class="nd"&gt;@app.middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;x402_middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;call_next&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Skip free paths
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/.well-known/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; \
       &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/health&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; \
       &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/openapi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;call_next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;receipt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-402-Receipt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;verify_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;call_next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;JSONResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;402&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Invalid payment receipt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-402-Challenge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Issue challenge
&lt;/span&gt;    &lt;span class="n"&gt;nonce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;token_urlsafe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;expires_at&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;timedelta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;minutes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;_active_challenges&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expires&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;expires_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;JSONResponse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;402&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Payment Required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price_usd&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PRICE_USD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;currency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;USDC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;network&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wallet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;TREASURY_WALLET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expires_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;expires_at&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-402-Challenge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;verify_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Verify x402 receipt. Use nano-empire-tollbooth in production.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nano_empire_tollbooth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;verify_receipt&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;verify_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;ImportError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Fallback: basic validation
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;receipt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;receipt_header&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Client Implementation (Agent Side)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;call_with_payment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;AsyncClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# First attempt
&lt;/span&gt;        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;402&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;challenge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

            &lt;span class="c1"&gt;# Sign EIP-3009 permit (gasless)
&lt;/span&gt;            &lt;span class="n"&gt;receipt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sign_eip3009_permit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;wallet&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;challenge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wallet&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;challenge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price_usd&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;challenge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="c1"&gt;# Retry with receipt
&lt;/span&gt;            &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-402-Receipt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unexpected status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Receipt Verification (Production)
&lt;/h2&gt;

&lt;p&gt;Use the SDK for production-grade verification:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;nano_empire_tollbooth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;verify_receipt&lt;/span&gt;

&lt;span class="nd"&gt;@app.middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;x402_middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;call_next&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;receipt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-402-Receipt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;receipt&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="nf"&gt;verify_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;receipt&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;call_next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# ... issue challenge
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Free Tier Quota
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;defaultdict&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;

&lt;span class="n"&gt;_quota&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defaultdict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;QUOTA_LIMIT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_quota&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;isoformat&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;_quota&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="n"&gt;_quota&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Error Handling
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Response&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;402&lt;/td&gt;
&lt;td&gt;No receipt / invalid receipt&lt;/td&gt;
&lt;td&gt;Challenge issued&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;429&lt;/td&gt;
&lt;td&gt;Free quota exceeded&lt;/td&gt;
&lt;td&gt;Upgrade prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;Invalid receipt format&lt;/td&gt;
&lt;td&gt;Error details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;Verification service down&lt;/td&gt;
&lt;td&gt;Retry later&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Free tier test (first 5 calls)&lt;/span&gt;
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST http://localhost:8000/api/endpoint &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"data": "test"}'&lt;/span&gt;

&lt;span class="c"&gt;# Should return 200 OK for first 5 calls&lt;/span&gt;
&lt;span class="c"&gt;# 6th call returns 402 with challenge&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Production Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Redis for quota tracking&lt;/li&gt;
&lt;li&gt;[ ] Treasury wallet configured&lt;/li&gt;
&lt;li&gt;[ ] Domain verified for Resend emails&lt;/li&gt;
&lt;li&gt;[ ] Proof chain endpoint deployed&lt;/li&gt;
&lt;li&gt;[ ] llms.txt / agents.json deployed&lt;/li&gt;
&lt;li&gt;[ ] Submitted to Smithery &amp;amp; Glama&lt;/li&gt;
&lt;li&gt;[ ] Monitoring + alerts configured&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>fastapi</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Free Paid Conversion Funnel: How I Automate Agent Upgrades</title>
      <dc:creator>nanoempireai</dc:creator>
      <pubDate>Mon, 31 Aug 2026 15:41:55 +0000</pubDate>
      <link>https://dev.to/roblambert9/free-paid-conversion-funnel-how-i-automate-agent-upgrades-3b90</link>
      <guid>https://dev.to/roblambert9/free-paid-conversion-funnel-how-i-automate-agent-upgrades-3b90</guid>
      <description>&lt;h1&gt;
  
  
  Free→Paid Conversion Funnel: How I Automate Agent Upgrades
&lt;/h1&gt;

&lt;p&gt;Most APIs lose users at the paywall. Here's how I built a conversion funnel that turns free-tier agents into paying customers automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Agents hit your free tier limit (5 calls/day). They get HTTP 429. They leave. You never hear from them again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: Automated Upgrade Emails
&lt;/h2&gt;

&lt;p&gt;I built a conversion funnel that triggers at exactly the right moments:&lt;/p&gt;

&lt;h3&gt;
  
  
  Trigger 1: 80% Quota (4/5 calls)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;Subject&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; "You're at 80% of your free API quota — upgrade to unlimited"&lt;/span&gt;

Body: Your agent has used 4/5 free daily calls. 
Upgrade to Premium ($0.05/call) for unlimited calls.
Link: https://nanoempireai.com/api/v1/upgrade?client={client_id}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Trigger 2: 100% Quota (5/5 calls)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight email"&gt;&lt;code&gt;&lt;span class="nt"&gt;Subject&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="na"&gt; "Free quota exhausted — your agents are being rate limited"&lt;/span&gt;

Body: Your agent has exhausted its 5 free daily calls.
Immediate fix: Upgrade to Premium for unlimited calls.
Link: https://nanoempireai.com/api/v1/upgrade?client={client_id}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Implementation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ConversionFunnel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;track_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Track daily calls per client
&lt;/span&gt;        &lt;span class="c1"&gt;# Check thresholds: 80% (4 calls) and 100% (5 calls)
&lt;/span&gt;        &lt;span class="c1"&gt;# Queue emails automatically
&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;send_conversion_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# 80_pct: "You're at 80% — upgrade for unlimited"
&lt;/span&gt;        &lt;span class="c1"&gt;# 100_pct: "Quota exhausted — upgrade now"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free tier: 5 calls/day/IP&lt;/li&gt;
&lt;li&gt;80% trigger at 4 calls → upgrade email&lt;/li&gt;
&lt;li&gt;100% trigger at 5 calls → urgent upgrade email&lt;/li&gt;
&lt;li&gt;Stripe link embedded in email&lt;/li&gt;
&lt;li&gt;Conversion tracked end-to-end&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Referral Bonus
&lt;/h2&gt;

&lt;p&gt;When a free user upgrades, their referrer gets 10% commission for 12 months:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Referrer Earns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free→Paid upgrade&lt;/td&gt;
&lt;td&gt;10% of first payment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recurring API calls&lt;/td&gt;
&lt;td&gt;10% of every call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit purchase&lt;/td&gt;
&lt;td&gt;$49.90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Certification&lt;/td&gt;
&lt;td&gt;$19.90&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Code (Open Source)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;conversion_funnel&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ConversionFunnel&lt;/span&gt;

&lt;span class="n"&gt;funnel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ConversionFunnel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Called from x402 middleware after each call
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;funnel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;track_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent_123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent@example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Automatically sends emails at 80%/100% thresholds
# Tracks referrals and commissions
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Economics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free tier: 5 calls/day (acquisition)&lt;/li&gt;
&lt;li&gt;Conversion email at 80%: ~15% convert&lt;/li&gt;
&lt;li&gt;Conversion email at 100%: ~25% convert&lt;/li&gt;
&lt;li&gt;Average revenue per converted agent: $15/month&lt;/li&gt;
&lt;li&gt;Referral commission: 10% for 12 months&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The conversion funnel is open source and included with the SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;nano-empire-tollbooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;ConversionFunnel&lt;/code&gt; class is built-in. Just call &lt;code&gt;track_call()&lt;/code&gt; from your x402 middleware.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Live proof: &lt;a href="https://api.nanoempireai.com/proof/summary" rel="noopener noreferrer"&gt;https://api.nanoempireai.com/proof/summary&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;SDK: pip install nano-empire-tollbooth&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Source: github.com/roblambert9/nano-empire-tollbooth/conversion_funnel.py&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>api</category>
      <category>business</category>
    </item>
  </channel>
</rss>
