<?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: Mr Hamlin</title>
    <description>The latest articles on DEV Community by Mr Hamlin (@mr_hamlin).</description>
    <link>https://dev.to/mr_hamlin</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3815462%2F608d44c9-7dbf-4f19-bf5c-211f31b318fb.jpg</url>
      <title>DEV Community: Mr Hamlin</title>
      <link>https://dev.to/mr_hamlin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mr_hamlin"/>
    <language>en</language>
    <item>
      <title>How to Use Bittensor Like OpenAI (3 Lines of Code)</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Thu, 09 Apr 2026 16:25:32 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/how-to-use-bittensor-like-openai-3-lines-of-code-7c6</link>
      <guid>https://dev.to/mr_hamlin/how-to-use-bittensor-like-openai-3-lines-of-code-7c6</guid>
      <description>&lt;p&gt;Every OpenAI-compatible SDK works with Bittensor now. No wallet. No TAO. No subnet knowledge. Just one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://gateway.spraay.app/bittensor/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. You're on decentralized AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://spraay.app/bittensor" rel="noopener noreferrer"&gt;Spraay Inference&lt;/a&gt; is a drop-in replacement for OpenAI's API that routes to Bittensor's decentralized AI network under the hood. Same &lt;code&gt;/v1/chat/completions&lt;/code&gt; endpoint, same request format, same SDK support.&lt;/p&gt;

&lt;p&gt;The difference: instead of hitting OpenAI's servers, your requests go to Subnet 64 (Chutes AI) — a decentralized network of GPU miners competing to serve the best inference. Every response is TEE-verified (Trusted Execution Environment), meaning you get cryptographic proof the model actually ran your prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;43+ models available today&lt;/strong&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DeepSeek V3.2, DeepSeek R1 (reasoning)&lt;/li&gt;
&lt;li&gt;Qwen3 32B, Qwen3 235B&lt;/li&gt;
&lt;li&gt;GPT-OSS 120B (OpenAI's open-source model)&lt;/li&gt;
&lt;li&gt;Mistral Small 3.1&lt;/li&gt;
&lt;li&gt;And many more&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why switch from OpenAI?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cost.&lt;/strong&gt; Bittensor inference runs 40-85% cheaper than centralized providers because miners compete on price. A typical DeepSeek V3 call costs ~$0.25/M input tokens vs OpenAI's $2.50/M for GPT-4o.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Openness.&lt;/strong&gt; Every model on Bittensor is open-source. No black boxes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permissionless.&lt;/strong&gt; No one can revoke your access, change your pricing overnight, or censor your outputs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verifiable.&lt;/strong&gt; TEE verification means you can prove the model ran exactly as specified — important for agent pipelines where trust matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://gateway.spraay.app/bittensor/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;not-needed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// x402 handles payment&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deepseek-ai/DeepSeek-V3-0324&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a helpful assistant.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explain how Bittensor's subnet architecture works.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&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="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python works too:&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://gateway.spraay.app/bittensor/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;not-needed&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-ai/DeepSeek-R1-0528&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&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;role&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;user&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;content&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;What is proof of intelligence?&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&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;choices&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="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;cURL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://gateway.spraay.app/bittensor/v1/chat/completions &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;'{
    "model": "Qwen/Qwen3-32B",
    "messages": [{"role": "user", "content": "Hello from Bittensor"}],
    "max_tokens": 256
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Available endpoints
&lt;/h2&gt;

&lt;p&gt;The API follows OpenAI's specification exactly:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/bittensor/v1/models&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;List all available models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/bittensor/v1/chat/completions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;Chat completions (streaming supported)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/bittensor/v1/images/generations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;Image generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/bittensor/v1/embeddings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;Text embeddings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/bittensor/v1/health&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Health check&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Streaming, function calling, structured output, and tool use all work as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works under the hood
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your app (OpenAI SDK)
    ↓ standard HTTP request
Spraay Gateway (gateway.spraay.app)
    ↓ x402 payment verification
    ↓ model → provider routing
Bittensor Subnet 64 (Chutes AI)
    ↓ distributed across GPU miners
    ↓ TEE-verified execution
Response back to your app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Spraay x402 Gateway handles payment via the &lt;a href="https://www.x402.org/" rel="noopener noreferrer"&gt;x402 protocol&lt;/a&gt; — HTTP-native micropayments in USDC on Base. Agents can consume inference autonomously without API keys or accounts. This is designed for the agentic future where software pays for its own compute.&lt;/p&gt;

&lt;h2&gt;
  
  
  For AI agent developers
&lt;/h2&gt;

&lt;p&gt;If you're building autonomous agents with LangChain, CrewAI, AutoGPT, or any framework that uses OpenAI-compatible endpoints, Spraay Inference is the simplest way to put your agents on decentralized AI:&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="c1"&gt;# LangChain example
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain_openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ChatOpenAI&lt;/span&gt;

&lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ChatOpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://gateway.spraay.app/bittensor/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-ai/DeepSeek-V3.2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;not-needed&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze the top Bittensor subnets by revenue&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;p&gt;The x402 payment model means your agent doesn't need a credit card, an account, or even a human in the loop. It pays per-request in USDC and gets inference back. That's the unlock for truly autonomous AI agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live playground&lt;/strong&gt; (no setup needed): &lt;a href="https://spraay.app/bittensor" rel="noopener noreferrer"&gt;spraay.app/bittensor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gateway endpoint&lt;/strong&gt;: &lt;code&gt;gateway.spraay.app/bittensor/v1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spraay Protocol&lt;/strong&gt;: &lt;a href="https://spraay.app" rel="noopener noreferrer"&gt;spraay.app&lt;/a&gt; | &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;Gateway docs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Spraay Inference is part of the &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;Spraay x402 Gateway&lt;/a&gt; — 88+ pay-per-call API endpoints for AI, payments, DeFi, and infrastructure on Base. Built for agents.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$TAO 💧&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openai</category>
      <category>bittensor</category>
      <category>tao</category>
      <category>web3</category>
    </item>
    <item>
      <title>I built a tool to send TAO to 100+ wallets in one transaction (Bittensor payouts)</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Wed, 01 Apr 2026 21:01:17 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/i-built-a-tool-to-send-tao-to-100-wallets-in-one-transaction-bittensor-payouts-4i60</link>
      <guid>https://dev.to/mr_hamlin/i-built-a-tool-to-send-tao-to-100-wallets-in-one-transaction-bittensor-payouts-4i60</guid>
      <description>&lt;p&gt;Bittensor subnet operators often need to send &lt;strong&gt;TAO payouts to multiple wallets&lt;/strong&gt; — miners, contributors, validators.&lt;/p&gt;

&lt;p&gt;Right now, most people are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sending transactions one by one&lt;/li&gt;
&lt;li&gt;writing custom scripts&lt;/li&gt;
&lt;li&gt;or dealing with error-prone payout flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built something simple:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;A way to batch TAO payouts in a single transaction&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 The problem: TAO payouts don’t scale well
&lt;/h2&gt;

&lt;p&gt;If you’re running a Bittensor subnet, you’ve probably run into this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you have a list of wallet addresses&lt;/li&gt;
&lt;li&gt;each one needs a payout&lt;/li&gt;
&lt;li&gt;you’re sending transactions manually or via scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;wasted time&lt;/li&gt;
&lt;li&gt;higher chance of mistakes&lt;/li&gt;
&lt;li&gt;poor scalability as your subnet grows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There wasn’t a clean, simple way to:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;send TAO to multiple wallets at once&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ The solution: TAO Batch Payouts
&lt;/h2&gt;

&lt;p&gt;I built a tool called:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;TAO Batch Payouts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;paste wallet addresses + amounts&lt;/li&gt;
&lt;li&gt;review the payouts&lt;/li&gt;
&lt;li&gt;send everything in &lt;strong&gt;one transaction&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No scripts. No manual sending.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 How it works
&lt;/h2&gt;

&lt;p&gt;The flow is intentionally simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste wallets + amounts (or upload CSV)&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Review &amp;amp; Send&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Confirm the payouts&lt;/li&gt;
&lt;li&gt;Execute the batch transaction&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Example input
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5F3sa2TJ...freqmY4p 1.5
5Grwva...GkutQY     2.3
5FHneW...M694ty     0.75
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔍 Why this matters
&lt;/h2&gt;

&lt;p&gt;This isn’t just convenience — it solves a real pain in the Bittensor ecosystem:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Batch payments
&lt;/h3&gt;

&lt;p&gt;Send to &lt;strong&gt;100+ wallets in one transaction&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Less manual work
&lt;/h3&gt;

&lt;p&gt;No more copy-paste wallet-by-wallet&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Fewer errors
&lt;/h3&gt;

&lt;p&gt;Review everything before sending&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Built for subnet operators
&lt;/h3&gt;

&lt;p&gt;Designed specifically for &lt;strong&gt;TAO distribution and rewards&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Try it here
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://spraay.app/tao-batch" rel="noopener noreferrer"&gt;https://spraay.app/tao-batch&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧾 Pricing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1% batch fee&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;applied at confirmation&lt;/li&gt;
&lt;li&gt;fully transparent before sending&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Under the hood
&lt;/h2&gt;

&lt;p&gt;This is powered by &lt;strong&gt;Spraay&lt;/strong&gt;, a multi-chain batch payment infrastructure.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;p&gt;👉 make &lt;strong&gt;multi-wallet crypto payouts&lt;/strong&gt; as easy as a single transaction&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 Bigger picture: programmable payments for AI agents
&lt;/h2&gt;

&lt;p&gt;This tool is just one piece of a larger direction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents making payments&lt;/li&gt;
&lt;li&gt;automated reward distribution&lt;/li&gt;
&lt;li&gt;machine-to-machine transactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Batch payouts are a foundational primitive for:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;agent-native payments + programmable finance&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 Keywords (for devs searching this)
&lt;/h2&gt;

&lt;p&gt;If you’re here looking for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how to send TAO to multiple wallets&lt;/li&gt;
&lt;li&gt;batch crypto payments&lt;/li&gt;
&lt;li&gt;bittensor payouts automation&lt;/li&gt;
&lt;li&gt;distribute TAO rewards&lt;/li&gt;
&lt;li&gt;multi wallet crypto transactions&lt;/li&gt;
&lt;li&gt;bulk crypto payments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tool was built for exactly that.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙏 Feedback
&lt;/h2&gt;

&lt;p&gt;If you’re running a Bittensor subnet or dealing with TAO payouts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how are you handling payouts today?&lt;/li&gt;
&lt;li&gt;manual? scripts? something else?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Would love feedback or ideas.&lt;/p&gt;




&lt;h2&gt;
  
  
  👋 Closing
&lt;/h2&gt;

&lt;p&gt;This started as:&lt;/p&gt;

&lt;p&gt;👉 “there has to be an easier way to send payouts”&lt;/p&gt;

&lt;p&gt;And turned into a simple tool you can use right now.&lt;/p&gt;

&lt;p&gt;If it saves you time (or prevents one mistake), it’s doing its job.&lt;/p&gt;




&lt;p&gt;👉 &lt;a href="https://spraay.app/tao-batch" rel="noopener noreferrer"&gt;https://spraay.app/tao-batch&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bittensor</category>
      <category>tao</category>
      <category>ai</category>
      <category>payments</category>
    </item>
    <item>
      <title>🚀 I built an API where an AI agent can verify an invoice and pay it in USDC</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Tue, 31 Mar 2026 20:57:38 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/i-built-an-api-where-an-ai-agent-can-verify-an-invoice-and-pay-it-in-usdc-ej7</link>
      <guid>https://dev.to/mr_hamlin/i-built-an-api-where-an-ai-agent-can-verify-an-invoice-and-pay-it-in-usdc-ej7</guid>
      <description>&lt;p&gt;Most accounts payable workflows still look like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Someone emails a PDF invoice&lt;/li&gt;
&lt;li&gt;Someone checks it against a purchase order&lt;/li&gt;
&lt;li&gt;Someone approves it&lt;/li&gt;
&lt;li&gt;Someone logs into a bank and sends the payment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⏳ It takes days.&lt;br&gt;
💸 It costs money.&lt;br&gt;
🧠 It requires humans in the loop.&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚡ So I built something simpler
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An API where an AI agent can verify an invoice and pay a supplier in one flow.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No API keys.&lt;br&gt;
No accounts.&lt;br&gt;
Just &lt;strong&gt;pay per request&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 The idea
&lt;/h2&gt;

&lt;p&gt;Instead of humans doing invoice checks, an agent can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create PO → Submit invoice → Verify → Pay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;👉 From invoice → verified → paid in seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 The flow (3 calls that matter)
&lt;/h2&gt;

&lt;p&gt;Here’s the entire loop.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧾 1. Submit an invoice
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://gateway.spraay.app/api/v1/sctp/invoice &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;'{
    "poId": "po_123",
    "supplierId": "sup_abc",
    "items": [
      {
        "description": "Resistor 10K x1000",
        "quantity": 1000,
        "unitPrice": 0.02
      }
    ],
    "total": 20.00
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ✅ 2. Verify it (this is the interesting part)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://gateway.spraay.app/api/v1/sctp/invoice/verify &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;'{"invoiceId": "inv_456"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ⚡ Exact match (instant)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"matched"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"verifiedBy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deterministic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"latencyMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"recommendation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"approve_payment"&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;h4&gt;
  
  
  🧠 Fuzzy match (AI reasoning)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"partial_match"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.87&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"verifiedBy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"latencyMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1340&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"discrepancies"&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="s2"&gt;"Description variation: 'Resistor 10K' vs 'Resistors 10KΩ (1000pc)'"&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;"recommendation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"approve_payment"&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;h3&gt;
  
  
  💸 3. Pay the supplier
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://gateway.spraay.app/api/v1/sctp/pay &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;'{
    "invoiceId": "inv_456",
    "supplierId": "sup_abc",
    "amount": 20.00,
    "token": "USDC",
    "chain": "base"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Response
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"processing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"estimatedSettlement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~2s"&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;
  
  
  ⚙️ How it works
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;/verify&lt;/code&gt; endpoint uses a &lt;strong&gt;two-step system&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Fast path (~50ms)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deterministic checks&lt;/li&gt;
&lt;li&gt;Totals, quantities, prices&lt;/li&gt;
&lt;li&gt;Instant match → high confidence&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 Slow path (~1–2s)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;LLM reasoning for fuzzy cases&lt;/li&gt;
&lt;li&gt;Handles naming differences, rounding, inconsistencies&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Why this matters
&lt;/h2&gt;

&lt;p&gt;This isn’t just another API.&lt;/p&gt;

&lt;p&gt;It changes how financial workflows work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ No dashboards&lt;/li&gt;
&lt;li&gt;❌ No logins&lt;/li&gt;
&lt;li&gt;❌ No subscriptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Programmable financial infrastructure that agents can use directly&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An AI agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;receive an invoice&lt;/li&gt;
&lt;li&gt;verify it&lt;/li&gt;
&lt;li&gt;decide based on confidence&lt;/li&gt;
&lt;li&gt;execute payment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All without a human.&lt;/p&gt;




&lt;h2&gt;
  
  
  👀 Who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🤖 AI CFO / finance agents&lt;/li&gt;
&lt;li&gt;🪙 Crypto startups paying vendors&lt;/li&gt;
&lt;li&gt;🏛️ DAOs managing contributor payments&lt;/li&gt;
&lt;li&gt;🧑‍💻 Indie hackers automating ops&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 What this is (and isn’t)
&lt;/h2&gt;

&lt;p&gt;This is &lt;strong&gt;v0.1&lt;/strong&gt; of something I’m calling:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Supply Chain Task Protocol (SCTP)&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Right now it focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;invoices&lt;/li&gt;
&lt;li&gt;verification&lt;/li&gt;
&lt;li&gt;payments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Later, it may expand into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;escrow&lt;/li&gt;
&lt;li&gt;shipment tracking&lt;/li&gt;
&lt;li&gt;document verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…but only after this core loop is proven.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Try it yourself
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;https://gateway.spraay.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/plagtech/sctp" rel="noopener noreferrer"&gt;https://github.com/plagtech/sctp&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you're building AI agents and want to automate real-world workflows, I’d love feedback.&lt;/p&gt;

&lt;p&gt;This is one of those things that either clicks immediately…&lt;/p&gt;

&lt;p&gt;or sounds insane.&lt;/p&gt;

&lt;p&gt;I’m betting on the former.&lt;/p&gt;

</description>
      <category>supply</category>
      <category>workflow</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>The agentic economy isn't a whitepaper anymore. Here's what the numbers say: 250,000 AI Agents Are Live On-Chain.</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Fri, 27 Mar 2026 02:47:02 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/the-agentic-economy-isnt-a-whitepaper-anymore-heres-what-the-numbers-say-250000-ai-agents-are-13aa</link>
      <guid>https://dev.to/mr_hamlin/the-agentic-economy-isnt-a-whitepaper-anymore-heres-what-the-numbers-say-250000-ai-agents-are-13aa</guid>
      <description>&lt;p&gt;On March 9, 2026, Coinbase CEO Brian Armstrong posted five sentences that rattled the entire payments industry:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Very soon there are going to be more AI agents than humans making transactions. They can't open a bank account, but they can own a crypto wallet. Think about it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two weeks later, the data is starting to prove him right.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers Are Real Now
&lt;/h2&gt;

&lt;p&gt;Daily active on-chain AI agents crossed &lt;strong&gt;250,000&lt;/strong&gt; in early 2026 — a 400%+ increase from 2025. More than 68% of new DeFi protocols launched in Q1 2026 included at least one autonomous AI agent for trading or liquidity management. AI-powered agents now represent roughly 18% of total prediction market volume, outperforming human traders by 27% on accuracy.&lt;/p&gt;

&lt;p&gt;This isn't speculative anymore. The machines are transacting.&lt;/p&gt;

&lt;p&gt;Coinbase launched Agentic Wallets on February 11, 2026, via the x402 protocol — an open payment standard built for machine-to-machine transactions. By the time Armstrong made his post, the protocol had already processed over &lt;strong&gt;50 million transactions&lt;/strong&gt;. CZ, the founder of Binance, echoed the thesis the very next day: AI agents will make &lt;em&gt;millions of times&lt;/em&gt; more payments than humans, and they'll use crypto to do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Stablecoins Are the Default
&lt;/h2&gt;

&lt;p&gt;The reason agents are gravitating toward stablecoins isn't ideological — it's engineering.&lt;/p&gt;

&lt;p&gt;Traditional payment rails weren't built for this. Credit cards have minimum fees around $0.30 per transaction. Banks require KYC, government IDs, and human identity verification. AI agents can't satisfy any of those requirements. But they &lt;em&gt;can&lt;/em&gt; generate a cryptographic private key in milliseconds and start transacting globally.&lt;/p&gt;

&lt;p&gt;Stablecoins solve every friction point an autonomous agent faces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Programmability&lt;/strong&gt; — spending limits, conditional flows, and policies enforced at the wallet layer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always-on settlement&lt;/strong&gt; — blockchains don't close on weekends&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price stability&lt;/strong&gt; — agents can budget in USD terms without spot-crypto volatility&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Micropayment economics&lt;/strong&gt; — fractions of a cent per API call, per data query, per task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CB Insights projects that stablecoins will transition from crypto-native trading tools to the &lt;strong&gt;settlement layer for agent-driven commerce&lt;/strong&gt; in 2026. Circle CEO Jeremy Allaire has called USDC the "best dollar API" for AI's global economic system. And the data backs it up — on-chain analysis shows USDC accounts for 98.6% of agent transactions on EVM chains and 99.7% on Solana within the x402 ecosystem.&lt;/p&gt;

&lt;p&gt;The stablecoin market has matured into a &lt;strong&gt;$46 trillion&lt;/strong&gt; annualized transaction volume economy. That's 20x PayPal and rivaling major card networks.&lt;/p&gt;

&lt;h2&gt;
  
  
  x402: HTTP for Money
&lt;/h2&gt;

&lt;p&gt;The protocol making all of this work is x402 — and it just got a major upgrade.&lt;/p&gt;

&lt;p&gt;x402 resurrects the long-dormant HTTP 402 "Payment Required" status code and turns it into a machine-readable payment negotiation layer. When an AI agent hits a paid endpoint, the server returns a 402 with payment details. The agent pays in USDC. Retries the request with a payment receipt header. No human intervention required.&lt;/p&gt;

&lt;p&gt;Here's the flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent requests a resource&lt;/li&gt;
&lt;li&gt;Server responds &lt;code&gt;402 Payment Required&lt;/code&gt; with price + recipient&lt;/li&gt;
&lt;li&gt;Agent signs and submits payment&lt;/li&gt;
&lt;li&gt;Agent retries with payment proof in the header&lt;/li&gt;
&lt;li&gt;Server delivers the resource&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No accounts. No subscriptions. No API keys. Just money moving at HTTP speed.&lt;/p&gt;

&lt;p&gt;On March 22, x402 V2 shipped — adding multi-chain support, wallet-based identity, dynamic payment recipients, and a fully modular SDK. Coinbase and Cloudflare co-founded the x402 Foundation to govern the standard. The protocol is now live on Base, Solana, Ethereum L2s, and even Etherlink (Tezos). Cloudflare integrated x402 into both its Agents SDK and MCP servers.&lt;/p&gt;

&lt;p&gt;The v1.0 spec freeze is targeted for Q3 2026, after which backward compatibility guarantees kick in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Identity Gap: KYA Is the New KYC
&lt;/h2&gt;

&lt;p&gt;But payments alone don't solve the full picture. If agents can transact freely, how do you know &lt;em&gt;who&lt;/em&gt; (or what) is behind each one?&lt;/p&gt;

&lt;p&gt;a16z's crypto research team frames it this way: the bottleneck for the agent economy has shifted from intelligence to identity. In financial services, non-human identities already outnumber human employees 96-to-1 — yet these identities remain "unbanked ghosts." Agents need cryptographically signed credentials that link them to their principal, their constraints, and their liability.&lt;/p&gt;

&lt;p&gt;Sam Altman's World project launched AgentKit on March 17 to address exactly this — a toolkit that lets AI agents carry zero-knowledge proof that a verified human is behind them. It integrates directly with x402, positioning World as the identity layer for the agentic web.&lt;/p&gt;

&lt;p&gt;The industry that built KYC infrastructure over decades now has months to figure out &lt;strong&gt;KYA&lt;/strong&gt; — Know Your Agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Builders
&lt;/h2&gt;

&lt;p&gt;If you're building in crypto right now, the signal is clear: the next wave of users isn't human.&lt;/p&gt;

&lt;p&gt;The infrastructure play is wide open. Consider what's needed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payment rails&lt;/strong&gt; — x402 gateways, facilitators, and middleware that let any API accept stablecoin micropayments per request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent wallets&lt;/strong&gt; — programmable wallets with session keys, spending policies, and budget controls that don't require human authorization per transaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identity and trust&lt;/strong&gt; — reputation systems and verifiable credentials for agents, so merchants and protocols can assess risk without blocking every non-human actor at the firewall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Physical-world bridging&lt;/strong&gt; — as AI agents move from digital tasks to coordinating physical robots and IoT devices, payment protocols need to extend into hardware.&lt;/p&gt;

&lt;p&gt;I've been building in this exact space. &lt;a href="https://spraay.app" rel="noopener noreferrer"&gt;Spraay&lt;/a&gt; is a multi-chain batch payment protocol with a live x402 gateway at &lt;code&gt;gateway.spraay.app&lt;/code&gt; — 76+ paid endpoints across 13 chains, all accepting USDC micropayments per request. We just shipped Agent Wallets (Category 17) on Base mainnet, and we're working on the &lt;a href="https://github.com/plagtech/rtp-spec" rel="noopener noreferrer"&gt;Robot Task Protocol (RTP)&lt;/a&gt; — an open standard for AI agents to hire physical robots via x402 micropayments.&lt;/p&gt;

&lt;p&gt;The agentic economy is being built right now, in public, by independent builders. If you're waiting for a Fortune 500 company to hand you the playbook, you're already behind.&lt;/p&gt;

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

&lt;p&gt;Let's be honest about where things stand. Despite the narrative momentum, x402's average daily transaction volume is still around $28,000, and analysts estimate roughly half of that is wash trading or self-dealing. The gap between the vision and the current volume is real.&lt;/p&gt;

&lt;p&gt;But as one analyst put it: the growth rate of the agent economy may be overestimated for the coming year, but its potential may be underestimated five years from now.&lt;/p&gt;

&lt;p&gt;250,000 daily active agents. $46 trillion in stablecoin volume. 50 million x402 transactions. Two of crypto's most prominent founders publicly declaring that machines will dominate financial transactions.&lt;/p&gt;

&lt;p&gt;The infrastructure layer is being poured. The question isn't &lt;em&gt;if&lt;/em&gt; agents will be the primary users of crypto — it's whether you'll be building the rails they run on, or watching from the sidelines.&lt;/p&gt;




&lt;p&gt;💧 &lt;strong&gt;Building in the agentic economy?&lt;/strong&gt; Check out &lt;a href="https://spraay.app" rel="noopener noreferrer"&gt;Spraay&lt;/a&gt; — batch payments, x402 gateway, agent wallets, and RTP across 13 chains. &lt;a href="https://docs.spraay.app" rel="noopener noreferrer"&gt;Docs&lt;/a&gt; | &lt;a href="https://smithery.ai/server/@plagtech/spraay-x402-mcp" rel="noopener noreferrer"&gt;MCP Server&lt;/a&gt; | &lt;a href="https://github.com/plagtech" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Follow me for daily posts on building crypto infrastructure for AI agents: &lt;a href="https://dev.to/mr_hamlin"&gt;@mr_hamlin on dev.to&lt;/a&gt; | &lt;a href="https://twitter.com/Spraay_app" rel="noopener noreferrer"&gt;@Spraay_app on X&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>ai</category>
      <category>stablecoins</category>
      <category>crypto</category>
    </item>
    <item>
      <title>I Just Gave AutoGPT the Ability to Send Crypto Payments</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Tue, 24 Mar 2026 06:32:40 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/i-just-gave-autogpt-the-ability-to-send-crypto-payments-27ge</link>
      <guid>https://dev.to/mr_hamlin/i-just-gave-autogpt-the-ability-to-send-crypto-payments-27ge</guid>
      <description>&lt;p&gt;AI agents are getting smarter every week. They can browse the web, write code, manage your calendar, and post on social media. But ask one to pay someone? That's where they hit a wall.&lt;/p&gt;

&lt;p&gt;I just opened &lt;a href="https://github.com/Significant-Gravitas/AutoGPT/pull/12533" rel="noopener noreferrer"&gt;PR #12533&lt;/a&gt; on AutoGPT — the biggest open-source AI agent platform on GitHub — adding native crypto payment blocks powered by &lt;a href="https://spraay.app" rel="noopener noreferrer"&gt;Spraay&lt;/a&gt;, the multi-chain batch payment gateway I've been building.&lt;/p&gt;

&lt;p&gt;This is the first crypto payment integration in AutoGPT's block ecosystem. Here's why it matters and how I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: AI agents can't pay for anything
&lt;/h2&gt;

&lt;p&gt;Think about it. AutoGPT can already:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scrape Reddit for trending topics and create video content&lt;/li&gt;
&lt;li&gt;Monitor your YouTube channel and auto-generate blog posts&lt;/li&gt;
&lt;li&gt;Manage GitHub issues and coordinate workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the moment an agent needs to compensate a freelancer, pay a bounty, or settle an invoice? It's stuck. There's no native payment rail.&lt;/p&gt;

&lt;p&gt;Traditional payment APIs (Stripe, PayPal) require KYC, bank accounts, and don't work well for autonomous systems. Crypto solves this — specifically stablecoins like USDC that don't fluctuate in value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter x402: HTTP meets crypto payments
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://x402.org" rel="noopener noreferrer"&gt;x402 protocol&lt;/a&gt; is elegantly simple. It extends HTTP with status code 402 (Payment Required) to let APIs accept USDC micropayments per request. No subscriptions. No invoices. Just pay-per-call.&lt;/p&gt;

&lt;p&gt;Spraay's gateway sits at &lt;code&gt;gateway.spraay.app&lt;/code&gt; and exposes 76+ paid endpoints across 13 blockchain networks. When an AI agent calls the API, it pays a fraction of a cent in USDC and gets the service done. That's the entire auth model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built: 4 payment blocks
&lt;/h2&gt;

&lt;p&gt;AutoGPT's platform uses a modular "block" system. Each block performs a single action, and users chain them together visually to build agent workflows. I added four blocks:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SpraayBatchPaymentBlock&lt;/strong&gt; — The flagship. Send payments to multiple recipients in a single on-chain transaction. One call, multiple payees, massive gas savings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SpraayTokenTransferBlock&lt;/strong&gt; — Simple one-to-one transfer. Agent pays someone. Done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SpraayGetBalanceBlock&lt;/strong&gt; — Check any wallet's token balance on any chain. Essential for pre-flight checks before sending payments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SpraayTransactionStatusBlock&lt;/strong&gt; — Track confirmation status. Lets agents wait for finality before proceeding in a workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The code: how AutoGPT blocks work
&lt;/h2&gt;

&lt;p&gt;AutoGPT blocks follow a clean pattern: a Python class inheriting from &lt;code&gt;Block&lt;/code&gt;, with typed input/output schemas and an async &lt;code&gt;run&lt;/code&gt; method. Here's a simplified look at the batch payment block:&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="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SpraayBatchPaymentBlock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Block&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlockSchema&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;spraay_provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;credentials_field&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="n"&gt;ChainNetwork&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SchemaField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Blockchain network to send payments on&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ChainNetwork&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;recipients&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="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SchemaField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List of recipient wallet addresses&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;amounts&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="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SchemaField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List of amounts to send&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;class&lt;/span&gt; &lt;span class="nc"&gt;Output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlockSchema&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;transaction_hash&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="nc"&gt;SchemaField&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
        &lt;span class="n"&gt;status&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="nc"&gt;SchemaField&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
        &lt;span class="n"&gt;error&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="nc"&gt;SchemaField&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;run&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;input_data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;spraay_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/v1/batch/send&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;json_body&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;chain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;input_data&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="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;recipients&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;recipients&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amounts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;amounts&lt;/span&gt;&lt;span class="p"&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;yield&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transaction_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;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transaction_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;yield&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&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;p&gt;The provider config uses AutoGPT's &lt;code&gt;ProviderBuilder&lt;/code&gt; for API key management:&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="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;backend.sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BlockCostType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ProviderBuilder&lt;/span&gt;

&lt;span class="n"&gt;spraay_provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nc"&gt;ProviderBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;spraay&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="nf"&gt;with_api_key&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SPRAAY_API_KEY&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;Spraay x402 Gateway API Key&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="nf"&gt;with_base_cost&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;BlockCostType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RUN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clean, typed, testable. Every block includes &lt;code&gt;test_input&lt;/code&gt;, &lt;code&gt;test_output&lt;/code&gt;, and &lt;code&gt;test_mock&lt;/code&gt; so it plugs right into AutoGPT's test suite.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can build with this
&lt;/h2&gt;

&lt;p&gt;Once these blocks are merged, AutoGPT agents can do things like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Freelancer payroll agent&lt;/strong&gt; — Reads a Google Sheet of contractors, batch pays them all in USDC on Base. One transaction. Done weekly on a schedule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bounty payer&lt;/strong&gt; — Monitors GitHub issues tagged &lt;code&gt;bounty&lt;/code&gt;. When a linked PR gets merged, it automatically pays the contributor's wallet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent-to-agent payments&lt;/strong&gt; — One agent hires another agent for a subtask and pays via x402. This is the foundation of an autonomous agent economy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conditional payment workflows&lt;/strong&gt; — Check balance → if sufficient funds → send batch payment → verify confirmation → log to Google Sheets. All without human intervention.&lt;/p&gt;

&lt;h2&gt;
  
  
  13 chains, one API
&lt;/h2&gt;

&lt;p&gt;The blocks support every chain Spraay runs on:&lt;/p&gt;

&lt;p&gt;Base, Ethereum, Arbitrum, Polygon, BNB Chain, Avalanche, Unichain, Plasma, BOB, Solana, Bittensor, Stacks, and Bitcoin.&lt;/p&gt;

&lt;p&gt;Each chain is a simple enum value. Switch from Base to Solana by changing one field. The gateway handles all the chain-specific logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why open source this into AutoGPT?
&lt;/h2&gt;

&lt;p&gt;Visibility and ecosystem growth. AutoGPT has 183K stars and an active contributor community. Getting payment blocks into their marketplace means every AutoGPT user can add crypto payments to their agents without writing custom code.&lt;/p&gt;

&lt;p&gt;It's also a signal. AI agents handling money is inevitable. The infrastructure should be open, auditable, and composable — not locked behind proprietary APIs.&lt;/p&gt;

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

&lt;p&gt;The PR is live at &lt;a href="https://github.com/Significant-Gravitas/AutoGPT/pull/12533" rel="noopener noreferrer"&gt;#12533&lt;/a&gt;. If you're interested in AI agent payments, here are some links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spraay gateway&lt;/strong&gt;: &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;gateway.spraay.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://docs.spraay.app" rel="noopener noreferrer"&gt;docs.spraay.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; (for Claude, Cursor, etc.): &lt;a href="https://smithery.ai/server/@plagtech/spraay-x402-mcp" rel="noopener noreferrer"&gt;@plagtech/spraay-x402-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/plagtech" rel="noopener noreferrer"&gt;github.com/plagtech&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building agents that need to move money, I'd love to hear what you're working on. Drop a comment or find me on X at &lt;a href="https://twitter.com/Spraay_app" rel="noopener noreferrer"&gt;@Spraay_app&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Follow me for more on building crypto infrastructure for AI agents. I write daily about Web3, x402, and the agent economy.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>ai</category>
      <category>opensource</category>
      <category>crypto</category>
    </item>
    <item>
      <title>How AI Agents Pay for APIs Without Exposing Private Keys: OWS + Spraay</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Mon, 23 Mar 2026 18:29:27 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/how-ai-agents-pay-for-apis-without-exposing-private-keys-ows-spraay-5djk</link>
      <guid>https://dev.to/mr_hamlin/how-ai-agents-pay-for-apis-without-exposing-private-keys-ows-spraay-5djk</guid>
      <description>&lt;p&gt;The agent economy just got its wallet layer.&lt;/p&gt;

&lt;p&gt;Today MoonPay launched the &lt;strong&gt;Open Wallet Standard (OWS)&lt;/strong&gt; — an open-source protocol that gives AI agents a single, encrypted vault for storing keys and signing transactions across every major blockchain. One seed phrase, one signing interface, eight chain families. Keys never leave your machine.&lt;/p&gt;

&lt;p&gt;The coalition backing it reads like a who's who: PayPal, OKX, Ripple, Solana Foundation, Ethereum Foundation, Base, Polygon, Arbitrum, Circle, Virtuals, LayerZero, and more — 21 founding organizations in total.&lt;/p&gt;

&lt;p&gt;But here's the part that caught my attention: &lt;strong&gt;OWS explicitly names x402 as the payment protocol it was built to serve.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I build &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;Spraay&lt;/a&gt; — an x402 payment gateway with 76+ paid endpoints across 13 chains. So I spent the morning digging into the OWS spec, installing the SDK, and testing how well it plugs into our stack.&lt;/p&gt;

&lt;p&gt;Short answer: it fits like a glove.&lt;/p&gt;

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

&lt;p&gt;Right now, if you're building an AI agent that pays for things — API calls, compute, data — you're probably doing something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;PRIVATE_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0xabc123... &lt;span class="c"&gt;# sitting in .env&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your agent reads that key at startup, holds it in memory, and passes it to whatever signing library you're using. If you're on EVM, you're using ethers.js. Solana? Different library, different key format. Bitcoin? Yet another one.&lt;/p&gt;

&lt;p&gt;Three private keys. Three surfaces where they can leak — through logs, crash dumps, or the LLM context window itself.&lt;/p&gt;

&lt;p&gt;OWS replaces all of that with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createWallet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signTypedData&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@open-wallet-standard/core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createWallet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent-treasury&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// =&amp;gt; addresses for EVM, Solana, BTC, Cosmos, Tron, TON, Filecoin, Sui&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signTypedData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent-treasury&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;evm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;typedDataJson&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Private key decrypted in Rust enclave, signed, immediately wiped&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One seed. Eight chain families. Keys encrypted at rest with AES-256-GCM, decrypted only inside an isolated signing process, held in mlocked memory (pinned, never swapped to disk), and zeroized the moment the signature is produced.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your agent never sees the private key.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Spraay Comes In
&lt;/h2&gt;

&lt;p&gt;x402 is Coinbase's protocol for machine-to-machine payments. The flow works like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent requests an API endpoint&lt;/li&gt;
&lt;li&gt;Server returns &lt;code&gt;402 Payment Required&lt;/code&gt; with a payment spec&lt;/li&gt;
&lt;li&gt;Agent signs an EIP-3009 &lt;code&gt;TransferWithAuthorization&lt;/code&gt; (typed data)&lt;/li&gt;
&lt;li&gt;Agent retries with the signed payment in a header&lt;/li&gt;
&lt;li&gt;Server verifies payment, returns the data&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 1, 4, and 5 are handled by the Spraay gateway. But &lt;strong&gt;step 3 — signing the payment — is where OWS comes in.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Until now, every agent doing x402 payments had to manage its own keys. OWS standardizes that layer so any agent, any framework, any tool can use the same wallet with the same security model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building It: 10 Lines to Paid API Calls
&lt;/h2&gt;

&lt;p&gt;I tested this hands-on with the OWS Node SDK (&lt;code&gt;@open-wallet-standard/core&lt;/code&gt;). Here's a complete flow — create a wallet, sign an x402 payment for a Spraay API call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createWallet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signTypedData&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@open-wallet-standard/core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// 1. Create wallet (one seed → addresses on every chain)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createWallet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;evmAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accounts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chainId&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eip155:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// 2. Build the x402 payment (EIP-3009 TransferWithAuthorization)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;typedData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;types&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;EIP712Domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;version&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chainId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uint256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;verifyingContract&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;address&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;TransferWithAuthorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;from&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;address&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;to&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;address&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;value&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uint256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;validAfter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uint256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;validBefore&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uint256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;nonce&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bytes32&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;primaryType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TransferWithAuthorization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USD Coin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8453&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Base&lt;/span&gt;
    &lt;span class="na"&gt;verifyingContract&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;evmAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0xAd62f03C7514bb8c51f1eA70C2b75C37404695c8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Spraay&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// $0.10 USDC&lt;/span&gt;
    &lt;span class="na"&gt;validAfter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;validBefore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&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="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRandomValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Uint8Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&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="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// 3. Sign it (key never leaves the Rust enclave)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signTypedData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;evm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;typedData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Signature:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;sig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I ran this. It works. The OWS SDK produced a valid 65-byte secp256k1 signature with recovery ID, exactly what x402 expects. The signing happened in the native Rust core via NAPI-RS — no JavaScript crypto library touched the key material.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Vault Looks Like
&lt;/h2&gt;

&lt;p&gt;After &lt;code&gt;createWallet()&lt;/code&gt;, OWS stores everything at &lt;code&gt;~/.ows/&lt;/code&gt; with &lt;code&gt;700&lt;/code&gt; permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.ows/
  wallets/
    480d3738-4839-4cb6-bbcf-2605eb841012.json   # encrypted keystore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each wallet JSON uses the &lt;strong&gt;Ethereum Keystore v3&lt;/strong&gt; format — the same encryption that's been in production since 2015. One file, one seed, addresses for all chains.&lt;/p&gt;

&lt;h2&gt;
  
  
  The MCP Integration
&lt;/h2&gt;

&lt;p&gt;Both OWS and Spraay expose MCP servers. This means an AI agent (Claude, GPT, LangChain, etc.) can have both tools loaded simultaneously:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&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;"ows"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ows"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"serve"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--mcp"&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;"spraay"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@plagtech/spraay-x402-mcp"&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;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OWS handles the wallet side (create, sign, manage keys). Spraay handles the payment side (76+ endpoints, 13 chains, token prices, batch payments, DeFi, RTP robot tasks). The agent orchestrates both without ever touching a private key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Policy Engine: Spending Limits for Agents
&lt;/h2&gt;

&lt;p&gt;One feature that's particularly useful for autonomous agents: OWS has a &lt;strong&gt;policy engine&lt;/strong&gt; that evaluates rules before any key material is decrypted.&lt;/p&gt;

&lt;p&gt;You can create API keys scoped to specific wallets, attach policies (spending limits, chain restrictions, recipient allowlists), and delegate them to sub-agents. The owner bypasses policies entirely — sudo access. Agent keys are constrained.&lt;/p&gt;

&lt;p&gt;For Spraay payments, this means you could set:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Max $1.00 USDC per API call&lt;/li&gt;
&lt;li&gt;Only Base chain allowed&lt;/li&gt;
&lt;li&gt;Only the Spraay payment address in the recipient allowlist&lt;/li&gt;
&lt;li&gt;Key expires in 24 hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent can make as many API calls as it wants within those bounds. Step outside them and the policy engine blocks the signing request before the key is ever decrypted.&lt;/p&gt;

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

&lt;p&gt;I'm building a &lt;code&gt;spraay-ows&lt;/code&gt; adapter package that will handle the full x402 payment flow in a single function call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SpraayOWS&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;spraay-ows&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SpraayOWS&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-agent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/v1/token/price?symbol=ETH&amp;amp;chain=base&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The adapter will handle the 402 response, construct the EIP-3009 typed data, call OWS for signing, encode the payment header, and retry — all transparently.&lt;/p&gt;

&lt;p&gt;The code is already working in prototype. Will publish to npm once I've wired it into the Spraay gateway's test suite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OWS&lt;/strong&gt;: &lt;a href="https://openwallet.sh" rel="noopener noreferrer"&gt;openwallet.sh&lt;/a&gt; | &lt;a href="https://github.com/open-wallet-standard/core" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;code&gt;npm install @open-wallet-standard/core&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spraay Gateway&lt;/strong&gt;: &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;gateway.spraay.app&lt;/a&gt; | &lt;a href="https://docs.spraay.app" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spraay MCP&lt;/strong&gt;: &lt;a href="https://smithery.ai/server/@plagtech/spraay-x402-mcp" rel="noopener noreferrer"&gt;Smithery&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;💧 The agent economy has payment rails. Now it has a wallet standard. And they work together.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>blockchain</category>
      <category>moonpay</category>
    </item>
    <item>
      <title>How to Add a Payment Layer to NVIDIA's Autonomous Agent Stack</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Sun, 22 Mar 2026 23:20:29 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/how-to-add-a-payment-layer-to-nvidias-autonomous-agent-stack-1g93</link>
      <guid>https://dev.to/mr_hamlin/how-to-add-a-payment-layer-to-nvidias-autonomous-agent-stack-1g93</guid>
      <description>&lt;p&gt;At GTC 2026 last week, Jensen Huang declared that "Claude Code and OpenClaw have sparked the agent inflection point — extending AI beyond generation and reasoning into action."&lt;/p&gt;

&lt;p&gt;He's right. But there's a missing piece nobody on that stage talked about: &lt;strong&gt;agents that act need to pay.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every time an autonomous agent spawns a sub-agent, accesses premium data, hires a robot, or compensates a contractor — there's a payment event. And right now, NVIDIA's agent stack (OpenShell, NemoClaw, NeMo Agent Toolkit) has no native payment rail.&lt;/p&gt;

&lt;p&gt;I spent the last week building that missing piece.&lt;/p&gt;

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

&lt;p&gt;NVIDIA shipped an incredible agentic AI stack at GTC 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenShell&lt;/strong&gt; — the open-source sandbox runtime for autonomous agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NemoClaw&lt;/strong&gt; — the OpenClaw enterprise stack with security guardrails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NeMo Agent Toolkit&lt;/strong&gt; — the library for connecting and optimizing teams of agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamo 1.0&lt;/strong&gt; — the distributed inference framework&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools let agents reason, plan, and act inside isolated sandboxes with policy-enforced security. But when an agent needs to &lt;em&gt;spend money&lt;/em&gt; — pay for an API call, send tokens to a contractor, fund an escrow — there's nothing in the stack for that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: x402
&lt;/h2&gt;

&lt;p&gt;The x402 protocol makes payments native to HTTP. It works like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent calls a paid API endpoint&lt;/li&gt;
&lt;li&gt;Server returns &lt;strong&gt;HTTP 402 Payment Required&lt;/strong&gt; with payment details in the header&lt;/li&gt;
&lt;li&gt;Agent signs a USDC micropayment&lt;/li&gt;
&lt;li&gt;Agent resends the request with the signed payment proof&lt;/li&gt;
&lt;li&gt;Server verifies on-chain and executes the request&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No API keys for payment. No wallet UX. No Stripe integration. Just pay-per-call with USDC.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://spraay.app" rel="noopener noreferrer"&gt;Spraay&lt;/a&gt; — a gateway at &lt;code&gt;gateway.spraay.app&lt;/code&gt; that exposes 76+ endpoints across 13 blockchains using this protocol. And this week I integrated it into three layers of NVIDIA's agent stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration 1: OpenShell Sandbox
&lt;/h2&gt;

&lt;p&gt;OpenShell runs agents in isolated containers with policy-enforced egress. I built a Spraay sandbox image that any agent can launch with one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openshell sandbox create &lt;span class="nt"&gt;--from&lt;/span&gt; spraay &lt;span class="nt"&gt;--&lt;/span&gt; claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The sandbox includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;spraay&lt;/code&gt; CLI wrapper with 17 commands covering all gateway categories&lt;/li&gt;
&lt;li&gt;4 agent skills (payments, escrow, RTP robot hiring, gateway discovery)&lt;/li&gt;
&lt;li&gt;A locked-down network policy allowing only &lt;code&gt;gateway.spraay.app&lt;/code&gt; and verified RPC providers&lt;/li&gt;
&lt;li&gt;Python + Node.js crypto libraries for wallet operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key security property: &lt;strong&gt;private keys never leave the sandbox boundary.&lt;/strong&gt; All payment signing happens inside the isolated OpenShell environment.&lt;/p&gt;

&lt;p&gt;This is submitted as &lt;a href="https://github.com/NVIDIA/OpenShell-Community/pull/50" rel="noopener noreferrer"&gt;PR #50&lt;/a&gt; to NVIDIA's OpenShell Community repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration 2: NeMo Agent Toolkit
&lt;/h2&gt;

&lt;p&gt;NeMo Agent Toolkit lets you build agent workflows with a YAML config file. I created 8 custom async tools that connect to the Spraay gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;functions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;spraay_balance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;spraay_balance&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Check&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;wallet&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;balance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;any&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;chain"&lt;/span&gt;

  &lt;span class="na"&gt;spraay_batch_send&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;spraay_batch_send&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Send&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tokens&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;multiple&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;recipients"&lt;/span&gt;

  &lt;span class="na"&gt;spraay_rtp_discover&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;spraay_rtp_discover&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Discover&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;robots&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;RTP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;network"&lt;/span&gt;

&lt;span class="na"&gt;workflow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;react_agent&lt;/span&gt;
  &lt;span class="na"&gt;tool_names&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;spraay_balance&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;spraay_batch_send&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;spraay_rtp_discover&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;llm_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nim_llm&lt;/span&gt;
  &lt;span class="na"&gt;verbose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now any NeMo Agent Toolkit agent can reason about payments and execute them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nat run &lt;span class="nt"&gt;--config_file&lt;/span&gt; config.yml &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--input&lt;/span&gt; &lt;span class="s2"&gt;"Check the USDC balance for 0xAd62...95c8 on Base"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is submitted as &lt;a href="https://github.com/NVIDIA/NeMo-Agent-Toolkit-Examples/pull/20" rel="noopener noreferrer"&gt;PR #20&lt;/a&gt; to NVIDIA's NeMo Agent Toolkit Examples repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration 3: NemoClaw Network Policy
&lt;/h2&gt;

&lt;p&gt;NemoClaw sandboxes block all unauthorized outbound connections by default. For an OpenClaw agent to use Spraay, you need a network policy preset:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;egress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gateway.spraay.app&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;443&lt;/span&gt;
      &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;GET&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;POST&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/v1/**"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/health"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;note&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Spraay&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;x402&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;payment&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;gateway"&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*.base.org"&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;443&lt;/span&gt;
      &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;POST&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/**"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;note&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Base&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;chain&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;RPC&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;payment&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;verification"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I submitted this as a &lt;a href="https://github.com/NVIDIA/NemoClaw/issues/625" rel="noopener noreferrer"&gt;feature request&lt;/a&gt; on the NemoClaw repo (13.9k stars) and as a &lt;a href="https://github.com/VoltAgent/awesome-nemoclaw/pull/1" rel="noopener noreferrer"&gt;preset PR&lt;/a&gt; to the awesome-nemoclaw community list.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Physical AI Angle
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. NVIDIA announced the Physical AI Data Factory Blueprint at GTC — an open architecture for training robotics systems. Spraay includes the &lt;strong&gt;Robot Task Protocol (RTP)&lt;/strong&gt;, an open standard for AI agents to hire robots via x402 USDC micropayments.&lt;/p&gt;

&lt;p&gt;The RTP flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent discovers available robots/devices on the network&lt;/li&gt;
&lt;li&gt;Agent reviews pricing and selects a device&lt;/li&gt;
&lt;li&gt;Agent sends x402 micropayment to commission a physical task&lt;/li&gt;
&lt;li&gt;Robot executes the task and reports results&lt;/li&gt;
&lt;li&gt;On-chain proof of completion&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This bridges NVIDIA's digital agent stack with their physical AI ambitions. When an agent running in OpenShell needs a robot to pick up a package, take a sensor reading, or run a 3D print job — RTP + Spraay is how it pays for that service.&lt;/p&gt;

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

&lt;p&gt;These integrations are all submitted and waiting for review. Whether they get merged or not, the architecture works today. You can point any agent at &lt;code&gt;gateway.spraay.app&lt;/code&gt; and start executing payments via x402.&lt;/p&gt;

&lt;p&gt;If you're building autonomous agents and need a payment rail, here are the resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gateway&lt;/strong&gt;: &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;gateway.spraay.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://docs.spraay.app" rel="noopener noreferrer"&gt;docs.spraay.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Server&lt;/strong&gt;: &lt;a href="https://smithery.ai/server/@plagtech/spraay-x402-mcp" rel="noopener noreferrer"&gt;@plagtech/spraay-x402-mcp&lt;/a&gt; on Smithery&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;x402 Protocol&lt;/strong&gt;: &lt;a href="https://www.x402.org" rel="noopener noreferrer"&gt;x402.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RTP Spec&lt;/strong&gt;: &lt;a href="https://github.com/plagtech/rtp-spec" rel="noopener noreferrer"&gt;github.com/plagtech/rtp-spec&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent inflection point is here. Now agents can pay.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://github.com/plagtech" rel="noopener noreferrer"&gt;@plagtech&lt;/a&gt;. Follow &lt;a href="https://twitter.com/Spraay_app" rel="noopener noreferrer"&gt;@Spraay_app&lt;/a&gt; for updates.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nvidia</category>
      <category>ai</category>
      <category>agents</category>
      <category>crypto</category>
    </item>
    <item>
      <title>💧 Give Your LangChain Agent a Smart Wallet on Base</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Sun, 22 Mar 2026 04:12:44 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/give-your-langchain-agent-a-smart-wallet-on-base-502c</link>
      <guid>https://dev.to/mr_hamlin/give-your-langchain-agent-a-smart-wallet-on-base-502c</guid>
      <description>&lt;p&gt;Your AI agent can write emails, search the web, and query databases. But can it deploy a smart wallet?&lt;/p&gt;

&lt;p&gt;Now it can.&lt;/p&gt;

&lt;p&gt;I just published &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/@spraay/langchain-agent-wallet" rel="noopener noreferrer"&gt;@spraay/langchain-agent-wallet&lt;/a&gt;&lt;/strong&gt; — 5 LangChain &lt;code&gt;StructuredTool&lt;/code&gt; classes that let your agent provision smart wallets, manage session keys, and predict wallet addresses on Base. Every call is paid with USDC micropayments via the &lt;a href="https://x402.org" rel="noopener noreferrer"&gt;x402 protocol&lt;/a&gt;. No API keys. No subscriptions. Just pay-per-call.&lt;/p&gt;

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

&lt;p&gt;AI agents are getting good at planning and reasoning. But when it comes to actually &lt;em&gt;holding money&lt;/em&gt; and &lt;em&gt;executing transactions&lt;/em&gt;, most frameworks punt. You end up with the agent's private key embedded in code, full access to everything, zero permission scoping.&lt;/p&gt;

&lt;p&gt;That's not how you'd let a human employee operate. Why let your agent?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: Agent Wallets with Session Keys
&lt;/h2&gt;

&lt;p&gt;Spraay's Agent Wallet infrastructure deploys a &lt;strong&gt;smart contract wallet&lt;/strong&gt; for each agent on Base. The wallet is owned by you, but the agent gets a &lt;strong&gt;session key&lt;/strong&gt; — a scoped, time-limited permission to act on behalf of the wallet.&lt;/p&gt;

&lt;p&gt;Think of it like giving an employee a corporate card with a spending limit instead of handing them the company bank login.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 Tools
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @spraay/langchain-agent-wallet @langchain/core
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;spraay_provision_wallet&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deploy a new smart wallet on Base&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;spraay_add_session_key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Grant scoped permissions to an address&lt;/td&gt;
&lt;td&gt;$0.02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;spraay_get_wallet_info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Query wallet details and balance&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;spraay_revoke_session_key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Remove a session key&lt;/td&gt;
&lt;td&gt;$0.02&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;spraay_predict_address&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pre-compute CREATE2 wallet address&lt;/td&gt;
&lt;td&gt;$0.001&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ChatOpenAI&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@langchain/openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createToolCallingAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AgentExecutor&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;langchain/agents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ChatPromptTemplate&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@langchain/core/prompts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createSpraayWalletTools&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@spraay/langchain-agent-wallet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Create all 5 tools with one function&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createSpraayWalletTools&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;privateKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;EVM_PRIVATE_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ChatOpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gpt-4o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ChatPromptTemplate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromMessages&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a Web3 agent that manages smart wallets on Base.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;human&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{input}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;placeholder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{agent_scratchpad}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createToolCallingAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;executor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AgentExecutor&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tools&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// The agent decides which tool to call based on natural language&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Deploy a new wallet for 0x1234...abcd labeled 'treasury'&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The LLM reads the tool descriptions and zod schemas to figure out which tool to call and what parameters to pass. You don't write any routing logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  How x402 Payments Work
&lt;/h2&gt;

&lt;p&gt;Every tool call hits the Spraay gateway at &lt;code&gt;gateway.spraay.app&lt;/code&gt;. Instead of an API key, the request includes a signed payment header — your agent's private key authorizes a USDC micropayment on Base.&lt;/p&gt;

&lt;p&gt;The gateway verifies the signature, settles the payment, and executes the operation. It's like HTTP 402 (Payment Required) actually working the way it was supposed to.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No API keys to manage or rotate&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No rate limits&lt;/strong&gt; — you pay for what you use&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No subscription tiers&lt;/strong&gt; — $0.001 to $0.05 per call&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissionless&lt;/strong&gt; — any agent with USDC on Base can use it&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The wallet contracts are live on Base mainnet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Factory:&lt;/strong&gt; &lt;code&gt;0xFBD832Db6D9a05A0434cd497707a1bDC43389CfD&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementation:&lt;/strong&gt; &lt;code&gt;0x61818Ae8bC161D1884Fd8823985B80e6733C34E7&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gateway serves 76+ paid endpoints across 16 categories and 13 chains. Agent Wallet is Category 17.&lt;/p&gt;

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

&lt;p&gt;This is one piece of a bigger push to get Spraay tooling into every major agent framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ElizaOS plugin&lt;/strong&gt; — &lt;a href="https://github.com/plagtech/plugin-spraay-wallet" rel="noopener noreferrer"&gt;submitted to the registry&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CrewAI tools&lt;/strong&gt; — &lt;a href="https://github.com/plagtech/crewai-spraay-wallet" rel="noopener noreferrer"&gt;Python, no SDK dependency&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; — already live on &lt;a href="https://smithery.ai" rel="noopener noreferrer"&gt;Smithery&lt;/a&gt; as &lt;code&gt;@plagtech/spraay-x402-mcp&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your agent needs to hold money, send payments, or manage wallets — and you don't want to hand it your private key — give this a try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/@spraay/langchain-agent-wallet" rel="noopener noreferrer"&gt;@spraay/langchain-agent-wallet&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/plagtech/langchain-spraay-wallet" rel="noopener noreferrer"&gt;plagtech/langchain-spraay-wallet&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://docs.spraay.app" rel="noopener noreferrer"&gt;docs.spraay.app&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://twitter.com/lostpoet" rel="noopener noreferrer"&gt;@lostpoet&lt;/a&gt; / &lt;a href="https://twitter.com/Spraay_app" rel="noopener noreferrer"&gt;@Spraay_app&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>langchain</category>
      <category>web3</category>
      <category>ai</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>I Forked Abstract's Global Wallet to Give AI Agents Their Own Wallets on Base</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Sat, 21 Mar 2026 03:27:05 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/i-forked-abstracts-global-wallet-to-give-ai-agents-their-own-wallets-on-base-199k</link>
      <guid>https://dev.to/mr_hamlin/i-forked-abstracts-global-wallet-to-give-ai-agents-their-own-wallets-on-base-199k</guid>
      <description>&lt;h2&gt;
  
  
  The Problem: AI Agents Need Wallets, and Nobody's Making It Easy
&lt;/h2&gt;

&lt;p&gt;If you're building AI agents that interact with blockchain — trading bots, payment agents, autonomous task runners — you hit the same wall everyone hits: &lt;strong&gt;the agent needs a wallet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your options today are pretty bad:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 1: Hardcode a private key in &lt;code&gt;.env&lt;/code&gt;.&lt;/strong&gt; This is what most tutorials show you. It's also a disaster waiting to happen. One leaked key and your agent's funds are gone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 2: Use a custodial wallet provider.&lt;/strong&gt; Phantom has a Server SDK that lets you create wallets programmatically. Great concept. But you need to apply to their developer program and wait for approval. I've been waiting. And waiting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 3: Manual setup.&lt;/strong&gt; A human creates a MetaMask wallet, funds it, and pastes the key into the agent config. This works for demos. It does not work at scale when you need to spin up 100 agents.&lt;/p&gt;

&lt;p&gt;None of these give you what agents actually need: a wallet with &lt;strong&gt;spending limits&lt;/strong&gt;, &lt;strong&gt;time-bound sessions&lt;/strong&gt;, and &lt;strong&gt;automatic expiry&lt;/strong&gt;. You know, the kind of safety rails you'd want before letting an autonomous AI handle real money.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Inspiration: Abstract Global Wallet
&lt;/h2&gt;

&lt;p&gt;While building &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;Spraay&lt;/a&gt; (a multi-chain batch payment protocol), I started exploring Abstract chain as a potential addition to our supported networks. Abstract is an L2 built by the Pudgy Penguins team, and their standout feature is the &lt;strong&gt;Abstract Global Wallet (AGW)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AGW is elegant. You sign up with an email, and a smart contract wallet gets deployed for you behind the scenes. No seed phrases. No browser extensions. The wallet travels with you across every app on Abstract. Under the hood, it uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;factory contract&lt;/strong&gt; that deploys wallet instances via CREATE2&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native account abstraction&lt;/strong&gt; for gasless transactions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session keys&lt;/strong&gt; for pre-authorized actions without repeated signing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privy&lt;/strong&gt; for key management (splitting the private key into three shards)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture is adapted from &lt;a href="https://github.com/getclave/clave-contracts" rel="noopener noreferrer"&gt;Clave's zkSync contracts&lt;/a&gt;, and it's open source under GPL-3.0.&lt;/p&gt;

&lt;p&gt;I looked at this and thought: &lt;strong&gt;this is exactly what AI agents need. But the SDK only works in browsers, and the chain is locked to Abstract.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fork: What I Kept and What I Changed
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/Abstract-Foundation/agw-contracts" rel="noopener noreferrer"&gt;AGW contracts repo&lt;/a&gt; gave me the blueprint. Here's what I adapted:&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Kept
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Factory pattern with CREATE2&lt;/strong&gt; — deterministic wallet addresses, minimal proxy clones (EIP-1167). Each wallet deployment costs roughly $0.01-0.05 in gas on Base.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart contract wallet architecture&lt;/strong&gt; — the wallet is a contract, not an EOA. This enables programmable rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session keys&lt;/strong&gt; — the feature that makes this work for agents. A session key is a temporary signer with a spending limit, expiry time, and optional target restrictions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I Changed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Removed Privy key-sharding&lt;/strong&gt; — AGW splits the private key into three shards (device, server, recovery cloud). Agents don't have devices or iCloud. In our version, agents either hold their own keys (self-custody) or the provisioning service generates and encrypts keys server-side (managed mode).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployed on Base instead of Abstract&lt;/strong&gt; — Abstract's SDK is chain-locked due to their native account abstraction implementation. Our contracts are standard Solidity that works on any EVM chain. We deployed on Base because that's where the rest of the Spraay ecosystem lives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Added agent metadata&lt;/strong&gt; — Each wallet stores an &lt;code&gt;agentId&lt;/code&gt; and &lt;code&gt;agentType&lt;/code&gt; (e.g., "eliza", "langchain", "crewai"). This feeds into our trust scoring system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exposed via x402 gateway&lt;/strong&gt; — Instead of a browser SDK, wallet provisioning happens through API endpoints on our payment gateway. An agent pays $0.05 USDC and gets a wallet.&lt;/li&gt;
&lt;/ul&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;AI Agent (ElizaOS / LangChain / CrewAI / etc.)
    │
    │  x402 USDC micropayment ($0.05)
    ▼
Spraay Gateway (gateway.spraay.app)
    │
    │  POST /v1/wallet/provision
    ▼
SpraayWalletFactory (Base)
    │
    │  CREATE2 deploy (EIP-1167 minimal proxy)
    ▼
SpraayAgentWallet
    ├── Session Keys (spending limits + time bounds)
    ├── Batch Execution (multi-call in one tx)
    └── Agent Metadata (identity + trust scoring)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The factory deploys minimal proxy clones — just 45 bytes of runtime bytecode that delegate all calls to the implementation contract. This keeps deployment gas costs extremely low.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Contracts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SpraayAgentWallet.sol
&lt;/h3&gt;

&lt;p&gt;The core wallet supports three main capabilities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Session Keys&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function addSessionKey(
    address sessionKey,
    uint256 spendLimitWei,
    uint256 validUntil,
    address[] calldata allowedTargets
) external onlyOwner;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An agent creates a session key with a spending cap, expiry, and optional contract whitelist. The session key can then sign transactions on behalf of the wallet within those bounds. If the key is compromised, damage is capped at the spending limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Batch Execution&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function executeBatch(
    address[] calldata targets,
    uint256[] calldata values,
    bytes[] calldata datas
) external onlyOwnerOrValidSession;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agents often need to do multiple things in one action — approve a token, then swap it, then send the result somewhere. Batch execution handles this atomically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Agent Metadata&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function setAgentMetadata(
    string calldata agentId,
    string calldata agentType
) external onlyOwner;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every wallet knows what agent framework created it and carries a unique identifier. This connects to our ProofLayer trust scoring system — agents build reputation over time based on their on-chain behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  SpraayWalletFactory.sol
&lt;/h3&gt;

&lt;p&gt;The factory takes an implementation address in its constructor and deploys clones:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;constructor(address _implementation) {
    require(_implementation != address(0), "SWF: zero impl");
    admin = msg.sender;
    walletImplementation = _implementation;
}

function createWallet(
    address owner,
    string calldata agentId,
    string calldata agentType,
    bytes32 salt
) external whenNotPaused returns (address wallet) {
    bytes32 finalSalt = keccak256(abi.encodePacked(owner, salt));
    wallet = _deployClone(walletImplementation, finalSalt);
    SpraayAgentWallet(payable(wallet)).initialize(owner, agentId, agentType);
    _wallets.push(wallet);
    _isWallet[wallet] = true;
    emit WalletCreated(wallet, owner, agentId, agentType);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deterministic addresses via CREATE2 mean you can predict a wallet's address before deploying it — useful for pre-funding scenarios.&lt;/p&gt;

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

&lt;p&gt;The contracts are live on Base Sepolia testnet:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Contract&lt;/th&gt;
&lt;th&gt;Address&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Implementation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0xb6843955D914aD61dc6A4C819E0734d96467a391&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Factory&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0xe483F189af41FB5479cd8695DbbA16cc5CF1071D&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Demo Wallet&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0xcC74104d9d55889606e51FeD0f57c3AE23FC8054&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The deployment process had its share of nonce collisions and "replacement transaction underpriced" errors from rapid-fire attempts on the testnet RPC. Pro tip: when deploying multiple contracts in sequence, explicitly manage your nonces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nonce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getTransactionCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deployer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pending&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;impl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Impl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nonce&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;factory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Factory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;implAddr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;nonce&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The SDK (Coming Soon)
&lt;/h2&gt;

&lt;p&gt;Agent frameworks will be able to provision wallets with a few lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SpraayWallet&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;spraay-agent-wallet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;SpraayWallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;provision&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my-trading-agent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;agentType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;langchain&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;managed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;x402PaymentHeader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;X402_HEADER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Add a session key: 0.5 ETH limit, 24 hours&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addSessionKey&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;spendLimitEth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0.5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;durationHours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;allowedTargets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x...BatchContract&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is one &lt;code&gt;npm install&lt;/code&gt; and three lines of code. If it's harder than that, developers won't use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;The intersection of AI agents and crypto is heating up fast. Coinbase has x402 for agent-to-agent payments. Virtuals Protocol has an agent economy. Every major framework is adding tool-use capabilities that include blockchain interactions.&lt;/p&gt;

&lt;p&gt;But the wallet layer has been ignored. Everyone assumes the agent already has a wallet. Nobody's asking: &lt;strong&gt;how does the agent get the wallet in the first place? And how do you put guardrails on it so it doesn't drain its funds on a bad decision?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Session keys are the answer. An agent with a session key that caps spending at 0.5 ETH per day, expires in 24 hours, and can only interact with three specific contracts is a fundamentally different risk profile than an agent holding an unrestricted private key.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base mainnet deployment&lt;/strong&gt; — same contracts, real money&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway integration&lt;/strong&gt; — wallet endpoints join the existing 76+ paid endpoints on Spraay's x402 gateway&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent framework PRs&lt;/strong&gt; — ElizaOS plugin, LangChain tool, CrewAI integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ProofLayer scoring&lt;/strong&gt; — wallet behavior feeds into agent trust scores&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm publish&lt;/strong&gt; — &lt;code&gt;spraay-agent-wallet&lt;/code&gt; package for drop-in SDK usage&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The code is open source: &lt;a href="https://github.com/plagtech/spraay-agent-wallet" rel="noopener noreferrer"&gt;github.com/plagtech/spraay-agent-wallet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Contracts are GPL-3.0, same license as the AGW contracts we forked from. If you're building agents that need wallets, take a look. If you have ideas for how session key policies should work for different agent types, open an issue.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://twitter.com/lostpoet" rel="noopener noreferrer"&gt;@lostpoet&lt;/a&gt; — building &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;Spraay&lt;/a&gt; 💧, a multi-chain batch payment protocol with 76+ x402 gateway endpoints across 13 chains.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks to the &lt;a href="https://github.com/Abstract-Foundation" rel="noopener noreferrer"&gt;Abstract Foundation&lt;/a&gt; and &lt;a href="https://github.com/getclave" rel="noopener noreferrer"&gt;Clave&lt;/a&gt; for the open source smart contract wallet architecture that made this possible.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wallet</category>
      <category>ai</category>
      <category>agents</category>
      <category>web3</category>
    </item>
    <item>
      <title>Stripe Just Validated Agent Payments — Here's Why the Open Web Still Needs x402</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Thu, 19 Mar 2026 17:18:34 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/stripe-just-validated-agent-payments-heres-why-the-open-web-still-needs-x402-44ed</link>
      <guid>https://dev.to/mr_hamlin/stripe-just-validated-agent-payments-heres-why-the-open-web-still-needs-x402-44ed</guid>
      <description>&lt;h2&gt;
  
  
  Stripe Just Said the Quiet Part Out Loud
&lt;/h2&gt;

&lt;p&gt;Yesterday, Stripe and Paradigm launched &lt;a href="https://tempo.xyz" rel="noopener noreferrer"&gt;Tempo&lt;/a&gt; — a payments-focused Layer 1 blockchain — alongside the &lt;strong&gt;Machine Payments Protocol (MPP)&lt;/strong&gt;, an open standard for AI agent-to-service payments.&lt;/p&gt;

&lt;p&gt;The partner list reads like a who's who of global finance: Visa, Mastercard, OpenAI, Anthropic, DoorDash, Shopify, Revolut, Ramp, Nubank, and Standard Chartered.&lt;/p&gt;

&lt;p&gt;Let that sink in. &lt;strong&gt;The world's largest payment processor just built a blockchain specifically so AI agents can pay for things.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you've been building in the agent payments space, this is the validation moment. The thesis is no longer speculative. Stripe, with $1.9 trillion in annual payment volume, is betting its infrastructure future on the idea that &lt;strong&gt;machines will be the next wave of paying customers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But here's where it gets interesting — and where builders need to pay attention to what's actually being built.&lt;/p&gt;

&lt;h2&gt;
  
  
  How MPP Works
&lt;/h2&gt;

&lt;p&gt;The Machine Payments Protocol follows a straightforward flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An AI agent requests a resource from a service&lt;/li&gt;
&lt;li&gt;The service responds with a payment request&lt;/li&gt;
&lt;li&gt;The agent authorizes payment from its wallet&lt;/li&gt;
&lt;li&gt;The transaction settles instantly on Tempo&lt;/li&gt;
&lt;li&gt;The service delivers the resource&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;MPP also introduces &lt;strong&gt;sessions&lt;/strong&gt; — described by Tempo as "OAuth for money." An agent authorizes once, then payments execute programmatically within defined limits. Think of it like an API key, but for spending.&lt;/p&gt;

&lt;p&gt;Visa has extended MPP for card-based payments. Stripe extended it for cards and wallets. Lightspark extended it for Bitcoin payments over Lightning. The protocol is designed to be rail-agnostic.&lt;/p&gt;

&lt;p&gt;This is genuinely impressive engineering. And it's going to accelerate the entire category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But there's a catch.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  MPP Runs on Tempo. Tempo Runs on Permission.
&lt;/h2&gt;

&lt;p&gt;Tempo is a proprietary Layer 1 blockchain incubated by Stripe and Paradigm. It raised $500 million at a $5 billion valuation. Its engineering team includes former Optimism CEO Liam Horne and Paradigm CTO Georgios Konstantopoulos.&lt;/p&gt;

&lt;p&gt;The partners building on it — Visa, Mastercard, Standard Chartered — are institutions that require compliance registries, KYC frameworks, and regulatory oversight baked into the chain itself.&lt;/p&gt;

&lt;p&gt;That's not a criticism. It's a design choice. Tempo is built for enterprise-grade, regulated payment workloads. It has ISO 20022 compliance for banking integration. It has smart accounts with built-in governance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But it's not the open web.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're an independent developer building an AI agent that needs to pay for an API call, you don't want to onboard to Tempo's partner ecosystem first. If you're a small team running a paid endpoint in Lagos or Bangalore, you don't want to wait for Stripe's compliance team to approve your service.&lt;/p&gt;

&lt;p&gt;The open web runs on HTTP. And agent payments on the open web need something native to HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter x402: The Permissionless Alternative
&lt;/h2&gt;

&lt;p&gt;The x402 protocol takes a fundamentally different approach. Instead of building a new blockchain for payments, it embeds payments into the protocol the web already runs on — &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's how x402 works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An AI agent sends an HTTP request to a paid endpoint&lt;/li&gt;
&lt;li&gt;The server responds with &lt;strong&gt;HTTP 402 Payment Required&lt;/strong&gt; + payment details&lt;/li&gt;
&lt;li&gt;The agent sends a USDC micropayment on-chain&lt;/li&gt;
&lt;li&gt;The server verifies payment and returns the resource&lt;/li&gt;
&lt;li&gt;All of this happens in a single HTTP request-response cycle&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No new chain. No partner ecosystem. No compliance registry. Just HTTP + USDC + any EVM chain.&lt;/p&gt;

&lt;p&gt;The 402 status code has been reserved in the HTTP specification since 1997 — literally waiting for digital payments to catch up. Coinbase formalized the x402 protocol to finally put it to use, and builders like us at &lt;a href="https://spraay.app" rel="noopener noreferrer"&gt;Spraay&lt;/a&gt; have been running it in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Comparison
&lt;/h2&gt;

&lt;p&gt;Let's be honest about what each approach optimizes for:&lt;/p&gt;

&lt;h3&gt;
  
  
  MPP (Stripe/Tempo)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Optimized for:&lt;/strong&gt; Enterprise, institutional, regulated workloads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settlement:&lt;/strong&gt; Tempo L1 (proprietary)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partners:&lt;/strong&gt; Visa, Mastercard, OpenAI, Anthropic, Shopify&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KYC/Compliance:&lt;/strong&gt; Built into the chain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access model:&lt;/strong&gt; Partner ecosystem onboarding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Large platforms integrating agent payments into existing Stripe infrastructure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; Sub-$0.001 fees on Tempo&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  x402 (Coinbase/Open Standard)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Optimized for:&lt;/strong&gt; Permissionless, open web, developer-first&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settlement:&lt;/strong&gt; Any EVM chain (Base, Ethereum, Arbitrum, Solana, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partners:&lt;/strong&gt; Anyone with an HTTP endpoint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KYC/Compliance:&lt;/strong&gt; Not required at the protocol level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access model:&lt;/strong&gt; Permissionless — deploy and earn&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for:&lt;/strong&gt; Independent developers, API builders, open-source projects, global south builders&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; Configurable per endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't competing standards. They're &lt;strong&gt;complementary layers&lt;/strong&gt; for different parts of the economy.&lt;/p&gt;

&lt;p&gt;MPP will handle the Shopify checkout, the DoorDash delivery payment, the enterprise SaaS billing. x402 will handle the indie API, the open-source tool, the agent-to-agent micropayment, the robot task commission — the long tail of the agent economy that institutional gatekeepers can't (and won't) serve.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Spraay Is Doing With x402
&lt;/h2&gt;

&lt;p&gt;We've been building the x402 gateway at &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;gateway.spraay.app&lt;/a&gt; since early 2025. Today it has &lt;strong&gt;76+ paid endpoints across 16 categories&lt;/strong&gt; on 13 chains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Inference&lt;/strong&gt; — LLM access via OpenRouter and BlockRun (93 models)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RPC Access&lt;/strong&gt; — Blockchain data via Alchemy across 7 chains&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt; — Email via AgentMail, messaging via XMTP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt; — IPFS pinning via Pinata&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search/RAG&lt;/strong&gt; — Web intelligence via Tavily&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Robot Tasks&lt;/strong&gt; — Physical robot commissioning via RTP (Robot Task Protocol)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bitcoin&lt;/strong&gt; — Non-custodial PSBT batch payments via Mempool.space&lt;/li&gt;
&lt;li&gt;And 9 more categories covering oracles, compliance, compute, wallets, and more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every endpoint accepts USDC micropayments via x402. Any agent — OpenClaw, NemoClaw, LangChain, CrewAI, or a custom script — can call these endpoints without onboarding, without KYC, without a Stripe account.&lt;/p&gt;

&lt;p&gt;That's the point. &lt;strong&gt;The open web shouldn't require a permission slip to participate in the agent economy.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Week Matters
&lt;/h2&gt;

&lt;p&gt;In the span of 48 hours:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stripe/Paradigm&lt;/strong&gt; launched Tempo + MPP for institutional agent payments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mastercard&lt;/strong&gt; acquired stablecoin infrastructure firm BVNK for $1.8 billion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PayPal&lt;/strong&gt; expanded cross-border stablecoin payments to 70 countries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEC/CFTC&lt;/strong&gt; classified 16 crypto assets as commodities (not securities)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NVIDIA&lt;/strong&gt; projected $1 trillion in AI infrastructure spend through 2027&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every one of these events validates the same thesis: &lt;strong&gt;AI agents are becoming economic actors, and they need payment rails.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The institutional side is covered. Stripe, Mastercard, Visa, and PayPal are building for their customers.&lt;/p&gt;

&lt;p&gt;But who's building for the rest of the web?&lt;/p&gt;

&lt;p&gt;That's us. That's x402. That's every independent builder who ships a paid API endpoint and wants an AI agent to be able to pay for it — without asking anyone's permission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you want to explore agent payments via x402:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use the Spraay gateway:&lt;/strong&gt; &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;gateway.spraay.app&lt;/a&gt; — 76+ endpoints ready for agent consumption&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read the x402 spec:&lt;/strong&gt; &lt;a href="https://github.com/coinbase/x402" rel="noopener noreferrer"&gt;Coinbase x402 repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build your own x402 endpoint:&lt;/strong&gt; The facilitator pattern lets you add x402 payments to any Express.js server in ~20 lines of code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try the MCP server:&lt;/strong&gt; &lt;code&gt;@plagtech/spraay-x402-mcp&lt;/code&gt; on Smithery — 66 tools for AI agent integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent economy isn't coming. It launched this week. The question is whether it'll be open or closed.&lt;/p&gt;

&lt;p&gt;We're betting on open.&lt;/p&gt;




&lt;p&gt;💧 &lt;strong&gt;Spraay&lt;/strong&gt; is a multi-chain batch payment protocol and x402 gateway. &lt;a href="https://spraay.app" rel="noopener noreferrer"&gt;spraay.app&lt;/a&gt; | &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;gateway.spraay.app&lt;/a&gt; | &lt;a href="https://github.com/plagtech" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What's your take — will MPP and x402 coexist, or will one standard win? Let me know in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>x402</category>
      <category>ai</category>
      <category>stripe</category>
      <category>web3</category>
    </item>
    <item>
      <title>NVIDIA Just Bet $1 Trillion on Agentic AI — Here's Why AI Agents Will Need Payment Rails</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Thu, 19 Mar 2026 16:51:29 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/nvidia-just-bet-1-trillion-on-agentic-ai-heres-why-ai-agents-will-need-payment-rails-2a4g</link>
      <guid>https://dev.to/mr_hamlin/nvidia-just-bet-1-trillion-on-agentic-ai-heres-why-ai-agents-will-need-payment-rails-2a4g</guid>
      <description>&lt;h2&gt;
  
  
  The GTC 2026 Keynote Changed the Conversation
&lt;/h2&gt;

&lt;p&gt;NVIDIA's GTC conference is happening right now in San Jose, and Jensen Huang's opening keynote just redefined what "AI infrastructure" means.&lt;/p&gt;

&lt;p&gt;The headline number: &lt;strong&gt;$1 trillion in projected AI infrastructure orders through 2027&lt;/strong&gt; — double last year's estimate.&lt;/p&gt;

&lt;p&gt;But the real story isn't the hardware. It's the shift from &lt;em&gt;training AI models&lt;/em&gt; to &lt;em&gt;deploying AI agents that do real work.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here's what dropped:&lt;/p&gt;

&lt;h3&gt;
  
  
  Vera Rubin: The Agent Engine
&lt;/h3&gt;

&lt;p&gt;The new Vera Rubin platform is a full-stack system — seven chips, five rack-scale configurations, one supercomputer — designed specifically for &lt;strong&gt;agentic AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The numbers are staggering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5x inference performance over current Blackwell systems&lt;/li&gt;
&lt;li&gt;10x lower cost per token&lt;/li&gt;
&lt;li&gt;10x better performance per watt&lt;/li&gt;
&lt;li&gt;Ships second half of 2026&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jensen framed it clearly: the AI industry is shifting from training (building the brain) to inference (the brain doing work). And the work is increasingly &lt;strong&gt;autonomous&lt;/strong&gt; — agents that reason, plan, call tools, spawn sub-agents, and execute multi-step workflows without human supervision.&lt;/p&gt;

&lt;h3&gt;
  
  
  NemoClaw + OpenClaw: The Agent OS
&lt;/h3&gt;

&lt;p&gt;Jensen called OpenClaw — the open-source agentic AI framework — "the most popular open source project in the history of humanity." NVIDIA announced full platform support through &lt;strong&gt;NemoClaw&lt;/strong&gt;, their enterprise agent stack built on top of it.&lt;/p&gt;

&lt;p&gt;The vision: agents that can navigate file systems, run scheduled tasks, decompose problems, connect to external tools, and work overnight without supervision.&lt;/p&gt;

&lt;p&gt;Sound familiar? It should — this is exactly the kind of autonomous agent behavior that needs &lt;strong&gt;payment infrastructure&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Robotics: Disney's Olaf Walked On Stage
&lt;/h3&gt;

&lt;p&gt;In one of the keynote's most memorable moments, Disney's Olaf character — a free-roaming autonomous robot — joined Jensen on stage. Built with reinforcement learning on NVIDIA's Warp framework, Olaf previewed a March 29 debut at Disneyland Paris.&lt;/p&gt;

&lt;p&gt;Jensen predicted &lt;strong&gt;10 million digital workers operating alongside humans&lt;/strong&gt; — not just software agents, but physical robots. ABB, KUKA, Universal Robots, and Toyota Research Institute were all present. Over 110 robots were on the show floor.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Missing Piece: How Do Agents Pay?
&lt;/h2&gt;

&lt;p&gt;Here's what nobody at GTC is talking about: &lt;strong&gt;if AI agents are autonomous economic actors, they need payment rails.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think about the agent workflow Jensen described:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent receives a task&lt;/li&gt;
&lt;li&gt;Agent reasons about how to complete it&lt;/li&gt;
&lt;li&gt;Agent calls external tools and APIs&lt;/li&gt;
&lt;li&gt;Agent spawns sub-agents for subtasks&lt;/li&gt;
&lt;li&gt;Agent delivers the result&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 3 and 4 are where payments happen. Every API call, every tool invocation, every sub-agent delegation is a potential &lt;strong&gt;transaction&lt;/strong&gt;. And in a world of autonomous agents operating 24/7, these transactions can't require human approval for each one.&lt;/p&gt;

&lt;p&gt;This is exactly the problem that &lt;strong&gt;x402&lt;/strong&gt; solves.&lt;/p&gt;

&lt;h2&gt;
  
  
  x402: HTTP-Native Payments for Agents
&lt;/h2&gt;

&lt;p&gt;The x402 protocol (inspired by HTTP status code 402 "Payment Required") enables machine-to-machine micropayments at the HTTP layer. When an agent hits a paid endpoint, it receives a 402 response with payment details, automatically sends a USDC micropayment, and gets access — all without human intervention.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;Spraay's x402 gateway&lt;/a&gt; implements this across &lt;strong&gt;76+ paid endpoints&lt;/strong&gt; in 16 categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Inference&lt;/strong&gt; — agents paying for LLM access (OpenRouter, BlockRun)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RPC Access&lt;/strong&gt; — agents paying for blockchain data (Alchemy, 7 chains)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt; — agents paying to send emails (AgentMail) or messages (XMTP)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt; — agents paying for IPFS pinning (Pinata)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search/RAG&lt;/strong&gt; — agents paying for web intelligence (Tavily)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;And the newest category...&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Robot Task Protocol: Where GTC Meets x402
&lt;/h2&gt;

&lt;p&gt;RTP (Robot Task Protocol) is an open standard we built for &lt;strong&gt;AI agents to discover, commission, and pay for physical robot tasks&lt;/strong&gt; via x402 USDC micropayments.&lt;/p&gt;

&lt;p&gt;After watching Jensen's keynote, the timing couldn't be better. Here's how RTP maps to the GTC vision:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;NVIDIA's Vision&lt;/th&gt;
&lt;th&gt;RTP's Implementation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10M digital workers alongside humans&lt;/td&gt;
&lt;td&gt;Agents discover available robots via RTP registry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autonomous task execution&lt;/td&gt;
&lt;td&gt;Agents commission robot tasks via HTTP endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent-to-agent delegation&lt;/td&gt;
&lt;td&gt;Software agents delegate physical tasks to robot agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenClaw tool integration&lt;/td&gt;
&lt;td&gt;RTP endpoints are standard HTTP — any agent framework can call them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inference cost reduction&lt;/td&gt;
&lt;td&gt;x402 micropayments keep per-task costs minimal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The Flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Agent (OpenClaw/NemoClaw)
    ↓ discovers robot via RTP registry
    ↓ sends task request to robot endpoint
    ↓ receives 402 Payment Required
    ↓ pays $0.02 USDC via x402
    ↓ robot executes physical task
    ↓ agent receives confirmation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No human in the loop. No invoicing. No payment processing delays. Just an agent paying a robot to do work, settled in USDC on Base.&lt;/p&gt;

&lt;p&gt;We've already built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;rtp-spec&lt;/strong&gt; — the protocol specification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rtp-sdk&lt;/strong&gt; — TypeScript SDK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rtp-python-sdk&lt;/strong&gt; — Python SDK (PyPI: &lt;code&gt;spraay-rtp&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rtp-pi-demo&lt;/strong&gt; — working Raspberry Pi + servo motor demo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rtp-xmtp-mesh&lt;/strong&gt; — agent-to-robot messaging layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All open source under &lt;a href="https://github.com/plagtech" rel="noopener noreferrer"&gt;github.com/plagtech&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the 10x Token Cost Reduction Matters for Agent Payments
&lt;/h2&gt;

&lt;p&gt;One of Vera Rubin's most important specs is the &lt;strong&gt;10x reduction in inference token costs&lt;/strong&gt;. Here's why that matters for the payment layer:&lt;/p&gt;

&lt;p&gt;Right now, running an agentic workflow that calls 10 tools, reasons through 5 steps, and generates a final output might cost $0.15-$0.50 in inference. Add x402 payments for each tool call at $0.001-$0.01 each, and the total cost is $0.20-$0.60.&lt;/p&gt;

&lt;p&gt;With Vera Rubin's cost reduction, the inference portion drops to $0.015-$0.05. The x402 micropayments become a proportionally larger — but still tiny — part of the total cost. This makes the &lt;strong&gt;entire autonomous agent workflow economically viable&lt;/strong&gt; at massive scale.&lt;/p&gt;

&lt;p&gt;Jensen described this as the "inflection point of inference." For payment infrastructure builders, it's the inflection point of &lt;strong&gt;agent commerce&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Convergence
&lt;/h2&gt;

&lt;p&gt;Three forces are converging right now:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hardware&lt;/strong&gt; (NVIDIA Vera Rubin) — makes agent inference 10x cheaper&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulation&lt;/strong&gt; (SEC/CFTC commodity ruling) — gives USDC and ETH clear legal status for payments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure&lt;/strong&gt; (x402 + RTP) — provides the payment rails agents actually need&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The companies building at this intersection — where AI agents, physical robots, and on-chain payments meet — are building the infrastructure layer for the next economy.&lt;/p&gt;

&lt;p&gt;NVIDIA sees it. They're calling it the era of "AI factories." We're calling it the era of &lt;strong&gt;autonomous agent commerce&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;💧 &lt;strong&gt;Spraay&lt;/strong&gt; is the x402 payment gateway powering agent-to-agent and agent-to-robot transactions. Explore the &lt;a href="https://gateway.spraay.app" rel="noopener noreferrer"&gt;gateway&lt;/a&gt; or check out the &lt;a href="https://github.com/plagtech/rtp-spec" rel="noopener noreferrer"&gt;Robot Task Protocol&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;🤖 &lt;strong&gt;RTP&lt;/strong&gt; is open source and looking for contributors. If you're building with OpenClaw, NemoClaw, or any agentic framework — &lt;a href="https://github.com/plagtech/rtp-sdk" rel="noopener noreferrer"&gt;the SDK is ready&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Are you building AI agents that need to pay for things? Let's talk in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>crypto</category>
      <category>web3</category>
      <category>robotics</category>
    </item>
    <item>
      <title>🚀How Spraay.app Enables Bitcoin Batch Payments for Modern Apps</title>
      <dc:creator>Mr Hamlin</dc:creator>
      <pubDate>Wed, 18 Mar 2026 07:53:12 +0000</pubDate>
      <link>https://dev.to/mr_hamlin/how-spraayapp-enables-bitcoin-batch-payments-for-modern-apps-2n7e</link>
      <guid>https://dev.to/mr_hamlin/how-spraayapp-enables-bitcoin-batch-payments-for-modern-apps-2n7e</guid>
      <description>&lt;p&gt;In the world of crypto payments, efficiency isn’t just a nice-to-have — it’s everything. Whether you're running a marketplace, paying contributors, or distributing rewards, sending individual Bitcoin transactions can quickly become slow and expensive.&lt;/p&gt;

&lt;p&gt;That’s where &lt;strong&gt;batch payments&lt;/strong&gt; come in — and where &lt;strong&gt;spraay.app&lt;/strong&gt; stands out.&lt;/p&gt;

&lt;p&gt;Let’s break down how it works and why it matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What Are Bitcoin Batch Payments?
&lt;/h2&gt;

&lt;p&gt;Bitcoin batch payments allow you to send funds to &lt;strong&gt;multiple recipients in a single transaction&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 transaction → Alice&lt;/li&gt;
&lt;li&gt;1 transaction → Bob&lt;/li&gt;
&lt;li&gt;1 transaction → Carol&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 1 transaction → Alice, Bob, Carol&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why it matters:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lower transaction fees&lt;/li&gt;
&lt;li&gt;Faster processing&lt;/li&gt;
&lt;li&gt;Reduced blockchain congestion&lt;/li&gt;
&lt;li&gt;Better scalability for apps&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ The Problem with Traditional Payouts
&lt;/h2&gt;

&lt;p&gt;If your app sends payments one-by-one, you’ll run into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💸 High fees (especially during network congestion)&lt;/li&gt;
&lt;li&gt;🐢 Slow payout times&lt;/li&gt;
&lt;li&gt;🔁 Operational complexity&lt;/li&gt;
&lt;li&gt;📈 Poor scalability as your user base grows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For platforms handling &lt;strong&gt;dozens, hundreds, or thousands of payouts&lt;/strong&gt;, this becomes a serious bottleneck.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 How spraay.app Solves This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;spraay.app&lt;/strong&gt; introduces a streamlined way to handle Bitcoin payouts using batching under the hood.&lt;/p&gt;

&lt;p&gt;Instead of managing transactions manually, developers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Group multiple payments into a single request&lt;/li&gt;
&lt;li&gt;Automatically optimize transaction structure&lt;/li&gt;
&lt;li&gt;Reduce fees without sacrificing speed&lt;/li&gt;
&lt;li&gt;Scale payouts effortlessly&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔧 Example: Batch Payments in Action
&lt;/h2&gt;

&lt;p&gt;Here’s a simplified example of how a batch payout might look:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;payouts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bc1q...alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.001&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bc1q...bob&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.002&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bc1q...carol&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0015&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;spraay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;batchSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payouts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What happens behind the scenes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Inputs are consolidated&lt;/li&gt;
&lt;li&gt;Multiple outputs are created&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;single Bitcoin transaction&lt;/strong&gt; is broadcast&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📊 Real Benefits for Developers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Massive Fee Savings
&lt;/h3&gt;

&lt;p&gt;Batching reduces the data size per payment, which directly lowers fees.&lt;/p&gt;

&lt;p&gt;👉 In many cases, apps save &lt;strong&gt;30–75% on transaction costs&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Faster Payout Cycles
&lt;/h3&gt;

&lt;p&gt;Instead of waiting on multiple confirmations, everything is handled at once.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Cleaner Backend Logic
&lt;/h3&gt;

&lt;p&gt;No need to manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transaction queues&lt;/li&gt;
&lt;li&gt;Retry logic for multiple sends&lt;/li&gt;
&lt;li&gt;Fee estimation per user&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Built for Scale
&lt;/h3&gt;

&lt;p&gt;Whether you're paying:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creators&lt;/li&gt;
&lt;li&gt;Freelancers&lt;/li&gt;
&lt;li&gt;Affiliates&lt;/li&gt;
&lt;li&gt;DAO contributors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Batching makes high-volume payouts sustainable.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  💼 Payroll Systems
&lt;/h3&gt;

&lt;p&gt;Pay global teams in Bitcoin with a single transaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎮 Gaming &amp;amp; Rewards
&lt;/h3&gt;

&lt;p&gt;Distribute rewards to hundreds of players instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛒 Marketplaces
&lt;/h3&gt;

&lt;p&gt;Send seller payouts efficiently without eating into margins.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 Web3 Platforms
&lt;/h3&gt;

&lt;p&gt;Handle token or BTC distributions at scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Security &amp;amp; Reliability
&lt;/h2&gt;

&lt;p&gt;spraay.app focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure transaction construction&lt;/li&gt;
&lt;li&gt;Reliable broadcasting&lt;/li&gt;
&lt;li&gt;Fee optimization strategies&lt;/li&gt;
&lt;li&gt;Developer-friendly APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means you can focus on your product — not Bitcoin plumbing.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏁 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Bitcoin batching isn’t new — but tools like &lt;strong&gt;spraay.app&lt;/strong&gt; make it &lt;em&gt;actually usable&lt;/em&gt; for modern developers.&lt;/p&gt;

&lt;p&gt;If your app involves payouts at any scale, batching isn’t optional anymore — it’s a competitive advantage.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Batch payments = multiple payouts in one transaction&lt;/li&gt;
&lt;li&gt;Lower fees, faster execution&lt;/li&gt;
&lt;li&gt;spraay.app abstracts the complexity&lt;/li&gt;
&lt;li&gt;Perfect for scaling crypto-enabled apps&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you're building in crypto, it's worth asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are you still sending payments one-by-one… or batching like you should be?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>bitcoin</category>
      <category>fintech</category>
      <category>web3</category>
      <category>payments</category>
    </item>
  </channel>
</rss>
