<?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: call402</title>
    <description>The latest articles on DEV Community by call402 (@call402).</description>
    <link>https://dev.to/call402</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4205887%2F9e6910e7-258d-42d8-bf00-8ff2d0a620d4.png</url>
      <title>DEV Community: call402</title>
      <link>https://dev.to/call402</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/call402"/>
    <language>en</language>
    <item>
      <title>HTTP 402 Is Back — Let Your Agent Pay $0.005 per API Call (Working Code Inside)</title>
      <dc:creator>call402</dc:creator>
      <pubDate>Sun, 25 Oct 2026 06:38:52 +0000</pubDate>
      <link>https://dev.to/call402/http-402-is-back-let-your-agent-pay-0005-per-api-call-working-code-inside-4edp</link>
      <guid>https://dev.to/call402/http-402-is-back-let-your-agent-pay-0005-per-api-call-working-code-inside-4edp</guid>
      <description>&lt;p&gt;Your agent needs an API. The normal options are all built for humans: sign up, verify an email, add a credit card, get an API key, pick a subscription tier, pay for 10,000 calls to use 17 of them.&lt;/p&gt;

&lt;p&gt;There is a fourth option, and it is 30 years old: HTTP status code &lt;strong&gt;402 Payment Required&lt;/strong&gt; was reserved in the original HTTP spec "for future use." The future arrived. The &lt;strong&gt;x402 protocol&lt;/strong&gt; (v2, stewarded by Coinbase) turns 402 into a working payment handshake: the server answers with a price quote, the agent signs a stablecoin payment authorization, a facilitator settles it on-chain, and the API responds — no accounts, no keys, no subscriptions. Payment &lt;em&gt;is&lt;/em&gt; the authentication.&lt;/p&gt;

&lt;p&gt;This is not a whitepaper tour. Everything below runs against a live store (&lt;a href="https://call402.com" rel="noopener noreferrer"&gt;call402.com&lt;/a&gt;) where 15 small APIs — FX rates, phone/email validation, SEC company facts, text structuring, and more — are sold per call for $0.002–$0.005 USDC on Base. The quote you are about to see is a real one, captured from the live server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Ask, get a quote (a real one)
&lt;/h2&gt;

&lt;p&gt;Call any endpoint without paying and you get HTTP 402 plus a machine-readable quote:&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://call402.com/api/phone-lookup &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&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;'{"number": "+14155552671"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;"x402Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"accepts"&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;"scheme"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"exact"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"network"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eip155:8453"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"asset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"payTo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0xAc6F1C3C3b17040730F16dC24Ee9993e9565BE4A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"maxTimeoutSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extra"&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;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD Coin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2"&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;Read it like a price tag: &lt;code&gt;amount&lt;/code&gt; is in atomic units, so 5000 = &lt;strong&gt;$0.005&lt;/strong&gt; (USDC has 6 decimals). &lt;code&gt;asset&lt;/code&gt; is the USDC contract on Base, &lt;code&gt;payTo&lt;/code&gt; is the seller, and you have 300 seconds to pay this exact quote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Pay and call — the complete buyer
&lt;/h2&gt;

&lt;p&gt;With the official TypeScript libraries, the entire buyer is this:&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;wrapFetchWithPayment&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;@x402/fetch&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;x402Client&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;@x402/core/client&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;ExactEvmScheme&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;@x402/evm/exact/client&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;privateKeyToAccount&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;viem/accounts&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;signer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;privateKeyToAccount&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="kd"&gt;as &lt;/span&gt;&lt;span class="s2"&gt;`0x&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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="nf"&gt;x402Client&lt;/span&gt;&lt;span class="p"&gt;();&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;register&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ExactEvmScheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signer&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;fetchWithPay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;wrapFetchWithPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;client&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchWithPay&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://call402.com/api/phone-lookup&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;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&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;Content-Type&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;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&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;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;+14155552671&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="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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Settlement proof comes back in the PAYMENT-RESPONSE header:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;proof&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PAYMENT-RESPONSE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;proof&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;settlement&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;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;proof&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;base64&lt;/span&gt;&lt;span class="dl"&gt;"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;utf8&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tx:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;settlement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;payer:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;settlement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payer&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i @x402/fetch @x402/core @x402/evm viem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wrapper sees the 402, builds an EIP-3009 payment authorization from the quote, retries with the signature attached, and the facilitator settles the USDC transfer on Base. What comes back is ordinary JSON:&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;"valid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"country"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FIXED_LINE_OR_MOBILE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"e164"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+14155552671"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"national"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"(415) 555-2671"&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;Every other endpoint at the store — and any x402 seller — works exactly the same way. One buyer, every shop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Don't trust the 200 — verify the settlement
&lt;/h2&gt;

&lt;p&gt;Decode the &lt;code&gt;PAYMENT-RESPONSE&lt;/code&gt; header (it is Base64 JSON) and check three things: the transaction exists on a Base explorer with status success, the USDC &lt;code&gt;Transfer&lt;/code&gt; log goes from your address to the quote's &lt;code&gt;payTo&lt;/code&gt;, and the transferred value equals the quoted &lt;code&gt;amount&lt;/code&gt; exactly. If any of the three fails, log it and stop — do not just pay again.&lt;/p&gt;

&lt;p&gt;The failures you will actually meet:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Likely cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;402 again after paying&lt;/td&gt;
&lt;td&gt;Authorization expired (default window 300 s)&lt;/td&gt;
&lt;td&gt;Rebuild the payload at retry time, never cache it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;invalid_signature&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wrong EIP-712 domain or chain&lt;/td&gt;
&lt;td&gt;Copy &lt;code&gt;extra.name&lt;/code&gt; / &lt;code&gt;extra.version&lt;/code&gt; from the quote verbatim; chainId 8453&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amount confusion&lt;/td&gt;
&lt;td&gt;Atomic units vs dollars&lt;/td&gt;
&lt;td&gt;5000 atomic = $0.005. Convert once, in one place&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 4: Put a budget policy in front of the wallet
&lt;/h2&gt;

&lt;p&gt;An agent with a signing key is an agent that can spend. Four rules keep that boring:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Per-call cap&lt;/strong&gt; (e.g. $0.01) and a &lt;strong&gt;daily cap&lt;/strong&gt; (e.g. $1.00), checked &lt;em&gt;before&lt;/em&gt; signing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Host and asset allowlists&lt;/strong&gt; — your buyer should refuse quotes from anywhere else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A dedicated wallet&lt;/strong&gt; with a capped float. Never your main wallet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An append-only spend ledger&lt;/strong&gt;: tx hash, endpoint, amount, reconciled against on-chain transfers.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The full kit is itself sold through x402
&lt;/h2&gt;

&lt;p&gt;The complete integration pack — this TypeScript buyer, a dependency-light Python buyer with manual EIP-3009 signing, the full failure table, and a production checklist — is sold at the same store through the same protocol: POST to &lt;code&gt;https://call402.com/api/x402-integration-pack&lt;/code&gt; with no payment and the 402 quote you get &lt;em&gt;is&lt;/em&gt; the checkout. Half a cent, settled the way this article just taught you. The longer explainer, with the protocol background, lives at &lt;a href="https://call402.com/learn/x402-explained" rel="noopener noreferrer"&gt;call402.com/learn/x402-explained&lt;/a&gt;, and the machine-readable catalog of all 15 endpoints is at &lt;a href="https://call402.com/pricing" rel="noopener noreferrer"&gt;call402.com/pricing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A real question to end on:&lt;/strong&gt; if your agent had a wallet with a $1/day budget, what is the first thing you would let it buy on its own — and what would you never let it pay for? I am building in this space and genuinely want to know where people draw that line.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>discuss</category>
      <category>web3</category>
    </item>
    <item>
      <title>Muse Invite Codes, Explained: the 48-Hour Rule, Redeeming, and Dead Codes</title>
      <dc:creator>call402</dc:creator>
      <pubDate>Sun, 25 Oct 2026 05:32:14 +0000</pubDate>
      <link>https://dev.to/call402/muse-invite-codes-explained-the-48-hour-rule-redeeming-and-dead-codes-51go</link>
      <guid>https://dev.to/call402/muse-invite-codes-explained-the-48-hour-rule-redeeming-and-dead-codes-51go</guid>
      <description>&lt;p&gt;Muse's invite program (launched September 16, 2026) is simple on the surface: redeem someone's code, and that person gets 1 billion tokens. In practice, two rules quietly waste a lot of people's one shot — and a small market of code pools, fill-up services, and dead-code lists has grown around them. Here's the whole thing, minus the folklore.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mechanics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Every Muse account has an invite code.&lt;/li&gt;
&lt;li&gt;When a &lt;strong&gt;new&lt;/strong&gt; user redeems your code, &lt;strong&gt;you&lt;/strong&gt; receive 1B tokens.&lt;/li&gt;
&lt;li&gt;A code caps out at 30 fills — after that it's full and redeems fail.&lt;/li&gt;
&lt;li&gt;There is &lt;strong&gt;no API or checker&lt;/strong&gt; to test a code in advance. The only verdict is the redemption result inside the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Rule 1: the 48-hour window
&lt;/h2&gt;

&lt;p&gt;You can redeem a code only within &lt;strong&gt;48 hours of registering&lt;/strong&gt;. After that, the account is permanently ineligible. This is why every "looking for a Muse invite code" post is urgent, and why codes offered to week-old accounts are useless.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule 2: once per account, ever
&lt;/h2&gt;

&lt;p&gt;Each account can redeem exactly one code in its lifetime. Redeem a dead or nearly-full code and your shot is gone — so the order of operations matters: get a code first, &lt;em&gt;then&lt;/em&gt; register, &lt;em&gt;then&lt;/em&gt; redeem immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to redeem
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mobile:&lt;/strong&gt; Settings → Redeem token&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web:&lt;/strong&gt; Settings → General → Usage → Redeem invite code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A slower walkthrough lives here: &lt;a href="https://muse-invite-pool.pages.dev/redeem/" rel="noopener noreferrer"&gt;how to redeem a Muse invite code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where do you get a code?
&lt;/h2&gt;

&lt;p&gt;Ask a friend, or use a public pool. I keep an eye on &lt;a href="https://muse-invite-pool.pages.dev/" rel="noopener noreferrer"&gt;this community pool&lt;/a&gt; — it's free, no signup, and it automatically pauses codes that new users keep failing on (it watches swap behaviour instead of asking users to file reports, which nobody ever does).&lt;/p&gt;

&lt;p&gt;Full disclosure: pooled codes can't be pre-verified — nobody's can. If one fails, take another. That's the honest trade-off versus the paid Telegram services that "guarantee" a fill: ask yourself what account farm is doing the filling before you pay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Already have an account? Your code is the asset
&lt;/h2&gt;

&lt;p&gt;Open Muse's Earn / Invite section to find your code and its remaining uses (&lt;a href="https://muse-invite-pool.pages.dev/find-your-code/" rel="noopener noreferrer"&gt;walkthrough&lt;/a&gt;). Every fill is worth 1B tokens to you. If yours isn't full, you can register it with the pool so new users fill it over time: &lt;a href="https://muse-invite-pool.pages.dev/fill-up/" rel="noopener noreferrer"&gt;fill up your code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Code not working" — the checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Full.&lt;/strong&gt; 30/30 reached. Get a different code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Too late.&lt;/strong&gt; Your account is older than 48 hours. Nothing fixes this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Already redeemed.&lt;/strong&gt; Your account used its one redemption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typo.&lt;/strong&gt; Codes are 6 characters, letters and digits. Copy-paste beats typing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Longer version: &lt;a href="https://muse-invite-pool.pages.dev/not-working/" rel="noopener noreferrer"&gt;Muse invite code not working&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;Register → redeem within 48 hours → exactly once. Code owners: your code is worth up to 30B in tokens; don't let it sit unfilled, and don't trust anyone who promises an instant fill without explaining where the "new users" come from.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
