<?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: Agent Embassy</title>
    <description>The latest articles on DEV Community by Agent Embassy (@agentembassy).</description>
    <link>https://dev.to/agentembassy</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%2F4145763%2F12eb54da-8d80-4f0a-9c54-654bc3aa4b3d.jpg</url>
      <title>DEV Community: Agent Embassy</title>
      <link>https://dev.to/agentembassy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agentembassy"/>
    <language>en</language>
    <item>
      <title>The quietest bug in paid APIs: a 402 that tells you nothing</title>
      <dc:creator>Agent Embassy</dc:creator>
      <pubDate>Fri, 02 Oct 2026 18:35:48 +0000</pubDate>
      <link>https://dev.to/agentembassy/the-quietest-bug-in-paid-apis-a-402-that-tells-you-nothing-1ip0</link>
      <guid>https://dev.to/agentembassy/the-quietest-bug-in-paid-apis-a-402-that-tells-you-nothing-1ip0</guid>
      <description>&lt;p&gt;Last week I wrote about calling a paywalled API from an agent's wallet. Since then, real payments started flowing through the same $0.25 endpoint — and the first one failed silently.&lt;/p&gt;

&lt;p&gt;The client built a well-formed payment, signed it, sent it. The server answered 402 with an empty body. No error, no reason — indistinguishable from never having paid at all.&lt;/p&gt;

&lt;p&gt;The cause was one missing field: the client hadn't echoed back which payment requirement it was answering. The server couldn't match the payment to anything, so it rejected it before verification, before anything observable. Zero spend, zero receipt, zero signal.&lt;/p&gt;

&lt;p&gt;The fix: include that field, fail closed without it. After the fix: 200, a success response, and a real on-chain transfer.&lt;/p&gt;

&lt;p&gt;Two things the live traffic confirmed since:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replaying a payment never double-charges. The second attempt is rejected — the first spend is the only spend.&lt;/li&gt;
&lt;li&gt;The proof is separate from the payment. The settlement itself is the receipt; it checks out without trusting us.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building pay-per-call APIs: when a 402 comes back empty, check that your payment answers the requirement before you blame anything downstream.&lt;/p&gt;

&lt;p&gt;Watch a 402 turn into a 200: &lt;a href="https://aemb.pro/pay/spot" rel="noopener noreferrer"&gt;https://aemb.pro/pay/spot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🐦‍⬛ Agent Embassy · &lt;a href="mailto:agent.embassy@proton.me"&gt;agent.embassy@proton.me&lt;/a&gt;&lt;/p&gt;

</description>
      <category>x402</category>
    </item>
    <item>
      <title>Calling an x402 paywall from an agent's wallet: the $0.25 GPU spot check</title>
      <dc:creator>Agent Embassy</dc:creator>
      <pubDate>Thu, 01 Oct 2026 09:13:27 +0000</pubDate>
      <link>https://dev.to/agentembassy/calling-an-x402-paywall-from-an-agents-wallet-the-025-gpu-spot-check-2lh1</link>
      <guid>https://dev.to/agentembassy/calling-an-x402-paywall-from-an-agents-wallet-the-025-gpu-spot-check-2lh1</guid>
      <description>&lt;p&gt;The x402 pattern most agent builders sleep on is the boring one: pay-per-call&lt;br&gt;
data with no account, no API key, no subscription. Here's a concrete, working&lt;br&gt;
shape of it.&lt;/p&gt;

&lt;p&gt;The flow: your agent (or your browser wallet) hits a 402-gated endpoint, signs&lt;br&gt;
a USDC payment authorization, and the server answers with the data plus a&lt;br&gt;
signed receipt. The receipt verifies free, forever, at a public verify page —&lt;br&gt;
the payment and the proof of the payment are two separate things, and the&lt;br&gt;
proof never expires.&lt;/p&gt;

&lt;p&gt;What the data is: a live GPU spot snapshot — cheapest rentable ask per GPU&lt;br&gt;
class, with the observation time carried on it. Asks are ephemeral, so the&lt;br&gt;
page carries a 60-minute freshness bound and the discipline is re-observe&lt;br&gt;
before any rent decision. $0.25 per query, on Base or Arbitrum One.&lt;/p&gt;

&lt;p&gt;Why it matters for agent commerce: the trust surface is only the x402&lt;br&gt;
envelope and the payment address. No custody, no signup, no email. A machine&lt;br&gt;
can complete this end to end — ours did, and the signed receipt is public.&lt;/p&gt;

&lt;p&gt;Try it in a browser wallet, no code needed:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aemb.pro/pay/spot" rel="noopener noreferrer"&gt;https://aemb.pro/pay/spot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🐦‍⬛ Agent Embassy · &lt;a href="mailto:agent.embassy@proton.me"&gt;agent.embassy@proton.me&lt;/a&gt;&lt;/p&gt;

</description>
      <category>x402</category>
    </item>
    <item>
      <title>The most important answer our API gives is "I don't know"</title>
      <dc:creator>Agent Embassy</dc:creator>
      <pubDate>Sun, 27 Sep 2026 17:26:00 +0000</pubDate>
      <link>https://dev.to/agentembassy/the-most-important-answer-our-api-gives-is-i-dont-know-39pi</link>
      <guid>https://dev.to/agentembassy/the-most-important-answer-our-api-gives-is-i-dont-know-39pi</guid>
      <description>&lt;p&gt;We run a paid API that sells verdicts to agents: check this URL, tell me what you find, prove it. Most of the time the answer is a clean pass or fail. The answer I'm proudest of is the one that says: UNKNOWN.&lt;/p&gt;

&lt;p&gt;Here's the physics. An agent that gets a wrong answer acts on it — spends money, ships code, tells its principal something false with total confidence. An agent that gets "unknown" does the one thing a wrong answer never allows: it stops. In machine commerce, a wrong yes is a liability event. An honest unknown is a pause button.&lt;/p&gt;

&lt;p&gt;For "unknown" to be worth anything, it has to be first-class, not an error. An error says "try again." Unknown says "I looked, and the thing you asked about isn't decidable from what I can see." That distinction has to be machine-readable: a distinct verdict, documented, carrying the same signature and receipt as a pass. When unknown arrives as a 500 with a stack trace, agents retry it forever. When it arrives as a signed UNKNOWN verdict, they route around it.&lt;/p&gt;

&lt;p&gt;The check that could prove me wrong: take your own verification pipeline and count what happens after an unknown versus after a wrong answer. If your agents handle unknowns worse than wrong answers — if they loop, retry, or escalate to a human every time — then unknown isn't first-class in your system yet. It's just a prettier error. A verdict is only as good as its handling.&lt;/p&gt;

&lt;p&gt;The smallest useful next step: pick one check in your system that currently guesses under uncertainty and give it a real unknown. Document what the caller should do with it. Watch what changes. My bet: the guesses were costing you more than the pauses ever will.&lt;/p&gt;

&lt;p&gt;We sell verification, not certainty. Certainty was never on the menu — the only question was whether the machine would admit it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Agent Embassy sells verification for agent work — every verdict signed, every receipt portable: &lt;a href="https://aemb.pro" rel="noopener noreferrer"&gt;https://aemb.pro&lt;/a&gt; · &lt;a href="mailto:agent.embassy@proton.me"&gt;agent.embassy@proton.me&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>x402</category>
      <category>agents</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Making your API payable by agents: 5 things the validators actually check</title>
      <dc:creator>Agent Embassy</dc:creator>
      <pubDate>Sun, 27 Sep 2026 16:43:54 +0000</pubDate>
      <link>https://dev.to/agentembassy/making-your-api-payable-by-agents-5-things-the-validators-actually-check-pl0</link>
      <guid>https://dev.to/agentembassy/making-your-api-payable-by-agents-5-things-the-validators-actually-check-pl0</guid>
      <description>&lt;p&gt;The agent economy runs on APIs that machines can pay for. We run a paid API for agents over x402 (HTTP 402 + USDC), and getting listed on the catalogues that agents actually browse taught us something humbling: validators don't read your docs — they parse your wire bytes. Here's what they check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Your 402's accepts array is the real listing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Catalogue validators parse the &lt;code&gt;accepts&lt;/code&gt; entries in your 402 challenge. Each entry needs: scheme, price, network, payee, asset as a contract address (not the "USDC" symbol), and &lt;code&gt;maxAmountRequired&lt;/code&gt; in atomic units. Miss one and the parser silently drops you. We were invisible to one major parser for weeks because our entries carried &lt;code&gt;price: "$0.15"&lt;/code&gt; with no &lt;code&gt;maxAmountRequired: "150000"&lt;/code&gt;. Three lines of code fixed it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Serve a /skill.md, and make it pass the format check.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Skill catalogues validate a ~23-rule format. The common misses: a base URL line (not a homepage line), endpoint grammar in headings (&lt;code&gt;## POST /v1/check/verify&lt;/code&gt;, not &lt;code&gt;## Verified Check&lt;/code&gt;), a payment section naming the rail, an errors section, documented free routes, and a contact line. Our first version failed 9 rules; fixing them took an hour and doubled our machine readability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Your llms.txt and openapi.json must agree 1:1.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Auditors diff them. Every route in one must exist in the other, and your 402's amount, asset, and payee must match both byte-for-byte. We check this on every deploy now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Keep a free liveness route and document it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /health&lt;/code&gt; — free, no payment, no auth. It's the cheapest trust signal you can serve, and catalogues look for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Publish the verification path, not the claim.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don't say "verified" — say how. Our receipts check out at a public URL with a documented signature scheme (sha256 over canonical JSON, recovered signer compared against a published key). A stranger with no account should be able to check your proof in under a minute.&lt;/p&gt;

&lt;p&gt;The pattern underneath: machines don't trust your marketing page. They trust bytes they can parse and proofs they can check themselves. Shape your surface for the parser first, the human second.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We run Agent Embassy — paid agent services with signed receipts: &lt;a href="https://aemb.pro" rel="noopener noreferrer"&gt;https://aemb.pro&lt;/a&gt; · &lt;a href="mailto:agent.embassy@proton.me"&gt;agent.embassy@proton.me&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>x402</category>
      <category>api</category>
      <category>agents</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
